From 2c3faaa3a0d7e678fcc80d6856087e4f7af79309 Mon Sep 17 00:00:00 2001 From: Christophe Paquot Date: Fri, 6 May 2022 17:28:51 -0700 Subject: [PATCH] SWDEV-322620 - Virtual Memory Management Add a virtualMemoryManagement_ flag to device.info. Change-Id: Iabd039010d83fc51b4bcef600c609f5c65e7b1ae [ROCm/clr commit: b4645c7d4e720a637788b24ed9c860a23ee4957a] --- projects/clr/rocclr/device/device.hpp | 2 ++ projects/clr/rocclr/device/pal/paldevice.cpp | 1 + projects/clr/rocclr/device/pal/palresource.cpp | 6 ++++++ projects/clr/rocclr/device/rocm/rocdevice.cpp | 1 + 4 files changed, 10 insertions(+) diff --git a/projects/clr/rocclr/device/device.hpp b/projects/clr/rocclr/device/device.hpp index 12a75592fe..e3818b5c18 100644 --- a/projects/clr/rocclr/device/device.hpp +++ b/projects/clr/rocclr/device/device.hpp @@ -606,6 +606,8 @@ struct Info : public amd::EmbeddedObject { bool aqlBarrierValue_; bool pcie_atomics_; //!< Pcie atomics support flag + + bool virtualMemoryManagement_; //!< Virtual memory management support }; //! Device settings diff --git a/projects/clr/rocclr/device/pal/paldevice.cpp b/projects/clr/rocclr/device/pal/paldevice.cpp index 8e970db7f6..0ad4745d4c 100644 --- a/projects/clr/rocclr/device/pal/paldevice.cpp +++ b/projects/clr/rocclr/device/pal/paldevice.cpp @@ -616,6 +616,7 @@ void NullDevice::fillDeviceInfo(const Pal::DeviceProperties& palProp, ClPrint(amd::LOG_INFO, amd::LOG_INIT, "Resizable bar enabled"); } } + info_.virtualMemoryManagement_ = true; } Device::XferBuffers::~XferBuffers() { diff --git a/projects/clr/rocclr/device/pal/palresource.cpp b/projects/clr/rocclr/device/pal/palresource.cpp index 26c213c976..72526aace7 100644 --- a/projects/clr/rocclr/device/pal/palresource.cpp +++ b/projects/clr/rocclr/device/pal/palresource.cpp @@ -465,6 +465,9 @@ void Resource::memTypeToHeap(Pal::GpuMemoryCreateInfo* createInfo) { createInfo->heaps[2] = Pal::GpuHeapGartUswc; createInfo->flags.peerWritable = dev().P2PAccessAllowed(); break; + case VaRange: + createInfo->heapCount = 0; + break; default: createInfo->heaps[0] = Pal::GpuHeapLocal; break; @@ -1272,6 +1275,9 @@ bool Resource::create(MemoryType memType, CreateParams* params, bool forceLinear memRef_->cpuAddress_ = nullptr; mapCount_++; } + if (memoryType() == VaRange) { + params->owner_->setSvmPtr(reinterpret_cast(memRef_->iMem()->Desc().gpuVirtAddr)); + } return true; } diff --git a/projects/clr/rocclr/device/rocm/rocdevice.cpp b/projects/clr/rocclr/device/rocm/rocdevice.cpp index 0736d671e6..b2391b9509 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.cpp +++ b/projects/clr/rocclr/device/rocm/rocdevice.cpp @@ -1624,6 +1624,7 @@ bool Device::populateOCLDeviceConstants() { info_.hmmSupported_, info_.hmmCpuMemoryAccessible_, info_.hmmDirectHostAccess_); info_.globalCUMask_ = {}; + info_.virtualMemoryManagement_ = false; return true; }