SWDEV-558080 - Add recommended granularity (#1176)

* Add recommended granularity

* Improve granularity testing

* Update based on feedback
이 커밋은 다음에 포함됨:
AidanBeltonS
2025-11-26 16:10:58 +00:00
커밋한 사람 GitHub
부모 422253f871
커밋 d849b88aef
7개의 변경된 파일과 38개의 추가작업 그리고 55개의 파일을 삭제
+4 -4
파일 보기
@@ -719,10 +719,10 @@ class Graph {
void* ptr;
const auto& dev_info = g_devices[0]->devices()[0]->info();
size = amd::alignUp(size, dev_info.virtualMemAllocGranularity_);
size = amd::alignUp(size, dev_info.virtualMemAllocGranularityRecommended_);
// Single virtual alloc would reserve for all devices.
ptr = g_devices[0]->devices()[0]->virtualAlloc(startAddress, size,
dev_info.virtualMemAllocGranularity_);
dev_info.virtualMemAllocGranularityRecommended_);
if (ptr == nullptr) {
LogError("Failed to reserve Virtual Address");
}
@@ -2412,7 +2412,7 @@ class GraphMemAllocNode final : public GraphNode {
}
// Allocate real memory for mapping
const auto& dev_info = queue()->device().info();
auto aligned_size = amd::alignUp(size_, dev_info.virtualMemAllocGranularity_);
auto aligned_size = amd::alignUp(size_, dev_info.virtualMemAllocGranularityRecommended_);
auto dptr = graph_->AllocateMemory(aligned_size, static_cast<hip::Stream*>(queue()), nullptr);
if (dptr == nullptr) {
setStatus(CL_INVALID_OPERATION);
@@ -2609,7 +2609,7 @@ class GraphMemFreeNode : public GraphNode {
// Unmap virtual address from memory
amd::Command* cmd = new VirtualMemFreeNode(
graph, stream->DeviceId(), *stream, amd::Command::EventWaitList{}, device_ptr_,
amd::alignUp(va->getSize(), dev_info.virtualMemAllocGranularity_), nullptr);
amd::alignUp(va->getSize(), dev_info.virtualMemAllocGranularityRecommended_), nullptr);
commands_.push_back(cmd);
ClPrint(amd::LOG_DETAIL_DEBUG, amd::LOG_MEM_POOL, "Graph FreeMem create: %p", device_ptr_);
}
+6 -2
파일 보기
@@ -60,7 +60,7 @@ hipError_t hipMemAddressReserve(void** ptr, size_t size, size_t alignment, void*
}
const auto& dev_info = g_devices[0]->devices()[0]->info();
if (size == 0 || ((size % dev_info.virtualMemAllocGranularity_) != 0) ||
if (size == 0 || ((size % dev_info.virtualMemAllocGranularityMinimum_) != 0) ||
((alignment & (alignment - 1)) != 0)) {
HIP_RETURN(hipErrorInvalidValue);
}
@@ -228,7 +228,11 @@ hipError_t hipMemGetAllocationGranularity(size_t* granularity, const hipMemAlloc
amd::Context* amdContext = useHostDevice ? hip::host_context : curDevContext;
const auto& dev_info = amdContext->devices()[0]->info();
*granularity = dev_info.virtualMemAllocGranularity_;
if (option == hipMemAllocationGranularityMinimum) {
*granularity = dev_info.virtualMemAllocGranularityMinimum_;
} else {
*granularity = dev_info.virtualMemAllocGranularityRecommended_;
}
HIP_RETURN(hipSuccess);
}