From 1bf70582f0068e19a889a657dab065d4d8f4f3df Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 22 Aug 2018 15:25:01 -0400
Subject: [PATCH] P4 to Git Change 1597023 by vsytchen@vsytchen-win10 on
2018/08/22 15:12:23
SWDEV-159881 - [OCL][ROCm] Add SVM coarse-grain buffer support with device memory
1. Use the system memory pool for coarse grain allocations on APUs
ReviewBoardURL = http://ocltc.amd.com/reviews/r/15671/diff/
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmemory.cpp#39 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#64 edit
---
rocclr/runtime/device/rocm/rocmemory.cpp | 6 ++++--
rocclr/runtime/device/rocm/rocvirtual.cpp | 8 ++++----
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/rocclr/runtime/device/rocm/rocmemory.cpp b/rocclr/runtime/device/rocm/rocmemory.cpp
index 45b57a4ada..f99b19b740 100644
--- a/rocclr/runtime/device/rocm/rocmemory.cpp
+++ b/rocclr/runtime/device/rocm/rocmemory.cpp
@@ -589,7 +589,8 @@ void Buffer::destroy() {
cl_mem_flags memFlags = owner()->getMemFlags();
if (owner()->getSvmPtr() != nullptr) {
- if (dev().forceFineGrain(owner())) {
+ if (dev().forceFineGrain(owner()) ||
+ dev().isFineGrainedSystem(true)) {
memFlags |= CL_MEM_SVM_FINE_GRAIN_BUFFER;
}
const bool isFineGrain = memFlags & CL_MEM_SVM_FINE_GRAIN_BUFFER;
@@ -657,7 +658,8 @@ bool Buffer::create() {
cl_mem_flags memFlags = owner()->getMemFlags();
if (owner()->getSvmPtr() != nullptr) {
- if (dev().forceFineGrain(owner())) {
+ if (dev().forceFineGrain(owner()) ||
+ dev().isFineGrainedSystem(true)) {
memFlags |= CL_MEM_SVM_FINE_GRAIN_BUFFER;
flags_ |= HostMemoryDirectAccess;
}
diff --git a/rocclr/runtime/device/rocm/rocvirtual.cpp b/rocclr/runtime/device/rocm/rocvirtual.cpp
index f57797333d..9525cfc6fe 100644
--- a/rocclr/runtime/device/rocm/rocvirtual.cpp
+++ b/rocclr/runtime/device/rocm/rocvirtual.cpp
@@ -1215,7 +1215,7 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& cmd) {
profilingBegin(cmd);
// no op for FGS supported device
- if (!dev().isFineGrainedSystem()) {
+ if (!dev().isFineGrainedSystem(true)) {
amd::Coord3D srcOrigin(0, 0, 0);
amd::Coord3D dstOrigin(0, 0, 0);
amd::Coord3D size(cmd.srcSize(), 1, 1);
@@ -1374,7 +1374,7 @@ void VirtualGPU::submitSvmMapMemory(amd::SvmMapMemoryCommand& cmd) {
profilingBegin(cmd);
// no op for FGS supported device
- if (!dev().isFineGrainedSystem() &&
+ if (!dev().isFineGrainedSystem(true) &&
!dev().forceFineGrain(cmd.getSvmMem())) {
// Make sure we have memory for the command execution
Memory* memory = dev().getRocMemory(cmd.getSvmMem());
@@ -1410,7 +1410,7 @@ void VirtualGPU::submitSvmUnmapMemory(amd::SvmUnmapMemoryCommand& cmd) {
profilingBegin(cmd);
// no op for FGS supported device
- if (!dev().isFineGrainedSystem() &&
+ if (!dev().isFineGrainedSystem(true) &&
!dev().forceFineGrain(cmd.getSvmMem())) {
Memory* memory = dev().getRocMemory(cmd.getSvmMem());
const device::Memory::WriteMapInfo* writeMapInfo = memory->writeMapInfo(cmd.svmPtr());
@@ -1700,7 +1700,7 @@ void VirtualGPU::submitSvmFillMemory(amd::SvmFillMemoryCommand& cmd) {
amd::Memory* dstMemory = amd::MemObjMap::FindMemObj(cmd.dst());
- if (!dev().isFineGrainedSystem() ||
+ if (!dev().isFineGrainedSystem(true) ||
((dstMemory != nullptr) &&
!dev().forceFineGrain(dstMemory))) {
size_t patternSize = cmd.patternSize();