diff --git a/projects/clr/rocclr/device/rocm/rocvirtual.cpp b/projects/clr/rocclr/device/rocm/rocvirtual.cpp index cb2702c057..a72acca5c1 100644 --- a/projects/clr/rocclr/device/rocm/rocvirtual.cpp +++ b/projects/clr/rocclr/device/rocm/rocvirtual.cpp @@ -2305,9 +2305,16 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const dispatchPacket.group_segment_size = ldsUsage + sharedMemBytes; dispatchPacket.private_segment_size = devKernel->workGroupInfo()->privateMemSize_; + // Pass the header accordingly + auto aqlHeaderWithOrder = aqlHeader_; + if (vcmd != nullptr && vcmd->getAnyOrderLaunchFlag()) { + constexpr uint32_t kAqlHeaderMask = ~(1 << HSA_PACKET_HEADER_BARRIER); + aqlHeaderWithOrder &= kAqlHeaderMask; + } + // Dispatch the packet if (!dispatchAqlPacket( - &dispatchPacket, aqlHeader_, + &dispatchPacket, aqlHeaderWithOrder, (sizes.dimensions() << HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS), GPU_FLUSH_ON_EXECUTION)) { return false; @@ -2406,7 +2413,7 @@ void VirtualGPU::submitKernel(amd::NDRangeKernelCommand& vcmd) { // Submit kernel to HW if (!submitKernelInternal(vcmd.sizes(), vcmd.kernel(), vcmd.parameters(), - static_cast(as_cl(&vcmd.event())), vcmd.sharedMemBytes())) { + static_cast(as_cl(&vcmd.event())), vcmd.sharedMemBytes(), &vcmd)) { LogError("AQL dispatch failed!"); vcmd.setStatus(CL_INVALID_OPERATION); } diff --git a/projects/clr/rocclr/platform/command.hpp b/projects/clr/rocclr/platform/command.hpp index 8342151b2f..2816654633 100644 --- a/projects/clr/rocclr/platform/command.hpp +++ b/projects/clr/rocclr/platform/command.hpp @@ -794,6 +794,7 @@ class NDRangeKernelCommand : public Command { enum { CooperativeGroups = 0x01, CooperativeMultiDeviceGroups = 0x02, + AnyOrderLaunch = 0x04, }; //! Construct an ExecuteKernel command @@ -827,6 +828,9 @@ class NDRangeKernelCommand : public Command { return (extraParam_ & CooperativeMultiDeviceGroups) ? true : false; } + //! Returns extra Param, set when using anyorder launch + bool getAnyOrderLaunchFlag() const { return (extraParam_ & AnyOrderLaunch) ? true : false; } + //! Return the current grid ID for multidevice launch uint32_t gridId() const { return gridId_; }