Add support for USM shared in WSL for dGPU

This patch force KMD allocation path for USM shared

Related-To: NEO-6913
Signed-off-by: Kamil Diedrich kamil.diedrich@intel.com
This commit is contained in:
Kamil Diedrich
2022-11-14 10:25:07 +00:00
committed by Compute-Runtime-Automation
parent f27dcbfb85
commit b0c97e49ea
7 changed files with 158 additions and 3 deletions

View File

@@ -11,6 +11,7 @@
namespace NEO {
struct ImageInfo;
struct AllocationProperties {
union {
struct {
@@ -40,6 +41,8 @@ struct AllocationProperties {
AllocationType allocationType = AllocationType::UNKNOWN;
GraphicsAllocation::UsmInitialPlacement usmInitialPlacement = GraphicsAllocation::UsmInitialPlacement::DEFAULT;
ImageInfo *imgInfo = nullptr;
bool forceKMDAllocation = false;
bool makeGPUVaDifferentThanCPUPtr = false;
bool multiStorageResource = false;
ColouringPolicy colouringPolicy = ColouringPolicy::DeviceCountBased;
size_t colouringGranularity = MemoryConstants::pageSize64k;
@@ -122,6 +125,8 @@ struct AllocationData {
size_t alignment = 0;
StorageInfo storageInfo = {};
ImageInfo *imgInfo = nullptr;
bool forceKMDAllocation = false;
bool makeGPUVaDifferentThanCPUPtr = false;
uint32_t rootDeviceIndex = 0;
OsContext *osContext = nullptr;
bool useMmapObject = true;

View File

@@ -447,6 +447,8 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo
allocationData.storageInfo = storageInfo;
allocationData.alignment = properties.alignment ? properties.alignment : MemoryConstants::preferredAlignment;
allocationData.imgInfo = properties.imgInfo;
allocationData.forceKMDAllocation = properties.forceKMDAllocation;
allocationData.makeGPUVaDifferentThanCPUPtr = properties.makeGPUVaDifferentThanCPUPtr;
if (allocationData.flags.allocateMemory) {
allocationData.hostPtr = nullptr;

View File

@@ -493,9 +493,12 @@ void *SVMAllocsManager::createUnifiedAllocationWithDeviceStorage(size_t size, co
subDevices};
cpuProperties.alignment = MemoryConstants::pageSize2Mb;
cpuProperties.flags.isUSMHostAllocation = useExternalHostPtrForCpu;
cpuProperties.forceKMDAllocation = true;
cpuProperties.makeGPUVaDifferentThanCPUPtr = true;
auto cacheRegion = MemoryPropertiesHelper::getCacheRegion(unifiedMemoryProperties.allocationFlags);
MemoryPropertiesHelper::fillCachePolicyInProperties(cpuProperties, false, svmProperties.readOnly, false, cacheRegion);
GraphicsAllocation *allocationCpu = memoryManager->allocateGraphicsMemoryWithProperties(cpuProperties, externalPtr);
if (!allocationCpu) {
return nullptr;
}