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();