Standalone MLIR example for tracing on AMD NPU devices using a vector-scalar multiply kernel.
aie_trace.mlir- declarative trace configuration using low-level MLIR opsaie_trace.py- declarative trace configuration using Pythonconfigure_trace()APIvector_scalar_mul.cc- AIE kerneltest.cpp/test.py- host runnersvisualize_trace.py- renders a PNG timeline from parsed trace JSONrun_makefile.lit/run_strix_makefile.lit- lit test definitions for NPU1 and NPU2
make run_tracemake run_trace_pyAfter make run_trace or make run_trace_py:
trace.txt- raw trace dumptrace.json- parsed trace eventstrace_timeline.png- timeline visualization
The recommended approach uses configure_trace() and start_trace():
import aie.utils.trace as trace_utils
from aie.utils.trace.events import PortEvent, CoreEvent, MemEvent
# Outside runtime_sequence - configure which tiles to trace
tiles_to_trace = [tile_0_2, tile_0_2, mem_tile_0_1, shim_tile_0_0]
trace_utils.configure_trace(
tiles_to_trace,
coretile_events=[
CoreEvent.INSTR_EVENT_0,
CoreEvent.INSTR_EVENT_1,
PortEvent(CoreEvent.PORT_RUNNING_0, WireBundle.DMA, 0, True),
# ... up to 8 events
],
)
# Inside runtime_sequence - activate tracing
@runtime_sequence(...)
def sequence(...):
trace_utils.start_trace()
# ... data transfersNote: To trace both core and memory events on a core tile, list it twice in
tiles_to_trace. The first occurrence configures core trace, the second
configures memory trace.
For direct MLIR usage:
aie.trace @core_trace(%tile_0_2) {
aie.trace.mode "Event-Time"
aie.trace.packet id=1 type=core
aie.trace.event<"INSTR_EVENT_0">
aie.trace.event<"INSTR_EVENT_1">
aie.trace.port<0> port=DMA channel=0 direction=S2MM
aie.trace.start broadcast=15
aie.trace.stop broadcast=14
}
aie.runtime_sequence(...) {
aie.trace.start_config @core_trace
}Compiler lowering pipeline for declarative trace:
-aie-insert-trace-flows-aie-trace-to-config-aie-trace-pack-reg-writes-aie-inline-trace-config
Inspect intermediate IR:
aie-opt -aie-insert-trace-flows aie_trace.mlir
aie-opt -aie-insert-trace-flows -aie-trace-to-config aie_trace.mlir
aie-opt -aie-insert-trace-flows -aie-trace-to-config -aie-trace-pack-reg-writes aie_trace.mlir
aie-opt -aie-insert-trace-flows -aie-trace-to-config -aie-trace-pack-reg-writes -aie-inline-trace-config aie_trace.mlirGenerate visualization from existing parsed output:
python3 visualize_trace.py -i trace.json -o trace_timeline.png -t "Trace Timeline"Copyright 2026 Advanced Micro Devices, Inc.