Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
ddfe401
add threshold clamping function + parse in parser.py (with I/O)
jamessiddeley-amd Dec 18, 2025
104604e
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Dec 18, 2025
6772970
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Dec 22, 2025
c542971
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Dec 29, 2025
da3cb4e
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Dec 31, 2025
8cd9131
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 5, 2026
339d9f6
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 5, 2026
eef2772
implemented hybrid threshold solution
jamessiddeley-amd Jan 5, 2026
d512ad4
update changelog
jamessiddeley-amd Jan 5, 2026
a733fcd
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 7, 2026
7ebcdb8
Merge develop: resolve conflict in .config_hashes.json
jamessiddeley-amd Jan 9, 2026
ff757a8
removed absolute threshold hybrid approach; restored relative thresho…
jamessiddeley-amd Jan 9, 2026
a44779e
edited warning msg, threshold -> 1%
jamessiddeley-amd Jan 9, 2026
4f5ae90
update changelog
jamessiddeley-amd Jan 9, 2026
29c16c0
added 2 test cases
jamessiddeley-amd Jan 9, 2026
75a670e
ran master workflow yaml config files
jamessiddeley-amd Jan 9, 2026
c71ed41
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 12, 2026
917dfdf
added to FAQ
jamessiddeley-amd Jan 12, 2026
ad816d3
Revert "ran master workflow yaml config files"
jamessiddeley-amd Jan 12, 2026
62cd454
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 13, 2026
5f10c38
update FAQ
jamessiddeley-amd Jan 13, 2026
bed5039
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 14, 2026
86d3405
Merge branch 'develop' of https://github.com/ROCm/rocm-systems into u…
jamessiddeley-amd Jan 14, 2026
9edea38
update config hashes
jamessiddeley-amd Jan 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions projects/rocprofiler-compute/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ Full documentation for ROCm Compute Profiler is available at [https://rocm.docs.

### Resolved issues

* Implemented `NOISE_CLAMP` for L2 cache metrics to handle negative values from multi-pass profiling variance:
* Negative values are clamped to 0 (eliminates physically impossible negative counts)
* Warnings issued only when relative error exceeds 1% (anomaly detection)
* Added unit tests for noise clamping logic (`@pytest.mark.noise_clamp`)
* Added FAQ documentation explaining the "Counter variance corrected" warning

* Fixed the meaning of --dispatch option in profile mode in argparser to convey the fact that it control which iterations of the kernel to profile and not which dispatch ids to profile.

* The meaning of --dispatch option in analyze is still the same which is which dispatch ids to analyze
Expand Down
23 changes: 23 additions & 0 deletions projects/rocprofiler-compute/docs/reference/faq.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,29 @@ This dual-issue capability can be further investigated via:

When ROCm Compute Profiler detects values exceeding their theoretical peaks, it displays a warning message indicating this behavior.

What does "Counter variance corrected" mean?
=============================================

When profiling, you may see a warning like:

.. code-block:: text

WARNING: Counter variance corrected: 5 value(s) adjusted (max 2.3% deviation from multi-pass collection).

This indicates that ROCm Compute Profiler detected and corrected negative values in derived metrics. This is expected behavior, not an error.

**Why does this happen?**

Hardware performance counters are collected across multiple profiling passes. When calculating derived metrics that involve subtraction (such as ``A - B``), small run-to-run variance can occasionally produce negative results. Since negative event counts are physically impossible, these values are automatically clamped to zero.

**When should I be concerned?**

* **Deviation < 1%**: Normal hardware variance. No action needed.
* **Deviation ≥ 1%**: The warning is displayed. Results are still valid, but variance was higher than typical.
* **Deviation > 5%**: Consider investigating profiling conditions (system load, thermal throttling, non-deterministic application behavior, etc.).

This correction primarily affects L2 cache metrics where counter subtraction is used to derive values like remote read/write traffic, but run-to-run variations may impact the accuracy of a number of derived metrics in ROCm Compute Profiler.

How can I SSH tunnel in MobaXterm?
==================================

Expand Down
1 change: 1 addition & 0 deletions projects/rocprofiler-compute/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,5 @@ markers = [
"iteration_multiplexing_1",
"iteration_multiplexing_2",
"iteration_multiplexing_stochastic",
"noise_clamp",
]
Original file line number Diff line number Diff line change
Expand Up @@ -312,14 +312,14 @@ Panel Config:
max: MAX((TCC_EA0_RDREQ_DRAM_sum / $denom))
unit: (Req + $normUnit)
Remote Read:
avg: AVG((MAX((TCC_EA0_RDREQ_sum - TCC_EA0_RDREQ_DRAM_sum), 0) / $denom))
min: MIN((MAX((TCC_EA0_RDREQ_sum - TCC_EA0_RDREQ_DRAM_sum), 0) / $denom))
max: MAX((MAX((TCC_EA0_RDREQ_sum - TCC_EA0_RDREQ_DRAM_sum), 0) / $denom))
avg: AVG((NOISE_CLAMP((TCC_EA0_RDREQ_sum - TCC_EA0_RDREQ_DRAM_sum), TCC_EA0_RDREQ_sum) / $denom))
min: MIN((NOISE_CLAMP((TCC_EA0_RDREQ_sum - TCC_EA0_RDREQ_DRAM_sum), TCC_EA0_RDREQ_sum) / $denom))
max: MAX((NOISE_CLAMP((TCC_EA0_RDREQ_sum - TCC_EA0_RDREQ_DRAM_sum), TCC_EA0_RDREQ_sum) / $denom))
unit: (Req + $normUnit)
Write and Atomic (32B):
avg: AVG(MAX(((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_64B_sum) / $denom), 0))
min: MIN(MAX(((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_64B_sum) / $denom), 0))
max: MAX(MAX(((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_64B_sum) / $denom), 0))
avg: AVG(NOISE_CLAMP(((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_64B_sum) / $denom), TCC_EA0_WRREQ_sum))
min: MIN(NOISE_CLAMP(((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_64B_sum) / $denom), TCC_EA0_WRREQ_sum))
max: MAX(NOISE_CLAMP(((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_64B_sum) / $denom), TCC_EA0_WRREQ_sum))
unit: (Req + $normUnit)
Write and Atomic (Uncached):
avg: AVG((TCC_EA0_WR_UNCACHED_32B_sum / $denom))
Expand All @@ -337,9 +337,9 @@ Panel Config:
max: MAX((TCC_EA0_WRREQ_DRAM_sum / $denom))
unit: (Req + $normUnit)
Remote Write and Atomic:
avg: AVG((MAX((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_DRAM_sum), 0) / $denom))
min: MIN((MAX((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_DRAM_sum), 0) / $denom))
max: MAX((MAX((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_DRAM_sum), 0) / $denom))
avg: AVG((NOISE_CLAMP((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_DRAM_sum), TCC_EA0_WRREQ_sum) / $denom))
min: MIN((NOISE_CLAMP((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_DRAM_sum), TCC_EA0_WRREQ_sum) / $denom))
max: MAX((NOISE_CLAMP((TCC_EA0_WRREQ_sum - TCC_EA0_WRREQ_DRAM_sum), TCC_EA0_WRREQ_sum) / $denom))
unit: (Req + $normUnit)
Atomic:
avg: AVG((TCC_EA0_ATOMIC_sum / $denom))
Expand Down
Loading