From 4f46ced61a1c63e509df454ff83e89934d246c62 Mon Sep 17 00:00:00 2001 From: foreman Date: Tue, 24 Jul 2018 19:14:26 -0400 Subject: [PATCH] P4 to Git Change 1584936 by vsytchen@vsytchen-win10 on 2018/07/24 18:57:28 SWDEV-79445 - OCL generic changes and code clean-up 1. In SvmCopyMemoryCommand handle the case when both src and dst pointer don't belong to the SVM space. ReviewBoardURL = http://ocltc.amd.com/reviews/r/15481/diff/ Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#424 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palvirtual.cpp#117 edit [ROCm/clr commit: ebe91eeace9c031ad251cc5850ed522bcf94b8ad] --- projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp | 7 +++++-- projects/clr/rocclr/runtime/device/pal/palvirtual.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp b/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp index 0ca26abbce..21fd4e43e3 100644 --- a/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp +++ b/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp @@ -964,7 +964,10 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) { } } - if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space + if (nullptr == srcMem && nullptr == dstMem) { // both not in svm space + amd::Os::fastMemcpy(vcmd.dst(), vcmd.src(), vcmd.srcSize()); + result = true; + } else if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space Memory* memory = dev().getGpuMemory(dstMem); // Synchronize source and destination memory syncFlags.skipEntire_ = dstMem->isEntirelyCovered(dstOrigin, size); @@ -981,7 +984,7 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) { result = blitMgr().readBuffer(*memory, vcmd.dst(), srcOrigin, size, srcMem->isEntirelyCovered(srcOrigin, size)); - } else if (nullptr != srcMem && nullptr != dstMem) { // both not in svm space + } else if (nullptr != srcMem && nullptr != dstMem) { // both in svm space bool entire = srcMem->isEntirelyCovered(srcOrigin, size) && dstMem->isEntirelyCovered(dstOrigin, size); result = diff --git a/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp b/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp index 78a96fb2e2..0dfd42971e 100644 --- a/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp +++ b/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp @@ -1388,7 +1388,10 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) { } } - if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space + if (nullptr == srcMem && nullptr == dstMem) { // both not in svm space + amd::Os::fastMemcpy(vcmd.dst(), vcmd.src(), vcmd.srcSize()); + result = true; + } else if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space Memory* memory = dev().getGpuMemory(dstMem); // Synchronize source and destination memory syncFlags.skipEntire_ = dstMem->isEntirelyCovered(dstOrigin, size); @@ -1405,7 +1408,7 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) { result = blitMgr().readBuffer(*memory, vcmd.dst(), srcOrigin, size, srcMem->isEntirelyCovered(srcOrigin, size)); - } else if (nullptr != srcMem && nullptr != dstMem) { // both not in svm space + } else if (nullptr != srcMem && nullptr != dstMem) { // both in svm space bool entire = srcMem->isEntirelyCovered(srcOrigin, size) && dstMem->isEntirelyCovered(dstOrigin, size); result =