24inline constexpr std::array<std::string_view, 2>
key_names{
"n:log:3",
"nrhs:log"};
27inline constexpr std::array<int, 29>
grid_n{1, 2, 3, 4, 6, 8, 12, 16, 17, 20, 24, 28, 32, 33, 40, 48, 64,
28 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096};
29inline constexpr std::array<int, 8>
grid_nrhs{1, 2, 4, 5, 8, 16, 64, 256};
constexpr auto all_of()
Every alternative of a field-less choice variant, in declaration (= tie-break) order.
constexpr std::array< int, 29 > grid_n
Both sides of every transcribed threshold (16|17, 32|33, nrhs 4|5), log-spaced elsewhere (the transcr...
std::variant< Tiny, Blocked > GesvChoice
no vendor family: a vendor pin warns and runs Auto
constexpr std::array< int, 8 > grid_nrhs
constexpr std::array< std::string_view, 2 > key_names
work: 2n^3/3 + 2 n^2 nrhs
constexpr select::OpSpec spec
no vendor library; last resort (§5.5): blocked
constexpr auto candidates()
Every compiled choice, once, in tie-break order (§6.3).
Flat kernel selection: one choose() per op over measured per-device tables.
public getrf + public getrs; any homogeneous batch
gesv_tiny_dispatch: fused LU factor + solve (buckets derived)
Base of a family with no knobs: struct Cta : NoFields<"cta"> {};.
What an op's choice.hh declares once: its name, the library its Vendor family calls (one gate for can...