From 7d490570fd17215c9a4f85177a07715d6cb4e1e3 Mon Sep 17 00:00:00 2001 From: nileshnegi Date: Fri, 31 Jul 2026 17:49:46 +0000 Subject: [PATCH] Support amd-smi 27 fabric layout Preserve source compatibility with both nested pre-27 amd-smi and flattened 27+ amd-smi fabric payload declarations. Co-authored-by: Cursor --- CHANGELOG.md | 4 ++++ CMakeLists.txt | 6 ++---- Makefile | 4 +--- src/client/EnvVars.hpp | 2 +- src/header/TransferBench.hpp | 28 +++++++++++++++++++++++++--- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5959d75..a102a52b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ Documentation for TransferBench is available at [https://rocm.docs.amd.com/projects/TransferBench](https://rocm.docs.amd.com/projects/TransferBench). +## v1.69.01 +### Added +- Added support for ABI change introduced in amd-smi 27.0.0 (ROCm 10.0) + ## v1.69.00 ### Added - Added support for `ALWAYS_VALIDATE=-1` to disable validation diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a4b7f65..fe585526 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,8 +103,8 @@ set(ENV{ROCM_PATH} "${ROCM_PATH}") # TransferBench project definitions #================================================================================================== set(TRANSFERBENCH_VERSION_MAJOR 1) -set(TRANSFERBENCH_VERSION_MINOR 67) -set(TRANSFERBENCH_VERSION_PATCH_FALLBACK "00") +set(TRANSFERBENCH_VERSION_MINOR 69) +set(TRANSFERBENCH_VERSION_PATCH_FALLBACK "01") # Auto-compute patch from git: count commits since the last v..* tag. # Falls back to TRANSFERBENCH_VERSION_PATCH_FALLBACK when git is unavailable, @@ -411,8 +411,6 @@ else() amdsmi_get_processor_handle_from_bdf(bdf, &h); amdsmi_fabric_info_t fi; amdsmi_get_gpu_fabric_info(h, &fi); - (void)fi.fabric_info.fabric_version.v1.ppod_id; - (void)fi.fabric_info.fabric_version.v1.vpod_id; return 0; }" AMDSMI_HAS_FABRIC) cmake_pop_check_state() diff --git a/Makefile b/Makefile index 66477a9d..37feae11 100644 --- a/Makefile +++ b/Makefile @@ -64,7 +64,7 @@ ifeq ($(filter clean,$(MAKECMDGOALS)),) endif GPU_TARGETS_FLAGS = $(foreach target,$(GPU_TARGETS),"--offload-arch=$(target)") $(info Compiling for $(GPU_TARGETS) architecture(s). Can modify this by setting GPU_TARGETS) - CXXFLAGS = -I. -I$(ROCM_PATH)/include -I$(ROCM_PATH)/include/hip -I$(ROCM_PATH)/include/hsa + CXXFLAGS = -std=c++17 -I. -I$(ROCM_PATH)/include -I$(ROCM_PATH)/include/hip -I$(ROCM_PATH)/include/hsa HIPLDFLAGS= -lnuma -L$(ROCM_PATH)/lib -lhsa-runtime64 -lamdhip64 HIPFLAGS = -Wall -x hip -D__HIP_PLATFORM_AMD__ -D__HIPCC__ $(GPU_TARGETS_FLAGS) ifneq ($(strip $(ROCM_DEVICE_LIB_PATH)),) @@ -224,8 +224,6 @@ ifeq ($(filter clean,$(MAKECMDGOALS)),) ' amdsmi_get_processor_handle_from_bdf(bdf, &h);' \ ' amdsmi_fabric_info_t fi;' \ ' amdsmi_get_gpu_fabric_info(h, &fi);' \ - ' (void)fi.fabric_info.fabric_version.v1.ppod_id;' \ - ' (void)fi.fabric_info.fabric_version.v1.vpod_id;' \ ' return 0;' \ '}' | \ $(CXX) -I$(ROCM_PATH)/include -x c++ - \ diff --git a/src/client/EnvVars.hpp b/src/client/EnvVars.hpp index d4a5df39..6276078f 100644 --- a/src/client/EnvVars.hpp +++ b/src/client/EnvVars.hpp @@ -44,7 +44,7 @@ THE SOFTWARE. #include #include -#define CLIENT_VERSION "00" +#define CLIENT_VERSION "01" #include "TransferBench.hpp" using namespace TransferBench; diff --git a/src/header/TransferBench.hpp b/src/header/TransferBench.hpp index 8510e3da..259fc4dc 100644 --- a/src/header/TransferBench.hpp +++ b/src/header/TransferBench.hpp @@ -52,7 +52,9 @@ THE SOFTWARE. #include #include #include +#include #include +#include #include #include "IbvDynLoad.hpp" @@ -794,6 +796,26 @@ namespace TransferBench //======================================================================================== namespace { +#ifdef AMD_SMI_ENABLED +template +struct AmdSmiFabricInfoIsFlat : std::false_type {}; + +template +struct AmdSmiFabricInfoIsFlat().fabric_info.v1)>> + : std::true_type {}; + +template +const auto& AmdSmiFabricInfoV1(const T& info) +{ + if constexpr (AmdSmiFabricInfoIsFlat::value) { + return info.fabric_info.v1; // New layout (amd-smi 27+): fabric_info.v1 + } else { + return info.fabric_info.fabric_version.v1; // Old layout (pre-27): fabric_info.fabric_version.v1 + } +} + +#endif + // Constants //======================================================================================== int constexpr MAX_BLOCKSIZE = 1024; // Max threadblock size @@ -7287,9 +7309,9 @@ namespace { if (err == AMDSMI_STATUS_SUCCESS) { // NOTE: vpod_id is a uint32_t but System holds it as an int64_t to allow for // vpodId == -1 to represent no pod present - memcpy(ppodId, &fabricInfo.fabric_info.fabric_version.v1.ppod_id, - sizeof(fabricInfo.fabric_info.fabric_version.v1.ppod_id)); - vpodId = fabricInfo.fabric_info.fabric_version.v1.vpod_id; + const auto& fabricV1 = AmdSmiFabricInfoV1(fabricInfo); + memcpy(ppodId, fabricV1.ppod_id, sizeof(fabricV1.ppod_id)); + vpodId = fabricV1.vpod_id; } else if (verbose) { const char *errString = NULL; amdsmi_status_code_to_string(err, &errString);