I've taken the liberty to fork the
darcs repo of
binary and put it on github. It contains both the latest released version as well as the new experimental continuation based
Get monad a branch called
git clone git://github.com/kolmodin/binary
It's interesting to run the benchmark of
binary on different architectures and with different versions of
GHC. Although there recently has been work within the community with fast writing (
blaze-builder comes to mind) I've mostly been working on how to read things fast.
binary implementation of the
Get monad is a state monad while the new experimental version is continuation based, so fundamentally different. They also perform differently. To produce the numbers below I ran the benchmark suite of
binary. It reads either
Word64 in a (hopefully) tight loop and then presents how fast it could do it. For example, see this graph over performance in a 32bit environment;
The nice news is that
GHC 7.0.1 always performs better than
GHC 6.12.3. Also the experimental
cps branch (the wide green line) is faster than the classic
Things seems to be going well in 32bit land. Let's have a look in a 64bit environment;
This gives a different picture.
GHC 7.0.1 still performs better than
GHC 6.12.3, but we can also see that the
cps branch can't keep up with the state monad based
master branch (in contrast to when compiling for 32bits). Future work will include to figure out why, and how to fix it.
Lets have a look at how binary performs at writing too;
The tests have been performed on a Sandy Bridge CPU using GHCs native backend. I wanted to try the LLVM backend too, but unfortunately LLVM crashes when compiling the benchmark executable.