From c07677f99de30d312ba06d1645848e25bf74ff02 Mon Sep 17 00:00:00 2001 From: German Andryeyev Date: Thu, 2 Apr 2020 10:35:55 -0400 Subject: [PATCH] SWDEV-79445 - HIP improvement - Make sure only one GPU barrier is issued per dispatch when memory tracking is disabled Change-Id: I974569ab42a8835304a2930eef87b561a3750327 [ROCm/clr commit: 481cecec784f38477b4381154034d79f362d45b9] --- projects/clr/rocclr/device/pal/palvirtual.cpp | 6 ++++-- projects/clr/rocclr/device/pal/palvirtual.hpp | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/projects/clr/rocclr/device/pal/palvirtual.cpp b/projects/clr/rocclr/device/pal/palvirtual.cpp index 111a9f31df..0a4e1d3a52 100644 --- a/projects/clr/rocclr/device/pal/palvirtual.cpp +++ b/projects/clr/rocclr/device/pal/palvirtual.cpp @@ -563,8 +563,7 @@ void VirtualGPU::MemoryDependency::validate(VirtualGPU& gpu, const Memory* memor bool flushL1Cache = false; if (maxMemObjectsInQueue_ == 0) { - // Flush cache - gpu.addBarrier(RgpSqqtBarrierReason::MemDependency); + // Return earlier if tracking is disabled return; } @@ -3549,6 +3548,9 @@ bool VirtualGPU::processMemObjectsHSA(const amd::Kernel& kernel, const_address p addVmMemory(scratch->memObj_); } + // Synchronize dispatches unconditionally in case memory tracking is disabled + memoryDependency().sync(*this); + return true; } diff --git a/projects/clr/rocclr/device/pal/palvirtual.hpp b/projects/clr/rocclr/device/pal/palvirtual.hpp index 943098d986..ac417da4c8 100644 --- a/projects/clr/rocclr/device/pal/palvirtual.hpp +++ b/projects/clr/rocclr/device/pal/palvirtual.hpp @@ -251,6 +251,13 @@ class VirtualGPU : public device::VirtualDevice { //! Validates memory object on dependency void validate(VirtualGPU& gpu, const Memory* memory, bool readOnly); + //! Invalidates GPU caches if memory dependency tracking is disabled + void sync(VirtualGPU& gpu) const { + if (maxMemObjectsInQueue_ == 0) { + gpu.addBarrier(RgpSqqtBarrierReason::MemDependency); + } + } + //! Clear memory dependency void clear(bool all = true);