Pillow-SIMD x86 operation comparison¶
Recorded 2026-10-21 on Ubuntu 24.04 · x86_64 (CPU: AMD EPYC 7763 64-Core Processor; Python: 3.12.10; Rust: 1.96.1; image: ubuntu24-20261012.334.1). This page compares only workloads run in that one benchmark run: Pillow 12.1.1, Pillow-SIMD 12.1.1.post0, and the pillow-rs CPU/SIMD profiles.
Pillow-SIMD installs the PIL namespace, so the two Pillow variants are run in isolated environments. The benchmark admits timings only after each source has independently passed the same exact-output parity cases against pillow-rs. These results are separate from the Apple ARM results on the main benchmark page.
This x86-only cohort compares pillow-rs CPU/SIMD, ordinary Pillow 12.1.1, and Pillow-SIMD 12.1.1.post0 on identical workloads and measurement policies. Pillow-SIMD and Pillow were run in separate virtual environments because both install the PIL namespace. pillow-rs CPU/SIMD parity uses regular Pillow; Pillow-SIMD compatibility is checked separately and incompatible baseline cells remain visible with their speed ratios withheld. The matched cohort covers 37 full-size, parity-backed workflow IDs: 32 pipeline-op workloads, the established RGB GaussianBlur case, and getchannel in L, LA, RGB, and RGBA. Each measured source uses the same input and measurement policy per workflow; target profiles appear only when declared by that workload. This cohort uses the Pillow-SIMD default SSE4 build. It is not comparable with the Apple ARM measurements on the main benchmark page. Pillow-SIMD output differed from regular Pillow on 3 workload(s); those baseline cells are retained and no Pillow-SIMD speed ratio is accepted: pipeline-op.filter.material-l-noise-5x5-1024x768, pipeline-op.filter.material-la-nonmatching-5x5-1024x768, pipeline-op.grayscale.material-rgb-noise-1024x768.
Compare each profile with its workload-matched baseline on the same runner. Parallel CPU is measured separately with the opt-in Rayon feature. Pillow-SIMD appears only for its matched x86 workload cohort. Lower time is better.
At a glance
Average speedup is the geometric mean of matched per-case ratios; typical case is the median. Each parity-checked case counts once. Runner and operation types stay separate.
Ubuntu 24.04 · x86_64
pillow-rs · CPU vs Pillow
Individual operations32 matched cases
Faster in 30 of 32 matched cases.
Average speedup: 3× faster
Typical case: 3.7× faster
30 faster0 tied2 slower
- Slowest caseGrayscale material ycbcr noise 1024x768 · YCbCr · 1024 × 768 · 1 operation · observed_stepspillow-rs · CPU took 672 µs vs Pillow 143 µs · 4.7× slower
- Fastest caseThumbnail material rgb 1024x768 · RGB · 1024 × 768 · 1 operation · whole workflowpillow-rs · CPU took 279 µs vs Pillow 2.2 ms · 7.88× faster
Complete pipelines5 matched cases
Faster in 4 of 5 matched cases.
Average speedup: 1.55× faster
Typical case: 1.17× faster
4 faster0 tied1 slower
- Slowest casePil image image getchannel materialized rgb 1024x768 · RGB · 1024 × 768 · 1 operation · observed_stepspillow-rs · CPU took 380 µs vs Pillow 280 µs · 1.36× slower
- Fastest casePil image image getchannel materialized l 1024x768 · L · 1024 × 768 · 1 operation · observed_stepspillow-rs · CPU took 39.4 µs vs Pillow 121 µs · 3.08× faster
Explore every matched workload on the ratio plot
Per-workload differences
Each point is one exact-output-verified workload. Pillow median time divided by pillow-rs median time means 1× is equal latency, above 1× is faster, and below 1× is slower. The plot is grouped by runner, profile, baseline, and workload type, with slowest cases first. Hover a point for both measured medians.
Timing-only results remain in the tables but are excluded from this parity-verified plot and summary.
Use the individual workload tables to compare absolute latency, mode, and measurement boundaries.
Pipeline benchmarks
Composed, matrix, lifecycle and quick workloads. Current snapshot: 5 pipelines.
| Baseline | Median · vs Pillow | Median · vs Pillow | Median · vs Pillow | Median · vs Pillow | Median · vs Pillow | Lowest medianAmong comparable implementations | ||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pil imagefilter gaussianblur standard1024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | Operations | RGB | 30.4 msBaselinePillow. Baseline. | 10.1 ms3.03× fasterpillow-rs · CPU. Output comparison passed. | 10.8 ms2.8× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 9.58 ms3.17× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | Pillow-SIMD · SSE4Output comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Pil imagefilter gaussianblur standard · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Pil image image getchannel materialized l 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | Operations | L | 121 µsBaselinePillow. Baseline. | 39.4 µs3.08× fasterpillow-rs · CPU. Output comparison passed. | 88.6 µs1.37× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 109 µs1.11× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Pil image image getchannel materialized l 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Pil image image getchannel materialized rgb 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | Operations | RGB | 280 µsBaselinePillow. Baseline. | 380 µs1.36× slowerpillow-rs · CPU. Output comparison passed. | 83.8 µs3.34× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 207 µs1.35× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Pil image image getchannel materialized rgb 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Pil image image getchannel materialized la 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | Operations | LA | 265 µsBaselinePillow. Baseline. | 238 µs1.12× fasterpillow-rs · CPU. Output comparison passed. | 85.1 µs3.12× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 202 µs1.31× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Pil image image getchannel materialized la 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Pil image image getchannel materialized rgba 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | Operations | RGBA | 280 µsBaselinePillow. Baseline. | 241 µs1.17× fasterpillow-rs · CPU. Output comparison passed. | 109 µs2.56× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 218 µs1.29× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Pil image image getchannel materialized rgba 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
Individual operation benchmarks
Single-operation workloads; each row retains its declared timing boundary. Current snapshot: 32 operation workloads.
| Baseline | Median · vs Pillow | Median · vs Pillow | Median · vs Pillow | Median · vs Pillow | Median · vs Pillow | Lowest medianAmong comparable implementations | ||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Boxblur material l noise 1024x768 radius 11024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | L | 4.44 msBaselinePillow. Baseline. | 1.22 ms3.64× fasterpillow-rs · CPU. Output comparison passed. | 931 µs4.77× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 4.45 ms0.236% more timePillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Boxblur material l noise 1024x768 radius 1 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Boxblur material rgb noise 1024x768 radius 11024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | RGB | 13.3 msBaselinePillow. Baseline. | 3.13 ms4.25× fasterpillow-rs · CPU. Output comparison passed. | 2.17 ms6.13× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 5.87 ms2.26× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Boxblur material rgb noise 1024x768 radius 1 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Gaussianblur material l noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | point | L | 9.56 msBaselinePillow. Baseline. | 3.43 ms2.79× fasterpillow-rs · CPU. Output comparison passed. | 4.32 ms2.21× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 9.58 ms0.164% more timePillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Gaussianblur material l noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Gaussianblur material la noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | point | LA | 31.9 msBaselinePillow. Baseline. | 6.91 ms4.62× fasterpillow-rs · CPU. Output comparison passed. | 7.38 ms4.32× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 8.76 ms3.64× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Gaussianblur material la noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Unsharpmask material rgb noise 1024x768 radius 21024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | RGB | 42.6 msBaselinePillow. Baseline. | 11.4 ms3.75× fasterpillow-rs · CPU. Output comparison passed. | 10.8 ms3.96× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 21.6 ms1.97× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Unsharpmask material rgb noise 1024x768 radius 2 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Convert mode cmyk to rgb 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | CMYK | 5.39 msBaselinePillow. Baseline. | 2.1 ms2.57× fasterpillow-rs · CPU. Output comparison passed. | 2.23 ms2.42× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 3.66 ms1.47× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Convert mode cmyk to rgb 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Thumbnail material rgb 1024x7681024 × 768 · 1 operation · whole workflow | Ubuntu 24.04 · x86_64 | point | RGB | 2.2 msBaselinePillow. Baseline. | 279 µs7.88× fasterpillow-rs · CPU. Output comparison passed. | 456 µs4.83× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 590 µs3.73× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Thumbnail material rgb 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: whole_workflow. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Merge material rgb l 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | RGB | 2.68 msBaselinePillow. Baseline. | 2.17 ms1.24× fasterpillow-rs · CPU. Output comparison passed. | 1.69 ms1.59× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 2.7 ms1.01× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Merge material rgb l 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Posterize material l noise 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | L | 568 µsBaselinePillow. Baseline. | 87.3 µs6.51× fasterpillow-rs · CPU. Output comparison passed. | 95 µs5.98× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 535 µs1.06× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Posterize material l noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Posterize material rgb noise 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | RGB | 2.79 msBaselinePillow. Baseline. | 1.75 ms1.59× fasterpillow-rs · CPU. Output comparison passed. | 1.19 ms2.35× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 2.81 ms1.01× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Posterize material rgb noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Medianfilter material l noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | L | 66.4 msBaselinePillow. Baseline. | 12.4 ms5.38× fasterpillow-rs · CPU. Output comparison passed. | 13.5 ms4.92× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 68 ms1.02× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Medianfilter material l noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Medianfilter material la noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | LA | 132 msBaselinePillow. Baseline. | 21.6 ms6.11× fasterpillow-rs · CPU. Output comparison passed. | 26.8 ms4.92× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 136 ms1.03× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Medianfilter material la noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Medianfilter material rgb noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | RGB | 193 msBaselinePillow. Baseline. | 31.1 ms6.23× fasterpillow-rs · CPU. Output comparison passed. | 43.8 ms4.42× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 205 ms1.06× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Medianfilter material rgb noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Maxfilter material rgb noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | RGB | 137 msBaselinePillow. Baseline. | 24.1 ms5.68× fasterpillow-rs · CPU. Output comparison passed. | 20.6 ms6.63× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 151 ms1.1× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Maxfilter material rgb noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Minfilter material rgb noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | RGB | 137 msBaselinePillow. Baseline. | 24.1 ms5.67× fasterpillow-rs · CPU. Output comparison passed. | 20.9 ms6.53× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 146 ms1.07× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Minfilter material rgb noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Maxfilter material l noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | L | 45.7 msBaselinePillow. Baseline. | 18 ms2.54× fasterpillow-rs · CPU. Output comparison passed. | 7.15 ms6.39× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 47.5 ms1.04× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Maxfilter material l noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Maxfilter material la noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | LA | 91.9 msBaselinePillow. Baseline. | 21.2 ms4.33× fasterpillow-rs · CPU. Output comparison passed. | 13.7 ms6.7× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 98.2 ms1.07× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Maxfilter material la noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Minfilter material l noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | L | 45 msBaselinePillow. Baseline. | 16.3 ms2.76× fasterpillow-rs · CPU. Output comparison passed. | 7 ms6.43× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 49.4 ms1.1× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Minfilter material l noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Minfilter material la noise 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | LA | 93.5 msBaselinePillow. Baseline. | 21.1 ms4.42× fasterpillow-rs · CPU. Output comparison passed. | 13.9 ms6.73× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 99.7 ms1.07× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Minfilter material la noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Grayscale material rgb noise 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | RGB | 515 µsBaselinePillow. Baseline. | 1.26 ms2.45× slowerpillow-rs · CPU. Output comparison passed. | 785 µs1.52× slowerpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 327 µsNot comparablePillow-SIMD · SSE4. Output differs · speed comparison withheld. | pillow-rs · SIMDOutput comparison passed; Output differs · speed comparison withheld | ||||||||||||||||||||||||||||||
Grayscale material rgb noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Grayscale material ycbcr noise 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | YCbCr | 143 µsBaselinePillow. Baseline. | 672 µs4.7× slowerpillow-rs · CPU. Output comparison passed. | 630 µs4.4× slowerpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 145 µs1.02× slowerPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | Pillow-SIMD · SSE4Output comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Grayscale material ycbcr noise 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Thumbnail native f32 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | geometry | F | 1.87 msBaselinePillow. Baseline. | 1.23 ms1.52× fasterpillow-rs · CPU. Output comparison passed. | 1.48 ms1.26× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 1.75 ms1.07× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Thumbnail native f32 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Thumbnail native i32 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | geometry | I | 5.57 msBaselinePillow. Baseline. | 2.07 ms2.69× fasterpillow-rs · CPU. Output comparison passed. | 1.79 ms3.12× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 5.36 ms1.04× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Thumbnail native i32 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material l noise 5x5 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | L | 12.6 msBaselinePillow. Baseline. | 1.96 ms6.43× fasterpillow-rs · CPU. Output comparison passed. | 1.19 ms10.6× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 4.05 msNot comparablePillow-SIMD · SSE4. Output differs · speed comparison withheld. | pillow-rs · SIMDOutput comparison passed; Output differs · speed comparison withheld | ||||||||||||||||||||||||||||||
Filter material l noise 5x5 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material l noise flat 5x5 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | L | 11.9 msBaselinePillow. Baseline. | 1.55 ms7.64× fasterpillow-rs · CPU. Output comparison passed. | 1.25 ms9.5× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 4.05 ms2.93× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Filter material l noise flat 5x5 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material la noise 5x5 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | LA | 26 msBaselinePillow. Baseline. | 8.33 ms3.12× fasterpillow-rs · CPU. Output comparison passed. | 2.02 ms12.9× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 5.39 ms4.82× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Filter material la noise 5x5 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material la nonmatching 5x5 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | LA | 26 msBaselinePillow. Baseline. | 6.44 ms4.04× fasterpillow-rs · CPU. Output comparison passed. | 3.27 ms7.96× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 5.4 msNot comparablePillow-SIMD · SSE4. Output differs · speed comparison withheld. | pillow-rs · SIMDOutput comparison passed; Output differs · speed comparison withheld | ||||||||||||||||||||||||||||||
Filter material la nonmatching 5x5 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material la noise 3x3 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | LA | 11.5 msBaselinePillow. Baseline. | 4.72 ms2.43× fasterpillow-rs · CPU. Output comparison passed. | 4.77 ms2.41× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 2.9 ms3.95× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | Pillow-SIMD · SSE4Output comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Filter material la noise 3x3 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material i noise 5x5 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | I | 14.4 msBaselinePillow. Baseline. | 4.52 ms3.2× fasterpillow-rs · CPU. Output comparison passed. | 5.66 ms2.55× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 12.8 ms1.13× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Filter material i noise 5x5 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Filter material i bounded noise 5x5 1024x7681024 × 768 · 2 operations · observed_steps | Ubuntu 24.04 · x86_64 | neighborhood | I | 15.1 msBaselinePillow. Baseline. | 4.01 ms3.75× fasterpillow-rs · CPU. Output comparison passed. | 5.79 ms2.6× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 12.9 ms1.17× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Filter material i bounded noise 5x5 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Rotate material rgb nearest noise recovered 20261016 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | point | RGB | 2.94 msBaselinePillow. Baseline. | 2.86 ms1.03× fasterpillow-rs · CPU. Output comparison passed. | 1.47 ms2× fasterpillow-rs · SIMD. Output comparison passed. | Not measured | Not measured | 2.94 ms0.0325% more timePillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · SIMDOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Rotate material rgb nearest noise recovered 20261016 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
| Rotate material rgba nearest 37deg noise fill 1024x7681024 × 768 · 1 operation · observed_steps | Ubuntu 24.04 · x86_64 | geometry | RGBA | 6.38 msBaselinePillow. Baseline. | 3.75 ms1.7× fasterpillow-rs · CPU. Output comparison passed. | Not measured | Not measured | Not measured | 5.95 ms1.07× fasterPillow-SIMD · SSE4. Pillow-SIMD output matched regular Pillow. | pillow-rs · CPUOutput comparison passed; Pillow-SIMD output matched regular Pillow | ||||||||||||||||||||||||||||||
Rotate material rgba nearest 37deg noise fill 1024x768 · Runner: Ubuntu 24.04 · x86_64. Timing boundary: observed_steps. Sample unit: timed workflow execution. Percentiles show spread, not confidence intervals.
Workload ID: | ||||||||||||||||||||||||||||||||||||||||
No workloads match these filters. Try another search or reset the filters.
37 recorded workloads: 5 pipeline and 32 individual-operation rows · 2026-10-21 · Ubuntu 24.04 · x86_64
Python API operations and complete pipelines, including their declared setup and output steps. CPU, SIMD and GPU are separate implementations.
Matched source and parity runs¶
| Source | Package version | Benchmark run | Parity run |
|---|---|---|---|
| pillow | 12.1.1 | migration-benchmark-15a619ce4f8547ff84fb69e2fa482c31 | migration-parity-benchmark-gate-56d27f0a20624474867fbc4268210f38 |
| pillow-simd | 12.1.1.post0 | migration-benchmark-231f0c51d0f845048dcc2e801d85d6d7 | migration-parity-benchmark-gate-56d27f0a20624474867fbc4268210f38 |
Workload-level evidence¶
| Workload | Mode | Implementation | Median µs | Samples | Output/backend evidence |
|---|---|---|---|---|---|
| pipeline-op.boxblur.material-l-noise-1024x768-radius-1 | L | pillow | 4,443.401 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.boxblur.material-l-noise-1024x768-radius-1 | L | python-cpu | 1,220.286 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.boxblur.material-l-noise-1024x768-radius-1 | L | python-simd | 931.054 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.boxblur.material-rgb-noise-1024x768-radius-1 | RGB | pillow | 13,285.029 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.boxblur.material-rgb-noise-1024x768-radius-1 | RGB | python-cpu | 3,125.683 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.boxblur.material-rgb-noise-1024x768-radius-1 | RGB | python-simd | 2,168.686 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.gaussianblur.material-l-noise-1024x768 | L | pillow | 9,560.385 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.gaussianblur.material-l-noise-1024x768 | L | python-cpu | 3,429.735 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.gaussianblur.material-l-noise-1024x768 | L | python-simd | 4,319.062 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.gaussianblur.material-la-noise-1024x768 | LA | pillow | 31,895.100 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.gaussianblur.material-la-noise-1024x768 | LA | python-cpu | 6,910.231 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.gaussianblur.material-la-noise-1024x768 | LA | python-simd | 7,376.618 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.unsharpmask.material-rgb-noise-1024x768-radius-2 | RGB | pillow | 42,599.025 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.unsharpmask.material-rgb-noise-1024x768-radius-2 | RGB | python-cpu | 11,360.725 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.unsharpmask.material-rgb-noise-1024x768-radius-2 | RGB | python-simd | 10,764.781 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.convert-mode-cmyk-to-rgb-1024x768 | CMYK | pillow | 5,386.092 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.convert-mode-cmyk-to-rgb-1024x768 | CMYK | python-cpu | 2,099.300 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.convert-mode-cmyk-to-rgb-1024x768 | CMYK | python-simd | 2,229.160 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.thumbnail.material-rgb-1024x768 | RGB | pillow | 2,203.553 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.thumbnail.material-rgb-1024x768 | RGB | python-cpu | 279.483 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.thumbnail.material-rgb-1024x768 | RGB | python-simd | 456.472 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.merge.material-rgb-l-1024x768 | RGB | pillow | 2,682.023 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.merge.material-rgb-l-1024x768 | RGB | python-cpu | 2,167.757 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.merge.material-rgb-l-1024x768 | RGB | python-simd | 1,688.213 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.posterize.material-l-noise-1024x768 | L | pillow | 568.261 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.posterize.material-l-noise-1024x768 | L | python-cpu | 87.318 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.posterize.material-l-noise-1024x768 | L | python-simd | 95.043 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.posterize.material-rgb-noise-1024x768 | RGB | pillow | 2,788.367 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.posterize.material-rgb-noise-1024x768 | RGB | python-cpu | 1,749.996 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.posterize.material-rgb-noise-1024x768 | RGB | python-simd | 1,185.770 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.medianfilter.material-l-noise-1024x768 | L | pillow | 66,407.862 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.medianfilter.material-l-noise-1024x768 | L | python-cpu | 12,354.336 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.medianfilter.material-l-noise-1024x768 | L | python-simd | 13,504.724 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.medianfilter.material-la-noise-1024x768 | LA | pillow | 132,056.009 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.medianfilter.material-la-noise-1024x768 | LA | python-cpu | 21,625.999 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.medianfilter.material-la-noise-1024x768 | LA | python-simd | 26,814.144 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.medianfilter.material-rgb-noise-1024x768 | RGB | pillow | 193,491.458 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.medianfilter.material-rgb-noise-1024x768 | RGB | python-cpu | 31,076.338 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.medianfilter.material-rgb-noise-1024x768 | RGB | python-simd | 43,809.310 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.maxfilter.material-rgb-noise-1024x768 | RGB | pillow | 136,804.921 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.maxfilter.material-rgb-noise-1024x768 | RGB | python-cpu | 24,087.931 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.maxfilter.material-rgb-noise-1024x768 | RGB | python-simd | 20,623.565 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.minfilter.material-rgb-noise-1024x768 | RGB | pillow | 136,687.663 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.minfilter.material-rgb-noise-1024x768 | RGB | python-cpu | 24,115.332 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.minfilter.material-rgb-noise-1024x768 | RGB | python-simd | 20,926.029 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.maxfilter.material-l-noise-1024x768 | L | pillow | 45,742.084 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.maxfilter.material-l-noise-1024x768 | L | python-cpu | 17,996.262 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.maxfilter.material-l-noise-1024x768 | L | python-simd | 7,152.801 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.maxfilter.material-la-noise-1024x768 | LA | pillow | 91,868.298 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.maxfilter.material-la-noise-1024x768 | LA | python-cpu | 21,225.220 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.maxfilter.material-la-noise-1024x768 | LA | python-simd | 13,702.446 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.minfilter.material-l-noise-1024x768 | L | pillow | 45,007.355 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.minfilter.material-l-noise-1024x768 | L | python-cpu | 16,314.076 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.minfilter.material-l-noise-1024x768 | L | python-simd | 7,003.066 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.minfilter.material-la-noise-1024x768 | LA | pillow | 93,467.211 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.minfilter.material-la-noise-1024x768 | LA | python-cpu | 21,133.570 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.minfilter.material-la-noise-1024x768 | LA | python-simd | 13,889.540 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.grayscale.material-rgb-noise-1024x768 | RGB | pillow | 514.942 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.grayscale.material-rgb-noise-1024x768 | RGB | python-cpu | 1,260.393 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.grayscale.material-rgb-noise-1024x768 | RGB | python-simd | 785.061 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.grayscale.material-ycbcr-noise-1024x768 | YCbCr | pillow | 143.022 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.grayscale.material-ycbcr-noise-1024x768 | YCbCr | python-cpu | 672.109 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.grayscale.material-ycbcr-noise-1024x768 | YCbCr | python-simd | 629.791 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.thumbnail.native-f32-1024x768 | F | pillow | 1,868.807 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.thumbnail.native-f32-1024x768 | F | python-cpu | 1,229.216 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.thumbnail.native-f32-1024x768 | F | python-simd | 1,484.653 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.thumbnail.native-i32-1024x768 | I | pillow | 5,572.069 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.thumbnail.native-i32-1024x768 | I | python-cpu | 2,071.054 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.thumbnail.native-i32-1024x768 | I | python-simd | 1,787.804 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-l-noise-5x5-1024x768 | L | pillow | 12,614.929 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-l-noise-5x5-1024x768 | L | python-cpu | 1,961.496 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-l-noise-5x5-1024x768 | L | python-simd | 1,185.389 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-l-noise-flat-5x5-1024x768 | L | pillow | 11,862.164 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-l-noise-flat-5x5-1024x768 | L | python-cpu | 1,552.843 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-l-noise-flat-5x5-1024x768 | L | python-simd | 1,249.049 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-la-noise-5x5-1024x768 | LA | pillow | 25,980.285 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-la-noise-5x5-1024x768 | LA | python-cpu | 8,327.507 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-la-noise-5x5-1024x768 | LA | python-simd | 2,019.704 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-la-nonmatching-5x5-1024x768 | LA | pillow | 25,994.562 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-la-nonmatching-5x5-1024x768 | LA | python-cpu | 6,438.567 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-la-nonmatching-5x5-1024x768 | LA | python-simd | 3,265.797 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-la-noise-3x3-1024x768 | LA | pillow | 11,481.015 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-la-noise-3x3-1024x768 | LA | python-cpu | 4,721.932 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-la-noise-3x3-1024x768 | LA | python-simd | 4,765.635 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-i-noise-5x5-1024x768 | I | pillow | 14,448.288 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-i-noise-5x5-1024x768 | I | python-cpu | 4,521.573 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-i-noise-5x5-1024x768 | I | python-simd | 5,663.172 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.filter.material-i-bounded-noise-5x5-1024x768 | I | pillow | 15,055.198 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.filter.material-i-bounded-noise-5x5-1024x768 | I | python-cpu | 4,014.099 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.filter.material-i-bounded-noise-5x5-1024x768 | I | python-simd | 5,792.338 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.rotate.material-rgb-nearest-noise-recovered-20261016-1024x768 | RGB | pillow | 2,941.822 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.rotate.material-rgb-nearest-noise-recovered-20261016-1024x768 | RGB | python-cpu | 2,862.403 | 100 | completed; parity_pass: pass; cpu → cpu |
| pipeline-op.rotate.material-rgb-nearest-noise-recovered-20261016-1024x768 | RGB | python-simd | 1,468.062 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.rotate.material-rgba-nearest-37deg-noise-fill-1024x768 | RGBA | pillow | 6,382.981 | 100 | completed; parity_pass: pass; pillow → pillow |
| pipeline-op.rotate.material-rgba-nearest-37deg-noise-fill-1024x768 | RGBA | python-cpu | 3,749.189 | 100 | completed; parity_pass: pass; cpu → cpu |
| pil-imagefilter.gaussianblur.standard | RGB | pillow | 30,419.845 | 100 | completed; parity_pass: pass; pillow → pillow |
| pil-imagefilter.gaussianblur.standard | RGB | python-cpu | 10,052.572 | 100 | completed; parity_pass: pass; cpu → cpu |
| pil-imagefilter.gaussianblur.standard | RGB | python-simd | 10,846.753 | 100 | completed; parity_pass: pass; simd → simd |
| pil-image-image.getchannel.materialized.l-1024x768 | L | pillow | 121.311 | 100 | completed; parity_pass: pass; pillow → pillow |
| pil-image-image.getchannel.materialized.l-1024x768 | L | python-cpu | 39.424 | 100 | completed; parity_pass: pass; cpu → cpu |
| pil-image-image.getchannel.materialized.l-1024x768 | L | python-simd | 88.620 | 100 | completed; parity_pass: pass; simd → simd |
| pil-image-image.getchannel.materialized.rgb-1024x768 | RGB | pillow | 279.602 | 100 | completed; parity_pass: pass; pillow → pillow |
| pil-image-image.getchannel.materialized.rgb-1024x768 | RGB | python-cpu | 380.361 | 100 | completed; parity_pass: pass; cpu → cpu |
| pil-image-image.getchannel.materialized.rgb-1024x768 | RGB | python-simd | 83.772 | 100 | completed; parity_pass: pass; simd → simd |
| pil-image-image.getchannel.materialized.la-1024x768 | LA | pillow | 265.435 | 100 | completed; parity_pass: pass; pillow → pillow |
| pil-image-image.getchannel.materialized.la-1024x768 | LA | python-cpu | 238.004 | 100 | completed; parity_pass: pass; cpu → cpu |
| pil-image-image.getchannel.materialized.la-1024x768 | LA | python-simd | 85.059 | 100 | completed; parity_pass: pass; simd → simd |
| pil-image-image.getchannel.materialized.rgba-1024x768 | RGBA | pillow | 280.284 | 100 | completed; parity_pass: pass; pillow → pillow |
| pil-image-image.getchannel.materialized.rgba-1024x768 | RGBA | python-cpu | 240.574 | 100 | completed; parity_pass: pass; cpu → cpu |
| pil-image-image.getchannel.materialized.rgba-1024x768 | RGBA | python-simd | 109.429 | 100 | completed; parity_pass: pass; simd → simd |
| pipeline-op.boxblur.material-l-noise-1024x768-radius-1 | L | pillow-simd | 4,453.895 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.boxblur.material-rgb-noise-1024x768-radius-1 | RGB | pillow-simd | 5,870.788 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.gaussianblur.material-l-noise-1024x768 | L | pillow-simd | 9,576.044 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.gaussianblur.material-la-noise-1024x768 | LA | pillow-simd | 8,758.592 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.unsharpmask.material-rgb-noise-1024x768-radius-2 | RGB | pillow-simd | 21,579.616 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.convert-mode-cmyk-to-rgb-1024x768 | CMYK | pillow-simd | 3,662.311 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.thumbnail.material-rgb-1024x768 | RGB | pillow-simd | 590.278 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.merge.material-rgb-l-1024x768 | RGB | pillow-simd | 2,703.490 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.posterize.material-l-noise-1024x768 | L | pillow-simd | 535.024 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.posterize.material-rgb-noise-1024x768 | RGB | pillow-simd | 2,813.867 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.medianfilter.material-l-noise-1024x768 | L | pillow-simd | 67,976.042 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.medianfilter.material-la-noise-1024x768 | LA | pillow-simd | 136,044.523 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.medianfilter.material-rgb-noise-1024x768 | RGB | pillow-simd | 205,486.457 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.maxfilter.material-rgb-noise-1024x768 | RGB | pillow-simd | 150,568.542 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.minfilter.material-rgb-noise-1024x768 | RGB | pillow-simd | 146,498.686 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.maxfilter.material-l-noise-1024x768 | L | pillow-simd | 47,483.084 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.maxfilter.material-la-noise-1024x768 | LA | pillow-simd | 98,182.954 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.minfilter.material-l-noise-1024x768 | L | pillow-simd | 49,392.347 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.minfilter.material-la-noise-1024x768 | LA | pillow-simd | 99,672.582 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.grayscale.material-rgb-noise-1024x768 | RGB | pillow-simd | 326.841 | 100 | completed; Pillow-SIMD compatibility: fail; pillow-simd → pillow-simd |
| pipeline-op.grayscale.material-ycbcr-noise-1024x768 | YCbCr | pillow-simd | 145.371 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.thumbnail.native-f32-1024x768 | F | pillow-simd | 1,752.864 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.thumbnail.native-i32-1024x768 | I | pillow-simd | 5,359.658 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.filter.material-l-noise-5x5-1024x768 | L | pillow-simd | 4,049.775 | 100 | completed; Pillow-SIMD compatibility: fail; pillow-simd → pillow-simd |
| pipeline-op.filter.material-l-noise-flat-5x5-1024x768 | L | pillow-simd | 4,049.735 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.filter.material-la-noise-5x5-1024x768 | LA | pillow-simd | 5,385.305 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.filter.material-la-nonmatching-5x5-1024x768 | LA | pillow-simd | 5,395.283 | 100 | completed; Pillow-SIMD compatibility: fail; pillow-simd → pillow-simd |
| pipeline-op.filter.material-la-noise-3x3-1024x768 | LA | pillow-simd | 2,903.980 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.filter.material-i-noise-5x5-1024x768 | I | pillow-simd | 12,779.783 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.filter.material-i-bounded-noise-5x5-1024x768 | I | pillow-simd | 12,892.733 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.rotate.material-rgb-nearest-noise-recovered-20261016-1024x768 | RGB | pillow-simd | 2,942.778 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pipeline-op.rotate.material-rgba-nearest-37deg-noise-fill-1024x768 | RGBA | pillow-simd | 5,952.751 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pil-imagefilter.gaussianblur.standard | RGB | pillow-simd | 9,582.246 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pil-image-image.getchannel.materialized.l-1024x768 | L | pillow-simd | 109.340 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pil-image-image.getchannel.materialized.rgb-1024x768 | RGB | pillow-simd | 206.710 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pil-image-image.getchannel.materialized.la-1024x768 | LA | pillow-simd | 202.173 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
| pil-image-image.getchannel.materialized.rgba-1024x768 | RGBA | pillow-simd | 217.667 | 100 | completed; Pillow-SIMD compatibility: pass; pillow-simd → pillow-simd |
Measurement notes¶
- This x86-only cohort compares pillow-rs CPU/SIMD, ordinary Pillow 12.1.1, and Pillow-SIMD 12.1.1.post0 on identical workloads and measurement policies.
- Pillow-SIMD and Pillow were run in separate virtual environments because both install the PIL namespace. pillow-rs CPU/SIMD parity uses regular Pillow; Pillow-SIMD compatibility is checked separately and incompatible baseline cells remain visible with their speed ratios withheld.
- The matched cohort covers 37 full-size, parity-backed workflow IDs: 32 pipeline-op workloads, the established RGB GaussianBlur case, and getchannel in L, LA, RGB, and RGBA. Each measured source uses the same input and measurement policy per workflow; target profiles appear only when declared by that workload.
- This cohort uses the Pillow-SIMD default SSE4 build. It is not comparable with the Apple ARM measurements on the main benchmark page.
- Pillow-SIMD output differed from regular Pillow on 3 workload(s); those baseline cells are retained and no Pillow-SIMD speed ratio is accepted: pipeline-op.filter.material-l-noise-5x5-1024x768, pipeline-op.filter.material-la-nonmatching-5x5-1024x768, pipeline-op.grayscale.material-rgb-noise-1024x768.
Source revision: 5db7197532eb08b37d748a78fb789545ab8aa577 · Run: migration-benchmark-15a619ce4f8547ff84fb69e2fa482c31+migration-benchmark-231f0c51d0f845048dcc2e801d85d6d7 · Policy: Paired x86 cohort; pillow-rs CPU/SIMD correctness is gated against regular Pillow 12.1.1. Pillow-SIMD timings are compared only where its outputs also match regular Pillow..
Download the public measurement data or see the contributor benchmark guide.