Skip to content

Commit

Permalink
[libc] Update HSA queues to use the maximum size and set the barrier …
Browse files Browse the repository at this point in the history
…bit (llvm#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).
  • Loading branch information
jhuber6 authored Sep 28, 2024
1 parent e7621f4 commit 6558e56
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions libc/utils/gpu/loader/amdgpu/amdhsa-loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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 =
Expand Down

0 comments on commit 6558e56

Please sign in to comment.