Code generated by GHC 8.10.1 is slower than code generated by GHC 8.6.5 (or 8.8.3)
Summary
Performance of perceptual-hash has degraded in GHC 8.8.3 and 8.10.1
Steps to reproduce
git repo here, run cabal bench phash-bench -w $GHC_VERSION
, viz.
cabal bench phash-bench -w ghc-8.6.5
Benchmark phash-bench: RUNNING...
benchmarking fileHash/cat.png
time 23.64 ms (23.56 ms .. 23.75 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 23.79 ms (23.71 ms .. 23.98 ms)
std dev 280.2 μs (123.9 μs .. 514.1 μs)
benchmarking fileHash/frog.jpeg
time 19.69 ms (19.61 ms .. 19.80 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 19.49 ms (19.34 ms .. 19.57 ms)
std dev 269.8 μs (171.2 μs .. 385.7 μs)
benchmarking fileHash/frog.png
time 13.44 ms (13.36 ms .. 13.51 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 13.59 ms (13.54 ms .. 13.68 ms)
std dev 161.9 μs (97.73 μs .. 261.4 μs)
Benchmark phash-bench: FINISH
cabal bench phash-bench -w ghc-8.6.5
Benchmark phash-bench: RUNNING...
benchmarking fileHash/cat.png
time 24.32 ms (24.20 ms .. 24.44 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 24.55 ms (24.43 ms .. 24.80 ms)
std dev 365.5 μs (176.7 μs .. 570.9 μs)
benchmarking fileHash/frog.jpeg
time 19.83 ms (19.74 ms .. 19.93 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 19.64 ms (19.44 ms .. 19.74 ms)
std dev 313.0 μs (208.3 μs .. 409.0 μs)
benchmarking fileHash/frog.png
time 14.02 ms (13.99 ms .. 14.06 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 14.03 ms (14.01 ms .. 14.05 ms)
std dev 62.24 μs (40.17 μs .. 94.45 μs)
Benchmark phash-bench: FINISH
cabal bench phash-bench -w ghc-8.10.1
Benchmark phash-bench: RUNNING...
benchmarking fileHash/cat.png
time 27.82 ms (27.76 ms .. 27.87 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 28.35 ms (28.18 ms .. 28.71 ms)
std dev 599.3 μs (249.4 μs .. 965.5 μs)
benchmarking fileHash/frog.jpeg
time 21.76 ms (21.66 ms .. 21.95 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 21.62 ms (21.55 ms .. 21.69 ms)
std dev 157.5 μs (114.8 μs .. 237.0 μs)
benchmarking fileHash/frog.png
time 15.69 ms (15.66 ms .. 15.72 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 15.76 ms (15.72 ms .. 15.82 ms)
std dev 106.6 μs (54.32 μs .. 189.3 μs)
Benchmark phash-bench: FINISH
Expected behavior
Same performance in GHC 8.8.3 and GHC 8.10.1
Environment
- GHC version used: 8.10.1, 8.8.3, 8.6.5
Optional:
- Operating System: Linux Ubuntu 18.04.4 LTS
- System Architecture: x86_64