21 static constexpr std::string_view
name =
"lpanel";
22 static constexpr std::array<std::string_view, 1>
fields{
"panel"};
24 static Lpanel from(std::array<int, 1> v) {
return {v[0]}; }
30using PotrfChoice = std::variant<Tiny, Cta, Lpanel, Blocked, Vendor>;
35 if constexpr (std::is_same_v<T, float>)
45inline constexpr std::array<std::string_view, 3>
key_names{
"uplo:exact",
"n:log:3",
"batch:log"};
48inline constexpr std::array<int, 34>
grid_n{1, 2, 3, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48,
49 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 288, 320, 384, 448, 512, 640, 768, 1024, 1280};
50inline constexpr std::array<int, 5>
grid_batch{128, 512, 2048, 8192, 32768};
constexpr std::array< int, 5 > grid_batch
batch axis of the grid
std::variant< Tiny, Cta, Lpanel, Blocked, Vendor > PotrfChoice
natives need a GPU, sub-group 32, n >= 1
constexpr std::array< std::string_view, 3 > key_names
Table keys: uplo exact (L|U); n log-distance, weight 3 (work ~ n^3); batch log, weight 1.
constexpr std::array< int, 34 > grid_n
The tuner's coarse grid (§6.2): today's sweep grid, so converted and tuned tables line up.
constexpr select::OpSpec spec
default last resort: blocked, vendor
constexpr auto candidates()
Every compiled choice, once, in tie-break order (§6.3): simpler first, vendor last.
Flat kernel selection: one choose() per op over measured per-device tables.
potrf_blocked_dispatch + gemm/trsm, Lower; nb/W: PotrfBlockedConst + env
potrf_cta_dispatch: whole matrix in SLM; n <= the CTA SLM ceiling
potrf_lpanel_dispatch: SLM-resident panels; Lower only, n <= the LPanel SLM ceiling for panel.
static Lpanel from(std::array< int, 1 > v)
bool operator==(const Lpanel &) const =default
std::array< int, 1 > values() const
static constexpr std::array< std::string_view, 1 > fields
static constexpr std::string_view name
int panel
potrf_lpanel_dispatch's nb_hint; 16 is instantiated for float only
potrf_tiny_dispatch: registers; n <= potrf_tiny_max_n, max_wg >= 64
backend::potrf_vendor; needs the solver library
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...