Skip to content

Commit 751273f

Browse files
Run constructor Run wait and run start hook for temporal sharing usecase (Xilinx#9721)
* Add run_constructor XDP hook in xrt::run for per-run plugin callbacks Call xrt_core::xdp::run_constructor from the xrt::run constructor, passing the run pointer and hw_context_impl pointer. The hook dispatches to aie::profile::run_constructor via dlsym-registered callback (aieProfileRunConstructor), gated on get_aie_profile(). This enables XDP plugins to attach per-run resources at run construction time. Made-with: Cursor * Pass run UID through run_constructor hook for CT filename Thread the run_impl::get_uid() value as a uint32_t through the entire hook chain so the per-run CT file is named with the actual run UID (e.g. aie_profile_ctx_1_run_3.ct), matching the dtrace dump naming convention (dtrace_dump_ctx_1_run_3_<timestamp>.py). Made-with: Cursor * Thread kernel_name and elf_handle through run_constructor XDP hook Pass kernel name and ELF handle (from xrt::module) through the run_constructor callback chain so the AIE profile plugin can extract SAVE_TIMESTAMP locations directly from the ELF at run construction time. Made-with: Cursor * XRT: Wire AIE dtrace config and load xdp_aie_dtrace_plugin_xdna Expose Debug.aie_dtrace and AIE_dtrace_settings (interval, tile- and graph-based interface tile metrics) in config_reader.h for xrt.ini. Register the xdp_aie_dtrace_plugin_xdna module loader in profile.cpp when the XDP VE2 build supplies that shared library. Bump the src/runtime_src/xdp submodule to pick up the AIE dtrace plugin and related XDP profile changes. Made-with: Cursor * Remove AIE_profile_settings.dtrace_debug config reader Delete get_aie_profile_settings_dtrace_debug(); AIE dtrace uses Debug.aie_dtrace only (xdp submodule). Made-with: Cursor * Wire AIE dtrace run start and run wait hooks from xrt::run Add xrt_core::xdp::run_start and run_wait APIs and load aieDtraceRunStart / aieDtraceRunWait from the dtrace plugin when aie_dtrace is enabled. Call run_start before kernel submit from xrt::run::start, and run_wait after xrt::run::wait / wait2 return. Use const_cast for wait paths because wait is const. Bump src/runtime_src/xdp submodule to include the plugin exports and hooks. Made-with: Cursor * xdp: aie_profile drops CT writer and bandwidth metrics Bump src/runtime_src/xdp to include aie_profile cleanup (remove AieProfileCTWriter, ddr/read/write_bandwidth handling, and generateCTForRun). Made-with: Cursor * xdp: bump submodule for aie_profile CT bandwidth metric cleanup Points src/runtime_src/xdp at commit adding METRIC_* bandwidth constants, isInterfaceTileBandwidthMetricSet(), and VE2 AieProfileCTWriter updates. Made-with: Cursor * Revert "xdp: bump submodule for aie_profile CT bandwidth metric cleanup" This reverts commit befc23e. * xdp: bump submodule (revert a0d7280 CT writer / bandwidth drop) Made-with: Cursor * xdp: route run_constructor to AIE dtrace only Remove aie::profile run_constructor callback registration and the get_aie_profile() branch in xrt_core::xdp::run_constructor. Per-run setup is handled solely by the aie_dtrace plugin when enabled. Submodule src/runtime_src/xdp: AIE profile VE2 CT writer removal and related cleanup (see submodule commit). Made-with: Cursor * Update xdp submodule for aie_dtrace CT writer UC column handling Points xdp at commit that derives UC spans from aiebu op_loc and extends the last UC through the maximum configured counter column. Made-with: Cursor * Update latest xdp submodule Signed-off-by: Garima Dhaked <[email protected]> * xdp: Compile run hooks only for VE2 XDNA builds Guard run_constructor, run_start, and run_wait hooks with XDP_VE2_BUILD preprocessor conditional to exclude this code from non-VE2 builds. These hooks are only needed for AIE dtrace functionality on VE2 XDNA platforms. Changes: - Wrap aie::dtrace namespace in profile.cpp with #ifdef XDP_VE2_BUILD - Wrap run hook functions in xrt_core::xdp namespace with same guard - Add XDP_VE2_BUILD compile definition to core_common_api_library_objects in CMakeLists.txt for VE2 builds - Guard run hook calls in xrt_kernel.cpp (run constructor, start, wait) - Update copyright year in profile.h Made-with: Cursor * Reverted the changed copyright comment in previous checkin Signed-off-by: Garima Dhaked <[email protected]> * xdp: refactor run hooks to use run_info struct with runtime aie_dtrace check Replace compile-time XDP_VE2_BUILD guards with runtime aie_dtrace config check for run_constructor, run_start, and run_wait hooks. Introduce run_info struct to encapsulate hook arguments and add make_run_info helper for cleaner call sites. Made-with: Cursor * Reverted the changed copyright comment in previous checkin Signed-off-by: Garima Dhaked <[email protected]> * xdp: refactor run hooks to use run_info struct with runtime aie_dtrace check Replace compile-time XDP_VE2_BUILD guards with runtime aie_dtrace config check for run_constructor, run_start, and run_wait hooks. Introduce run_info struct to encapsulate hook arguments and add make_run_info helper in profile.h for cleaner call sites. Remove XDP_VE2_BUILD compile definition from CMakeLists.txt since hooks are now controlled at runtime via aie_dtrace config. Made-with: Cursor * DCO Remediation Commit for Garima Dhaked and Jyotheeswar Ganne I, Garima Dhaked <[email protected]>, hereby add my Signed-off-by to this commit and all preceding commits in this pull request that were authored by me. This remediation covers the following commits by Garima Dhaked: 6d09bc8 xdp: refactor run hooks to use run_info struct with runtime aie_dtrace check ab6e2a7 xdp: refactor run hooks to use run_info struct with runtime aie_dtrace check 9129d2a xdp: Compile run hooks only for VE2 XDNA builds 4e88252 Update xdp submodule for aie_dtrace CT writer UC column handling a2fa7ca xdp: route run_constructor to AIE dtrace only 1fcd5b3 xdp: bump submodule (revert a0d7280 CT writer / bandwidth drop) 339e681 Revert "xdp: bump submodule for aie_profile CT bandwidth metric cleanup" befc23e xdp: bump submodule for aie_profile CT bandwidth metric cleanup 50b4d53 xdp: aie_profile drops CT writer and bandwidth metrics 02335bc Wire AIE dtrace run start and run wait hooks from xrt::run 5572676 Remove AIE_profile_settings.dtrace_debug config reader 9c455aa XRT: Wire AIE dtrace config and load xdp_aie_dtrace_plugin_xdna Signed-off-by: Garima Dhaked <[email protected]> I, Jyotheeswar Ganne <[email protected]>, hereby add my Signed-off-by to this commit and all preceding commits in this pull request that were authored by me. This remediation covers the following commits by Jyotheeswar Ganne: 21b8c68 Thread kernel_name and elf_handle through run_constructor XDP hook ae60a20 Pass run UID through run_constructor hook for CT filename b441e2b Add run_constructor XDP hook in xrt::run for per-run plugin callbacks Signed-off-by: Jyotheeswar Ganne <[email protected]> Made-with: Cursor * xdp: simplify dtrace run hooks with direct xrt::run API Refactor the dtrace run hooks to simplify call sites in xrt_kernel.cpp by moving all run info extraction logic into profile.cpp. Changes: - Add run-level accessor functions to kernel_int.h (get_run_uid, get_run_hwctx, get_run_kernel_name, get_run_module, get_run_state) - Simplify run_constructor, run_start, and run_wait to take xrt::run directly instead of run_info struct - Remove run_info struct and make_run_info helper from profile.h - Move config check and info extraction into profile.cpp Call sites in xrt_kernel.cpp are now simplified to: xrt_core::xdp::run_constructor(*this); xrt_core::xdp::run_start(*this); xrt_core::xdp::run_wait(*this); Signed-off-by: Garima Dhaked <[email protected]> Made-with: Cursor * xdp: add implementation-level XDP profiling hooks Move XDP profiling hooks for run_start and run_wait from the public xrt::run API level to the internal run_impl implementation level. This ensures these hooks are called regardless of whether the C++ API or C API is used. The run_constructor hook remains at the xrt::run API level because the XDP plugin needs to call methods on the xrt::run object (specifically set_dtrace_control_file). Changes: - Add xrt_kernel_data struct with ert_state field for run state - Add implementation-level XDP hooks: - run_start(const xrt_kernel_data&) - run_wait(const xrt_kernel_data&) - Add get_xdp_kernel_data() helper to run_impl class - Call run_start and run_wait hooks from run_impl methods - Keep run_constructor at xrt::run level (requires xrt::run object) - Remove unused run_wait(const xrt::run&) overload and get_run_state() This enables XDP profiling for run_start and run_wait when using the C API (xrtRunStart, xrtRunWait) which calls run_impl methods directly. Signed-off-by: Garima Dhaked <[email protected]> Made-with: Cursor * xrt: refactor XDP run hooks to use run_impl handles Refactor XDP profiling hooks to operate at the handle level (run_impl*) rather than requiring xrt::run objects. This provides consistency with how other XDP hooks work in the codebase. * updated xdp submodule to 4f426595bb2f38e8a3ea1df10744eccd0559597d commit Signed-off-by: Garima Dhaked <[email protected]> * xrt: simplify XDP run hooks to accept run_impl pointer directly Refactor the XDP profiling hooks (run_constructor, run_start, run_wait) to accept const xrt::run_impl* instead of xrt_kernel_data struct. This simplifies the API and moves data extraction into the callback functions themselves, avoiding unnecessary work when callbacks are not registered. Changes: - Update profile.h/cpp: Change hook signatures to take run_impl* - Update kernel_int.h: Replace xrt::run overload with run_impl* version - Update xrt_kernel.cpp: Simplify call sites to pass 'this' directly - Add get_xdp_kernel_data(run_impl*) to extract kernel data internally - Populate ert_state in xrt_kernel_data via run_impl->state() The aie::dtrace namespace functions now check if callbacks are registered before extracting kernel data, improving efficiency when profiling is disabled. Signed-off-by: Garima Dhaked <[email protected]> Made-with: Cursor * xrt: remove unused get_xdp_kernel_data() private method from run_impl Remove the unused private get_xdp_kernel_data() member function from run_impl class. This function is no longer needed since XDP profiling hooks now use the exported xrt_core::kernel_int::get_xdp_kernel_data() function that takes a run_impl pointer directly. Signed-off-by: Garima Dhaked <[email protected]> Made-with: Cursor * xrt: remove unused header includes from kernel_int.h Remove unnecessary header includes that are not used in kernel_int.h: - xrt_module.h: not referenced in the header - xrt_hw_context.h: already included transitively via xrt_kernel.h - ert.h: not referenced in the header Signed-off-by: Garima Dhaked <[email protected]> Made-with: Cursor * Removed trace points from set_dtace_control_file() Signed-off-by: Garima Dhaked <[email protected]> --------- Signed-off-by: Garima Dhaked <[email protected]> Signed-off-by: Jyotheeswar Ganne <[email protected]> Co-authored-by: Jyotheeswar Ganne <[email protected]>
1 parent c157601 commit 751273f

7 files changed

Lines changed: 263 additions & 5 deletions

File tree

src/runtime_src/core/common/api/kernel_int.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@
1717

1818
#include <bitset>
1919
#include <cstdint>
20+
#include <string>
2021
#include <vector>
2122

23+
namespace xrt_core::xdp {
24+
struct xrt_kernel_data;
25+
}
26+
2227
namespace xrt_core { namespace kernel_int {
2328

2429
// Provide access to kdma command based BO copy Used by xrt::bo::copy.
@@ -96,6 +101,17 @@ get_hw_ctx(const xrt::run&);
96101
xrt::kernel
97102
create_kernel_from_implementation(const xrt::kernel_impl* kernel_impl);
98103

104+
// Fill XDP kernel data from a run_impl pointer for profiling hooks
105+
XRT_CORE_COMMON_EXPORT
106+
void
107+
get_xdp_kernel_data(const xrt::run_impl* run_impl, xrt_core::xdp::xrt_kernel_data* data);
108+
109+
// Set dtrace control file on a run_impl handle
110+
// This is used by XDP profiling to set the CT file without requiring xrt::run
111+
XRT_CORE_COMMON_EXPORT
112+
void
113+
set_dtrace_control_file(xrt::run_impl* run_impl, const std::string& path);
114+
99115
}} // kernel_int, xrt_core
100116

101117
#endif

src/runtime_src/core/common/api/xrt_kernel.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
#include "core/common/trace.h"
4848
#include "core/common/usage_metrics.h"
4949
#include "core/common/xclbin_parser.h"
50+
#include "core/common/xdp/profile.h"
5051

5152
#include <boost/format.hpp>
5253

@@ -2471,6 +2472,9 @@ class run_impl : public std::enable_shared_from_this<run_impl>
24712472
, uid(create_uid())
24722473
{
24732474
XRT_DEBUGF("run_impl::run_impl(%d)\n" , uid);
2475+
2476+
// XDP run_constructor hook
2477+
xrt_core::xdp::run_constructor(this);
24742478
}
24752479

24762480
// Clones a run impl, so that the clone can be executed concurrently
@@ -2783,6 +2787,9 @@ class run_impl : public std::enable_shared_from_this<run_impl>
27832787

27842788
prep_start();
27852789

2790+
// XDP profiling hook - called immediately before run is submitted
2791+
xrt_core::xdp::run_start(this);
2792+
27862793
// log kernel start info
27872794
// This is in critical path, we need to reduce log overhead
27882795
// as much as possible, passing kernel impl pointer instead of
@@ -2884,6 +2891,9 @@ class run_impl : public std::enable_shared_from_this<run_impl>
28842891
state = cmd->wait();
28852892
}
28862893

2894+
// XDP profiling hook - called after wait completes
2895+
xrt_core::xdp::run_wait(this);
2896+
28872897
dump_logs(true); // dump required logs
28882898

28892899
return state;
@@ -2936,6 +2946,9 @@ class run_impl : public std::enable_shared_from_this<run_impl>
29362946
state = cmd->wait();
29372947
}
29382948

2949+
// XDP profiling hook - called after wait completes
2950+
xrt_core::xdp::run_wait(this);
2951+
29392952
// dump required logs
29402953
dump_logs(true);
29412954

@@ -4220,8 +4233,24 @@ create_kernel_from_implementation(const xrt::kernel_impl* kernel_impl)
42204233
return xrt::kernel(const_cast<xrt::kernel_impl*>(kernel_impl)->get_shared_ptr()); // NOLINT
42214234
}
42224235

4223-
} // xrt_core::kernel_int
4236+
void
4237+
get_xdp_kernel_data(const xrt::run_impl* run_impl, xrt_core::xdp::xrt_kernel_data* data)
4238+
{
4239+
auto kernel = run_impl->get_kernel();
4240+
data->uid = run_impl->get_uid();
4241+
data->name = kernel->get_name();
4242+
data->hwctx = kernel->get_hw_context();
4243+
data->mod = kernel->get_module();
4244+
data->ert_state = static_cast<int>(run_impl->state());
4245+
}
4246+
4247+
void
4248+
set_dtrace_control_file(xrt::run_impl* run_impl, const std::string& path)
4249+
{
4250+
run_impl->set_dtrace_control_file(path);
4251+
}
42244252

4253+
} // xrt_core::kernel_int
42254254

42264255
////////////////////////////////////////////////////////////////
42274256
// xrt_kernel C++ API implmentations (xrt_kernel.h)

src/runtime_src/core/common/config_reader.h

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,13 @@ get_aie_profile()
174174
return value;
175175
}
176176

177+
inline bool
178+
get_aie_dtrace()
179+
{
180+
static bool value = detail::get_bool_value("Debug.aie_dtrace", false);
181+
return value;
182+
}
183+
177184
inline bool
178185
get_aie_debug()
179186
{
@@ -965,10 +972,27 @@ get_aie_profile_settings_start_iteration()
965972
return value;
966973
}
967974

968-
inline bool
969-
get_aie_profile_settings_dtrace_debug()
975+
// Configurations under AIE_dtrace_settings (bandwidth / CT for Debug.aie_dtrace; no aie_profile CSV)
976+
inline unsigned int
977+
get_aie_dtrace_settings_interval_us()
978+
{
979+
static unsigned int value = detail::get_uint_value("AIE_dtrace_settings.interval_us", 1000);
980+
return value;
981+
}
982+
983+
inline std::string
984+
get_aie_dtrace_settings_graph_based_interface_tile_metrics()
985+
{
986+
static std::string value =
987+
detail::get_string_value("AIE_dtrace_settings.graph_based_interface_tile_metrics", "");
988+
return value;
989+
}
990+
991+
inline std::string
992+
get_aie_dtrace_settings_tile_based_interface_tile_metrics()
970993
{
971-
static bool value = detail::get_bool_value("AIE_profile_settings.dtrace_debug", "false");
994+
static std::string value =
995+
detail::get_string_value("AIE_dtrace_settings.tile_based_interface_tile_metrics", "");
972996
return value;
973997
}
974998

src/runtime_src/core/common/xdp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ add_library(core_common_xdp_profile_objects OBJECT
77
target_include_directories(core_common_xdp_profile_objects
88
PRIVATE
99
${XRT_SOURCE_DIR}/runtime_src
10+
${XRT_SOURCE_DIR}/runtime_src/core/common/elf
1011
)
1112

1213
# Compile defintions when building npu, alveo, or legacy xrt

src/runtime_src/core/common/xdp/profile.cpp

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
#define XRT_CORE_COMMON_SOURCE
44
#include "core/common/xdp/profile.h"
55

6+
#include "core/common/api/kernel_int.h"
7+
#include "core/common/api/module_int.h"
68
#include "core/common/config_reader.h"
79
#include "core/common/dlfcn.h"
810
#include "core/common/module_loader.h"
911
#include "core/common/message.h"
12+
#include "core/include/xrt/xrt_kernel.h"
13+
1014
#include <cstring>
1115
#include <functional>
1216
#include <sstream>
@@ -145,6 +149,100 @@ end_poll(void* handle)
145149

146150
} // end namespace xrt_core::xdp::aie::profile
147151

152+
namespace xrt_core::xdp::aie::dtrace {
153+
154+
std::function<void(void*, bool)> update_device_cb;
155+
std::function<void(void*)> end_poll_cb;
156+
std::function<void(void*, void*, uint32_t, const char*, void*)> run_constructor_cb;
157+
std::function<void(void*, void*, uint32_t, const char*)> run_start_cb;
158+
std::function<void(void*, void*, uint32_t, const char*, int)> run_wait_cb;
159+
160+
void
161+
register_callbacks(void* handle)
162+
{
163+
using ftype = void (*)(void*);
164+
using utype = void (*)(void*, bool);
165+
using rctype = void (*)(void*, void*, uint32_t, const char*, void*);
166+
using rsctype = void (*)(void*, void*, uint32_t, const char*);
167+
using rwctype = void (*)(void*, void*, uint32_t, const char*, int);
168+
169+
update_device_cb = reinterpret_cast<utype>(xrt_core::dlsym(handle, "updateAIEDtraceDevice"));
170+
end_poll_cb = reinterpret_cast<ftype>(xrt_core::dlsym(handle, "endAIEDtracePoll"));
171+
run_constructor_cb = reinterpret_cast<rctype>(xrt_core::dlsym(handle, "aieDtraceRunConstructor"));
172+
run_start_cb = reinterpret_cast<rsctype>(xrt_core::dlsym(handle, "aieDtraceRunStart"));
173+
run_wait_cb = reinterpret_cast<rwctype>(xrt_core::dlsym(handle, "aieDtraceRunWait"));
174+
}
175+
176+
void
177+
load_xdna()
178+
{
179+
static xrt_core::module_loader xdp_aie_dtrace_loader("xdp_aie_dtrace_plugin_xdna",
180+
register_callbacks,
181+
warning_callbacks_empty);
182+
}
183+
184+
void
185+
load()
186+
{
187+
load_xdna();
188+
}
189+
190+
void
191+
update_device(void* handle, bool hw_context_flow)
192+
{
193+
if (update_device_cb)
194+
update_device_cb(handle, hw_context_flow);
195+
}
196+
197+
void
198+
end_poll(void* handle)
199+
{
200+
if (end_poll_cb)
201+
end_poll_cb(handle);
202+
}
203+
204+
void
205+
run_constructor(xrt::run_impl* run_impl)
206+
{
207+
if (run_constructor_cb) {
208+
xrt_kernel_data data{};
209+
xrt_core::kernel_int::get_xdp_kernel_data(run_impl, &data);
210+
auto elf_hdl = data.mod ? xrt_core::module_int::get_elf_handle(data.mod) : nullptr;
211+
run_constructor_cb(run_impl,
212+
data.hwctx.get_handle().get(),
213+
data.uid,
214+
data.name.c_str(),
215+
elf_hdl.get());
216+
}
217+
}
218+
219+
void
220+
run_start(const xrt::run_impl* run_impl)
221+
{
222+
if (run_start_cb) {
223+
xrt_kernel_data data{};
224+
xrt_core::kernel_int::get_xdp_kernel_data(run_impl, &data);
225+
run_start_cb(nullptr, data.hwctx.get_handle().get(),
226+
data.uid,
227+
data.name.c_str());
228+
}
229+
}
230+
231+
void
232+
run_wait(const xrt::run_impl* run_impl)
233+
{
234+
if (run_wait_cb) {
235+
xrt_kernel_data data{};
236+
xrt_core::kernel_int::get_xdp_kernel_data(run_impl, &data);
237+
run_wait_cb(nullptr, data.hwctx.get_handle().get(),
238+
data.uid,
239+
data.name.c_str(),
240+
data.ert_state);
241+
}
242+
}
243+
244+
} // end namespace xrt_core::xdp::aie::dtrace
245+
148246
namespace xrt_core::xdp::aie::debug {
149247

150248
std::function<void (void*)> update_device_cb;
@@ -533,6 +631,7 @@ update_device(void* handle, bool hw_context_flow)
533631
#ifdef _WIN32
534632
if (xrt_core::config::get_ml_timeline()
535633
|| xrt_core::config::get_aie_profile()
634+
|| xrt_core::config::get_aie_dtrace()
536635
|| xrt_core::config::get_aie_trace()
537636
|| xrt_core::config::get_aie_debug()
538637
|| xrt_core::config::get_aie_halt()
@@ -662,6 +761,20 @@ update_device(void* handle, bool hw_context_flow)
662761
handle,
663762
hw_context_flow);
664763

764+
load_once_and_update(xrt_core::config::get_aie_dtrace,
765+
[]() {
766+
if (xrt_core::config::get_xdp_mode() == "xdna") {
767+
xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT",
768+
"xdp_mode is XDNA; loading AIE dtrace plugin for XDNA device.");
769+
xrt_core::xdp::aie::dtrace::load_xdna();
770+
}
771+
},
772+
xrt_core::xdp::aie::dtrace::update_device,
773+
"Failed to load AIE dtrace library. Caught exception ",
774+
"Failed to setup for AIE dtrace. Caught exception ",
775+
handle,
776+
hw_context_flow);
777+
665778
#else
666779

667780
load_once_and_update(
@@ -730,6 +843,8 @@ finish_flush_device(void* handle)
730843
xrt_core::xdp::aie::halt::finish_flush_device(handle);
731844
if (xrt_core::config::get_aie_profile())
732845
xrt_core::xdp::aie::profile::end_poll(handle);
846+
if (xrt_core::config::get_aie_dtrace())
847+
xrt_core::xdp::aie::dtrace::end_poll(handle);
733848
if (xrt_core::config::get_aie_trace())
734849
xrt_core::xdp::aie::trace::end_trace(handle);
735850
if (xrt_core::config::get_aie_debug())
@@ -751,6 +866,8 @@ finish_flush_device(void* handle)
751866
xrt_core::xdp::ml_timeline::finish_flush_device(handle);
752867
if (xrt_core::config::get_aie_profile())
753868
xrt_core::xdp::aie::profile::end_poll(handle);
869+
if (xrt_core::config::get_aie_dtrace())
870+
xrt_core::xdp::aie::dtrace::end_poll(handle);
754871

755872
#else
756873

@@ -771,4 +888,31 @@ finish_flush_device(void* handle)
771888
#endif
772889
}
773890

891+
void
892+
run_constructor(xrt::run_impl* run_impl)
893+
{
894+
if (!xrt_core::config::get_aie_dtrace())
895+
return;
896+
897+
xrt_core::xdp::aie::dtrace::run_constructor(run_impl);
898+
}
899+
900+
void
901+
run_start(const xrt::run_impl* run_impl)
902+
{
903+
if (!xrt_core::config::get_aie_dtrace())
904+
return;
905+
906+
xrt_core::xdp::aie::dtrace::run_start(run_impl);
907+
}
908+
909+
void
910+
run_wait(const xrt::run_impl* run_impl)
911+
{
912+
if (!xrt_core::config::get_aie_dtrace())
913+
return;
914+
915+
xrt_core::xdp::aie::dtrace::run_wait(run_impl);
916+
}
917+
774918
} // end namespace xrt_core::xdp

0 commit comments

Comments
 (0)