tuning_params.hh
Go to the documentation of this file.
1#pragma once
2
3/// @file
4/// @brief Tuning constants, bucketed by problem order n, with runtime `BATCHLAS_TUNE_*`
5/// overrides.
6///
7/// Each knob has five constants (`_TINY` n <= 64, `_SMALL` <= 128, `_MEDIUM` <= 256, `_LARGE`
8/// <= 512, `_XLARGE` above), a constexpr table `<knob>_default_for_n(n)`, and a runtime accessor
9/// `<knob>_for_n(n)` that consults its `BATCHLAS_TUNE_*` override first. The constants were
10/// measured on sm_89 in float only.
11/// @warning Do not change a `BATCHLAS_TUNE_*` variable between a `*_buffer_size()` query and its
12/// call: the accessors feed both, and the workspace would be sized for another width.
13/// @see @ref perf_tuning
14/// @ingroup api_config
15// GENERATED constants (evaluation/tuning/generate_tuning_header.py); regenerate, do not hand-edit.
16// The accessors, this include and these doc comments are mirrored in the generator's template:
17// change both or a retune reverts it. evidence: docs/perf/tuning.md#tuning-regenerating-the-header
18
19#include <cstdint>
20#include <cstdlib>
21
22#include <batchlas/settings.hh>
23
25
26namespace detail {
27
28/// @brief The captured override if it is a clean positive 32-bit integer, else `fallback`.
29///
30/// Unset, empty, unparseable, trailing garbage (`"16x"`), non-positive or out-of-range values all
31/// yield `fallback`, the compiled constant.
32/// @param captured the captured `BATCHLAS_TUNE_*` value from settings()
33/// @param fallback the compiled constant for this n
34/// @ingroup api_config_lowlevel
35// strtol stays HERE, not in settings.cc: env_int_or reads "16x" as 16, exactly what a retune
36// harness types. evidence: docs/perf/tuning.md#tuning-runtime-overrides-of-the-constants
37inline int32_t tuning_env_override(const EnvValue& captured, int32_t fallback) {
38 const char* v = captured.get();
39 if (v == nullptr || *v == '\0') return fallback;
40 char* end = nullptr;
41 const long parsed = std::strtol(v, &end, 10);
42 if (end == v || *end != '\0') return fallback; // not a clean integer
43 if (parsed <= 0 || parsed > 2147483647L) return fallback; // non-positive / out of range
44 return static_cast<int32_t>(parsed);
45}
46
47} // namespace detail
48
49inline constexpr int32_t ORMQR_BLOCK_SIZE_TINY = 16;
50inline constexpr int32_t ORMQR_BLOCK_SIZE_SMALL = 16;
51inline constexpr int32_t ORMQR_BLOCK_SIZE_MEDIUM = 24;
52inline constexpr int32_t ORMQR_BLOCK_SIZE_LARGE = 48;
53inline constexpr int32_t ORMQR_BLOCK_SIZE_XLARGE = 56;
54
55// gebrd's panel width: deliberately NOT the ormqr constant (opposite gradients).
56// evidence: docs/perf/gesvd.md#gesvd-the-gebrd-panel-width-split-from-ormqr
57inline constexpr int32_t GEBRD_BLOCK_SIZE_TINY = 16;
58inline constexpr int32_t GEBRD_BLOCK_SIZE_SMALL = 8;
59inline constexpr int32_t GEBRD_BLOCK_SIZE_MEDIUM = 8;
60inline constexpr int32_t GEBRD_BLOCK_SIZE_LARGE = 16;
61inline constexpr int32_t GEBRD_BLOCK_SIZE_XLARGE = 16;
62
63// sb2st wave back-transform geometry. 0 = keep the shape-adaptive heuristic in
64// sytrd_sb2st_hh.cc, and ALL ship 0 on purpose: the heuristic already matches the tuned winner.
65// Only tile {1,2,4,8} x subs {4,8,16} are instantiated; any other pair silently falls through to
66// the slower tiled kernel. evidence: docs/perf/syev.md#syev-the-2026-08-07-constant-retune
67inline constexpr int32_t SB2ST_BACK_TILE_TINY = 0;
68inline constexpr int32_t SB2ST_BACK_TILE_SMALL = 0;
69inline constexpr int32_t SB2ST_BACK_TILE_MEDIUM = 0;
70inline constexpr int32_t SB2ST_BACK_TILE_LARGE = 0;
71inline constexpr int32_t SB2ST_BACK_TILE_XLARGE = 0;
72
73inline constexpr int32_t SB2ST_BACK_SUBS_TINY = 0;
74inline constexpr int32_t SB2ST_BACK_SUBS_SMALL = 0;
75inline constexpr int32_t SB2ST_BACK_SUBS_MEDIUM = 0;
76inline constexpr int32_t SB2ST_BACK_SUBS_LARGE = 0;
77inline constexpr int32_t SB2ST_BACK_SUBS_XLARGE = 0;
78
79// sy2sb panel back-transform WY width. 0 = keep the shape gate in sytrd_sy2sb.cc; positive is
80// clamped to kd. This SHADOWS ORMQR_BLOCK_SIZE_* on syev's hot path.
81// evidence: docs/perf/tuning.md#tuning-knobs-that-shadow-each-other
82inline constexpr int32_t SY2SB_ORMQR_NB_TINY = 0;
83inline constexpr int32_t SY2SB_ORMQR_NB_SMALL = 0;
84inline constexpr int32_t SY2SB_ORMQR_NB_MEDIUM = 0;
85inline constexpr int32_t SY2SB_ORMQR_NB_LARGE = 32;
86inline constexpr int32_t SY2SB_ORMQR_NB_XLARGE = 0;
87
88inline constexpr int32_t SYTRD_BLOCK_SIZE_TINY = 8;
89inline constexpr int32_t SYTRD_BLOCK_SIZE_SMALL = 8;
90inline constexpr int32_t SYTRD_BLOCK_SIZE_MEDIUM = 16;
91inline constexpr int32_t SYTRD_BLOCK_SIZE_LARGE = 8;
92inline constexpr int32_t SYTRD_BLOCK_SIZE_XLARGE = 48;
93
94inline constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_TINY = 0;
95inline constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_SMALL = 0;
96inline constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_MEDIUM = 0;
97inline constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_LARGE = 128;
98inline constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_XLARGE = 0;
99
100inline constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_TINY = 0;
101inline constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_SMALL = 0;
102inline constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_MEDIUM = 0;
103inline constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_LARGE = 0;
104inline constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_XLARGE = 0;
105
106inline constexpr int32_t STEDC_RECURSION_THRESHOLD_TINY = 32;
107inline constexpr int32_t STEDC_RECURSION_THRESHOLD_SMALL = 32;
108inline constexpr int32_t STEDC_RECURSION_THRESHOLD_MEDIUM = 32;
109inline constexpr int32_t STEDC_RECURSION_THRESHOLD_LARGE = 32;
110inline constexpr int32_t STEDC_RECURSION_THRESHOLD_XLARGE = 32;
111
112// StedcMergeVariant: 1 = Fused (one work-group per merge), 2 = FusedCta (a sub-group partition
113// per secular root). Trap: FusedCtaConditionedHeavyDeflation asserts only finite-and-sorted, so
114// its passing is weak evidence for variant 2. evidence: docs/perf/stedc.md#stedc-current-tuning-values
115inline constexpr int32_t STEDC_MERGE_VARIANT_TINY = 2;
116inline constexpr int32_t STEDC_MERGE_VARIANT_SMALL = 2;
117inline constexpr int32_t STEDC_MERGE_VARIANT_MEDIUM = 2;
118inline constexpr int32_t STEDC_MERGE_VARIANT_LARGE = 2;
119inline constexpr int32_t STEDC_MERGE_VARIANT_XLARGE = 2;
120
121// threads_per_root and wg_multiplier are tuned through syev, NOT the stedc bench (which
122// disagrees with its consumer). evidence: docs/perf/stedc.md#stedc-current-tuning-values
123inline constexpr int32_t STEDC_THREADS_PER_ROOT_TINY = 8;
124inline constexpr int32_t STEDC_THREADS_PER_ROOT_SMALL = 8;
125inline constexpr int32_t STEDC_THREADS_PER_ROOT_MEDIUM = 8;
126inline constexpr int32_t STEDC_THREADS_PER_ROOT_LARGE = 8;
127inline constexpr int32_t STEDC_THREADS_PER_ROOT_XLARGE = 8;
128
129inline constexpr int32_t STEDC_WG_MULTIPLIER_TINY = 8;
130inline constexpr int32_t STEDC_WG_MULTIPLIER_SMALL = 8;
131inline constexpr int32_t STEDC_WG_MULTIPLIER_MEDIUM = 8;
132inline constexpr int32_t STEDC_WG_MULTIPLIER_LARGE = 8;
133inline constexpr int32_t STEDC_WG_MULTIPLIER_XLARGE = 8;
134
135// Compile-time tables (constexpr): the bucket constant for n, no override.
136
137/// @brief Compiled `ORMQR_BLOCK_SIZE_*` bucket for n (no override).
138/// @ingroup api_config_lowlevel
139inline constexpr int32_t ormqr_block_size_default_for_n(int32_t n) {
140 if (n <= 64) return ORMQR_BLOCK_SIZE_TINY;
141 if (n <= 128) return ORMQR_BLOCK_SIZE_SMALL;
142 if (n <= 256) return ORMQR_BLOCK_SIZE_MEDIUM;
143 if (n <= 512) return ORMQR_BLOCK_SIZE_LARGE;
145}
146
147inline constexpr int32_t gebrd_block_size_default_for_n(int32_t n) {
148 if (n <= 64) return GEBRD_BLOCK_SIZE_TINY;
149 if (n <= 128) return GEBRD_BLOCK_SIZE_SMALL;
150 if (n <= 256) return GEBRD_BLOCK_SIZE_MEDIUM;
151 if (n <= 512) return GEBRD_BLOCK_SIZE_LARGE;
153}
154
155inline constexpr int32_t sb2st_back_tile_default_for_n(int32_t n) {
156 if (n <= 64) return SB2ST_BACK_TILE_TINY;
157 if (n <= 128) return SB2ST_BACK_TILE_SMALL;
158 if (n <= 256) return SB2ST_BACK_TILE_MEDIUM;
159 if (n <= 512) return SB2ST_BACK_TILE_LARGE;
161}
162
163inline constexpr int32_t sb2st_back_subs_default_for_n(int32_t n) {
164 if (n <= 64) return SB2ST_BACK_SUBS_TINY;
165 if (n <= 128) return SB2ST_BACK_SUBS_SMALL;
166 if (n <= 256) return SB2ST_BACK_SUBS_MEDIUM;
167 if (n <= 512) return SB2ST_BACK_SUBS_LARGE;
169}
170
171inline constexpr int32_t sy2sb_ormqr_nb_default_for_n(int32_t n) {
172 if (n <= 64) return SY2SB_ORMQR_NB_TINY;
173 if (n <= 128) return SY2SB_ORMQR_NB_SMALL;
174 if (n <= 256) return SY2SB_ORMQR_NB_MEDIUM;
175 if (n <= 512) return SY2SB_ORMQR_NB_LARGE;
177}
178
179inline constexpr int32_t sytrd_block_size_default_for_n(int32_t n) {
180 if (n <= 64) return SYTRD_BLOCK_SIZE_TINY;
181 if (n <= 128) return SYTRD_BLOCK_SIZE_SMALL;
182 if (n <= 256) return SYTRD_BLOCK_SIZE_MEDIUM;
183 if (n <= 512) return SYTRD_BLOCK_SIZE_LARGE;
185}
186
187inline constexpr int32_t latrd_lower_panel_wg_hint_default_for_n(int32_t n) {
188 if (n <= 64) return LATRD_LOWER_PANEL_WG_HINT_TINY;
189 if (n <= 128) return LATRD_LOWER_PANEL_WG_HINT_SMALL;
190 if (n <= 256) return LATRD_LOWER_PANEL_WG_HINT_MEDIUM;
191 if (n <= 512) return LATRD_LOWER_PANEL_WG_HINT_LARGE;
193}
194
195inline constexpr int32_t stedc_recursion_threshold_default_for_n(int32_t n) {
196 if (n <= 64) return STEDC_RECURSION_THRESHOLD_TINY;
197 if (n <= 128) return STEDC_RECURSION_THRESHOLD_SMALL;
198 if (n <= 256) return STEDC_RECURSION_THRESHOLD_MEDIUM;
199 if (n <= 512) return STEDC_RECURSION_THRESHOLD_LARGE;
201}
202
203inline constexpr int32_t stedc_merge_variant_default_for_n(int32_t n) {
204 if (n <= 64) return STEDC_MERGE_VARIANT_TINY;
205 if (n <= 128) return STEDC_MERGE_VARIANT_SMALL;
206 if (n <= 256) return STEDC_MERGE_VARIANT_MEDIUM;
207 if (n <= 512) return STEDC_MERGE_VARIANT_LARGE;
209}
210
211inline constexpr int32_t stedc_threads_per_root_default_for_n(int32_t n) {
212 if (n <= 64) return STEDC_THREADS_PER_ROOT_TINY;
213 if (n <= 128) return STEDC_THREADS_PER_ROOT_SMALL;
214 if (n <= 256) return STEDC_THREADS_PER_ROOT_MEDIUM;
215 if (n <= 512) return STEDC_THREADS_PER_ROOT_LARGE;
217}
218
219inline constexpr int32_t stedc_wg_multiplier_default_for_n(int32_t n) {
220 if (n <= 64) return STEDC_WG_MULTIPLIER_TINY;
221 if (n <= 128) return STEDC_WG_MULTIPLIER_SMALL;
222 if (n <= 256) return STEDC_WG_MULTIPLIER_MEDIUM;
223 if (n <= 512) return STEDC_WG_MULTIPLIER_LARGE;
225}
226
227// Runtime accessors: what production code calls. Each consults its BATCHLAS_TUNE_* override
228// through settings() first and falls back to the table above.
229
230/// @brief ormqr WY block width for order n; override `BATCHLAS_TUNE_ORMQR_BLOCK_SIZE`.
231/// @ingroup api_config_lowlevel
232inline int32_t ormqr_block_size_for_n(int32_t n) {
233 return detail::tuning_env_override(settings().geometry.tune.ormqr_block_size, // BATCHLAS_TUNE_ORMQR_BLOCK_SIZE
235}
236
237/// @brief gebrd panel width for order n; override `BATCHLAS_TUNE_GEBRD_BLOCK_SIZE`.
238/// @ingroup api_config_lowlevel
239inline int32_t gebrd_block_size_for_n(int32_t n) {
240 return detail::tuning_env_override(settings().geometry.tune.gebrd_block_size, // BATCHLAS_TUNE_GEBRD_BLOCK_SIZE
242}
243
244/// @brief sb2st wave back-transform tile for order n, or 0 for "keep the call site's heuristic";
245/// override `BATCHLAS_TUNE_SB2ST_BACK_TILE`.
246/// @note 0 is reachable only from the compiled constant: the override forces a geometry, never
247/// auto. The same holds for sb2st_back_subs_for_n() and sy2sb_ormqr_nb_for_n().
248/// @ingroup api_config_lowlevel
249inline int32_t sb2st_back_tile_for_n(int32_t n) {
250 return detail::tuning_env_override(settings().geometry.tune.sb2st_back_tile, // BATCHLAS_TUNE_SB2ST_BACK_TILE
252}
253
254/// @brief sb2st wave back-transform sub-group count for order n, or 0 for the heuristic;
255/// override `BATCHLAS_TUNE_SB2ST_BACK_SUBS`.
256/// @ingroup api_config_lowlevel
257inline int32_t sb2st_back_subs_for_n(int32_t n) {
258 return detail::tuning_env_override(settings().geometry.tune.sb2st_back_subs, // BATCHLAS_TUNE_SB2ST_BACK_SUBS
260}
261
262/// @brief sy2sb back-transform WY width for order n, or 0 for the shape gate; override
263/// `BATCHLAS_TUNE_SY2SB_ORMQR_NB`.
264/// @ingroup api_config_lowlevel
265inline int32_t sy2sb_ormqr_nb_for_n(int32_t n) {
266 return detail::tuning_env_override(settings().geometry.tune.sy2sb_ormqr_nb, // BATCHLAS_TUNE_SY2SB_ORMQR_NB
268}
269
270/// @brief sytrd panel width for order n; override `BATCHLAS_TUNE_SYTRD_BLOCK_SIZE`.
271/// @ingroup api_config_lowlevel
272inline int32_t sytrd_block_size_for_n(int32_t n) {
273 return detail::tuning_env_override(settings().geometry.tune.sytrd_block_size, // BATCHLAS_TUNE_SYTRD_BLOCK_SIZE
275}
276
277/// @brief latrd lower-panel work-group size hint for order n, 0 for none; override
278/// `BATCHLAS_TUNE_LATRD_WG_HINT`.
279/// @ingroup api_config_lowlevel
280inline int32_t latrd_lower_panel_wg_hint_for_n(int32_t n) {
281 return detail::tuning_env_override(settings().geometry.tune.latrd_wg_hint, // BATCHLAS_TUNE_LATRD_WG_HINT
283}
284
285/// @brief latrd_lower_panel_wg_hint_for_n() at n = 256, for the legacy path.
286/// @ingroup api_config_lowlevel
288
289/// @brief Whether sytrd fuses the panel update at order n. No `BATCHLAS_TUNE_*` override; see
290/// SelectionSettings::sytrd_fuse_panel_update.
291/// @ingroup api_config_lowlevel
292inline constexpr bool sytrd_fuse_panel_update_for_n(int32_t n) {
293 if (n <= 64) return SYTRD_FUSE_PANEL_UPDATE_TINY != 0;
294 if (n <= 128) return SYTRD_FUSE_PANEL_UPDATE_SMALL != 0;
295 if (n <= 256) return SYTRD_FUSE_PANEL_UPDATE_MEDIUM != 0;
296 if (n <= 512) return SYTRD_FUSE_PANEL_UPDATE_LARGE != 0;
298}
299
300/// @brief stedc leaf size for order n; override `BATCHLAS_TUNE_STEDC_RECURSION_THRESHOLD`.
301/// @note 32 is the CTA invariant (sub-group width), not a tuning result.
302/// @ingroup api_config_lowlevel
303inline int32_t stedc_recursion_threshold_for_n(int32_t n) {
304 return detail::tuning_env_override(settings().geometry.tune.stedc_recursion_threshold, // BATCHLAS_TUNE_STEDC_RECURSION_THRESHOLD
306}
307
308/// @brief stedc merge variant for order n, as a StedcMergeVariant value (1 Fused, 2 FusedCta);
309/// override `BATCHLAS_TUNE_STEDC_MERGE_VARIANT`.
310/// @ingroup api_config_lowlevel
311// Callers cast to StedcMergeVariant unchecked; 0 (Auto) would re-enter tuning resolution, so it
312// must stay unreachable (it is: non-positive overrides fall back).
313inline int32_t stedc_merge_variant_for_n(int32_t n) {
314 return detail::tuning_env_override(settings().geometry.tune.stedc_merge_variant, // BATCHLAS_TUNE_STEDC_MERGE_VARIANT
316}
317
318/// @brief stedc secular-solve threads per root for order n; override
319/// `BATCHLAS_TUNE_STEDC_THREADS_PER_ROOT`.
320/// @ingroup api_config_lowlevel
321inline int32_t stedc_threads_per_root_for_n(int32_t n) {
322 return detail::tuning_env_override(settings().geometry.tune.stedc_threads_per_root, // BATCHLAS_TUNE_STEDC_THREADS_PER_ROOT
324}
325
326/// @brief stedc merge work-group multiplier for order n; override
327/// `BATCHLAS_TUNE_STEDC_WG_MULTIPLIER`.
328/// @ingroup api_config_lowlevel
329inline int32_t stedc_wg_multiplier_for_n(int32_t n) {
330 return detail::tuning_env_override(settings().geometry.tune.stedc_wg_multiplier, // BATCHLAS_TUNE_STEDC_WG_MULTIPLIER
332}
333
334} // namespace batchlas::tuning
A raw captured environment value, shaped like the std::getenv call it replaces.
Definition settings.hh:35
const char * get() const noexcept
The value, or nullptr when unset: the drop-in for std::getenv("...").
Definition settings.hh:64
constexpr int32_t ormqr_block_size_default_for_n(int32_t n)
Compiled ORMQR_BLOCK_SIZE_* bucket for n (no override).
int32_t sb2st_back_tile_for_n(int32_t n)
sb2st wave back-transform tile for order n, or 0 for "keep the call site's heuristic"; override BATCH...
int32_t sytrd_block_size_for_n(int32_t n)
sytrd panel width for order n; override BATCHLAS_TUNE_SYTRD_BLOCK_SIZE.
constexpr bool sytrd_fuse_panel_update_for_n(int32_t n)
Whether sytrd fuses the panel update at order n.
int32_t tuning_env_override(const EnvValue &captured, int32_t fallback)
The captured override if it is a clean positive 32-bit integer, else fallback.
int32_t stedc_threads_per_root_for_n(int32_t n)
stedc secular-solve threads per root for order n; override BATCHLAS_TUNE_STEDC_THREADS_PER_ROOT.
int32_t stedc_recursion_threshold_for_n(int32_t n)
stedc leaf size for order n; override BATCHLAS_TUNE_STEDC_RECURSION_THRESHOLD.
int32_t latrd_lower_panel_wg_hint_for_n(int32_t n)
latrd lower-panel work-group size hint for order n, 0 for none; override BATCHLAS_TUNE_LATRD_WG_HINT.
int32_t sy2sb_ormqr_nb_for_n(int32_t n)
sy2sb back-transform WY width for order n, or 0 for the shape gate; override BATCHLAS_TUNE_SY2SB_ORMQ...
int32_t stedc_merge_variant_for_n(int32_t n)
stedc merge variant for order n, as a StedcMergeVariant value (1 Fused, 2 FusedCta); override BATCHLA...
int32_t stedc_wg_multiplier_for_n(int32_t n)
stedc merge work-group multiplier for order n; override BATCHLAS_TUNE_STEDC_WG_MULTIPLIER.
int32_t sb2st_back_subs_for_n(int32_t n)
sb2st wave back-transform sub-group count for order n, or 0 for the heuristic; override BATCHLAS_TUNE...
int32_t ormqr_block_size_for_n(int32_t n)
ormqr WY block width for order n; override BATCHLAS_TUNE_ORMQR_BLOCK_SIZE.
int32_t gebrd_block_size_for_n(int32_t n)
gebrd panel width for order n; override BATCHLAS_TUNE_GEBRD_BLOCK_SIZE.
int32_t latrd_lower_panel_wg_hint()
latrd_lower_panel_wg_hint_for_n() at n = 256, for the legacy path.
const Settings & settings()
The process-wide settings.
constexpr int32_t SYTRD_BLOCK_SIZE_LARGE
constexpr int32_t ORMQR_BLOCK_SIZE_MEDIUM
constexpr int32_t ORMQR_BLOCK_SIZE_LARGE
constexpr int32_t STEDC_MERGE_VARIANT_MEDIUM
constexpr int32_t sytrd_block_size_default_for_n(int32_t n)
constexpr int32_t SB2ST_BACK_TILE_SMALL
constexpr int32_t SB2ST_BACK_TILE_XLARGE
constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_LARGE
constexpr int32_t STEDC_THREADS_PER_ROOT_TINY
constexpr int32_t SB2ST_BACK_TILE_MEDIUM
constexpr int32_t STEDC_MERGE_VARIANT_TINY
constexpr int32_t STEDC_RECURSION_THRESHOLD_LARGE
constexpr int32_t stedc_wg_multiplier_default_for_n(int32_t n)
constexpr int32_t stedc_threads_per_root_default_for_n(int32_t n)
constexpr int32_t STEDC_RECURSION_THRESHOLD_MEDIUM
constexpr int32_t STEDC_WG_MULTIPLIER_XLARGE
constexpr int32_t SY2SB_ORMQR_NB_XLARGE
constexpr int32_t ORMQR_BLOCK_SIZE_SMALL
constexpr int32_t STEDC_THREADS_PER_ROOT_MEDIUM
constexpr int32_t sy2sb_ormqr_nb_default_for_n(int32_t n)
constexpr int32_t STEDC_MERGE_VARIANT_SMALL
constexpr int32_t STEDC_THREADS_PER_ROOT_XLARGE
constexpr int32_t SYTRD_BLOCK_SIZE_MEDIUM
constexpr int32_t GEBRD_BLOCK_SIZE_LARGE
constexpr int32_t SY2SB_ORMQR_NB_LARGE
constexpr int32_t SB2ST_BACK_SUBS_TINY
constexpr int32_t SYTRD_BLOCK_SIZE_XLARGE
constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_LARGE
constexpr int32_t STEDC_WG_MULTIPLIER_TINY
constexpr int32_t SYTRD_BLOCK_SIZE_TINY
constexpr int32_t ORMQR_BLOCK_SIZE_XLARGE
constexpr int32_t SYTRD_BLOCK_SIZE_SMALL
constexpr int32_t STEDC_RECURSION_THRESHOLD_SMALL
constexpr int32_t sb2st_back_tile_default_for_n(int32_t n)
constexpr int32_t stedc_recursion_threshold_default_for_n(int32_t n)
constexpr int32_t gebrd_block_size_default_for_n(int32_t n)
constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_TINY
constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_SMALL
constexpr int32_t SB2ST_BACK_SUBS_XLARGE
constexpr int32_t SB2ST_BACK_SUBS_MEDIUM
constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_XLARGE
constexpr int32_t STEDC_WG_MULTIPLIER_MEDIUM
constexpr int32_t GEBRD_BLOCK_SIZE_MEDIUM
constexpr int32_t STEDC_RECURSION_THRESHOLD_XLARGE
constexpr int32_t GEBRD_BLOCK_SIZE_TINY
constexpr int32_t SB2ST_BACK_TILE_LARGE
constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_SMALL
constexpr int32_t STEDC_THREADS_PER_ROOT_LARGE
constexpr int32_t SB2ST_BACK_SUBS_LARGE
constexpr int32_t sb2st_back_subs_default_for_n(int32_t n)
constexpr int32_t SY2SB_ORMQR_NB_SMALL
constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_MEDIUM
constexpr int32_t STEDC_MERGE_VARIANT_XLARGE
constexpr int32_t SYTRD_FUSE_PANEL_UPDATE_MEDIUM
constexpr int32_t stedc_merge_variant_default_for_n(int32_t n)
constexpr int32_t STEDC_WG_MULTIPLIER_LARGE
constexpr int32_t STEDC_WG_MULTIPLIER_SMALL
constexpr int32_t STEDC_RECURSION_THRESHOLD_TINY
constexpr int32_t ORMQR_BLOCK_SIZE_TINY
constexpr int32_t SY2SB_ORMQR_NB_MEDIUM
constexpr int32_t SB2ST_BACK_TILE_TINY
constexpr int32_t SB2ST_BACK_SUBS_SMALL
constexpr int32_t GEBRD_BLOCK_SIZE_XLARGE
constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_TINY
constexpr int32_t STEDC_THREADS_PER_ROOT_SMALL
constexpr int32_t SY2SB_ORMQR_NB_TINY
constexpr int32_t STEDC_MERGE_VARIANT_LARGE
constexpr int32_t LATRD_LOWER_PANEL_WG_HINT_XLARGE
constexpr int32_t GEBRD_BLOCK_SIZE_SMALL
constexpr int32_t latrd_lower_panel_wg_hint_default_for_n(int32_t n)
Every BATCHLAS_* environment variable the library reads, captured once into batchlas::Settings,...