Pillow-AllSIMD 13 (the
simd/pillow-13 branch), a fork of
Pillow-SIMD and
Pillow, against
Pillow 13.0, the last Pillow-SIMD release, OpenCV, libvips and ImageMagick, on one
x86-64 and one arm64 machine. Each library runs single-threaded on the same
2560×1600 images. Bars show throughput: longer is faster. The second number is
the speed relative to Pillow 13.0.0. The branch's builds run in exact mode
(PILLOW_ALLSIMD_FAST=0, Pillow's arithmetic); fast is its AVX2 or
NEON build again in fast mode, the default since October 2026: kernels whose pixels
may differ from Pillow's by a few levels (the
fast kernels); operations without one run the exact kernels, as in the exact
build above it.
--cpuset-cpus), with one thread: cv2.setNumThreads(1),
VIPS_CONCURRENCY=1, MAGICK_THREAD_LIMIT=1. Pillow never uses
more than one.intel_pstate/no_turbo) and the power
profile is performance, so the core runs at its 2.9 GHz base clock.
With turbo on, the clock moved between 2.9 and 5.4 GHz during a run, so whichever
library ran during a slow spell looked about twice as slow. Under the
balanced profile it kept dropping to 2.3 GHz even with turbo off.
The Jetson runs at a fixed clock.The benchmark and the page live in desmoteo/pillow-allsimd-perf. With Docker on the target machine:
git clone https://github.com/desmoteo/pillow-allsimd git clone https://github.com/desmoteo/pillow-allsimd-perf cd pillow-allsimd-perf git -C ../pillow-allsimd checkout simd/pillow-13 ./run.sh local # this machine ./run.sh --cpu 2 user@arm64-host # another one, over SSH python3 tools/publish.py # copy results/ into docs/data/