Skip to content

Commit 5879cac

Browse files
committed
Fix SDMA tests in non-supported env
1 parent ae71e2b commit 5879cac

File tree

6 files changed

+45
-29
lines changed

6 files changed

+45
-29
lines changed

projects/rocprofiler-systems/source/lib/rocprof-sys/library/pmc/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ set(pmc_sources
2626
add_library(rocprofiler-systems-pmc-library OBJECT ${pmc_sources})
2727

2828
# Add AINIC support definition if available
29+
# PUBLIC so that tests linking to this library also get the definition
2930
if(ROCPROFSYS_BUILD_AINIC)
3031
target_compile_definitions(
3132
rocprofiler-systems-pmc-library
32-
PRIVATE ROCPROFSYS_BUILD_AINIC=1
33+
PUBLIC ROCPROFSYS_BUILD_AINIC=1
3334
)
3435
endif()
3536

projects/rocprofiler-systems/source/lib/rocprof-sys/library/pmc/collectors/gpu/cache_policy.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ struct cache_policy
7878
};
7979

8080
auto add_jpeg_track = [&](std::optional<int> xcp_idx) {
81-
for(int clk = 0; clk < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++clk)
81+
for(size_t clk = 0; clk < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++clk)
8282
{
8383
auto name =
8484
trace_cache::info::format_track_name<category::amd_smi_jpeg_activity>(
@@ -237,9 +237,9 @@ struct cache_policy
237237
}
238238
}
239239

240-
for(int xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
240+
for(size_t xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
241241
{
242-
for(int jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
242+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
243243
{
244244
auto jpeg_name =
245245
trace_cache::info::format_track_name<category::amd_smi_jpeg_activity>(

projects/rocprofiler-systems/source/lib/rocprof-sys/library/pmc/collectors/gpu/perfetto_policy.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ struct perfetto_policy
229229
process_xcp_array(description,
230230
enabled_metric == VCN_ACTIVITY_VALUE
231231
? AMDSMI_MAX_NUM_VCN
232-
: ROCPROFSYS_MAX_NUM_JPEG_ENGINES,
232+
: ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT,
233233
xcp);
234234
}
235235
}

projects/rocprofiler-systems/source/lib/rocprof-sys/library/pmc/collectors/gpu/tests/test_device.cpp

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
// Copyright (c) 2018-2025 Advanced Micro Devices, Inc. All Rights Reserved.
22
// SPDX-License-Identifier: MIT
33

4-
// Enable SDMA support for unit tests (we're using mocks, not real AMD SMI)
5-
#ifndef AMD_SMI_SDMA_SUPPORTED
6-
# define AMD_SMI_SDMA_SUPPORTED 1
7-
#endif
4+
// Include amd_smi.hpp first to get proper AMD_SMI_SDMA_SUPPORTED detection
5+
// based on the actual AMD SMI library version
6+
#include "core/amd_smi.hpp"
87

98
#include "library/pmc/collectors/gpu/device.hpp"
109
#include "library/pmc/device_providers/amd_smi/drivers/tests/mock_driver.hpp"
@@ -59,13 +58,17 @@ class DeviceTest : public ::testing::Test
5958
/**
6059
* @brief Setup SDMA mock expectations for any device mock.
6160
* Call this for any mock that will have devices constructed with it.
61+
* No-op when SDMA is not supported.
6262
*/
6363
template <typename MockPtr>
64-
static void SetupSDMAExpectations(MockPtr& mock, amdsmi_processor_handle handle)
64+
static void SetupSDMAExpectations([[maybe_unused]] MockPtr& mock,
65+
[[maybe_unused]] amdsmi_processor_handle handle)
6566
{
67+
#if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
6668
EXPECT_CALL(*mock, get_gpu_process_list(handle, _, _))
6769
.Times(AnyNumber())
6870
.WillRepeatedly(DoAll(SetArgPointee<1>(1), Return(AMDSMI_STATUS_SUCCESS)));
71+
#endif
6972
}
7073

7174
/**
@@ -88,9 +91,11 @@ class DeviceTest : public ::testing::Test
8891

8992
// SDMA support - allow any number of calls (happens during construction and
9093
// metrics collection)
94+
#if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
9195
EXPECT_CALL(*mock_driver, get_gpu_process_list(test_handle, _, _))
9296
.Times(AnyNumber())
9397
.WillRepeatedly(DoAll(SetArgPointee<1>(1), Return(AMDSMI_STATUS_SUCCESS)));
98+
#endif
9499
}
95100

96101
/**
@@ -112,9 +117,11 @@ class DeviceTest : public ::testing::Test
112117
DoAll(SetArgPointee<2>(sentinel_mem), Return(AMDSMI_STATUS_SUCCESS)));
113118

114119
// SDMA support
120+
#if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
115121
EXPECT_CALL(*mock_driver, get_gpu_process_list(test_handle, _, _))
116122
.Times(AnyNumber())
117123
.WillRepeatedly(Return(AMDSMI_STATUS_NOT_SUPPORTED));
124+
#endif
118125
}
119126

120127
/**
@@ -148,9 +155,11 @@ class DeviceTest : public ::testing::Test
148155
DoAll(SetArgPointee<2>(sentinel_mem), Return(AMDSMI_STATUS_SUCCESS)));
149156

150157
// SDMA support
158+
#if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
151159
EXPECT_CALL(*mock_driver, get_gpu_process_list(test_handle, _, _))
152160
.Times(AnyNumber())
153161
.WillRepeatedly(DoAll(SetArgPointee<1>(1), Return(AMDSMI_STATUS_SUCCESS)));
162+
#endif
154163
}
155164

156165
/**
@@ -180,7 +189,7 @@ class DeviceTest : public ::testing::Test
180189
{
181190
metrics.xcp_stats[xcp].vcn_busy[i] = static_cast<uint16_t>(50 + i);
182191
}
183-
for(size_t i = 0; i < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++i)
192+
for(size_t i = 0; i < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++i)
184193
{
185194
metrics.xcp_stats[xcp].jpeg_busy[i] = static_cast<uint16_t>(30 + i);
186195
}
@@ -229,7 +238,7 @@ class DeviceTest : public ::testing::Test
229238
{
230239
metrics.xcp_stats[xcp].vcn_busy[i] = 0xFFFF;
231240
}
232-
for(size_t i = 0; i < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++i)
241+
for(size_t i = 0; i < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++i)
233242
{
234243
metrics.xcp_stats[xcp].jpeg_busy[i] = 0xFFFF;
235244
}
@@ -934,7 +943,7 @@ TEST_F(DeviceTest, jpeg_activity_collection_all_xcps)
934943
// Set JPEG activity values for all XCP instances
935944
for(size_t xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
936945
{
937-
for(size_t jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
946+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
938947
{
939948
metrics.xcp_stats[xcp].jpeg_busy[jpeg] =
940949
static_cast<uint16_t>(30 + xcp + jpeg);
@@ -968,7 +977,7 @@ TEST_F(DeviceTest, jpeg_activity_collection_all_xcps)
968977
// Verify all XCP JPEG arrays were copied correctly
969978
for(size_t xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
970979
{
971-
for(size_t jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
980+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
972981
{
973982
EXPECT_EQ(collected_metrics.xcp_stats[xcp].jpeg_busy[jpeg],
974983
static_cast<uint16_t>(30 + xcp + jpeg));
@@ -1007,7 +1016,7 @@ TEST_F(DeviceTest, xcp_metrics_not_collected_when_unsupported)
10071016
{
10081017
EXPECT_EQ(collected_metrics.xcp_stats[xcp].vcn_busy[vcn], 0);
10091018
}
1010-
for(size_t jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
1019+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
10111020
{
10121021
EXPECT_EQ(collected_metrics.xcp_stats[xcp].jpeg_busy[jpeg], 0);
10131022
}
@@ -1074,7 +1083,7 @@ TEST_F(DeviceTest, mixed_vcn_jpeg_support)
10741083
// Verify JPEG arrays remain default-initialized (zeros)
10751084
for(size_t xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
10761085
{
1077-
for(size_t jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
1086+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
10781087
{
10791088
EXPECT_EQ(collected_metrics.xcp_stats[xcp].jpeg_busy[jpeg], 0);
10801089
}
@@ -2224,12 +2233,12 @@ TEST_F(DeviceTest, large_array_indices_xcp)
22242233
*/
22252234
TEST_F(DeviceTest, large_array_indices_jpeg)
22262235
{
2227-
// Setup: Set all ROCPROFSYS_MAX_NUM_JPEG_ENGINES entries
2236+
// Setup: Set all ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT entries
22282237
amdsmi_gpu_metrics_t metrics = CreateSentinelMetrics();
22292238

22302239
for(size_t xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
22312240
{
2232-
for(size_t jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
2241+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
22332242
{
22342243
metrics.xcp_stats[xcp].jpeg_busy[jpeg] =
22352244
static_cast<uint16_t>(xcp * 100 + jpeg);
@@ -2258,7 +2267,7 @@ TEST_F(DeviceTest, large_array_indices_jpeg)
22582267
// Verify all JPEG engines were processed correctly
22592268
for(size_t xcp = 0; xcp < AMDSMI_MAX_NUM_XCP; ++xcp)
22602269
{
2261-
for(size_t jpeg = 0; jpeg < ROCPROFSYS_MAX_NUM_JPEG_ENGINES; ++jpeg)
2270+
for(size_t jpeg = 0; jpeg < ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT; ++jpeg)
22622271
{
22632272
EXPECT_EQ(collected_metrics.xcp_stats[xcp].jpeg_busy[jpeg],
22642273
static_cast<uint16_t>(xcp * 100 + jpeg));
@@ -2461,8 +2470,9 @@ TEST_F(DeviceTest, full_lifecycle_with_realistic_data)
24612470
*
24622471
* Objective: Verify SDMA usage percentage is computed correctly from deltas.
24632472
*
2464-
* NOTE: AMD_SMI_SDMA_SUPPORTED is defined at the top of this file for testing.
2473+
* NOTE: This test is only compiled when AMD_SMI_SDMA_SUPPORTED is defined.
24652474
*/
2475+
#if defined(AMD_SMI_SDMA_SUPPORTED) && AMD_SMI_SDMA_SUPPORTED == 1
24662476
TEST_F(DeviceTest, sdma_delta_computation)
24672477
{
24682478
// Setup: Mock SDMA process data
@@ -2512,5 +2522,6 @@ TEST_F(DeviceTest, sdma_delta_computation)
25122522
EXPECT_GE(metrics2.sdma_usage, 0U);
25132523
EXPECT_LE(metrics2.sdma_usage, 100U);
25142524
}
2525+
#endif
25152526

25162527
} // namespace rocprofsys::pmc::collectors::gpu::testing

projects/rocprofiler-systems/source/lib/rocprof-sys/library/pmc/collectors/gpu/types.hpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,14 @@ to_string(const enabled_metrics& metrics)
9696
static_cast<bool>(metrics.bits.pcie), static_cast<bool>(metrics.bits.sdma_usage));
9797
}
9898

99-
// Ensure we have the correct max values defined
100-
#ifdef AMDSMI_MAX_NUM_JPEG_ENG_V1
101-
# define ROCPROFSYS_MAX_NUM_JPEG_ENGINES AMDSMI_MAX_NUM_JPEG_ENG_V1
102-
#else
103-
# define ROCPROFSYS_MAX_NUM_JPEG_ENGINES 40
104-
#endif
99+
// Get the actual JPEG engine count from the AMD SMI structure at compile time.
100+
// This ensures compatibility across ROCm versions where the jpeg_busy array size
101+
// may differ (32 in ROCm 6.x vs 40 in ROCm 7.x).
102+
constexpr size_t ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT =
103+
sizeof(amdsmi_gpu_xcp_metrics_t::jpeg_busy) / sizeof(uint16_t);
104+
105+
// For our internal metrics structure, use the AMD SMI array size
106+
#define ROCPROFSYS_MAX_NUM_JPEG_ENGINES ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT
105107

106108
#ifndef AMDSMI_MAX_NUM_VCN
107109
# define AMDSMI_MAX_NUM_VCN 4
@@ -119,8 +121,8 @@ struct metrics
119121
{
120122
struct xcp_metrics
121123
{
122-
std::array<uint16_t, ROCPROFSYS_MAX_NUM_JPEG_ENGINES> jpeg_busy;
123-
std::array<uint16_t, AMDSMI_MAX_NUM_VCN> vcn_busy;
124+
std::array<uint16_t, ROCPROFSYS_AMDSMI_JPEG_ENGINE_COUNT> jpeg_busy;
125+
std::array<uint16_t, AMDSMI_MAX_NUM_VCN> vcn_busy;
124126
};
125127

126128
uint32_t current_socket_power = 0;

projects/rocprofiler-systems/source/lib/rocprof-sys/library/pmc/device_providers/amd_smi/drivers/tests/mock_driver.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ class mock_driver
5959
amdsmi_proc_info_t* list));
6060
#endif
6161

62-
// NIC-specific methods
62+
// NIC-specific methods (requires ROCPROFSYS_BUILD_AINIC)
63+
#if defined(ROCPROFSYS_BUILD_AINIC) && ROCPROFSYS_BUILD_AINIC == 1
6364
MOCK_METHOD(amdsmi_status_t, get_nic_asic_info,
6465
(amdsmi_processor_handle processor_handle,
6566
amdsmi_nic_asic_info_t* asic_info));
@@ -72,6 +73,7 @@ class mock_driver
7273
MOCK_METHOD(amdsmi_status_t, get_nic_rdma_port_statistics,
7374
(amdsmi_processor_handle processor_handle, uint8_t rdma_port_idx,
7475
uint32_t* num_stats, amdsmi_nic_stat_t* stats));
76+
#endif
7577

7678
/**
7779
* @brief Set up default mock behaviors for common operations.

0 commit comments

Comments
 (0)