Lucen benchmark report
Generated from tests/benchmarks/results/*.json (7 interpreters).
Environment
- CPU: 12th Gen Intel(R) Core(TM) i5-12450HX
- Logical cores: 12
- OS: Windows 11 Pro (10.0.26200)
- Interpreters: CPython standalone builds (astral-sh/python-build-standalone) except 3.11.0 (system install); 3.14.6t is the free-threaded build (GIL disabled).
- Lucen: this repository at the commit that generated this file; native
_core (Rust, abi3) loads on every GIL build 3.9-3.14, pure-Python fallback on 3.14t.
Method
- Every number is the median of 5 repetitions after one discarded warm-up, a 1 s idle pause before each series, and per-interpreter cooldowns. Thread/process pools are created once and warm before timing.
Lucen seq/thread/process force the backend with the profitability gate bypassed, so the forced machinery really runs - these are diagnostics of raw pathway cost.
Lucen (gate on) is the shipped product: the router chooses; the chosen backend is reported.
- The hand-written comparison code was generated by an AI to an expert-Python standard (warm
concurrent.futures pools, one chunk per core, sliced inputs, partial-sum reductions, direct disjoint writes). It is the style a proficient human would write, but no human wrote or tuned it; treat cross-checks accordingly.
native Python means the identical marked file with the pragmas treated as what they are - comments. It is the program with Lucen entirely absent (exec of the source, no import hook, no twin), i.e. the exact code a user had before adding the two pragma lines. Because these benchmark sources live at module scope, their name lookups compile to LOAD_GLOBAL; the function-scoped variants (Lucen seq, hand seq) use LOAD_FAST, which is why native can read slower than both on name-heavy light loops - that difference is CPython scoping, not Lucen.
- Correctness = exact equality against that same native run (floats compared bit-for-bit, containers element-wise).
- Known gaps and planned work are deliberately kept out of this report; where a number reflects one (e.g. the gate not yet exploiting
typed_buffers), the text says so briefly - refer to LIMITATIONS.md and ROADMAP.md for the full picture.
- Single machine, ambient background load not controlled beyond cooldowns; run-to-run variance on dispatch-bound cells is +/-15%. Ratios within ~0.9-1.1x should be read as parity.
Native primitives
The optional Rust core accelerates two orchestration primitives. Measured native versus the pure-Python twin: the write-set audit over 2M indices in 48 chunks, 36.5 ms native against 164.2 ms Python; the ordered 500k-element reduction fold with gaps, 6.1 ms native against 31.7 ms Python. Both preserve the sequential result bit for bit. A native element-wise slab commit was also evaluated and is deliberately not used: it measured slower than CPython's specialized list stores (22.5 ms against 15.8 ms per 500k), so that loop runs in Python.
Correctness (bit-identical to plain Python)
Y = every element exactly equal, floats bit-for-bit. Hand-written thread/process reductions re-associate float addition - their divergence is expected and shown honestly; Lucen guarantees sequential-exact folds on every backend.
3.9.23
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.10.20
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.11.0
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.12.13
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.13.14
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.14.6
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.14.6t
| workload |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
| light map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| medium map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy map |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| light reduction |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| heavy reduction |
Y |
Y |
Y |
Y |
Y |
N |
N |
| recognized DAG |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| buffer map (array) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
| nested heavy |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
3.9.23 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
72.2 |
47.2 |
51.2 |
96.6 |
48.3 |
59.4 |
61.4 |
85.1 |
sequential |
0.81x |
| medium map |
40,000 |
128.9 |
133.1 |
138.0 |
43.2 |
44.0 |
131.4 |
138.8 |
38.1 |
process |
1.15x |
| heavy map |
20,000 |
1248.7 |
1297.9 |
1385.6 |
366.7 |
401.1 |
1295.2 |
1340.8 |
316.1 |
process |
1.27x |
| light reduction |
1,000,000 |
55.0 |
29.8 |
111.8 |
147.8 |
31.2 |
28.7 |
31.6 |
34.2 |
sequential |
1.08x |
| heavy reduction |
20,000 |
1247.0 |
1306.8 |
1343.0 |
376.4 |
412.2 |
1307.8 |
1310.4 |
351.0 |
process |
1.17x |
| recognized DAG |
100,000 |
12.1 |
8.3 |
23.1 |
8.9 |
8.8 |
12.2 |
14.8 |
73.2 |
sequential |
0.72x |
| buffer map (array) |
1,000,000 |
75.9 |
64.2 |
65.2 |
114.5 |
63.5 |
65.7 |
65.8 |
39.6 |
sequential |
1.60x |
| nested heavy |
4,000 |
77.6 |
81.5 |
80.6 |
26.4 |
27.4 |
77.5 |
83.8 |
24.7 |
process |
1.11x |
3.10.20 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
73.8 |
50.8 |
52.4 |
95.8 |
50.4 |
59.8 |
59.7 |
78.8 |
sequential |
0.84x |
| medium map |
40,000 |
138.1 |
143.4 |
147.7 |
48.4 |
42.9 |
139.7 |
152.2 |
36.7 |
process |
1.17x |
| heavy map |
20,000 |
1258.0 |
1302.3 |
1284.6 |
364.2 |
382.1 |
1255.9 |
1306.2 |
322.8 |
process |
1.18x |
| light reduction |
1,000,000 |
54.1 |
29.1 |
116.7 |
149.9 |
33.1 |
28.9 |
29.8 |
33.5 |
sequential |
1.14x |
| heavy reduction |
20,000 |
1273.0 |
1270.0 |
1292.6 |
386.7 |
395.6 |
1331.7 |
1442.8 |
328.8 |
process |
1.20x |
| recognized DAG |
100,000 |
12.0 |
8.9 |
25.2 |
9.2 |
9.2 |
11.5 |
15.4 |
73.9 |
sequential |
0.80x |
| buffer map (array) |
1,000,000 |
77.1 |
57.5 |
62.1 |
115.5 |
58.0 |
65.1 |
64.8 |
38.3 |
sequential |
1.51x |
| nested heavy |
4,000 |
79.0 |
94.2 |
86.8 |
26.9 |
27.1 |
80.8 |
84.3 |
25.0 |
process |
1.09x |
3.11.0 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
67.7 |
48.5 |
50.0 |
89.2 |
47.0 |
88.1 |
60.8 |
89.2 |
sequential |
0.77x |
| medium map |
40,000 |
116.5 |
119.5 |
124.9 |
38.2 |
39.6 |
118.3 |
137.6 |
36.9 |
process |
1.07x |
| heavy map |
20,000 |
1059.9 |
1123.9 |
1154.5 |
308.0 |
299.1 |
1086.6 |
1086.3 |
266.3 |
process |
1.12x |
| light reduction |
1,000,000 |
55.0 |
28.1 |
130.3 |
151.5 |
31.8 |
29.0 |
30.4 |
35.2 |
sequential |
1.10x |
| heavy reduction |
20,000 |
1054.1 |
1042.8 |
1128.4 |
296.7 |
322.2 |
1063.8 |
1083.7 |
264.9 |
process |
1.22x |
| recognized DAG |
100,000 |
11.3 |
8.1 |
20.1 |
7.5 |
8.1 |
10.2 |
11.2 |
70.2 |
sequential |
0.80x |
| buffer map (array) |
1,000,000 |
81.5 |
59.7 |
62.4 |
119.8 |
58.2 |
64.5 |
69.9 |
43.9 |
sequential |
1.33x |
| nested heavy |
4,000 |
68.9 |
72.4 |
74.4 |
23.8 |
23.4 |
73.1 |
82.8 |
22.4 |
process |
1.05x |
3.12.13 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
70.1 |
47.8 |
51.9 |
89.0 |
43.7 |
60.2 |
58.7 |
81.8 |
sequential |
0.74x |
| medium map |
40,000 |
104.9 |
107.5 |
105.9 |
33.9 |
34.5 |
107.5 |
114.1 |
31.0 |
process |
1.11x |
| heavy map |
20,000 |
1035.2 |
1105.8 |
1059.9 |
287.5 |
309.9 |
1046.5 |
1051.2 |
253.0 |
process |
1.23x |
| light reduction |
1,000,000 |
58.4 |
29.5 |
109.3 |
137.5 |
32.4 |
30.6 |
30.7 |
31.3 |
sequential |
1.06x |
| heavy reduction |
20,000 |
1033.3 |
1043.6 |
1044.6 |
291.1 |
313.9 |
1081.4 |
1071.3 |
247.7 |
process |
1.27x |
| recognized DAG |
100,000 |
10.4 |
7.2 |
21.1 |
7.4 |
7.4 |
8.0 |
11.5 |
37.4 |
sequential |
0.93x |
| buffer map (array) |
1,000,000 |
77.4 |
54.1 |
53.8 |
100.2 |
52.8 |
59.4 |
59.6 |
32.2 |
sequential |
1.64x |
| nested heavy |
4,000 |
64.2 |
61.1 |
63.0 |
17.9 |
24.0 |
61.4 |
62.1 |
14.4 |
process |
1.67x |
3.13.14 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
78.7 |
36.9 |
39.2 |
76.6 |
37.0 |
48.8 |
51.0 |
71.0 |
sequential |
0.76x |
| medium map |
40,000 |
102.9 |
98.8 |
102.7 |
29.1 |
30.1 |
99.3 |
102.0 |
24.1 |
process |
1.25x |
| heavy map |
20,000 |
1028.8 |
1047.4 |
1073.0 |
270.7 |
299.1 |
1034.6 |
1049.3 |
246.8 |
process |
1.21x |
| light reduction |
1,000,000 |
61.3 |
26.5 |
105.3 |
128.6 |
29.4 |
27.6 |
28.0 |
31.1 |
sequential |
1.07x |
| heavy reduction |
20,000 |
1028.0 |
1041.9 |
1048.6 |
279.2 |
284.4 |
1069.2 |
1072.6 |
244.6 |
process |
1.16x |
| recognized DAG |
100,000 |
12.3 |
6.3 |
19.6 |
6.7 |
6.6 |
7.8 |
11.7 |
35.4 |
sequential |
0.84x |
| buffer map (array) |
1,000,000 |
90.7 |
54.1 |
57.4 |
99.7 |
53.5 |
58.8 |
60.8 |
35.5 |
sequential |
1.51x |
| nested heavy |
4,000 |
61.6 |
59.0 |
61.1 |
18.1 |
17.6 |
58.3 |
59.5 |
13.7 |
process |
1.29x |
3.14.6 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
72.7 |
31.6 |
34.8 |
80.0 |
32.1 |
50.5 |
55.5 |
73.6 |
sequential |
0.64x |
| medium map |
40,000 |
117.0 |
113.7 |
116.7 |
35.1 |
32.4 |
116.0 |
122.5 |
25.9 |
process |
1.25x |
| heavy map |
20,000 |
1072.4 |
1071.0 |
1084.2 |
280.4 |
282.5 |
1070.8 |
1102.4 |
244.0 |
process |
1.16x |
| light reduction |
1,000,000 |
60.6 |
28.5 |
107.8 |
135.6 |
31.7 |
31.8 |
31.6 |
34.4 |
sequential |
1.00x |
| heavy reduction |
20,000 |
1072.3 |
1068.9 |
1091.4 |
288.6 |
286.6 |
1086.7 |
1084.0 |
243.2 |
process |
1.18x |
| recognized DAG |
100,000 |
12.3 |
6.7 |
19.5 |
6.7 |
6.7 |
8.0 |
12.7 |
33.8 |
sequential |
0.84x |
| buffer map (array) |
1,000,000 |
93.2 |
54.6 |
57.3 |
100.9 |
55.5 |
63.7 |
67.7 |
35.1 |
sequential |
1.58x |
| nested heavy |
4,000 |
72.7 |
71.9 |
75.6 |
18.8 |
20.3 |
71.9 |
72.4 |
14.9 |
process |
1.37x |
3.14.6t (native accel: no)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
93.3 |
49.3 |
755.0 |
109.0 |
45.1 |
52.2 |
1173.9 |
68.0 |
sequential |
0.86x |
| medium map |
40,000 |
126.1 |
116.4 |
40.0 |
36.2 |
34.7 |
116.9 |
29.9 |
28.5 |
process |
1.22x |
| heavy map |
20,000 |
1133.5 |
1117.9 |
279.6 |
305.7 |
301.1 |
1128.8 |
267.3 |
268.8 |
thread |
1.13x |
| light reduction |
1,000,000 |
77.6 |
31.7 |
141.7 |
160.2 |
35.8 |
33.9 |
95.8 |
34.2 |
sequential |
1.05x |
| heavy reduction |
20,000 |
1130.5 |
1126.5 |
281.7 |
304.6 |
301.7 |
1130.8 |
264.7 |
265.6 |
thread |
1.14x |
| recognized DAG |
100,000 |
14.4 |
7.9 |
18.8 |
7.8 |
7.5 |
9.0 |
79.5 |
25.7 |
sequential |
0.84x |
| buffer map (array) |
1,000,000 |
106.3 |
66.7 |
103.9 |
125.3 |
67.1 |
68.0 |
129.5 |
26.6 |
sequential |
2.52x |
| nested heavy |
4,000 |
74.1 |
71.4 |
18.2 |
19.7 |
16.6 |
70.6 |
14.5 |
16.4 |
thread |
1.15x |
The product view: Lucen (gate on) across versions
| workload |
3.9.23 |
3.10.20 |
3.11.0 |
3.12.13 |
3.13.14 |
3.14.6 |
3.14.6t |
| light map |
48.3 (sequ) |
50.4 (sequ) |
47.0 (sequ) |
43.7 (sequ) |
37.0 (sequ) |
32.1 (sequ) |
45.1 (sequ) |
| medium map |
44.0 (proc) |
42.9 (proc) |
39.6 (proc) |
34.5 (proc) |
30.1 (proc) |
32.4 (proc) |
34.7 (proc) |
| heavy map |
401.1 (proc) |
382.1 (proc) |
299.1 (proc) |
309.9 (proc) |
299.1 (proc) |
282.5 (proc) |
301.1 (thre) |
| light reduction |
31.2 (sequ) |
33.1 (sequ) |
31.8 (sequ) |
32.4 (sequ) |
29.4 (sequ) |
31.7 (sequ) |
35.8 (sequ) |
| heavy reduction |
412.2 (proc) |
395.6 (proc) |
322.2 (proc) |
313.9 (proc) |
284.4 (proc) |
286.6 (proc) |
301.7 (thre) |
| recognized DAG |
8.8 (sequ) |
9.2 (sequ) |
8.1 (sequ) |
7.4 (sequ) |
6.6 (sequ) |
6.7 (sequ) |
7.5 (sequ) |
| buffer map (array) |
63.5 (sequ) |
58.0 (sequ) |
58.2 (sequ) |
52.8 (sequ) |
53.5 (sequ) |
55.5 (sequ) |
67.1 (sequ) |
| nested heavy |
27.4 (proc) |
27.1 (proc) |
23.4 (proc) |
24.0 (proc) |
17.6 (proc) |
20.3 (proc) |
16.6 (thre) |
| workload |
3.9.23 |
3.10.20 |
3.11.0 |
3.12.13 |
3.13.14 |
3.14.6 |
3.14.6t |
| light map |
72.2 |
73.8 |
67.7 |
70.1 |
78.7 |
72.7 |
93.3 |
| medium map |
128.9 |
138.1 |
116.5 |
104.9 |
102.9 |
117.0 |
126.1 |
| heavy map |
1248.7 |
1258.0 |
1059.9 |
1035.2 |
1028.8 |
1072.4 |
1133.5 |
| light reduction |
55.0 |
54.1 |
55.0 |
58.4 |
61.3 |
60.6 |
77.6 |
| heavy reduction |
1247.0 |
1273.0 |
1054.1 |
1033.3 |
1028.0 |
1072.3 |
1130.5 |
| recognized DAG |
12.1 |
12.0 |
11.3 |
10.4 |
12.3 |
12.3 |
14.4 |
| buffer map (array) |
75.9 |
77.1 |
81.5 |
77.4 |
90.7 |
93.2 |
106.3 |
| nested heavy |
77.6 |
79.0 |
68.9 |
64.2 |
61.6 |
72.7 |
74.1 |
Gate speedup vs its own sequential twin, across versions
| workload |
3.9.23 |
3.10.20 |
3.11.0 |
3.12.13 |
3.13.14 |
3.14.6 |
3.14.6t |
| light map |
0.98x |
1.01x |
1.03x |
1.09x |
1.00x |
0.99x |
1.09x |
| medium map |
3.02x |
3.35x |
3.02x |
3.12x |
3.28x |
3.51x |
3.36x |
| heavy map |
3.24x |
3.41x |
3.76x |
3.57x |
3.50x |
3.79x |
3.71x |
| light reduction |
0.96x |
0.88x |
0.88x |
0.91x |
0.90x |
0.90x |
0.89x |
| heavy reduction |
3.17x |
3.21x |
3.24x |
3.32x |
3.66x |
3.73x |
3.73x |
| recognized DAG |
0.94x |
0.98x |
0.99x |
0.97x |
0.97x |
1.00x |
1.04x |
| buffer map (array) |
1.01x |
0.99x |
1.03x |
1.02x |
1.01x |
0.98x |
0.99x |
| nested heavy |
2.97x |
3.47x |
3.09x |
2.54x |
3.36x |
3.54x |
4.29x |
Experimental flags enabled (early_exit, branch_sensitive_deps, typed_buffers)
The identical matrix re-run with every experimental feature active. None of the eight workloads contains a break or a branch-classification disagreement, so early_exit and branch_sensitive_deps are structurally inert here - and measurement agrees: of the 343 non-buffer timing cells, 322 are within the +/-15% noise band of the baseline, and the 21 outliers are scattered sub-100 ms dispatch-bound cells with no systematic direction, dominated by hand-written pathways the flags cannot touch - measurement noise, not flag effects. The one active flag for these shapes is typed_buffers: a dense map into an array.array ships typed result slabs on PROCESS instead of Python lists.
Correctness with flags on: Lucen bit-identical in 224/224 pathway cells (no divergence; the hand-written float reductions differ exactly as in the baseline).
typed_buffers impact: buffer map (array), PROCESS pathway
| interpreter |
proc baseline |
proc flags-on |
change |
hand proc |
gate chose (flags) |
| 3.9.23 |
114.5 |
46.0 |
0.40x |
37.4 |
sequential |
| 3.10.20 |
115.5 |
46.9 |
0.41x |
38.0 |
sequential |
| 3.11.0 |
119.8 |
38.5 |
0.32x |
38.6 |
sequential |
| 3.12.13 |
100.2 |
35.6 |
0.36x |
34.4 |
sequential |
| 3.13.14 |
99.7 |
35.9 |
0.36x |
34.5 |
sequential |
| 3.14.6 |
100.9 |
40.5 |
0.40x |
36.8 |
sequential |
| 3.14.6t |
125.3 |
38.6 |
0.31x |
28.5 |
sequential |
Typed slabs bring the forced-PROCESS pathway from ~2.6x hand-written down to parity with it. The gate still routes buffer maps sequential even with the flag on - a known, deliberate gap (the cost model is not yet flag-aware), so the typed pathway's win over sequential currently requires backend=process. See LIMITATIONS.md and ROADMAP.md.
3.9.23 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
72.2 |
45.9 |
49.4 |
90.3 |
50.9 |
58.1 |
59.0 |
80.8 |
sequential |
0.88x |
| medium map |
40,000 |
128.9 |
130.3 |
134.2 |
42.0 |
40.2 |
131.7 |
133.1 |
33.1 |
process |
1.21x |
| heavy map |
20,000 |
1248.7 |
1273.7 |
1269.7 |
348.1 |
352.8 |
1262.9 |
1274.9 |
306.4 |
process |
1.15x |
| light reduction |
1,000,000 |
55.0 |
28.6 |
112.1 |
140.8 |
31.1 |
29.1 |
29.0 |
33.8 |
sequential |
1.07x |
| heavy reduction |
20,000 |
1247.0 |
1284.3 |
1274.6 |
353.4 |
359.6 |
1261.6 |
1268.9 |
311.8 |
process |
1.15x |
| recognized DAG |
100,000 |
12.1 |
8.1 |
22.3 |
9.0 |
8.3 |
11.8 |
14.5 |
71.6 |
sequential |
0.70x |
| buffer map (array) |
1,000,000 |
75.9 |
58.5 |
64.5 |
46.0 |
62.9 |
66.5 |
65.6 |
37.4 |
sequential |
1.68x |
| nested heavy |
4,000 |
77.6 |
78.3 |
81.4 |
23.7 |
23.9 |
82.1 |
79.6 |
18.9 |
process |
1.27x |
3.10.20 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
73.8 |
48.5 |
51.1 |
90.7 |
50.2 |
58.8 |
57.9 |
84.6 |
sequential |
0.87x |
| medium map |
40,000 |
138.1 |
130.4 |
134.4 |
41.0 |
41.6 |
131.4 |
134.2 |
32.3 |
process |
1.29x |
| heavy map |
20,000 |
1258.0 |
1267.4 |
1290.8 |
349.7 |
350.8 |
1271.4 |
1276.0 |
329.1 |
process |
1.07x |
| light reduction |
1,000,000 |
54.1 |
30.3 |
119.4 |
146.0 |
32.6 |
31.2 |
30.7 |
34.4 |
sequential |
1.06x |
| heavy reduction |
20,000 |
1273.0 |
1250.2 |
1260.2 |
355.6 |
355.8 |
1264.1 |
1285.1 |
312.5 |
process |
1.14x |
| recognized DAG |
100,000 |
12.0 |
9.7 |
24.7 |
9.4 |
12.4 |
11.6 |
16.1 |
72.3 |
sequential |
1.07x |
| buffer map (array) |
1,000,000 |
77.1 |
59.9 |
57.3 |
46.9 |
56.1 |
59.2 |
60.3 |
38.0 |
sequential |
1.47x |
| nested heavy |
4,000 |
79.0 |
78.8 |
80.1 |
25.8 |
25.1 |
77.8 |
80.9 |
20.3 |
process |
1.24x |
3.11.0 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
67.7 |
41.4 |
42.6 |
81.7 |
40.1 |
51.7 |
53.9 |
92.8 |
sequential |
0.78x |
| medium map |
40,000 |
116.5 |
113.4 |
116.9 |
35.1 |
33.6 |
113.5 |
115.3 |
27.3 |
process |
1.23x |
| heavy map |
20,000 |
1059.9 |
1043.6 |
1044.8 |
278.4 |
281.3 |
1054.4 |
1059.7 |
241.0 |
process |
1.17x |
| light reduction |
1,000,000 |
55.0 |
28.2 |
110.2 |
137.8 |
31.2 |
29.8 |
30.5 |
33.9 |
sequential |
1.05x |
| heavy reduction |
20,000 |
1054.1 |
1057.8 |
1076.3 |
278.1 |
280.8 |
1046.3 |
1055.5 |
244.9 |
process |
1.15x |
| recognized DAG |
100,000 |
11.3 |
7.4 |
20.5 |
7.7 |
7.5 |
8.3 |
11.2 |
69.3 |
sequential |
0.89x |
| buffer map (array) |
1,000,000 |
81.5 |
57.0 |
59.0 |
38.5 |
57.5 |
61.0 |
63.0 |
38.6 |
sequential |
1.49x |
| nested heavy |
4,000 |
68.9 |
67.1 |
70.7 |
23.6 |
23.7 |
74.1 |
74.2 |
16.7 |
process |
1.42x |
3.12.13 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
70.1 |
42.9 |
43.8 |
79.4 |
43.1 |
55.1 |
56.1 |
86.4 |
sequential |
0.78x |
| medium map |
40,000 |
104.9 |
102.2 |
106.4 |
29.3 |
29.0 |
103.0 |
105.9 |
24.1 |
process |
1.21x |
| heavy map |
20,000 |
1035.2 |
1036.3 |
1049.1 |
256.9 |
260.0 |
1033.9 |
1044.8 |
226.4 |
process |
1.15x |
| light reduction |
1,000,000 |
58.4 |
30.8 |
107.5 |
130.7 |
32.5 |
31.1 |
33.6 |
34.7 |
sequential |
1.05x |
| heavy reduction |
20,000 |
1033.3 |
1034.8 |
1044.7 |
269.5 |
269.6 |
1047.3 |
1038.9 |
229.7 |
process |
1.17x |
| recognized DAG |
100,000 |
10.4 |
6.6 |
19.6 |
6.8 |
7.2 |
7.8 |
10.2 |
37.6 |
sequential |
0.92x |
| buffer map (array) |
1,000,000 |
77.4 |
53.1 |
56.5 |
35.6 |
53.5 |
61.6 |
63.0 |
34.4 |
sequential |
1.56x |
| nested heavy |
4,000 |
64.2 |
63.5 |
65.2 |
18.3 |
17.9 |
63.1 |
63.3 |
14.3 |
process |
1.25x |
3.13.14 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
78.7 |
37.6 |
39.2 |
74.0 |
37.4 |
46.8 |
50.0 |
72.7 |
sequential |
0.80x |
| medium map |
40,000 |
102.9 |
96.4 |
100.6 |
28.8 |
29.4 |
98.6 |
102.3 |
24.0 |
process |
1.23x |
| heavy map |
20,000 |
1028.8 |
1047.3 |
1055.5 |
278.0 |
277.9 |
1041.4 |
1054.6 |
242.1 |
process |
1.15x |
| light reduction |
1,000,000 |
61.3 |
27.2 |
103.8 |
126.9 |
30.6 |
28.0 |
31.2 |
33.8 |
sequential |
1.10x |
| heavy reduction |
20,000 |
1028.0 |
1035.0 |
1063.8 |
276.7 |
274.5 |
1028.8 |
1044.2 |
243.4 |
process |
1.13x |
| recognized DAG |
100,000 |
12.3 |
6.7 |
19.7 |
6.0 |
6.2 |
13.8 |
18.7 |
39.6 |
sequential |
0.45x |
| buffer map (array) |
1,000,000 |
90.7 |
55.5 |
57.2 |
35.9 |
55.4 |
61.6 |
62.7 |
34.5 |
sequential |
1.61x |
| nested heavy |
4,000 |
61.6 |
59.5 |
62.5 |
17.8 |
18.1 |
58.9 |
59.0 |
14.4 |
process |
1.26x |
3.14.6 (native accel: yes)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
72.7 |
31.5 |
34.8 |
81.7 |
31.9 |
54.5 |
59.1 |
81.0 |
sequential |
0.59x |
| medium map |
40,000 |
117.0 |
114.5 |
117.5 |
33.5 |
31.7 |
114.5 |
116.8 |
26.3 |
process |
1.20x |
| heavy map |
20,000 |
1072.4 |
1067.3 |
1100.4 |
286.3 |
275.4 |
1078.4 |
1085.7 |
241.8 |
process |
1.14x |
| light reduction |
1,000,000 |
60.6 |
31.1 |
106.3 |
136.2 |
32.3 |
34.2 |
31.7 |
33.6 |
sequential |
1.02x |
| heavy reduction |
20,000 |
1072.3 |
1080.5 |
1092.4 |
277.4 |
279.7 |
1071.8 |
1078.2 |
242.3 |
process |
1.15x |
| recognized DAG |
100,000 |
12.3 |
6.2 |
20.3 |
6.9 |
6.8 |
8.5 |
12.4 |
35.6 |
sequential |
0.80x |
| buffer map (array) |
1,000,000 |
93.2 |
54.5 |
57.5 |
40.5 |
56.0 |
63.0 |
68.5 |
36.8 |
sequential |
1.52x |
| nested heavy |
4,000 |
72.7 |
72.8 |
75.4 |
20.0 |
19.2 |
72.3 |
73.1 |
14.3 |
process |
1.34x |
3.14.6t (native accel: no)
| workload |
n |
native Python |
Lucen seq |
Lucen thread |
Lucen process |
Lucen (gate on) |
hand seq |
hand thread |
hand process |
gate chose |
gate vs best hand |
| light map |
1,000,000 |
93.3 |
45.8 |
841.9 |
108.6 |
46.0 |
53.1 |
894.3 |
70.9 |
sequential |
0.87x |
| medium map |
40,000 |
126.1 |
117.3 |
40.1 |
35.8 |
36.6 |
117.9 |
30.2 |
35.2 |
process |
1.21x |
| heavy map |
20,000 |
1133.5 |
1122.0 |
280.8 |
306.8 |
305.7 |
1128.4 |
283.9 |
269.0 |
thread |
1.14x |
| light reduction |
1,000,000 |
77.6 |
31.3 |
133.8 |
163.2 |
35.0 |
33.4 |
98.7 |
34.6 |
sequential |
1.05x |
| heavy reduction |
20,000 |
1130.5 |
1122.6 |
287.4 |
313.5 |
305.8 |
1131.0 |
266.1 |
269.2 |
thread |
1.15x |
| recognized DAG |
100,000 |
14.4 |
7.6 |
19.0 |
7.9 |
7.8 |
8.9 |
84.0 |
24.9 |
sequential |
0.88x |
| buffer map (array) |
1,000,000 |
106.3 |
66.6 |
97.7 |
38.6 |
67.2 |
68.8 |
123.6 |
28.5 |
sequential |
2.36x |
| nested heavy |
4,000 |
74.1 |
71.0 |
16.1 |
20.3 |
17.2 |
70.6 |
15.5 |
16.1 |
thread |
1.11x |
Summary: best numbers across all interpreters
Ranges span the seven interpreters; peaks name the interpreter that produced them. Lucen gate is the shipped product (router deciding); Lucen peak (flags) is the best Lucen number with every experimental flag on across any backend, forced ones included - an expert ceiling, not the default. best hand is the fastest AI-generated hand-written variant (which, for float reductions, is not bit-identical to native Python; Lucen always is).
| workload |
native range (ms) |
Lucen gate range (ms) |
Lucen gate peak |
Lucen peak (flags, any backend) |
best hand-written |
| light map |
67.7 - 93.3 |
32.1 - 50.4 |
32.1 @ 3.14.6 (sequential) |
31.5 @ 3.14.6 (seq (forced)) |
48.8 @ 3.13.14 (seq) |
| medium map |
102.9 - 138.1 |
30.1 - 44.0 |
30.1 @ 3.13.14 (process) |
28.8 @ 3.13.14 (proc (forced)) |
24.1 @ 3.13.14 (proc) |
| heavy map |
1028.8 - 1258.0 |
282.5 - 401.1 |
282.5 @ 3.14.6 (process) |
256.9 @ 3.12.13 (proc (forced)) |
244.0 @ 3.14.6 (proc) |
| light reduction |
54.1 - 77.6 |
29.4 - 35.8 |
29.4 @ 3.13.14 (sequential) |
27.2 @ 3.13.14 (seq (forced)) |
27.6 @ 3.13.14 (seq) |
| heavy reduction |
1028.0 - 1273.0 |
284.4 - 412.2 |
284.4 @ 3.13.14 (process) |
269.5 @ 3.12.13 (proc (forced)) |
243.2 @ 3.14.6 (proc) |
| recognized DAG |
10.4 - 14.4 |
6.6 - 9.2 |
6.6 @ 3.13.14 (sequential) |
6.0 @ 3.13.14 (proc (forced)) |
7.8 @ 3.13.14 (seq) |
| buffer map (array) |
75.9 - 106.3 |
52.8 - 67.1 |
52.8 @ 3.12.13 (sequential) |
35.6 @ 3.12.13 (proc (forced)) |
26.6 @ 3.14.6t (proc) |
| nested heavy |
61.6 - 79.0 |
16.6 - 27.4 |
16.6 @ 3.14.6t (thread) |
16.1 @ 3.14.6t (thr (forced)) |
13.7 @ 3.13.14 (proc) |