Haskell Platform proposal: Add case-insensitive

Bas van Dijk v.dijk.bas at gmail.com
Sat Jan 26 19:31:43 CET 2013


I added a simple benchmark:

https://github.com/basvandijk/case-insensitive/blob/hp/bench/bench.hs

Unfortunately it shows some negative results:

$ cabal configure --enable-benchmarks
$ echo -n "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
$ cabal build && \
   dist/build/bench-case-insensitive/bench-case-insensitive -r
comparison.csv && \
   cat comparison.csv
Resolving dependencies...
Configuring case-insensitive-1.0...
Building case-insensitive-1.0...
Preprocessing library case-insensitive-1.0...
Registering case-insensitive-1.0...
Preprocessing benchmark 'bench-case-insensitive' for case-insensitive-1.0...
Linking dist/build/bench-case-insensitive/bench-case-insensitive ...
warming up
estimating clock resolution...
mean is 1.603349 us (320001 iterations)
found 2111 outliers among 319999 samples (0.7%)
  1568 (0.5%) high severe
estimating cost of a clock call...
mean is 38.94344 ns (14 iterations)
found 2 outliers among 14 samples (14.3%)
  2 (14.3%) high severe

benchmarking no-class
mean: 553.7687 us, lb 534.5956 us, ub 602.9884 us, ci 0.950
std dev: 139.3924 us, lb 23.04812 us, ub 252.4322 us, ci 0.950
found 18 outliers among 100 samples (18.0%)
  6 (6.0%) high mild
  12 (12.0%) high severe
variance introduced by outliers: 96.768%
variance is severely inflated by outliers

benchmarking case-insensitive
mean: 902.5999 us, lb 887.2243 us, ub 927.6100 us, ci 0.950
std dev: 98.40994 us, lb 66.76165 us, ub 138.9779 us, ci 0.950
found 13 outliers among 100 samples (13.0%)
  4 (4.0%) high mild
  9 (9.0%) high severe
variance introduced by outliers: 82.094%
variance is severely inflated by outliers

Reference,Name,% faster than reference
no-class,case-insensitive,-63

So turning foldCase into a method makes it 63% slower!

Adding the following to Data.CaseInsensitive doesn't help:

{-# SPECIALIZE mk :: ByteString -> CI ByteString #-}

Inlining foldCase also doesn't help.

Any ideas how to improve this?

Bas



More information about the Libraries mailing list