From 6b9ede7d2611eb455c3808ab809ea8e4f6a4e615 Mon Sep 17 00:00:00 2001
From: foreman
Date: Thu, 29 Aug 2019 17:35:38 -0400
Subject: [PATCH] P4 to Git Change 1991227 by cpaquot@cpaquot-ocl-lc-lnx on
2019/08/29 17:26:37
SWDEV-193938 - [HIP] Use fine grained pool for hipHostRegister
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/hip/hip_memory.cpp#69 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocdevice.hpp#40 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmemory.cpp#43 edit
[ROCm/clr commit: b6f298d3f0207cc164885529a3c344f37ad77434]
---
projects/clr/rocclr/runtime/device/rocm/rocdevice.hpp | 4 ++++
projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp | 5 +++--
2 files changed, 7 insertions(+), 2 deletions(-)
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;
}