From 0e04fdd57165029fcf6d9226d22cf5d3e5370b74 Mon Sep 17 00:00:00 2001 From: Giovanni Lenzi Baraldi Date: Thu, 27 Nov 2025 20:03:38 +0100 Subject: [PATCH] Workaround for SWDEV-559598. Enabling more thread trace tests. (#1336) * Workaround for SWDEV-559598 * gfx11 fix --- .../tests/thread-trace/CMakeLists.txt | 18 +++++++++-- .../tests/thread-trace/agent.cpp | 30 +++++++++++++++---- .../tests/thread-trace/multi_dispatch.cpp | 9 +++--- .../tests/thread-trace/single_dispatch.cpp | 7 +++-- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/projects/rocprofiler-sdk/tests/thread-trace/CMakeLists.txt b/projects/rocprofiler-sdk/tests/thread-trace/CMakeLists.txt index f7165449f9..0701181342 100644 --- a/projects/rocprofiler-sdk/tests/thread-trace/CMakeLists.txt +++ b/projects/rocprofiler-sdk/tests/thread-trace/CMakeLists.txt @@ -94,16 +94,28 @@ rocprofiler_add_integration_execute_test( LABELS "integration-tests" PRELOAD "${ROCPROFILER_MEMCHECK_PRELOAD_ENV_VALUE}") +# Feature introduced in ROCm 7.1, however some pre-release CI builds for 7.1 dont have +# this feature in aqlprofile. Disable the next tests for ROCm < 7.2. +set(IS_DISABLED True) +find_package(hip CONFIG REQUIRED) +if(hip_FOUND) + if(${hip_VERSION_MAJOR} EQUAL 7 AND ${hip_VERSION_MINOR} GREATER 1) + set(IS_DISABLED False) + elseif(${hip_VERSION_MAJOR} GREATER 7) + set(IS_DISABLED False) + endif() +endif() + # Test large buffer sizes. 5120 == 5GB rocprofiler_add_integration_execute_test( thread-trace-api-large-buffer-test COMMAND $ DEPENDS thread-trace-api-agent-test - TIMEOUT 10 + TIMEOUT 30 LABELS "integration-tests" PRELOAD "${PRELOAD_ENV}" - ENVIRONMENT "ATT_BUFFER_SIZE_MB=5120" - DISABLED ${ROCPROFILER_DISABLE_UNSTABLE_CTESTS}) + ENVIRONMENT "ATT_LARGE_BUFFER_TEST=1" + DISABLED ${IS_DISABLED}) # Test occupancy mode rocprofiler_add_integration_execute_test( diff --git a/projects/rocprofiler-sdk/tests/thread-trace/agent.cpp b/projects/rocprofiler-sdk/tests/thread-trace/agent.cpp index 3e76a4d088..676f9a1659 100644 --- a/projects/rocprofiler-sdk/tests/thread-trace/agent.cpp +++ b/projects/rocprofiler-sdk/tests/thread-trace/agent.cpp @@ -102,15 +102,33 @@ query_available_agents(rocprofiler_agent_version_t /* version */, const auto* agent = static_cast(agents[idx]); if(agent->type != ROCPROFILER_AGENT_TYPE_GPU) continue; - // Check if we are testing for large buffers - static const char* var = std::getenv("ATT_BUFFER_SIZE_MB"); - static uint64_t buffer_size_mb = (var ? atoi(var) : 96) * 1024ul * 1024ul; + uint64_t buffer_size_gb = 1; - std::vector parameters; + // Are we testing for larger buffers? + if(const char* var = std::getenv("ATT_LARGE_BUFFER_TEST"); var && atoi(var)) + { + // To fully test this feature, we need >4GB per shader engine (>8GB total). + // Some RDNA GPUs only have 8GB of VRAM, so we have to use 5GB total = 2.5GB per SE. + uint64_t total_memory = 0; + for(uint32_t i = 0; i < agent->mem_banks_count; i++) + total_memory += agent->mem_banks[i].size_in_bytes; + + // Check we have >11GB VRAM. If so, allocate 10GB. + if(total_memory > (11ul << 30)) + buffer_size_gb = 10; + else + buffer_size_gb = 5; + } + + uint64_t buffer_size_bytes = buffer_size_gb << 30; + if(agent->gfx_target_version / 10000 == 11u) + buffer_size_bytes = 255ul << 20; // gfx11 limititation + + auto parameters = std::vector{}; parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_TARGET_CU, {1}}); parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SIMD_SELECT, {0xF}}); - parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_BUFFER_SIZE, {buffer_size_mb}}); - parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SHADER_ENGINE_MASK, {0x1}}); + parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_BUFFER_SIZE, {buffer_size_bytes}}); + parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SHADER_ENGINE_MASK, {0x3}}); static const bool extra_args = std::getenv("ATT_NODETAIL") ? std::stoi(std::getenv("ATT_NODETAIL")) != 0 : false; diff --git a/projects/rocprofiler-sdk/tests/thread-trace/multi_dispatch.cpp b/projects/rocprofiler-sdk/tests/thread-trace/multi_dispatch.cpp index 063cd57210..f8444115c0 100644 --- a/projects/rocprofiler-sdk/tests/thread-trace/multi_dispatch.cpp +++ b/projects/rocprofiler-sdk/tests/thread-trace/multi_dispatch.cpp @@ -71,8 +71,9 @@ tool_init(rocprofiler_client_finalize_t /* fini_func */, void* /* tool_data */) nullptr), "code object tracing service configure"); - std::vector params{}; - params.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SERIALIZE_ALL, {1}}); + auto parameters = std::vector{}; + parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SERIALIZE_ALL, {1}}); + parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SHADER_ENGINE_MASK, {0x3}}); std::vector agents{}; @@ -97,8 +98,8 @@ tool_init(rocprofiler_client_finalize_t /* fini_func */, void* /* tool_data */) ROCPROFILER_CALL( rocprofiler_configure_dispatch_thread_trace_service(client_ctx, id, - params.data(), - params.size(), + parameters.data(), + parameters.size(), dispatch_callback, Callbacks::shader_data_callback, nullptr), diff --git a/projects/rocprofiler-sdk/tests/thread-trace/single_dispatch.cpp b/projects/rocprofiler-sdk/tests/thread-trace/single_dispatch.cpp index 77a477d0ff..41522b8c7a 100644 --- a/projects/rocprofiler-sdk/tests/thread-trace/single_dispatch.cpp +++ b/projects/rocprofiler-sdk/tests/thread-trace/single_dispatch.cpp @@ -84,13 +84,16 @@ tool_init(rocprofiler_client_finalize_t /* fini_func */, void* /* tool_data */) &agents), "Failed to iterate agents"); + auto parameters = std::vector{}; + parameters.push_back({ROCPROFILER_THREAD_TRACE_PARAMETER_SHADER_ENGINE_MASK, 0x3}); + for(auto id : agents) { ROCPROFILER_CALL( rocprofiler_configure_dispatch_thread_trace_service(client_ctx, id, - nullptr, - 0, + parameters.data(), + parameters.size(), dispatch_callback, Callbacks::shader_data_callback, nullptr),