gfx1151 on Windows: the prompt experts run on the F16 matrix-core kernels by default (STRATA_PF_F16)

Owner rule: a consistent Strix Halo speed gain goes on by default. Windows gfx1151, engine 0.1.54 builds, interleaved, idle box
(ab_f16def, 2 rounds, no environment on either side): IQ3_S prompts 4K 1,180 -> 1,279, 8K 1,289 -> 1,398, 32K 1,299 -> 1,404 tok/s
(x1.08); UD-IQ4_XS 8K 1,092 -> 1,223, 32K 1,135 -> 1,248 (x1.10-1.12). Decode over 200 tokens unchanged (58.6 -> 58.2, 48.8 -> 48.5),
first greedy ids identical, 38 of 38 runs exit 0. The rounding differs from the int8 kernels; KL is information only.
STRATA_PF_F16=0 turns it off. arch_defaults_test expects six switches on Windows gfx1151.
This commit is contained in:
Niko1221 committed 2026-10-30 19:15:54 +01:00
1 parent d936db6547
commit 7f6bc33081
2 files changed
+11 -5

No files matched your search

+5
View File
@@ -152,6 +152,11 @@ std::vector<std::pair<std::string, std::string>> igpu_default_env(const char* gc
{"STRATA_PA_FAST", "1"},
{"STRATA_HC_UPMIX", "1"},
{"STRATA_PF_FUSED", "1"},
// 0.2.9 (owner, 10-30: a consistent Strix Halo speed gain goes on by default): the prompt experts of every covered
// format on the F16 matrix-core kernels (the Q8_0 down layers of the Unsloth files included). Windows gfx1151,
// interleaved x3, same 16 greedy ids: IQ3_S 4K 1,187 -> 1,296 and 8K 1,285 -> 1,399 tok/s (x1.09), UD-IQ4_XS 4K 1,119 ->
// 1,221 and 8K 1,180 -> 1,270; decode unchanged. The rounding differs from the int8 kernels (KL is information only).
{"STRATA_PF_F16", "1"},
};
}
return t;
+6 -5
View File
@@ -185,7 +185,7 @@ int main() {
// 0.2.8: Strix Halo (gfx1151, integrated) gets the matrix-core prompt set on Windows; the 780M and the 890M are
// not measured there and stay off
const bool win_on = m.expect_on && m.integrated && std::string(m.gcn).rfind("gfx1151", 0) == 0;
CHECK(igpu_default_env(m.gcn, m.integrated).size() == (win_on ? 5u : 0u));
CHECK(igpu_default_env(m.gcn, m.integrated).size() == (win_on ? 6u : 0u));
#else
CHECK(igpu_default_env(m.gcn, m.integrated).size() == (want ? 5u : 0u));
#endif
@@ -215,13 +215,14 @@ int main() {
const auto t = igpu_default_env(m.gcn, m.integrated);
CHECK(t.empty() == !m.expect_on);
if (m.expect_on) {
CHECK(t.size() == 5);
bool halo_win = false;
#if defined(_WIN32)
halo_win = std::string(m.gcn).rfind("gfx1151", 0) == 0;
#endif
CHECK(t.size() == (halo_win ? 6u : 5u));
std::vector<const char*> want = {"STRATA_HIP_WMMA", "STRATA_PF_GEMM", "STRATA_PA_FAST", "STRATA_HC_UPMIX"};
want.push_back(halo_win ? "STRATA_PF_FUSED" : "STRATA_SELECT_WMMA");
if (halo_win) want.push_back("STRATA_PF_F16");
for (const char* w : want) {
bool found = false;
for (const auto& kv : t) found = found || (kv.first == w && kv.second == "1");
@@ -284,20 +285,20 @@ int main() {
CHECK(!igpu_prompt_set_enabled("gfx1103", true));
{
const auto t = igpu_default_env("gfx1151", true);
CHECK(t.size() == 5);
CHECK(t.size() == 6);
auto has = [&t](const char* k) {
for (const auto& kv : t) if (kv.first == k) return kv.second == "1";
return false;
};
CHECK(has("STRATA_HIP_WMMA") && has("STRATA_PF_GEMM") && has("STRATA_PA_FAST") && has("STRATA_HC_UPMIX") &&
has("STRATA_PF_FUSED"));
has("STRATA_PF_FUSED") && has("STRATA_PF_F16"));
CHECK(!has("STRATA_SELECT_WMMA"));
CHECK(igpu_default_env("gfx1151", false).empty()); // a gfx1151 reported as a discrete card
CHECK(igpu_default_env("gfx1150", true).empty()); // 890M: unchanged
CHECK(igpu_default_env("gfx1103", true).empty()); // 780M on Windows: unchanged
}
{
const char* halo[] = {"STRATA_HIP_WMMA", "STRATA_PF_GEMM", "STRATA_PA_FAST", "STRATA_HC_UPMIX", "STRATA_PF_FUSED"};
const char* halo[] = {"STRATA_HIP_WMMA", "STRATA_PF_GEMM", "STRATA_PA_FAST", "STRATA_HC_UPMIX", "STRATA_PF_FUSED", "STRATA_PF_F16"};
for (const char* k : halo) unset(k);
unset("STRATA_SELECT_WMMA");
const auto set = apply_arch_defaults("gfx1151", true);