Skip to content

DiffArray performance unusable for advertized purpose

(cf. this ghc-users thread)

Data.Array.Diff.DiffArray is unusably slow. Sometimes even Data.Array.Array is faster in single-threaded use, defeating the purpose. The attached code tries to demonstrate the issue, if I got the single-threadedness via $! right (default compilation ghc --make SlowDiffArray.hs gives Array, build with -DUseDiff to get DiffArray).

As I happened to have some older ghcs around, I tried those as well, and it seems the issue got worse around 6.8.3 (SlowDiffArrayA-<version>: Array; SlowDiffArrayDA-<version>: DiffArray):

$ for i in *.exe ; do  echo $i; time ./$i; done
SlowDiffArrayA-61120081004.exe
9990001

real    0m0.307s
user    0m0.015s
sys     0m0.015s
SlowDiffArrayA-641.exe
9990001

real    0m0.261s
user    0m0.030s
sys     0m0.000s
SlowDiffArrayA-661.exe
9990001

real    0m0.260s
user    0m0.015s
sys     0m0.000s
SlowDiffArrayA-683.exe
9990001

real    0m0.232s
user    0m0.015s
sys     0m0.000s
SlowDiffArrayDA-61120081004.exe
9990001

real    0m12.932s
user    0m0.031s
sys     0m0.000s
SlowDiffArrayDA-641.exe
9990001

real    0m7.114s
user    0m0.015s
sys     0m0.016s
SlowDiffArrayDA-661.exe
9990001

real    0m5.774s
user    0m0.015s
sys     0m0.015s
SlowDiffArrayDA-683.exe
9990001

real    0m12.814s
user    0m0.015s
sys     0m0.000s

(measured on Pentium M 760, 2GHz, Windows XP)

[the majority of the issue probably lies in the DiffArray implementation, hence component libraries, but it seems that compiler and runtime system also play a role]

Trac metadata
Trac field Value
Version 6.11
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries (other)
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information