[libc-commits] [libc] 6558e56 - [libc] Update HSA queues to use the maximum size and set the barrier bit (#110034)
via libc-commits
libc-commits at lists.llvm.org
Sat Sep 28 14:49:31 PDT 2024
Author: Joseph Huber
Date: 2024-09-28T16:49:28-05:00
New Revision: 6558e5615ae9e6af6168b0a363808854fd66663f
URL: https://github.com/llvm/llvm-project/commit/6558e5615ae9e6af6168b0a363808854fd66663f
DIFF: https://github.com/llvm/llvm-project/commit/6558e5615ae9e6af6168b0a363808854fd66663f.diff
LOG: [libc] Update HSA queues to use the maximum size and set the barrier bit (#110034)
Summary:
It's safer to use the maximum size, as this prevents the runtime from
oversubscribing with multiple producers. Additionally we should set the
barrier bit to ensure that the queue entries block if multiple are
submitted (Which shouldn't happen for this tool).
Added:
Modified:
libc/utils/gpu/loader/amdgpu/amdhsa-loader.cpp
Removed:
################################################################################
diff --git a/libc/utils/gpu/loader/amdgpu/amdhsa-loader.cpp b/libc/utils/gpu/loader/amdgpu/amdhsa-loader.cpp
index 9ed9d99a60724e..ca13414519d4ca 100644
--- a/libc/utils/gpu/loader/amdgpu/amdhsa-loader.cpp
+++ b/libc/utils/gpu/loader/amdgpu/amdhsa-loader.cpp
@@ -281,6 +281,7 @@ hsa_status_t launch_kernel(hsa_agent_t dev_agent, hsa_executable_t executable,
// Initialize the packet header and set the doorbell signal to begin execution
// by the HSA runtime.
uint16_t header =
+ 1u << HSA_PACKET_HEADER_BARRIER |
(HSA_PACKET_TYPE_KERNEL_DISPATCH << HSA_PACKET_HEADER_TYPE) |
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
@@ -540,11 +541,11 @@ int load(int argc, const char **argv, const char **envp, void *image,
}
}
- // Obtain a queue with the minimum (power of two) size, used to send commands
+ // Obtain a queue with the maximum (power of two) size, used to send commands
// to the HSA runtime and launch execution on the device.
uint64_t queue_size;
if (hsa_status_t err = hsa_agent_get_info(
- dev_agent, HSA_AGENT_INFO_QUEUE_MIN_SIZE, &queue_size))
+ dev_agent, HSA_AGENT_INFO_QUEUE_MAX_SIZE, &queue_size))
handle_error(err);
hsa_queue_t *queue = nullptr;
if (hsa_status_t err =
More information about the libc-commits
mailing list