# The budgets that `tests/speed.rs` checks. Each section starts with an item type in brackets. Each line under it holds a function's name and its two native budgets at that type, separated by tabs: first for macOS on Apple silicon, where matrix products and decompositions run on Accelerate, then for Linux on CI's x86 runner, where they run on rustymath's own kernels. `rustymath_timing::NATIVE_COLUMN` picks the budget a machine checks. A budget counts copies of as many items as the function's inputs hold, or its output for broadcasting.
# A budget is the function's expected cost times the multiplier that `rustymath_timing::budget` holds, as basedpl's DEV.md describes, and at least 0.5. A line such as `# held linux 14.2: REASON` above a function's line holds that column at the budget for the cost it gives, until the gap it names is fixed, and `# busy` does the same for CI's busy hosts, as `rustymath_timing::hold` reads them. The expected cost starts from a first-principles analysis of what the function should cost. A later expected cost comes from a fuller understanding of the function than that analysis gives, such as a platform difference or a cost the analysis missed. A comment above each function, or above its group, gives the expected cost and its reason, as in "1 copy: one read and one write per item", and records each later change with its reason.
# One expected cost serves both platforms at first. A platform's budget differs only where a specific difference on that platform is found, such as Accelerate's matrix products on macOS.
# A function that costs more than its budget needs study, which finds either a speed bug to fix or something the analysis missed. Avoid raising a budget to match a run without understanding why the function costs what it does.
# After its budgets, a function's line can record its counts for each item in more tab-separated fields, as `rustymath_timing::count` reads them, such as `instructions linux 33.1 macos 20.2` and `allocated linux 0`. `tests/speed.rs` fails a count more than `rustymath_timing::COUNT_MARGIN` times its record. `basedpl.bpltests.set_counts` writes the counts from a calibration run's log.
# CI's x86 runner is an AMD Ryzen 9 7950X3D 16-Core Processor.
# The macOS budgets come from an Apple M5 Max. On 23 October 2026 it measured Accelerate's rates for four classes of product, in flops in the time of a copy of the same item type, with real flops in a complex copy's time. A case whose product runs far from its class's rate gives its own measured rate.
# - Large square products: 58 at f64 and 117 at f32 for 1024×1024 matrices, and 110 and 189 for complex ones. 42 and 48 for 128×128 matrices, and 90 and 137 for complex ones.
# - Rank-k updates, products whose shared dimension is short, as blocked factorizations make: about 30 at f64 and f32 for rank-32 updates of 256×256 matrices, and 53 and 60 for complex 128×128 ones.
# - Matrix-vector products: about 7 at f64 and 5 at f32 for a 256×256 matrix, and 29 and 18 for a complex 128×128 one.
# - Tall thin Gram products, a tall matrix's transpose times the matrix: about 7 at f64 and 4 at f32 for a 4096×16 matrix.
[f64]
# 5.75 copies, for 23 vector ops: a test for each block of 64 items that every item lies within ±708, then reduction by ln 2, a degree-9 polynomial and one power of two. A block of items below -746, such as one that a causal mask fills with -∞, writes zeros. Any other block takes the clamp and two powers of two, which cost about 1.35 times as much on macOS.
Exp	12	14	instructions linux 10.288	allocated linux 0.002
# 5.75 copies, for 23 vector ops: exp's test and reduction, a degree-10 polynomial and one power of two, with the guards only in a block that holds an item beyond ±708.
Expm1	12	17	instructions linux 11.037	allocated linux 0.002
# 6.5 copies, for 26 vector ops: a test for each block of 64 items that every item is positive, normal and finite, then the split into mantissa and exponent, one division, a series in s² and the combine. A block of 64 items that holds a zero, a negative, a subnormal, an infinity or NaN takes the full form with its special values, which costs about 1.9 times as much on macOS.
Ln	13	15	instructions linux 16.226	allocated linux 0.002
# 10 copies, for 40 vector ops: ln's steps plus the correction for 1 + x, with the block test on 1 + x and on whether x is 0. A block of 64 items that holds a zero, a negative, a subnormal, an infinity or NaN takes the full form with its special values, which costs about 1.6 times as much on macOS.
Log1p	20	16	instructions linux 18.725	allocated linux 0.002
# 6.5 copies, for 26 vector ops: ln's steps with a scaled combine.
Log2	13	11	instructions linux 9.539	allocated linux 0.002
# 6.5 copies, for 26 vector ops: ln's steps with a scaled combine.
Log10	13	11	instructions linux 9.804	allocated linux 0.002
# 6.5 copies, for 26 vector ops: reduction by π/2, a polynomial, the quadrant.
Sin	13	12	instructions linux 12.788	allocated linux 0.002
# 7 copies, for 28 vector ops: sin's steps with a shifted quadrant.
Cos	14	12	instructions linux 13.413	allocated linux 0.002
# 8 copies, for 32 vector ops: reduction, a polynomial, a division.
Tan	16	17	instructions linux 13.913	allocated linux 0.002
# 7.5 copies, for 30 vector ops: a square root past 1/2, a polynomial, selects.
Asin	15	15	instructions linux 12.975	allocated linux 0.002
# 8 copies, for 32 vector ops: asin's steps and a reflection.
Acos	16	16	instructions linux 14.225	allocated linux 0.002
# 7 copies, for 28 vector ops: a reduction by division, a polynomial, selects.
Atan	14	16	instructions linux 11.537	allocated linux 0.002
# 10 copies, for 40 vector ops: expm1, a division, selects.
Sinh	20	20	instructions linux 13.788	allocated linux 0.002
# 8 copies, for 32 vector ops: exp and its reciprocal.
Cosh	16	14	instructions linux 10.788	allocated linux 0.002
# 7.5 copies, for 30 vector ops: expm1 without its guards, which |x| up to 20 never needs, a division and the sign.
Tanh	15	15	instructions linux 13.537	allocated linux 0.002
# 11.5 copies, for 46 vector ops: ln, a square root, selects.
Asinh	23	25	instructions linux 16.538	allocated linux 0.002
# 11.5 copies, for 46 vector ops: ln and a square root.
Acosh	23	27	instructions linux 17.975	allocated linux 0.002
# 10.5 copies, for 42 vector ops: log1p of a quotient.
Atanh	21	21	instructions linux 16.975	allocated linux 0.002
# 9 copies, for 36 vector ops: split, a polynomial, two Newton steps with divisions.
Cbrt	18	19	instructions linux 16.787	allocated linux 0.002
# 27.5 copies, for 110 vector ops: double-word ln and exp, special cases.
Pow	55	34	instructions linux 38.065	allocated linux 0.005
# 55 copies, for Pow's 110 ops as scalar code, pair by pair, at half a copy each.
# held linux 103: each pair calls the outlined scalar formula and its repair step through `facts::formula_at`; the released build took 21.7 ns a pair, against about 42 now
Pow.one	110	91	instructions linux 189.002	allocated linux 0
# 4 copies, for 16 vector ops: scaling, a square root, a division; two reads and a write take 1.5.
Hypot	8	7.2	instructions linux 5.558	allocated linux 0.005
# 28 copies, for Pow's steps with a reciprocal power.
Root	56	57	instructions linux 76.81	allocated linux 0.005
# 55 copies, for Root as scalar code, pair by pair.
# held linux 103: each pair calls the outlined scalar formula and its repair step through `facts::formula_at`; the released build took 18.0 ns a pair, against about 42 now
Root.one	110	94	instructions linux 172.002	allocated linux 0
# 1.5 copies, for two reads and one write per item.
Maximum	3	4.4	instructions linux 0.995	allocated linux 0.005
# 0.5 copies, for one read per item.
reduce::sum	1	1.5	instructions linux 0.329	allocated linux 0
# 0.5 copies, for one read per item.
reduce::max	1	1.6	instructions linux 0.579	allocated linux 0
# 1 copies, for one read and one write per item; the scan runs in vector steps.
reduce::Sum::scan	2	3.6	instructions linux 3.855	allocated linux 0
# 1 copies, for one read and one write per item; the scan runs in vector steps.
reduce::Max::scan	2	2.9	instructions linux 2.381	allocated linux 0
# 2.75 copies, for a read and a write (1) and 7 FMAs (1.75). It was 3.75 while `evaluate` worked in place, which its callers paid for with a copy of the input.
polynomial::evaluate	5.5	2.7	instructions linux 4.662	allocated linux 0
# 132 copies, for 530 vector ops: a double-word Lanczos sum and quotient, double-word ln of the exponent, exp_plus, sinpi for the reflection.
Gamma	270	150	instructions linux 159.587	allocated linux 0.01
# 54 copies, for 215 vector ops: a plain Lanczos sum, double-word ln, ln_split, sinpi.
Lgamma	110	110	instructions linux 102.088	allocated linux 0.01
# 17.5 copies, for 70 vector ops: both of erf's formulas for every item, x + x a(x²) with 13 terms and 1 - e^-(|x| + |x| b(|x|)) with 14 terms and the full `exp`, then the selects. macOS measures about 25 copies, about 1.45 times the count, for a reason not yet found.
Erf	35	42	instructions linux 29.148	allocated linux 0.01
# 32 copies, for 130 vector ops: rational pieces with divisions, a double-word -a², exp_plus.
Erfc	64	87	instructions linux 55.399	allocated linux 0.01
# 20 copies, for 80 vector ops: piecewise rationals, ln and a square root in the tails.
Erfinv	40	61	instructions linux 65.183	allocated linux 0.01
# 21 copies, for 85 vector ops: as erfinv, from 1 - q.
Erfcinv	42	72	instructions linux 85.206	allocated linux 0.01
# 450 copies, for 900 scalar ops: a double-word prefactor (300) and about 50 series or continued-fraction steps of 12 ops, at half a copy each.
Gammainc	900	840	instructions linux 962.909	allocated linux 0.312
# 450 copies, for Gammainc's 900 scalar ops.
Gammaincc	900	840	instructions linux 962.907	allocated linux 0.312
# 1800 copies, for about four evaluations of Gammainc and its derivative, 3,600 scalar ops.
Gammaincinv	3600	2800	instructions linux 2728.07	allocated linux 0.312
# 1200 copies, for 2,400 scalar ops: a double-word prefactor of two ln and three lgamma (1,500) and about 60 continued-fraction steps of 15 ops.
Betainc	2400	2000	instructions linux 2354.683	allocated linux 0.469
# 4800 copies, for about four evaluations of Betainc.
Betaincinv	9600	6200	instructions linux 6788.477	allocated linux 0.469
# Times the per-item kernel through `time_map`: `complex::exp` on each item, exp of the real part and sin and cos of the imaginary part. The expected cost of 10 copies, for 78 f64 ops per complex item, was worked out for the split slice form that this row timed before that form was deleted. The per-item kernel's cost isn't studied yet, and its Linux budget stays held.
complex Exp	20	20	instructions linux 71.034	allocated linux 56.01
# 12.5 copies, for 100 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: hypot, ln with care near |z| = 1, atan2. It costs about 30 copies on macOS and 32.4 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
complex Ln	63	28	instructions linux 96.481	allocated linux 64.01
# 5.1 copies, for 41 instructions per vector of two complex items, at a quarter copy each and two floats per complex copy: about 18 for each block's test of 64 items, and 23 for the plain form, two square roots and a division with no scaling or special cases. A block holding a nonzero part below 2^-511 or above 2^511, a NaN or ∞ part, or a 0 with both parts 0 takes the full form instead, about 64 instructions beside the test's 18, with `hypot`'s scaling, the scaling of tiny items, the special-value selects and the NaN check. It costs about 4.8 copies on macOS on 24 October 2026. It costs about 6.2 copies on CI on 24 October 2026, where it cost 10.2 through the full form alone on 22 October.
complex Sqrt	11	6.5	instructions linux 21.236	allocated linux 0.01
# 16 copies, for 126 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: sin, cos, sinh and cosh.
complex Sin	32	25	instructions linux 65.556	allocated linux 88.01
# 17.5 copies, for 140 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: sin, cos, sinh, cosh and a division.
complex Tan	35	28	instructions linux 76.563	allocated linux 104.01
# 22.5 copies, for 180 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: a complex square root of 1 - z², a complex ln, products. It costs 42.5 copies on CI on 22 October 2026, about twice that, where a budget of twice it would fail by chance, so its Linux budget is unchanged until the cost is studied.
complex Asin	45	46	instructions linux 124.535	allocated linux 120.01
# 16 copies, for 130 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: a complex ln of a quotient. It costs 31.1 copies on CI on 22 October 2026, about twice that, where a budget of twice it would fail by chance, so its Linux budget is unchanged until the cost is studied.
complex Atanh	32	29	instructions linux 88.432	allocated linux 96.01
# 52 copies, for 420 f64 ops per complex item: a complex Lanczos sum with 13 complex divisions, a complex ln. It costs 167 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied.
complex Lgamma	110	130	instructions linux 418.675	allocated linux 0.01
# 62 copies, for 500 f64 ops: complex Lgamma and a complex exp. It costs about 134.3 copies on macOS and 217 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
complex Gamma	280	160	instructions linux 592.675	allocated linux 0.01
# 2 copies, for 16 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: hypot; reading two floats and writing one take 0.75.
complex Abs	4	2.9	instructions linux 6.898	allocated linux 0.01
# Times the per-item kernel through `time_map`: `complex::sqrt1mx2` on each item, two complex square roots, then a product and a rebalance. The expected cost of 11.5 copies, for 92 f64 ops per complex item, was worked out for the split slice form that this row timed before that form was deleted. Both budgets stay unchanged until the per-item kernel's cost is studied.
complex Sqrt1mx2	53	30	instructions linux 93.822	allocated linux 104.01
# 23 copies, for 184 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: a complex ln, a complex product, a complex exp. It costs about 50.6 copies on macOS and 55.3 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
complex Pow	110	53	instructions linux 210.34	allocated linux 136.02
# 64 copies, for 256 FMAs per result item, a quarter copy each, on rustymath's own kernels. On macOS, 8.8 copies, for the same 512 flops at Accelerate's rate for a 1024×1024 product.
linalg::PlusTimes	18	98	instructions linux 145.994	allocated linux 20.125
# 0.5 copies: one read of the matrix, about half a copy, on rustymath's own kernels, where its one FMA per item, a quarter copy, runs alongside. On macOS, 0.29 copies, for 2 flops per item at Accelerate's matrix-vector rate.
linalg::PlusTimes by a vector	0.6	1.4	instructions linux 2.437	allocated linux 0.031
# 0.5 copies, as `linalg::PlusTimes by a vector`.
linalg::PlusTimes of a vector	0.6	0.79	instructions linux 0.838	allocated linux 0.094
# 128 copies, for 256 steps of a max and an add per result item, a quarter copy per op.
linalg::MaxPlus	260	120	instructions linux 212.912	allocated linux 20
# 128 copies, for 256 steps of a min and an add per result item, a quarter copy per op.
linalg::MinPlus	260	120	instructions linux 212.912	allocated linux 20
# 128 copies, for 256 steps of a comparison and an add per result item, a quarter copy per op.
linalg::PlusEqual	260	120	instructions linux 209.009	allocated linux 20
# 68 copies: these values fit f64 products exactly, whose 256 multiply-adds per result item take 64 at a quarter copy each on rustymath's own kernels, with passes that find the operands' largest magnitudes, 1, convert both to f64, 2, and convert the result back, 1. On macOS, 13 copies, with Accelerate's product at its rate for a 1024×1024 product, 8.8, and the same passes.
linalg::PlusTimes at i64	26	95	instructions linux 156.157	allocated linux 44.125
# 128 copies, for 256 steps of an integer comparison and an add per result item.
linalg::PlusEqual at i64	260	110	instructions linux 211.944	allocated linux 20
# 16 copies, for a bitonic network on two-lane vectors (`search::networked`): 36 steps, each a minimum and a maximum for every two rows, about 8 copies, plus 15 passes that load and store every row, about 6, and about 2 for the shuffles of the steps across lanes, the write by columns and the NaN count. A block of 16 rows stays in registers for the steps within it. It costs about 17 copies on macOS. An unstable comparison sort of each row's keys cost about 41.
search::view_sort_along	32	21	instructions linux 35.767	allocated linux 8.156
# 60 copies, for an unstable comparison sort of each 32,768-item lane's keys: about 15 levels per item at about 4 copies a level. A radix sort of the keys costs about 71, at about 9 copies for each of its 8 passes. A sorting network would gain here only as the base case of a long sort, as "A vectorized sort kernel" in basedpl's `meta/rustymath.md` records. It costs about 60 copies on macOS, down from about 105 when each comparison computed two keys.
search::view_sort_along long lanes	120	92	instructions linux 141.632	allocated linux 16
# 15 copies, for a quickselect of each row's keys: about 3 comparisons per item at about 5 copies each, as the sorts measure comparisons, plus a pass that computes the keys and one that writes the floats back. A vectorized kernel that partitions would cost less, as "A vectorized sort kernel" in basedpl's `meta/rustymath.md` records. It costs about 15 copies on macOS, down from about 17 when each comparison computed two keys. CI measured 12.4 on 22 October 2026, so its Linux budget follows the same expected cost.
search::view_partition_along	30	17	instructions linux 28.2	allocated linux 8.156
# 15 copies, for selecting the two middle keys of each row, which costs about what one partition does. It costs about 15 copies on macOS, down from about 33 when each comparison computed two keys. CI measured 12.6 on 22 October 2026, so its Linux budget follows the same expected cost.
search::view_quantiles_along	30	18	instructions linux 30.231	allocated linux 0.188
# 1.5 copies, for two reads per item, for the mean and the squares, and two ops.
stats::variance	3	4.1	instructions linux 3.101	allocated linux 0.564
# 1.5 copies, for reading the data and the weights once, with a multiply-add per item. It costs about 5.8 copies on macOS, because each chunk gathers the data and the weights into buffers, and a second pass gathers the weights again for their total. Two other methods measured slower on 21 October 2026: folding pairs of products and weights in one walk cost 6.9, because a buffer of pairs folds more slowly than the walk it saves, and reading each 64-item row in place cost 8.7, because each in-place read works out its row's offset with divisions and each row's fold pays its own setup. Reading the runs in place without copying them only ties with the gather at 64 items. A fold that sums each run straight into its output's accumulator, with no product buffer, would reach the expected cost, as step 4 in basedpl's `meta/next-phases.md` records. Both budgets stay held until then.
stats::average	74	9.6	instructions linux 9.106	allocated linux 9.049
# 22 copies, for 2n³/3 flops per n² items, as FMAs, plus the solve, at a quarter copy per FMA on rustymath's own kernels. It costs 44 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 10 copies: the copy into column order and the row swaps, 2.5, the products' 155 flops an item at Accelerate's rate for rank-32 updates, 5.2, and the 16-column leaves' 16 flops an item at the matrix-vector rate, 2.3. It costs 23.7 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::Lu::solve	53	60	instructions linux 106.343	allocated linux 28.843
# 64 copies, for 2n³ flops per n² items, at a quarter copy per FMA on rustymath's own kernels. CI measured 107 on 22 October 2026, so its Linux budget follows the expected cost. On macOS, 23 copies: the LU as `linalg::Lu::solve` gives it, 10, then the two triangular solves from the permuted identity, which skip no zeros, 512 flops an item at Accelerate's rate for 128×128 products, 12, and writing the inverse, 1. It costs 43 copies on macOS on 23 October 2026, about twice that, where a budget of twice it would fail by chance, so its macOS budget is unchanged until the cost is studied.
linalg::Lu::inverse	89	120	instructions linux 275.197	allocated linux 67.023
# 11 copies, for n³/3 flops per n² items, at a quarter copy per FMA on rustymath's own kernels. It costs 23.2 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 4.8 copies: the copy in and the copy closed up, 2, and its n³/3 flops at Accelerate's rate for rank-32 updates, 2.8. It costs 10.8 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::cholesky	28	30	instructions linux 58.524	allocated linux 17.898
# 85 copies, for 8n³/3 flops per n² items, 4n³/3 to factor and 4n³/3 to form Q, at a quarter copy per FMA on rustymath's own kernels. It costs 163 copies on CI on 22 October 2026, about twice that, where a budget of twice it would fail by chance, so its Linux budget is unchanged until the cost is studied. On macOS, 25 copies: the working copy and the writes of Q and R, 2, and those flops at Accelerate's rate for rank-32 updates, 23. It costs 48.8 copies on macOS on 23 October 2026, about twice that, where a budget of twice it would fail by chance, so its macOS budget is unchanged until the cost is studied.
linalg::qr	130	170	instructions linux 411.716	allocated linux 129.611
# 384 copies, for about 12n³ flops per n² items, with the vectors, at a quarter copy per FMA on rustymath's own kernels. It costs 868 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 143 copies, for Accelerate's GESDD: half the 8n³/3 flops of its bidiagonal reduction, which run as matrix-vector products, at the matrix-vector rate, 49, the rest of its 12n³ flops at the rate for rank-32 updates, 91, and three copies in and out. It costs 473 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::svd	970	790	instructions linux 1832.872	allocated linux 259.256
# 288 copies, for about 9n³ flops per n² items, with the vectors, at a quarter copy per FMA on rustymath's own kernels. It costs 729 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 85 copies, for Accelerate's SYEVD: half the 4n³/3 flops of its tridiagonal reduction, which run as symmetric matrix-vector products that use each item they read twice, at twice the matrix-vector rate, 12, the rest of its 9n³ flops at the rate for rank-32 updates, 71, and two copies. It costs 318 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::eigh	660	610	instructions linux 1157.39	allocated linux 151.186
# 800 copies, for about 25n³ flops per n² items, with the vectors, at a quarter copy per FMA on rustymath's own kernels. It costs 2840 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 234 copies, for Accelerate's GEEV: the 2n³/3 flops of its Hessenberg reduction that run as matrix-vector products, at the matrix-vector rate, 25, the rest of its 25n³ flops at the rate for rank-32 updates, 208, and two copies. It costs 1813 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::eig	3600	3500	instructions linux 8255.355	allocated linux 145.8
# 320 copies, for about 10n³ flops per n² items, at a quarter copy per FMA on rustymath's own kernels. It costs 1486 copies on CI on 22 October 2026, more than twice that. On 23 and 24 October 2026 the same code cost 1053 to 1920 copies on CI's runner, and builds from before and after those dates cost the same on a Mac. Its Linux budget is 50% above the earlier 2700, to cover that variation in the runner, not a code change. On macOS, 105 copies, for GEEV without vectors: the same matrix-vector part, 25, the rest of its 10n³ flops at the rate for rank-32 updates, 80, and one copy. It costs 1176 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::eigenvalues	2400	1400	instructions linux 3119.182	allocated linux 16.531
# 5 copies, for 2mn² flops on 4096×16 (32 per item) and reading the matrix, at a quarter copy per FMA on rustymath's own kernels. On CI's x86 runner it cost 35.4 copies on 22 October 2026, through CholeskyQR2, which then took this size on rustymath's own kernels. Earlier runs put Householder there about 1.5 times faster, and `tall_for_qr` now gives this size to Householder wherever Accelerate doesn't run. Householder's reflections are matrix-vector passes, far below the FMA rate this analysis assumes: on the Mac's own kernels, f64 costs about 32 copies. Through Householder, CI measured 29.5 later that day. Its Linux budget is unchanged until Householder's expected cost is worked out. On macOS, 12 copies, through CholeskyQR2: its two Gram matrices, 32 flops an item each, at Accelerate's rate for a 4096×16 matrix's transpose times the matrix, 4.8 each, the solve with R, 16 flops an item at about 16 flops in a copy's time, which Accelerate measured for a 4096×16 matrix times a 16×16 one, half its rank-k rate, 1, a copy of the matrix, 1, and the reduction of the right side, 0.5.
linalg::lstsq	24	47	instructions linux 28.516	allocated linux 17.409
# 21 copies, for 8n³/3 real flops per n² complex items, two floats per complex copy, at a quarter copy per FMA on rustymath's own kernels. It costs 61.9 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 9.3 copies: the copy into column order and the row swaps, 1.9, the products' 277 real flops an item at Accelerate's rate for complex rank-32 updates, 5.2, and the leaves' 64 at the complex matrix-vector rate, 2.2. It costs 29 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::Lu::solve	58	54	instructions linux 293.368	allocated linux 145.121
# 85 copies, for 32n³/3 real flops per n² complex items, half to factor and half to form Q, at a quarter copy per FMA on rustymath's own kernels. It costs 281 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 28 copies: the working copy and the writes, 2, and those flops at Accelerate's rate for complex rank-32 updates, 26. It costs 72.5 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::qr	180	180	instructions linux 1217.788	allocated linux 838.578
# 384 copies, for about 48n³ real flops per n² complex items, at a quarter copy per FMA on rustymath's own kernels. It costs 846 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 130 copies, for Accelerate's GESDD: the 16n³/3 real flops of its bidiagonal reduction that run as matrix-vector products, at the complex matrix-vector rate, 24, the rest of its 48n³ at the rate for complex rank-32 updates, 103, and three copies. It costs 465 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::svd	1100	640	instructions linux 3723.965	allocated linux 1264.416
# 288 copies, for about 36n³ real flops per n² complex items, at a quarter copy per FMA on rustymath's own kernels. On macOS, 88 copies, for Accelerate's HEEVD: the 8n³/3 real flops of its tridiagonal reduction that run as Hermitian matrix-vector products, at twice the complex matrix-vector rate, 5.9, the rest of its 36n³ at the rate for complex rank-32 updates, 81, and two copies. It costs 502 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::eigh	1100	370	instructions linux 2081.207	allocated linux 692.151
# 800 copies, for about 100n³ real flops per n² complex items, at a quarter copy per FMA on rustymath's own kernels. It costs 2568 copies on CI on 22 October 2026, more than twice that. On 23 and 24 October 2026 the same code cost 2303 to 4673 copies on CI's runner, and builds from before and after those dates cost the same on a Mac. Its Linux budget is 50% above the earlier 4800, to cover that variation in the runner, not a code change. macOS runs this solver too, with only the vectors' last product on Accelerate, so the same expected cost applies there. It costs 2151 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::eig	4600	2000	instructions linux 13044.869	allocated linux 721.296
# 2 copies, for three reads and one write per item.
Clip	4	7.4	instructions linux 1.514	allocated linux 0.007
# 2 copies, for three reads and one write per item.
Choose	4	8.4	instructions linux 1.263	allocated linux 0.007
[f32]
# 4.5 copies, for 18 vector ops: a test for each block of 64 items that every item lies within ±87, then reduction by ln 2, a degree-4 polynomial and one power of two. A block of items below -105 writes zeros. Any other block takes the clamp and two powers of two.
Exp	9	8.7	instructions linux 4.038	allocated linux 0.002
# 4.5 copies, for 18 vector ops: exp's test and reduction, a degree-5 polynomial and one power of two, with the guards only in a block that holds an item beyond ±87.
Expm1	9	13	instructions linux 4.412	allocated linux 0.002
# 5.25 copies, for 21 vector ops: a test for each block of 64 items that every item is positive, normal and finite, then the split into mantissa and exponent, one division, a series in s² and the combine. A block of 64 items that holds a zero, a negative, a subnormal, an infinity or NaN takes the full form with its special values, which costs about 1.7 times as much on macOS.
Ln	11	17	instructions linux 6.632	allocated linux 0.002
# 8.75 copies, for 35 vector ops: ln's steps plus the correction for 1 + x, with the block test on 1 + x and on whether x is 0. A block of 64 items that holds a zero, a negative, a subnormal, an infinity or NaN takes the full form with its special values, which costs about 1.5 times as much on macOS.
Log1p	18	17	instructions linux 7.881	allocated linux 0.002
# 5.25 copies, for 21 vector ops: ln's steps with a scaled combine.
Log2	11	12	instructions linux 4.211	allocated linux 0.002
# 5.25 copies, for 21 vector ops: ln's steps with a scaled combine.
Log10	11	13	instructions linux 4.398	allocated linux 0.002
# 5 copies, for 21 vector ops: reduction by π/2, a polynomial, the quadrant.
Sin	10	12	instructions linux 5.6	allocated linux 0.002
# 5.5 copies, for 22 vector ops: sin's steps with a shifted quadrant.
Cos	11	15	instructions linux 6.038	allocated linux 0.002
# 6.5 copies, for 26 vector ops: reduction, a polynomial, a division.
Tan	13	18	instructions linux 5.663	allocated linux 0.002
# 6 copies, for 24 vector ops: a square root past 1/2, a polynomial, selects.
Asin	12	13	instructions linux 4.757	allocated linux 0.002
# 6.5 copies, for 26 vector ops: asin's steps and a reflection.
Acos	13	14	instructions linux 5.132	allocated linux 0.002
# 5.5 copies, for 22 vector ops: a reduction by division, a polynomial, selects.
Atan	11	15	instructions linux 4.163	allocated linux 0.002
# 8 copies, for 32 vector ops: expm1, a division, selects.
Sinh	16	19	instructions linux 5.663	allocated linux 0.002
# 6.5 copies, for 26 vector ops: exp and its reciprocal.
Cosh	13	15	instructions linux 4.288	allocated linux 0.002
# 5.5 copies, for 22 vector ops: expm1 without its guards, which |x| up to 9 never needs, a division and the sign.
Tanh	11	15	instructions linux 5.538	allocated linux 0.002
# 9 copies, for 37 vector ops: ln, a square root, selects.
Asinh	18	29	instructions linux 8.663	allocated linux 0.002
# 9 copies, for 37 vector ops: ln and a square root.
Acosh	18	34	instructions linux 9.507	allocated linux 0.002
# 8.5 copies, for 34 vector ops: log1p of a quotient.
Atanh	17	24	instructions linux 8.132	allocated linux 0.002
# 7 copies, for 29 vector ops: split, a polynomial, two Newton steps with divisions.
Cbrt	14	30	instructions linux 5.912	allocated linux 0.002
# 30 copies, for about 60 ops computed in f64 at half the lanes: ln and exp, special cases.
Pow	60	57	instructions linux 22.558	allocated linux 0.005
# 60 copies, for Pow's 60 ops in scalar f64, pair by pair, at one f32 copy each.
Pow.one	120	120	instructions linux 133.208	allocated linux 0
# 4 copies, for 16 vector ops: scaling, a square root, a division; two reads and a write take 1.5.
Hypot	8	12	instructions linux 2.806	allocated linux 0.005
# 30 copies, for Pow's steps in f64 with a reciprocal power.
Root	60	95	instructions linux 60.809	allocated linux 0.005
# 60 copies, for Root in scalar f64, pair by pair.
Root.one	120	110	instructions linux 122.002	allocated linux 0
# 1.5 copies, for two reads and one write per item.
Maximum	3	5.1	instructions linux 0.525	allocated linux 0.005
# 0.5 copies, for one read per item.
reduce::sum	1	1.8	instructions linux 0.175	allocated linux 0
# 0.5 copies, for one read per item.
reduce::max	1	1.9	instructions linux 0.3	allocated linux 0
# 1 copies, for one read and one write per item; the scan runs in vector steps. It costs 2.81 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied.
reduce::Sum::scan	2	7.1	instructions linux 3.853	allocated linux 0
# 1 copies, for one read and one write per item; the scan runs in vector steps.
reduce::Max::scan	2	3.8	instructions linux 1.501	allocated linux 0
# 3.75 copies, for the negate (1), a read and write in place (1), 7 FMAs (1.75).
polynomial::evaluate	5.5	3.3	instructions linux 2.88	allocated linux 0
# 75 copies, for 150 ops in f64 at half the lanes: a plain Lanczos sum, ln, exp, sinpi.
Gamma	150	150	instructions linux 48.994	allocated linux 0.01
# 50 copies, for 100 ops in f64 at half the lanes.
Lgamma	100	130	instructions linux 46.494	allocated linux 0.01
# 12.5 copies, for 50 vector ops: both of erf's formulas for every item, x + x a(x²) with 6 terms and 1 - e^-(|x| + |x| b(|x|)) with 7 terms and f32's `exp`, then the selects.
Erf	25	39	instructions linux 9.899	allocated linux 0.01
# 52 copies, for 209 vector instructions: the speed test's items, -5 to 10, make every block of 512 mixed, and f32's mixed blocks run both formulas. Their loop retires 209 instructions for each vector of four items (`bpl-tests disasm` of `erfc_blocks::<f32, true>`, 23 October 2026), about twice the 100 operations the formulas hold. Both formulas' coefficients don't fit in the 32 vector registers, so the loop reloads about 35 of them on each pass, and it adds selects and register moves. macOS measured 46.3 to 50.6 in five runs that day, with `erfc_blocks` on `slice::blocks` and on a loop of its own, and CI measured 50.3 on 22 October 2026.
Erfc	104	140	instructions linux 26.648	allocated linux 0.01
# 17.5 copies, for 70 vector ops.
Erfinv	35	63	instructions linux 16.494	allocated linux 0.01
# 18 copies, for 72 vector ops: the same.
Erfcinv	36	63	instructions linux 15.777	allocated linux 0.01
# 420 copies, for 420 scalar f64 ops: incomplete_gamma's narrow route, a plain prefactor and about 25 steps, at one f32 copy each.
Gammainc	840	910	instructions linux 310.609	allocated linux 0.312
# 420 copies, for Gammainc's narrow route.
Gammaincc	840	910	instructions linux 310.609	allocated linux 0.312
# 1700 copies, for about four evaluations of Gammainc's narrow route, 1,700 scalar f64 ops. It costs about 3531.6 copies on macOS and 4780 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
Gammaincinv	7400	8100	instructions linux 2727.507	allocated linux 0.312
# 850 copies, for 850 scalar f64 ops for a narrow route like incomplete_gamma: a plain prefactor (400) and about 30 steps. It costs about 2898.6 copies on macOS and 3708 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
Betainc	6000	6100	instructions linux 2358.344	allocated linux 0.469
# 3400 copies, for about four evaluations of Betainc's narrow route. It costs about 8512 copies on macOS and 11278 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
Betaincinv	18000	19000	instructions linux 6793.408	allocated linux 0.469
# Times the per-item kernel through `time_map`: `complex::exp` on each item, exp of the real part and sin and cos of the imaginary part. The expected cost of 10 copies, for 78 f64 ops per complex item, was worked out for the split slice form that this row timed before that form was deleted. The per-item kernel's cost isn't studied yet, and both budgets stay held.
complex Exp	47	26	instructions linux 38.486	allocated linux 28.01
# 12.5 copies, for 100 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: hypot, ln with care near |z| = 1, atan2. It costs about 30.5 copies on macOS and 27.1 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
complex Ln	59	36	instructions linux 60.753	allocated linux 32.01
# 6.4 copies, for 51 instructions per vector of four complex items, at a quarter copy each and two floats per complex copy: about 17 for each block's test of 64 items, and 34 for the plain form, whose squares sum in f64 and whose roots and division need no scaling or special cases. A block holding a nonzero part below 2^-103, a NaN or ∞ part, or a 0 with both parts 0 takes the full form instead, with the scaling of tiny items, the special-value selects and the NaN check. It costs about 6.0 copies on macOS on 24 October 2026, and cost 9.91 on CI on 22 October 2026 through the full form alone.
complex Sqrt	13	13	instructions linux 12.532	allocated linux 0.01
# 16 copies, for 126 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: sin, cos, sinh and cosh.
complex Sin	32	30	instructions linux 28.689	allocated linux 44.01
# 17.5 copies, for 140 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: sin, cos, sinh, cosh and a division.
complex Tan	35	43	instructions linux 40.961	allocated linux 52.01
# 22.5 copies, for 180 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: a complex square root of 1 - z², a complex ln, products. It costs 38.6 copies on CI on 22 October 2026, about twice that, where a budget of twice it would fail by chance, so its Linux budget is unchanged until the cost is studied.
complex Asin	45	77	instructions linux 80.629	allocated linux 60.01
# 16 copies, for 130 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: a complex ln of a quotient. CI measured 26.2 on 22 October 2026, so its Linux budget follows the expected cost.
complex Atanh	32	46	instructions linux 51.872	allocated linux 48.01
# 104 copies, for f64's 420 ops computed in f64, which cost twice as many f32 copies. It costs 263 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied.
complex Lgamma	210	340	instructions linux 372.247	allocated linux 0.01
# 125 copies, for f64's 500 ops computed in f64, which cost twice as many f32 copies. It costs twice the f64 case's cost: about 254 copies on macOS, against f64's 132, and 353 on CI on 22 October 2026. Its macOS budget is twice the f64 case's held budget until that cost is studied, and its Linux budget is unchanged.
complex Gamma	560	400	instructions linux 524.247	allocated linux 0.01
# 2 copies, for 16 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: hypot; reading two floats and writing one take 0.75.
complex Abs	4	3.9	instructions linux 3.897	allocated linux 0.01
# Times the per-item kernel through `time_map`: `complex::sqrt1mx2` on each item, two complex square roots, then a product and a rebalance. The expected cost of 11.5 copies, for 92 f64 ops per complex item, was worked out for the split slice form that this row timed before that form was deleted. Both budgets stay unchanged until the per-item kernel's cost is studied.
complex Sqrt1mx2	59	53	instructions linux 65.1	allocated linux 52.01
# 23 copies, for 184 f64 ops per complex item, at a quarter copy per op and two floats per complex copy: a complex ln, a complex product, a complex exp. It costs about 52.3 copies on macOS and 51.5 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
complex Pow	110	81	instructions linux 136.58	allocated linux 68.02
# 64 copies, for 256 FMAs per result item, a quarter copy each, on rustymath's own kernels. On macOS, 4.4 copies, for the same 512 flops at Accelerate's rate for a 1024×1024 product.
linalg::PlusTimes	8.8	83	instructions linux 74.956	allocated linux 10.062
# 0.5 copies: one read of the matrix, about half a copy, on rustymath's own kernels, where its one FMA per item, a quarter copy, runs alongside. On macOS, 0.4 copies, for 2 flops per item at Accelerate's matrix-vector rate.
linalg::PlusTimes by a vector	0.8	3.2	instructions linux 2.029	allocated linux 0.016
# 0.5 copies, as `linalg::PlusTimes by a vector`.
linalg::PlusTimes of a vector	0.8	1.1	instructions linux 0.681	allocated linux 0.078
# 128 copies, for 256 steps of a max and an add per result item, a quarter copy per op.
linalg::MaxPlus	260	150	instructions linux 108.905	allocated linux 10
# 128 copies, for 256 steps of a min and an add per result item, a quarter copy per op.
linalg::MinPlus	260	150	instructions linux 108.905	allocated linux 10
# 128 copies, for 256 steps of a comparison and an add per result item, a quarter copy per op.
linalg::PlusEqual	260	140	instructions linux 107.228	allocated linux 10
# 35 copies of 64-bit items: these values fit f32 products exactly, whose 256 multiply-adds per result item take 64 f32 copies, 32 of 64-bit items, at a quarter copy each on rustymath's own kernels, with passes that find the operands' largest magnitudes, 1, convert both to f32, 1.5, and convert the result back, 0.75. On macOS, 5.6 copies, with Accelerate's f32 product at its rate for a 1024×1024 product, 2.4, and the same passes.
linalg::PlusTimes at i64	12	53	instructions linux 85.867	allocated linux 26.062
# 128 copies, for 256 steps of an integer comparison and an add per result item.
linalg::PlusEqual at i64	260	45	instructions linux 61.895	allocated linux 17
# 16 copies of 32-bit items, for the same network on four-lane vectors. Its minimums, maximums and passes over rows cost about as many copies as at f64, about 12, because a row holds twice the items and a copy takes half the time. Its passes over each item, the lane stages' shuffles, the write by columns and the NaN count, take the same time as at f64, about 4 copies of 32-bit items. It costs about 22 copies on macOS, more than this analysis gives, and the difference hasn't been studied. A radix sort of each row's keys cost about 77.
search::view_sort_along	32	44	instructions linux 25.097	allocated linux 4.078
# 52 copies, for a radix sort of each 32,768-item lane's keys alone: 4 byte passes, each scattering the keys to 256 places at about 13 copies, as measured on this hardware. A sorting network would gain here only as the base case of a long sort, as "A vectorized sort kernel" in basedpl's `meta/rustymath.md` records. It costs about 52 copies on macOS, down from about 72 when the sort carried each float beside its key.
search::view_sort_along long lanes	110	89	instructions linux 70.689	allocated linux 12
# 30 copies, for a quickselect of each row's keys: about 3 comparisons per item at about 10 copies each, as the sorts measure comparisons of half-width items, plus a pass that computes the keys and one that writes the floats back. A vectorized kernel that partitions would cost less, as "A vectorized sort kernel" in basedpl's `meta/rustymath.md` records. It costs about 25 copies on macOS, down from about 33 when each comparison computed two keys. CI measured 22 on 22 October 2026, so its Linux budget follows the same expected cost.
search::view_partition_along	60	49	instructions linux 26.391	allocated linux 4.078
# 30 copies, for selecting the two middle keys of each row, which costs about what one partition does. It costs about 27 copies on macOS, down from about 66 when each comparison computed two keys. CI measured 23.6 on 22 October 2026, so its Linux budget follows the same expected cost.
search::view_quantiles_along	60	56	instructions linux 29.158	allocated linux 0.094
# 1.5 copies, for two reads per item, for the mean and the squares, and two ops.
stats::variance	3	6.7	instructions linux 2.216	allocated linux 0.283
# 1.5 copies, for reading the data and the weights once, with a multiply-add per item. It costs about 7.4 copies on macOS, because each chunk gathers the data and the weights into buffers, and a second pass gathers the weights again for their total. Two other methods measured slower on 21 October 2026: folding pairs of products and weights in one walk cost 10.6, because a buffer of pairs folds more slowly than the walk it saves, and reading each 64-item row in place cost 11.7, because each in-place read works out its row's offset with divisions and each row's fold pays its own setup. Reading the runs in place without copying them only ties with the gather at 64 items. A fold that sums each run straight into its output's accumulator, with no product buffer, would reach the expected cost, as step 4 in basedpl's `meta/next-phases.md` records. Both budgets stay held until then.
stats::average	150	16	instructions linux 6.632	allocated linux 4.541
# 22 copies, for 2n³/3 flops per n² items, as FMAs, plus the solve, at a quarter copy per FMA on rustymath's own kernels. It costs 67.6 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 11 copies: the copy into column order and the row swaps, 2.5, the products' 155 flops an item at Accelerate's rate for rank-32 updates, 5, and the 16-column leaves' 16 flops an item at the matrix-vector rate, 3.3. It costs 31.2 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::Lu::solve	73	92	instructions linux 72.652	allocated linux 14.453
# 64 copies, for 2n³ flops per n² items, at a quarter copy per FMA on rustymath's own kernels. It costs 149 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 22 copies: the LU as `linalg::Lu::solve` gives it, 11, then the two triangular solves from the permuted identity, which skip no zeros, 512 flops an item at Accelerate's rate for 128×128 products, 11, and writing the inverse, 1.
linalg::Lu::inverse	44	220	instructions linux 169.598	allocated linux 33.543
# 11 copies, for n³/3 flops per n² items, at a quarter copy per FMA on rustymath's own kernels. It costs 37 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 4.8 copies: the copy in and the copy closed up, 2, and its n³/3 flops at Accelerate's rate for rank-32 updates, 2.8. It costs 11.6 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::cholesky	35	60	instructions linux 37.185	allocated linux 8.949
# 85 copies, for 8n³/3 flops per n² items, 4n³/3 to factor and 4n³/3 to form Q, at a quarter copy per FMA on rustymath's own kernels. It costs 234 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 24 copies: the working copy and the writes of Q and R, 2, and those flops at Accelerate's rate for rank-32 updates, 22. It costs 52.2 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::qr	160	300	instructions linux 252.129	allocated linux 64.812
# 384 copies, for about 12n³ flops per n² items, with the vectors, at a quarter copy per FMA on rustymath's own kernels. It costs 1142 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 161 copies, for Accelerate's GESDD: half the 8n³/3 flops of its bidiagonal reduction, which run as matrix-vector products, at the matrix-vector rate, 70, the rest of its 12n³ flops at the rate for rank-32 updates, 88, and three copies in and out. It costs 633 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::svd	1500	1600	instructions linux 1224.097	allocated linux 130.179
# 288 copies, for about 9n³ flops per n² items, with the vectors, at a quarter copy per FMA on rustymath's own kernels. It costs 799 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 88 copies, for Accelerate's SYEVD: half the 4n³/3 flops of its tridiagonal reduction, which run as symmetric matrix-vector products that use each item they read twice, at twice the matrix-vector rate, 17, the rest of its 9n³ flops at the rate for rank-32 updates, 69, and two copies. It costs 435 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::eigh	940	1200	instructions linux 841.712	allocated linux 75.997
# 800 copies, for about 25n³ flops per n² items, with the vectors, at a quarter copy per FMA on rustymath's own kernels. It costs 3067 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 238 copies, for Accelerate's GEEV: the 2n³/3 flops of its Hessenberg reduction that run as matrix-vector products, at the matrix-vector rate, 35, the rest of its 25n³ flops at the rate for rank-32 updates, 201, and two copies. It costs 2316 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::eig	5100	7600	instructions linux 6142.335	allocated linux 72.904
# 320 copies, for about 10n³ flops per n² items, at a quarter copy per FMA on rustymath's own kernels. It costs 1673 copies on CI on 22 October 2026, more than twice that. On 23 and 24 October 2026 the same code cost 1401 to 2732 copies on CI's runner, and builds from before and after those dates cost the same on a Mac. Its Linux budget is 50% above the earlier 3400, to cover that variation in the runner, not a code change. On macOS, 113 copies, for GEEV without vectors: the same matrix-vector part, 35, the rest of its 10n³ flops at the rate for rank-32 updates, 77, and one copy. It costs 1356 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
linalg::eigenvalues	3000	2900	instructions linux 2290.579	allocated linux 8.266
# 5 copies, for 2mn² flops on 4096×16 (32 per item) and reading the matrix, at a quarter copy per FMA on rustymath's own kernels. On CI's x86 runner it cost 52.8 copies on 22 October 2026, through CholeskyQR2, which then took this size on rustymath's own kernels. Earlier runs put Householder there about 1.35 times faster, and `tall_for_qr` now gives this size to Householder wherever Accelerate doesn't run. Householder's reflections are matrix-vector passes, far below the FMA rate this analysis assumes: on the Mac's own kernels, f64 costs about 32 copies. Through Householder, CI measured 40.8 later that day. Its Linux budget is unchanged until Householder's expected cost is worked out. On macOS, 17 copies, through CholeskyQR2: its two Gram matrices, 32 flops an item each, at Accelerate's rate for a 4096×16 matrix's transpose times the matrix, 7.4 each, the solve with R, 16 flops an item at about 15 flops in a copy's time, which Accelerate measured for a 4096×16 matrix times a 16×16 one, half its rank-k rate, 1.1, a copy of the matrix, 1, and the reduction of the right side, 0.5.
linalg::lstsq	34	86	instructions linux 19.345	allocated linux 8.71
# 21 copies, for 8n³/3 real flops per n² complex items, two floats per complex copy, at a quarter copy per FMA on rustymath's own kernels. It costs 75.3 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 10 copies: the copy into column order and the row swaps, 1.9, the products' 277 real flops an item at Accelerate's rate for complex rank-32 updates, 4.6, and the leaves' 64 at the complex matrix-vector rate, 3.6. It costs 29.2 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::Lu::solve	81	83	instructions linux 204.852	allocated linux 72.623
# 85 copies, for 32n³/3 real flops per n² complex items, half to factor and half to form Q, at a quarter copy per FMA on rustymath's own kernels. It costs 399 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 25 copies: the working copy and the writes, 2, and those flops at Accelerate's rate for complex rank-32 updates, 23. It costs 98.6 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::qr	240	330	instructions linux 785.064	allocated linux 419.297
# 384 copies, for about 48n³ real flops per n² complex items, at a quarter copy per FMA on rustymath's own kernels. It costs 1209 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 132 copies, for Accelerate's GESDD: the 16n³/3 real flops of its bidiagonal reduction that run as matrix-vector products, at the complex matrix-vector rate, 38, the rest of its 48n³ at the rate for complex rank-32 updates, 91, and three copies. It costs 768 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::svd	1600	1100	instructions linux 2394.024	allocated linux 632.815
# 288 copies, for about 36n³ real flops per n² complex items, at a quarter copy per FMA on rustymath's own kernels. It costs 707 copies on CI on 22 October 2026, more than twice that, so its Linux budget is unchanged until the cost is studied. On macOS, 83 copies, for Accelerate's HEEVD: the 8n³/3 real flops of its tridiagonal reduction that run as Hermitian matrix-vector products, at twice the complex matrix-vector rate, 9.5, the rest of its 36n³ at the rate for complex rank-32 updates, 71, and two copies. It costs 622 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::eigh	1400	670	instructions linux 1395.476	allocated linux 346.659
# 800 copies, for about 100n³ real flops per n² complex items, at a quarter copy per FMA on rustymath's own kernels. It costs 2558 copies on CI on 22 October 2026, more than twice that. On 23 and 24 October 2026 the same code cost 2368 to 5532 copies on CI's runner, and builds from before and after those dates cost the same on a Mac. Its Linux budget is 50% above the earlier 5300, to cover that variation in the runner, not a code change. macOS runs this solver too, with only the vectors' last product on Accelerate, so the same expected cost applies there. It costs 2445 copies on macOS on 23 October 2026, more than twice that, so its macOS budget is unchanged until the cost is studied.
complex linalg::eig	5000	3700	instructions linux 8410.665	allocated linux 360.656
# 1 copies, for reading two items and writing one per lane of 2. It costs about 2.4 copies on macOS and 3.54 on CI on 22 October 2026, more than twice that, so both budgets are unchanged until the cost is studied.
Array::differences short lanes	5.2	8.4	instructions linux 4.418	allocated linux 2.574
# 1 copies, for one read and one write per item.
Array::differences	2	3.2	instructions linux 0.683	allocated linux 4.023
# 0.5 copies, for one write per output item; each input is read once for 64 outputs. It costs about 1.1 copies on macOS, more than twice that, so its macOS budget is unchanged until the cost is studied. CI measured 0.8 on 22 October 2026, so its Linux budget follows the expected cost.
Array::broadcasted	2.2	2.1	instructions linux 0.803	allocated linux 4.012
# 2 copies, for three reads and one write per item.
Clip	4	13	instructions linux 0.794	allocated linux 0.007
# 2 copies, for three reads and one write per item.
Choose	4	12	instructions linux 0.669	allocated linux 0.007
[i64]
# 0.75 copies, for reading 4 bytes and writing 8 per item, against a copy that moves 16.
Buffer::cast i32	1.5	1.5	instructions linux 0.721	allocated linux 8.003
