Kernel selection tables

Generated by docs/tools/gen_db_pages.py on every docs build. Do not edit.

Every op routes through flat kernel selection: src/ops/<op>/choice.hh declares the kernel families the op can run (and the knobs each one takes), the table keys a call is matched on, and the tuner's grid; tuned/<op>.<device>.txt ranks the families per measured shape and select::choose takes the first runnable entry of the nearest row. The design is Flat kernel selection; the measurements behind each op's families are on its evidence page.

Each table is generated from its ledger (Tuning data layout). Rows counts the rows per ledger tier: deep, coarse, preview, custom (timed by tools/tune), converted (timed forced-route sweeps on old kernels) or transcribed (the pre-selection router's preference order, untimed). Ranked first counts the rows whose first-ranked family is each family, with the n range those rows cover where the table has an n key.

19 ops, 39 tables.

gemm

Source: src/ops/gemm/choice.hh · evidence: GEMM.

Family Knobs Kernel
direct — /< gemm_direct: one work-item per element, any form; max_wg >= 64
tiled — /< gemm_tiled: 16x16 shared-memory tile, any form; max_wg >= 256
small — /< gemm_small: several matrices per work-group; real, see small_fits
reg m, n, k, u —
wide m, n, k —
vendor — /< backend::gemm_vendor; needs the level-3 library

Table keys: ta:exact, tb:exact, layout:exact, m:log, n:log, k:log, batch:log. Spec: OpSpec{Op::gemm, select::Lib::level3, {last_resort}} — /< op, vendor library, rules Tuner grid_square: 8, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024. Tuner grid_panel_mn: 32, 64, 128, 256, 512, 1024, 2048. Tuner grid_panel_k: 8, 16, 32, 64, 96, 128. Tuner grid_skinny_mn: 64, 128, 256, 512, 1024, 2048. Tuner grid_skinny_k: 256, 1024. Tuner grid_batch: 128, 2048, 32768. Tuner grid_real_forms: "NN", "NT", "TN", "TT". Tuner grid_real_panel_forms: "NN", "NT", "TN". Tuner grid_complex_forms: "NN", "NT", "TN", "NC", "CN", "CT". Tuner grid_complex_panel_forms: "NN", "NT", "NC", "TN", "CN".

dtype device rows date ranked first
float sm_120 deep 7704, transcribed 4149 2026-10-11 vendor 9104 (n 1..2048), wide:m=64:n=64:k=16 1101 (n 32..2048), tiled 520 (n 8..470), reg:m=128:n=128:k=8:u=1 442 (n 70..2048), direct 351 (n 8..362), small 124 (n 1..64), wide:m=32:n=128:k=16 70 (n 70..2048), wide:m=32:n=32:k=16 55 (n 32..2048), wide:m=16:n=16:k=16 51 (n 16..470), wide:m=128:n=32:k=16 34 (n 32..1024), reg:m=32:n=32:k=8:u=1 1 (n 181..181)
double sm_120 deep 6642, transcribed 6396 2026-10-11 tiled 5896 (n 16..2048), vendor 4081 (n 8..2048), wide:m=64:n=64:k=16 1433 (n 49..2048), direct 1077 (n 8..2048), wide:m=16:n=16:k=16 211 (n 32..2048), wide:m=32:n=32:k=16 172 (n 32..2048), wide:m=128:n=32:k=16 99 (n 32..1117), wide:m=32:n=128:k=16 67 (n 108..2048), small 2 (n 32..32)
cfloat sm_120 deep 10950, transcribed 1708 2026-10-11 vendor 9041 (n 24..2048), wide:m=64:n=64:k=16 1942 (n 32..2048), tiled 491 (n 8..790), direct 446 (n 8..362), wide:m=32:n=32:k=16 220 (n 24..2048), wide:m=32:n=128:k=16 195 (n 45..2048), wide:m=128:n=32:k=16 170 (n 32..2048), wide:m=16:n=16:k=16 153 (n 16..181)
cdouble sm_120 deep 6929, transcribed 2480 2026-10-11 vendor 4652 (n 16..2048), wide:m=64:n=64:k=16 2097 (n 35..2048), wide:m=16:n=16:k=16 1431 (n 16..2048), wide:m=32:n=32:k=16 938 (n 24..2048), direct 86 (n 8..939), wide:m=128:n=32:k=16 80 (n 32..211), wide:m=32:n=128:k=16 74 (n 99..2048), tiled 51 (n 32..235)
float sm_89 transcribed 11226 2026-10-05 vendor 11154 (n 1..2048), small 72 (n 1..48)
double sm_89 transcribed 12672 2026-10-05 tiled 6956 (n 32..2048), vendor 5440 (n 8..2048), direct 256 (n 8..32), wide:m=64:n=64:k=16 20 (n 256..1024)
cfloat sm_89 transcribed 7464 2026-10-05 vendor 7464 (n 8..2048)
cdouble sm_89 transcribed 7464 2026-10-05 vendor 7464 (n 8..2048)

gemv

Source: src/ops/gemv/choice.hh · evidence: GEMV.

Family Knobs Kernel
cta — /< sycl_gemv::gemv_native_cta, sub-group per output; Trans/ConjTrans
direct — /< sycl_gemv::gemv_native_direct, item per output; every device
vendor — /< backend::gemv_vendor; any shape, needs the library

Table keys: trans:exact, out:log, red:log, batch:log. Spec: OpSpec{Op::gemv, select::Lib::level3, {last_resort}} — /< op, vendor library, rules Tuner grid_out: 1, 8, 64, 255, 256, 1024, 4096, 32768. Tuner grid_red: 1, 8, 32, 63, 64, 128, 352, 353, 1024, 4096, 32768. Tuner grid_batch: 1, 16, 128, 319, 320, 1024, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 2454, transcribed 138, custom 11 2026-10-11 direct 1171, vendor 729, cta 703
double sm_120 deep 2376, transcribed 118, custom 5 2026-10-11 direct 1142, vendor 822, cta 535
cfloat sm_120 deep 2376, transcribed 154, custom 7 2026-10-11 direct 1026, vendor 892, cta 619
cdouble sm_120 deep 1352, transcribed 210, custom 6 2026-10-11 direct 833, cta 547, vendor 188
float sm_89 transcribed 1408 2026-10-05 vendor 1408
double sm_89 transcribed 1408 2026-10-05 vendor 1408
cfloat sm_89 transcribed 1408 2026-10-05 vendor 1408
cdouble sm_89 transcribed 1408 2026-10-05 vendor 1360, cta 48

geqrf

Source: src/ops/geqrf/choice.hh · evidence: QR: geqrf, orgqr and ormqr.

Family Knobs Kernel
tiny — /< geqrf_tiny_dispatch: square, registers, n <= the tiny ceiling
cta — /< geqrf_cta_dispatch: the whole panel in SLM (geqrf_cta_fits)
blocked — /< geqrf_blocked_dispatch + the public gemm, any m >= n
vendor — /< backend::geqrf_vendor; needs the factorization library

Table keys: form:exact, n:log:3, aspect:log. Spec: OpSpec{Op::geqrf, select::Lib::factorization} — /< last resort (§5.5): blocked, vendor Tuner grid_n: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 16, 17, 20, 21, 22, 23, 24, 28, 31, 32, 33, 40, 47, 48, 49, 56, 63, 64, 75, 76, 80, 96, 97, 112, 128, 160, 192, 224, 255, 256, 288, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 8192. Tuner grid_aspect: 1, 2, 3, 4, 5, 7, 8, 12, 16, 64, 256. Tuner grid_wide_n: 2, 64, 1024, 8192. Tuner grid_wide_aspect: 1, 4, 64.

dtype device rows date ranked first
float sm_120 deep 673, transcribed 11 2026-10-11 blocked 339 (n 8..8192), cta 179 (n 1..104), vendor 144 (n 2..8192), tiny 22 (n 1..32)
double sm_120 deep 491, transcribed 132 2026-10-11 vendor 319 (n 1..8192), blocked 297 (n 15..8192), cta 6 (n 40..48), tiny 1 (n 32..32)
cfloat sm_120 deep 527, transcribed 147 2026-10-11 cta 267 (n 1..8192), blocked 233 (n 5..2048), vendor 153 (n 2..8192), tiny 21 (n 1..8192)
cdouble sm_120 deep 495, transcribed 133 2026-10-11 vendor 323 (n 1..8192), blocked 176 (n 16..2048), cta 127 (n 40..8192), tiny 2 (n 8..16)
float sm_89 transcribed 636 2026-10-05 vendor 279 (n 1..8192), blocked 198 (n 97..8192), cta 119 (n 32..96), tiny 40 (n 4..8192)
double sm_89 transcribed 636 2026-10-05 vendor 334 (n 1..8192), blocked 277 (n 49..8192), cta 25 (n 32..48)
cfloat sm_89 transcribed 636 2026-10-05 cta 329 (n 32..8192), vendor 269 (n 1..8192), tiny 38 (n 5..8192)
cdouble sm_89 transcribed 636 2026-10-05 vendor 404 (n 1..8192), cta 232 (n 32..8192)

gesv

Source: src/ops/gesv/choice.hh · evidence: LU: getrf, getrs, getri, gesv.

Family Knobs Kernel
tiny — /< gesv_tiny_dispatch: fused LU factor + solve (buckets derived)
blocked — /< public getrf + public getrs; any homogeneous batch

Table keys: n:log:3, nrhs:log. Spec: OpSpec{Op::gesv} — /< no vendor library; last resort (§5.5): blocked Tuner grid_n: 1, 2, 3, 4, 6, 8, 12, 16, 17, 20, 24, 28, 32, 33, 40, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096. Tuner grid_nrhs: 1, 2, 4, 5, 8, 16, 64, 256.

dtype device rows date ranked first
float sm_120 deep 214 2026-10-11 blocked 175 (n 1..2048), tiny 39 (n 1..32)
double sm_120 deep 226 2026-10-11 blocked 202 (n 1..2048), tiny 24 (n 1..30)
cfloat sm_120 deep 222 2026-10-11 blocked 187 (n 1..2048), tiny 35 (n 1..32)
cdouble sm_120 deep 215 2026-10-11 blocked 194 (n 1..2048), tiny 21 (n 1..16)
float sm_89 transcribed 232 2026-10-05 blocked 128 (n 33..4096), tiny 104 (n 1..32)
double sm_89 transcribed 232 2026-10-05 blocked 232 (n 1..4096)
cfloat sm_89 transcribed 232 2026-10-05 blocked 168 (n 17..4096), tiny 64 (n 1..16)
cdouble sm_89 transcribed 232 2026-10-05 blocked 232 (n 1..4096)

gesvd

Source: src/ops/gesvd/choice.hh · evidence: GESVD.

Family Knobs Kernel
jacobi — /< gesvdj_cta: one-sided Jacobi, max(m, n) <= 64, not Hermitian
cta — /< gesvd_cta: normal equations + syev_cta, max(m, n) <= 32, not thin
blocked — /< gesvd_blocked: bidiagonalisation + bdsdc, or syev_blocked (Lower)
vendor — /< backend::gesvd_vendor; needs the solver library

Table keys: herm:exact, vec:exact, m:log:1.5, n:log:1.5. Spec: OpSpec{Op::gesvd, select::Lib::solver} — /< last resort (§5.5): blocked, vendor Tuner grid_mn: 1, 2, 4, 8, 16, 24, 32, 33, 48, 64, 65, 128, 256, 512, 1024. Tuner grid_herm: "N", "L", "U". Tuner grid_vec: "none", "all", "thin".

dtype device rows date ranked first
float sm_120 transcribed 1262, deep 722 2026-10-11 vendor 1229 (n 1..1024), blocked 546 (n 1..1024), jacobi 166 (n 1..64), cta 43 (n 1..32)
double sm_120 transcribed 1258, deep 724 2026-10-11 vendor 1221 (n 1..1024), blocked 556 (n 1..1024), jacobi 125 (n 1..64), cta 80 (n 1..32)
cfloat sm_120 transcribed 1526, deep 349 2026-10-11 vendor 1536 (n 1..1024), jacobi 280 (n 1..64), blocked 37 (n 1..1024), cta 22 (n 1..32)
cdouble sm_120 transcribed 1646, deep 239 2026-10-11 vendor 1640 (n 1..1024), jacobi 188 (n 1..64), blocked 32 (n 1..1024), cta 25 (n 1..32)
float sm_89 transcribed 2025 2026-10-05 vendor 1291 (n 1..1024), blocked 559 (n 1..1024), jacobi 147 (n 1..32), cta 28 (n 1..32)
double sm_89 transcribed 2025 2026-10-05 vendor 1291 (n 1..1024), blocked 559 (n 1..1024), jacobi 147 (n 1..32), cta 28 (n 1..32)
cfloat sm_89 transcribed 2025 2026-10-05 vendor 1666 (n 1..1024), jacobi 300 (n 1..64), blocked 31 (n 1..1024), cta 28 (n 1..32)
cdouble sm_89 transcribed 2025 2026-10-05 vendor 1768 (n 1..1024), jacobi 198 (n 1..64), blocked 31 (n 1..1024), cta 28 (n 1..32)

getrf

Source: src/ops/getrf/choice.hh · evidence: LU: getrf, getrs, getri, gesv.

Family Knobs Kernel
tiny — /< getrf_tiny_dispatch: register-resident, n <= 32 (cdouble 16)
cta — /< getrf_cta_dispatch: SLM-resident panel, n <= the SLM ceiling
blocked — /< getrf_blocked_dispatch + the public gemm and trsm
vendor — /< backend::getrf_vendor (cuBLAS / rocSOLVER / LAPACKE)

Table keys: n:log:3, batch:log. Spec: OpSpec{Op::getrf, select::Lib::factorization} — /< §5.5: blocked, then vendor (CPU) Tuner grid_n: 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 16, 17, 24, 25, 32, 33, 48, 64, 96, 128, 192, 255, 256, 384, 511, 512, 768, 1024. Tuner grid_batch: 1, 8, 64, 128, 255, 256, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 293, transcribed 5 2026-10-11 tiny 150 (n 1..32), blocked 111 (n 33..1024), vendor 19 (n 36..87), cta 18 (n 33..64)
double sm_120 deep 285, transcribed 12 2026-10-11 tiny 132 (n 1..32), blocked 79 (n 59..1024), vendor 76 (n 5..1024), cta 10 (n 17..28)
cfloat sm_120 deep 289, transcribed 13 2026-10-11 tiny 150 (n 1..32), blocked 94 (n 33..1024), vendor 39 (n 33..255), cta 19 (n 33..51)
cdouble sm_120 deep 274, transcribed 15 2026-10-11 vendor 99 (n 1..1024), tiny 70 (n 1..16), cta 64 (n 5..32), blocked 56 (n 119..1024)
float sm_89 transcribed 280 2026-10-05 vendor 110 (n 1..255), tiny 110 (n 5..32), blocked 60 (n 256..1024)
double sm_89 transcribed 280 2026-10-05 vendor 280 (n 1..1024)
cfloat sm_89 transcribed 280 2026-10-05 vendor 155 (n 1..511), tiny 80 (n 5..24), blocked 45 (n 256..1024)
cdouble sm_89 transcribed 280 2026-10-05 vendor 280 (n 1..1024)

getri

Source: src/ops/getri/choice.hh · evidence: LU: getrf, getrs, getri, gesv.

Family Knobs Kernel
blocked — /< getri_blocked_dispatch: P into C + two public trsm; GPU, square
vendor — /< backend::getri_vendor; also CPU, NETLIB, heterogeneous batches

Table keys: n:log:3, batch:log. Spec: OpSpec{Op::getri, select::Lib::factorization, {last_resort}} — /< op, library, rules Tuner grid_n: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 127, 128, 192, 255, 256, 384, 512, 768, 1024, 2048, 4096. Tuner grid_batch: 128, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 90, transcribed 18 2026-10-11 blocked 100 (n 1..4096), vendor 8 (n 1..48)
double sm_120 deep 91, transcribed 23 2026-10-11 blocked 70 (n 1..768), vendor 44 (n 1..4096)
cfloat sm_120 deep 90, transcribed 24 2026-10-11 blocked 68 (n 1..4096), vendor 46 (n 1..255)
cdouble sm_120 deep 92, transcribed 29 2026-10-11 vendor 78 (n 1..4096), blocked 43 (n 4..512)
float sm_89 transcribed 120 2026-10-05 vendor 70 (n 1..127), blocked 50 (n 128..4096)
double sm_89 transcribed 120 2026-10-05 vendor 120 (n 1..4096)
cfloat sm_89 transcribed 120 2026-10-05 vendor 85 (n 1..255), blocked 35 (n 256..4096)
cdouble sm_89 transcribed 120 2026-10-05 vendor 120 (n 1..4096)

getrs

Source: src/ops/getrs/choice.hh · evidence: LU: getrf, getrs, getri, gesv.

Family Knobs Kernel
cta — /< getrs_fused_dispatch: permute + both solves; B fits in SLM
blocked — /< getrs_blocked_dispatch: laswp + two public trsm
vendor — /< backend::getrs_vendor; also takes non-conforming pairs

Table keys: n:log:2, nrhs:log, batch:log. Spec: OpSpec{Op::getrs, select::Lib::factorization} — /< last resort (§5.5): blocked, vendor Tuner grid_n: 1, 2, 4, 8, 16, 24, 31, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024. Tuner grid_nrhs: 1, 2, 3, 4, 5, 8, 16, 32, 63, 64, 127, 128, 256, 512, 1024. Tuner grid_batch: 1, 16, 127, 128, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 2440, transcribed 130 2026-10-11 blocked 1588 (n 1..1024), cta 719 (n 1..1024), vendor 263 (n 1..1024)
double sm_120 deep 2918, transcribed 196 2026-10-11 blocked 1765 (n 1..1024), cta 706 (n 1..1024), vendor 643 (n 1..1024)
cfloat sm_120 deep 3000, transcribed 194 2026-10-11 blocked 1357 (n 1..1024), vendor 997 (n 1..1024), cta 840 (n 1..1024)
cdouble sm_120 deep 2295, transcribed 270 2026-10-11 blocked 1005 (n 1..1024), vendor 955 (n 1..1024), cta 605 (n 1..1024)
float sm_89 transcribed 2160 2026-10-05 vendor 1268 (n 1..1024), blocked 540 (n 1..1024), cta 352 (n 32..1024)
double sm_89 transcribed 2160 2026-10-05 vendor 1624 (n 1..1024), blocked 360 (n 1..1024), cta 176 (n 32..1024)
cfloat sm_89 transcribed 2160 2026-10-05 vendor 1984 (n 1..1024), cta 176 (n 32..1024)
cdouble sm_89 transcribed 2160 2026-10-05 vendor 1984 (n 1..1024), cta 176 (n 32..1024)

orgqr

Source: src/ops/orgqr/choice.hh · evidence: QR: geqrf, orgqr and ormqr.

Family Knobs Kernel
blocked — /< orgqr_blocked_dispatch: identity + the public ormqr; GPU, n <= m
vendor — /< backend::orgqr_vendor; any shape (n > m, CPU, heterogeneous)

Table keys: m:log, n:log:2. Spec: OpSpec{Op::orgqr, select::Lib::factorization, {last_resort}} — /< op, library, rules

dtype device rows date ranked first
float sm_120 deep 123, transcribed 17 2026-10-11 blocked 120 (n 1..1024), vendor 20 (n 1..8192)
double sm_120 deep 121, transcribed 17 2026-10-11 blocked 119 (n 1..1024), vendor 19 (n 1..8192)
cfloat sm_120 deep 126, transcribed 17 2026-10-11 blocked 112 (n 1..628), vendor 31 (n 1..8192)
cdouble sm_120 deep 127, transcribed 17 2026-10-11 blocked 114 (n 1..1024), vendor 30 (n 1..8192)
float sm_89 transcribed 153 2026-10-05 vendor 87 (n 1..8192), blocked 66 (n 1..512)
double sm_89 transcribed 153 2026-10-05 vendor 87 (n 1..8192), blocked 66 (n 1..512)
cfloat sm_89 transcribed 153 2026-10-05 vendor 87 (n 1..8192), blocked 66 (n 1..512)
cdouble sm_89 transcribed 153 2026-10-05 vendor 87 (n 1..8192), blocked 66 (n 1..512)

ormqr

Source: src/ops/ormqr/choice.hh · evidence: QR: geqrf, orgqr and ormqr.

Family Knobs Kernel
blocked — /< ormqr_blocked (larft + level-3 WY updates); GPU, no complex Trans
vendor — /< backend::ormqr_vendor; no complex Trans either

Table keys: side:exact, trans:exact, m:log, k:log, q:log, batch:log. Spec: OpSpec{Op::ormqr, select::Lib::factorization} — /< last resort (§5.5): blocked, vendor Tuner grid_m: 1, 8, 64, 512. Tuner grid_q: 1, 32, 1024. Tuner grid_batch: 128, 2048, 32768.

dtype device rows date ranked first
float sm_120 deep 426 2026-10-11 blocked 426
double sm_120 deep 414 2026-10-11 blocked 414
cfloat sm_120 deep 278, transcribed 192 2026-10-11 blocked 289, vendor 181
cdouble sm_120 deep 252, transcribed 180 2026-10-11 blocked 252, vendor 180
float sm_89 transcribed 540 2026-10-05 blocked 540
double sm_89 transcribed 540 2026-10-05 blocked 540
cfloat sm_89 transcribed 540 2026-10-05 blocked 360, vendor 180
cdouble sm_89 transcribed 540 2026-10-05 blocked 360, vendor 180

posv

Source: src/ops/posv/choice.hh · evidence: POTRF and POSV.

Family Knobs Kernel
tiny — /< posv_tiny_dispatch: fused factor + solve, small n and nrhs
cta — /< public potrf + potrs_fused_dispatch; B fits in SLM
blocked — /< public potrf + two public trsm; any homogeneous batch

Table keys: uplo:exact, n:log:3, nrhs:log, batch:log. Spec: OpSpec{Op::posv, select::Lib::none} — /< no library; blocked's children report errors Tuner grid_n: 1, 2, 3, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 288, 320, 384, 448, 512, 640, 768, 1024. Tuner grid_nrhs: 1, 2, 4, 8, 16, 64. Tuner grid_batch: 128, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 2483 2026-10-11 blocked 1313 (n 1..1024), cta 750 (n 1..1024), tiny 420 (n 1..32)
double sm_120 deep 2126 2026-10-11 blocked 1321 (n 1..1024), cta 474 (n 1..1024), tiny 331 (n 1..32)
cfloat sm_120 deep 2203, custom 2 2026-10-11 blocked 1393 (n 1..1024), cta 648 (n 1..1024), tiny 164 (n 1..32)
cdouble sm_120 deep 1802 2026-10-11 blocked 1307 (n 1..768), cta 427 (n 1..768), tiny 68 (n 1..14)
float sm_89 transcribed 1980 2026-10-04 cta 1260 (n 36..1024), tiny 720 (n 1..32)
double sm_89 transcribed 1980 2026-10-04 cta 1260 (n 36..1024), tiny 720 (n 1..32)
cfloat sm_89 transcribed 1980 2026-10-04 cta 1300 (n 28..1024), tiny 680 (n 1..32)
cdouble sm_89 transcribed 1980 2026-10-04 cta 1500 (n 20..1024), tiny 480 (n 1..16)

potrf

Source: src/ops/potrf/choice.hh · evidence: POTRF and POSV.

Family Knobs Kernel
tiny — /< potrf_tiny_dispatch: registers; n <= potrf_tiny_max_n, max_wg >= 64
cta — /< potrf_cta_dispatch: whole matrix in SLM; n <= the CTA SLM ceiling
lpanel panel —
blocked — /< potrf_blocked_dispatch + gemm/trsm, Lower; nb/W: PotrfBlockedConst + env
vendor — /< backend::potrf_vendor; needs the solver library

Table keys: uplo:exact, n:log:3, batch:log. Spec: OpSpec{Op::potrf, select::Lib::solver} — /< default last resort: blocked, vendor Tuner grid_n: 1, 2, 3, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 288, 320, 384, 448, 512, 640, 768, 1024, 1280. Tuner grid_batch: 128, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 351 2026-10-11 tiny 120 (n 1..32), vendor 82 (n 64..1280), lpanel:panel=8 75 (n 17..479), cta 40 (n 34..76), lpanel:panel=16 21 (n 42..304), blocked 13 (n 541..1280)
double sm_120 deep 379 2026-10-11 vendor 163 (n 12..1280), lpanel:panel=8 84 (n 1..288), tiny 62 (n 1..32), cta 51 (n 1..52), blocked 19 (n 68..1280)
cfloat sm_120 deep 316 2026-10-11 vendor 134 (n 34..1280), tiny 115 (n 1..32), lpanel:panel=8 56 (n 17..351), cta 11 (n 34..52)
cdouble sm_120 deep 328 2026-10-11 vendor 141 (n 9..1280), lpanel:panel=8 81 (n 1..175), cta 57 (n 1..38), tiny 49 (n 1..16)
float sm_89 converted 87 2026-10-04 tiny 45 (n 1..32), vendor 29 (n 44..384), cta 11 (n 24..65), blocked 2 (n 512..512)
double sm_89 converted 34 2026-10-04 tiny 20 (n 1..16), vendor 12 (n 1..256), blocked 2 (n 512..512)
cfloat sm_89 converted 88 2026-10-04 tiny 45 (n 1..32), vendor 37 (n 36..512), cta 5 (n 24..36), blocked 1 (n 512..512)
cdouble sm_89 converted 32 2026-10-04 tiny 21 (n 1..16), vendor 7 (n 1..512), cta 4 (n 20..32)

spmm

Source: src/ops/spmm/choice.hh · evidence: SPMM: batched CSR kernel and routing.

Family Knobs Kernel
direct — /< sycl_spmm::spmm_native_csr: CSR only, no GPU gate (native_cpu too)
vendor — /< backend::spmm_vendor (cuSPARSE, rocSPARSE, netlib) less known-defect shapes

Table keys: transA:exact, transB:exact, m:log, nrhs:log, batch:log. Spec: OpSpec{Op::spmm, select::Lib::sparse, {last_resort}} — /< op, library, rules Tuner grid_m: 1, 16, 256, 4096, 65536. Tuner grid_nrhs: 1, 2, 4, 16, 64. Tuner grid_batch: 1, 8, 128, 1024, 16384.

dtype device rows date ranked first
float cpu transcribed 500 2026-10-05 direct 250, vendor 250
double cpu transcribed 500 2026-10-05 direct 250, vendor 250
cfloat cpu transcribed 500 2026-10-05 vendor 375, direct 125
cdouble cpu transcribed 500 2026-10-05 direct 250, vendor 250
float sm_120 deep 787 2026-10-11 direct 535, vendor 252
double sm_120 deep 705, transcribed 8 2026-10-11 direct 498, vendor 215
cfloat sm_120 deep 699, transcribed 8 2026-10-11 direct 488, vendor 219
cdouble sm_120 deep 703, transcribed 8 2026-10-11 direct 507, vendor 204
float sm_89 transcribed 500 2026-10-05 direct 250, vendor 250
double sm_89 transcribed 500 2026-10-05 direct 250, vendor 250
cfloat sm_89 transcribed 500 2026-10-05 vendor 375, direct 125
cdouble sm_89 transcribed 500 2026-10-05 direct 250, vendor 250

syev

Source: src/ops/syev/choice.hh · evidence: SYEV.

Family Knobs Kernel
cta — /< syev_cta: sytrd + steqr_cta, n <= 32
cta_fused — /< syev_cta_fused: one kernel, n <= 32
jacobi — /< syev_jacobi_cta, n <= 32
blocked — /< syev_blocked: sytrd_blocked + stedc, any n
two_stage — /< syev_two_stage: sy2sb + sb2st + stedc, any n
vendor — /< backend::syev_vendor; needs the solver library

Table keys: jobz:exact, n:log:3, batch:log. Spec: OpSpec{Op::syev, select::Lib::solver} — /< last resort (§5.5): blocked, vendor (CPU) Tuner grid_n: 1, 2, 3, 4, 6, 8, 9, 12, 16, 20, 24, 25, 28, 32, 33, 40, 48, 64, 96, 128, 192, 256, 257, 320, 321, 384, 448, 449, 512, 513, 640, 768, 1024, 1025, 1536, 2048, 4096. Tuner grid_batch: 128, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 337, transcribed 48 2026-10-11 blocked 146 (n 13..825), cta_fused 109 (n 1..32), vendor 52 (n 11..4096), two_stage 51 (n 33..4096), jacobi 20 (n 2..4), cta 7 (n 9..16)
double sm_120 deep 295, transcribed 64 2026-10-11 blocked 143 (n 16..640), vendor 58 (n 11..4096), cta_fused 46 (n 1..15), cta 46 (n 9..32), jacobi 36 (n 1..6), two_stage 30 (n 321..4096)
cfloat sm_120 deep 308, transcribed 68 2026-10-11 blocked 124 (n 12..513), vendor 92 (n 12..4096), cta_fused 80 (n 1..26), cta 33 (n 9..32), two_stage 33 (n 321..4096), jacobi 14 (n 1..2)
cdouble sm_120 deep 286, transcribed 80 2026-10-11 vendor 114 (n 1..4096), blocked 112 (n 17..512), cta_fused 64 (n 1..18), two_stage 36 (n 33..4096), cta 32 (n 6..32), jacobi 8 (n 1..2)
float sm_89 transcribed 370 2026-10-05 blocked 115 (n 33..448), two_stage 95 (n 321..4096), cta_fused 80 (n 9..32), jacobi 60 (n 1..8), vendor 20 (n 1025..4096)
double sm_89 transcribed 370 2026-10-05 jacobi 140 (n 1..32), blocked 115 (n 33..448), two_stage 65 (n 321..4096), vendor 50 (n 449..4096)
cfloat sm_89 transcribed 370 2026-10-05 blocked 125 (n 33..512), cta 80 (n 9..32), two_stage 65 (n 321..4096), cta_fused 60 (n 1..8), vendor 40 (n 513..4096)
cdouble sm_89 transcribed 370 2026-10-05 cta 125 (n 1..32), blocked 90 (n 33..320), vendor 90 (n 25..4096), two_stage 65 (n 321..4096)

symm

Source: src/ops/symm/choice.hh · evidence: Level-3: symm, hemm, syrk, herk, syr2k, her2k, trmm.

Family Knobs Kernel
expand — /< expand_mirrored into scratch + the public gemm; scratch must fit
vendor — /< backend::symm_vendor (cublas?symm / cblas_?symm loop)

Table keys: form:exact, m:log, n:log, batch:log. Spec: OpSpec{Op::symm, select::Lib::level3, {last_resort}} — /< op, vendor library, rules Tuner grid_form: "sq", "tall", "wide". Tuner grid_mn: 1, 2, 4, 8, 16, 32, 64, 128, 255, 256, 512, 1024, 2048, 4096. Tuner grid_batch: 1, 2, 3, 4, 8, 128, 1024, 8192, 32768.

dtype device rows date ranked first
float sm_120 transcribed 3570, deep 1729 2026-10-11 expand 2746 (n 1..4096), vendor 2553 (n 1..4096)
double sm_120 transcribed 3623, deep 1875 2026-10-11 vendor 4247 (n 1..4096), expand 1251 (n 1..4096)
float sm_89 transcribed 5292 2026-10-06 vendor 3723 (n 1..4096), expand 1569 (n 1..4096)
double sm_89 transcribed 5292 2026-10-06 vendor 5292 (n 1..4096)

syr2k

Source: src/ops/syr2k/choice.hh · evidence: Level-3: symm, hemm, syrk, herk, syr2k, her2k, trmm.

Family Knobs Kernel
triangular — /< syr2k_triangular_tiles<float>, CUDA GPU; real ConjTrans runs as Trans
vendor — /< backend::syr2k_vendor (per-item ?syr2k loop)

Table keys: n:log:2, k:log, batch:log. Spec: OpSpec{Op::syr2k, select::Lib::level3, {last_resort}} — /< op, vendor library, rules Tuner grid_n: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096. Tuner grid_k: 1, 8, 64, 512, 4096. Tuner grid_batch: 1, 2, 3, 128, 1024, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 592, transcribed 59 2026-10-11 triangular 449 (n 1..4096), vendor 202 (n 1..4096)
double sm_120 deep 349, transcribed 42 2026-10-11 vendor 391 (n 1..4096)
float sm_89 transcribed 455 2026-10-06 triangular 390 (n 1..4096), vendor 65 (n 1..4096)
double sm_89 transcribed 455 2026-10-06 vendor 455 (n 1..4096)

syrk

Source: src/ops/syrk/choice.hh · evidence: Level-3: symm, hemm, syrk, herk, syr2k, her2k, trmm.

Family Knobs Kernel
gram — /< syrk_gram_tiles: one tile covers C; n <= 128, tile SLM fits
triangular — /< syrk_triangular_tiles<float>: 128-wide tiles of one half
vendor — /< backend::syrk_vendor (per-item ?syrk loop)

Table keys: form:exact, trans:exact, n:log:2, k:log, batch:log. Spec: OpSpec{Op::syrk, select::Lib::level3, {last_resort}} — /< op, vendor library, rules Tuner grid_n: 1, 2, 4, 8, 16, 32, 64, 128, 129, 256, 257, 384, 385, 512, 513, 640, 641, 768, 769, 896, 897, 1024, 1025, 1152, 1153, 1536, 1537, 2176, 2177, 4096. Tuner grid_trans: "N", "T", "C". Tuner grid_k: 1, 7, 8, 64, 512, 4096. Tuner grid_batch: 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 15, 16, 26, 27, 128, 1024, 32768.

dtype device rows date ranked first
float sm_120 transcribed 12248, deep 7088 2026-10-11 triangular 10730 (n 49..4096), gram 4854 (n 1..128), vendor 3752 (n 1..4096)
double sm_120 transcribed 8914, deep 5717 2026-10-11 vendor 10997 (n 1..4096), gram 3634 (n 1..128)
float sm_89 transcribed 18450 2026-10-06 triangular 9088 (n 129..4096), gram 4896 (n 1..128), vendor 4466 (n 1..4096)
double sm_89 transcribed 18450 2026-10-06 vendor 13554 (n 1..4096), gram 4896 (n 1..128)

trmm

Source: src/ops/trmm/choice.hh · evidence: Level-3: symm, hemm, syrk, herk, syr2k, her2k, trmm.

Family Knobs Kernel
triangular — /< trmm_triangular_tiles: Side::Left; tile grid <= 65535
expand — /< expand_triangular + the public gemm; scratch must fit
vendor — /< backend::trmm_vendor (cublas?trmm loop)

Table keys: side:exact, order:log:2, q:log, batch:log. Spec: OpSpec{Op::trmm, select::Lib::level3, {last_resort}} — /< op, vendor library, rules Tuner grid_order: 1, 16, 32, 64, 128, 256, 512, 1024, 2048. Tuner grid_q: 1, 16, 128, 1024, 4096. Tuner grid_batch: 1, 128, 1024, 32768.

dtype device rows date ranked first
float sm_120 deep 756, transcribed 34, custom 2 2026-10-11 expand 275, triangular 267, vendor 250
double sm_120 deep 667, transcribed 46, custom 6 2026-10-11 expand 409, vendor 194, triangular 116
cfloat sm_120 deep 616, transcribed 46, custom 5 2026-10-11 expand 360, vendor 207, triangular 100
cdouble sm_120 deep 510, transcribed 54, custom 4 2026-10-11 expand 280, vendor 172, triangular 116
float sm_89 transcribed 360 2026-10-06 triangular 180, expand 180
double sm_89 transcribed 360 2026-10-06 triangular 180, expand 180
cfloat sm_89 transcribed 360 2026-10-06 triangular 180, expand 180
cdouble sm_89 transcribed 360 2026-10-06 triangular 180, expand 180

trsm

Source: src/ops/trsm/choice.hh · evidence: TRSM.

Family Knobs Kernel
cta — /< trsm_native_v1_dispatch, order <= 32
sg_left — /< trsm_native_sg_left_dispatch: Left, order <= 32, sg 32
blocked — /< trsm_native_blocked + the public gemm, any order
vendor — /< backend::trsm_vendor; needs the level-3 library

Table keys: side:exact, trans:exact, order:log:2, q:log, batch:log. Spec: OpSpec{Op::trsm, select::Lib::level3} — /< last resort (§5.5): blocked, vendor (CPU) Tuner grid_order: 1, 2, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024. Tuner grid_q: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 4096. Tuner grid_batch: 128, 512, 2048, 8192, 32768.

dtype device rows date ranked first
float sm_120 deep 5872 2026-10-11 blocked 1913, cta 1419, vendor 1384, sg_left 1156
double sm_120 deep 5029 2026-10-11 blocked 2167, cta 1793, sg_left 733, vendor 336
cfloat sm_120 deep 6063, transcribed 508 2026-10-11 blocked 2439, cta 1965, sg_left 1220, vendor 947
cdouble sm_120 deep 4672, transcribed 732 2026-10-11 blocked 2208, cta 1625, vendor 975, sg_left 596
float sm_89 transcribed 4320 2026-10-04 blocked 2400, cta 1920
double sm_89 transcribed 4320 2026-10-04 blocked 2400, cta 1920
cfloat sm_89 transcribed 4320 2026-10-04 blocked 2400, cta 1920
cdouble sm_89 transcribed 4320 2026-10-04 blocked 2400, cta 1920