21 KiB
Changelog for ROCprofiler-SDK
Full documentation for ROCprofiler-SDK is available at rocm.docs.amd.com/projects/rocprofiler-sdk
Unreleased
Added
API:
- Streaming Performance Monitor (SPM) counter collection support (beta):
- New experimental API in
rocprofiler-sdk/experimental/spm.h: - GPU-timestamped counter values alongside kernel dispatch information.
- New experimental API in
- Added
spm_supportalong with reserved padding torocprofiler_counter_info_v1_t
rocprofv3 (CLI):
- SPM counter collection support in
rocprofv3(beta):--spm <counter>flag to specify counters for SPM collection.--spm-sample-intervaland--spm-sample-interval-unitparameters to configure sampling rate.--spm-beta-enabledflag to opt in to the beta SPM feature.--spm-configoption inrocprofv3-availto list available SPM configurations.
- JSON and rocpd output format support for SPM.
- OpenMP (OMPT) tracing via the new
--ompt-traceflag:- Accepts a bare boolean or category list (
all, thread, parallel, task, sync, mutex, target, device, error); also folded into--sys-trace/--runtime-trace. - rocpd-only trace: records go to the rocpd database (auto-added when another format is requested) and export via
rocpd convert.
- Accepts a bare boolean or category list (
Documentation:
- SPM API reference guide (
api-reference/spm.rst). - SPM usage guide for
rocprofv3(how-to/using-spm.rst). --spm-configdocumentation torocprofv3-availusage guide.
Changed
- Bump rocpd schema to version 3.0.1 which supports NIC agent types.
- Bump rocpd schema to version 3.0.2 for HIP graph per-node attribution (
graph_exec_id/graph_node_idcolumns onrocpd_kernel_dispatch/rocpd_memory_copyand the newrocpd_graph_launchtable). The pre-graph-attribution 3.0.1 schema is now frozen underversions/3.0.1/per the rocpd schema versioning scheme. - Bump rocpd schema to version 3.0.3 for SPM support. The pre-spm-support 3.0.2 schema is now frozen under
versions/3.0.2/per the rocpd schema versioning scheme.
Removed
ROCprofiler-SDK 1.3.5
Added
- HipFile API tracing support
ROCprofiler-SDK 1.3.0 for ROCm release 7.2.4
Optimized
- Reduced ROCprofiler-sdk profiling overhead: Improved profiling stability for vLLM workloads traced with PyTorch torch.profiler using the rocprofiler-sdk backend.
ROCprofiler-SDK 1.3.0 for ROCm release 7.13
Added
API:
-
Late-start profiling support: Added automatic late‑start profiling support, enabling profiling when
rocprofiler-sdkis loaded after HSA/HIP runtimes have already initialized.rocprofiler_force_configure()now automatically detects and profiles runtimes initialized before the SDK loads.- Integrates with
rocprofiler-registerto retrieve the registered API tables. - Supports all runtime types (HSA, HIP, ROCTX, RCCL, ROCDecode, ROCJpeg, and more) automatically.
- No explicit late-start API calls required; works transparently.
-
KFD (Kernel Fusion Driver) event tracing support:
- Buffer service configurations for each KFD buffer tracing type.
- New type
tool_buffer_tracing_kfd_record_tusingstd::variantto wrap 8 different KFD buffer tracing types. - Each KFD event generates
rocpd_info_pmc,rocpd_event,rocpd_region, androcpd_pmc_eventrows - Fixed handling for special SVM location in KFD prefetch location reporting
- Fixed parsing for queue restore events to handle both correct format (character '0') and broken driver format (NULL character '\0')
-
Per-graph-node attribution for HIP graph operations:
- New callback tracing kind
ROCPROFILER_CALLBACK_TRACING_HIP_GRAPHfires forhipGraphInstantiate*,hipGraphExecDestroy, andhipGraphLaunch{,_spt}lifecycle events. Payload carries a process-monotonicgraph_exec_idand the rawhipGraphExec_thandle. Mirrors theHIP_STREAMdesign. - New buffer tracing kind
ROCPROFILER_BUFFER_TRACING_HIP_GRAPHemits a summary record per successfulhipGraphLaunchinvocation withgraph_exec_id,kernel_dispatch_count, agent, and launch timestamps. - Tools can associate kernel dispatches and memory copies with their producing graph node by maintaining a per-thread attribution stack (push on EXEC_LAUNCH ENTER, pop on EXIT) and capturing the top of stack into the external correlation id at request time. See the doc comment on
rocprofiler_callback_tracing_hip_graph_data_tfor the recipe. - Attribution accuracy across launches requires segmented scheduling (default),
AMD_DIRECT_DISPATCH=1, and single-threaded launching of onehipGraphExec_t.
- New callback tracing kind
rocprofv3 (CLI):
-
Multi-pass counter collection support: Support for multiple
--pmcflags to define separate counter groups for different profiling passes.- Ability to combine command-line
--pmcflags with input file counter groups. - Each pass generates output in a separate
pass_nsubdirectory. - Example:
rocprofv3 --pmc SQ_WAVES --pmc GRBM_COUNT -- <app>creates two profiling passes.
- Ability to combine command-line
-
KFD (Kernel Fusion Driver) event tracing support:
- KFD record dumping to
rocpdwith support for 8 main KFD event types. - Support for
rocpdto Perfetto conversion for KFD events. --kfd-traceflag to enable KFD event tracing.
- KFD record dumping to
-
ROCTx Support for ATT: Added ROCtx support to device thread trace when using
--att --selected-regions.- Allows
roctxProfilerPauseandroctxProfilerResumeto explicitly control when ATT data collection starts and stops. - Enables more precise, region-focused ATT tracing with reduced overhead and noise.
- Supports multiple resume/pause cycles, each producing separate trace output files.
- Incompatible with
--att-consecutive-kernels.
- Allows
-
PC Sampling Support for Dynamic Attach: Added PC Sampling support for Dynamic Attach feature, allowing users to attach to a running application and collect PC samples without restarting the workload.
- Enables profiling long-running or production-style jobs at the point of interest.
- Results integrate with the existing PC sampling analysis flow.
-
HIP graph attribution fields and trace:
- Kernel and memory-copy records gain
graph_exec_idandgraph_node_idfields in JSON and rocpd output. rocpd conversion exposes these fields in CSV, OTF2, and Perfetto output. - New
--hip-graph-traceCLI flag emits per-launch summary records (one row per successfulhipGraphLaunch) in JSON and rocpd output, includinggraph_exec_idandkernel_dispatch_count. Automatically enabled by--hip-trace/--hip-runtime-tracesince HIP graphs are part of the HIP runtime.
- Kernel and memory-copy records gain
-
rocSHMEM API tracing support:
--rocshmem-traceflag to enable tracing of rocSHMEM host-stream APIs.- Included in the
--sys-traceand--runtime-traceaggregate tracing options. - Emitted directly to the JSON and rocpd (default,
.db) output formats; CSV, Perfetto (.pftrace), and OTF2 output are produced from the rocpd database viarocpd convert.
Documentation:
- Added marker-controlled thread tracing section to the thread trace how-to guide.
- Added cross-reference from ROCTx documentation to ATT with
selected-regions. - Added HIP graph attribution section to the rocprofv3 how-to guide covering the new output columns, the
--hip-graph-traceflag, the determinism contract, and v1 limitations.
Changed
Implementation:
- Late-start architecture redesign: Removed direct runtime symbol access in favor of proper rocprofiler-register integration.
- Replaced ~600 lines of
dlopen/dlsymbypass logic with ~80 lines by usingrocprofiler_register_invoke_all_registrations(). - Late-start now works by requesting
rocprofiler-registerto repropagate stored API tables. - Extensible design. Automatically supports new runtimes without SDK code changes.
- Provides a proper separation of concerns.
rocprofiler-registermanages the table storage while SDK manages the table wrapping.
- Replaced ~600 lines of
- Counter dimension encoding changed from fixed-width to variable-width allocation per dimension type.
- Dimension selection and reduction logic now uses explicit dimension masks and single-index selection.
- HSA queue interception extended to handle AMD extended kernel dispatch packets.
Removed
- Counter collection support for plain text (
.txt) input files has been deprecated due to lack of schema validation and input sanitization. Only structured file formats (JSON and YAML) with schema validation are supported.
Resolved issues
- Fixed rocpd OTF2 output to add
ACCELERATOR_DEVICEas system tree node domain for AMD devices. - Fixed
rocprofv3input file parsing where comment lines containingpmc:were incorrectly processed as valid counter collection directives, causing unintended profiling passes.
Internal APIs (non-public):
- Removed internal functions (were never in public headers):
rocprofiler_start_late_internal()rocprofiler_is_late_start_internal()rocprofiler_stop_late_internal()
- Replaced with single internal function:
rocprofiler::late_start::invoke_register_propagation()
Note: Public API (rocprofiler_force_configure()) remains unchanged - no breaking changes for users
ROCprofiler-SDK for AFAR I
Added
- HSA API tracing
- Kernel dispatch tracing
- Kernel dispatch counter collection
- Instances reported as single dimension
- No serialization
ROCprofiler-SDK for AFAR II
Added
- HIP API tracing
- ROCTx tracing
- Tracing ROCProf Tool V3
- Documentation packaging
- ROCTx control (start and stop)
- Memory copy tracing
ROCprofiler-SDK for AFAR III
Added
- Kernel dispatch counter collection. This includes serialization and multidimensional instances.
- Kernel serialization.
- Serialization control (on and off).
- ROCprof tool plugin interface V3 for counters and dimensions.
- Support to list metrics.
- Correlation-Id retirement
- HIP and HSA trace distinction:
- --hip-runtime-trace For collecting HIP Runtime API traces
- --hip-compiler-trace For collecting HIP compiler-generated code traces
- --hsa-core-trace For collecting HSA API traces (core API)
- --hsa-amd-trace For collecting HSA API traces (AMD-extension API)
- --hsa-image-trace For collecting HSA API traces (image-extension API)
- --hsa-finalizer-trace For collecting HSA API traces (finalizer-extension API)
ROCprofiler-SDK for AFAR IV
Added
API:
- Page migration reporting
- Scratch memory reporting
- Kernel dispatch callback tracing
- External correlation Id request service
- Buffered counter collection record headers
- Option to remove HSA dependency from counter collection
Tool:
rocprofv3multi-GPU support in a single-process
ROCprofiler-SDK for AFAR V
Added
API:
- Agent or device counter collection
- PC sampling (beta)
Tool:
- Single JSON output format support
- Perfetto output format support (.pftrace)
- Input YAML support for counter collection
- Input JSON support for counter collection
- Application replay in counter collection
rocprofv3multi-GPU support:- Multiprocess (multiple files)
Changed
rocprofv3tool now requires mentioning--before the application. For detailed use, see Using rocprofv3
Resolved issues
- Fixed
SQ_ACCUM_PREVandSQ_ACCUM_PREV_HIREoverwriting issue
ROCprofiler-SDK 0.4.0 for ROCm release 6.2 (AFAR VI)
Added
- OTF2 tool support
- Kernel and range filtering
- Counter collection definitions in YAML
- Documentation updates (SQ block, counter collection, tracing, tool usage)
rocprofv3option--kernel-renamerocprofv3options for Perfetto settings (buffer size and so on)- CSV columns for kernel trace
Thread_IdDispatch_Id
- CSV column for counter collection
ROCprofiler-SDK 0.5.0 for ROCm release 6.3 (AFAR VII)
Added
- Start and end timestamp columns to the counter collection csv output
- Check to force tools to initialize context id with zero
- Support to specify hardware counters for collection using rocprofv3 as
rocprofv3 --pmc [COUNTER [COUNTER ...]] - Memory Allocation Tracing
- PC sampling tool support with CSV and JSON output formats
- List supported PC Sampling Configurations
Changed
--marker-traceoption forrocprofv3now supports the legacy ROCTx librarylibroctx64.sowhen the application is linked against the new librarylibrocprofiler-sdk-roctx.so.- Replaced deprecated
hipHostMallocandhipHostFreefunctions withhipExtHostAllocandhipFreeHostfor ROCm versions starting 6.3. - Updated
rocprofv3--helpoptions. - Changed naming of "agent profiling" to a more descriptive "device counting service". To convert existing tool or user code to the new name, use the following sed:
find . -type f -exec sed -i 's/rocprofiler_agent_profile_callback_t/rocprofiler_device_counting_service_callback_t/g; s/rocprofiler_configure_agent_profile_counting_service/rocprofiler_configure_device_counting_service/g; s/agent_profile.h/device_counting_service.h/g; s/rocprofiler_sample_agent_profile_counting_service/rocprofiler_sample_device_counting_service/g' {} + - Changed naming of "dispatch profiling service" to a more descriptive "dispatch counting service". To convert existing tool or user code to the new names, the following sed can be used:
-type f -exec sed -i -e 's/dispatch_profile_counting_service/dispatch_counting_service/g' -e 's/dispatch_profile.h/dispatch_counting_service.h/g' -e 's/rocprofiler_profile_counting_dispatch_callback_t/rocprofiler_dispatch_counting_service_callback_t/g' -e 's/rocprofiler_profile_counting_dispatch_data_t/rocprofiler_dispatch_counting_service_data_t/g' -e 's/rocprofiler_profile_counting_dispatch_record_t/rocprofiler_dispatch_counting_service_record_t/g' {} + FETCH_SIZEmetric on gfx94x now usesTCC_BUBBLEfor 128B reads.- PMC dispatch-based counter collection serialization is now per-device instead of being global across all devices.
- Added output return functionality to rocprofiler_sample_device_counting_service
- Added rocprofiler_load_counter_definition.
Resolved issues
- Create subdirectory when
rocprofv3 --output-fileincludes a folder path - Fixed misaligned stores (undefined behavior) for buffer records
- Fixed crash when only scratch reporting is enabled
- Fixed
MeanOccupancymetrics - Fixed aborted-application validation test to properly check for
hipExtHostAlloccommand - Fixed implicit reduction of SQ and GRBM metrics
- Fixed support for derived counters in reduce operation
- Bug fixed in max-in-reduce operation
- Introduced fix to handle a range of values for
select()dimension in expressions parser - Conditional
aql::set_profiler_active_on_queueonly when counter collection is registered (resolves Navi3 kernel tracing issues)
Removed
- Removed gfx8 metric definitions
- Removed
rocprofv3installation to sbin directory
ROCprofiler-SDK 0.6.0 for ROCm release 6.4
Added
- Support for
select()operation in counter expression. reduce()operation for counter expression with respect to dimension.--collection-periodfeature inrocprofv3to enable filtering using time.--collection-period-unitfeature inrocprofv3to control time units used in collection period option.- Deprecation notice for ROCProfiler and ROCProfilerV2.
- Support for rocDecode API Tracing
- Usage documentation for ROCTx
- Usage documentation for MPI applications
- SDK:
rocprofiler_agent_v0_tsupport for agent UUIDs - SDK:
rocprofiler_agent_v0_tsupport for agent visibility based on gpu isolation environment variables such asROCR_VISIBLE_DEVICESand so on. - Accumulation VGPR support for
rocprofv3. - Host-trap based PC sampling support for rocprofv3.
- Support for OpenMP tool.
ROCprofiler-SDK 1.0.0 for ROCm release 7.0
Added
- Support for rocJPEG API Tracing.
- Support for AMD Instinct MI350X and MI355X accelerators.
rocprofiler_create_counterto facilitate adding custom derived counters at runtime.- Support in
rocprofv3for iteration based counter multiplexing. - Perfetto support for counter collection.
- Support for negating
rocprofv3tracing options when using aggregate options such as--sys-trace --hsa-trace=no. --agent-indexoption inrocprofv3to specify the agent naming convention in the output:- absolute == node_id
- relative == logical_node_id
- type-relative == logical_node_type_id
- MI300 and MI350 stochastic (hardware-based) PC sampling support in ROCProfiler-SDK and
rocprofv3. - Python bindings for
rocprofiler-sdk-roctx - SQLite3 output support for
rocprofv3using--output-format rocpd. rocprofiler-sdk-rocpdpackage:- Public API in
include/rocprofiler-sdk-rocpd/rocpd.h. - Library implementation in
librocprofiler-sdk-rocpd.so. - Support for
find_package(rocprofiler-sdk-rocpd). rocprofiler-sdk-rocpdDEB and RPM packages.
- Public API in
--versionoption inrocprofv3.rocpdPython package.- Thread trace as experimental API.
- ROCprof Trace Decoder as experimental API:
- Requires ROCprof Trace Decoder plugin.
- Thread trace option in the
rocprofv3tool under the--attparameters: rocpdoutput format documentation:- Requires ROCprof Trace Decoder plugin.
- Perfetto support for scratch memory.
- Support in the
rocprofv3avail tool for command-line arguments. - Documentation for
rocprofv3advanced options. - Support for multi dispatch ATT file added
Changed
- SDK to NOT to create a background thread when every tool returns a nullptr from
rocprofiler_configure. vaddr-to-file-offsetmapping indisassembly.hppto use the dedicated comgr API.rocprofiler_uuid_tABI to hold 128 bit value.rocprofv3shorthand argument for--collection-periodto-P(upper-case) while-p(lower-case) is reserved for later use.- Default output format for
rocprofv3torocpd(SQLite3 database). rocprofv3avail tool to be renamed fromrocprofv3_availtorocprofv3-availtool.rocprofv3tool to facilitate thread trace and PC sampling on the same agent.
Resolved issues
- Fixed missing callbacks around internal thread creation within counter collection service.
- Fixed potential data race in the ROCprofiler-SDK double buffering scheme.
- Fixed usage of std::regex in the core ROCprofiler-SDK library that caused segfaults or exceptions when used under dual ABI.
- Fixed Perfetto counter collection by introducing accumulation per dispatch.
- Fixed code object disassembly for missing function inlining information.
- Fixed queue preemption error and
HSA_STATUS_ERROR_INVALID_PACKET_FORMATerror for stochastic PC-sampling in MI300X, leading to stabler runs. - Fixed the system hang issue for host-trap PC-sampling on MI300X.
- Fixed
rocpdcounter collection issue when counter collection alone is enabled.rocpd_kernel_dispatchtable is updated to be populated by counters data instead of kernel_dispatch data. - Fixed
rocprofiler_*_id_tstructs for inconsistency related to a "null" handle:- The correct definition for a null handle is
.handle = 0while some definitions previously usedUINT64_MAX.
- The correct definition for a null handle is
- Fixed kernel trace csv output generated by
rocpd.
Removed
- Support for compilation of gfx940 and gfx941 targets.
ROCprofiler-SDK 1.1.0 for ROCm release 7.1
Added
- Dynamic process attachment- ROCprofiler-sdk and
rocprofv3now facilitate dynamic profiling of a running GPU applications by attaching to its process ID (PID), rather than launching the application through the profiler itself. - Scratch-memory trace information to the Perfetto output in
rocprofv3. - New capabilities to the thread trace support in
rocprofv3, including real-time clock support for thread trace alignment on gfx9 architecture. This enables high-resolution clock computation and better synchronization across shader engines. Additionally,MultiKernelDispatchthread trace support is now available across all ASICs. - Documentation for dynamic process attachment.
- Documentation for
rocpdsummaries.
Optimized
- Improved the stability and robustness of the
rocpdoutput.
ROCprofiler-SDK 1.1.0 for ROCm release 7.2
Added
- Counter collection support for
gfx1150andgfx1151. - HSA Extension API v8 support.
hipStreamCopyAttributesAPI implementation.--profile-mpi-ranksoption inrocprofv3to selectively profile specific MPI ranks. Supports comma-separated ranges and individual ranks (e.g.,--profile-mpi-ranks 0-3,8,10-15).
Optimized
- Improved process attachment and updated the corresponding documentation.
- Improved [Quick reference guide for rocprofv3] (https://rocm.docs.amd.com/projects/rocprofiler-sdk/en/latest/quick_guide.html).
- Updated installation documentation with links to the latest repository (https://rocm.docs.amd.com/projects/rocprofiler-sdk/en/latest/install/installation.html).
Resolved issues
- Fixed multi-GPU dimension mismatch.
- Fixed device lock issue for dispatch counters.
- Addressed OpenMP Tools task scheduling null pointer exception.
- Fixed stream ID errors arising during process attachment.
- Fixed issues arising during dynamic code object loading.