SWDEV-564318 - Add support for allocating uncached device memory (#1670)

This commit is contained in:
Victor Zhang
2025-11-09 12:51:41 -05:00
committed by GitHub
parent 99cab3500d
commit 7580052878
4 changed files with 7 additions and 2 deletions
+1 -1
View File
@@ -732,7 +732,7 @@ hipError_t hipExtMallocWithFlags(void** ptr, size_t sizeBytes, unsigned int flag
} else if (flags == hipDeviceMallocFinegrained) {
ihipFlags = CL_MEM_SVM_ATOMICS;
} else if (flags == hipDeviceMallocUncached) {
ihipFlags = CL_MEM_SVM_ATOMICS | ROCCLR_MEM_HSA_UNCACHED;
ihipFlags = ROCCLR_MEM_HSA_UNCACHED;
} else if (flags == hipDeviceMallocContiguous) {
ihipFlags = ROCCLR_MEM_HSA_CONTIGUOUS | ROCCLR_MEM_HSA_UNCACHED;
} else if (flags == hipMallocSignalMemory) {
+2 -1
View File
@@ -1814,7 +1814,8 @@ class Device : public RuntimeObject {
uint32_t pseudo_fine_grain_ : 1; //!< True if pseudo fine grain memory is required
uint32_t contiguous_ : 1; //!< True if contiguous memory allocation is required
uint32_t executable_ : 1; //!< True if executable memory is required
uint32_t reserved_ : 28; //!< Reserved for future use
uint32_t uncached_ : 1; //!< True if uncached memory is required
uint32_t reserved_ : 27; //!< Reserved for future use
};
uint32_t data_;
} AllocationFlags;
@@ -2176,6 +2176,9 @@ void* Device::deviceLocalAlloc(size_t size, const AllocationFlags& flags) const
if (flags.executable_) {
hsa_mem_flags |= HSA_AMD_MEMORY_POOL_EXECUTABLE_FLAG;
}
if (flags.uncached_ && isa().versionMajor() == 12) {
hsa_mem_flags |= HSA_AMD_MEMORY_POOL_UNCACHED_FLAG;
}
void* ptr = nullptr;
hsa_status_t stat = Hsa::memory_pool_allocate(pool, size, hsa_mem_flags, &ptr);
@@ -852,6 +852,7 @@ bool Buffer::create(bool alloc_local) {
flags.atomics_ = (memFlags & CL_MEM_SVM_ATOMICS) != 0;
flags.pseudo_fine_grain_ = (memFlags & ROCCLR_MEM_HSA_UNCACHED) != 0;
flags.contiguous_ = (memFlags & ROCCLR_MEM_HSA_CONTIGUOUS) != 0;
flags.uncached_ = (memFlags & ROCCLR_MEM_HSA_UNCACHED) != 0;
deviceMemory_ = dev().deviceLocalAlloc(size(), flags);
}
owner()->setSvmPtr(deviceMemory_);