Skip to content

Commit 2db918d

Browse files
authored
[SYCL] Avoid event_impl shared_ptr copy (#17859)
Avoid the event_impl shared_ptr copy by removing a temporary variable and using a reference instead.
1 parent 4c22448 commit 2db918d

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

sycl/source/handler.cpp

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)