@@ -492,7 +492,19 @@ event handler::finalize() {
492492 // creation.
493493 std::vector<ur_event_handle_t > RawEvents =
494494 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+ }
496508
497509#ifdef XPTI_ENABLE_INSTRUMENTATION
498510 // uint32_t StreamID, uint64_t InstanceID, xpti_td* TraceEvent,
@@ -515,53 +527,41 @@ event handler::finalize() {
515527 detail::retrieveKernelBinary (MQueue, MKernelName.c_str ());
516528 assert (BinImage && " Failed to obtain a binary image." );
517529 }
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);
524537#ifdef XPTI_ENABLE_INSTRUMENTATION
525538 // Emit signal only when event is created
526- if (NewEvent != nullptr ) {
539+ if (!DiscardEvent ) {
527540 detail::emitInstrumentationGeneral (
528541 StreamID, InstanceID, CmdTraceEvent, xpti::trace_signal,
529- static_cast <const void *>(NewEvent ->getHandle ()));
542+ static_cast <const void *>(LastEventImpl ->getHandle ()));
530543 }
531544 detail::emitInstrumentationGeneral (StreamID, InstanceID, CmdTraceEvent,
532545 xpti::trace_task_end, nullptr );
533546#endif
534547 };
535548
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-
547549 if (DiscardEvent) {
548550 EnqueueKernel ();
549- const auto &EventImpl = detail::getSyclObjImpl (MLastEvent);
550- EventImpl->setStateDiscarded ();
551+ LastEventImpl->setStateDiscarded ();
551552 } 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 ();
558558
559559 EnqueueKernel ();
560- NewEvent ->setEnqueued ();
560+ LastEventImpl ->setEnqueued ();
561561 // connect returned event with dependent events
562562 if (!MQueue->isInOrder ()) {
563- NewEvent ->getPreparedDepsEvents () = impl->CGData .MEvents ;
564- NewEvent ->cleanDepEventsThroughOneLevel ();
563+ LastEventImpl ->getPreparedDepsEvents () = impl->CGData .MEvents ;
564+ LastEventImpl ->cleanDepEventsThroughOneLevel ();
565565 }
566566 }
567567 return MLastEvent;
0 commit comments