Skip to content

Commit 68c1f02

Browse files
committed
Eliminate XPTI overhead when it is disabled
Signed-off-by: Sergei Vinogradov <[email protected]>
1 parent 1e5d85d commit 68c1f02

File tree

3 files changed

+58
-37
lines changed

3 files changed

+58
-37
lines changed

sycl/source/detail/graph_impl.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -795,19 +795,25 @@ exec_graph_impl::enqueueNodeDirect(sycl::context Ctx,
795795
ur_exp_command_buffer_command_handle_t NewCommand = 0;
796796

797797
#ifdef XPTI_ENABLE_INSTRUMENTATION
798-
int32_t StreamID = xptiRegisterStream(sycl::detail::SYCL_STREAM_NAME);
799-
sycl::detail::CGExecKernel *CGExec =
800-
static_cast<sycl::detail::CGExecKernel *>(Node->MCommandGroup.get());
801-
sycl::detail::code_location CodeLoc(CGExec->MFileName.c_str(),
802-
CGExec->MFunctionName.c_str(),
803-
CGExec->MLine, CGExec->MColumn);
804-
auto [CmdTraceEvent, InstanceID] = emitKernelInstrumentationData(
805-
StreamID, CGExec->MSyclKernel, CodeLoc, CGExec->MIsTopCodeLoc,
806-
CGExec->MKernelName.data(), nullptr, CGExec->MNDRDesc,
807-
CGExec->MKernelBundle, CGExec->MArgs);
808-
if (CmdTraceEvent)
809-
sycl::detail::emitInstrumentationGeneral(
810-
StreamID, InstanceID, CmdTraceEvent, xpti::trace_task_begin, nullptr);
798+
const static bool xptiEnabled = xptiTraceEnabled();
799+
int32_t StreamID = xpti::invalid_id;
800+
xpti_td *CmdTraceEvent = nullptr;
801+
uint64_t InstanceID = 0;
802+
if (xptiEnabled) {
803+
StreamID = xptiRegisterStream(sycl::detail::SYCL_STREAM_NAME);
804+
sycl::detail::CGExecKernel *CGExec =
805+
static_cast<sycl::detail::CGExecKernel *>(Node->MCommandGroup.get());
806+
sycl::detail::code_location CodeLoc(CGExec->MFileName.c_str(),
807+
CGExec->MFunctionName.c_str(),
808+
CGExec->MLine, CGExec->MColumn);
809+
std::tie(CmdTraceEvent, InstanceID) = emitKernelInstrumentationData(
810+
StreamID, CGExec->MSyclKernel, CodeLoc, CGExec->MIsTopCodeLoc,
811+
CGExec->MKernelName.data(), nullptr, CGExec->MNDRDesc,
812+
CGExec->MKernelBundle, CGExec->MArgs);
813+
if (CmdTraceEvent)
814+
sycl::detail::emitInstrumentationGeneral(
815+
StreamID, InstanceID, CmdTraceEvent, xpti::trace_task_begin, nullptr);
816+
}
811817
#endif
812818

813819
ur_result_t Res = sycl::detail::enqueueImpCommandBufferKernel(
@@ -825,7 +831,7 @@ exec_graph_impl::enqueueNodeDirect(sycl::context Ctx,
825831
}
826832

827833
#ifdef XPTI_ENABLE_INSTRUMENTATION
828-
if (CmdTraceEvent)
834+
if (xptiEnabled && CmdTraceEvent)
829835
sycl::detail::emitInstrumentationGeneral(
830836
StreamID, InstanceID, CmdTraceEvent, xpti::trace_task_end, nullptr);
831837
#endif

sycl/source/detail/queue_impl.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ event queue_impl::submit_impl(const detail::type_erased_cgfo_ty &CGF,
319319
handler Handler(Self, SecondaryQueue, CallerNeedsEvent);
320320
auto &HandlerImpl = detail::getSyclObjImpl(Handler);
321321
#ifdef XPTI_ENABLE_INSTRUMENTATION
322-
if (xptiTraceEnabled()) {
322+
const static bool xptiEnabled = xptiTraceEnabled();
323+
if (xptiEnabled) {
323324
Handler.saveCodeLoc(Loc, IsTopCodeLoc);
324325
}
325326
#endif
@@ -375,7 +376,8 @@ event queue_impl::submit_impl(const detail::type_erased_cgfo_ty &CGF,
375376
auto &HandlerImpl = detail::getSyclObjImpl(Handler);
376377

377378
#if XPTI_ENABLE_INSTRUMENTATION
378-
if (xptiTraceEnabled()) {
379+
const static bool xptiEnabled = xptiTraceEnabled();
380+
if (xptiEnabled) {
379381
Handler.saveCodeLoc(Loc, IsTopCodeLoc);
380382
}
381383
#endif
@@ -590,11 +592,15 @@ void queue_impl::instrumentationEpilog(void *TelemetryEvent, std::string &Name,
590592
void queue_impl::wait(const detail::code_location &CodeLoc) {
591593
(void)CodeLoc;
592594
#ifdef XPTI_ENABLE_INSTRUMENTATION
595+
const static bool xptiEnabled = xptiTraceEnabled();
593596
void *TelemetryEvent = nullptr;
594597
uint64_t IId;
595598
std::string Name;
596-
int32_t StreamID = xptiRegisterStream(SYCL_STREAM_NAME);
597-
TelemetryEvent = instrumentationProlog(CodeLoc, Name, StreamID, IId);
599+
int32_t StreamID = xpti::invalid_id;
600+
if (xptiEnabled) {
601+
StreamID = xptiRegisterStream(SYCL_STREAM_NAME);
602+
TelemetryEvent = instrumentationProlog(CodeLoc, Name, StreamID, IId);
603+
}
598604
#endif
599605

600606
if (MGraph.lock()) {
@@ -662,7 +668,9 @@ void queue_impl::wait(const detail::code_location &CodeLoc) {
662668
Event->wait(Event);
663669

664670
#ifdef XPTI_ENABLE_INSTRUMENTATION
665-
instrumentationEpilog(TelemetryEvent, Name, StreamID, IId);
671+
if (xptiEnabled) {
672+
instrumentationEpilog(TelemetryEvent, Name, StreamID, IId);
673+
}
666674
#endif
667675
}
668676

sycl/source/handler.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -517,19 +517,23 @@ event handler::finalize() {
517517
}
518518

519519
#ifdef XPTI_ENABLE_INSTRUMENTATION
520-
// uint32_t StreamID, uint64_t InstanceID, xpti_td* TraceEvent,
521-
int32_t StreamID = xptiRegisterStream(detail::SYCL_STREAM_NAME);
522-
auto [CmdTraceEvent, InstanceID] = emitKernelInstrumentationData(
523-
StreamID, MKernel, MCodeLoc, impl->MIsTopCodeLoc, MKernelName.data(),
524-
MQueue, impl->MNDRDesc, KernelBundleImpPtr, impl->MArgs);
525-
auto EnqueueKernel = [&, CmdTraceEvent = CmdTraceEvent,
526-
InstanceID = InstanceID]() {
527-
#else
528-
auto EnqueueKernel = [&]() {
520+
const static bool xptiEnabled = xptiTraceEnabled();
529521
#endif
522+
auto EnqueueKernel = [&]() {
530523
#ifdef XPTI_ENABLE_INSTRUMENTATION
531-
detail::emitInstrumentationGeneral(StreamID, InstanceID, CmdTraceEvent,
532-
xpti::trace_task_begin, nullptr);
524+
int32_t StreamID = xpti::invalid_id;
525+
xpti_td *CmdTraceEvent = nullptr;
526+
uint64_t InstanceID = 0;
527+
if (xptiEnabled) {
528+
int32_t StreamID = xptiRegisterStream(detail::SYCL_STREAM_NAME);
529+
std::tie(CmdTraceEvent, InstanceID) = emitKernelInstrumentationData(
530+
StreamID, MKernel, MCodeLoc, impl->MIsTopCodeLoc,
531+
MKernelName.data(), MQueue, impl->MNDRDesc, KernelBundleImpPtr,
532+
impl->MArgs);
533+
detail::emitInstrumentationGeneral(StreamID, InstanceID,
534+
CmdTraceEvent,
535+
xpti::trace_task_begin, nullptr);
536+
}
533537
#endif
534538
const detail::RTDeviceBinaryImage *BinImage = nullptr;
535539
if (detail::SYCLConfig<detail::SYCL_JIT_AMDGCN_PTX_KERNELS>::get()) {
@@ -545,14 +549,17 @@ event handler::finalize() {
545549
impl->MKernelUsesClusterLaunch,
546550
impl->MKernelWorkGroupMemorySize, BinImage);
547551
#ifdef XPTI_ENABLE_INSTRUMENTATION
548-
// Emit signal only when event is created
549-
if (!DiscardEvent) {
550-
detail::emitInstrumentationGeneral(
551-
StreamID, InstanceID, CmdTraceEvent, xpti::trace_signal,
552-
static_cast<const void *>(LastEventImpl->getHandle()));
552+
if (xptiEnabled) {
553+
// Emit signal only when event is created
554+
if (!DiscardEvent) {
555+
detail::emitInstrumentationGeneral(
556+
StreamID, InstanceID, CmdTraceEvent, xpti::trace_signal,
557+
static_cast<const void *>(LastEventImpl->getHandle()));
558+
}
559+
detail::emitInstrumentationGeneral(StreamID, InstanceID,
560+
CmdTraceEvent,
561+
xpti::trace_task_end, nullptr);
553562
}
554-
detail::emitInstrumentationGeneral(StreamID, InstanceID, CmdTraceEvent,
555-
xpti::trace_task_end, nullptr);
556563
#endif
557564
};
558565

0 commit comments

Comments
 (0)