MI200 Performance Counters and Metrics#
2024-04-01
28 min read time
This document lists and describes the hardware performance counters and the derived metrics available on the AMD Instinct™ MI200 GPU. All hardware performance monitors, and the derived performance metrics are accessible via AMD ROCm™ Profiler tool.
MI200 Performance Counters List#
Note
Preliminary validation of all MI200 performance counters is in progress. Those with “[*]” appended to the names require further evaluation.
Graphics Register Bus Management (GRBM)#
GRBM Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
Free-running GPU clock |
|
Cycles |
GPU active cycles |
|
Cycles |
Any of the CP (CPC/CPF) blocks are busy. |
|
Cycles |
Any of the Shader Processor Input (SPI) are busy in the shader engine(s). |
|
Cycles |
Any of the Texture Addressing Unit (TA) are busy in the shader engine(s). |
|
Cycles |
Any of the Texture Cache Blocks (TCP/TCI/TCA/TCC) are busy. |
|
Cycles |
The Command Processor - Compute (CPC) is busy. |
|
Cycles |
The Command Processor - Fetcher (CPF) is busy. |
|
Cycles |
The Unified Translation Cache - Level 2 (UTCL2) block is busy. |
|
Cycles |
The Efficiency Arbiter (EA) block is busy. |
Command Processor (CP)#
The command processor counters are further classified into fetcher and compute.
Command Processor - Fetcher (CPF)#
CPF Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
One of the Compute UTCL1s is stalled waiting on translation. |
|
Cycles |
CPF idle |
|
Cycles |
CPF stall |
|
Cycles |
CPF TCIU interface busy |
|
Cycles |
CPF TCIU interface idle |
|
Cycles |
CPF TCIU interface is stalled waiting on free tags. |
Command Processor - Compute (CPC)#
CPC Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
CPC ME1 busy decoding packets |
|
Cycles |
One of the UTCL1s is stalled waiting on translation |
|
Cycles |
CPC busy |
|
Cycles |
CPC idle |
|
Cycles |
CPC stalled |
|
Cycles |
CPC TCIU interface busy |
|
Cycles |
CPC TCIU interface idle |
|
Cycles |
CPC UTCL2 interface busy |
|
Cycles |
CPC UTCL2 interface idle |
|
Cycles |
CPC UTCL2 interface stalled waiting |
|
Cycles |
CPC ME1 Processor busy |
Shader Processor Input (SPI)#
SPI Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
Number of clocks with outstanding waves |
|
Cycles |
Clock count enabled by perfcounter_start event |
|
Workgroups |
Total number of dispatched workgroups |
|
Wavefronts |
Total number of dispatched wavefronts |
|
Cycles |
Arb cycles with requests but no allocation (need to multiply this value by 4) |
|
Cycles |
Arb cycles with CSn req and no CSn alloc (need to multiply this value by 4) |
|
Cycles |
Arb cycles with CSn req and no CSn fits (need to multiply this value by 4) |
|
Cycles |
Cycles where CSn wants to req but does not fit in temp space |
|
SIMD-cycles |
Sum of SIMD where WAVE cannot take csn wave when not fits |
|
SIMD-cycles |
Sum of SIMD where VGPR cannot take csn wave when not fits |
|
SIMD-cycles |
Sum of SIMD where SGPR cannot take csn wave when not fits |
|
CUs |
Sum of CU where LDS cannot take csn wave when not fits |
|
CUs |
Sum of CU where BARRIER cannot take csn wave when not fits |
|
CUs |
Sum of CU where BULKY cannot take csn wave when not fits |
|
Cycles |
Cycles where csn wants to req but all CUs are at |
|
Cycles |
Number of clocks csn is stalled due to WAVE LIMIT |
|
Cycles |
Number of clocks to write CSC waves to VGPRs (need to multiply this value by 4) |
|
Cycles |
Number of clocks to write CSC waves to SGPRs (need to multiply this value by 4) |
Compute Unit#
The compute unit counters are further classified into instruction mix, MFMA operation counters, level counters, wavefront counters, wavefront cycle counters, local data share counters, and others.
Instruction Mix#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Instr |
Number of instructions issued |
|
Instr |
Number of VALU instructions issued, including MFMA |
|
Instr |
Number of VALU F16 Add instructions issued |
|
Instr |
Number of VALU F16 Multiply instructions issued |
|
Instr |
Number of VALU F16 FMA instructions issued |
|
Instr |
Number of VALU F16 Transcendental instructions issued |
|
Instr |
Number of VALU F32 Add instructions issued |
|
Instr |
Number of VALU F32 Multiply instructions issued |
|
Instr |
Number of VALU F32 FMA instructions issued |
|
Instr |
Number of VALU F32 Transcendental instructions issued |
|
Instr |
Number of VALU F64 Add instructions issued |
|
Instr |
Number of VALU F64 Multiply instructions issued |
|
Instr |
Number of VALU F64 FMA instructions issued |
|
Instr |
Number of VALU F64 Transcendental instructions issued |
|
Instr |
Number of VALU 32-bit integer instructions issued (signed or unsigned) |
|
Instr |
Number of VALU 64-bit integer instructions issued (signed or unsigned) |
|
Instr |
Number of VALU Conversion instructions issued |
|
Instr |
Number of 8-bit Integer MFMA instructions issued |
|
Instr |
Number of F16 MFMA instructions issued |
|
Instr |
Number of BF16 MFMA instructions issued |
|
Instr |
Number of F32 MFMA instructions issued |
|
Instr |
Number of F64 MFMA instructions issued |
|
Instr |
Number of MFMA instructions issued |
|
Instr |
Number of VMEM Write instructions issued |
|
Instr |
Number of VMEM Read instructions issued |
|
Instr |
Number of VMEM instructions issued, including both FLAT and Buffer instructions |
|
Instr |
Number of SALU instructions issued |
|
Instr |
Number of SMEM instructions issued |
|
Instr |
Number of SMEM instructions issued to normalize to match |
|
Instr |
Number of FLAT instructions issued |
|
Instr |
Number of FLAT instructions issued that read/write only from/to LDS |
|
Instr |
Number of LDS instructions issued |
|
Instr |
Number of GDS instructions issued |
|
Instr |
Number of EXP and GDS instructions excluding skipped export instructions issued |
|
Instr |
Number of Branch instructions issued |
|
Instr |
Number of SENDMSG instructions including s_endpgm issued |
|
Instr |
Number of VSkipped instructions issued |
MFMA Operation Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
IOP |
Number of 8-bit integer MFMA ops in unit of 512 |
|
FLOP |
Number of F16 floating MFMA ops in unit of 512 |
|
FLOP |
Number of BF16 floating MFMA ops in unit of 512 |
|
FLOP |
Number of F32 floating MFMA ops in unit of 512 |
|
FLOP |
Number of F64 floating MFMA ops in unit of 512 |
Level Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Count |
Accumulated counter sample value where accumulation takes place once every four cycles |
|
Count |
Accumulated counter sample value where accumulation takes place once every cycle |
|
Waves |
Number of inflight waves |
|
Instr |
Number of inflight VMEM instructions |
|
Instr |
Number of inflight SMEM instructions |
|
Instr |
Number of inflight LDS instructions |
|
Instr |
Number of inflight instruction fetches |
Wavefront Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Waves |
Number of wavefronts dispatch to SQs, including both new and restored wavefronts |
|
Waves |
Number of context-saved wavefronts |
|
Waves |
Number of context-restored wavefronts |
|
Waves |
Number of wavefronts with exactly 64 active threads sent to SQs |
|
Waves |
Number of wavefronts with less than 64 active threads sent to SQs |
|
Waves |
Number of wavefronts with less than 48 active threads sent to SQs |
|
Waves |
Number of wavefronts with less than 32 active threads sent to SQs |
|
Waves |
Number of wavefronts with less than 16 active threads sent to SQs |
Wavefront Cycle Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
Free-running SQ clocks |
|
Cycles |
Number of cycles while SQ reports it to be busy |
|
Qcycles |
Number of quad-cycles each CU is busy |
|
Cycles |
Number of cycles the MFMA ALU is busy |
|
Qcycles |
Number of quad-cycles spent by waves in the CUs |
|
Qcycles |
Number of quad-cycles spent waiting for anything |
|
Qcycles |
Number of quad-cycles spent waiting for an issued instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on an instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on a non-FLAT VMEM instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on an LDS instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on a VALU instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on an SCA instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on EXP or GDS instruction |
|
Qcycles |
Number of quad-cycles spent by each wave to work on an MISC instruction, including branch and sendmsg |
|
Qcycles |
Number of quad-cycles spent by each wave to work on a FLAT instruction |
|
Qcycles |
Number of quad-cycles spent to send addr and cmd data for VMEM Write instructions, including both FLAT and Buffer |
|
Qcycles |
Number of quad-cycles spent to send addr and cmd data for VMEM Read instructions, including both FLAT and Buffer |
|
Qcycles |
Number of quad-cycles spent to execute scalar memory reads |
|
Cycles |
Number of cycles spent to execute non-memory read scalar operations |
|
Cycles |
Number of thread-cycles spent to execute VALU operations |
Miscellaneous#
Local Data Share#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Count |
Number of fetch requests from L1I cache, in 32-byte width |
|
Threads |
Number of valid threads |
L1I and sL1D Caches#
L1I and sL1D Caches#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Req |
Number of L1I cache requests |
|
Count |
Number of L1I cache lookup-hits |
|
Count |
Number of L1I cache non-duplicate lookup-misses |
|
Count |
Number of d L1I cache duplicate lookup misses whose previous lookup miss on the same cache line is not fulfilled yet |
|
Req |
Number of sL1D cache requests |
|
Cycles |
Number of cycles while SQ input is valid but sL1D cache is not ready |
|
Count |
Number of sL1D cache lookup-hits |
|
Count |
Number of sL1D non-duplicate lookup-misses |
|
Count |
Number of sL1D duplicate lookup-misses |
|
Req |
Number of Read requests in a single 32-bit Data Word, DWORD (DW) |
|
Req |
Number of Read requests in 2 DW |
|
Req |
Number of Read requests in 4 DW |
|
Req |
Number of Read requests in 8 DW |
|
Req |
Number of Read requests in 16 DW |
|
Req |
Number of Atomic requests |
|
Req |
Number of L2 cache requests that were issued by instruction and constant caches |
|
Req |
Number of instruction cache line requests to L2 cache |
|
Req |
Number of data Read requests to the L2 cache |
|
Req |
Number of data Write requests to the L2 cache |
|
Req |
Number of data Atomic requests to the L2 cache |
|
Cycles |
Number of cycles while the valid requests to L2 Cache are stalled |
Vector L1 Cache Subsystem#
The vector L1 cache subsystem counters are further classified into texture addressing unit, texture data unit, vector L1D cache, and texture cache arbiter.
Texture Addressing Unit#
Texture Addressing Unit Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
TA busy cycles |
|
Instr |
Number of wavefront instructions |
|
Instr |
Number of Buffer wavefront instructions |
|
Instr |
Number of Buffer Read wavefront instructions |
|
Instr |
Number of Buffer Write wavefront instructions |
|
Instr |
Number of Buffer Atomic wavefront instructions |
|
Cycles |
Number of Buffer cycles, including Read and Write |
|
Cycles |
Number of coalesced Buffer read cycles |
|
Cycles |
Number of coalesced Buffer write cycles |
|
Cycles |
Number of cycles TA address is stalled by TCP |
|
Cycles |
Number of cycles TA data is stalled by TCP |
|
Cycles |
Number of cycles TA address is stalled by TD |
|
Instr |
Number of Flat wavefront instructions |
|
Instr |
Number of Flat Read wavefront instructions |
|
Instr |
Number of Flat Write wavefront instructions |
|
Instr |
Number of Flat Atomic wavefront instructions |
Texture Data Unit#
Texture Data Unit Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycle |
TD busy cycles |
|
Cycle |
Number of cycles TD is stalled by TCP |
|
Cycle |
Number of cycles TD is stalled by SPI |
|
Instr |
Number of wavefront instructions (Read/Write/Atomic) |
|
Instr |
Number of Write wavefront instructions |
|
Instr |
Number of Atomic wavefront instructions |
|
Instr |
Number of coalescable instructions |
Vector L1D Cache#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
Number of cycles/ vL1D interface clocks are turned on |
|
Cycles |
Number of cycles vL1D core clocks are turned on |
|
Cycles |
Number of cycles TD stalls vL1D |
|
Cycles |
Number of cycles TCR stalls vL1D |
|
Cycles |
Number of cycles tag RAM conflict stalls on a Read |
|
Cycles |
Number of cycles tag RAM conflict stalls on a Write |
|
Cycles |
Number of cycles tag RAM conflict stalls on an Atomic |
|
Cycles |
Number of cycles vL1D cache is stalled due to data pending from L2 Cache |
|
Req |
Number of wavefront instruction requests to vL1D |
|
Req |
Number of L1 volatile pixels/buffers from TA |
|
Req |
Number of vL1D accesses |
|
Req |
Number of vL1D Read accesses |
|
Req |
Number of vL1D Write accesses |
|
Req |
Number of vL1D Atomic with return |
|
Req |
Number of vL1D Atomic without return |
|
Count |
Number of vL1D Writebacks and Invalidates |
|
Req |
Number of address translation requests to UTCL1 |
|
Req |
Number of UTCL1 translation hits |
|
Req |
Number of UTCL1 translation misses |
|
Req |
Number of UTCL1 permission misses |
|
Req |
Number of vL1D cache accesses |
|
Cycles |
Accumulated wave access latency to vL1D over all wavefronts |
|
Cycles |
Accumulated vL1D-L2 request latency over all wavefronts for Reads and Atomics with return |
|
Cycles |
Accumulated vL1D-L2 request latency over all wavefronts for Writes and Atomics without return |
|
Req |
Number of Read requests to L2 Cache |
|
Req |
Number of Write requests to L2 Cache |
|
Req |
Number of Atomic requests to L2 Cache with return |
|
Req |
Number of Atomic requests to L2 Cache without return |
|
Req |
Number of NC Read requests to L2 Cache |
|
Req |
Number of UC Read requests to L2 Cache |
|
Req |
Number of CC Read requests to L2 Cache |
|
Req |
Number of RW Read requests to L2 Cache |
|
Req |
Number of NC Write requests to L2 Cache |
|
Req |
Number of UC Write requests to L2 Cache |
|
Req |
Number of CC Write requests to L2 Cache |
|
Req |
Number of RW Write requests to L2 Cache |
|
Req |
Number of NC Atomic requests to L2 Cache |
|
Req |
Number of UC Atomic requests to L2 Cache |
|
Req |
Number of CC Atomic requests to L2 Cache |
|
Req |
Number of RW Atomic requests to L2 Cache |
Texture Cache Arbiter (TCA)#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycles |
TCA cycles |
|
Cycles |
Number of cycles TCA has a pending request |
L2 Cache Access#
L2 Cache Access Counters#
Hardware Counter |
Unit |
Definition |
---|---|---|
|
Cycle |
L2 Cache free-running clocks |
|
Cycle |
L2 Cache busy cycles |
|
Req |
Number of L2 Cache requests |
|
Req |
Number of L2 Cache Streaming requests |
|
Req |
Number of NC requests |
|
Req |
Number of UC requests |
|
Req |
Number of CC requests |
|
Req |
Number of RW requests |
|
Req |
Number of L2 Cache probe requests |
|
Req |
Number of external probe requests with |
|
Req |
Number of L2 Cache Read requests |
|
Req |
Number of L2 Cache Write requests |
|
Req |
Number of L2 Cache Atomic requests |
|
Req |
Number of L2 Cache lookup-hits |
|
Req |
Number of L2 cache lookup-misses |
|
Req |
Number of lines written back to main memory, including writebacks of dirty lines and uncached Write/Atomic requests |
|
Req |
Total number of 32-byte and 64-byte Write requests to EA |
|
Req |
Total number of 64-byte Write requests to EA |
|
Req |
Number of 32-byte Write/Atomic going over the TC_EA_wrreq interface due to uncached traffic. Note that CC mtypes can produce uncached requests, and those are included in this. A 64-byte request is counted as 2. |
|
Cycles |
Number of cycles a Write request was stalled |
|
Cycles |
Number of cycles an EA Write request runs out of IO credits |
|
Cycles |
Number of cycles an EA Write request runs out of GMI credits |
|
Cycles |
Number of cycles an EA Write request runs out of DRAM credits |
|
Cycles |
Number of cycles the L2 Cache reaches maximum number of pending EA Write requests |
|
Req |
Accumulated number of L2 Cache-EA Write requests in flight |
|
Req |
Number of 32-byte and 64-byte Atomic requests to EA |
|
Req |
Accumulated number of L2 Cache-EA Atomic requests in flight |
|
Req |
Total number of 32-byte and 64-byte Read requests to EA |
|
Req |
Total number of 32-byte Read requests to EA |
|
Req |
Number of 32-byte L2 Cache-EA Read due to uncached traffic. A 64-byte request is counted as 2. |
|
Cycles |
Number of cycles Read request interface runs out of IO credits |
|
Cycles |
Number of cycles Read request interface runs out of GMI credits |
|
Cycles |
Number of cycles Read request interface runs out of DRAM credits |
|
Req |
Accumulated number of L2 Cache-EA Read requests in flight |
|
Req |
Number of 32-byte and 64-byte Read requests to HBM |
|
Req |
Number of 32-byte and 64-byte Write requests to HBM |
|
Cycles |
Number of cycles the normal request pipeline in the tag was stalled for any reason |
|
Req |
Number of L2 cache normal writeback |
|
Req |
Number of instruction-triggered writeback requests |
|
Req |
Number of L2 cache normal evictions |
|
Req |
Number of instruction-triggered eviction requests |
MI200 Derived Metrics List#
Derived Metrics on MI200 GPUs#
Derived Metric |
Description |
---|---|
|
The average number of vector fetch instructions from the video memory executed per work-item (affected by flow control). Excludes FLAT instructions that fetch from video memory |
|
The average number of vector write instructions to the video memory executed per work-item (affected by flow control). Excludes FLAT instructions that write to video memory |
|
The average number of FLAT instructions that read from or write to the video memory executed per work item (affected by flow control). Includes FLAT instructions that read from or write to scratch |
|
The average number of LDS read/write instructions executed per work item (affected by flow control). Excludes FLAT instructions that read from or write to LDS |
|
The average number of FLAT instructions that read or write to LDS executed per work item (affected by flow control) |
|
The percentage of active vector ALU threads in a wave. A lower number can mean either more thread divergence in a wave or that the work-group size is not a multiple of 64. Value range: 0% (bad), 100% (ideal - no thread divergence) |
|
The percentage of GPU time vector ALU instructions are processed. Value range: 0% (bad) to 100% (optimal) |
|
The percentage of GPU time scalar ALU instructions are processed. Value range: 0% (bad) to 100% (optimal) |
|
The total number of effective 32B write transactions to the memory |
|
The percentage of fetch, write, atomic, and other instructions that hit the data in L2 cache. Value range: 0% (no hit) to 100% (optimal) |
|
The percentage of GPU time the memory unit is stalled. Try reducing the number or size of fetches and writes if possible. Value range: 0% (optimal) to 100% (bad) |
|
The percentage of GPU time the write unit is stalled. Value range: 0% to 100% (bad) |
|
The percentage of GPU time LDS is stalled by bank conflicts. Value range: 0% (optimal) to 100% (bad) |
Abbreviations#
MI200 Abbreviations#
Abbreviation |
Meaning |
---|---|
|
Arithmetic Logic Unit |
|
Arbiter |
|
Brain Floating Point – 16 bits |
|
Coherently Cached |
|
Command Processor |
|
Command Processor – Compute |
|
Command Processor – Fetcher |
|
Compute Shader |
|
Compute Shader Controller |
|
Compute Shader, the n-th pipe |
|
Compute Unit |
|
32-bit Data Word, DWORD |
|
Efficiency Arbiter |
|
Half Precision Floating Point |
|
FLAT instructions allow read/write/atomic access to a generic memory address pointer, which can resolve to any of the following physical memories: |
|
Fused Multiply Add |
|
Global Data Share |
|
Graphics Register Bus Manager |
|
High Bandwidth Memory |
|
Instructions |
|
Integer Operation |
|
Level-2 Cache |
|
Local Data Share |
|
Micro Engine, running packet processing firmware on CPC |
|
Matrix Fused Multiply Add |
|
Noncoherently Cached |
|
Coherently Cached with Write |
|
Scalar ALU |
|
Scalar GPR |
|
Single Instruction Multiple Data |
|
Scalar Level-1 Data Cache |
|
Scalar Memory |
|
Shader Processor Input |
|
Sequencer |
|
Texture Addressing Unit |
|
Texture Cache |
|
Texture Cache Arbiter |
|
Texture Cache per Channel, known as L2 Cache |
|
Texture Cache Interface Unit, Command Processor (CP)’s interface to memory system |
|
Texture Cache per Pipe, known as vector L1 Cache |
|
Texture Cache Router |
|
Texture Data Unit |
|
Uncached |
|
Unified Translation Cache – Level 1 |
|
Unified Translation Cache – Level 2 |
|
Vector ALU |
|
Vector GPR |
|
Vector Level -1 Data Cache |
|
Vector Memory |