ecstasy
ecstasy copied to clipboard
introduce parallel computing
For the sake of execution times of the functions emap, efor and eover I took the liberty of making them parallel. Can you have a look at it and tell me if I didn't screw up too much?
Thanks in advance.
Hiya! Thanks for the PR. Have you noticed a significant perf improvement from this change?
There's the beginnings of a benchmark suite here: https://github.com/isovector/ecstasy/blob/insanity2/bench/Main.hs
That being said, I'm pretty aware that ecstasy's performance is balls---It's something like 100x slower than apecs. I've been doing a lot of perf work recently and been getting 100x perf gains in other domains. It seems to me like this approach would work just as well in ecstasy, and for bonus points we can use selective functors to statically analyze the queries.
This is work I really want to get started on---probably this week. If this PR isn't super important to you, I think we might both benefit from holding off and putting it into the 0.3.0 version. What do you think?
Please don't take my previous comment as rant about the performance. I know this library is experimental and I could use apecs, but I like your approach better. It saves me quite some boilerplate. I am more than willing to help out developing this library further, but I am only a Haskell hobbyist with no formal training in this language (and only little education in Computer science in general, speaking of qualification).
As for a performance boost from this PR, I think that I reached some minor speedup, but that's very subjective, since I don't have any benchmarks set up.
To conclude: I'm fine with saving this PR for later and poke me if you think I might be helpful in one way or another.