Slang compile-time performance — complexity sweep

build v2026.5 · metric: median (ms) · 29 swept workload(s) · compile time vs workload size N, each curve a single binary scaled simple→complex.

Scaling curves (compileInner)

Each panel is one workload's compileInner vs N on a zero-based linear axis, flagged with the floor-subtracted exponent ∝Nk (red ⇒ super-linear, k>1.15). Click a workload name for its sub-counter stacked view, the full scaling analysis (floor 9 ms / k / top-2×), and the raw sweep numbers.

Complexity sweep — compileInner vs workload size N (median ms, linear) dashed = linear expectation: measured floor (the minimal workload) + slope fitted on the low-N half, extrapolated; the end-point label is actual/linear at max N (red when ≥1.15× — super-linear) complexity_ladder ∝N^1.24 0.0 1595 3191 160 320 640 1280 N 1.56× lin parse ∝N^0.99 0.0 840 1679 250 500 1000 2000 N 1.00× lin diagnostics_clean ∝N^0.78 0.0 116 231 400 800 1600 3200 N 0.77× lin sema_generics ∝N^0.99 0.0 469 937 125 250 500 1000 N 1.01× lin generic_nesting ∝N^12.58 0.0 791 1582 8 12 16 20 N 494.76× lin generic_nesting_eval ∝N^5.53 0.0 31 62 8 10 12 14 N 4.01× lin interface_depth ∝N^3.80 0.0 30 60 16 32 64 128 N conformance ∝N^1.06 0.0 333 666 600 1200 2400 4800 N 1.13× lin operator_typecheck ∝N^0.95 0.0 523 1046 200 400 800 1600 N 0.96× lin implicit_conversion ∝N^0.97 0.0 275 550 300 600 1200 2400 N 0.98× lin overload_resolution ∝N^0.92 0.0 129 258 600 1200 2400 4800 N 0.91× lin ir_builder ∝N^1.56 0.0 525 1051 500 1000 2000 4000 N 2.82× lin serialize ∝N^0.95 0.0 200 400 375 750 1500 3000 N 0.96× lin module_link ∝N^1.13 0.0 211 421 50 100 200 400 N 1.25× lin specialization ∝N^1.39 0.0 381 762 75 150 300 600 N 2.13× lin dynamic_dispatch ∝N^1.07 0.0 262 524 50 100 200 400 N 1.32× lin existential_aggregate ∝N^1.16 0.0 336 672 50 100 200 400 N 1.50× lin autodiff ∝N^1.21 0.0 577 1154 25 50 100 200 N 1.58× lin inlining ∝N^0.82 0.0 128 256 100 200 400 800 N 0.83× lin loop_unroll ∝N^1.72 0.0 1035 2071 75 150 300 600 N 3.63× lin control_flow_ssa ∝N^1.28 0.0 899 1798 60 120 240 480 N 1.74× lin resource_aggregate ∝N^1.32 0.0 507 1014 80 160 320 640 N 1.90× lin reflection_layout ∝N^1.39 0.0 411 823 30 60 120 240 N 2.02× lin codegen_spirv ∝N^1.77 0.0 1485 2970 100 200 400 800 N 3.71× lin emit_metal ∝N^1.77 0.0 1466 2932 100 200 400 800 N 3.86× lin emit_wgsl ∝N^1.67 0.0 1015 2029 100 200 400 800 N 3.37× lin emit_hlsl ∝N^1.68 0.0 1010 2020 100 200 400 800 N 3.44× lin emit_glsl ∝N^1.68 0.0 1030 2061 100 200 400 800 N 3.38× lin emit_cuda ∝N^1.50 0.0 582 1165 100 200 400 800 N 2.55× lin
Reading these: these synthetic workloads amplify one compiler pass each — the curve shape (the exponent k of the floor-subtracted fit (t − floor) = a·Nk), not the absolute ms, is the signal. k≈1 ⇒ cost is linear in code size; k>1 ⇒ a pass whose cost grows faster than its input, where regressions on large real shaders hide. The fixed floor is the minimal workload (subtracted before the fit, not refitted per workload), also the suite's standalone canary for "the stdlib got heavier". Per-workload pages carry the full analysis and numbers.

Generated by perf-suite/sweep_report.py from results/v2026.5/results.json. Companion to report.py (cross-release) and ladder_scaling.py (cross-release fit table).