From 9523d68e19c3fc39d89d8a394ed155631fd8f194 Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 4 Jul 2018 15:45:29 -0400
Subject: [PATCH] P4 to Git Change 1576208 by vsytchen@vsytchen-win10 on
2018/07/04 15:36:47
SWDEV-154903 - [Vega10][PAL] clSVMAlloc is failing to create allocations greater than 2GB
1. Uncommit coarse grain SVM from system memory when calling clEnqueueSVMUnmap
ReviewBoardURL = http://ocltc.amd.com/reviews/r/15336/diff/
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpumemory.cpp#133 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palmemory.cpp#22 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/memory.cpp#133 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/memory.hpp#106 edit
[ROCm/clr commit: 0bc34b7062942d83b1554489de865467b1f9e60a]
---
projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp | 4 ++++
projects/clr/rocclr/runtime/device/pal/palmemory.cpp | 4 ++++
projects/clr/rocclr/runtime/platform/memory.cpp | 8 ++++++++
projects/clr/rocclr/runtime/platform/memory.hpp | 1 +
4 files changed, 17 insertions(+)
diff --git a/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp b/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp
index 7676a00a19..d1993feced 100644
--- a/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp
+++ b/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp
@@ -411,6 +411,10 @@ Memory::~Memory() {
// Release associated map target, if any
if (NULL != mapMemory_) {
+ if (owner()->getSvmPtr() != nullptr) {
+ owner()->uncommitSvmMemory();
+ }
+
mapMemory()->unmap(NULL);
mapMemory_->release();
}
diff --git a/projects/clr/rocclr/runtime/device/pal/palmemory.cpp b/projects/clr/rocclr/runtime/device/pal/palmemory.cpp
index fcf2650b64..e1daa09537 100644
--- a/projects/clr/rocclr/runtime/device/pal/palmemory.cpp
+++ b/projects/clr/rocclr/runtime/device/pal/palmemory.cpp
@@ -385,6 +385,10 @@ Memory::~Memory() {
// Release associated map target, if any
if (nullptr != mapMemory_) {
+ if (owner()->getSvmPtr() != nullptr) {
+ owner()->uncommitSvmMemory();
+ }
+
mapMemory()->unmap(nullptr);
mapMemory_->release();
}
diff --git a/projects/clr/rocclr/runtime/platform/memory.cpp b/projects/clr/rocclr/runtime/platform/memory.cpp
index 2f00dd8f08..194169d48a 100644
--- a/projects/clr/rocclr/runtime/platform/memory.cpp
+++ b/projects/clr/rocclr/runtime/platform/memory.cpp
@@ -431,6 +431,14 @@ void Memory::commitSvmMemory() {
}
}
+void Memory::uncommitSvmMemory() {
+ ScopedLock lock(lockMemoryOps_);
+ if (svmPtrCommited_ && !(flags_ & CL_MEM_SVM_FINE_GRAIN_BUFFER)) {
+ amd::Os::uncommitMemory(svmHostAddress_, size_);
+ svmPtrCommited_ = false;
+ }
+}
+
void Buffer::initDeviceMemory() {
deviceMemories_ = reinterpret_cast(reinterpret_cast(this) + sizeof(Buffer));
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
diff --git a/projects/clr/rocclr/runtime/platform/memory.hpp b/projects/clr/rocclr/runtime/platform/memory.hpp
index 7648cd6e38..5f151508b7 100644
--- a/projects/clr/rocclr/runtime/platform/memory.hpp
+++ b/projects/clr/rocclr/runtime/platform/memory.hpp
@@ -306,6 +306,7 @@ class Memory : public amd::RuntimeObject {
return svmPtrCommited_;
} //!< svm host address committed accessor;
void commitSvmMemory(); //!< svm host address committed accessor;
+ void uncommitSvmMemory();
void setCacheStatus(bool canBeCached) {
canBeCached_ = canBeCached;
} //!< set the memobject cached status;