
On Thu, Aug 13, 2009 at 1:51 PM, Jake McArthur
John Lato wrote:
This might work with UVector (I intend to try it this evening); I don't know how well the fusion framework will hold up in class dictionaries.
Do report back, as I am curious as well.
I have just recently hacked together a small test. The code is at http://inmachina.net/~jwlato/haskell/testUVector.hs The task is to generate a list of 1 million Ints (really 1e6-1), map a multiply by 2, and check to see if any values equal 0. The uvector code is (essentially):
let res = anyU (== ( 0:: Int)) . mapU (* 2) . enumFromToU 1 $ 1000000
and by itself runs in a small fraction of a second. Technically the start and stop values are specified on the command line, but these are the values I predominantly used. Here are results for some other modes: ListLike.map: significantly slower, and runs out of memory (memory request failed) ListLike.rigidMap: appears to be the same as using mapU directly mapReduce: significantly slower (the 1e6 element test completed after about an hour), but ran in a very small amount of memory. It looks like GHC was able to see through the rigidMap function at least, but I don't know if this would still work with the instance defined in another file. Cheers, John