diff --git a/projects/clr/rocclr/device/device.hpp b/projects/clr/rocclr/device/device.hpp index adb2aaf7d3..71721689eb 100644 --- a/projects/clr/rocclr/device/device.hpp +++ b/projects/clr/rocclr/device/device.hpp @@ -1751,6 +1751,9 @@ class Device : public RuntimeObject { virtual const uint32_t getPreferredNumaNode() const { return 0; } virtual void ReleaseGlobalSignal(void* signal) const {} + virtual const bool isFineGrainSupported() const { + return (info().svmCapabilities_ & CL_DEVICE_SVM_ATOMICS) != 0 ? true : false; + } //! Returns TRUE if the device is available for computations bool isOnline() const { return online_; } diff --git a/projects/clr/rocclr/device/rocm/rocdevice.cpp b/projects/clr/rocclr/device/rocm/rocdevice.cpp index 31336e9447..5591ef9d32 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.cpp +++ b/projects/clr/rocclr/device/rocm/rocdevice.cpp @@ -1064,6 +1064,15 @@ Memory* Device::getGpuMemory(amd::Memory* mem) const { return static_cast(mem->getDeviceMemory(*this)); } +const bool Device::isFineGrainSupported() const { + bool result = (info().svmCapabilities_ & CL_DEVICE_SVM_ATOMICS) != 0 ? true : false; + if (result) { + if (gpu_fine_grained_segment_.handle != 0) { + return true; + } + } + return false; +} // ================================================================================================ bool Device::populateOCLDeviceConstants() { info_.available_ = true; diff --git a/projects/clr/rocclr/device/rocm/rocdevice.hpp b/projects/clr/rocclr/device/rocm/rocdevice.hpp index 07e461ab13..cbaa952ee7 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.hpp +++ b/projects/clr/rocclr/device/rocm/rocdevice.hpp @@ -540,6 +540,7 @@ class Device : public NullDevice { virtual amd::Memory* GetArenaMemObj(const void* ptr, size_t& offset); const uint32_t getPreferredNumaNode() const { return preferred_numa_node_; } + const bool isFineGrainSupported() const; private: bool create();