diff --git a/projects/clr/hipamd/src/hip_device_runtime.cpp b/projects/clr/hipamd/src/hip_device_runtime.cpp index 024807d3a2..3832ea63c0 100644 --- a/projects/clr/hipamd/src/hip_device_runtime.cpp +++ b/projects/clr/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/projects/clr/rocclr/device/device.cpp b/projects/clr/rocclr/device/device.cpp index c6290b4417..f1419cc266 100644 --- a/projects/clr/rocclr/device/device.cpp +++ b/projects/clr/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/projects/clr/rocclr/device/device.hpp b/projects/clr/rocclr/device/device.hpp index 10fd8e45f0..5b7823c245 100644 --- a/projects/clr/rocclr/device/device.hpp +++ b/projects/clr/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/projects/clr/rocclr/device/rocm/rocdevice.cpp b/projects/clr/rocclr/device/rocm/rocdevice.cpp index e617d6df87..4dd66cbcfc 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.cpp +++ b/projects/clr/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",