The Omnitrace feature set and use cases#
Omnitrace is designed to be highly extensible. Internally, it leverages the Timemory performance analysis toolkit to manage extensions, resources, data, and other items. It supports the following features, modes, metrics, and APIs.
Data collection modes#
Dynamic instrumentation
Runtime instrumentation: Instrument executables and shared libraries at runtime
Binary rewriting: Generate a new executable and/or library with instrumentation built-in
Statistical sampling: Periodic software interrupts per-thread
Process-level sampling: A background thread records process-, system- and device-level metrics while the application runs
Causal profiling: Quantifies the potential impact of optimizations in parallel code
Note
Critical trace support was removed in Omnitrace v1.11.0. It was replaced by the causal profiling feature.
Data analysis#
High-level summary profiles with mean, min, max, and standard deviation statistics
Low overhead and memory efficient
Ideal for running at scale
Comprehensive traces for every individual event and measurement
Application speed-up predictions resulting from potential optimizations in functions and lines of code based on causal profiling
Parallelism API support#
HIP
HSA
Pthreads
MPI
Kokkos-Tools (KokkosP)
OpenMP-Tools (OMPT)
GPU metrics#
GPU hardware counters
HIP API tracing
HIP kernel tracing
HSA API tracing
HSA operation tracing
System-level sampling (via rocm-smi)
Memory usage
Power usage
Temperature
Utilization
CPU metrics#
CPU hardware counters sampling and profiles
CPU frequency sampling
Various timing metrics
Wall time
CPU time (process and thread)
CPU utilization (process and thread)
User CPU time
Kernel CPU time
Various memory metrics
High-water mark (sampling and profiles)
Memory page allocation
Virtual memory usage
Network statistics
I/O metrics
Many others
Third-party API support#
TAU
LIKWID
Caliper
CrayPAT
VTune
NVTX
ROCTX
Omnitrace use cases#
When analyzing the performance of an application, do NOT assume you know where the performance bottlenecks are and why they are happening. Omnitrace is a tool for analyzing the entire application and its performance. It is ideal for characterizing where optimization would have the greatest impact on an end-to-end run of the application and for viewing what else is happening on the system during a performance bottleneck.
When GPUs are involved, there is a tendency to assume that the quickest path to performance improvement is minimizing the runtime of the GPU kernels. This is a highly flawed assumption. If you optimize the runtime of a kernel from one millisecond to 1 microsecond (1000x speed-up) but the original application never spent time waiting for kernels to complete, there would be no statistically significant reduction in the end-to-end runtime of your application. In other words, it does not matter how fast or slow the code on GPU is if the application has a bottleneck on waiting on the GPU.
Use Omnitrace to obtain a high-level view of the entire application. Use it to determine where the performance bottlenecks are and obtain clues to why these bottlenecks are happening. Rather than worrying about kernel performance, start your investigation with Omnitrace, which characterizes the broad picture.
Note
For insight into the execution of individual kernels on the GPU, use Omniperf.
In terms of CPU analysis, Omnitrace does not target any specific vendor. It works just as well on AMD and non-AMD CPUs. With regard to the GPU, Omnitrace is currently restricted to HIP and HSA APIs and kernels running on AMD GPUs.