Skip to content

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

Timings (ms, median of 5)

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)

Native Python (pragmas as comments) 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 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.

Full timings with flags on (ms, median of 5)

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)