Benchmarks

Preliminary puffs bench -mimic summarized throughput numbers for the GIF codec are below. Higher is better.

“Mimic” tests check that Puffs' output mimics (i.e. exactly matches) other libraries' output. “Mimic” benchmarks give the numbers for those other libraries, as shipped with the OS, measured here on Ubunty 14.04 LTS “Trusty”.

Unless otherwise stated, these benchmarks were run on an Intel x86_64 Broadwell.

Reproducing

The benchmark programs aim to be runnable “out of the box” without any configuration or installation. For example, to run the std/flate benchmarks:

git clone etc
cd puffs/test/c/std
gcc -O3 flate.c
./a.out -bench
rm a.out

A comment near the top of that .c file says how to run the mimic benchmarks.

The output of those benchmark programs is compatible with the benchstat tool. For example, that tool can calculate confidence intervals based on multiple benchmark runs, or calculate p-values when comparing numbers before and after a code change. To install it, first install Go, then run go get golang.org/x/perf/cmd/benchstat.

GIF

The 1k, 10k, etc. numbers are approximately how many bytes of pixel data there is in the decoded image. For example, the test/testdata/harvesters.* images are 1165 × 859 (approximately 1000k pixels) and a GIF image (a paletted image) is 1 byte per pixel.

name                             speed
puffs_gif_decode_1k/clang         335MB/s ± 2%
puffs_gif_decode_10k/clang        124MB/s ± 1%
puffs_gif_decode_100k/clang       113MB/s ± 1%
puffs_gif_decode_1000k/clang      115MB/s ± 1%

mimic_gif_decode_1k/clang         154MB/s ± 1%
mimic_gif_decode_10k/clang       91.1MB/s ± 0%
mimic_gif_decode_100k/clang      97.1MB/s ± 1%
mimic_gif_decode_1000k/clang     98.7MB/s ± 2%

puffs_gif_decode_1k/gcc           395MB/s ± 1%
puffs_gif_decode_10k/gcc          161MB/s ± 2%
puffs_gif_decode_100k/gcc         134MB/s ± 2%
puffs_gif_decode_1000k/gcc        138MB/s ± 1%

mimic_gif_decode_1k/gcc           154MB/s ± 1%
mimic_gif_decode_10k/gcc         90.8MB/s ± 2%
mimic_gif_decode_100k/gcc        97.7MB/s ± 0%
mimic_gif_decode_1000k/gcc       98.7MB/s ± 0%

The mimic numbers measure the pre-compiled library that shipped with the OS, so it is unsurprising that they don't depend on the C compiler (clang or gcc) used to run the test harness.


Updated on October 2017.