SWDEV-558080 - Add recommended granularity (#1176)
* Add recommended granularity * Improve granularity testing * Update based on feedback
이 커밋은 다음에 포함됨:
@@ -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_);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
새 이슈에서 참조
사용자 차단