23 if constexpr (std::is_same_v<T, float>)
26 return std::array<Syr2kChoice, 1>{
Vendor{}};
29inline constexpr std::array<std::string_view, 2>
last_resort{
"triangular",
"vendor"};
33inline constexpr std::array<std::string_view, 3>
key_names{
"n:log:2",
"k:log",
"batch:log"};
36inline constexpr std::array<int, 13>
grid_n{1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096};
37inline constexpr std::array<int, 5>
grid_k{1, 8, 64, 512, 4096};
38inline constexpr std::array<int, 7>
grid_batch{1, 2, 3, 128, 1024, 8192, 32768};
constexpr std::int64_t kMaxGridTiles
tile-count ceiling of the tile kernel
constexpr std::array< std::string_view, 3 > key_names
Keys: n = C's order, weight 2 (work ~ n^2 k batch); k = op(A)'s inner extent; batch.
constexpr auto candidates()
Every compiled choice, in tie-break order: triangular (float only, R7), vendor.
constexpr std::array< std::string_view, 2 > last_resort
triangular: any GPU shape
constexpr std::array< int, 5 > grid_k
k axis of the grid
std::variant< Triangular, Vendor > Syr2kChoice
fieldless: the aligned/predicated leg is derived
constexpr std::array< int, 7 > grid_batch
batch axis of the grid
constexpr std::array< int, 13 > grid_n
n axis
constexpr select::OpSpec spec
op, vendor library, rules
constexpr std::int64_t kMaxGridBatch
batch ceiling of the tile kernel
Flat kernel selection: one choose() per op over measured per-device tables.
syr2k_triangular_tiles<float>, CUDA GPU; real ConjTrans runs as Trans
backend::syr2k_vendor (per-item ?syr2k loop)
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...