From 72a27feb04ffdc1f579a4860780b724b2777b6a3 Mon Sep 17 00:00:00 2001 From: "Madsen, Jonathan" Date: Tue, 4 Feb 2025 04:05:19 -0600 Subject: [PATCH] Fix HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG for ROCm < 6.3 (#178) Fix HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG for ROCm < 6.4 Co-authored-by: Jonathan R. Madsen --- source/lib/rocprofiler-sdk/aql/helpers.cpp | 14 +++++++++++++- tests/bin/hsa-queue-dependency/multiqueue_app.h | 13 ++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/source/lib/rocprofiler-sdk/aql/helpers.cpp b/source/lib/rocprofiler-sdk/aql/helpers.cpp index 18632a88cb..44c4283a11 100644 --- a/source/lib/rocprofiler-sdk/aql/helpers.cpp +++ b/source/lib/rocprofiler-sdk/aql/helpers.cpp @@ -21,6 +21,7 @@ // SOFTWARE. #include "lib/rocprofiler-sdk/aql/helpers.hpp" +#include "lib/common/defines.hpp" #include "lib/common/logging.hpp" #include "lib/common/synchronized.hpp" #include "lib/common/utility.hpp" @@ -138,8 +139,19 @@ set_profiler_active_on_queue(hsa_amd_memory_pool_t pool, const size_t mask = 0x1000 - 1; auto size = (profile.command_buffer.size + mask) & ~mask; +#define HSA_AMD_INTERFACE_VERSION \ + ROCPROFILER_COMPUTE_VERSION(HSA_AMD_INTERFACE_VERSION_MAJOR, HSA_AMD_INTERFACE_VERSION_MINOR, 0) + +#if HSA_AMD_INTERFACE_VERSION >= 10700 + constexpr auto hsa_amd_memory_pool_executable_flag = HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG; +#elif HSA_AMD_INTERFACE_VERSION == 10600 + constexpr auto hsa_amd_memory_pool_executable_flag = (1 << 2); +#else + constexpr auto hsa_amd_memory_pool_executable_flag = 0; +#endif + if(hsa::get_amd_ext_table()->hsa_amd_memory_pool_allocate_fn( - pool, size, HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG, &profile.command_buffer.ptr) != + pool, size, hsa_amd_memory_pool_executable_flag, &profile.command_buffer.ptr) != HSA_STATUS_SUCCESS) { ROCP_WARNING << "Failed to allocate memory to enable profile command on agent, some " diff --git a/tests/bin/hsa-queue-dependency/multiqueue_app.h b/tests/bin/hsa-queue-dependency/multiqueue_app.h index ee787fb1bf..c3679e550c 100644 --- a/tests/bin/hsa-queue-dependency/multiqueue_app.h +++ b/tests/bin/hsa-queue-dependency/multiqueue_app.h @@ -234,9 +234,20 @@ public: static void* hsa_malloc(size_t size, const Device::Memory& mem) { +#define LOCAL_HSA_AMD_INTERFACE_VERSION \ + (10000 * HSA_AMD_INTERFACE_VERSION_MAJOR) + (100 * HSA_AMD_INTERFACE_VERSION_MINOR) + +#if LOCAL_HSA_AMD_INTERFACE_VERSION >= 10700 + constexpr auto hsa_amd_memory_pool_executable_flag = HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG; +#elif LOCAL_HSA_AMD_INTERFACE_VERSION == 10600 + constexpr auto hsa_amd_memory_pool_executable_flag = (1 << 2); +#else + constexpr auto hsa_amd_memory_pool_executable_flag = 0; +#endif + void* ret; hsa_status_t err = - hsa_amd_memory_pool_allocate(mem.pool, size, HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG, &ret); + hsa_amd_memory_pool_allocate(mem.pool, size, hsa_amd_memory_pool_executable_flag, &ret); RET_IF_HSA_ERR(err); err = hsa_amd_agents_allow_access(