From ffafd46406491174e66eeaa6c6acc504812e5b84 Mon Sep 17 00:00:00 2001 From: Adam Niederer Date: Tue, 4 Jun 2024 19:19:04 -0400 Subject: [PATCH] Allow overriding gfx version per-node This lets you run two unsupported-but-really-supported cards of different architecture together in the same program. Works great w/ llama.cpp on my 7900XT + 6600. Example usage (device 0 is RDNA3, device 1 is RDNA2): HSA_OVERRIDE_GFX_VERSION_1="11.0.0" HSA_OVERRIDE_GFX_VERSION_2="10.3.0" ollama serve Change-Id: Ic63ef462f698dee722d360f7fc3ef72789c277b7 Signed-off-by: AdamNiederer Signed-off-by: Kent Russell Signed-off-by: Chris Freehill [ROCm/ROCR-Runtime commit: 84567b641642f504043132b796d7692a9c26b0ef] --- projects/rocr-runtime/libhsakmt/src/topology.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/rocr-runtime/libhsakmt/src/topology.c b/projects/rocr-runtime/libhsakmt/src/topology.c index 3ca3dd7497..1bd3303db8 100644 --- a/projects/rocr-runtime/libhsakmt/src/topology.c +++ b/projects/rocr-runtime/libhsakmt/src/topology.c @@ -1064,6 +1064,7 @@ static HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id, char *read_buf, *p, *envvar, dummy = '\0'; char prop_name[256]; char path[256]; + char per_node_override[32]; unsigned long long prop_val = 0; uint32_t prog, major = 0, minor = 0, step = 0; int read_size; @@ -1210,8 +1211,8 @@ static HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id, hsa_gfxip = find_hsa_gfxip_device(props->DeviceId, gfxv_major); if (hsa_gfxip || gfxv) { - envvar = getenv("HSA_OVERRIDE_GFX_VERSION"); - if (envvar) { + snprintf(per_node_override, sizeof(per_node_override), "HSA_OVERRIDE_GFX_VERSION_%d", node_id); + if ((envvar = getenv(per_node_override)) || (envvar = getenv("HSA_OVERRIDE_GFX_VERSION"))) { /* HSA_OVERRIDE_GFX_VERSION=major.minor.stepping */ if ((sscanf(envvar, "%u.%u.%u%c", &major, &minor, &step, &dummy) != 3) ||