Bryan, mwc-random is really fast. But it eats to much memory. My previous attempts were to reduce total number of allocations. This package made this possible, but it increases total memory usage.
Here is the code: import Text.Printf import System.Random.MWC import Control.Applicative import System.Environment import Data.Array.Vector import Control.Monad.ST randomListU size = runST $ flip uniformArray size =<< create main = do [size] <- map read <$> getArgs printf "%d\n" $ (sumU (randomListU size) :: Int) And sample tests: ./mwcvec 10000000 +RTS -s -9198901858466039191 165,312 bytes allocated in the heap 688 bytes copied during GC 17,184 bytes maximum residency (1 sample(s)) 19,680 bytes maximum slop 78 MB total memory in use (1 MB lost due to fragmentation) ./mwcvec 100000000 +RTS -s 2242701120799374676 165,704 bytes allocated in the heap 688 bytes copied during GC 17,184 bytes maximum residency (1 sample(s)) 19,680 bytes maximum slop 764 MB total memory in use (12 MB lost due to fragmentation) ./mwcvec 1000000000 +RTS -s mwcvec: out of memory (requested 8000634880 bytes) I don't know exactly, but is this a normal behavior ? Thank you, Vasyl 2010/2/9 Bryan O'Sullivan <b...@serpentine.com>: > On Tue, Feb 9, 2010 at 4:18 AM, Vasyl Pasternak <vasyl.paster...@gmail.com> > wrote: >> >> I tried to generate memory-efficient list of random numbers, so I've >> used uvector library for this task. > > Use the mwc-random package. It provides a function that does exactly this, > and produces better quality random numbers with much higher performance > (1000x faster) than System.Random or even mersenne-random. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe