diff --git a/projects/clr/rocclr/runtime/device/rocm/rocdevice.hpp b/projects/clr/rocclr/runtime/device/rocm/rocdevice.hpp index e3e0ff5c36..b63d772161 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocdevice.hpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocdevice.hpp @@ -408,6 +408,10 @@ class Device : public NullDevice { std::map& QueuePool() { return queue_pool_; } + hsa_amd_memory_pool_t SystemSegment() const { return system_segment_; } + + hsa_amd_memory_pool_t SystemCoarseSegment() const { return system_coarse_segment_; } + private: static hsa_ven_amd_loader_1_00_pfn_t amd_loader_ext_table; diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp b/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp index af6fdc9b8b..7779079c45 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp @@ -831,8 +831,9 @@ bool Buffer::create() { if (owner()->getSvmPtr() != owner()->getHostMem()) { if (memFlags & (CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR)) { - hsa_status_t status = hsa_amd_memory_lock(owner()->getHostMem(), owner()->getSize(), nullptr, - 0, &deviceMemory_); + hsa_amd_memory_pool_t pool = (memFlags & CL_MEM_SVM_ATOMICS)? dev().SystemSegment() : dev().SystemCoarseSegment(); + hsa_status_t status = hsa_amd_memory_lock_to_pool(owner()->getHostMem(), owner()->getSize(), nullptr, + 0, pool, 0, &deviceMemory_); if (status != HSA_STATUS_SUCCESS) { deviceMemory_ = nullptr; }