mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 01:04:57 +08:00
Allocate per-context memory with specific GPU VA
Related-To: NEO-4829 Change-Id: I821f6709bfa98df3b51a1c966b7a953752d85f74 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
1f63f39d77
commit
fea4472553
@@ -35,6 +35,8 @@ struct AllocationProperties {
|
||||
ImageInfo *imgInfo = nullptr;
|
||||
bool multiStorageResource = false;
|
||||
DeviceBitfield subDevicesBitfield{};
|
||||
uint64_t gpuAddress = 0;
|
||||
OsContext *osContext = nullptr;
|
||||
|
||||
AllocationProperties(uint32_t rootDeviceIndex, size_t size,
|
||||
GraphicsAllocation::AllocationType allocationType)
|
||||
@@ -102,10 +104,12 @@ struct AllocationData {
|
||||
static_assert(sizeof(AllocationData::flags) == sizeof(AllocationData::allFlags), "");
|
||||
GraphicsAllocation::AllocationType type = GraphicsAllocation::AllocationType::UNKNOWN;
|
||||
const void *hostPtr = nullptr;
|
||||
uint64_t gpuAddress = 0;
|
||||
size_t size = 0;
|
||||
size_t alignment = 0;
|
||||
StorageInfo storageInfo = {};
|
||||
ImageInfo *imgInfo = nullptr;
|
||||
uint32_t rootDeviceIndex = 0;
|
||||
OsContext *osContext = nullptr;
|
||||
};
|
||||
} // namespace NEO
|
||||
|
||||
@@ -351,6 +351,8 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo
|
||||
allocationData.hostPtr = nullptr;
|
||||
}
|
||||
|
||||
allocationData.gpuAddress = properties.gpuAddress;
|
||||
allocationData.osContext = properties.osContext;
|
||||
allocationData.rootDeviceIndex = properties.rootDeviceIndex;
|
||||
|
||||
auto hwInfo = executionEnvironment.rootDeviceEnvironments[properties.rootDeviceIndex]->getHardwareInfo();
|
||||
@@ -406,6 +408,9 @@ GraphicsAllocation *MemoryManager::allocateGraphicsMemory(const AllocationData &
|
||||
if (allocationData.hostPtr) {
|
||||
return allocateGraphicsMemoryWithHostPtr(allocationData);
|
||||
}
|
||||
if (allocationData.gpuAddress) {
|
||||
return allocateGraphicsMemoryWithGpuVa(allocationData);
|
||||
}
|
||||
if (peek64kbPagesEnabled(allocationData.rootDeviceIndex) && allocationData.flags.allow64kbPages) {
|
||||
return allocateGraphicsMemory64kb(allocationData);
|
||||
}
|
||||
|
||||
@@ -41,6 +41,11 @@ struct AlignedMallocRestrictions {
|
||||
uintptr_t minAddress;
|
||||
};
|
||||
|
||||
struct AddressRange {
|
||||
uint64_t address;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
constexpr size_t paddingBufferSize = 2 * MemoryConstants::megaByte;
|
||||
|
||||
class MemoryManager {
|
||||
@@ -162,6 +167,8 @@ class MemoryManager {
|
||||
virtual void releaseReservedCpuAddressRange(void *reserved, size_t size, uint32_t rootDeviceIndex){};
|
||||
void *getReservedMemory(size_t size, size_t alignment);
|
||||
GfxPartition *getGfxPartition(uint32_t rootDeviceIndex) { return gfxPartitions.at(rootDeviceIndex).get(); }
|
||||
virtual AddressRange reserveGpuAddress(size_t size, uint32_t rootDeviceIndex) { return AddressRange{0, 0}; };
|
||||
virtual void freeGpuAddress(AddressRange addressRange, uint32_t rootDeviceIndex) { return; };
|
||||
static HeapIndex selectInternalHeap(bool useLocalMemory) { return useLocalMemory ? HeapIndex::HEAP_INTERNAL_DEVICE_MEMORY : HeapIndex::HEAP_INTERNAL; }
|
||||
static HeapIndex selectExternalHeap(bool useLocalMemory) { return useLocalMemory ? HeapIndex::HEAP_EXTERNAL_DEVICE_MEMORY : HeapIndex::HEAP_EXTERNAL; }
|
||||
|
||||
@@ -190,6 +197,8 @@ class MemoryManager {
|
||||
virtual GraphicsAllocation *allocateGraphicsMemory64kb(const AllocationData &allocationData) = 0;
|
||||
virtual GraphicsAllocation *allocate32BitGraphicsMemoryImpl(const AllocationData &allocationData, bool useLocalMemory) = 0;
|
||||
virtual GraphicsAllocation *allocateGraphicsMemoryInDevicePool(const AllocationData &allocationData, AllocationStatus &status) = 0;
|
||||
virtual GraphicsAllocation *allocateGraphicsMemoryWithGpuVa(const AllocationData &allocationData) { return nullptr; }
|
||||
|
||||
GraphicsAllocation *allocateGraphicsMemoryForImageFromHostPtr(const AllocationData &allocationData);
|
||||
MOCKABLE_VIRTUAL GraphicsAllocation *allocateGraphicsMemoryForImage(const AllocationData &allocationData);
|
||||
virtual GraphicsAllocation *allocateGraphicsMemoryForImageImpl(const AllocationData &allocationData, std::unique_ptr<Gmm> gmm) = 0;
|
||||
|
||||
Reference in New Issue
Block a user