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