diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2014-10-19 20:37:40 +0200 |
---|---|---|
committer | Herbert Valerio Riedel <hvr@gnu.org> | 2014-11-12 11:03:42 +0100 |
commit | c774b28f76ee4c220f7c1c9fd81585e0e3af0e8a (patch) | |
tree | 9fc156d8e3c7d8fd414b572826f139c1efa5f34c /testsuite/tests/perf/space_leaks/all.T | |
parent | fcfc87dce752c3c1702eeb54d1023213729f1832 (diff) | |
download | haskell-c774b28f76ee4c220f7c1c9fd81585e0e3af0e8a.tar.gz |
Implement new integer-gmp2 from scratch (re #9281)
This is done as a separate `integer-gmp2` backend library because it
turned out to become a complete rewrite from scratch.
Due to the different (over)allocation scheme and potentially different
accounting (via the new `{shrink,resize}MutableByteArray#` primitives),
some of the nofib benchmarks actually results in increased allocation
numbers (but not necessarily an increase in runtime!). I believe the
allocation numbers could improve if `{resize,shrink}MutableByteArray#`
could be optimised to reallocate in-place more efficiently.
Here are the more apparent changes in the latest nofib comparision
between `integer-gmp` and `integer-gmp2`:
------------------------------------------------------------------
Program Size Allocs Runtime Elapsed TotalMem
------------------------------------------------------------------
...
bernouilli +1.6% +15.3% 0.132 0.132 0.0%
...
cryptarithm1 -2.2% 0.0% -9.7% -9.7% 0.0%
...
fasta -0.7% -0.0% +10.9% +10.9% 0.0%
...
kahan +0.6% +38.9% 0.169 0.169 0.0%
...
lcss -0.7% -0.0% -6.4% -6.4% 0.0%
...
mandel +1.6% +33.6% 0.049 0.049 0.0%
...
pidigits +0.8% +8.5% +3.9% +3.9% 0.0%
power +1.4% -23.8% -18.6% -18.6% -16.7%
...
primetest +1.3% +50.1% 0.085 0.085 0.0%
...
rsa +1.6% +53.4% 0.026 0.026 0.0%
...
scs +1.2% +6.6% +6.5% +6.6% +14.3%
...
symalg +1.0% +9.5% 0.010 0.010 0.0%
...
transform -0.6% -0.0% -5.9% -5.9% 0.0%
...
------------------------------------------------------------------
Min -2.3% -23.8% -18.6% -18.6% -16.7%
Max +1.6% +53.4% +10.9% +10.9% +14.3%
Geometric Mean -0.3% +1.9% -0.8% -0.8% +0.0%
(see P35 / https://phabricator.haskell.org/P35 for full report)
By default, `INTEGER_LIBRARY=integer-gmp2` is active now, which results
in the package `integer-gmp-1.0.0.0` being registered in the package db.
The previous `integer-gmp-0.5.1.0` can be restored by setting
`INTEGER_LIBRARY=integer-gmp` (but will probably be removed altogether
for GHC 7.12). In-tree GMP support has been stolen from the old
`integer-gmp` (while unpatching the custom memory-allocators, as well as
forcing `-fPIC`)
A minor hack to `ghc-cabal` was necessary in order to support two different
`integer-gmp` packages (in different folders) with the same package key.
There will be a couple of follow-up commits re-implementing some features
that were dropped to keep D82 minimal, as well as further
clean-ups/improvements.
More information can be found via #9281 and
https://ghc.haskell.org/trac/ghc/wiki/Design/IntegerGmp2
Reviewed By: austin, rwbarton, simonmar
Differential Revision: https://phabricator.haskell.org/D82
Diffstat (limited to 'testsuite/tests/perf/space_leaks/all.T')
-rw-r--r-- | testsuite/tests/perf/space_leaks/all.T | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/testsuite/tests/perf/space_leaks/all.T b/testsuite/tests/perf/space_leaks/all.T index ac60c8fa58..af7eefccc5 100644 --- a/testsuite/tests/perf/space_leaks/all.T +++ b/testsuite/tests/perf/space_leaks/all.T @@ -4,7 +4,8 @@ test('space_leak_001', # Now it's: 3 (amd64/Linux) # 4 (x86/OS X) # 5 (x86/Linux) - [stats_num_field('peak_megabytes_allocated', (4, 1)), + [stats_num_field('peak_megabytes_allocated', (3, 1)), + # 3 (amd64/Linux, integer-gmp2) stats_num_field('max_bytes_used', [(wordsize(64), 440000, 15), # 440224 (amd64/Linux) @@ -14,11 +15,12 @@ test('space_leak_001', (wordsize(32), 405650, 10)]), # 2013-02-10 372072 (x86/OSX) # 2013-02-10 439228 (x86/OSX) - stats_num_field('bytes allocated', (9079316016, 1)), + stats_num_field('bytes allocated', (11315747416, 1)), # expected value: 9079316016 (amd64/Linux) # 9331570416 (x86/Linux) # 9329073952 (x86/OS X) # 9327959840 (x86/Windows) + # 11315747416 (amd64/Lnx, integer-gmp2) omit_ways(['profasm','profthreaded','threaded1','threaded2']) ], compile_and_run, |