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