fix: bcs enqueue after marker properly waits

For an example sequence of:
IOQ_1 -> enqueue copy, enqueue marker with waitlist (out event)
IOQ_2 -> enqueue marker with waitlist (event), enqueue copy

Add missing synchronization between the enqueue copies

Related-To: NEO-11694

Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
Dominik Dabek
2024-07-11 08:48:10 +00:00
committed by Compute-Runtime-Automation
parent 05eb4e7a0d
commit bdeccab7aa
3 changed files with 102 additions and 5 deletions

View File

@@ -209,10 +209,22 @@ bool CommandQueueHw<Family>::isGpgpuSubmissionForBcsRequired(bool queueBlocked,
if (queueBlocked || timestampPacketDependencies.barrierNodes.peekNodes().size() > 0u) {
return true;
}
bool required = (latestSentEnqueueType != EnqueueProperties::Operation::blit) &&
(latestSentEnqueueType != EnqueueProperties::Operation::none) &&
(isCacheFlushForBcsRequired() || !(getGpgpuCommandStreamReceiver().getDispatchMode() == DispatchMode::immediateDispatch || getGpgpuCommandStreamReceiver().isLatestTaskCountFlushed()));
bool required = false;
switch (latestSentEnqueueType) {
case NEO::EnqueueProperties::Operation::explicitCacheFlush:
case NEO::EnqueueProperties::Operation::enqueueWithoutSubmission:
case NEO::EnqueueProperties::Operation::gpuKernel:
case NEO::EnqueueProperties::Operation::profilingOnly:
required = isCacheFlushForBcsRequired() || !(getGpgpuCommandStreamReceiver().getDispatchMode() == DispatchMode::immediateDispatch || getGpgpuCommandStreamReceiver().isLatestTaskCountFlushed());
break;
case NEO::EnqueueProperties::Operation::dependencyResolveOnGpu:
return true;
break;
case NEO::EnqueueProperties::Operation::none:
case NEO::EnqueueProperties::Operation::blit:
default:
break;
}
if (debugManager.flags.ForceGpgpuSubmissionForBcsEnqueue.get() == 1) {
required = true;