Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00
..

ROCprof Trace Decoder

Warning

This is an early preview of beta 0.2.0

  • Please check the CHANGELOG
  • Integration with TheRock is a work in progress.

Description

The rocprof-trace-decoder library transforms wave (thread) trace binary data in .att files into a format that is consumable by tools. Wave (thread) trace is a profiling method that uses GPU hardware instrumentation to trace shader instructions that run on the GPU, capturing GPU occupancy, instruction run times, and other performance metrics.

Supported devices

  • AMD Radeon: 6000, 7000, 9000 series
  • AMD Instinct: MI200 and MI300 series

Building

Quick Start

cmake -B build
cmake --build build -j$(nproc)

The library installs to /opt/rocm by default. Override with -DCMAKE_INSTALL_PREFIX=/your/path.

CMake Options

Option Default Description
BUILD_TESTS OFF Enable building tests (unit + integration)
BUILD_UNIT_TESTS ON Build unit tests (only effective when BUILD_TESTS=ON)
BUILD_INTEGRATION_TESTS ON Build integration tests (only effective when BUILD_TESTS=ON)
BUILD_MARKERS OFF Build and install the SQTT marker instrumentation pass plugin
USE_LLVM_DISASM ON Use LLVM-C for AMDGPU disassembly. No amd_comgr / ROCm dependency. Falls back to amd_comgr if LLVM isn't found.
LLVM_DIR (auto) Path to a specific LLVMConfig.cmake (e.g. /opt/rocm/llvm/lib/cmake/llvm for the ROCm-bundled LLVM, useful for newest ASICs). Recorded in the package config so consumers automatically use the same LLVM.
DISABLE_COMGR OFF Skip the amd_comgr dependency. Combined with USE_LLVM_DISASM=OFF this builds with no disassembly backend (va2fo + symbol enumeration still work via inline ELF). Also disables the att-tool binary.
CMAKE_BUILD_TYPE Release Build type (Debug, Release, RelWithDebInfo, MinSizeRel)

Disassembly backend

The library contains a header-inline disassembly path (include/rocprof_trace_decoder/cxx/disassembly.hpp). Three mutually-exclusive backends are selectable at configure time:

Configuration Backend When to use
USE_LLVM_DISASM=ON (default) LLVM-C Default. Works everywhere LLVM with the AMDGPU target is available — system LLVM (apt llvm-XX-dev), Homebrew, ROCm-bundled (/opt/rocm/llvm), or a custom build.
USE_LLVM_DISASM=OFF (with ROCm) amd_comgr Legacy. Requires a ROCm install at /opt/rocm.
USE_LLVM_DISASM=OFF DISABLE_COMGR=ON none No disassembly at runtime; va2fo and symbol enumeration still work via inline ELF parsing.

To build for the newest GPUs (e.g. gfx1250) before upstream LLVM ships disasm tables for them, point at the ROCm-bundled LLVM:

cmake -B build -DLLVM_DIR=/opt/rocm/llvm/lib/cmake/llvm

The chosen LLVM_DIR is baked into the generated rocprof-trace-decoder-config.cmake, so any consumer that does find_package(rocprof-trace-decoder CONFIG) automatically gets the same LLVM — no need to pass LLVM_DIR again on the consumer side.

Build Targets

Target Description
rocprof-trace-decoder Shared library (.so)
rocprof-trace-decoder-static Static library (.a) — built but not installed; consumed via the build-tree CMake export
SQTTInstrumentPass LLVM pass plugin for SQTT marker instrumentation (libsqttinstrumentpass.so, BUILD_MARKERS=ON)
unit_tests Unit test executable (requires BUILD_TESTS=ON)
format Run clang-format and cmake-format on all sources
docs Generate Doxygen API documentation
coverage Run tests and generate code coverage report (see below)

Consuming from another CMake project

The build tree exports a CMake package, so downstream projects don't need to install the decoder:

find_package(rocprof-trace-decoder REQUIRED CONFIG
             PATHS /path/to/rocprof-trace-decoder/build
             PATH_SUFFIXES source lib/cmake/rocprof-trace-decoder)

# Static link — recommended for self-contained binaries.
target_link_libraries(myapp PRIVATE rocprof-trace-decoder::rocprof-trace-decoder-static)

# Or shared:
# target_link_libraries(myapp PRIVATE rocprof-trace-decoder::rocprof-trace-decoder)

The namespaced target carries the disasm backend's include dirs, link libs, and compile defs as PUBLIC interface — consumers automatically inherit LLVM (or amd_comgr) without an additional find_package on their side. The LLVM_DIR used at decoder build time is recorded in the package config and reused on the consumer side.

Testing

Building and Running Tests

cmake -B build -DBUILD_TESTS=ON -DDISABLE_COMGR=ON
cmake --build build -j$(nproc)
cd build && ctest --test-dir test -j$(nproc)

Set -DDISABLE_COMGR=ON if amd_comgr is not installed. This skips the att-tool but all other tests still run.

Running Only Unit Tests

ctest --test-dir build/test -R "regular/" -j$(nproc)

Running Only Integration Tests

ctest --test-dir build/test -E "regular/|sanitize|ubsan|asan" -j$(nproc)

Sanitizer Builds

ctest --test-dir build/test -R "asan/" -j$(nproc)   # AddressSanitizer
ctest --test-dir build/test -R "ubsan/" -j$(nproc)  # UBSan

Code Coverage

# Requires gcov, lcov and genhtml

cmake -B build_coverage -DBUILD_TESTS=ON -DDISABLE_COMGR=ON \
    -DCMAKE_CXX_FLAGS="--coverage -fprofile-arcs -ftest-coverage" \
    -DCMAKE_EXE_LINKER_FLAGS="--coverage" \
    -DCMAKE_SHARED_LINKER_FLAGS="--coverage" \
    -DCMAKE_BUILD_TYPE=Debug

# Build and Generate coverage report
cmake --build build_coverage -j$(nproc)
cd build_coverage && make coverage

Usage with rocprofv3

rocprofv3 --att -- ./a.out

The decoder is linked at build time by rocprofiler-sdk. No library path argument is needed.

For information on how to generate thread trace data, see using rocprofv3 to collect thread trace

C API

rocprof_trace_decoder_handle_t decoder{};
auto status = rocprof_trace_decoder_create_handle(&decoder);

For more information, see

API Versions

The library API version is controlled by VERSION_MINOR and reflected in the SONAME:

VERSION_MINOR SONAME API
1 librocprof-trace-decoder.so.0.1 V1: stateless rocprof_trace_decoder_parse_data(se_data_cb, trace_cb, isa_cb, userdata). Compatible with rocprofiler-sdk <= 7.13.
2 (default) librocprof-trace-decoder.so.0.2 V2: handle-based rocprof_trace_decoder_parse(handle, data, size, trace_cb, userdata) with create_handle, destroy_handle, codeobj_load/unload, and set_isa_callback.

To build the V1 library for backwards compatibility with older rocprofiler-sdk releases:

cmake -B build -DVERSION_MINOR=1
cmake --build build -j$(nproc)