25inline constexpr std::array<std::string_view, 3>
key_names{
"n:log:2",
"nrhs:log",
"batch:log"};
29inline constexpr std::array<int, 18>
grid_n{1, 2, 4, 8, 16, 24, 31, 32, 48, 64, 96, 128, 192, 256, 384, 512,
31inline constexpr std::array<int, 15>
grid_nrhs{1, 2, 3, 4, 5, 8, 16, 32, 63, 64, 127, 128, 256, 512, 1024};
32inline constexpr std::array<int, 8>
grid_batch{1, 16, 127, 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< int, 18 > grid_n
A log grid plus both sides of every transcribed threshold (n 31/32; nrhs 2/3, 4/5,...
std::variant< Cta, Blocked, Vendor > GetrsChoice
natives: GPU, sub-group 32, conforming, not NETLIB
constexpr std::array< int, 8 > grid_batch
constexpr std::array< int, 15 > grid_nrhs
constexpr auto candidates()
Every compiled choice, once, in tie-break order (§6.3).
constexpr select::OpSpec spec
last resort (§5.5): blocked, vendor
constexpr std::array< std::string_view, 3 > key_names
~ n^2 nrhs batch
Flat kernel selection: one choose() per op over measured per-device tables.
getrs_blocked_dispatch: laswp + two public trsm
getrs_fused_dispatch: permute + both solves; B fits in SLM
backend::getrs_vendor; also takes non-conforming pairs
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...