From ec0971dd0848825002ca6b3c2abf34f197bb5b75 Mon Sep 17 00:00:00 2001 From: Ajay Date: Wed, 31 Jul 2024 14:22:31 -0700 Subject: [PATCH] SWDEV-471863 - APU: device allocation greater than invisible memory Change-Id: I37f1769873ac7dcbb3cfa51fd815ee1e2123aeae --- rocclr/device/pal/paldevice.hpp | 4 ++++ rocclr/device/pal/palmemory.cpp | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/rocclr/device/pal/paldevice.hpp b/rocclr/device/pal/paldevice.hpp index feaf4429b0..d6f0c31506 100644 --- a/rocclr/device/pal/paldevice.hpp +++ b/rocclr/device/pal/paldevice.hpp @@ -670,6 +670,10 @@ class Device : public NullDevice { //! Allocates hidden heap for device memory allocations void HiddenHeapAlloc(const VirtualGPU& gpu); + const Pal::GpuMemoryHeapProperties& GetGpuHeapInvisible() const { + return heaps_[Pal::GpuHeapInvisible]; + } + private: static void PAL_STDCALL PalDeveloperCallback(void* pPrivateData, const Pal::uint32 deviceIndex, Pal::Developer::CallbackType type, void* pCbData); diff --git a/rocclr/device/pal/palmemory.cpp b/rocclr/device/pal/palmemory.cpp index fc81190fa4..9acc76c5dc 100644 --- a/rocclr/device/pal/palmemory.cpp +++ b/rocclr/device/pal/palmemory.cpp @@ -120,6 +120,11 @@ bool Memory::create(Resource::MemoryType memType, Resource::CreateParams* params // if requested memory is greater than available then exit the loop dev().globalFreeMemory(freeMemory); + const Pal::GpuMemoryHeapProperties invisibleHeap = dev().GetGpuHeapInvisible(); + if (dev().settings().apuSystem_ && (size() > (invisibleHeap.logicalSize * 2))) { + memType = RemoteUSWC; + break; + } // Local to Persistent if (memoryType() == Local) { // For dgpu freeMemory[0] reports a sum of visible+invisible fb