mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-29 17:13:29 +08:00
Add alignment support to createUnifiedMemoryAllocation
Allows the user to use alignments > 64KB in `createUnifiedMemoryAllocation` So that the restriction in `piextUSMDeviceAlloc` of the DPC++ runtime could be lifted Related-To: LOCI-4168 Signed-off-by: Lu, Wenbin <wenbin.lu@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
282291780d
commit
ca02bbba4b
@@ -181,7 +181,7 @@ void *SVMAllocsManager::createSVMAlloc(size_t size, const SvmAllocationPropertie
|
||||
if (!memoryManager->isLocalMemorySupported(*rootDeviceIndices.begin())) {
|
||||
return createZeroCopySvmAllocation(size, svmProperties, rootDeviceIndices, subdeviceBitfields);
|
||||
} else {
|
||||
UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::NOT_SPECIFIED, rootDeviceIndices, subdeviceBitfields);
|
||||
UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::NOT_SPECIFIED, 1, rootDeviceIndices, subdeviceBitfields);
|
||||
return createUnifiedAllocationWithDeviceStorage(size, svmProperties, unifiedMemoryProperties);
|
||||
}
|
||||
}
|
||||
@@ -241,8 +241,8 @@ void *SVMAllocsManager::createUnifiedMemoryAllocation(size_t size,
|
||||
? memoryProperties.device->getRootDeviceIndex()
|
||||
: *memoryProperties.rootDeviceIndices.begin();
|
||||
DeviceBitfield deviceBitfield = memoryProperties.subdeviceBitfields.at(rootDeviceIndex);
|
||||
size_t pageSizeForAlignment = MemoryConstants::pageSize64k;
|
||||
size_t alignedSize = alignUp<size_t>(size, pageSizeForAlignment);
|
||||
size_t pageSizeForAlignment = alignUp<size_t>(memoryProperties.alignment, MemoryConstants::pageSize64k);
|
||||
size_t alignedSize = alignUp<size_t>(size, MemoryConstants::pageSize64k);
|
||||
|
||||
auto externalPtr = reinterpret_cast<void *>(memoryProperties.allocationFlags.hostptr);
|
||||
bool useExternalHostPtrForCpu = externalPtr != nullptr;
|
||||
@@ -268,6 +268,7 @@ void *SVMAllocsManager::createUnifiedMemoryAllocation(size_t size,
|
||||
false,
|
||||
multiStorageAllocation,
|
||||
deviceBitfield};
|
||||
unifiedMemoryProperties.alignment = pageSizeForAlignment;
|
||||
unifiedMemoryProperties.flags.isUSMDeviceAllocation = false;
|
||||
unifiedMemoryProperties.flags.shareable = memoryProperties.allocationFlags.flags.shareable;
|
||||
unifiedMemoryProperties.cacheRegion = MemoryPropertiesHelper::getCacheRegion(memoryProperties.allocationFlags);
|
||||
|
||||
@@ -114,13 +114,16 @@ class SVMAllocsManager {
|
||||
|
||||
struct UnifiedMemoryProperties {
|
||||
UnifiedMemoryProperties(InternalMemoryType memoryType,
|
||||
size_t alignment,
|
||||
const RootDeviceIndicesContainer &rootDeviceIndices,
|
||||
const std::map<uint32_t, DeviceBitfield> &subdeviceBitfields) : memoryType(memoryType),
|
||||
alignment(alignment),
|
||||
rootDeviceIndices(rootDeviceIndices),
|
||||
subdeviceBitfields(subdeviceBitfields){};
|
||||
InternalMemoryType memoryType = InternalMemoryType::NOT_SPECIFIED;
|
||||
MemoryProperties allocationFlags;
|
||||
Device *device = nullptr;
|
||||
size_t alignment;
|
||||
const RootDeviceIndicesContainer &rootDeviceIndices;
|
||||
const std::map<uint32_t, DeviceBitfield> &subdeviceBitfields;
|
||||
};
|
||||
|
||||
@@ -35,7 +35,7 @@ GraphicsAllocation *allocateGlobalsSurface(NEO::SVMAllocsManager *const svmAlloc
|
||||
rootDeviceIndices.push_back(rootDeviceIndex);
|
||||
std::map<uint32_t, DeviceBitfield> subDeviceBitfields;
|
||||
subDeviceBitfields.insert({rootDeviceIndex, deviceBitfield});
|
||||
NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, rootDeviceIndices, subDeviceBitfields);
|
||||
NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, 1, rootDeviceIndices, subDeviceBitfields);
|
||||
unifiedMemoryProperties.device = &device;
|
||||
auto ptr = svmAllocManager->createUnifiedMemoryAllocation(totalSize, unifiedMemoryProperties);
|
||||
DEBUG_BREAK_IF(ptr == nullptr);
|
||||
|
||||
Reference in New Issue
Block a user