GHC benchmarks
Ketil Malde
ketil+haskell at ii.uib.no
Fri Oct 12 04:58:52 EDT 2007
Simon Marlow <simonmarhaskell at gmail.com> writes:
> Not so much code size, but data size (heap size, to be more
> precise).
Of course.
There was some talk about storing tags in pointers for 6.8, I couldn't
find the reference, but I wonder if that would help my situation?
> It would be interesting to know how much time is spent in the GC - run
> the program with +RTS -sstderr.
MUT time decreases a bit (131 to 127s) for x86_64, but GC time
increases a lot (98 to 179s).
i686 version:
----------------------------------------
94,088,199,152 bytes allocated in the heap
22,294,740,756 bytes copied during GC (scavenged)
2,264,823,784 bytes copied during GC (not scavenged)
124,747,644 bytes maximum residency (4138 sample(s))
179962 collections in generation 0 ( 67.33s)
4138 collections in generation 1 ( 30.92s)
248 Mb total memory in use
INIT time 0.00s ( 0.00s elapsed)
MUT time 131.53s (133.03s elapsed)
GC time 98.25s (100.13s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 229.78s (233.16s elapsed)
%GC time 42.8% (42.9% elapsed)
Alloc rate 715,345,865 bytes per MUT second
Productivity 57.2% of total user, 56.4% of total elapsed
----------------------------------------
x86_64 version:
----------------------------------------
173,790,326,352 bytes allocated in the heap
59,874,348,560 bytes copied during GC (scavenged)
5,424,298,832 bytes copied during GC (not scavenged)
247,477,744 bytes maximum residency (9856 sample(s))
331264 collections in generation 0 (111.51s)
9856 collections in generation 1 ( 67.80s)
582 Mb total memory in use
INIT time 0.00s ( 0.00s elapsed)
MUT time 127.20s (127.76s elapsed)
GC time 179.32s (179.63s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 306.52s (307.39s elapsed)
%GC time 58.5% (58.4% elapsed)
Alloc rate 1,366,233,874 bytes per MUT second
Productivity 41.5% of total user, 41.4% of total elapsed
----------------------------------------
I've also added results from the 64 bit ghc-6.8.20071011 binary
snapshot, which shows some nice improvements, with one benchmark
improving by 30%(!).
----------------------------------------
151,807,589,712 bytes allocated in the heap
50,687,462,360 bytes copied during GC (scavenged)
4,472,003,520 bytes copied during GC (not scavenged)
256,532,480 bytes maximum residency (6805 sample(s))
289342 collections in generation 0 ( 89.30s)
6805 collections in generation 1 ( 60.26s)
602 Mb total memory in use
INIT time 0.00s ( 0.00s elapsed)
MUT time 83.79s ( 84.36s elapsed)
GC time 149.57s (151.10s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 233.35s (235.47s elapsed)
%GC time 64.1% (64.2% elapsed)
Alloc rate 1,811,779,785 bytes per MUT second
Productivity 35.9% of total user, 35.6% of total elapsed
----------------------------------------
>> I'll add some more benchmarks
And I did. Below is a bit more detail from the log. The "rc hash
counts" traverse a bytestring, hashing fixed-size words into Integers.
As you can see, I haven't yet gotten the SPECIALIZE pragma to work
correctly :-). The "global alignment" is the previous test,
performing global (Needleman-Wunsch) alignment on pairs of sequences
of length 100 (short) or 1000 (long), implementing the dynamic
programming matrix as a list of lists.
====================
Start:Fri Oct 12 08:48:36 CEST 2007
Linux nmd9999 2.6.20-16-generic #2 SMP Fri Aug 31 00:55:27 UTC 2007 i686 GNU/Linux
ghc 6.6
--- Sequence bench ---
rc hash counts int (8) ..... OK, passed 10 tests, CPU time: 34.526157s
rc hash counts int (16) ..... OK, passed 10 tests, CPU time: 34.746172s
rc hash counts (16) ..... OK, passed 10 tests, CPU time: 34.642164s
rc hash counts (32) ..... OK, passed 10 tests, CPU time: 35.378212s
Sequence bench totals, CPU time: 139.292705s, wall clock: 139 secs
--- Alignment bench ---
global alignment, short ..... OK, passed 10 tests, CPU time: 2.696168s
global alignment, long ...... OK, passed 10 tests, CPU time: 90.481655s
Alignment bench totals, CPU time: 93.177823s, wall clock: 94 secs
Total for all tests, CPU time: 232.474528s, wall clock: 233 secs
End:Fri Oct 12 08:52:29 CEST 2007
====================
Start:Fri Oct 12 09:52:33 CEST 2007
Linux nmd9999.imr.no 2.6.22-13-generic #1 SMP Thu Oct 4 17:52:26 GMT 2007 x86_64 GNU/Linux
ghc 6.6.1
--- Sequence bench ---
rc hash counts int (8) ..... OK, passed 10 tests, CPU time: 36.634289s
rc hash counts int (16) ..... OK, passed 10 tests, CPU time: 36.590286s
rc hash counts (16) ..... OK, passed 10 tests, CPU time: 36.946309s
rc hash counts (32) ..... OK, passed 10 tests, CPU time: 37.402338s
Sequence bench totals, CPU time: 147.577222s, wall clock: 148 secs
--- Alignment bench ---
global alignment, short ..... OK, passed 10 tests, CPU time: 3.564223s
global alignment, long ...... OK, passed 10 tests, CPU time: 156.101756s
Alignment bench totals, CPU time: 159.665979s, wall clock: 159 secs
Total for all tests, CPU time: 307.247201s, wall clock: 307 secs
End:Fri Oct 12 09:57:40 CEST 2007
====================
Start:Fri Oct 12 10:51:27 CEST 2007
Linux nmd9999.imr.no 2.6.22-13-generic #1 SMP Thu Oct 4 17:52:26 GMT 2007 x86_64 GNU/Linux
ghc 6.8.0.20071011
--- Sequence bench ---
rc hash counts int (8) ..... OK, passed 10 tests, CPU time: 22.773423s
rc hash counts int (16) ..... OK, passed 10 tests, CPU time: 22.657416s
rc hash counts (16) ..... OK, passed 10 tests, CPU time: 22.513407s
rc hash counts (32) ..... OK, passed 10 tests, CPU time: 23.009438s
Sequence bench totals, CPU time: 90.953684s, wall clock: 91 secs
--- Alignment bench ---
global alignment, short ..... OK, passed 10 tests, CPU time: 3.168198s
global alignment, long ...... OK, passed 10 tests, CPU time: 140.808799s
Alignment bench totals, CPU time: 143.976997s, wall clock: 144 secs
Total for all tests, CPU time: 234.930681s, wall clock: 235 secs
End:Fri Oct 12 10:55:23 CEST 2007
-k
--
If I haven't seen further, it is by standing in the footprints of giants
More information about the Glasgow-haskell-users
mailing list