From 5cc172c99cec25072cd7af5df9efcdf59e62a2d0 Mon Sep 17 00:00:00 2001 From: "Andryeyev, German" Date: Wed, 21 May 2025 13:05:42 -0400 Subject: [PATCH] SWDEV-533074 - Expose hipDeviceAttributeNumberOfXccs attribute (#336) --- hipamd/src/hip_device_runtime.cpp | 3 +++ rocclr/device/device.cpp | 2 ++ rocclr/device/device.hpp | 2 ++ rocclr/device/rocm/rocdevice.cpp | 5 +++++ 4 files changed, 12 insertions(+) diff --git a/hipamd/src/hip_device_runtime.cpp b/hipamd/src/hip_device_runtime.cpp index 024807d3a2..3832ea63c0 100644 --- a/hipamd/src/hip_device_runtime.cpp +++ b/hipamd/src/hip_device_runtime.cpp @@ -445,6 +445,9 @@ hipError_t hipDeviceGetAttribute(int* pi, hipDeviceAttribute_t attr, int device) case hipDeviceAttributeAccessPolicyMaxWindowSize: *pi = prop.accessPolicyMaxWindowSize; break; + case hipDeviceAttributeNumberOfXccs: + *pi = static_cast(g_devices[device]->devices()[0]->info().numberOfXccs_); + break; default: HIP_RETURN(hipErrorInvalidValue); } diff --git a/rocclr/device/device.cpp b/rocclr/device/device.cpp index c6290b4417..f1419cc266 100644 --- a/rocclr/device/device.cpp +++ b/rocclr/device/device.cpp @@ -725,6 +725,8 @@ Device::Device() vaCacheMap_(nullptr), index_(0) { memset(&info_, '\0', sizeof(info_)); + // By default consider just 1 xcc per device + info_.numberOfXccs_ = 1; } Device::~Device() { diff --git a/rocclr/device/device.hpp b/rocclr/device/device.hpp index 10fd8e45f0..5b7823c245 100644 --- a/rocclr/device/device.hpp +++ b/rocclr/device/device.hpp @@ -661,6 +661,8 @@ struct Info : public amd::EmbeddedObject { size_t scratchLimitMin; //! Minimum size of scratch limit of this device memory in bytes. size_t scratchLimitMax; //! Maximum size of scratch limit of this device memory in bytes. + + uint32_t numberOfXccs_; //! The number of XCC(s) on the device }; //! Device settings diff --git a/rocclr/device/rocm/rocdevice.cpp b/rocclr/device/rocm/rocdevice.cpp index e617d6df87..4dd66cbcfc 100644 --- a/rocclr/device/rocm/rocdevice.cpp +++ b/rocclr/device/rocm/rocdevice.cpp @@ -1668,6 +1668,11 @@ bool Device::populateOCLDeviceConstants() { LogError("HSA_AMD_AGENT_INFO_SVM_DIRECT_HOST_ACCESS query failed."); } + if (HSA_STATUS_SUCCESS != hsa_agent_get_info(bkendDevice_, + static_cast(HSA_AMD_AGENT_INFO_NUM_XCC), &info_.numberOfXccs_)) { + LogError("HSA_AMD_AGENT_INFO_NUM_XCC query failed."); + } + ClPrint(amd::LOG_INFO, amd::LOG_INIT, "Gfx Major/Minor/Stepping: %d/%d/%d", isa().versionMajor(), isa().versionMinor(), isa().versionStepping()); ClPrint(amd::LOG_INFO, amd::LOG_INIT, "HMM support: %d, XNACK: %d, Direct host access: %d",