How each schedule scales from 1 to 16 threads, from the renderer's committed benchmark CSVs. Medians of 5 runs; speedup is against each sweep's own serial, one-thread median.
setup
800×450, 16 samples per pixel, depth 8, 32 px tiles, seed 123, 5 runs per configuration. AMD Ryzen 9 9950X3D (16 cores, 32 threads), WSL2 Ubuntu 24.04, GCC 13.3, -O3. Efficiency is speedup divided by thread count. The dashed line is perfect scaling.
serial one thread, the baseline
static a fixed, contiguous block of tiles per thread
dynamic threads take the next tile from an atomic tile index
openmp OpenMP schedule(dynamic)
medium scene, 2026-09-01 (reference)
The reference run for dynamic and OpenMP. Static wasn’t run on the medium scene that day. Serial baseline: 474.9 ms.
Speedup vs. threadsEfficiency vs. threads
table
medium scene, 2026-09-01 (reference): medians of 5 runs
schedule
threads
median ms
range ms
speedup
efficiency
serial
1
474.896
474.611–477.126
1.00×
100.0%
serial
2
475.739
475.411–481.784
1.00×
49.9%
serial
4
475.933
475.261–480.124
1.00×
24.9%
serial
8
475.331
475.111–476.861
1.00×
12.5%
serial
16
475.066
474.677–476.210
1.00×
6.2%
dynamic
1
477.758
477.626–478.795
0.99×
99.4%
dynamic
2
240.590
239.553–241.612
1.97×
98.7%
dynamic
4
121.996
121.734–122.854
3.89×
97.3%
dynamic
8
62.542
61.892–63.030
7.59×
94.9%
dynamic
16
35.735
34.947–37.213
13.29×
83.1%
openmp
1
478.357
477.642–491.315
0.99×
99.3%
openmp
2
240.506
240.307–241.853
1.97×
98.7%
openmp
4
138.983
121.338–139.088
3.42×
85.4%
openmp
8
61.686
61.283–62.642
7.70×
96.2%
openmp
16
36.086
35.369–37.930
13.16×
82.3%
medium scene, 2026-10-23 (with static)
All four schedules in one sweep, so static can be compared directly. Dynamic and OpenMP came out 3–7% faster than on 2026-09-01, within run-to-run variation on WSL2; the 2026-09-01 numbers stay the reference. Serial baseline: 468.6 ms.
Speedup vs. threadsEfficiency vs. threads
table
medium scene, 2026-10-23 (with static): medians of 5 runs
schedule
threads
median ms
range ms
speedup
efficiency
serial
1
468.605
465.615–470.896
1.00×
100.0%
serial
2
465.854
462.349–467.296
1.01×
50.3%
serial
4
464.394
461.343–468.014
1.01×
25.2%
serial
8
462.561
460.414–463.814
1.01×
12.7%
serial
16
464.864
461.697–469.085
1.01×
6.3%
static
1
465.352
463.594–467.906
1.01×
100.7%
static
2
257.821
257.144–259.773
1.82×
90.9%
static
4
179.446
179.156–179.762
2.61×
65.3%
static
8
101.924
101.159–102.609
4.60×
57.5%
static
16
52.646
51.656–57.830
8.90×
55.6%
dynamic
1
466.615
464.261–566.838
1.00×
100.4%
dynamic
2
233.961
231.975–239.183
2.00×
100.1%
dynamic
4
117.558
117.039–118.024
3.99×
99.7%
dynamic
8
59.611
59.389–59.780
7.86×
98.3%
dynamic
16
33.489
33.103–34.539
13.99×
87.5%
openmp
1
466.092
464.823–472.769
1.01×
100.5%
openmp
2
232.807
232.327–249.801
2.01×
100.6%
openmp
4
117.101
116.887–117.333
4.00×
100.0%
openmp
8
59.332
59.262–60.295
7.90×
98.7%
openmp
16
35.477
34.461–36.598
13.21×
82.6%
simple scene, 2026-09-01
A lighter scene, up to 8 threads. Its numbers aren’t comparable with the medium scene’s. Serial baseline: 189.7 ms.
Speedup vs. threadsEfficiency vs. threads
table
simple scene, 2026-09-01: medians of 5 runs
schedule
threads
median ms
range ms
speedup
efficiency
serial
1
189.742
188.725–190.672
1.00×
100.0%
serial
2
190.247
189.734–191.146
1.00×
49.9%
serial
4
189.950
189.817–191.452
1.00×
25.0%
serial
8
190.155
189.981–190.297
1.00×
12.5%
static
1
190.437
190.345–190.742
1.00×
99.6%
static
2
123.359
123.217–146.692
1.54×
76.9%
static
4
85.134
84.990–85.824
2.23×
55.7%
static
8
46.581
46.113–48.943
4.07×
50.9%
dynamic
1
195.287
194.854–195.930
0.97×
97.2%
dynamic
2
96.245
95.771–96.720
1.97×
98.6%
dynamic
4
48.494
48.456–48.635
3.91×
97.8%
dynamic
8
25.342
24.754–27.101
7.49×
93.6%
openmp
1
194.686
194.346–195.609
0.97×
97.5%
openmp
2
96.214
96.025–97.025
1.97×
98.6%
openmp
4
48.182
48.153–48.251
3.94×
98.5%
openmp
8
24.829
24.314–25.006
7.64×
95.5%
the image
Every schedule renders the same framebuffer, since each sample's random numbers are seeded from the seed, the pixel and the sample index. This is the medium scene at the benchmark's settings, rendered with the renderer's CLI.