
Ross Mellgren wrote:
Duncan, I think you must have some magics -- on my machine the original code also takes forever. Running with +RTS -S indicates it's allocating several gig of memory or more.
Applying some bang patterns gives me ~8s for 10^8 and somewhat more than a minute for 10^9
It works great for me. 64 bit, GHC 6.10.1, no bang patterns or other magic. Works about the same with both Int and Int64. % time ./ctest 3141592649589764829 real 0m2.614s user 0m2.610s sys 0m0.003s % time ./hstest 3141592653589764829 real 0m3.878s user 0m3.870s sys 0m0.003s % ./hstest +RTS -S ./hstest +RTS -S Alloc Copied Live GC GC TOT TOT Page Flts bytes bytes bytes user elap user elap 3141592653589764829 8512 688 17136 0.00 0.00 3.94 3.94 0 0 (Gen: 1) 0 0.00 0.00 8,512 bytes allocated in the heap 688 bytes copied during GC 17,136 bytes maximum residency (1 sample(s)) 19,728 bytes maximum slop 1 MB total memory in use (0 MB lost due to fragmentation) Generation 0: 0 collections, 0 parallel, 0.00s, 0.00s elapsed Generation 1: 1 collections, 0 parallel, 0.00s, 0.00s elapsed INIT time 0.00s ( 0.00s elapsed) MUT time 3.94s ( 3.94s elapsed) GC time 0.00s ( 0.00s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 3.94s ( 3.94s elapsed) %GC time 0.0% (0.0% elapsed) Alloc rate 2,158 bytes per MUT second Productivity 99.9% of total user, 100.0% of total elapsed