Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions profile/plugin/aie_dtrace/aie_dtrace_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#define XDP_PLUGIN_SOURCE

#include "xdp/profile/plugin/aie_dtrace/aie_dtrace_plugin.h"
#include "xdp/profile/plugin/aie_dtrace/util/aie_dtrace_util.h"

#include "core/common/api/hw_context_int.h"
#include "core/common/config_reader.h"
Expand Down Expand Up @@ -31,6 +32,9 @@ namespace xdp {
{
AieDtracePlugin::live = true;

if (xrt_core::config::get_aie_dtrace())
aie::dtrace::initDtraceOutputConfig();

db->registerPlugin(this);
db->registerInfo(info::aie_dtrace);
db->getStaticInfo().setAieApplication();
Expand Down Expand Up @@ -68,6 +72,8 @@ namespace xdp {
if (!xrt_core::config::get_aie_dtrace())
return;

aie::dtrace::initDtraceOutputConfig();

if (!handle)
return;

Expand Down
35 changes: 35 additions & 0 deletions profile/plugin/aie_dtrace/util/aie_dtrace_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,43 @@

#include "xdp/profile/plugin/aie_dtrace/util/aie_dtrace_util.h"

#include "core/common/config_reader.h"
#include "core/common/message.h"

#include <mutex>

namespace xdp::aie::dtrace {

namespace {
using severity_level = xrt_core::message::severity_level;

static constexpr unsigned int DEFAULT_COALESCE_RESULT_MEMORY_MB = 256;
} // anonymous namespace

void
initDtraceOutputConfig()
{
static std::once_flag once;
std::call_once(once, []() {
try {
xrt_core::config::detail::set("Debug.dtrace_output_json_format", "true");
xrt_core::config::detail::set("Debug.dtrace_coalesce_result", "true");
xrt_core::config::detail::set("Debug.dtrace_coalesce_result_memory_mb",
std::to_string(DEFAULT_COALESCE_RESULT_MEMORY_MB));
}
catch (const std::exception& e) {
xrt_core::message::send(severity_level::warning, "XRT",
std::string("AIE dtrace: could not apply default dtrace output settings: ")
+ e.what());
return;
}

xrt_core::message::send(severity_level::info, "XRT",
"AIE dtrace: enabled JSON dtrace_dump output with coalesced results "
"(dtrace_dump_ctx_<slot>_<timestamp>.json on hw context teardown)");
});
}

std::map<std::string, std::vector<XAie_Events>>
getBandwidthInterfaceTileEventSets(int hwGen)
{
Expand Down
4 changes: 4 additions & 0 deletions profile/plugin/aie_dtrace/util/aie_dtrace_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ namespace xdp::aie::dtrace {
// Shim bandwidth metric sets used for Debug.aie_dtrace (not part of standard aie_profile ini).
std::map<std::string, std::vector<XAie_Events>> getBandwidthInterfaceTileEventSets(int hwGen);

// Enable JSON dtrace_dump output with coalesced results by default.
// Must run before XRT creates the first dtrace module (config keys lock on first read).
void initDtraceOutputConfig();

} // namespace xdp::aie::dtrace

#endif
12 changes: 9 additions & 3 deletions profile/plugin/aie_dtrace/ve2/aie_dtrace_ct_writer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -636,9 +636,12 @@ bool AieDtraceCTWriter::writeCTFile(const std::vector<ASMFileInfo>& asmFileInfoL
ctFile << "{\n";
ctFile << " ts_" << asmFileInfo.asmId << " = timestamp32()\n";

// Write counter reads using _ as throwaway variable
// Write counter reads. Each counter is assigned a sequential result
// variable (_0, _1, _2, ...) so the dtrace JSON dump emits one key per
// counter ("_0", "_1", ...) in probe order; counter semantics are provided
// by the COUNTER_METADATA block above.
for (size_t i = 0; i < asmFileInfo.counters.size(); i++) {
ctFile << " _ = read_reg("
ctFile << " _" << i << " = read_reg("
<< formatAddress(asmFileInfo.counters[i].address) << ")\n";
}

Expand Down Expand Up @@ -1156,9 +1159,12 @@ bool AieDtraceCTWriter::writeBandwidthCTFile(
ctFile << "{\n";
ctFile << " ts_" << asmFileInfo.asmId << " = timestamp32()\n";

// Each counter is assigned a sequential result variable (_0, _1, _2, ...)
// so the dtrace JSON dump emits one key per counter ("_0", "_1", ...) in
// probe order; counter semantics live in the COUNTER_METADATA block above.
for (size_t i = 0; i < asmFileInfo.counters.size(); i++) {
const auto& ctr = asmFileInfo.counters[i];
ctFile << " _ = read_reg(" << formatAddress(ctr.address) << ")\n";
ctFile << " _" << i << " = read_reg(" << formatAddress(ctr.address) << ")\n";
}

ctFile << "}\n\n";
Expand Down
3 changes: 3 additions & 0 deletions profile/plugin/aie_dtrace/ve2/aie_dtrace_ve2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "xdp/profile/plugin/aie_dtrace/ve2/aie_dtrace_ve2.h"
#include "xdp/profile/plugin/aie_dtrace/ve2/aie_dtrace_ct_writer.h"
#include "xdp/profile/plugin/aie_dtrace/ve2/elf_helper.h"
#include "xdp/profile/plugin/aie_dtrace/util/aie_dtrace_util.h"

#include "core/common/api/hw_context_int.h"
#include "core/common/api/kernel_int.h"
Expand Down Expand Up @@ -134,6 +135,8 @@ namespace xdp {
if (!ctWriter.generateBandwidthCT(outputPath, hwctx, it->second, bandwidthMetricSet, bandwidthChannel))
return;

aie::dtrace::initDtraceOutputConfig();

xrt_core::message::send(severity_level::debug, "XRT",
"AIE dtrace: Bandwidth CT generated for kernel '" + kernel_name
+ "' with metric set '" + bandwidthMetricSet + "'");
Expand Down
Loading