SWDEV-548770 - Added system scope acquire for all packets in gfx12 (#966)

Tento commit je obsažen v:
Ioannis Assiouras
2025-09-18 14:33:17 +01:00
odevzdal GitHub
rodič 45b48fb987
revize 5ac163a811
+23 -15
Zobrazit soubor
@@ -1431,24 +1431,32 @@ VirtualGPU::VirtualGPU(Device& device, bool profiling, bool cooperative,
profiling_ = profiling;
cooperative_ = cooperative;
constexpr uint16_t kernelDispatchHBits =
(HSA_PACKET_TYPE_KERNEL_DISPATCH << HSA_PACKET_HEADER_TYPE);
constexpr uint16_t barrierHBits = (1 << HSA_PACKET_HEADER_BARRIER);
constexpr uint16_t agentScopeHBits =
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
constexpr uint16_t systemScopeHBits =
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
// acquire=SYSTEM, release=AGENT (needed for GFX12)
constexpr uint16_t sysAcquireAgentReleaseHBits =
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
if (device.settings().fenceScopeAgent_) {
const auto& isa = device.isa();
const bool isGfx12 = (isa.versionMajor() == 12) && (isa.versionMinor() == 0) &&
(isa.versionStepping() == 0 || isa.versionStepping() == 1);
dispatchPacketHeaderNoSync_ =
(HSA_PACKET_TYPE_KERNEL_DISPATCH << HSA_PACKET_HEADER_TYPE) |
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
dispatchPacketHeader_ = (HSA_PACKET_TYPE_KERNEL_DISPATCH << HSA_PACKET_HEADER_TYPE) |
(1 << HSA_PACKET_HEADER_BARRIER) |
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
(kernelDispatchHBits | (isGfx12 ? sysAcquireAgentReleaseHBits : agentScopeHBits));
dispatchPacketHeader_ = (kernelDispatchHBits | barrierHBits |
(isGfx12 ? sysAcquireAgentReleaseHBits : agentScopeHBits));
} else {
dispatchPacketHeaderNoSync_ =
(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);
dispatchPacketHeader_ = (HSA_PACKET_TYPE_KERNEL_DISPATCH << HSA_PACKET_HEADER_TYPE) |
(1 << HSA_PACKET_HEADER_BARRIER) |
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE) |
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE);
dispatchPacketHeaderNoSync_ = (kernelDispatchHBits | systemScopeHBits);
dispatchPacketHeader_ = (kernelDispatchHBits | barrierHBits | systemScopeHBits);
}
aqlHeader_ = dispatchPacketHeader_;