22inline constexpr std::array<std::string_view, 2>
last_resort{
"vendor",
"blocked"};
25inline constexpr std::array<std::string_view, 2>
key_names{
"n:log:3",
"batch:log"};
28inline constexpr std::array<int, 24>
grid_n{1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64,
29 96, 127, 128, 192, 255, 256, 384, 512, 768, 1024, 2048, 4096};
30inline constexpr std::array<int, 5>
grid_batch{128, 512, 2048, 8192, 32768};
constexpr auto all_of()
Every alternative of a field-less choice variant, in declaration (= tie-break) order.
constexpr std::array< std::string_view, 2 > last_resort
generality order (§5.5)
constexpr std::array< std::string_view, 2 > key_names
work ~ n^3 batch
std::variant< Blocked, Vendor > GetriChoice
both fieldless: the driver derives wg
constexpr auto candidates()
Every compiled choice, in tie-break order (§6.3): native first.
constexpr select::OpSpec spec
op, library, rules
constexpr std::array< int, 24 > grid_n
Log grid + both sides of the transcribed edges (float 128, cfloat 256); the transcriber (tuned/README...
constexpr std::array< int, 5 > grid_batch
Flat kernel selection: one choose() per op over measured per-device tables.
getri_blocked_dispatch: P into C + two public trsm; GPU, square
backend::getri_vendor; also CPU, NETLIB, heterogeneous batches
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...