DBDelve
Dive deep into your data. A fast, native, multi-engine database client written in Rust. Free and open source, no telemetry.
Pillow-AllSIMD is a fork of Pillow-SIMD, the SIMD build of Pillow, the friendly fork of the Python Imaging Library (PIL). It is a drop-in replacement for the Pillow version it follows, now 13.0.0: ...
Developer toolsPython · CGitHub @desmoteoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Drop-in Pillow 13 with SIMD kernels: about 6x faster on x86-64 (SSE4.1, AVX2, AVX-VNNI) and 3x on arm64 (NEON). Wheels on PyPI. A fork of Pillow-SIMD.
Loading the full README.
Read the full README ↗Pillow 13, 6.3× as fast on x86-64 and 3.3× as fast on arm64, as the geometric mean of 111 operations on one thread (5.6× and 2.7× with Pillow's exact arithmetic). That is 3.0× as fast as Pillow-SIMD, and faster than OpenCV in 77 of the 104 operations both have on x86-64, 69 on arm64.
A drop-in replacement for Pillow 13.0.0: it installs
the same PIL package, with the same API, built with SIMD kernels for
x86-64 (SSE4.1, AVX2, AVX-VNNI) and arm64 (NEON). Your code doesn't change.
python3 -m pip uninstall -y pillow pillow-simd
python3 -m pip install pillow-allsimd
It is a fork of Pillow-SIMD, which brought SIMD to Pillow on x86:
| Pillow-AllSIMD | Pillow-SIMD 12.1.1 | |
|---|---|---|
| Based on | Pillow 13.0.0 | Pillow 12.1.1 |
| x86-64 | SSE4.1, AVX2 and AVX-VNNI kernels, the best set chosen at import | SSE4 or AVX2, chosen when it is built |
| arm64 | NEON kernels (Linux, macOS) | does not build (-msse4) |
| Other CPUs | portable C (riscv64, ppc64le, s390x, armv7) | does not build |
| Wheels on PyPI | Linux x86-64 and arm64, macOS arm64; CPython 3.11 to 3.15 and free-threaded | none: compiled when installed |
How the speed was found, and what didn't work: Six times Pillow: notes from Pillow-AllSIMD.
For Pillow itself, please refer to its documentation, changelog and contribution guide.
simd/pillow-13 branch).checks/simd_hashes.py). The portable build also passes the
suite on riscv64, ppc64le, s390x, armv7 and 32-bit x86, under QEMU
(OTHER_ARCHITECTURES.md).Pillow-AllSIMD stands on the work of others, and keeps their copyright notices (LICENSE):
Pillow-AllSIMD's own changes are by Matteo Ferrabone and contributors. To cite it, see CITATION.cff, which also cites Pillow and Pillow-SIMD.
(From Pillow-SIMD's readme, like the "why" sections further down.)
There are multiple ways to tweak image processing performance. To name a few, such ways can be: utilizing better algorithms, optimizing existing implementations, using more processing power and/or resources. One of the great examples of using a more efficient algorithm is replacing a convolution-based Gaussian blur with a sequential-box one.
Such examples are rather rare, though. It is also known, that certain processes might be optimized by using parallel processing to run the respective routines. But a more practical key to optimizations might be making things work faster using the resources at hand. For instance, SIMD computing might be the case.
This is the beginning of the README. Read the rest at the original. Read the full README ↗