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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to