@@ -492,7 +492,19 @@ event handler::finalize() {
492
492
// creation.
493
493
std::vector<ur_event_handle_t > RawEvents =
494
494
detail::Command::getUrEvents (impl->CGData .MEvents , MQueue, false );
495
- detail::EventImplPtr NewEvent;
495
+ const detail::EventImplPtr &LastEventImpl =
496
+ detail::getSyclObjImpl (MLastEvent);
497
+
498
+ bool DiscardEvent = (MQueue->MDiscardEvents || !impl->MEventNeeded ) &&
499
+ MQueue->supportsDiscardingPiEvents ();
500
+ if (DiscardEvent) {
501
+ // Kernel only uses assert if it's non interop one
502
+ bool KernelUsesAssert =
503
+ !(MKernel && MKernel->isInterop ()) &&
504
+ detail::ProgramManager::getInstance ().kernelUsesAssert (
505
+ MKernelName.c_str ());
506
+ DiscardEvent = !KernelUsesAssert;
507
+ }
496
508
497
509
#ifdef XPTI_ENABLE_INSTRUMENTATION
498
510
// uint32_t StreamID, uint64_t InstanceID, xpti_td* TraceEvent,
@@ -515,53 +527,41 @@ event handler::finalize() {
515
527
detail::retrieveKernelBinary (MQueue, MKernelName.c_str ());
516
528
assert (BinImage && " Failed to obtain a binary image." );
517
529
}
518
- enqueueImpKernel (MQueue, impl->MNDRDesc , impl->MArgs ,
519
- KernelBundleImpPtr, MKernel, MKernelName.c_str (),
520
- RawEvents, NewEvent, nullptr , impl->MKernelCacheConfig ,
521
- impl->MKernelIsCooperative ,
522
- impl->MKernelUsesClusterLaunch ,
523
- impl->MKernelWorkGroupMemorySize , BinImage);
530
+ enqueueImpKernel (
531
+ MQueue, impl->MNDRDesc , impl->MArgs , KernelBundleImpPtr, MKernel,
532
+ MKernelName.c_str (), RawEvents,
533
+ DiscardEvent ? detail::EventImplPtr{} : LastEventImpl, nullptr ,
534
+ impl->MKernelCacheConfig , impl->MKernelIsCooperative ,
535
+ impl->MKernelUsesClusterLaunch , impl->MKernelWorkGroupMemorySize ,
536
+ BinImage);
524
537
#ifdef XPTI_ENABLE_INSTRUMENTATION
525
538
// Emit signal only when event is created
526
- if (NewEvent != nullptr ) {
539
+ if (!DiscardEvent ) {
527
540
detail::emitInstrumentationGeneral (
528
541
StreamID, InstanceID, CmdTraceEvent, xpti::trace_signal,
529
- static_cast <const void *>(NewEvent ->getHandle ()));
542
+ static_cast <const void *>(LastEventImpl ->getHandle ()));
530
543
}
531
544
detail::emitInstrumentationGeneral (StreamID, InstanceID, CmdTraceEvent,
532
545
xpti::trace_task_end, nullptr );
533
546
#endif
534
547
};
535
548
536
- bool DiscardEvent = (MQueue->MDiscardEvents || !impl->MEventNeeded ) &&
537
- MQueue->supportsDiscardingPiEvents ();
538
- if (DiscardEvent) {
539
- // Kernel only uses assert if it's non interop one
540
- bool KernelUsesAssert =
541
- !(MKernel && MKernel->isInterop ()) &&
542
- detail::ProgramManager::getInstance ().kernelUsesAssert (
543
- MKernelName.c_str ());
544
- DiscardEvent = !KernelUsesAssert;
545
- }
546
-
547
549
if (DiscardEvent) {
548
550
EnqueueKernel ();
549
- const auto &EventImpl = detail::getSyclObjImpl (MLastEvent);
550
- EventImpl->setStateDiscarded ();
551
+ LastEventImpl->setStateDiscarded ();
551
552
} else {
552
- NewEvent = detail::getSyclObjImpl (MLastEvent);
553
- NewEvent->setQueue (MQueue);
554
- NewEvent->setWorkerQueue (MQueue);
555
- NewEvent->setContextImpl (MQueue->getContextImplPtr ());
556
- NewEvent->setStateIncomplete ();
557
- NewEvent->setSubmissionTime ();
553
+ LastEventImpl->setQueue (MQueue);
554
+ LastEventImpl->setWorkerQueue (MQueue);
555
+ LastEventImpl->setContextImpl (MQueue->getContextImplPtr ());
556
+ LastEventImpl->setStateIncomplete ();
557
+ LastEventImpl->setSubmissionTime ();
558
558
559
559
EnqueueKernel ();
560
- NewEvent ->setEnqueued ();
560
+ LastEventImpl ->setEnqueued ();
561
561
// connect returned event with dependent events
562
562
if (!MQueue->isInOrder ()) {
563
- NewEvent ->getPreparedDepsEvents () = impl->CGData .MEvents ;
564
- NewEvent ->cleanDepEventsThroughOneLevel ();
563
+ LastEventImpl ->getPreparedDepsEvents () = impl->CGData .MEvents ;
564
+ LastEventImpl ->cleanDepEventsThroughOneLevel ();
565
565
}
566
566
}
567
567
return MLastEvent;
0 commit comments