From 8e1d23422bdff76d624d87eef90988d0c77e6774 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Thu, 15 Dec 2022 10:44:31 -0600 Subject: [PATCH 01/90] update version for dev branch Signed-off-by: Karl W. Schulz --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 90a27f9cea..af0b7ddbff 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.5 +1.0.6 From 1a83a04685277f3bfe9bc62de86fa40b0b7c1134 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Thu, 15 Dec 2022 11:02:18 -0600 Subject: [PATCH 02/90] Using xml configs from rocprofiler Signed-off-by: Karl W. Schulz --- .../perfmon/gfx908_metrics.xml | 5731 ----------------- .../perfmon/gfx90a_metrics.xml | 56 - src/omniperf_analyze/perfmon/metrics.xml | 13 - 3 files changed, 5800 deletions(-) delete mode 100644 src/omniperf_analyze/perfmon/gfx908_metrics.xml delete mode 100644 src/omniperf_analyze/perfmon/gfx90a_metrics.xml delete mode 100644 src/omniperf_analyze/perfmon/metrics.xml diff --git a/src/omniperf_analyze/perfmon/gfx908_metrics.xml b/src/omniperf_analyze/perfmon/gfx908_metrics.xml deleted file mode 100644 index 8db51ecf9c..0000000000 --- a/src/omniperf_analyze/perfmon/gfx908_metrics.xml +++ /dev/null @@ -1,5731 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # SDMA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/omniperf_analyze/perfmon/gfx90a_metrics.xml b/src/omniperf_analyze/perfmon/gfx90a_metrics.xml deleted file mode 100644 index 79354eeb81..0000000000 --- a/src/omniperf_analyze/perfmon/gfx90a_metrics.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/omniperf_analyze/perfmon/metrics.xml b/src/omniperf_analyze/perfmon/metrics.xml deleted file mode 100644 index d4b3355da2..0000000000 --- a/src/omniperf_analyze/perfmon/metrics.xml +++ /dev/null @@ -1,13 +0,0 @@ -#include "gfx90a_metrics.xml" - - - - - - - - - - - - From 0f2af1e4ffc361e46c3a25499e60d02da93f0025 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Fri, 16 Dec 2022 17:51:03 -0500 Subject: [PATCH 03/90] Add better error detection when local ROCM installation is incomplete. Closes #56. Signed-off-by: Karl W. Schulz --- src/utils/specs.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/utils/specs.py b/src/utils/specs.py index 2ae31481a5..bf2d49a7c8 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -24,6 +24,7 @@ import os import re +import sys import socket import subprocess @@ -174,12 +175,26 @@ def get_machine_specs(devicenum): "version-libs", "version-utils", ] + + rocmFound = False for itr in version_loc: _path = os.path.join(os.getenv("ROCM_PATH", "/opt/rocm"), ".info", itr) if os.path.exists(_path): + print(_path) rocm_ver = path(_path).read_text() + rocmFound = True break + if not rocmFound: + _rocm_path = os.getenv("ROCM_PATH", "/opt/rocm") + print("Error: Unable to detect a complete local ROCm installation.") + print( + "\nThe expected %s/.info/ versioning directory is missing. Please" + % _rocm_path + ) + print("ensure you have valid ROCm installation.") + sys.exit(1) + ( gpu_id, L1, From ae9c284d03c878784d677aff0e0b9387e0e39385 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Tue, 20 Dec 2022 09:08:46 -0600 Subject: [PATCH 04/90] Addition of a github action to build and publish omniperf documentation using sphinx and a rtd theme. This action is triggered via documentation-related changes landed on the "main" branch (#22). Signed-off-by: Karl W. Schulz --- .github/workflows/docs.yml | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000000..5d7789692c --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: Documentation + +on: + push: + branches: ["main"] + paths: + - 'src/docs' + - '.github/workflows/docs.yml' + - 'VERSION' + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Build job + build: + runs-on: ubuntu-latest + container: + image: sphinxdoc/sphinx + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Additional python packages + run: pip3 install recommonmark myst_parser sphinx_rtd_theme + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Build html + run: | + cd src/docs + make html + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ./src/docs/_build/html + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 + From ebf3eb6dc48fa7a486304a77ea0ac7c32f249e87 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Wed, 21 Dec 2022 10:31:31 -0500 Subject: [PATCH 05/90] Allow user to supply rocm version via ROCM_VER env variable if not autodetected due to missing .info directory (#56). Signed-off-by: Karl W. Schulz --- src/utils/specs.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/utils/specs.py b/src/utils/specs.py index bf2d49a7c8..696f850c0e 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -186,14 +186,23 @@ def get_machine_specs(devicenum): break if not rocmFound: - _rocm_path = os.getenv("ROCM_PATH", "/opt/rocm") - print("Error: Unable to detect a complete local ROCm installation.") - print( - "\nThe expected %s/.info/ versioning directory is missing. Please" - % _rocm_path - ) - print("ensure you have valid ROCm installation.") - sys.exit(1) + # check if ROCM_VER is supplied externally + ROCM_VER_USER = os.getenv("ROCM_VER") + if ROCM_VER_USER is not None: + print( + "Overriding missing ROCm version detection with ROCM_VER = %s" + % ROCM_VER_USER + ) + rocm_ver = ROCM_VER_USER + else: + _rocm_path = os.getenv("ROCM_PATH", "/opt/rocm") + print("Error: Unable to detect a complete local ROCm installation.") + print( + "\nThe expected %s/.info/ versioning directory is missing. Please" + % _rocm_path + ) + print("ensure you have valid ROCm installation.") + sys.exit(1) ( gpu_id, From ce20cfb01acd19d1940493cb66d39fc149d8df36 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 3 Jan 2023 11:28:13 -0600 Subject: [PATCH 06/90] Check validity of workload name at profile stage #58 Signed-off-by: colramos425 --- src/omniperf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/omniperf b/src/omniperf index f32b7abbb5..f45ddcedc0 100755 --- a/src/omniperf +++ b/src/omniperf @@ -334,6 +334,10 @@ def omniperf_profile(args, VER): parse.print_help(sys.stderr) sys.exit(1) + #Verify valid name + if args.name.find(".") != -1 or args.name.find("-") != -1: + raise ValueError("'-' and '.' are not permited in workload name", args.name) + # Basic Info print(PROG, "ver: ", VER) print("Path: ", args.path) From 0cacaa9c69d52639df261784f639468b7aa1f964 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 3 Jan 2023 16:05:31 -0600 Subject: [PATCH 07/90] Update timestamps in --roof-only logic #61 Signed-off-by: colramos425 --- src/omniperf | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/omniperf b/src/omniperf index f45ddcedc0..d8a8ef3d4e 100755 --- a/src/omniperf +++ b/src/omniperf @@ -298,6 +298,21 @@ def characterize_app(path, cmd, verbose): for fname in glob.glob(workload_dir + "/perfmon/*.txt"): print(fname) run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose) + # run again with timestamps + run_subprocess( + [ + rocprof_cmd, + # "-i", fname, + # "-m", perfmon_dir + "/" + "metrics.xml", + "--timestamp", + "on", + "-o", + workload_dir + "/" + "timestamps.csv", + '"' + app_cmd + '"', + ] + ) + # Update pmc_perf.csv timestamps + replace_timestamps(workload_dir) ################################################ From cf49d1e7a42155c2fb0f66ef0f4f061b68814ace Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 3 Jan 2023 16:13:30 -0600 Subject: [PATCH 08/90] Fix naming issue in standalone roof pdf Signed-off-by: colramos425 --- src/utils/plot_roofline.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/utils/plot_roofline.py b/src/utils/plot_roofline.py index d1d0958cc7..834d33455c 100644 --- a/src/utils/plot_roofline.py +++ b/src/utils/plot_roofline.py @@ -650,7 +650,12 @@ def empirical_roof(args): dtype = plot_roof(inputs, roof_data) # Also returns chosen dtype plot_application(inputs, args.verbose) - filename = IMGNAME + "_gpu-" + str(inputs["device"]) + "_{}".format(dtype) + ".pdf" + if inputs["device"] == -1: + dev_id="ALL" + else: + dev_id=str(inputs["device"]) + + filename = IMGNAME + "_gpu-" + dev_id + "_{}".format(dtype) + ".pdf" full_path = os.path.abspath(inputs["path"]) path_to_output = full_path + "/" + filename From 796c495d0b41bb63f62220278bd4fdca323a463b Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 3 Jan 2023 16:25:06 -0600 Subject: [PATCH 09/90] Don't forget formatting... Signed-off-by: colramos425 --- src/utils/plot_roofline.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/plot_roofline.py b/src/utils/plot_roofline.py index 834d33455c..a6e9d2da23 100644 --- a/src/utils/plot_roofline.py +++ b/src/utils/plot_roofline.py @@ -651,9 +651,9 @@ def empirical_roof(args): plot_application(inputs, args.verbose) if inputs["device"] == -1: - dev_id="ALL" + dev_id = "ALL" else: - dev_id=str(inputs["device"]) + dev_id = str(inputs["device"]) filename = IMGNAME + "_gpu-" + dev_id + "_{}".format(dtype) + ".pdf" From 40eeb3b46d91c7d57f8b4f761098b6ea5d70c959 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Thu, 5 Jan 2023 11:46:12 -0600 Subject: [PATCH 10/90] Merge CI workflows into a single Ubuntu 20.04 action Signed-off-by: colramos425 --- .github/workflows/analyze-workloads.yml | 52 ------------------- ...{analyze-commands.yml => ubuntu-focal.yml} | 8 ++- 2 files changed, 6 insertions(+), 54 deletions(-) delete mode 100644 .github/workflows/analyze-workloads.yml rename .github/workflows/{analyze-commands.yml => ubuntu-focal.yml} (88%) diff --git a/.github/workflows/analyze-workloads.yml b/.github/workflows/analyze-workloads.yml deleted file mode 100644 index ef38abfdde..0000000000 --- a/.github/workflows/analyze-workloads.yml +++ /dev/null @@ -1,52 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: analyze-workloads - - -# Controls when the workflow will run -on: - push: - branches: [ main, dev ] - pull_request: - branches: [ main, dev ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - container: - image: rocm/dev-ubuntu-22.04:5.3 - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Cancel any previous runs - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.11.0 - - name: Install baseline OS dependencies - run: | - sudo apt-get update - sudo apt-get install -y git - sudo apt-get install -y python3-pip - sudo apt-get install -y cmake - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: recursive - token: ${{ secrets.GH_PAT }} - - name: Install Python prereqs - run: | - python3 -m pip install -r requirements.txt - python3 -m pip install pyinstaller pytest pytest-cov - - name: Configure and install - run: | - mkdir build - cd build - cmake -DCMAKE_INSTALL_PREFIX=/opt/omniperf .. - make install - - name: run ctest - run: | - cd build - ctest --verbose -R test_analyze_workloads test_saved_analysis diff --git a/.github/workflows/analyze-commands.yml b/.github/workflows/ubuntu-focal.yml similarity index 88% rename from .github/workflows/analyze-commands.yml rename to .github/workflows/ubuntu-focal.yml index 786195916a..35168276f1 100644 --- a/.github/workflows/analyze-commands.yml +++ b/.github/workflows/ubuntu-focal.yml @@ -1,6 +1,6 @@ # This is a basic workflow to help you get started with Actions -name: analyze-commands +name: Ubuntu 20.04 # Controls when the workflow will run on: @@ -45,7 +45,11 @@ jobs: cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/omniperf .. make install - - name: Run ctest + - name: CTEST- Analyze Commands run: | cd build ctest --verbose -R test_analyze_commands + - name: CTEST- Analyze Workloads + run: | + cd build + ctest --verbose -R test_analyze_workloads test_saved_analysis From 2a07759bdd75676c7275fc4049cebc507b5392ab Mon Sep 17 00:00:00 2001 From: colramos425 Date: Thu, 5 Jan 2023 11:48:59 -0600 Subject: [PATCH 11/90] Temp tesing of CI on ci-reorg branch Signed-off-by: colramos425 --- .github/workflows/ubuntu-focal.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ubuntu-focal.yml b/.github/workflows/ubuntu-focal.yml index 35168276f1..0cc3ce6e94 100644 --- a/.github/workflows/ubuntu-focal.yml +++ b/.github/workflows/ubuntu-focal.yml @@ -5,9 +5,9 @@ name: Ubuntu 20.04 # Controls when the workflow will run on: push: - branches: [ main, dev ] + branches: [ main, dev, ci-reorg ] pull_request: - branches: [ main, dev ] + branches: [ main, dev, ci-reorg ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From b4a63461037c3a11b88ad7c81132e1a9937a8671 Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Thu, 5 Jan 2023 13:03:37 -0600 Subject: [PATCH 12/90] Add Ubuntu 20.04 workflow badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8bfa56510b..f6afd1d6b0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Ubuntu 20.04](https://github.com/AMDResearch/omniperf/actions/workflows/ubuntu-focal.yml/badge.svg)](https://github.com/AMDResearch/omniperf/actions/workflows/ubuntu-focal.yml) [![Docs](https://github.com/AMDResearch/omniperf/actions/workflows/docs.yml/badge.svg)](https://amdresearch.github.io/omniperf/) [![DOI](https://zenodo.org/badge/561919887.svg)](https://zenodo.org/badge/latestdoi/561919887) From b58ca9b59d2c11356619db34595bd4819003364d Mon Sep 17 00:00:00 2001 From: colramos425 Date: Thu, 5 Jan 2023 13:07:35 -0600 Subject: [PATCH 13/90] Revert temp branch testing Signed-off-by: colramos425 --- .github/workflows/ubuntu-focal.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ubuntu-focal.yml b/.github/workflows/ubuntu-focal.yml index 0cc3ce6e94..d9683af8c1 100644 --- a/.github/workflows/ubuntu-focal.yml +++ b/.github/workflows/ubuntu-focal.yml @@ -5,9 +5,9 @@ name: Ubuntu 20.04 # Controls when the workflow will run on: push: - branches: [ main, dev, ci-reorg ] + branches: [ main, dev ] pull_request: - branches: [ main, dev, ci-reorg ] + branches: [ main, dev ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -45,11 +45,11 @@ jobs: cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/omniperf .. make install - - name: CTEST- Analyze Commands + - name: CTest- Analyze Commands run: | cd build ctest --verbose -R test_analyze_commands - - name: CTEST- Analyze Workloads + - name: CTest- Analyze Workloads run: | cd build ctest --verbose -R test_analyze_workloads test_saved_analysis From 3e4c9a2265678bf62cf3ed54c40729b7edefce2a Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 6 Jan 2023 12:37:31 -0600 Subject: [PATCH 14/90] Test new RHEL 8 based CI pipeline Signed-off-by: colramos425 --- .github/workflows/opensuse.yml | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .github/workflows/opensuse.yml diff --git a/.github/workflows/opensuse.yml b/.github/workflows/opensuse.yml new file mode 100644 index 0000000000..18335d6f42 --- /dev/null +++ b/.github/workflows/opensuse.yml @@ -0,0 +1,58 @@ +# This is a basic workflow to help you get started with Actions + +name: RHEL 8 + +# Controls when the workflow will run +on: + push: + branches: [ main, dev, ci-reorg ] + pull_request: + branches: [ main, dev, ci-reorg ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + container: + image: colramos/target-images:rhel8 + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Cancel any previous runs + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.11.0 + - name: Install baseline OS dependencies + run: | + sudo yum -y update + sudo yum -y install git + sudo yum -y install python39 + sudo yum -y install cmake3 + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: recursive + token: ${{ secrets.GH_PAT }} + - name: Upgrade Python to 3.9 + run: | + + - name: Install Python prereqs + run: | + python3.9 -m pip install -r requirements.txt + python3.9 -m pip install pyinstaller pytest pytest-cov mock + - name: Configure and install + run: | + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=/opt/omniperf .. + make install + - name: CTest- Analyze Commands + run: | + cd build + ctest --verbose -R test_analyze_commands + - name: CTest- Analyze Workloads + run: | + cd build + ctest --verbose -R test_analyze_workloads test_saved_analysis From 6b1e4687168f7efea2dfe24223875fe3a2d070b9 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 6 Jan 2023 12:42:07 -0600 Subject: [PATCH 15/90] Change dependency install permissions Signed-off-by: colramos425 --- .github/workflows/opensuse.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/opensuse.yml b/.github/workflows/opensuse.yml index 18335d6f42..2521c4722b 100644 --- a/.github/workflows/opensuse.yml +++ b/.github/workflows/opensuse.yml @@ -26,10 +26,10 @@ jobs: uses: styfle/cancel-workflow-action@0.11.0 - name: Install baseline OS dependencies run: | - sudo yum -y update - sudo yum -y install git - sudo yum -y install python39 - sudo yum -y install cmake3 + yum -y update + yum -y install git + yum -y install python39 + yum -y install cmake3 - name: Checkout uses: actions/checkout@v3 with: From 23377548e73447fffd1c79b2d920fc4f7b14a58c Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 6 Jan 2023 13:15:58 -0600 Subject: [PATCH 16/90] Remove test on temp dev branch Signed-off-by: colramos425 --- .github/workflows/opensuse.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/opensuse.yml b/.github/workflows/opensuse.yml index 2521c4722b..b7d0208ef4 100644 --- a/.github/workflows/opensuse.yml +++ b/.github/workflows/opensuse.yml @@ -5,9 +5,9 @@ name: RHEL 8 # Controls when the workflow will run on: push: - branches: [ main, dev, ci-reorg ] + branches: [ main, dev ] pull_request: - branches: [ main, dev, ci-reorg ] + branches: [ main, dev ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -35,9 +35,6 @@ jobs: with: submodules: recursive token: ${{ secrets.GH_PAT }} - - name: Upgrade Python to 3.9 - run: | - - name: Install Python prereqs run: | python3.9 -m pip install -r requirements.txt From d5c28f5348910223404d8d9a3bd00ef94a919b97 Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Fri, 6 Jan 2023 13:17:02 -0600 Subject: [PATCH 17/90] Add RHEL 8 status badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f6afd1d6b0..90b8c3547e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ [![Ubuntu 20.04](https://github.com/AMDResearch/omniperf/actions/workflows/ubuntu-focal.yml/badge.svg)](https://github.com/AMDResearch/omniperf/actions/workflows/ubuntu-focal.yml) +[![RHEL 8](https://github.com/AMDResearch/omniperf/actions/workflows/opensuse.yml/badge.svg)](https://github.com/AMDResearch/omniperf/actions/workflows/opensuse.yml) [![Docs](https://github.com/AMDResearch/omniperf/actions/workflows/docs.yml/badge.svg)](https://amdresearch.github.io/omniperf/) [![DOI](https://zenodo.org/badge/561919887.svg)](https://zenodo.org/badge/latestdoi/561919887) From 7d719f5624f8caf57ca7353de0b44d578a5c08b7 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 6 Jan 2023 15:33:52 -0600 Subject: [PATCH 18/90] Rename GitHub action Signed-off-by: colramos425 --- .github/workflows/{opensuse.yml => rhel-8.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{opensuse.yml => rhel-8.yml} (100%) diff --git a/.github/workflows/opensuse.yml b/.github/workflows/rhel-8.yml similarity index 100% rename from .github/workflows/opensuse.yml rename to .github/workflows/rhel-8.yml From 3f6f0a2b1057bbafdb902c61b77018abc6ba501a Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 9 Jan 2023 09:10:14 -0500 Subject: [PATCH 19/90] Remove debug print introduced in #57 Signed-off-by: Karl W. Schulz --- src/utils/specs.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/specs.py b/src/utils/specs.py index 696f850c0e..1bb63c6efe 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -180,7 +180,6 @@ def get_machine_specs(devicenum): for itr in version_loc: _path = os.path.join(os.getenv("ROCM_PATH", "/opt/rocm"), ".info", itr) if os.path.exists(_path): - print(_path) rocm_ver = path(_path).read_text() rocmFound = True break From 42edb1c559c8fade9a5d75da273d4b2144cb8877 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Mon, 9 Jan 2023 16:52:27 -0600 Subject: [PATCH 20/90] New GUI graphics for L1 and L2 panels Signed-off-by: colramos425 --- .../configs/gfx906/1600_L1_cache.yaml | 58 +++++++++++++----- .../configs/gfx906/1700_L2_cache.yaml | 16 +++++ .../configs/gfx908/1600_L1_cache.yaml | 52 ++++++++++++---- .../configs/gfx908/1700_L2_cache.yaml | 16 +++++ .../configs/gfx90a/1600_L1_cache.yaml | 52 ++++++++++++---- .../configs/gfx90a/1700_L2_cache.yaml | 16 +++++ src/omniperf_analyze/utils/gui.py | 61 ++++++++++++++++++- 7 files changed, 227 insertions(+), 44 deletions(-) diff --git a/src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml b/src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml index a25e831de3..adcd9f2ad2 100644 --- a/src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml +++ b/src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml @@ -237,81 +237,107 @@ Panel Config: id: 1604 title: L1D - L2 Transactions header: + metric: Metric xfer: Xfer - mean: Mean + coherency: Coherency + avg: Avg min: Min max: Max unit: Unit tips: Tips metric: NC - Read: - mean: None # No perf counter + xfer: Read + coherency: NC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: UC - Read: - mean: None # No perf counter + xfer: Read + coherency: UC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: CC - Read: - mean: None # No perf counter + xfer: Read + coherency: CC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: RW - Read: - mean: None # No perf counter + xfer: Read + coherency: RW + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: RW - Write: - mean: None # No perf counter + xfer: Write + coherency: RW + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: NC + avg: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: - NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) - min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) - max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + CC - Write: + xfer: Write + coherency: CC + avg: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + min: MIN((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + max: MAX((TCP_TCC_CC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Write: - mean: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: UC + avg: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: NC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: UC - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: UC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: CC - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: CC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: RW - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: RW + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) diff --git a/src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml b/src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml index 6133fc88f1..53235ca148 100644 --- a/src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml +++ b/src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml @@ -294,6 +294,8 @@ Panel Config: title: L2 - EA Interface Stalls header: metric: Metric + type: Type + transaction: Transaction avg: Avg min: Min max: Max @@ -301,42 +303,56 @@ Panel Config: tips: Tips metric: Read - Remote Socket Stall: + type: Remote Socket Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - Peer GCD Stall: + type: Peer GCD Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - HBM Stall: + type: HBM Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Remote Socket Stall: + type: Remote Socket Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Peer GCD Stall: + type: Peer GCD Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - HBM Stall: + type: HBM Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Credit Starvation: + type: Credit Starvation + transaction: Write avg: AVG((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) min: MIN((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) max: MAX((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) diff --git a/src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml b/src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml index f609ee86c2..7e58ea2224 100644 --- a/src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml +++ b/src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml @@ -237,81 +237,107 @@ Panel Config: id: 1604 title: L1D - L2 Transactions header: + metric: Metric xfer: Xfer - mean: Mean + coherency: Coherency + avg: Avg min: Min max: Max unit: Unit tips: Tips metric: NC - Read: - mean: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) + xfer: Read + coherency: NC + avg: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Read: - mean: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) + xfer: Read + coherency: UC + avg: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Read: - mean: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) + xfer: Read + coherency: CC + avg: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Read: - mean: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) + xfer: Read + coherency: RW + avg: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Write: - mean: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: RW + avg: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: NC + avg: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Write: - mean: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: UC + avg: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Write: - mean: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: CC + avg: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Atomic: - mean: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: NC + avg: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Atomic: - mean: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: UC + avg: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Atomic: - mean: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: CC + avg: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Atomic: - mean: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: RW + avg: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) diff --git a/src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml b/src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml index aca8e67037..9e76a39b65 100644 --- a/src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml +++ b/src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml @@ -294,6 +294,8 @@ Panel Config: title: L2 - EA Interface Stalls header: metric: Metric + type: Type + transaction: Transaction avg: Avg min: Min max: Max @@ -301,42 +303,56 @@ Panel Config: tips: Tips metric: Read - Remote Socket Stall: + type: Remote Socket Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - Peer GCD Stall: + type: Peer GCD Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - HBM Stall: + type: HBM Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Remote Socket Stall: + type: Remote Socket Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Peer GCD Stall: + type: Peer GCD Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - HBM Stall: + type: HBM Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Credit Starvation: + type: Credit Starvation + transaction: Write avg: AVG((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) min: MIN((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) max: MAX((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) diff --git a/src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml b/src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml index acf0d58bd1..275281031d 100644 --- a/src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml @@ -237,81 +237,107 @@ Panel Config: id: 1604 title: L1D - L2 Transactions header: + metric: Metric xfer: Xfer - mean: Mean + coherency: Coherency + avg: Avg min: Min max: Max unit: Unit tips: Tips metric: NC - Read: - mean: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) + xfer: Read + coherency: NC + avg: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Read: - mean: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) + xfer: Read + coherency: UC + avg: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Read: - mean: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) + xfer: Read + coherency: CC + avg: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Read: - mean: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) + xfer: Read + coherency: RW + avg: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Write: - mean: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: RW + avg: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: NC + avg: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Write: - mean: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: UC + avg: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Write: - mean: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: CC + avg: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Atomic: - mean: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: NC + avg: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Atomic: - mean: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: UC + avg: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Atomic: - mean: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: CC + avg: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Atomic: - mean: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: RW + avg: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) diff --git a/src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml b/src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml index d58d4f0822..7be18091af 100644 --- a/src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml @@ -294,6 +294,8 @@ Panel Config: title: L2 - Fabric Interface Stalls header: metric: Metric + type: Type + transaction: Transaction avg: Avg min: Min max: Max @@ -301,42 +303,56 @@ Panel Config: tips: Tips metric: Read - Remote Socket Stall: + type: Remote Socket Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - Peer GCD Stall: + type: Peer GCD Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - HBM Stall: + type: HBM Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Remote Socket Stall: + type: Remote Socket Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Peer GCD Stall: + type: Peer GCD Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - HBM Stall: + type: HBM Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Credit Starvation: + type: Credit Starvation + transaction: Write avg: AVG((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) min: MIN((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) max: MAX((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index b96bcea8a2..aa490473b3 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -60,7 +60,9 @@ barchart_elements = [ 1301, # Instruc cache SOL 1401, # SL1D cache SOL 1601, # VL1D cache SOL + 1604, # L1D-L2 Transactions 1701, # L2 cache SOL + 1704, # L1-Fabric Interface Stalls ] @@ -70,6 +72,25 @@ def filter_df(column, df, filt): filt_df = df.loc[df[schema.pmc_perf_file_prefix][column].astype(str).isin(filt)] return filt_df +def multi_bar_chart(table_id, display_df): + if table_id == 1604: + nested_bar = { + 'NC': {}, + 'UC': {}, + 'RW': {}, + 'CC': {} + } + for index, row in display_df.iterrows(): + nested_bar[row["Coherency"]][row["Xfer"]] = row["Avg"] + if table_id == 1704: + nested_bar = { + 'Read': {}, + 'Write': {} + } + for index, row in display_df.iterrows(): + nested_bar[row["Transaction"]][row["Type"]] = row["Avg"] + + return nested_bar def discrete_background_color_bins(df, n_bins=5, columns="all"): @@ -150,6 +171,30 @@ def build_bar_chart(display_df, table_config): ) ) + # Multi bar chart + elif table_config["id"] == 1604 or table_config["id"] == 1704: + display_df["Avg"] = [ + x.astype(int) if x != "" else int(0) for x in display_df["Avg"] + ] + df_unit = display_df["Unit"][0] + nested_bar = multi_bar_chart(table_config["id"], display_df) + # generate chart for each coherency + for group, metric in nested_bar.items(): + d_figs.append( + px.bar( + title=group, + x=metric.values(), + y=metric.keys(), + labels={ + "x": df_unit, + "y": "" + }, + text=metric.values(), + orientation="h", + height=200 + ).update_xaxes(showgrid=False, rangemode="nonnegative").update_yaxes(showgrid=False).update_layout(title_x=0.5) + ) + # Speed-of-light bar chart else: display_df["Value"] = [ @@ -434,10 +479,22 @@ def build_layout( # a) Barchart if table_config["id"] in barchart_elements: d_figs = build_bar_chart(display_df, table_config) - for fig in d_figs: + # Smaller formatting if barchart yeilds several graphs + if len(d_figs) > 2: + temp_obj = [] + for fig in d_figs: + temp_obj.append( + html.Div(className="float-child", children=[dcc.Graph(figure=fig, style={"margin": "2%"})]) + ) content.append( - dcc.Graph(figure=fig, style={"margin": "2%"}) + html.Div(className="float-container", children=temp_obj) ) + # Normal formatting if < 2 graphs + else: + for fig in d_figs: + content.append( + dcc.Graph(figure=fig, style={"margin": "2%"}) + ) # B) Tablechart else: d_figs = build_table_chart( From e19bf4d7e1c5065b7843e33a89652469e84363c6 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Mon, 9 Jan 2023 16:53:41 -0600 Subject: [PATCH 21/90] Comply to Python formatting Signed-off-by: colramos425 --- src/omniperf_analyze/utils/gui.py | 39 +++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index aa490473b3..cc8aa913ac 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -72,26 +72,20 @@ def filter_df(column, df, filt): filt_df = df.loc[df[schema.pmc_perf_file_prefix][column].astype(str).isin(filt)] return filt_df + def multi_bar_chart(table_id, display_df): if table_id == 1604: - nested_bar = { - 'NC': {}, - 'UC': {}, - 'RW': {}, - 'CC': {} - } + nested_bar = {"NC": {}, "UC": {}, "RW": {}, "CC": {}} for index, row in display_df.iterrows(): nested_bar[row["Coherency"]][row["Xfer"]] = row["Avg"] if table_id == 1704: - nested_bar = { - 'Read': {}, - 'Write': {} - } + nested_bar = {"Read": {}, "Write": {}} for index, row in display_df.iterrows(): nested_bar[row["Transaction"]][row["Type"]] = row["Avg"] return nested_bar + def discrete_background_color_bins(df, n_bins=5, columns="all"): bounds = [i * (1.0 / n_bins) for i in range(n_bins + 1)] @@ -185,14 +179,14 @@ def build_bar_chart(display_df, table_config): title=group, x=metric.values(), y=metric.keys(), - labels={ - "x": df_unit, - "y": "" - }, + labels={"x": df_unit, "y": ""}, text=metric.values(), orientation="h", - height=200 - ).update_xaxes(showgrid=False, rangemode="nonnegative").update_yaxes(showgrid=False).update_layout(title_x=0.5) + height=200, + ) + .update_xaxes(showgrid=False, rangemode="nonnegative") + .update_yaxes(showgrid=False) + .update_layout(title_x=0.5) ) # Speed-of-light bar chart @@ -484,10 +478,19 @@ def build_layout( temp_obj = [] for fig in d_figs: temp_obj.append( - html.Div(className="float-child", children=[dcc.Graph(figure=fig, style={"margin": "2%"})]) + html.Div( + className="float-child", + children=[ + dcc.Graph( + figure=fig, style={"margin": "2%"} + ) + ], + ) ) content.append( - html.Div(className="float-container", children=temp_obj) + html.Div( + className="float-container", children=temp_obj + ) ) # Normal formatting if < 2 graphs else: From 664a0fe366ebc2d3fa8c2d0a56ab7d18c05c851c Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 10 Jan 2023 11:18:18 -0600 Subject: [PATCH 22/90] Refine barchart data structure Signed-off-by: colramos425 --- src/omniperf_analyze/utils/gui.py | 35 +++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index cc8aa913ac..0ed1f63c82 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -52,18 +52,12 @@ HIDDEN_COLUMNS = ["Tips", "coll_level"] IS_DARK = True # default dark theme # Add any elements you'd like displayed as a bar chart -barchart_elements = [ - 1001, # Instr mix - 1002, # VALU Arith Instr mix - 1101, # Compute pipe SOL - 1201, # LDS SOL - 1301, # Instruc cache SOL - 1401, # SL1D cache SOL - 1601, # VL1D cache SOL - 1604, # L1D-L2 Transactions - 1701, # L2 cache SOL - 1704, # L1-Fabric Interface Stalls -] +barchart_elements = { + # organized by barchart type + "instr_mix": [1001, 1002], + "multi_bar": [1604, 1704], + "sol": [1101, 1201, 1301, 1401, 1601, 1701], +} def filter_df(column, df, filt): @@ -148,7 +142,7 @@ def build_bar_chart(display_df, table_config): d_figs = [] # Insr Mix bar chart - if table_config["id"] == 1001 or table_config["id"] == 1002: + if table_config["id"] in barchart_elements["instr_mix"]: display_df["Count"] = [ x.astype(int) if x != "" else int(0) for x in display_df["Count"] ] @@ -166,7 +160,7 @@ def build_bar_chart(display_df, table_config): ) # Multi bar chart - elif table_config["id"] == 1604 or table_config["id"] == 1704: + elif table_config["id"] in barchart_elements["multi_bar"]: display_df["Avg"] = [ x.astype(int) if x != "" else int(0) for x in display_df["Avg"] ] @@ -190,7 +184,7 @@ def build_bar_chart(display_df, table_config): ) # Speed-of-light bar chart - else: + elif table_config["id"] in barchart_elements["sol"]: display_df["Value"] = [ x.astype(float) if x != "" else float(0) for x in display_df["Value"] ] @@ -233,6 +227,13 @@ def build_bar_chart(display_df, table_config): orientation="h", ).update_xaxes(range=[0, 110]) ) + else: + print( + "ERROR: Table id {}. Cannot determine barchart type.".format( + table_config["id"] + ) + ) + sys.exit(-1) # update layout for each of the charts for fig in d_figs: @@ -471,7 +472,9 @@ def build_layout( # Determine chart type: # a) Barchart - if table_config["id"] in barchart_elements: + if table_config["id"] in [ + x for i in barchart_elements.values() for x in i + ]: d_figs = build_bar_chart(display_df, table_config) # Smaller formatting if barchart yeilds several graphs if len(d_figs) > 2: From f167ff36583ab127656b80d097cba32d95fb03a2 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Wed, 11 Jan 2023 17:26:43 -0600 Subject: [PATCH 23/90] Tweak L2 Cache per channel config for graphic Signed-off-by: colramos425 --- .../gfx906/1800_L2_cache_per_channel.yaml | 204 +++++++++--------- .../gfx908/1800_L2_cache_per_channel.yaml | 204 +++++++++--------- .../gfx90a/1800_L2_cache_per_channel.yaml | 204 +++++++++--------- 3 files changed, 306 insertions(+), 306 deletions(-) diff --git a/src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml b/src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml index 37a2954384..d0c59891cc 100644 --- a/src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml +++ b/src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml @@ -10,28 +10,28 @@ Panel Config: data source: - metric_table: id: 1801 - title: Channel 0 -15 + title: Channel 0-15 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "0": @@ -41,10 +41,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[0]) / $denom)) read req: AVG((TO_INT(TCC_READ[0]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[0]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[0]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[0]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[0] / TCC_EA_RDREQ[0]) if (TCC_EA_RDREQ[0] != 0) else None)) @@ -69,10 +69,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[1]) / $denom)) read req: AVG((TO_INT(TCC_READ[1]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[1]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[1]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[1]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[1] / TCC_EA_RDREQ[1]) if (TCC_EA_RDREQ[1] != 0) else None)) @@ -97,10 +97,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[2]) / $denom)) read req: AVG((TO_INT(TCC_READ[2]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[2]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[2]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[2]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[2] / TCC_EA_RDREQ[2]) if (TCC_EA_RDREQ[2] != 0) else None)) @@ -125,10 +125,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[3]) / $denom)) read req: AVG((TO_INT(TCC_READ[3]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[3]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[3]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[3]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[3] / TCC_EA_RDREQ[3]) if (TCC_EA_RDREQ[3] != 0) else None)) @@ -153,10 +153,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[4]) / $denom)) read req: AVG((TO_INT(TCC_READ[4]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[4]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[4]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[4]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[4] / TCC_EA_RDREQ[4]) if (TCC_EA_RDREQ[4] != 0) else None)) @@ -181,10 +181,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[5]) / $denom)) read req: AVG((TO_INT(TCC_READ[5]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[5]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[5]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[5]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[5] / TCC_EA_RDREQ[5]) if (TCC_EA_RDREQ[5] != 0) else None)) @@ -209,10 +209,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[6]) / $denom)) read req: AVG((TO_INT(TCC_READ[6]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[6]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[6]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[6]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[6] / TCC_EA_RDREQ[6]) if (TCC_EA_RDREQ[6] != 0) else None)) @@ -237,10 +237,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[7]) / $denom)) read req: AVG((TO_INT(TCC_READ[7]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[7]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[7]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[7]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[7] / TCC_EA_RDREQ[7]) if (TCC_EA_RDREQ[7] != 0) else None)) @@ -265,10 +265,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[8]) / $denom)) read req: AVG((TO_INT(TCC_READ[8]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[8]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[8]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[8]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[8] / TCC_EA_RDREQ[8]) if (TCC_EA_RDREQ[8] != 0) else None)) @@ -293,10 +293,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[9]) / $denom)) read req: AVG((TO_INT(TCC_READ[9]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[9]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[9]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[9]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[9] / TCC_EA_RDREQ[9]) if (TCC_EA_RDREQ[9] != 0) else None)) @@ -321,10 +321,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[10]) / $denom)) read req: AVG((TO_INT(TCC_READ[10]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[10]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[10]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[10]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[10] / TCC_EA_RDREQ[10]) if (TCC_EA_RDREQ[10] != 0) else None)) @@ -349,10 +349,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[11]) / $denom)) read req: AVG((TO_INT(TCC_READ[11]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[11]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[11]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[11]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[11] / TCC_EA_RDREQ[11]) if (TCC_EA_RDREQ[11] != 0) else None)) @@ -377,10 +377,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[12]) / $denom)) read req: AVG((TO_INT(TCC_READ[12]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[12]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[12]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[12]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[12] / TCC_EA_RDREQ[12]) if (TCC_EA_RDREQ[12] != 0) else None)) @@ -405,10 +405,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[13]) / $denom)) read req: AVG((TO_INT(TCC_READ[13]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[13]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[13]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[13]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[13] / TCC_EA_RDREQ[13]) if (TCC_EA_RDREQ[13] != 0) else None)) @@ -433,10 +433,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[14]) / $denom)) read req: AVG((TO_INT(TCC_READ[14]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[14]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[14]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[14]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[14] / TCC_EA_RDREQ[14]) if (TCC_EA_RDREQ[14] != 0) else None)) @@ -461,10 +461,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[15]) / $denom)) read req: AVG((TO_INT(TCC_READ[15]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[15]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[15]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[15]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[15] / TCC_EA_RDREQ[15]) if (TCC_EA_RDREQ[15] != 0) else None)) @@ -485,28 +485,28 @@ Panel Config: - metric_table: id: 1802 - title: Channel 16 -31 + title: Channel 16-31 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "16": @@ -514,10 +514,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -534,10 +534,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -554,10 +554,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -574,10 +574,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -594,10 +594,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -614,10 +614,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -634,10 +634,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -654,10 +654,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -674,10 +674,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -694,10 +694,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -714,10 +714,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -734,10 +734,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -754,10 +754,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -774,10 +774,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -794,10 +794,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -814,10 +814,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter diff --git a/src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml b/src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml index ad93c728f5..69e646db18 100644 --- a/src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml +++ b/src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml @@ -10,28 +10,28 @@ Panel Config: data source: - metric_table: id: 1801 - title: Channel 0 -15 + title: Channel 0-15 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "0": @@ -41,10 +41,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[0]) / $denom)) read req: AVG((TO_INT(TCC_READ[0]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[0]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[0]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[0]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[0] / TCC_EA_RDREQ[0]) if (TCC_EA_RDREQ[0] != 0) else None)) @@ -69,10 +69,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[1]) / $denom)) read req: AVG((TO_INT(TCC_READ[1]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[1]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[1]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[1]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[1] / TCC_EA_RDREQ[1]) if (TCC_EA_RDREQ[1] != 0) else None)) @@ -97,10 +97,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[2]) / $denom)) read req: AVG((TO_INT(TCC_READ[2]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[2]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[2]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[2]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[2] / TCC_EA_RDREQ[2]) if (TCC_EA_RDREQ[2] != 0) else None)) @@ -125,10 +125,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[3]) / $denom)) read req: AVG((TO_INT(TCC_READ[3]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[3]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[3]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[3]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[3] / TCC_EA_RDREQ[3]) if (TCC_EA_RDREQ[3] != 0) else None)) @@ -153,10 +153,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[4]) / $denom)) read req: AVG((TO_INT(TCC_READ[4]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[4]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[4]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[4]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[4] / TCC_EA_RDREQ[4]) if (TCC_EA_RDREQ[4] != 0) else None)) @@ -181,10 +181,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[5]) / $denom)) read req: AVG((TO_INT(TCC_READ[5]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[5]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[5]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[5]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[5] / TCC_EA_RDREQ[5]) if (TCC_EA_RDREQ[5] != 0) else None)) @@ -209,10 +209,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[6]) / $denom)) read req: AVG((TO_INT(TCC_READ[6]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[6]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[6]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[6]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[6] / TCC_EA_RDREQ[6]) if (TCC_EA_RDREQ[6] != 0) else None)) @@ -237,10 +237,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[7]) / $denom)) read req: AVG((TO_INT(TCC_READ[7]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[7]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[7]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[7]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[7] / TCC_EA_RDREQ[7]) if (TCC_EA_RDREQ[7] != 0) else None)) @@ -265,10 +265,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[8]) / $denom)) read req: AVG((TO_INT(TCC_READ[8]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[8]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[8]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[8]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[8] / TCC_EA_RDREQ[8]) if (TCC_EA_RDREQ[8] != 0) else None)) @@ -293,10 +293,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[9]) / $denom)) read req: AVG((TO_INT(TCC_READ[9]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[9]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[9]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[9]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[9] / TCC_EA_RDREQ[9]) if (TCC_EA_RDREQ[9] != 0) else None)) @@ -321,10 +321,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[10]) / $denom)) read req: AVG((TO_INT(TCC_READ[10]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[10]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[10]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[10]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[10] / TCC_EA_RDREQ[10]) if (TCC_EA_RDREQ[10] != 0) else None)) @@ -349,10 +349,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[11]) / $denom)) read req: AVG((TO_INT(TCC_READ[11]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[11]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[11]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[11]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[11] / TCC_EA_RDREQ[11]) if (TCC_EA_RDREQ[11] != 0) else None)) @@ -377,10 +377,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[12]) / $denom)) read req: AVG((TO_INT(TCC_READ[12]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[12]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[12]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[12]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[12] / TCC_EA_RDREQ[12]) if (TCC_EA_RDREQ[12] != 0) else None)) @@ -405,10 +405,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[13]) / $denom)) read req: AVG((TO_INT(TCC_READ[13]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[13]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[13]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[13]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[13] / TCC_EA_RDREQ[13]) if (TCC_EA_RDREQ[13] != 0) else None)) @@ -433,10 +433,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[14]) / $denom)) read req: AVG((TO_INT(TCC_READ[14]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[14]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[14]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[14]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[14] / TCC_EA_RDREQ[14]) if (TCC_EA_RDREQ[14] != 0) else None)) @@ -461,10 +461,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[15]) / $denom)) read req: AVG((TO_INT(TCC_READ[15]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[15]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[15]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[15]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[15] / TCC_EA_RDREQ[15]) if (TCC_EA_RDREQ[15] != 0) else None)) @@ -485,28 +485,28 @@ Panel Config: - metric_table: id: 1802 - title: Channel 16 -31 + title: Channel 16-31 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "16": @@ -516,10 +516,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[16]) / $denom)) read req: AVG((TO_INT(TCC_READ[16]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[16]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[16]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[16]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[16] / TCC_EA_RDREQ[16]) if (TCC_EA_RDREQ[16] != 0) else None)) @@ -544,10 +544,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[17]) / $denom)) read req: AVG((TO_INT(TCC_READ[17]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[17]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[17]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[17]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[17] / TCC_EA_RDREQ[17]) if (TCC_EA_RDREQ[17] != 0) else None)) @@ -572,10 +572,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[18]) / $denom)) read req: AVG((TO_INT(TCC_READ[18]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[18]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[18]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[18]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[18] / TCC_EA_RDREQ[18]) if (TCC_EA_RDREQ[18] != 0) else None)) @@ -600,10 +600,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[19]) / $denom)) read req: AVG((TO_INT(TCC_READ[19]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[19]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[19]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[19]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[19] / TCC_EA_RDREQ[19]) if (TCC_EA_RDREQ[19] != 0) else None)) @@ -628,10 +628,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[20]) / $denom)) read req: AVG((TO_INT(TCC_READ[20]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[20]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[20]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[20]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[20] / TCC_EA_RDREQ[20]) if (TCC_EA_RDREQ[20] != 0) else None)) @@ -656,10 +656,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[21]) / $denom)) read req: AVG((TO_INT(TCC_READ[21]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[21]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[21]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[21]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[21] / TCC_EA_RDREQ[21]) if (TCC_EA_RDREQ[21] != 0) else None)) @@ -684,10 +684,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[22]) / $denom)) read req: AVG((TO_INT(TCC_READ[22]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[22]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[22]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[22]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[22] / TCC_EA_RDREQ[22]) if (TCC_EA_RDREQ[22] != 0) else None)) @@ -712,10 +712,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[23]) / $denom)) read req: AVG((TO_INT(TCC_READ[23]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[23]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[23]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[23]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[23] / TCC_EA_RDREQ[23]) if (TCC_EA_RDREQ[23] != 0) else None)) @@ -740,10 +740,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[24]) / $denom)) read req: AVG((TO_INT(TCC_READ[24]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[24]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[24]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[24]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[24] / TCC_EA_RDREQ[24]) if (TCC_EA_RDREQ[24] != 0) else None)) @@ -768,10 +768,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[25]) / $denom)) read req: AVG((TO_INT(TCC_READ[25]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[25]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[25]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[25]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[25] / TCC_EA_RDREQ[25]) if (TCC_EA_RDREQ[25] != 0) else None)) @@ -796,10 +796,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[26]) / $denom)) read req: AVG((TO_INT(TCC_READ[26]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[26]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[26]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[26]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[26] / TCC_EA_RDREQ[26]) if (TCC_EA_RDREQ[26] != 0) else None)) @@ -824,10 +824,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[27]) / $denom)) read req: AVG((TO_INT(TCC_READ[27]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[27]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[27]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[27]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[27] / TCC_EA_RDREQ[27]) if (TCC_EA_RDREQ[27] != 0) else None)) @@ -852,10 +852,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[28]) / $denom)) read req: AVG((TO_INT(TCC_READ[28]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[28]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[28]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[28]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[28] / TCC_EA_RDREQ[28]) if (TCC_EA_RDREQ[28] != 0) else None)) @@ -880,10 +880,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[29]) / $denom)) read req: AVG((TO_INT(TCC_READ[29]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[29]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[29]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[29]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[29] / TCC_EA_RDREQ[29]) if (TCC_EA_RDREQ[29] != 0) else None)) @@ -908,10 +908,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[30]) / $denom)) read req: AVG((TO_INT(TCC_READ[30]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[30]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[30]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[30]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[30] / TCC_EA_RDREQ[30]) if (TCC_EA_RDREQ[30] != 0) else None)) @@ -936,10 +936,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[31]) / $denom)) read req: AVG((TO_INT(TCC_READ[31]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[31]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[31]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[31]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[31] / TCC_EA_RDREQ[31]) if (TCC_EA_RDREQ[31] != 0) else None)) diff --git a/src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml b/src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml index 16b0930e61..4918e3a8d9 100644 --- a/src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml @@ -10,28 +10,28 @@ Panel Config: data source: - metric_table: id: 1801 - title: Channel 0 -15 + title: Channel 0-15 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: '0': @@ -40,10 +40,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[0]) / $denom)) read req: AVG((TO_INT(TCC_READ[0]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[0]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[0]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[0]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[0] / TCC_EA_RDREQ[0]) if (TCC_EA_RDREQ[0] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[0] / TCC_EA_WRREQ[0]) if (TCC_EA_WRREQ[0] @@ -64,10 +64,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[1]) / $denom)) read req: AVG((TO_INT(TCC_READ[1]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[1]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[1]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[1]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[1] / TCC_EA_RDREQ[1]) if (TCC_EA_RDREQ[1] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[1] / TCC_EA_WRREQ[1]) if (TCC_EA_WRREQ[1] @@ -88,10 +88,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[2]) / $denom)) read req: AVG((TO_INT(TCC_READ[2]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[2]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[2]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[2]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[2] / TCC_EA_RDREQ[2]) if (TCC_EA_RDREQ[2] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[2] / TCC_EA_WRREQ[2]) if (TCC_EA_WRREQ[2] @@ -112,10 +112,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[3]) / $denom)) read req: AVG((TO_INT(TCC_READ[3]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[3]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[3]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[3]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[3] / TCC_EA_RDREQ[3]) if (TCC_EA_RDREQ[3] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[3] / TCC_EA_WRREQ[3]) if (TCC_EA_WRREQ[3] @@ -136,10 +136,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[4]) / $denom)) read req: AVG((TO_INT(TCC_READ[4]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[4]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[4]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[4]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[4] / TCC_EA_RDREQ[4]) if (TCC_EA_RDREQ[4] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[4] / TCC_EA_WRREQ[4]) if (TCC_EA_WRREQ[4] @@ -160,10 +160,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[5]) / $denom)) read req: AVG((TO_INT(TCC_READ[5]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[5]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[5]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[5]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[5] / TCC_EA_RDREQ[5]) if (TCC_EA_RDREQ[5] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[5] / TCC_EA_WRREQ[5]) if (TCC_EA_WRREQ[5] @@ -184,10 +184,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[6]) / $denom)) read req: AVG((TO_INT(TCC_READ[6]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[6]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[6]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[6]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[6] / TCC_EA_RDREQ[6]) if (TCC_EA_RDREQ[6] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[6] / TCC_EA_WRREQ[6]) if (TCC_EA_WRREQ[6] @@ -208,10 +208,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[7]) / $denom)) read req: AVG((TO_INT(TCC_READ[7]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[7]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[7]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[7]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[7] / TCC_EA_RDREQ[7]) if (TCC_EA_RDREQ[7] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[7] / TCC_EA_WRREQ[7]) if (TCC_EA_WRREQ[7] @@ -232,10 +232,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[8]) / $denom)) read req: AVG((TO_INT(TCC_READ[8]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[8]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[8]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[8]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[8] / TCC_EA_RDREQ[8]) if (TCC_EA_RDREQ[8] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[8] / TCC_EA_WRREQ[8]) if (TCC_EA_WRREQ[8] @@ -256,10 +256,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[9]) / $denom)) read req: AVG((TO_INT(TCC_READ[9]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[9]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[9]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[9]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[9] / TCC_EA_RDREQ[9]) if (TCC_EA_RDREQ[9] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[9] / TCC_EA_WRREQ[9]) if (TCC_EA_WRREQ[9] @@ -280,10 +280,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[10]) / $denom)) read req: AVG((TO_INT(TCC_READ[10]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[10]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[10]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[10]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[10] / TCC_EA_RDREQ[10]) if (TCC_EA_RDREQ[10] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[10] / TCC_EA_WRREQ[10]) if (TCC_EA_WRREQ[10] @@ -304,10 +304,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[11]) / $denom)) read req: AVG((TO_INT(TCC_READ[11]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[11]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[11]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[11]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[11] / TCC_EA_RDREQ[11]) if (TCC_EA_RDREQ[11] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[11] / TCC_EA_WRREQ[11]) if (TCC_EA_WRREQ[11] @@ -328,10 +328,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[12]) / $denom)) read req: AVG((TO_INT(TCC_READ[12]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[12]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[12]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[12]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[12] / TCC_EA_RDREQ[12]) if (TCC_EA_RDREQ[12] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[12] / TCC_EA_WRREQ[12]) if (TCC_EA_WRREQ[12] @@ -352,10 +352,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[13]) / $denom)) read req: AVG((TO_INT(TCC_READ[13]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[13]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[13]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[13]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[13] / TCC_EA_RDREQ[13]) if (TCC_EA_RDREQ[13] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[13] / TCC_EA_WRREQ[13]) if (TCC_EA_WRREQ[13] @@ -376,10 +376,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[14]) / $denom)) read req: AVG((TO_INT(TCC_READ[14]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[14]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[14]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[14]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[14] / TCC_EA_RDREQ[14]) if (TCC_EA_RDREQ[14] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[14] / TCC_EA_WRREQ[14]) if (TCC_EA_WRREQ[14] @@ -400,10 +400,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[15]) / $denom)) read req: AVG((TO_INT(TCC_READ[15]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[15]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[15]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[15]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[15] / TCC_EA_RDREQ[15]) if (TCC_EA_RDREQ[15] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[15] / TCC_EA_WRREQ[15]) if (TCC_EA_WRREQ[15] @@ -420,28 +420,28 @@ Panel Config: tips: - metric_table: id: 1802 - title: Channel 16 -31 + title: Channel 16-31 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: '16': @@ -450,10 +450,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[16]) / $denom)) read req: AVG((TO_INT(TCC_READ[16]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[16]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[16]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[16]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[16] / TCC_EA_RDREQ[16]) if (TCC_EA_RDREQ[16] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[16] / TCC_EA_WRREQ[16]) if (TCC_EA_WRREQ[16] @@ -474,10 +474,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[17]) / $denom)) read req: AVG((TO_INT(TCC_READ[17]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[17]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[17]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[17]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[17] / TCC_EA_RDREQ[17]) if (TCC_EA_RDREQ[17] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[17] / TCC_EA_WRREQ[17]) if (TCC_EA_WRREQ[17] @@ -498,10 +498,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[18]) / $denom)) read req: AVG((TO_INT(TCC_READ[18]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[18]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[18]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[18]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[18] / TCC_EA_RDREQ[18]) if (TCC_EA_RDREQ[18] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[18] / TCC_EA_WRREQ[18]) if (TCC_EA_WRREQ[18] @@ -522,10 +522,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[19]) / $denom)) read req: AVG((TO_INT(TCC_READ[19]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[19]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[19]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[19]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[19] / TCC_EA_RDREQ[19]) if (TCC_EA_RDREQ[19] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[19] / TCC_EA_WRREQ[19]) if (TCC_EA_WRREQ[19] @@ -546,10 +546,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[20]) / $denom)) read req: AVG((TO_INT(TCC_READ[20]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[20]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[20]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[20]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[20] / TCC_EA_RDREQ[20]) if (TCC_EA_RDREQ[20] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[20] / TCC_EA_WRREQ[20]) if (TCC_EA_WRREQ[20] @@ -570,10 +570,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[21]) / $denom)) read req: AVG((TO_INT(TCC_READ[21]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[21]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[21]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[21]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[21] / TCC_EA_RDREQ[21]) if (TCC_EA_RDREQ[21] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[21] / TCC_EA_WRREQ[21]) if (TCC_EA_WRREQ[21] @@ -594,10 +594,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[22]) / $denom)) read req: AVG((TO_INT(TCC_READ[22]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[22]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[22]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[22]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[22] / TCC_EA_RDREQ[22]) if (TCC_EA_RDREQ[22] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[22] / TCC_EA_WRREQ[22]) if (TCC_EA_WRREQ[22] @@ -618,10 +618,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[23]) / $denom)) read req: AVG((TO_INT(TCC_READ[23]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[23]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[23]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[23]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[23] / TCC_EA_RDREQ[23]) if (TCC_EA_RDREQ[23] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[23] / TCC_EA_WRREQ[23]) if (TCC_EA_WRREQ[23] @@ -642,10 +642,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[24]) / $denom)) read req: AVG((TO_INT(TCC_READ[24]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[24]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[24]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[24]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[24] / TCC_EA_RDREQ[24]) if (TCC_EA_RDREQ[24] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[24] / TCC_EA_WRREQ[24]) if (TCC_EA_WRREQ[24] @@ -666,10 +666,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[25]) / $denom)) read req: AVG((TO_INT(TCC_READ[25]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[25]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[25]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[25]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[25] / TCC_EA_RDREQ[25]) if (TCC_EA_RDREQ[25] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[25] / TCC_EA_WRREQ[25]) if (TCC_EA_WRREQ[25] @@ -690,10 +690,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[26]) / $denom)) read req: AVG((TO_INT(TCC_READ[26]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[26]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[26]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[26]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[26] / TCC_EA_RDREQ[26]) if (TCC_EA_RDREQ[26] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[26] / TCC_EA_WRREQ[26]) if (TCC_EA_WRREQ[26] @@ -714,10 +714,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[27]) / $denom)) read req: AVG((TO_INT(TCC_READ[27]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[27]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[27]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[27]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[27] / TCC_EA_RDREQ[27]) if (TCC_EA_RDREQ[27] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[27] / TCC_EA_WRREQ[27]) if (TCC_EA_WRREQ[27] @@ -738,10 +738,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[28]) / $denom)) read req: AVG((TO_INT(TCC_READ[28]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[28]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[28]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[28]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[28] / TCC_EA_RDREQ[28]) if (TCC_EA_RDREQ[28] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[28] / TCC_EA_WRREQ[28]) if (TCC_EA_WRREQ[28] @@ -762,10 +762,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[29]) / $denom)) read req: AVG((TO_INT(TCC_READ[29]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[29]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[29]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[29]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[29] / TCC_EA_RDREQ[29]) if (TCC_EA_RDREQ[29] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[29] / TCC_EA_WRREQ[29]) if (TCC_EA_WRREQ[29] @@ -786,10 +786,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[30]) / $denom)) read req: AVG((TO_INT(TCC_READ[30]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[30]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[30]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[30]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[30] / TCC_EA_RDREQ[30]) if (TCC_EA_RDREQ[30] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[30] / TCC_EA_WRREQ[30]) if (TCC_EA_WRREQ[30] @@ -810,10 +810,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[31]) / $denom)) read req: AVG((TO_INT(TCC_READ[31]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[31]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[31]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[31]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[31] / TCC_EA_RDREQ[31]) if (TCC_EA_RDREQ[31] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[31] / TCC_EA_WRREQ[31]) if (TCC_EA_WRREQ[31] From 6f6c07b34f2eed22ee8e3b336f19c3b406fb348c Mon Sep 17 00:00:00 2001 From: colramos425 Date: Wed, 11 Jan 2023 17:28:23 -0600 Subject: [PATCH 24/90] Build chart for L2 Cache per channel in GUI Signed-off-by: colramos425 --- src/omniperf_analyze/assets/layout.css | 14 --------- src/omniperf_analyze/utils/gui.py | 43 +++++++++++++++++++++----- src/omniperf_analyze/utils/schema.py | 36 ++++++++++----------- 3 files changed, 53 insertions(+), 40 deletions(-) diff --git a/src/omniperf_analyze/assets/layout.css b/src/omniperf_analyze/assets/layout.css index 44d0f99630..b723d236a3 100644 --- a/src/omniperf_analyze/assets/layout.css +++ b/src/omniperf_analyze/assets/layout.css @@ -593,20 +593,6 @@ button.report:hover { #l2_cache_per_channel a, #l2_cache_per_channel a:visited { color: #fff; } #l2_cache_per_channel a:hover, #l2_cache_per_channel a:focus { color: #11ABB0; } -#l2_cache_per_channel .float-container { - /* border: 3px solid #fff; */ - padding: 20px; -} -#l2_cache_per_channel .float-child { - width: 100%; - float: left; - padding: 20px; - /* border: 2px solid red; */ -} -#l2_cache_per_channel .float-child h3 { - color: #fff; -} - /* ------------------------------------------------------------------ */ /* c. About Section /* ------------------------------------------------------------------ */ diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index 0ed1f63c82..0740c8d4db 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -51,15 +51,18 @@ HIDDEN_SECTIONS = ["Memory Chart Analysis", "Kernels"] HIDDEN_COLUMNS = ["Tips", "coll_level"] IS_DARK = True # default dark theme -# Add any elements you'd like displayed as a bar chart +# Define different types of bar charts barchart_elements = { - # organized by barchart type + # Group table ids by chart type "instr_mix": [1001, 1002], "multi_bar": [1604, 1704], "sol": [1101, 1201, 1301, 1401, 1601, 1701], + "l2_cache_per_chan": [1801, 1802], } - +################## +# HELPER FUNCTIONS +################## def filter_df(column, df, filt): filt_df = df if filt != []: @@ -137,8 +140,10 @@ def discrete_background_color_bins(df, n_bins=5, columns="all"): return (styles, html.Div(legend, style={"padding": "5px 0 5px 0"})) - -def build_bar_chart(display_df, table_config): +#################### +# GRAPHICAL ELEMENTS +#################### +def build_bar_chart(display_df, table_config, norm_filt): d_figs = [] # Insr Mix bar chart @@ -182,6 +187,28 @@ def build_bar_chart(display_df, table_config): .update_yaxes(showgrid=False) .update_layout(title_x=0.5) ) + # L2 Cache per channel + elif table_config["id"] in barchart_elements["l2_cache_per_chan"]: + nested_bar = {} + channels = [] + for (colName, colData) in display_df.items(): + if colName == "Channel": + channels = list(colData.values) + else: + display_df[colName] = [ + x.astype(float) if x != "" and x != None else float(0) for x in display_df[colName] + ] + nested_bar[colName] = list(display_df[colName]) + for group, metric in nested_bar.items(): + d_figs.append( + px.bar( + title=group[0:group.rfind("(")], + x=channels, + y=metric, + labels={"x": "Channel", "y":group[group.rfind("(")+1: len(group)-1].replace("per", norm_filt)} + ) + .update_yaxes(rangemode="nonnegative") + ) # Speed-of-light bar chart elif table_config["id"] in barchart_elements["sol"]: @@ -383,7 +410,7 @@ def build_layout( def generate_from_filter( disp_filt, kernel_filter, gcd_filter, norm_filt, div_children ): - if verbose <= 1: + if verbose >= 1: print("normalization is ", norm_filt) base_data = initialize_run(args, norm_filt) # Re-initalize everything @@ -475,9 +502,9 @@ def build_layout( if table_config["id"] in [ x for i in barchart_elements.values() for x in i ]: - d_figs = build_bar_chart(display_df, table_config) + d_figs = build_bar_chart(display_df, table_config, norm_filt) # Smaller formatting if barchart yeilds several graphs - if len(d_figs) > 2: + if len(d_figs) > 2 and not table_config["id"] in barchart_elements["l2_cache_per_chan"]: temp_obj = [] for fig in d_figs: temp_obj.append( diff --git a/src/omniperf_analyze/utils/schema.py b/src/omniperf_analyze/utils/schema.py index 005afba02b..87394da339 100644 --- a/src/omniperf_analyze/utils/schema.py +++ b/src/omniperf_analyze/utils/schema.py @@ -84,24 +84,24 @@ supported_field = [ "Alias", # Special keywords for L2 channel "Channel", - "Hit Rate", - "Req", - "Read Req", - "Write Req", - "AtomicReq", - "EA Read Req", - "EA Write Req", - "EA AtomicReq", - "EA Read Lat - cycles", - "EA Write Lat - cycles", - "EA Atomic Lat - cycles", - "EA Read Stall - IO", - "EA Read Stall - GMI", - "EA Read Stall - DRAM", - "EA Write Stall - IO", - "EA Write Stall - GMI", - "EA Write Stall - DRAM", - "EA Write Stall - Starve", + "L2 Cache Hit Rate (%)", + "Requests (Requests)", + "L1-L2 Read (Requests)", + "L1-L2 Write (Requests)", + "L1-L2 Atomic (Requests)", + "L2-EA Read (Requests)", + "L2-EA Write (Requests)", + "L2-EA Atomic (Requests)", + "L2-EA Read Latency (Cycles)", + "L2-EA Write Latency (Cycles)", + "L2-EA Atomic Latency (Cycles)", + "L2-EA Read Stall - IO (Cycles per)", + "L2-EA Read Stall - GMI (Cycles per)", + "L2-EA Read Stall - DRAM (Cycles per)", + "L2-EA Write Stall - IO (Cycles per)", + "L2-EA Write Stall - GMI (Cycles per)", + "L2-EA Write Stall - DRAM (Cycles per)", + "L2-EA Write Stall - Starve (Cycles per)", ] # The prefix of raw pmc_perf.csv From 7af97fc84e2bcaf0f508ed198cf02afc5b6f0577 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Wed, 11 Jan 2023 17:29:14 -0600 Subject: [PATCH 25/90] Comply to Python formatting Signed-off-by: colramos425 --- src/omniperf_analyze/utils/gui.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index 0740c8d4db..181cacbd75 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -140,6 +140,7 @@ def discrete_background_color_bins(df, n_bins=5, columns="all"): return (styles, html.Div(legend, style={"padding": "5px 0 5px 0"})) + #################### # GRAPHICAL ELEMENTS #################### @@ -196,18 +197,23 @@ def build_bar_chart(display_df, table_config, norm_filt): channels = list(colData.values) else: display_df[colName] = [ - x.astype(float) if x != "" and x != None else float(0) for x in display_df[colName] + x.astype(float) if x != "" and x != None else float(0) + for x in display_df[colName] ] nested_bar[colName] = list(display_df[colName]) for group, metric in nested_bar.items(): d_figs.append( px.bar( - title=group[0:group.rfind("(")], + title=group[0 : group.rfind("(")], x=channels, y=metric, - labels={"x": "Channel", "y":group[group.rfind("(")+1: len(group)-1].replace("per", norm_filt)} - ) - .update_yaxes(rangemode="nonnegative") + labels={ + "x": "Channel", + "y": group[group.rfind("(") + 1 : len(group) - 1].replace( + "per", norm_filt + ), + }, + ).update_yaxes(rangemode="nonnegative") ) # Speed-of-light bar chart @@ -504,7 +510,11 @@ def build_layout( ]: d_figs = build_bar_chart(display_df, table_config, norm_filt) # Smaller formatting if barchart yeilds several graphs - if len(d_figs) > 2 and not table_config["id"] in barchart_elements["l2_cache_per_chan"]: + if ( + len(d_figs) > 2 + and not table_config["id"] + in barchart_elements["l2_cache_per_chan"] + ): temp_obj = [] for fig in d_figs: temp_obj.append( From 03b93fb06b905f449a26d86985bc37ad1ad8b58a Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 13 Jan 2023 13:57:31 -0600 Subject: [PATCH 26/90] Update logic in CLI baseline comparison Signed-off-by: colramos425 --- src/omniperf_analyze/omniperf_analyze.py | 6 ++++-- src/omniperf_analyze/utils/file_io.py | 6 +++--- src/omniperf_analyze/utils/gui.py | 2 +- src/omniperf_analyze/utils/tty.py | 16 ++++++++++------ 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index 1d9c18028e..fc7b52a1bb 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -143,7 +143,8 @@ def run_gui(args, runs): num_results, ) runs[args.path[0][0]].raw_pmc = file_io.create_df_pmc( - args.path[0][0] + args.path[0][0], + args.verbose ) # create mega df parser.load_kernel_top(runs[args.path[0][0]], args.path[0][0]) @@ -188,7 +189,7 @@ def run_cli(args, runs): args.time_unit, num_results, ) - runs[d[0]].raw_pmc = file_io.create_df_pmc(d[0]) # creates mega dataframe + runs[d[0]].raw_pmc = file_io.create_df_pmc(d[0], args.verbose) # creates mega dataframe is_gui = False parser.load_table_data( runs[d[0]], d[0], is_gui, args.g, args.verbose @@ -203,6 +204,7 @@ def run_cli(args, runs): args.decimal, args.time_unit, args.cols, + args.verbose, ) diff --git a/src/omniperf_analyze/utils/file_io.py b/src/omniperf_analyze/utils/file_io.py index 802dd82bf0..9b57bbf7d4 100644 --- a/src/omniperf_analyze/utils/file_io.py +++ b/src/omniperf_analyze/utils/file_io.py @@ -180,7 +180,7 @@ def create_df_kernel_top_stats( grouped.to_csv(os.path.join(raw_data_dir, "pmc_kernel_top.csv"), index=False) -def create_df_pmc(raw_data_dir): +def create_df_pmc(raw_data_dir, verbose): """ Load all raw pmc counters and join into one df. """ @@ -200,8 +200,8 @@ def create_df_pmc(raw_data_dir): coll_levels.append(f[:-4]) final_df = pd.concat(dfs, keys=coll_levels, axis=1, copy=False) # TODO: join instead of concat! - - # print("pmc_raw_data final_df ", final_df.info()) + if verbose >= 2: + print("pmc_raw_data final_df ", final_df.info()) return final_df diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index 181cacbd75..07be15e421 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -422,7 +422,7 @@ def build_layout( base_data = initialize_run(args, norm_filt) # Re-initalize everything panel_configs = copy.deepcopy(archConfigs.panel_configs) # Generate original raw df - base_data[base_run].raw_pmc = file_io.create_df_pmc(path_to_dir) + base_data[base_run].raw_pmc = file_io.create_df_pmc(path_to_dir, verbose) if verbose >= 1: print("disp-filter is ", disp_filt) print("kernel-filter is ", kernel_filter) diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index 0a8befbb98..b84487975b 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -44,19 +44,20 @@ def string_multiple_lines(source, width, max_rows): return "\n".join(lines) -def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols): +def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols, verbose): """ Show all panels with their data in plain text mode. """ comparable_columns = parser.build_comparable_columns(time_unit) for panel_id, panel in archConfigs.panel_configs.items(): - + # Skip panels that don't support baseline comparison + if panel_id == 1900: + continue ss = "" # store content of all data_source from one pannel for data_source in panel["data source"]: for type, table_config in data_source.items(): - # take the 1st run as baseline base_run, base_data = next(iter(runs.items())) base_df = base_data.dfs[table_config["id"]] @@ -102,18 +103,21 @@ def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols): ): if run != base_run: # calc percentage over the baseline + base_df[header]=[float(x) if x != '' else float(0) for x in base_df[header]] + cur_df[header]=[float(x) if x != '' else float(0) for x in cur_df[header]] t_df = ( pd.concat( [ - base_df[header].astype("double"), - cur_df[header].astype("double"), + base_df[header], + cur_df[header], ], axis=1, ) .pct_change(axis="columns") .iloc[:, 1] ) - # print("---------", header, t_df) + if verbose >= 2: + print("---------", header, t_df) # show value + percentage # TODO: better alignment From 000867e10614e37de2d667f6bc6addb5888df302 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 13 Jan 2023 13:58:21 -0600 Subject: [PATCH 27/90] Comply to Python formatting Signed-off-by: colramos425 --- src/omniperf_analyze/omniperf_analyze.py | 7 ++++--- src/omniperf_analyze/utils/tty.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index fc7b52a1bb..4741a3acfa 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -143,8 +143,7 @@ def run_gui(args, runs): num_results, ) runs[args.path[0][0]].raw_pmc = file_io.create_df_pmc( - args.path[0][0], - args.verbose + args.path[0][0], args.verbose ) # create mega df parser.load_kernel_top(runs[args.path[0][0]], args.path[0][0]) @@ -189,7 +188,9 @@ def run_cli(args, runs): args.time_unit, num_results, ) - runs[d[0]].raw_pmc = file_io.create_df_pmc(d[0], args.verbose) # creates mega dataframe + runs[d[0]].raw_pmc = file_io.create_df_pmc( + d[0], args.verbose + ) # creates mega dataframe is_gui = False parser.load_table_data( runs[d[0]], d[0], is_gui, args.g, args.verbose diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index b84487975b..dd73646333 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -103,8 +103,14 @@ def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols, verbo ): if run != base_run: # calc percentage over the baseline - base_df[header]=[float(x) if x != '' else float(0) for x in base_df[header]] - cur_df[header]=[float(x) if x != '' else float(0) for x in cur_df[header]] + base_df[header] = [ + float(x) if x != "" else float(0) + for x in base_df[header] + ] + cur_df[header] = [ + float(x) if x != "" else float(0) + for x in cur_df[header] + ] t_df = ( pd.concat( [ From c27274837e31a6bf755df45d6fa1ed5351a8eef4 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Mon, 16 Jan 2023 11:33:15 -0600 Subject: [PATCH 28/90] Hide kernel section in CLI output Signed-off-by: colramos425 --- src/omniperf_analyze/utils/tty.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index dd73646333..9f6ed2e400 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -26,6 +26,7 @@ from tabulate import tabulate from omniperf_analyze.utils import schema, parser hidden_columns = ["Tips", "coll_level"] +hidden_sections = [1900, 2000] def string_multiple_lines(source, width, max_rows): @@ -52,7 +53,7 @@ def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols, verbo for panel_id, panel in archConfigs.panel_configs.items(): # Skip panels that don't support baseline comparison - if panel_id == 1900: + if panel_id in hidden_sections: continue ss = "" # store content of all data_source from one pannel From 32444e43de6ce9dd689fe9272db8f6558369fbd6 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 17 Jan 2023 09:46:27 -0600 Subject: [PATCH 29/90] Add mult-normalization to MFMA Arithmetic Instr Mix #68 Signed-off-by: colramos425 --- dashboards/Omniperf_v1.0.7_pub.json | 13328 ++++++++++++++++ .../1000_compute-unit-instruction-mix.yaml | 10 +- 2 files changed, 13333 insertions(+), 5 deletions(-) create mode 100644 dashboards/Omniperf_v1.0.7_pub.json diff --git a/dashboards/Omniperf_v1.0.7_pub.json b/dashboards/Omniperf_v1.0.7_pub.json new file mode 100644 index 0000000000..1a9c07c07b --- /dev/null +++ b/dashboards/Omniperf_v1.0.7_pub.json @@ -0,0 +1,13328 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 42, + "iteration": 1673969861340, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 217, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 23, + "w": 13, + "x": 0, + "y": 1 + }, + "id": 159, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.sysinfo.aggregate([\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.sysinfo.aggregate([\n {\"$match\": {\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(System Info)\"}}\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "System Info", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true + }, + "indexByName": {}, + "renameByName": { + "Value 1": "Current", + "Value 2": "Baseline" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "System Info", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 108, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto", + "filterable": false + }, + "decimals": 0, + "links": [], + "mappings": [ + { + "options": { + "match": "false", + "result": { + "index": 0 + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Percent of Peak - PoP" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "orange", + "value": 50 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + { + "id": "custom.displayMode", + "value": "color-background" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "color-text" + }, + { + "id": "custom.width", + "value": 252 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit 1" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "color-background" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 137 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 161 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 15, + "x": 0, + "y": 2 + }, + "id": 110, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n \n \"valu_intOps_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \n \n \"salu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU] }] }\n },\n \n \"valu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU] }] }\n },\n \n \"mfma_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU, 4] }] }\n },\n\n \n \"lds_bconf\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \n \"lds_bw\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n \n \"lds_bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}, \n {\"$multiply\": [$sclk, $numCU, 0.00128]}\n ]}\n },\n \n \"unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \n \"ipcIssue_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\", \"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"eaWriteLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null \n ]\n }\n },\n \"eaReadLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null \n ]\n }\n },\n \"eaWriteBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }, \n \"eaReadBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \"l2_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null \n ]\n }\n },\n \"vecl1_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]},\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vecl1_BW_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"l1k_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]} , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]}] },\n null\n ]\n }\n },\n \"l1i_hitRate_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\"]}] }\n },\n \"l1i_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_ICACHE_REQ\",{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n },\n \"l1k_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_DCACHE_REQ\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"VALU FLOPs\",\n \"Value\": \"&valu_flops_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"VALU IOPs\",\n \"Value\": \"&valu_intOps_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_intOps_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (BF16)\",\n \"Value\": \"&mfma_flops_bf16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F16)\",\n \"Value\": \"&mfma_flops_f16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F32)\",\n \"Value\": \"&mfma_flops_f32_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F64)\",\n \"Value\": \"&mfma_flops_f64_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA IOPs (Int8)\",\n \"Value\": \"&mfma_flops_i8_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Value\": $numActiveCUs,\n \"Unit\": \"CUs\",\n \"peak\": $numCU,\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, $numActiveCUs] }, $numCU]}\n },\n \n {\n \"Metric\": \"SALU Util\",\n \"Value\": \"&salu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&salu_val\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Value\": \"&valu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&valu_val\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Value\": \"&mfma_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&mfma_val\"\n },\n {\n \"Metric\": \"VALU Active Threads/Wave\",\n \"Value\": \"&unpredthreads_val\",\n \"Unit\": \"Threads\",\n \"peak\": 64,\n \"Percent of Peak - PoP\": { \"$multiply\": [\"&unpredthreads_val\", 1.5625]}\n },\n {\n \"Metric\": \"IPC - Issue\",\n \"Value\": \"&ipcIssue_val\",\n \"Unit\": \"Instr/cycle\",\n \"peak\": 5,\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&ipcIssue_val\"] }, 5] }\n },\n {\n \"Metric\": \"LDS BW\",\n \"Value\": \"&lds_bw\",\n \"Unit\": \"GB/sec\",\n \"peak\": {\"$multiply\": [$sclk, $numCU, 0.128]},\n \"Percent of Peak - PoP\": \"&lds_bw_pop\"\n },\n {\n \"Metric\": \"LDS Bank Conflict\",\n \"Value\": \"&lds_bconf\",\n \"Unit\": \"Conflicts/access\",\n \"peak\": \"32\",\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&lds_bconf\"] }, 32] }\n },\n {\n \"Metric\": \"Instr Cache Hit Rate\",\n \"Value\": \"&l1i_hitRate_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1i_hitRate_val\"\n }, \n {\n \"Metric\": \"Instr Cache BW\",\n \"Value\": \"&l1i_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1i_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]}] }\n },\n {\n \"Metric\": \"Scalar L1D Cache Hit Rate\",\n \"Value\": \"&l1k_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1k_cacheHits_val\"\n },\n {\n \"Metric\": \"Scalar L1D Cache BW\",\n \"Value\": \"&l1k_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1k_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]}] }\n },\n\n {\n \"Metric\": \"Vector L1D Cache Hit Rate\",\n \"Value\": \"&vecl1_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&vecl1_cacheHits_val\"\n },\n {\n \"Metric\": \"Vector L1D Cache BW\",\n \"Value\": \"&vecl1_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&vecl1_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]}] }\n },\n {\n \"Metric\": \"L2 Cache Hit Rate\",\n \"Value\": \"&l2_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l2_cacheHits_val\"\n },\n {\n \"Metric\": \"L2-Fabric Read BW\",\n \"Value\": \"&eaReadBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaReadBW_val\"] }, $hbmBW] }\n },\n {\n \"Metric\": \"L2-Fabric Write BW\",\n \"Value\": \"&eaWriteBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaWriteBW_val\"] }, $hbmBW] }\n },\n {\n \"Metric\": \"L2-Fabric Read Latency\",\n \"Value\": \"&eaReadLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n },\n {\n \"Metric\": \"L2-Fabric Write Latency\",\n \"Value\": \"&eaWriteLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"waveOcc_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] }\n },\n \"waveOcc_pop\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] },{ \"$multiply\": [$maxWavesPerCU, $numCU] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Value\": \"&waveOcc_val\",\n \"Unit\": \"Wavefronts\",\n \"peak\": { \"$multiply\": [$maxWavesPerCU, $numCU] },\n \"Percent of Peak - PoP\": { \"$multiply\": [100, \"&waveOcc_pop\"] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_IFETCH_LEVEL\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"instrFetchBW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQ_IFETCH\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }, 32] }\n },\n \"instrFetchLat_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\"] }\n }\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Instr Fetch BW\",\n \"Value\": \"&instrFetchBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 32] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&instrFetchBW_val\"]}, { \"$multiply\": [$numSQC, { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 32] }] }] }\n },\n {\n \"Metric\": \"Instr Fetch Latency\",\n \"Value\": \"&instrFetchLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }}\n\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n \n \"valu_intOps_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \n \n \"salu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2] }] }\n },\n \n \"valu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2] }] }\n },\n \n \"mfma_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2, 4] }] }\n },\n \n \"lds_bconf\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \"lds_bw\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n \n \"lds_bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}, \n {\"$multiply\": [$sclk2, $numCU2, 0.00128]}\n ]}\n },\n \n \"unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \n \"ipcIssue_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\", \"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"eaWriteLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null \n ]\n }\n },\n \"eaReadLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null \n ]\n }\n },\n \"eaWriteBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }, \n \"eaReadBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \"l2_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null \n ]\n }\n },\n \"vecl1_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]},\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vecl1_BW_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"l1k_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]} , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]}] },\n null\n ]\n }\n },\n \"l1i_hitRate_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\"]}] }\n },\n \"l1i_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_ICACHE_REQ\",{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n },\n \"l1k_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_DCACHE_REQ\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"VALU FLOPs\",\n \"Value\": \"&valu_flops_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"VALU IOPs\",\n \"Value\": \"&valu_intOps_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_intOps_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (BF16)\",\n \"Value\": \"&mfma_flops_bf16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F16)\",\n \"Value\": \"&mfma_flops_f16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F32)\",\n \"Value\": \"&mfma_flops_f32_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F64)\",\n \"Value\": \"&mfma_flops_f64_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA IOPs (Int8)\",\n \"Value\": \"&mfma_flops_i8_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Value\": $numActiveCUs2,\n \"Unit\": \"CUs\",\n \"peak\": $numCU2,\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, $numActiveCUs2] }, $numCU2]}\n },\n \n {\n \"Metric\": \"SALU Util\",\n \"Value\": \"&salu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&salu_val\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Value\": \"&valu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&valu_val\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Value\": \"&mfma_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&mfma_val\"\n },\n {\n \"Metric\": \"VALU Active Threads/Wave\",\n \"Value\": \"&unpredthreads_val\",\n \"Unit\": \"Threads\",\n \"peak\": 64,\n \"Percent of Peak - PoP\": { \"$multiply\": [\"&unpredthreads_val\", 1.5625]}\n },\n {\n \"Metric\": \"IPC - Issue\",\n \"Value\": \"&ipcIssue_val\",\n \"Unit\": \"Instr/cycle\",\n \"peak\": 5,\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&ipcIssue_val\"] }, 5] }\n },\n {\n \"Metric\": \"LDS BW\",\n \"Value\": \"&lds_bw\",\n \"Unit\": \"GB/sec\",\n \"peak\": {\"$multiply\": [$sclk2, $numCU2, 0.128]},\n \"Percent of Peak - PoP\": \"&lds_bw_pop\"\n },\n {\n \"Metric\": \"LDS Bank Conflict\",\n \"Value\": \"&lds_bconf\",\n \"Unit\": \"Conflicts/access\",\n \"peak\": \"32\",\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&lds_bconf\"] }, 32] }\n },\n {\n \"Metric\": \"Instr Cache Hit Rate\",\n \"Value\": \"&l1i_hitRate_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1i_hitRate_val\"\n }, \n {\n \"Metric\": \"Instr Cache BW\",\n \"Value\": \"&l1i_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1i_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]}] }\n },\n {\n \"Metric\": \"Scalar L1D Cache Hit Rate\",\n \"Value\": \"&l1k_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1k_cacheHits_val\"\n },\n {\n \"Metric\": \"Scalar L1D Cache BW\",\n \"Value\": \"&l1k_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1k_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]}] }\n },\n\n {\n \"Metric\": \"Vector L1D Cache Hit Rate\",\n \"Value\": \"&vecl1_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&vecl1_cacheHits_val\"\n },\n {\n \"Metric\": \"Vector L1D Cache BW\",\n \"Value\": \"&vecl1_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&vecl1_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]}] }\n },\n {\n \"Metric\": \"L2 Cache Hit Rate\",\n \"Value\": \"&l2_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l2_cacheHits_val\"\n }, \n {\n \"Metric\": \"L2-Fabric Read BW\",\n \"Value\": \"&eaReadBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW2\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaReadBW_val\"] }, $hbmBW2] }\n },\n {\n \"Metric\": \"L2-Fabric Write BW\",\n \"Value\": \"&eaWriteBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW2\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaWriteBW_val\"] }, $hbmBW2] }\n },\n {\n \"Metric\": \"L2-Fabric Read Latency\",\n \"Value\": \"&eaReadLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n },\n {\n \"Metric\": \"L2-Fabric Write Latency\",\n \"Value\": \"&eaWriteLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n }\n \n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"waveOcc_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] }\n },\n \"waveOcc_pop\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] },{ \"$multiply\": [$maxWavesPerCU2, $numCU2] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Value\": \"&waveOcc_val\",\n \"Unit\": \"Wavefronts\",\n \"peak\": { \"$multiply\": [$maxWavesPerCU2, $numCU2] },\n \"Percent of Peak - PoP\": { \"$multiply\": [100, \"&waveOcc_pop\"] }\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_IFETCH_LEVEL\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"instrFetchBW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQ_IFETCH\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }, 32] }\n },\n \"instrFetchLat_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Instr Fetch BW\",\n \"Value\": \"&instrFetchBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 32] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&instrFetchBW_val\"]}, { \"$multiply\": [$numSQC2, { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 32] }] }] }\n },\n {\n \"Metric\": \"Instr Fetch Latency\",\n \"Value\": \"&instrFetchLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]\n }}\n\n ]);", + "type": "table" + } + ], + "title": "Speed of Light", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Metric 1": 0, + "Metric 2": 7, + "Percent of Peak - PoP 1": 5, + "Percent of Peak - PoP 2": 6, + "Unit 1": 8, + "Unit 2": 9, + "Value 1": 1, + "Value 2": 2, + "peak 1": 3, + "peak 2": 4 + }, + "renameByName": { + "Percent of Peak - PoP": "Pct-of-Peak", + "Percent of Peak - PoP 1": "Pct-of-Peak (Current)", + "Percent of Peak - PoP 2": "Pct-of-Peak (Baseline)", + "Unit": "", + "Value": "Avg", + "Value 1": "Avg (Current)", + "Value 2": "Avg (Baseline)", + "peak": "Theoretical Max", + "peak 1": "Theoretical Max (Current)", + "peak 2": "Theoretical Max (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dispatch ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 4, + "x": 16, + "y": 2 + }, + "id": 175, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Dispatch ID\": \"&Index\",\n \"Kernel Name\": \"&KernelName\"\n }},\n {\"$sort\": {\n \"Dispatch ID\": 1\n }}\n],\n{ allowDiskUse: true }\n);", + "type": "table" + } + ], + "title": "Dispatch IDs - Current", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "_id": "Dispatch ID" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dispatch ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 4, + "x": 20, + "y": 2 + }, + "id": 215, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "tlh8EwUnk" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Dispatch ID\": \"&Index\",\n \"Kernel Name\": \"&KernelName\"\n }},\n {\"$sort\": {\n \"Dispatch ID\": 1\n }}\n]);", + "type": "table" + } + ], + "title": "Dispatch IDs - Baseline", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "_id": "Dispatch ID" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "System Speed-of-Light", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 36, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 157, + "options": { + "bucketOffset": 0, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + } + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "u5Z2zJhnk" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"elapsedTime1\": {\n \"$divide\": [{\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}, 1000]\n }\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"elapsedTime1\": 1\n }}\n]);", + "type": "table" + } + ], + "title": "Kernel Time Histogram", + "transparent": true, + "type": "histogram" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "TotalDuration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg Duration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + }, + { + "id": "custom.width", + "value": 107 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L1 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 123 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Calls" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 143 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (BF16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 155 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F32)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F64)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Throughput" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 141 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VALU FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (HBM)" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L2 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L1 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Performance" + }, + "properties": [ + { + "id": "custom.width", + "value": 144 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Peak FLOPs" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 213, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "L1 Cache (Bytes)" + } + ] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "HV80ot2nz" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"Throughput\": {\n \"$avg\": { \"$divide\": [\n \n {\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]},\n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"LDS_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 128 ]} \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n },\n \"hbm_bw\": {\n \"$avg\": {\n \"$divide\": [\n {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n },\n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}\n ]\n\n }\n }\n\n }},\n \n {\"$sort\": { \"TotalDuration\": -1 }},\n \n { \"$limit\": $TopN },\n\n {\"$addFields\": {\n \"ai_L1\": { \"$cond\": [\n {\"$ne\": [\"&L1cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"]},\n \"\"\n ]},\n \"ai_L2\": { \"$cond\": [\n {\"$ne\": [\"&L2cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"]},\n \"\"\n ]},\n \"ai_hbm\": { \"$cond\": [\n {\"$ne\": [\"&hbm_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"]},\n \"\"\n ]}\n }}\n]);", + "type": "table" + } + ], + "title": "Top Kernels", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "AvgDuration": 5, + "Calls": 1, + "L1cache_data": 16, + "L2cache_data": 17, + "LDS_data": 15, + "Throughput": 2, + "TotalDuration": 4, + "_id": 0, + "ai_L1": 6, + "ai_L2": 7, + "ai_hbm": 8, + "hbm_bw": 3, + "hbm_data": 18, + "mfma_flops_bf16": 12, + "mfma_flops_f16": 11, + "mfma_flops_f32": 13, + "mfma_flops_f64": 14, + "total_flops": 9, + "valu_flops": 10 + }, + "renameByName": { + "AvgDuration": "Avg Duration", + "Calls": "", + "L1cache_data": "Vector L1D Cache", + "L2cache_data": "L2 Cache", + "LDS_data": "LDS", + "Throughput": "Performance", + "TotalDuration": "Total Duration", + "_id": "Name", + "ai_L1": "AI (Vector L1D Cache)", + "ai_L2": "AI (L2 Cache)", + "ai_hbm": "AI (HBM)", + "hbm_bw": "HBM BW ", + "hbm_data": "HBM", + "mfma_flops_bf16": "MFMA FLOPs (BF16)", + "mfma_flops_f16": "MFMA FLOPs (F16)", + "mfma_flops_f32": "MFMA FLOPs (F32)", + "mfma_flops_f64": "MFMA FLOPs (F64)", + "peak_flops": "Peak FLOPs", + "total_flops": "Total FLOPs", + "valu_flops": "VALU FLOPs" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "TotalDuration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg Duration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + }, + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS " + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L1 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 87 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Calls" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 153 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 143 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (BF16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 155 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F32)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F64)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Throughput" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 141 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VALU FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (HBM)" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L2 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L1 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS (Bytes)" + }, + "properties": [ + { + "id": "custom.width", + "value": 98 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM" + }, + "properties": [ + { + "id": "custom.width", + "value": 124 + }, + { + "id": "unit", + "value": "decbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dispatch" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 251, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "HV80ot2nz" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n { \"$group\": { \n \"_id\": \"&Index\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"Throughput\": {\n \"$avg\": { \"$divide\": [\n \n {\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]},\n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"LDS_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 128]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n },\n\n \"hbm_bw\": {\n \"$avg\": {\n \"$divide\": [\n {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n },\n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}\n ]\n\n }\n }\n\n }},\n \n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": $TopN },\n\n {\"$addFields\": {\n \"ai_L1\": { \"$cond\": [\n {\"$ne\": [\"&L1cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"]},\n \"\"\n ]},\n \"ai_L2\": { \"$cond\": [\n {\"$ne\": [\"&L2cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"]},\n \"\"\n ]},\n \"ai_hbm\": { \"$cond\": [\n {\"$ne\": [\"&hbm_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"]},\n \"\"\n ]}\n\n }}\n]);", + "type": "table" + } + ], + "title": "Top Dispatches", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "AvgDuration": 5, + "Calls": 1, + "L1cache_data": 16, + "L2cache_data": 17, + "LDS_data": 15, + "Throughput": 2, + "TotalDuration": 4, + "_id": 0, + "ai_L1": 6, + "ai_L2": 7, + "ai_hbm": 8, + "hbm_bw": 3, + "hbm_data": 18, + "mfma_flops_bf16": 12, + "mfma_flops_f16": 11, + "mfma_flops_f32": 13, + "mfma_flops_f64": 14, + "peak_flops": 19, + "total_flops": 9, + "valu_flops": 10 + }, + "renameByName": { + "AvgDuration": "Avg Duration", + "Calls": "", + "L1cache_data": "Vector L1D Cache", + "L2cache_data": "L2 Cache", + "LDS_data": "LDS ", + "Throughput": "Performance", + "TotalDuration": "Total Duration", + "_id": "Dispatch", + "ai_L1": "AI (Vector L1D Cache)", + "ai_L2": "AI (L2 Cache)", + "ai_hbm": "AI (HBM)", + "hbm_bw": "HBM BW ", + "hbm_data": "HBM", + "mfma_flops_bf16": "MFMA FLOPs (BF16)", + "mfma_flops_f16": "MFMA FLOPs (F16)", + "mfma_flops_f32": "MFMA FLOPs (F32)", + "mfma_flops_f64": "MFMA FLOPs (F64)", + "total_flops": "Total FLOPs", + "valu_flops": "VALU FLOPs" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Kernel Statistics", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 40, + "panels": [ + { + "description": "All transaction units default to Billion, when per-sec norm is used", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 285, + "options": { + "addAllIDs": false, + "captureMappings": false, + "eventAutoComplete": true, + "eventSource": "options.animateLogo(svgmap, data);\r\nconsole.log(\"Starting render\");\r\nlet buff = data.series[0].fields[2].values.buffer;\r\nlet valueCount = buff.length;\r\nconsole.log(\"The buff is \", valueCount, \" long\");\r\n\r\nsvgmap.wave_life_.text(buff[0]);\r\nsvgmap.active_cu_.text(buff[1]);\r\nsvgmap.salu_.text(buff[2]);\r\nsvgmap.smem_.text(buff[3]);\r\nsvgmap.valu_.text(buff[4]);\r\nsvgmap.mfma_.text(buff[5]);\r\nsvgmap.vmem_.text(buff[6]);\r\nsvgmap.lds_.text(buff[7]);\r\nsvgmap.gws_.text(buff[8]);\r\nsvgmap.br_.text(buff[9]);\r\nsvgmap.vgpr_.text(buff[10]);\r\nsvgmap.sgpr_.text(buff[11]);\r\nsvgmap.lds_alloc_.text(buff[12]);\r\nsvgmap.scratch_alloc_.text(buff[13]);\r\nsvgmap.wavefronts_.text(buff[14]);\r\nsvgmap.workgroups_.text(buff[15]);\r\nsvgmap.lds_req_.text(buff[16]);\r\nsvgmap.il1_fetch_.text(buff[17]);\r\nsvgmap.il1_hit_.text(buff[18]);\r\nsvgmap.il1_l2_rd_.text(buff[19]);\r\nsvgmap.sl1_rd_.text(buff[20]);\r\nsvgmap.sl1_hit_.text(buff[21]);\r\nsvgmap.sl1_l2_rd_.text(buff[22]);\r\nsvgmap.sl1_l2_wr_.text(buff[23]);\r\nsvgmap.sl1_l2_atom_.text(buff[24]);\r\nsvgmap.vl1_rd_.text(buff[25]);\r\nsvgmap.vl1_wr_.text(buff[26]);\r\nsvgmap.vl1_atom_.text(buff[27]);\r\nsvgmap.vl1_hit_.text(buff[28]);\r\nsvgmap.vl1_lat_.text(buff[29]);\r\nsvgmap.vl1_l2_rd_.text(buff[30]);\r\nsvgmap.vl1_l2_wr_.text(buff[31]);\r\nsvgmap.vl1_l2_atom_.text(buff[32]);\r\nsvgmap.l2_rd_.text(buff[33]);\r\nsvgmap.l2_wr_.text(buff[34])\r\nsvgmap.l2_atom_.text(buff[35]);\r\nsvgmap.l2_hit_.text(buff[36]);\r\nsvgmap.l2_rd_lat_.text(buff[37]);\r\nsvgmap.l2_wr_lat_.text(buff[38]);\r\nsvgmap.fabric_rd_lat_.text(buff[39]);\r\nsvgmap.fabric_wr_lat_.text(buff[40]);\r\nsvgmap.fabric_atom_lat_.text(buff[41]);\r\nsvgmap.l2_fabric_rd_.text(buff[42]);\r\nsvgmap.l2_fabric_wr_.text(buff[43]);\r\nsvgmap.l2_fabric_atom_.text(buff[44]);\r\nsvgmap.hbm_rd_.text(buff[45]);\r\nsvgmap.hbm_wr_.text(buff[46]);\r\nsvgmap.lds_util_.text(buff[47]);\r\nsvgmap.vl1_coales_.text(buff[48]);\r\nsvgmap.vl1_stall_.text(buff[49]);\r\nsvgmap.wave_occ_.text(buff[50]);\r\nsvgmap.lds_lat_.text(buff[51]);\r\nsvgmap.il1_lat_.text(buff[52]);\r\nsvgmap.sl1_lat_.text(buff[53]);\r\nsvgmap.gds_req_.text(buff[54]);", + "initAutoComplete": true, + "initSource": "options.animateLogo = (svgmap, data) => {\r\n \r\n}\r\n ", + "svgMappings": [ + { + "mappedName": "wave_life_", + "svgId": "wave_life" + }, + { + "mappedName": "wave_occ_", + "svgId": "wave_occ" + }, + { + "mappedName": "salu_", + "svgId": "salu" + }, + { + "mappedName": "smem_", + "svgId": "smem" + }, + { + "mappedName": "valu_", + "svgId": "valu" + }, + { + "mappedName": "mfma_", + "svgId": "mfma" + }, + { + "mappedName": "vmem_", + "svgId": "vmem" + }, + { + "mappedName": "lds_", + "svgId": "lds" + }, + { + "mappedName": "gws_", + "svgId": "gws" + }, + { + "mappedName": "br_", + "svgId": "br" + }, + { + "mappedName": "active_cu_", + "svgId": "active_cu" + }, + { + "mappedName": "vgpr_", + "svgId": "vgpr" + }, + { + "mappedName": "sgpr_", + "svgId": "sgpr" + }, + { + "mappedName": "lds_alloc_", + "svgId": "lds_alloc" + }, + { + "mappedName": "scratch_alloc_", + "svgId": "scratch_alloc" + }, + { + "mappedName": "wavefronts_", + "svgId": "wavefronts" + }, + { + "mappedName": "workgroups_", + "svgId": "workgroups" + }, + { + "mappedName": "lds_req_", + "svgId": "lds_req" + }, + { + "mappedName": "vl1_wr_", + "svgId": "vl1_wr" + }, + { + "mappedName": "vl1_atom_", + "svgId": "vl1_atom" + }, + { + "mappedName": "sl1_rd_", + "svgId": "sl1_rd" + }, + { + "mappedName": "il1_fetch_", + "svgId": "il1_fetch" + }, + { + "mappedName": "lds_lat_", + "svgId": "lds_lat" + }, + { + "mappedName": "lds_bw_", + "svgId": "lds_bw" + }, + { + "mappedName": "lds_util_", + "svgId": "lds_util" + }, + { + "mappedName": "vl1_hit_", + "svgId": "vl1_hit" + }, + { + "mappedName": "vl1_lat_", + "svgId": "vl1_lat" + }, + { + "mappedName": "vl1_coales_", + "svgId": "vl1_coales" + }, + { + "mappedName": "vl1_stall_", + "svgId": "vl1_stall" + }, + { + "mappedName": "sl1_hit_", + "svgId": "sl1_hit" + }, + { + "mappedName": "sl1_lat_", + "svgId": "sl1_lat" + }, + { + "mappedName": "il1_hit_", + "svgId": "il1_hit" + }, + { + "mappedName": "il1_lat_", + "svgId": "il1_lat" + }, + { + "mappedName": "sl1_l2_rd_", + "svgId": "sl1_l2_rd" + }, + { + "mappedName": "sl1_l2_wr_", + "svgId": "sl1_l2_wr" + }, + { + "mappedName": "sl1_l2_atom_", + "svgId": "sl1_l2_atom" + }, + { + "mappedName": "il1_l2_rd_", + "svgId": "il1_l2_rd" + }, + { + "mappedName": "sl1_l2_rd_", + "svgId": "sl1_l2_rd" + }, + { + "mappedName": "sl1_l2_wr_", + "svgId": "sl1_l2_wr" + }, + { + "mappedName": "sl1_l2_atom_", + "svgId": "sl1_l2_atom" + }, + { + "mappedName": "l2_rd_", + "svgId": "l2_rd" + }, + { + "mappedName": "l2_wr_", + "svgId": "l2_wr" + }, + { + "mappedName": "l2_atom_", + "svgId": "l2_atom" + }, + { + "mappedName": "l2_hit_", + "svgId": "l2_hit" + }, + { + "mappedName": "l2_rd_lat_", + "svgId": "l2_rd_lat" + }, + { + "mappedName": "l2_wr_lat_", + "svgId": "l2_wr_lat" + }, + { + "mappedName": "l2_fabric_rd_", + "svgId": "l2_fabric_rd" + }, + { + "mappedName": "l2_fabric_wr_", + "svgId": "l2_fabric_wr" + }, + { + "mappedName": "l2_fabric_atom_", + "svgId": "l2_fabric_atom" + }, + { + "mappedName": "fabric_rd_lat_", + "svgId": "fabric_rd_lat" + }, + { + "mappedName": "fabric_wr_lat_", + "svgId": "fabric_wr_lat" + }, + { + "mappedName": "fabric_atom_lat_", + "svgId": "fabric_atom_lat" + }, + { + "mappedName": "fabric_hbm_rd_", + "svgId": "fabric_hbm_rd" + }, + { + "mappedName": "fabric_hbm_wr_", + "svgId": "fabric_hbm_wr" + }, + { + "mappedName": "vl1_rd_", + "svgId": "vl1_rd" + }, + { + "mappedName": "vl1_l2_rd_", + "svgId": "vl1_l2_rd" + }, + { + "mappedName": "vl1_l2_wr_", + "svgId": "vl1_l2_wr" + }, + { + "mappedName": "vl1_l2_atom_", + "svgId": "vl1_l2_atom" + }, + { + "mappedName": "hbm_rd_", + "svgId": "hbm_rd" + }, + { + "mappedName": "hbm_wr_", + "svgId": "hbm_wr" + } + ], + "svgSource": "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Wave Occupancy\r\n \r\n Wave Life\r\n \r\n \r\n \r\n xGMI /\r\n PCIe\r\n \r\n GMI\r\n \r\n HBM\r\n \r\n Fabric\r\n \r\n \r\n SALU:\r\n 00000\r\n \r\n \r\n SMEM:\r\n 00000\r\n \r\n \r\n VALU:\r\n 00000\r\n \r\n \r\n MFMA:\r\n 00000\r\n \r\n \r\n VMEM:\r\n 00000\r\n \r\n \r\n LDS:\r\n 00000\r\n \r\n \r\n GWS:\r\n 00000\r\n \r\n \r\n Br:\r\n 00000\r\n \r\n \r\n cycles\r\n Rd:\r\n 00000\r\n \r\n \r\n cycles\r\n Wr:\r\n 00000\r\n \r\n \r\n cycles\r\n Atomic:\r\n 00000\r\n \r\n \r\n Rd:\r\n 00000\r\n \r\n \r\n Wr:\r\n \r\n \r\n 00000\r\n \r\n \r\n Atomic:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n 00000\r\n Rd:\r\n 00000\r\n Wr:\r\n 00000\r\n Req:\r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n per-GCD\r\n cycles\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Rd:\r\n 00000\r\n \r\n \r\n cycles\r\n Wr:\r\n 00000\r\n Wave 0 Instr buff\r\n Wave N-1 Instr buff\r\n Active CUs\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Util:\r\n 00000\r\n \r\n \r\n %\r\n Coales:\r\n 00000\r\n Exec\r\n Instr Buff\r\n Instr Dispatch\r\n LDS\r\n Vector L1 Cache\r\n Scalar L1D Cache\r\n Instr L1 Cache\r\n L2 Cache\r\n 00000\r\n Req:\r\n \r\n \r\n %\r\n Stall:\r\n 00000\r\n 00000\r\n Fetch:\r\n 0000000\r\n 00000\r\n 000/000\r\n \r\n Latency\r\n \r\n LDS Alloc:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n \r\n Scratch Alloc:\r\n \r\n 00000\r\n \r\n Wavefronts:\r\n \r\n 00000\r\n \r\n Workgroups:\r\n \r\n 00000\r\n \r\n VGPRs:\r\n \r\n 00000\r\n \r\n SGPRs:\r\n \r\n 00000\r\n \r\n \r\n 00000\r\n Rd:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n Latency\r\n \r\n \r\n \r\n \r\n Text is not SVG - cannot display\r\n \r\n \r\n" + }, + "pluginVersion": "8.4.0", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"wave_life\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&SQ_WAVES\", 0] },\n { \"$multiply\": [4, { \"$divide\": [\"&SQ_WAVE_CYCLES\", \"&SQ_WAVES\"] }] },\n null\n ]\n }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"valu\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_VALU\", \"&denom\"] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_MFMA\", \"&denom\"] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_VMEM\", \"&denom\"] }\n },\n \"lds_instr\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\", \"&denom\"] }\n },\n \"gws\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_GDS\", \"&denom\"] }\n },\n \"br\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_BRANCH\", \"&denom\"] }\n },\n \"vgpr\": {\n \"$avg\": \"&vgpr\"\n },\n \"sgpr\": {\n \"$avg\": \"&sgpr\"\n },\n \"lds_alloc\": {\n \"$avg\": \"&lds\"\n },\n \"scratch_alloc\": {\n \"$avg\": \"&scr\"\n },\n \"wavefronts\": {\n \"$avg\": \"&SPI_CSN_WAVE\"\n },\n \"workgroups\": {\n \"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"\n },\n \"lds_req\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\", \"&denom\"] }\n }, \n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n },\n \"vl1_rd\": {\n \"$avg\": { \"$divide\": [\"&TCP_TOTAL_READ_sum\", \"&denom\"] }\n },\n \"vl1_wr\": {\n \"$avg\": { \"$divide\": [\"&TCP_TOTAL_WRITE_sum\", \"&denom\"] }\n },\n \"vl1_atom\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"] }\n },\n \"il1_fetch\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"il1_hit\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_REQ\"] }\n },\n \"il1_l2_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_INST_REQ\", \"&denom\"] }\n },\n \"sl1_rd\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"sl1_hit\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQC_DCACHE_REQ\", 0]},\n { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_REQ\"] },\n \"\"\n ]\n }\n},\n \"sl1_l2_rd\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"sl1_l2_wr\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"sl1_l2_atom\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"vl1_hit\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vl1_lat\": {\n \"$avg\": { \n \"$cond\": [\n { \"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0] },\n { \"$divide\": [\"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\"] },\n null\n ]\n }\n },\n \"vl1_coales\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n 0\n ]\n }\n },\n \"vl1_stall\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n \"\"\n ]\n }},\n \"vl1_l2_rd\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_READ_REQ_sum\", \"&denom\"] }\n },\n \"vl1_l2_wr\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"vl1_l2_atom\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }\n },\n \"l2_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_READ_sum\", \"&denom\"] }\n },\n \"l2_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_WRITE_sum\", \"&denom\"] }\n },\n \"l2_atom\": {\n \"$avg\": { \"$divide\": [\"&TCC_ATOMIC_sum\", \"&denom\"] }\n },\n \"l2_hit\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0] },\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null\n ]\n }\n },\n \"l2_rd_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }, 0] },\n { \"$divide\": [\"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }] },\n null\n ]\n }\n },\n \"l2_wr_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 0] },\n { \"$divide\": [\"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] },\n null\n ]\n }\n },\n \"fabric_rd_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_RDREQ_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null\n ]\n }\n },\n \"fabric_wr_lat\": { \n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_WRREQ_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null\n ]\n }\n },\n \"fabric_atom_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\"] },\n null\n ]\n }\n },\n \"l2_fabric_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_sum\", \"&denom\"] }\n },\n \"l2_fabric_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_sum\", \"&denom\"] }\n },\n \"l2_fabric_atom\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_ATOMIC_sum\", \"&denom\"] }\n },\n \"hbm_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\"] }\n },\n \"hbm_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Life\",\n \"Alias\": \"wave_life_\",\n \"Value\": { \"$round\": [\"&wave_life\", 0] }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Alias\": \"active_cu_\",\n \"Value\": {\"$concat\": [\"$numActiveCUs\", \"/\", \"$numCU\"]}\n },\n {\n \"Metric\": \"SALU\",\n \"Alias\": \"salu_\",\n \"Value\": { \"$round\": [\"&salu\", 0] }\n },\n {\n \"Metric\": \"SMEM\",\n \"Alias\": \"smem_\",\n \"Value\": { \"$round\": [\"&smem\", 0] }\n },\n {\n \"Metric\": \"VALU\",\n \"Alias\": \"valu_\",\n \"Value\": { \"$round\": [\"&valu\", 0] }\n },\n {\n \"Metric\": \"MFMA\",\n \"Alias\": \"mfma_\",\n \"Value\": { \"$round\": [\"&mfma\", 0] }\n },\n {\n \"Metric\": \"VMEM\",\n \"Alias\": \"vmem_\",\n \"Value\": { \"$round\": [\"&vmem\", 0] }\n },\n {\n \"Metric\": \"LDS\",\n \"Alias\": \"lds_\",\n \"Value\": { \"$round\": [\"&lds_instr\", 0] }\n },\n {\n \"Metric\": \"GWS\",\n \"Alias\": \"gws_\",\n \"Value\": { \"$round\": [\"&gws\", 0] }\n },\n {\n \"Metric\": \"BR\",\n \"Alias\": \"br_\",\n \"Value\": { \"$round\": [\"&br\", 0] }\n },\n {\n \"Metric\": \"VGPR\",\n \"Alias\": \"vgpr_\",\n \"Value\": { \"$round\": [\"&vgpr\", 0] }\n },\n {\n \"Metric\": \"SGPR\",\n \"Alias\": \"sgpr_\",\n \"Value\": { \"$round\": [\"&sgpr\", 0] }\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Alias\": \"lds_alloc_\",\n \"Value\": { \"$round\": [\"&lds_alloc\", 0] }\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Alias\": \"scratch_alloc_\",\n \"Value\": { \"$round\": [\"&scratch_alloc\", 0] }\n },\n {\n \"Metric\": \"Wavefronts\",\n \"Alias\": \"wavefronts_\",\n \"Value\": { \"$round\": [\"&wavefronts\", 0] }\n },\n {\n \"Metric\": \"Workgroups\",\n \"Alias\": \"workgroups_\",\n \"Value\": { \"$round\": [\"&workgroups\", 0] }\n },\n {\n \"Metric\": \"LDS Req\",\n \"Alias\": \"lds_req_\",\n \"Value\": { \"$round\": [\"&lds_req\", 0] }\n },\n {\n \"Metric\": \"IL1 Fetch\",\n \"Alias\": \"il1_fetch_\",\n \"Value\": { \"$round\": [\"&il1_fetch\", 0] }\n },\n {\n \"Metric\": \"IL1 Hit\",\n \"Alias\": \"il1_hit_\",\n \"Value\": { \"$round\": [{ \"$multiply\": [\"&il1_hit\", 100] }, 0] }\n },\n {\n \"Metric\": \"IL1_L2 Rd\",\n \"Alias\": \"il1_l2_req_\",\n \"Value\": { \"$round\": [\"&il1_l2_req\", 0] }\n },\n {\n \"Metric\": \"vL1D Rd\",\n \"Alias\": \"sl1_rd_\",\n \"Value\": { \"$round\": [\"&sl1_rd\", 0] }\n },\n {\n \"Metric\": \"vL1D Hit\",\n \"Alias\": \"sl1_hit_\",\n \"Value\": { \"$round\": [{ \"$multiply\": [\"&sl1_hit\", 100] }, 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Rd\",\n \"Alias\": \"sl1_l2_rd_\",\n \"Value\": { \"$round\": [\"&sl1_l2_rd\", 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Wr\",\n \"Alias\": \"sl1_l2_wr_\",\n \"Value\": { \"$round\": [\"&sl1_l2_wr\", 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Atomic\",\n \"Alias\": \"sl1_l2_atom_\",\n \"Value\": { \"$round\": [\"&sl1_l2_atom\", 0] }\n },\n {\n \"Metric\": \"VL1 Rd\",\n \"Alias\": \"vl1_rd_\",\n \"Value\": { \"$round\": [\"&vl1_rd\", 0] }\n },\n {\n \"Metric\": \"VL1 Wr\",\n \"Alias\": \"vl1_wr_\",\n \"Value\": { \"$round\": [\"&vl1_wr\", 0] }\n },\n {\n \"Metric\": \"VL1 Atomic\",\n \"Alias\": \"vl1_atom_\",\n \"Value\": { \"$round\": [\"&vl1_atom\", 0] }\n },\n {\n \"Metric\": \"VL1 Hit\",\n \"Alias\": \"vl1_hit_\",\n \"Value\": { \"$round\": [\"&vl1_hit\", 0] }\n },\n {\n \"Metric\": \"VL1 Lat\",\n \"Alias\": \"vl1_lat_\",\n \"Value\": { \"$round\": [\"&vl1_lat\", 0] }\n },\n {\n \"Metric\": \"VL1_L2 Rd\",\n \"Alias\": \"vl1_l2_rd_\",\n \"Value\": { \"$round\": [\"&vl1_l2_rd\", 0] }\n },\n {\n \"Metric\": \"VL1_L2 Wr\",\n \"Alias\": \"vl1_l2_wr_\",\n \"Value\": { \"$round\": [\"&vl1_l2_wr\", 0] }\n },\n {\n \"Metric\": \"vL1_L2 Atomic\",\n \"Alias\": \"vl1_l2_atom_\",\n \"Value\": { \"$round\": [\"&vl1_l2_atom\", 0] }\n },\n {\n \"Metric\": \"L2 Rd\",\n \"Alias\": \"l2_rd_\",\n \"Value\": { \"$round\": [\"&l2_rd\", 0] }\n },\n {\n \"Metric\": \"L2 Wr\",\n \"Alias\": \"l2_wr_\",\n \"Value\": { \"$round\": [\"&l2_wr\", 0] }\n },\n {\n \"Metric\": \"L2 Atomic\",\n \"Alias\": \"l2_atom_\",\n \"Value\": { \"$round\": [\"&l2_atom\", 0] }\n },\n {\n \"Metric\": \"L2 Hit\",\n \"Alias\": \"l2_hit_\",\n \"Value\": { \"$round\": [\"&l2_hit\", 0] }\n },\n {\n \"Metric\": \"L2 Rd Lat\",\n \"Alias\": \"l2_rd_lat_\",\n \"Value\": { \"$round\": [\"&l2_rd_lat\", 0] }\n },\n {\n \"Metric\": \"L2 Wr Lat\",\n \"Alias\": \"l2_wr_lat_\",\n \"Value\": { \"$round\": [\"&l2_wr_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Rd Lat\",\n \"Alias\": \"fabric_rd_lat_\",\n \"Value\": { \"$round\": [\"&fabric_rd_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Wr Lat\",\n \"Alias\": \"fabric_wr_lat_\",\n \"Value\": { \"$round\": [\"&fabric_wr_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Atomic Lat\",\n \"Alias\": \"fabric_atom_lat_\",\n \"Value\": { \"$round\": [\"&fabric_atom_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric_L2 Rd\",\n \"Alias\": \"l2_fabric_rd_\",\n \"Value\": { \"$round\": [\"&l2_fabric_rd\", 0] }\n },\n {\n \"Metric\": \"Fabric_L2 Wr\",\n \"Alias\": \"l2_fabric_wr_\",\n \"Value\": { \"$round\": [\"&l2_fabric_wr\", 0] }\n },\n {\n \"Metric\": \"Fabric_l2 Atomic\",\n \"Alias\": \"l2_fabric_atom_\",\n \"Value\": { \"$round\": [\"&l2_fabric_atom\", 0] }\n },\n {\n \"Metric\": \"HBM Rd\",\n \"Alias\": \"hbm_rd_\",\n \"Value\": { \"$round\": [\"&hbm_rd\", 0] }\n },\n {\n \"Metric\": \"HBM Wr\",\n \"Alias\": \"hbm_wr_\",\n \"Value\": { \"$round\": [\"&hbm_wr\", 0] }\n },\n {\n \"Metric\": \"LDS Util\",\n \"Alias\": \"lds_util_\",\n \"Value\": { \"$round\": [\"&lds_util\", 0] }\n },\n {\n \"Metric\": \"VL1 Coalesce\",\n \"Alias\": \"vl1_coales_\",\n \"Value\": { \"$round\": [\"&vl1_coales\", 0]}\n },\n {\n \"Metric\": \"VL1 Stall\",\n \"Alias\": \"vl1_stall_\",\n \"Value\": { \"$round\": [\"&vl1_stall\", 0]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_LEVEL_WAVES", + "target": "$Workload1.SQ_LEVEL_WAVES.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"wave_occ\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\",\"&GRBM_GUI_ACTIVE\"] }, $numActiveCUs]}\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Alias\": \"wave_occ_\",\n \"Value\":{ \"$round\": [\"&wave_occ\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS", + "target": "$Workload1.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"lds_lat\": {\n \"$avg\": { \n \"$cond\": [\n { \"$ne\": [\"&SQ_INSTS_LDS\", 0] },\n { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\"] },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"LDS Lat\",\n \"Alias\": \"lds_lat_\",\n \"Value\":{ \"$round\": [\"&lds_lat\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQC_ICACHE_INFLIGHT", + "target": "$Workload1.pmc_perf.aggregate([\n\t{\"$match\": {\n\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t}},\n\t{\"$lookup\": {\n\t\t\"from\": \"SQ_IFETCH_LEVEL\",\n\t\t\"localField\": \"Index\",\n\t\t\"foreignField\": \"Index\",\n\t\t\"as\": \"SQ_IFETCH_LEVEL\",\n\t\t\"pipeline\": [\n\t\t\t{\"$match\": {\n\t\t\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t\t\t}},\n\t\t\t{\"$project\":{\n\t\t\t\t\"_id\": 0,\n\t\t\t\t\"SQ_ACCUM_PREV_HIRES\": 1\n\t\t\t}}\n\t\t]\n\t}},\n\t{\"$unwind\":{\n\t\t\"path\": \"&SQ_IFETCH_LEVEL\"\n\t}},\n\t{\"$group\":{\n\t\t\"_id\": null,\n\t\t\"il1_lat\": {\n\t\t\t\"$avg\":{\n\t\t\t\t\"$cond\":[\n\t\t\t\t\t\t{\"$ne\":[\"&SQC_ICACHE_REQ\",0]},\n\t\t\t\t\t\t{\"$divide\":[\"&SQ_IFETCH_LEVEL.SQ_ACCUM_PREV_HIRES\",\"&SQC_ICACHE_REQ\"]},\n\t\t\t\t\t\tnull\n\t\t\t\t\t]\n\t\t\t}\n\t\t} \n\t}},\n\t{\"$set\": {\n \t\t\"array\": [\n \t\t{\n \t\t\t\"Metric\": \"IL1 Lat\",\n \t\t\t\"Alias\": \"il1_lat_\",\n \t\t\t\"Value\": { \"$round\": [\"&il1_lat\", 0] }\n \t\t}\n \t\t]\n\t}},\n \t{\"$unwind\": {\n \t\t\"path\": \"&array\"\n \t}},\n \t{\"$replaceRoot\": {\n \t\t\"newRoot\": \"&array\"\n \t}}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQC_DCACHE_INFLIGHT_LEVEL", + "target": "$Workload1.pmc_perf.aggregate([\n\t{\"$match\": {\n\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t}},\n\t{\"$lookup\": {\n\t\t\"from\": \"SQ_IFETCH_LEVEL\",\n\t\t\"localField\": \"Index\",\n\t\t\"foreignField\": \"Index\",\n\t\t\"as\": \"SQ_IFETCH_LEVEL\",\n\t\t\"pipeline\": [\n\t\t\t{\"$match\": {\n\t\t\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t\t\t}},\n\t\t\t{\"$project\":{\n\t\t\t\t\"_id\": 0,\n\t\t\t\t\"SQ_ACCUM_PREV_HIRES\": 1\n\t\t\t}}\n\t\t]\n\t}},\n\t{\"$unwind\":{\n\t\t\"path\": \"&SQ_IFETCH_LEVEL\"\n\t}},\n\t{\"$group\":{\n\t\t\"_id\": null,\n\t\t\"sl1_lat\": {\n\t\t\t\"$avg\":{\n\t\t\t\t\"$cond\":[\n\t\t\t\t\t\t{\"$ne\":[\"&SQC_DCACHE_REQ\",0]},\n\t\t\t\t\t\t{\"$divide\":[\"&SQ_IFETCH_LEVEL.SQ_ACCUM_PREV_HIRES\",\"&SQC_DCACHE_REQ\"]},\n\t\t\t\t\t\tnull\n\t\t\t\t\t]\n\t\t\t}\n\t\t} \n\t}},\n\t{\"$set\": {\n \t\t\"array\": [\n \t\t{\n \t\t\t\"Metric\": \"vL1D Lat\",\n \t\t\t\"Alias\": \"sl1_lat_\",\n \t\t\t\"Value\": { \"$round\": [\"&sl1_lat\", 0] }\n \t\t}\n \t\t]\n\t}},\n \t{\"$unwind\": {\n \t\t\"path\": \"&array\"\n \t}},\n \t{\"$replaceRoot\": {\n \t\t\"newRoot\": \"&array\"\n \t}}\n]);", + "type": "table" + } + ], + "title": "Memory Chart (Normalization: $normUnit\")", + "transformations": [ + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "string", + "targetField": "Value" + } + ], + "fields": {} + } + }, + { + "id": "merge", + "options": {} + } + ], + "type": "amd-custom-svg" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Memory Chart Analysis", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 241, + "panels": [ + { + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 253, + "pconfig": { + "fixScale": "", + "layout": { + "dragmode": "zoom", + "font": { + "family": "\"Open Sans\", Helvetica, Arial, sans-serif" + }, + "hovermode": "closest", + "legend": { + "orientation": "v" + }, + "showlegend": true, + "xaxis": { + "range": [ + -2, + 3.8 + ], + "rangemode": "between", + "showgrid": true, + "title": "Arithmetic Intensity (FLOP/Byte)", + "type": "log", + "zeroline": false + }, + "yaxis": { + "rangemode": "normal", + "showgrid": true, + "title": "Performance (GFLOP/sec)", + "type": "log", + "zeroline": false + }, + "zaxis": { + "rangemode": "normal", + "showgrid": true, + "type": "linear", + "zeroline": false + } + }, + "loadFromCDN": false, + "settings": { + "displayModeBar": false, + "type": "scatter" + }, + "showAnnotations": true, + "traces": [ + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm" + }, + "name": "HBM-VLAU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2" + }, + "name": "L2-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1" + }, + "name": "vL1D-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS" + }, + "name": "LDS-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "cur_ai_hbm", + "y": "cur_perf" + }, + "name": "Cur - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "cur_ai_L2", + "y": "cur_perf" + }, + "name": "Cur - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "cur_ai_L1", + "y": "cur_perf" + }, + "name": "Cur - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "base_ai_hbm", + "y": "base_perf" + }, + "name": "Baseline - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "base_ai_L2", + "y": "base_perf" + }, + "name": "Baseline - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "base_ai_L1", + "y": "base_perf" + }, + "name": "Baseline - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA" + }, + "name": "HBM-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA" + }, + "name": "L2-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA" + }, + "name": "vL1D-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA" + }, + "name": "LDS-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + } + ] + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "rawQuery": true, + "refId": "HBM-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"hbmBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&HBMBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n\n \"L2Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L2Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"&high_flop\"\n }\n },\n\n \"L1Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L1Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n\n \"LDSBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&LDSBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Cur Workload", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"cur_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"cur_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"cur_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"cur_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Baseline Workload", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Roofline)\"}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"base_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"base_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"base_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"base_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + } + ], + "title": "Empirical Roofline FP32/FP64 (MI200)", + "type": "natel-plotly-panel", + "version": 1 + }, + { + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 312, + "pconfig": { + "fixScale": "", + "layout": { + "dragmode": "zoom", + "font": { + "family": "\"Open Sans\", Helvetica, Arial, sans-serif" + }, + "hovermode": "closest", + "legend": { + "orientation": "v" + }, + "showlegend": true, + "xaxis": { + "range": [ + -2, + 3.8 + ], + "rangemode": "between", + "showgrid": true, + "title": "Arithmetic Intensity (FLOP/Byte)", + "type": "log", + "zeroline": false + }, + "yaxis": { + "rangemode": "normal", + "showgrid": true, + "title": "Performance (GFLOP/sec)", + "type": "log", + "zeroline": false + }, + "zaxis": { + "rangemode": "normal", + "showgrid": true, + "type": "linear", + "zeroline": false + } + }, + "loadFromCDN": false, + "settings": { + "displayModeBar": false, + "type": "scatter" + }, + "showAnnotations": true, + "traces": [ + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "cur_ai_hbm", + "y": "cur_perf" + }, + "name": "Cur - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "cur_ai_L2", + "y": "cur_perf" + }, + "name": "Cur - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "cur_ai_L1", + "y": "cur_perf" + }, + "name": "Cur - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "base_ai_hbm", + "y": "base_perf" + }, + "name": "Baseline - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "base_ai_L2", + "y": "base_perf" + }, + "name": "Baseline - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "base_ai_L1", + "y": "base_perf" + }, + "name": "Baseline - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA_fp16" + }, + "name": "HBM-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA_fp16" + }, + "name": "L2-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA_fp16" + }, + "name": "vL1D-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA_fp16" + }, + "name": "LDS-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA_i8" + }, + "name": "HBM-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA_i8" + }, + "name": "L2-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA_i8" + }, + "name": "vL1D-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA_i8" + }, + "name": "LDS-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + } + ] + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"hbmBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&HBMBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Cur Workload", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"cur_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"cur_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"cur_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"cur_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Baseline Workload", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Roofline)\"}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"base_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"base_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"base_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"base_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"L2Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L2Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"L1Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L1Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"LDSBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&LDSBw\", 1] },0, 32]}, \" GB/s\"] }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + } + ], + "title": "Empirical Roofline FP16/INT8 (MI200)", + "type": "natel-plotly-panel", + "version": 1 + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Roofline Analysis", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 2, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 13, + "x": 0, + "y": 6 + }, + "id": 6, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1 \n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n\n \"cpfBusy_avg\": {\"$avg\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_min\": {\"$min\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_max\": {\"$max\": \"&CPF_CPF_STAT_BUSY\"},\n\n \"cpfUtil_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n\n \"cpfStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\": {\"$avg\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_min\": {\"$min\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_max\": {\"$max\": \"&CPF_CPF_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n\n \"utcL1Stall_avg\": {\"$avg\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\": {\"$min\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\": {\"$max\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"}\n\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Busy\",\n \"Avg\": \"&cpfBusy_avg\",\n \"Min\": \"&cpfBusy_min\",\n \"Max\": \"&cpfBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Util\",\n \"Avg\": \"&cpfUtil_avg\",\n \"Min\": \"&cpfUtil_min\",\n \"Max\": \"&cpfUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPF Stall\",\n \"Avg\": \"&cpfStall_avg\",\n \"Min\": \"&cpfStall_min\",\n \"Max\": \"&cpfStall_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Busy\",\n \"Avg\": \"&l2CacheBusy_avg\",\n \"Min\": \"&l2CacheBusy_min\",\n \"Max\": \"&l2CacheBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Stall\",\n \"Avg\": \"&l2CacheStall_avg\",\n \"Min\": \"&l2CacheStall_min\",\n \"Max\": \"&l2CacheStall_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles/Kernel\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Command Processor)\"}}\n }},\n\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1 \n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"cpfBusy_avg\": {\"$avg\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_min\": {\"$min\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_max\": {\"$max\": \"&CPF_CPF_STAT_BUSY\"},\n\n \"cpfUtil_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n\n \"cpfStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\": {\"$avg\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_min\": {\"$min\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_max\": {\"$max\": \"&CPF_CPF_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n\n \"utcL1Stall_avg\": {\"$avg\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\": {\"$min\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\": {\"$max\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Busy\",\n \"Avg\": \"&cpfBusy_avg\",\n \"Min\": \"&cpfBusy_min\",\n \"Max\": \"&cpfBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Util\",\n \"Avg\": \"&cpfUtil_avg\",\n \"Min\": \"&cpfUtil_min\",\n \"Max\": \"&cpfUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPF Stall\",\n \"Avg\": \"&cpfStall_avg\",\n \"Min\": \"&cpfStall_min\",\n \"Max\": \"&cpfStall_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Busy\",\n \"Avg\": \"&l2CacheBusy_avg\",\n \"Min\": \"&l2CacheBusy_min\",\n \"Max\": \"&l2CacheBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Stall\",\n \"Avg\": \"&l2CacheStall_avg\",\n \"Min\": \"&l2CacheStall_min\",\n \"Max\": \"&l2CacheStall_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles/Kernel\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Command Processor Fetcher", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 171 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 180 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baselin)" + }, + "properties": [ + { + "id": "custom.width", + "value": 139 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 147 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 11, + "x": 13, + "y": 6 + }, + "id": 4, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n\n \"cpcBusy_avg\": {\"$avg\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_min\": {\"$min\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_max\": {\"$max\": \"&CPC_CPC_STAT_BUSY\"},\n\n \"cpcUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"cpcStall_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallCycles_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallRate_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"cpcPacketDecoding_avg\":{\"$avg\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_min\":{\"$min\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_max\":{\"$max\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n\n \"spiUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\":{\"$avg\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_min\":{\"$min\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_max\":{\"$max\": \"&CPC_CPC_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"utcL1Stall_avg\":{\"$avg\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\":{\"$min\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\":{\"$max\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n\n \"utcL2Busy_avg\":{\"$avg\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_min\":{\"$min\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_max\":{\"$max\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n\n \"utcL2Util_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Busy Cycles\",\n \"Avg\": \"&cpcBusy_avg\",\n \"Min\": \"&cpcBusy_min\",\n \"Max\": \"&cpcBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Util\",\n \"Avg\": \"&cpcUtil_avg\",\n \"Min\": \"&cpcUtil_min\",\n \"Max\": \"&cpcUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Stall Cycles\",\n \"Avg\": \"&cpcStallCycles_avg\",\n \"Min\": \"&cpcStallCycles_min\",\n \"Max\": \"&cpcStallCycles_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Stall Rate\",\n \"Avg\": \"&cpcStallRate_avg\",\n \"Min\": \"&cpcStallRate_min\",\n \"Max\": \"&cpcStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Packet Decoding\",\n \"Avg\": \"&cpcPacketDecoding_avg\",\n \"Min\": \"&cpcPacketDecoding_min\",\n \"Max\": \"&cpcPacketDecoding_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Busy Cycles\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Util\",\n \"Avg\": \"&spiUtil_avg\",\n \"Min\": \"&spiUtil_min\",\n \"Max\": \"&spiUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall Cycles\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Busy Cycles\",\n \"Avg\": \"&utcL2Busy_avg\",\n \"Min\": \"&utcL2Busy_min\",\n \"Max\": \"&utcL2Busy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Util\",\n \"Avg\": \"&utcL2Util_avg\",\n \"Min\": \"&utcL2Util_min\",\n \"Max\": \"&utcL2Util_max\", \n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Command Processor)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"cpcBusy_avg\": {\"$avg\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_min\": {\"$min\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_max\": {\"$max\": \"&CPC_CPC_STAT_BUSY\"},\n\n \"cpcUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"cpcStall_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallCycles_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallRate_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"cpcPacketDecoding_avg\":{\"$avg\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_min\":{\"$min\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_max\":{\"$max\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n\n \"spiUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\":{\"$avg\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_min\":{\"$min\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_max\":{\"$max\": \"&CPC_CPC_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"utcL1Stall_avg\":{\"$avg\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\":{\"$min\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\":{\"$max\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n\n \"utcL2Busy_avg\":{\"$avg\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_min\":{\"$min\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_max\":{\"$max\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n\n \"utcL2Util_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Busy Cycles\",\n \"Avg\": \"&cpcBusy_avg\",\n \"Min\": \"&cpcBusy_min\",\n \"Max\": \"&cpcBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Util\",\n \"Avg\": \"&cpcUtil_avg\",\n \"Min\": \"&cpcUtil_min\",\n \"Max\": \"&cpcUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Stall Cycles\",\n \"Avg\": \"&cpcStallCycles_avg\",\n \"Min\": \"&cpcStallCycles_min\",\n \"Max\": \"&cpcStallCycles_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Stall Rate\",\n \"Avg\": \"&cpcStallRate_avg\",\n \"Min\": \"&cpcStallRate_min\",\n \"Max\": \"&cpcStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Packet Decoding\",\n \"Avg\": \"&cpcPacketDecoding_avg\",\n \"Min\": \"&cpcPacketDecoding_min\",\n \"Max\": \"&cpcPacketDecoding_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Busy Cycles\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Util\",\n \"Avg\": \"&spiUtil_avg\",\n \"Min\": \"&spiUtil_min\",\n \"Max\": \"&spiUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall Cycles\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Busy Cycles\",\n \"Avg\": \"&utcL2Busy_avg\",\n \"Min\": \"&utcL2Busy_min\",\n \"Max\": \"&utcL2Busy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Util\",\n \"Avg\": \"&utcL2Util_avg\",\n \"Min\": \"&utcL2Util_min\",\n \"Max\": \"&utcL2Util_max\", \n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Command Processor Compute", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Metric 1": "", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Command Processor (CPC/CPF)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 102, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 101 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 96 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 145 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg 2" + }, + "properties": [ + { + "id": "custom.width", + "value": 97 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min 2" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 123 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 106, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"csBusy_avg\":{\"$avg\": \"&SPI_CSN_BUSY\"},\n \"csBusy_min\":{\"$min\": \"&SPI_CSN_BUSY\"},\n \"csBusy_max\":{\"$max\": \"&SPI_CSN_BUSY\"},\n\n \"gpuBusy_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&GRBM_SPI_BUSY\"},\n\n \"sqBusy_avg\":{\"$avg\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_min\":{\"$min\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_max\":{\"$max\": \"&SQ_BUSY_CYCLES\"},\n\n \"dispatchedWorkgroups_avg\":{\"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_min\":{\"$min\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_max\":{\"$max\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n\n \"dispatchedWavefronts_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n\n \"waveAllocFail_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC\"},\n\n \"waveAllocFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Busy\",\n \"Avg\": \"&csBusy_avg\",\n \"Min\": \"&csBusy_min\",\n \"Max\": \"&csBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Busy\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SQ Busy\",\n \"Avg\": \"&sqBusy_avg\",\n \"Min\": \"&sqBusy_min\",\n \"Max\": \"&sqBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Dispatched Workgroups\",\n \"Avg\": \"&dispatchedWorkgroups_avg\",\n \"Min\": \"&dispatchedWorkgroups_min\",\n \"Max\": \"&dispatchedWorkgroups_max\", \n \"Unit\": \"Workgroups\"\n },\n {\n \"Metric\": \"Dispatched Wavefronts\",\n \"Avg\": \"&dispatchedWavefronts_avg\",\n \"Min\": \"&dispatchedWavefronts_min\",\n \"Max\": \"&dispatchedWavefronts_max\", \n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Wave Alloc Failed\",\n \"Avg\": \"&waveAllocFail_avg\",\n \"Min\": \"&waveAllocFail_min\",\n \"Max\": \"&waveAllocFail_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Wave Alloc Failed - CS\",\n \"Avg\": \"&waveAllocFailCS_avg\",\n \"Min\": \"&waveAllocFailCS_min\",\n \"Max\": \"&waveAllocFailCS_max\", \n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Shader Processor Input)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"csBusy_avg\":{\"$avg\": \"&SPI_CSN_BUSY\"},\n \"csBusy_min\":{\"$min\": \"&SPI_CSN_BUSY\"},\n \"csBusy_max\":{\"$max\": \"&SPI_CSN_BUSY\"},\n\n \"gpuBusy_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&GRBM_SPI_BUSY\"},\n\n \"sqBusy_avg\":{\"$avg\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_min\":{\"$min\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_max\":{\"$max\": \"&SQ_BUSY_CYCLES\"},\n\n \"dispatchedWorkgroups_avg\":{\"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_min\":{\"$min\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_max\":{\"$max\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n\n \"dispatchedWavefronts_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"waveAllocFail_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC\"},\n\n \"waveAllocFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Busy\",\n \"Avg\": \"&csBusy_avg\",\n \"Min\": \"&csBusy_min\",\n \"Max\": \"&csBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Busy\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SQ Busy\",\n \"Avg\": \"&sqBusy_avg\",\n \"Min\": \"&sqBusy_min\",\n \"Max\": \"&sqBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Dispatched Workgroups\",\n \"Avg\": \"&dispatchedWorkgroups_avg\",\n \"Min\": \"&dispatchedWorkgroups_min\",\n \"Max\": \"&dispatchedWorkgroups_max\", \n \"Unit\": \"Workgroups\"\n },\n {\n \"Metric\": \"Dispatched Wavefronts\",\n \"Avg\": \"&dispatchedWavefronts_avg\",\n \"Min\": \"&dispatchedWavefronts_min\",\n \"Max\": \"&dispatchedWavefronts_max\", \n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Wave Alloc Failed\",\n \"Avg\": \"&waveAllocFail_avg\",\n \"Min\": \"&waveAllocFail_min\",\n \"Max\": \"&waveAllocFail_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Wave Alloc Failed - CS\",\n \"Avg\": \"&waveAllocFailCS_avg\",\n \"Min\": \"&waveAllocFailCS_min\",\n \"Max\": \"&waveAllocFailCS_max\", \n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "SPI Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit 1": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 285 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 102 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 122 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 242 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 104, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"waveReqFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n\n \"csStall_avg\":{\"$avg\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_min\":{\"$min\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_max\":{\"$max\": \"&SPI_RA_RES_STALL_CSN\"},\n\n \"csStallRate_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n\n \"scratchStall_avg\":{\"$avg\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_min\":{\"$min\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_max\":{\"$max\": \"&SPI_RA_TMP_STALL_CSN\"},\n\n \"simdWaveslots_avg\":{\"$avg\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_min\":{\"$min\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_max\":{\"$max\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n\n \"simdVGPRs_avg\":{\"$avg\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_min\":{\"$min\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_max\":{\"$max\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n\n \"simdSGPRs_avg\":{\"$avg\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_min\":{\"$min\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_max\":{\"$max\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n\n \"cuLDS_avg\":{\"$avg\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_min\":{\"$min\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_max\":{\"$max\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n\n \"cuBarries_avg\":{\"$avg\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_min\":{\"$min\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_max\":{\"$max\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n\n \"bulkyResource_avg\":{\"$avg\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_min\":{\"$min\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_max\":{\"$max\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n\n \"threadgroupLimit_avg\":{\"$avg\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_min\":{\"$min\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_max\":{\"$max\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n\n \"waveLimit_avg\":{\"$avg\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_min\":{\"$min\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_max\":{\"$max\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n\n \"vgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n\n \"sgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \n \n \"sgprsWritesUti_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave request Failed (CS)\",\n \"Avg\": \"&waveReqFailCS_avg\",\n \"Min\": \"&waveReqFailCS_min\",\n \"Max\": \"&waveReqFailCS_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall\",\n \"Avg\": \"&csStall_avg\",\n \"Min\": \"&csStall_min\",\n \"Max\": \"&csStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall Rate\",\n \"Avg\": \"&csStallRate_avg\",\n \"Min\": \"&csStallRate_min\",\n \"Max\": \"&csStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Scratch Stall\",\n \"Avg\": \"&scratchStall_avg\",\n \"Min\": \"&scratchStall_min\",\n \"Max\": \"&scratchStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Insufficient SIMD Waveslots\",\n \"Avg\": \"&simdWaveslots_avg\",\n \"Min\": \"&simdWaveslots_min\",\n \"Max\": \"&simdWaveslots_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD VGPRs\",\n \"Avg\": \"&simdVGPRs_avg\",\n \"Min\": \"&simdVGPRs_min\",\n \"Max\": \"&simdVGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD SGPRs\",\n \"Avg\": \"&simdSGPRs_avg\",\n \"Min\": \"&simdSGPRs_min\",\n \"Max\": \"&simdSGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient CU LDS\",\n \"Avg\": \"&cuLDS_avg\",\n \"Min\": \"&cuLDS_min\",\n \"Max\": \"&cuLDS_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient CU Barries\",\n \"Avg\": \"&cuBarries_avg\",\n \"Min\": \"&cuBarries_min\",\n \"Max\": \"&cuBarries_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient Bulky Resource\",\n \"Avg\": \"&bulkyResource_avg\",\n \"Min\": \"&bulkyResource_min\",\n \"Max\": \"&bulkyResource_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Reach CU Threadgroups Limit\",\n \"Avg\": \"&threadgroupLimit_avg\",\n \"Min\": \"&threadgroupLimit_min\",\n \"Max\": \"&threadgroupLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Reach CU Wave Limit\",\n \"Avg\": \"&waveLimit_avg\",\n \"Min\": \"&waveLimit_min\",\n \"Max\": \"&waveLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"VGPR Writes\",\n \"Avg\": \"&vgprsWrites_avg\",\n \"Min\": \"&vgprsWrites_min\",\n \"Max\": \"&vgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"SGPR Writes\",\n \"Avg\": \"&sgprsWrites_avg\",\n \"Min\": \"&sgprsWrites_min\",\n \"Max\": \"&sgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Shader Processor Input)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"waveReqFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n\n \"csStall_avg\":{\"$avg\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_min\":{\"$min\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_max\":{\"$max\": \"&SPI_RA_RES_STALL_CSN\"},\n\n \"csStallRate_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n\n \"scratchStall_avg\":{\"$avg\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_min\":{\"$min\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_max\":{\"$max\": \"&SPI_RA_TMP_STALL_CSN\"},\n\n \"simdWaveslots_avg\":{\"$avg\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_min\":{\"$min\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_max\":{\"$max\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n\n \"simdVGPRs_avg\":{\"$avg\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_min\":{\"$min\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_max\":{\"$max\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n\n \"simdSGPRs_avg\":{\"$avg\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_min\":{\"$min\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_max\":{\"$max\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n\n \"cuLDS_avg\":{\"$avg\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_min\":{\"$min\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_max\":{\"$max\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n\n \"cuBarries_avg\":{\"$avg\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_min\":{\"$min\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_max\":{\"$max\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n\n \"bulkyResource_avg\":{\"$avg\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_min\":{\"$min\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_max\":{\"$max\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n\n \"threadgroupLimit_avg\":{\"$avg\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_min\":{\"$min\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_max\":{\"$max\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n\n \"waveLimit_avg\":{\"$avg\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_min\":{\"$min\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_max\":{\"$max\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n\n \"vgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n\n \"sgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \n \n \"sgprsWritesUti_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave request Failed (CS)\",\n \"Avg\": \"&waveReqFailCS_avg\",\n \"Min\": \"&waveReqFailCS_min\",\n \"Max\": \"&waveReqFailCS_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall\",\n \"Avg\": \"&csStall_avg\",\n \"Min\": \"&csStall_min\",\n \"Max\": \"&csStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall Rate\",\n \"Avg\": \"&csStallRate_avg\",\n \"Min\": \"&csStallRate_min\",\n \"Max\": \"&csStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Scratch Stall\",\n \"Avg\": \"&scratchStall_avg\",\n \"Min\": \"&scratchStall_min\",\n \"Max\": \"&scratchStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Insufficient SIMD Waveslots\",\n \"Avg\": \"&simdWaveslots_avg\",\n \"Min\": \"&simdWaveslots_min\",\n \"Max\": \"&simdWaveslots_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD VGPRs\",\n \"Avg\": \"&simdVGPRs_avg\",\n \"Min\": \"&simdVGPRs_min\",\n \"Max\": \"&simdVGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD SGPRs\",\n \"Avg\": \"&simdSGPRs_avg\",\n \"Min\": \"&simdSGPRs_min\",\n \"Max\": \"&simdSGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient CU LDS\",\n \"Avg\": \"&cuLDS_avg\",\n \"Min\": \"&cuLDS_min\",\n \"Max\": \"&cuLDS_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient CU Barries\",\n \"Avg\": \"&cuBarries_avg\",\n \"Min\": \"&cuBarries_min\",\n \"Max\": \"&cuBarries_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient Bulky Resource\",\n \"Avg\": \"&bulkyResource_avg\",\n \"Min\": \"&bulkyResource_min\",\n \"Max\": \"&bulkyResource_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Reach CU Threadgroups Limit\",\n \"Avg\": \"&threadgroupLimit_avg\",\n \"Min\": \"&threadgroupLimit_min\",\n \"Max\": \"&threadgroupLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Reach CU Wave Limit\",\n \"Avg\": \"&waveLimit_avg\",\n \"Min\": \"&waveLimit_min\",\n \"Max\": \"&waveLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"VGPR Writes\",\n \"Avg\": \"&vgprsWrites_avg\",\n \"Min\": \"&vgprsWrites_min\",\n \"Max\": \"&vgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"SGPR Writes\",\n \"Avg\": \"&sgprsWrites_avg\",\n \"Min\": \"&sgprsWrites_min\",\n \"Max\": \"&sgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "SPI Resource Allocation", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Shader Processor Input (SPI)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 185, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 169 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 142 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 196 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 174 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max" + }, + "properties": [ + { + "id": "custom.width", + "value": 168 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min" + }, + "properties": [ + { + "id": "custom.width", + "value": 272 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 225 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 100 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 10, + "interval": "12h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"gridSize_avg\":{\"$avg\": \"&grd\"},\n \"gridSize_min\":{\"$min\": \"&grd\"},\n \"gridSize_max\":{\"$max\": \"&grd\"},\n\n \"workSize_avg\":{\"$avg\": \"&wgr\"},\n \"workSize_min\":{\"$min\": \"&wgr\"},\n \"workSize_max\":{\"$max\": \"&wgr\"},\n\n \"totWavefront_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"savedWavefront_avg\":{\"$avg\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_min\":{\"$min\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_max\":{\"$max\": \"&SQ_WAVES_SAVED\"},\n\n \"restoredWavefront_avg\":{\"$avg\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_min\":{\"$min\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_max\":{\"$max\": \"&SQ_WAVES_RESTORED\"},\n\n \"vgprs_avg\":{\"$avg\": \"&vgpr\"},\n \"vgprs_min\":{\"$min\": \"&vgpr\"},\n \"vgprs_max\":{\"$max\": \"&vgpr\"},\n\n \"sgprs_avg\":{\"$avg\": \"&sgpr\"},\n \"sgprs_min\":{\"$min\": \"&sgpr\"},\n \"sgprs_max\":{\"$max\": \"&sgpr\"},\n\n \"ldsAlloc_avg\":{\"$avg\": \"&lds\"},\n \"ldsAlloc_min\":{\"$min\": \"&lds\"},\n \"ldsAlloc_max\":{\"$max\": \"&lds\"},\n\n \"scratchAlloc_avg\":{\"$avg\": \"&scr\"},\n \"scratchAlloc_min\":{\"$min\": \"&scr\"},\n \"scratchAlloc_max\":{\"$max\": \"&scr\"}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Grid Size\",\n \"Avg\": \"&gridSize_avg\",\n \"Min\": \"&gridSize_min\",\n \"Max\": \"&gridSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Workgroup Size\",\n \"Avg\": \"&workSize_avg\",\n \"Min\": \"&workSize_min\",\n \"Max\": \"&workSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Total Wavefronts\",\n \"Avg\": \"&totWavefront_avg\",\n \"Min\": \"&totWavefront_min\",\n \"Max\": \"&totWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Saved Wavefronts\",\n \"Avg\": \"&savedWavefront_avg\",\n \"Min\": \"&savedWavefront_min\",\n \"Max\": \"&savedWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Restored Wavefronts\",\n \"Avg\": \"&restoredWavefront_avg\",\n \"Min\": \"&restoredWavefront_min\",\n \"Max\": \"&restoredWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"VGPRs\",\n \"Avg\": \"&vgprs_avg\",\n \"Min\": \"&vgprs_min\",\n \"Max\": \"&vgprs_max\",\n \"Unit\": \"Registers\"\n },\n {\n \"Metric\": \"SGPRs\",\n \"Avg\": \"&sgprs_avg\",\n \"Min\": \"&sgprs_min\",\n \"Max\": \"&sgprs_max\",\n \"Unit\":\"Registers\"\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Avg\": \"&ldsAlloc_avg\",\n \"Min\": \"&ldsAlloc_min\",\n \"Max\": \"&ldsAlloc_max\",\n \"Unit\": \"Bytes\"\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Avg\": \"&scratchAlloc_avg\",\n \"Min\": \"&scratchAlloc_min\",\n \"Max\": \"&scratchAlloc_max\",\n \"Unit\": \"Bytes\"\n }\n \n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"gridSize_avg\":{\"$avg\": \"&grd\"},\n \"gridSize_min\":{\"$min\": \"&grd\"},\n \"gridSize_max\":{\"$max\": \"&grd\"},\n\n \"workSize_avg\":{\"$avg\": \"&wgr\"},\n \"workSize_min\":{\"$min\": \"&wgr\"},\n \"workSize_max\":{\"$max\": \"&wgr\"},\n\n\n \"totWavefront_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"savedWavefront_avg\":{\"$avg\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_min\":{\"$min\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_max\":{\"$max\": \"&SQ_WAVES_SAVED\"},\n\n \"restoredWavefront_avg\":{\"$avg\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_min\":{\"$min\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_max\":{\"$max\": \"&SQ_WAVES_RESTORED\"},\n\n\n \"vgprs_avg\":{\"$avg\": \"&vgpr\"},\n \"vgprs_min\":{\"$min\": \"&vgpr\"},\n \"vgprs_max\":{\"$max\": \"&vgpr\"},\n\n \"sgprs_avg\":{\"$avg\": \"&sgpr\"},\n \"sgprs_min\":{\"$min\": \"&sgpr\"},\n \"sgprs_max\":{\"$max\": \"&sgpr\"},\n\n \"ldsAlloc_avg\":{\"$avg\": \"&lds\"},\n \"ldsAlloc_min\":{\"$min\": \"&lds\"},\n \"ldsAlloc_max\":{\"$max\": \"&lds\"},\n\n \"scratchAlloc_avg\":{\"$avg\": \"&scr\"},\n \"scratchAlloc_min\":{\"$min\": \"&scr\"},\n \"scratchAlloc_max\":{\"$max\": \"&scr\"}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Grid Size\",\n \"Avg\": \"&gridSize_avg\",\n \"Min\": \"&gridSize_min\",\n \"Max\": \"&gridSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Workgroup Size\",\n \"Avg\": \"&workSize_avg\",\n \"Min\": \"&workSize_min\",\n \"Max\": \"&workSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Total Wavefronts\",\n \"Avg\": \"&totWavefront_avg\",\n \"Min\": \"&totWavefront_min\",\n \"Max\": \"&totWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Saved Wavefronts\",\n \"Avg\": \"&savedWavefront_avg\",\n \"Min\": \"&savedWavefront_min\",\n \"Max\": \"&savedWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Restored Wavefronts\",\n \"Avg\": \"&restoredWavefront_avg\",\n \"Min\": \"&restoredWavefront_min\",\n \"Max\": \"&restoredWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"VGPRs\",\n \"Avg\": \"&vgprs_avg\",\n \"Min\": \"&vgprs_min\",\n \"Max\": \"&vgprs_max\",\n \"Unit\": \"Registers\"\n },\n {\n \"Metric\": \"SGPRs\",\n \"Avg\": \"&sgprs_avg\",\n \"Min\": \"&sgprs_min\",\n \"Max\": \"&sgprs_max\",\n \"Unit\":\"Registers\"\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Avg\": \"&ldsAlloc_avg\",\n \"Min\": \"&ldsAlloc_min\",\n \"Max\": \"&ldsAlloc_max\",\n \"Unit\": \"Bytes\"\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Avg\": \"&scratchAlloc_avg\",\n \"Min\": \"&scratchAlloc_min\",\n \"Max\": \"&scratchAlloc_max\",\n \"Unit\": \"Bytes\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Wavefront Launch Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true, + "Units 2": true, + "metric 2": true + }, + "indexByName": { + "Avg 1": 1, + "Avg 2": 2, + "Max 1": 5, + "Max 2": 6, + "Metric 1": 0, + "Metric 2": 7, + "Min 1": 3, + "Min 2": 4, + "Unit 1": 9, + "Unit 2": 8 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 122 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 106 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 223 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 169 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 133 + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 34, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"instrWavefront_avg\":{\"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_min\":{\"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_max\":{\"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n\n \"waveCycles_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n\n \"depWaitingCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"issueWaitCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"activeCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"kernelTime_avg\":{\"$avg\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_min\":{\"$min\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_max\":{\"$max\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n\n \"kernelCycle_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Kernel Time (Nanosec)\",\n \"Avg\": \"&kernelTime_avg\",\n \"Min\": \"&kernelTime_min\",\n \"Max\": \"&kernelTime_max\",\n \"Unit\":\"ns\"\n },\n {\n \"Metric\": \"Kernel Time (Cycles)\",\n \"Avg\": \"&kernelCycle_avg\",\n \"Min\": \"&kernelCycle_min\",\n \"Max\": \"&kernelCycle_max\",\n \"Unit\":\"Cycle\"\n },\n\n {\n \"Metric\": \"Instr/wavefront\",\n \"Avg\": \"&instrWavefront_avg\",\n \"Min\": \"&instrWavefront_min\",\n \"Max\": \"&instrWavefront_max\",\n \"Unit\": \"Instr/wavefront\"\n },\n {\n \"Metric\": \"Wave Cycles\",\n \"Avg\": \"&waveCycles_avg\",\n \"Min\": \"&waveCycles_min\",\n \"Max\": \"&waveCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Dependency Wait Cycles\",\n \"Avg\": \"&depWaitingCycles_avg\",\n \"Min\": \"&depWaitingCycles_min\",\n \"Max\": \"&depWaitingCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Issue Wait Cycles\",\n \"Avg\": \"&issueWaitCycles_avg\",\n \"Min\": \"&issueWaitCycles_min\",\n \"Max\": \"&issueWaitCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Active Cycles\",\n \"Avg\": \"&activeCycles_avg\",\n \"Min\": \"&activeCycles_min\",\n \"Max\": \"&activeCycles_max\",\n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"occAvg\": {\"$avg\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMin\": {\"$min\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMax\": {\"$max\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } }\n }},\n {\"$project\": {\n \"_id\":0,\n \"Metric\": \"Wavefront Occupancy\",\n \"Avg\": \"&occAvg\",\n \"Min\":\"&occMin\",\n \"Max\":\"&occMax\",\n \"Unit\":\"Wavefronts\"\n }}\n ]\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"instrWavefront_avg\":{\"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_min\":{\"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_max\":{\"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n\n \"waveCycles_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n\n \"depWaitingCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"issueWaitCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"activeCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"kernelTime_avg\":{\"$avg\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_min\":{\"$min\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_max\":{\"$max\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n\n \"kernelCycle_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Kernel Time (Nanosec)\",\n \"Avg\": \"&kernelTime_avg\",\n \"Min\": \"&kernelTime_min\",\n \"Max\": \"&kernelTime_max\",\n \"Unit\":\"ns\"\n },\n {\n \"Metric\": \"Kernel Time (Cycles)\",\n \"Avg\": \"&kernelCycle_avg\",\n \"Min\": \"&kernelCycle_min\",\n \"Max\": \"&kernelCycle_max\",\n \"Unit\":\"Cycle\"\n },\n\n {\n \"Metric\": \"Instr/wavefront\",\n \"Avg\": \"&instrWavefront_avg\",\n \"Min\": \"&instrWavefront_min\",\n \"Max\": \"&instrWavefront_max\",\n \"Unit\": \"Instr/wavefront\"\n },\n {\n \"Metric\": \"Wave Cycles\",\n \"Avg\": \"&waveCycles_avg\",\n \"Min\": \"&waveCycles_min\",\n \"Max\": \"&waveCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Dependency Wait Cycles\",\n \"Avg\": \"&depWaitingCycles_avg\",\n \"Min\": \"&depWaitingCycles_min\",\n \"Max\": \"&depWaitingCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Issue Wait Cycles\",\n \"Avg\": \"&issueWaitCycles_avg\",\n \"Min\": \"&issueWaitCycles_min\",\n \"Max\": \"&issueWaitCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Active Cycles\",\n \"Avg\": \"&activeCycles_avg\",\n \"Min\": \"&activeCycles_min\",\n \"Max\": \"&activeCycles_max\",\n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"occAvg\": {\"$avg\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMin\": {\"$min\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMax\": {\"$max\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } }\n }},\n {\"$project\": {\n \"_id\":0,\n \"Metric\": \"Wavefront Occupancy\",\n \"Avg\": \"&occAvg\",\n \"Min\":\"&occMin\",\n \"Max\":\"&occMax\",\n \"Unit\":\"Wavefronts\"\n }}\n ]\n }}\n ]);", + "type": "table" + } + ], + "title": "Wavefront Runtime Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg": "", + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit 1": "", + "Unit 2": "" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Wavefront", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 209, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 12, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": { + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"valu\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_MFMA\"]}, \"&denom\" ] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_MFMA\", \"&denom\" ] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VMEM\", \"&SQ_INSTS_FLAT_LDS_ONLY\"]}, \"&denom\" ] }\n },\n \"lds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_LDS\", \"&denom\" ] }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"branch\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_BRANCH\", \"&denom\" ] }\n },\n \"gds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_GDS\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"VALU - Vector\",\n \"count\": \"&valu\"\n },\n {\n \"metric\": \"VMEM\",\n \"count\": \"&vmem\"\n },\n {\n \"metric\": \"LDS\",\n \"count\": \"&lds\"\n },\n {\n \"metric\": \"VALU - MFMA\",\n \"count\": \"&mfma\"\n },\n {\n \"metric\": \"SALU\",\n \"count\": \"&salu\"\n },\n {\n \"metric\": \"SMEM\",\n \"count\": \"&smem\"\n },\n {\n \"metric\": \"Branch\",\n \"count\": \"&branch\"\n },\n {\n \"metric\": \"GDS\",\n \"count\": \"&gds\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n \n {\"$group\": {\n \"_id\": null,\n \"valu\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_MFMA\"]}, \"&denom\" ] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_MFMA\", \"&denom\" ] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VMEM\", \"&SQ_INSTS_FLAT_LDS_ONLY\"]}, \"&denom\" ] }\n },\n \"lds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_LDS\", \"&denom\" ] }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"branch\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_BRANCH\", \"&denom\" ] }\n },\n \"gds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_GDS\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"VALU - Vector (Baseline)\",\n \"count\": \"&valu\"\n },\n {\n \"metric\": \"VMEM (Baseline)\",\n \"count\": \"&vmem\"\n },\n {\n \"metric\": \"LDS (Baseline)\",\n \"count\": \"&lds\"\n },\n {\n \"metric\": \"VALU - MFMA (Baseline)\",\n \"count\": \"&mfma\"\n },\n {\n \"metric\": \"SALU (Baseline)\",\n \"count\": \"&salu\"\n },\n {\n \"metric\": \"SMEM (Baseline)\",\n \"count\": \"&smem\"\n },\n {\n \"metric\": \"Branch (Baseline)\",\n \"count\": \"&branch\"\n },\n {\n \"metric\": \"GDS (Baseline)\",\n \"count\": \"&gds\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Instruction Mix", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "metric" + } + ] + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 24, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 24, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^count$/", + "limit": 100, + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"count_int_i32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT32\", \"&denom\" ] }\n },\n \"count_int_i64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT64\", \"&denom\" ] }\n },\n \"count_f16_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F16\", \"&denom\" ] }\n },\n \"count_f16_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F16\", \"&denom\" ] }\n },\n \"count_f16_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F16\", \"&denom\" ] }\n },\n \"count_f16_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F16\", \"&denom\" ] }\n },\n \"count_f32_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F32\", \"&denom\" ] }\n },\n \"count_f32_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F32\", \"&denom\" ] }\n },\n \"count_f32_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F32\", \"&denom\" ] }\n },\n \"count_f32_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F32\", \"&denom\" ] }\n },\n \"count_f64_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F64\", \"&denom\" ] }\n },\n \"count_f64_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F64\", \"&denom\" ] }\n },\n \"count_f64_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F64\", \"&denom\" ] }\n },\n \"count_f64_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F64\", \"&denom\" ] }\n },\n \"conversion\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_CVT\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"INT32\",\n \"count\": \"&count_int_i32\"\n },\n {\n \"metric\": \"INT64\",\n \"count\": \"&count_int_i64\"\n },\n {\n \"metric\": \"F16-ADD\",\n \"count\": \"&count_f16_add\"\n },\n {\n \"metric\": \"F16-MUL\",\n \"count\": \"&count_f16_MUL\"\n },\n {\n \"metric\": \"F16-FMA\",\n \"count\": \"&count_f16_fma\"\n },\n {\n \"metric\": \"F16-Trans\",\n \"count\": \"&count_f16_trans\"\n },\n {\n \"metric\": \"F32-ADD\",\n \"count\": \"&count_f32_add\"\n },\n {\n \"metric\": \"F32-MUL\",\n \"count\": \"&count_f32_MUL\"\n },\n {\n \"metric\": \"F32-FMA\",\n \"count\": \"&count_f32_fma\"\n },\n {\n \"metric\": \"F32-Trans\",\n \"count\": \"&count_f32_trans\"\n },\n {\n \"metric\": \"F64-ADD\",\n \"count\": \"&count_f64_add\"\n },\n {\n \"metric\": \"F64-MUL\",\n \"count\": \"&count_f64_MUL\"\n },\n {\n \"metric\": \"F64-FMA\",\n \"count\": \"&count_f64_fma\"\n },\n {\n \"metric\": \"F64-Trans\",\n \"count\": \"&count_f64_trans\"\n },\n {\n \"metric\": \"Conversion\",\n \"count\": \"&conversion\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"count_int_i32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT32\", \"&denom\" ] }\n },\n \"count_int_i64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT64\", \"&denom\" ] }\n },\n \"count_f16_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F16\", \"&denom\" ] }\n },\n \"count_f16_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F16\", \"&denom\" ] }\n },\n \"count_f16_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F16\", \"&denom\" ] }\n },\n \"count_f16_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F16\", \"&denom\" ] }\n },\n \"count_f32_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F32\", \"&denom\" ] }\n },\n \"count_f32_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F32\", \"&denom\" ] }\n },\n \"count_f32_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F32\", \"&denom\" ] }\n },\n \"count_f32_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F32\", \"&denom\" ] }\n },\n \"count_f64_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F64\", \"&denom\" ] }\n },\n \"count_f64_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F64\", \"&denom\" ] }\n },\n \"count_f64_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F64\", \"&denom\" ] }\n },\n \"count_f64_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F64\", \"&denom\" ] }\n },\n \"conversion\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_CVT\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"INT32 (Baseline)\",\n \"count\": \"&count_int_i32\"\n },\n {\n \"metric\": \"INT64 (Baseline)\",\n \"count\": \"&count_int_i64\"\n },\n {\n \"metric\": \"F16-ADD (Baseline)\",\n \"count\": \"&count_f16_add\"\n },\n {\n \"metric\": \"F16-MUL (Baseline)\",\n \"count\": \"&count_f16_MUL\"\n },\n {\n \"metric\": \"F16-FMA (Baseline)\",\n \"count\": \"&count_f16_fma\"\n },\n {\n \"metric\": \"F16-Trans (Baseline)\",\n \"count\": \"&count_f16_trans\"\n },\n {\n \"metric\": \"F32-ADD (Baseline)\",\n \"count\": \"&count_f32_add\"\n },\n {\n \"metric\": \"F32-MUL (Baseline)\",\n \"count\": \"&count_f32_MUL\"\n },\n {\n \"metric\": \"F32-FMA (Baseline)\",\n \"count\": \"&count_f32_fma\"\n },\n {\n \"metric\": \"F32-Trans (Baseline)\",\n \"count\": \"&count_f32_trans\"\n },\n {\n \"metric\": \"F64-ADD (Baseline)\",\n \"count\": \"&count_f64_add\"\n },\n {\n \"metric\": \"F64-MUL (Baseline)\",\n \"count\": \"&count_f64_MUL\"\n },\n {\n \"metric\": \"F64-FMA (Baseline)\",\n \"count\": \"&count_f64_fma\"\n },\n {\n \"metric\": \"F64-Trans (Baseline)\",\n \"count\": \"&count_f64_trans\"\n },\n {\n \"metric\": \"Conversion (Baseline)\",\n \"count\": \"&conversion\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "VALU Arithmetic Instr Mix", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "metric" + } + ] + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 275, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"buffer_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \n \"flat_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"Buffer Instr\",\n \"count\": \"&buffer_instr\"\n },\n {\n \"type\": \"Buffer Read\",\n \"count\": \"&buffer_read\"\n },\n {\n \"type\": \"Buffer Write\",\n \"count\": \"&buffer_write\"\n },\n {\n \"type\": \"Buffer Atomic\",\n \"count\": \"&buffer_atomic\"\n },\n {\n \"type\": \"Flat Instr\",\n \"count\": \"&flat_instr\"\n },\n {\n \"type\": \"Flat Read\",\n \"count\": \"&flat_read\"\n },\n {\n \"type\": \"Flat Write\",\n \"count\": \"&flat_write\"\n },\n {\n \"type\": \"Flat Atomic\",\n \"count\": \"&flat_atomic\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"buffer_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n\n \"flat_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"Buffer Instr (Baseline)\",\n \"count\": \"&buffer_instr\"\n },\n {\n \"type\": \"Buffer Read (Baseline)\",\n \"count\": \"&buffer_read\"\n },\n {\n \"type\": \"Buffer Write (Baseline)\",\n \"count\": \"&buffer_write\"\n },\n {\n \"type\": \"Buffer Atomic (Baseline)\",\n \"count\": \"&buffer_atomic\"\n },\n {\n \"type\": \"Flat Instr (Baseline)\",\n \"count\": \"&flat_instr\"\n },\n {\n \"type\": \"Flat Read (Baseline)\",\n \"count\": \"&flat_read\"\n },\n {\n \"type\": \"Flat Write (Baseline)\",\n \"count\": \"&flat_write\"\n },\n {\n \"type\": \"Flat Atomic (Baseline)\",\n \"count\": \"&flat_atomic\"\n }\n\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "VMEM Instr Mix", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "type 2": true + }, + "indexByName": {}, + "renameByName": { + "count": "Count", + "count 1": "Avg (Current)", + "count 2": "Avg (Baseline)", + "type": "VMEM Instr", + "type 1": "VMEM Instr" + } + } + } + ], + "transparent": true, + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 16, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"mmfa_i8\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_I8\", \"&denom\" ] }\n },\n \"mmfa_f16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F16\", \"&denom\" ] }\n },\n \"mmfa_bf16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_BF16\", \"&denom\" ] }\n },\n \"mfma_f32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F32\", \"&denom\" ] }\n },\n \"mfma_f64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F64\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"MFMA-I8\",\n \"count\": \"&mmfa_i8\"\n },\n {\n \"type\": \"MFMA-F16\",\n \"count\": \"&mmfa_f16\"\n },\n {\n \"type\": \"MFMA-BF16\",\n \"count\": \"&mmfa_bf16\"\n },\n {\n \"type\": \"MFMA-F32\",\n \"count\": \"&mfma_f32\"\n },\n {\n \"type\": \"MFMA-F64\",\n \"count\": \"&mfma_f64\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"mmfa_i8\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_I8\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_f16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F16\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_bf16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_BF16\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F32\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F64\", \"&SQ_WAVES\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"MFMA-I8 (Baseline)\",\n \"count\": \"&mmfa_i8\"\n },\n {\n \"type\": \"MFMA-F16 (Baseline)\",\n \"count\": \"&mmfa_f16\"\n },\n {\n \"type\": \"MFMA-BF16 (Baseline)\",\n \"count\": \"&mmfa_bf16\"\n },\n {\n \"type\": \"MFMA-F32 (Baseline)\",\n \"count\": \"&mfma_f32\"\n },\n {\n \"type\": \"MFMA-F64 (Baseline)\",\n \"count\": \"&mfma_f64\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "MFMA Arithmetic Instr Mix", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "type 2": true + }, + "indexByName": {}, + "renameByName": { + "count": "Count", + "count 1": "Avg (Current)", + "count 2": "Avg (Baseline)", + "type": "MFMA Instr", + "type 1": "MFMA Instr" + } + } + } + ], + "transparent": true, + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Compute Unit - Instruction Mix", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 8, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 211, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 14 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n\n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } }\n\n }}, \n {\"$set\": {\n \"array\": [\n {\n \"valu_flops_pop\": {\"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }] },\n \"mfma_flops_bf16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] }]},\n \"mfma_flops_f16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]},\n \"mfma_flops_f32_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]},\n \"mfma_flops_f64_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]},\n \"mfma_flops_i8_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]}\n }\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n\n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n\n \"instr_val\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }\n\n }}, \n {\"$set\": {\n \"array\": [\n {\n \"valu_flops_pop\": {\"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }] },\n \"mfma_flops_bf16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] }]},\n \"mfma_flops_f16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]},\n \"mfma_flops_f32_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]},\n \"mfma_flops_f64_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]},\n \"mfma_flops_i8_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]}\n }\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Compute Pipeline", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "mfma_flops_bf16_pop 1": 4, + "mfma_flops_bf16_pop 2": 5, + "mfma_flops_f16_pop 1": 6, + "mfma_flops_f16_pop 2": 7, + "mfma_flops_f32_pop 1": 8, + "mfma_flops_f32_pop 2": 9, + "mfma_flops_f64_pop 1": 10, + "mfma_flops_f64_pop 2": 11, + "mfma_flops_i8_pop 1": 12, + "mfma_flops_i8_pop 2": 13, + "valu_flops_pop 1": 0, + "valu_flops_pop 2": 1, + "valu_iops_pop 1": 2, + "valu_iops_pop 2": 3 + }, + "renameByName": { + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "Bandwith (Pct-of-Peak)": "", + "Bandwith (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "Bandwith (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline) ", + "Bank Conflict Rate 1": "Bank Conflict Rate (Current)", + "Bank Conflict Rate 2": "Bank Conflict Rate (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Latency (Cycles) 1": "Latency (Current) [Cycles]", + "Latency (Cycles) 2": "Latency (Baseline) [Cycles]", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)", + "flops_pop": "FLOPs", + "flops_pop 1": "FLOPs (Current)", + "flops_pop 2": "FLOPs (Baseline)", + "iops_pop": "IOPs", + "iops_pop 1": "IOPs (Current)", + "iops_pop 2": "IOPs (Baseline)", + "mfma_flops_bf16_pop": "MFMA- BF16 (FLOPs)", + "mfma_flops_bf16_pop 1": "MFMA-BF16 (Cur)", + "mfma_flops_bf16_pop 2": "MFMA-BF16 (Baseline)", + "mfma_flops_f16_pop": "MFMA-F16 (FLOPs)", + "mfma_flops_f16_pop 1": "MFMA-F16 (Cur)", + "mfma_flops_f16_pop 2": "MFMA-F16 (Baseline)", + "mfma_flops_f32_pop": "MFMA-F32 (FLOPs)", + "mfma_flops_f32_pop 1": "MFMA-F32 (Cur)", + "mfma_flops_f32_pop 2": "MFMA-F32 (Baseline)", + "mfma_flops_f64_pop": "MFMA-F64 (FLOPs)", + "mfma_flops_f64_pop 1": "MFMA-F64 (Cur)", + "mfma_flops_f64_pop 2": "MFMA-F64 (Baseline)", + "mfma_flops_i8_pop": "MFMA-i8 (IOPs)", + "mfma_flops_i8_pop 1": "MFMA-I8 (Cur)", + "mfma_flops_i8_pop 2": "MFMA-I8 (Baseline)", + "valu_flops_pop": "VALU (FLOPs)", + "valu_flops_pop 1": "VALU FLOPs (Cur)", + "valu_flops_pop 2": "VALU FLOPs (Baseline)", + "valu_iops_pop": "VALU (IOPs)", + "valu_iops_pop 1": "VALU IOPs (Cur)", + "valu_iops_pop 2": "VALU IOPs (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 257, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_ipcAvg\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \"min_ipcAvg\": {\n \"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] } \n },\n \"max_ipcAvg\": {\n \"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \n \"avg_ipcIssue\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"min_ipcIssue\": {\n \"$min\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"max_ipcIssue\": {\n \"$max\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n\n \"avg_saluUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"min_saluUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"max_saluUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n\n \"avg_valuUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"min_valuUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"max_valuUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n\n \"avg_mfmaUtil\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"min_mfmaUtil\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"max_mfmaUtil\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n\n \"avg_mfmaInstrCycles\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"min_mfmaInstrCycles\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"max_mfmaInstrCycles\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n\n\n \"avg_unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"min_unpredthreads_val\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"max_unpredthreads_val\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n\n \"avg_instrFetchBand\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"min_instrFetchBand\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"max_instrFetchBand\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"IPC (Avg)\",\n \"Avg\": \"&avg_ipcAvg\",\n \"Min\": \"&min_ipcAvg\",\n \"Max\": \"&max_ipcAvg\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"IPC (Issue)\",\n \"Avg\": \"&avg_ipcIssue\",\n \"Min\": \"&min_ipcIssue\",\n \"Max\": \"&max_ipcIssue\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"SALU Util\",\n \"Avg\": \"&avg_saluUtil\",\n \"Min\": \"&min_saluUtil\",\n \"Max\": \"&max_saluUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Avg\": \"&avg_valuUtil\",\n \"Min\": \"&min_valuUtil\",\n \"Max\": \"&max_valuUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Active Threads\",\n \"Avg\": \"&avg_unpredthreads_val\",\n \"Min\": \"&min_unpredthreads_val\",\n \"Max\": \"&max_unpredthreads_val\",\n \"Unit\": \"Threads\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Avg\": \"&avg_mfmaUtil\",\n \"Min\": \"&min_mfmaUtil\",\n \"Max\": \"&max_mfmaUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"MFMA Instr Cycles\",\n \"Avg\": \"&avg_mfmaInstrCycles\",\n \"Min\": \"&min_mfmaInstrCycles\",\n \"Max\": \"&max_mfmaInstrCycles\",\n \"Unit\": \"cycles/instr\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ipcAvg\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \"min_ipcAvg\": {\n \"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] } \n },\n \"max_ipcAvg\": {\n \"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \n \"avg_ipcIssue\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"min_ipcIssue\": {\n \"$min\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"max_ipcIssue\": {\n \"$max\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n\n \"avg_saluUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"min_saluUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"max_saluUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n\n \"avg_valuUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"min_valuUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"max_valuUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n\n\n \"avg_mfmaUtil\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"min_mfmaUtil\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"max_mfmaUtil\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n\n \"avg_mfmaInstrCycles\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"min_mfmaInstrCycles\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"max_mfmaInstrCycles\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n\n \"avg_unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"min_unpredthreads_val\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"max_unpredthreads_val\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n\n \"avg_instrFetchBand\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"min_instrFetchBand\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"max_instrFetchBand\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"IPC (Avg)\",\n \"Avg 2\": \"&avg_ipcAvg\",\n \"Min 2\": \"&min_ipcAvg\",\n \"Max 2\": \"&max_ipcAvg\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"IPC (Issue)\",\n \"Avg 2\": \"&avg_ipcIssue\",\n \"Min 2\": \"&min_ipcIssue\",\n \"Max 2\": \"&max_ipcIssue\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"SALU Util\",\n \"Avg 2\": \"&avg_saluUtil\",\n \"Min 2\": \"&min_saluUtil\",\n \"Max 2\": \"&max_saluUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Avg 2\": \"&avg_valuUtil\",\n \"Min 2\": \"&min_valuUtil\",\n \"Max 2\": \"&max_valuUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Active Threads\",\n \"Avg 2\": \"&avg_unpredthreads_val\",\n \"Min 2\": \"&min_unpredthreads_val\",\n \"Max 2\": \"&max_unpredthreads_val\",\n \"Unit\": \"Threads\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Avg 2\": \"&avg_mfmaUtil\",\n \"Min 2\": \"&min_mfmaUtil\",\n \"Max 2\": \"&max_mfmaUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"MFMA Instr Cycles\",\n \"Avg 2\": \"&avg_mfmaInstrCycles\",\n \"Min 2\": \"&min_mfmaInstrCycles\",\n \"Max 2\": \"&max_mfmaInstrCycles\",\n \"Unit\": \"cycles/instr\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Pipeline Stats", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Avg": 1, + "Avg 2": 2, + "Max": 5, + "Max 2": 6, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Avg 2": "Avg (Baseline)", + "Max 2": "Max (Baseline)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 111 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 96, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_intOps\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"min_intOps\":{\"$min\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"max_intOps\":{\"$max\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n\n\n \"avg_flops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_flops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n \"max_flops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n\n \"avg_int8Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"min_int8Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"max_int8Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n\n \"avg_int32Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"min_int32Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"max_int32Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n\n \"avg_int64Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"min_int64Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"max_int64Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n\n \"avg_f16Ops\":{\"$avg\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"min_f16Ops\":{\"$min\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"max_f16Ops\":{\"$max\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n\n\n\n \"avg_bf16Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"min_bf16Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"max_bf16Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n\n \"avg_f32Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"min_f32Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"max_f32Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n\n \"avg_f64Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_f64Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"max_f64Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"FLOPs (Total)\",\n \"Avg\": \"&avg_flops\",\n \"Min\": \"&min_flops\",\n \"Max\": \"&max_flops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"INT8 OPs\",\n \"Avg\": \"&avg_int8Ops\",\n \"Min\": \"&min_int8Ops\",\n \"Max\": \"&max_int8Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F16 OPs\",\n \"Avg\": \"&avg_f16Ops\",\n \"Min\": \"&min_f16Ops\",\n \"Max\": \"&max_f16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"BF16 OPs\",\n \"Avg\": \"&avg_bf16Ops\",\n \"Min\": \"&min_bf16Ops\",\n \"Max\": \"&max_bf16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n\n {\n \"Metric\": \"F32 OPs\",\n \"Avg\": \"&avg_f32Ops\",\n \"Min\": \"&min_f32Ops\",\n \"Max\": \"&max_f32Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F64 OPs\",\n \"Avg\": \"&avg_f64Ops\",\n \"Min\": \"&min_f64Ops\",\n \"Max\": \"&max_f64Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_intOps\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"min_intOps\":{\"$min\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"max_intOps\":{\"$max\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n\n\n \"avg_flops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_flops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n \"max_flops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n\n \"avg_int8Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"min_int8Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"max_int8Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n\n \"avg_int32Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"min_int32Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"max_int32Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n\n \"avg_int64Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"min_int64Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"max_int64Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n\n \"avg_f16Ops\":{\"$avg\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"min_f16Ops\":{\"$min\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"max_f16Ops\":{\"$max\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n\n\n\n \"avg_bf16Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"min_bf16Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"max_bf16Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n\n \"avg_f32Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"min_f32Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"max_f32Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n\n \"avg_f64Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_f64Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"max_f64Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"FLOPs (Total)\",\n \"Avg\": \"&avg_flops\",\n \"Min\": \"&min_flops\",\n \"Max\": \"&max_flops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"INT8 OPs\",\n \"Avg\": \"&avg_int8Ops\",\n \"Min\": \"&min_int8Ops\",\n \"Max\": \"&max_int8Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F16 OPs\",\n \"Avg\": \"&avg_f16Ops\",\n \"Min\": \"&min_f16Ops\",\n \"Max\": \"&max_f16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"BF16 OPs\",\n \"Avg\": \"&avg_bf16Ops\",\n \"Min\": \"&min_bf16Ops\",\n \"Max\": \"&max_bf16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n\n {\n \"Metric\": \"F32 OPs\",\n \"Avg\": \"&avg_f32Ops\",\n \"Min\": \"&min_f32Ops\",\n \"Max\": \"&max_f32Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F64 OPs\",\n \"Avg\": \"&avg_f64Ops\",\n \"Min\": \"&min_f64Ops\",\n \"Max\": \"&max_f64Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Arithmetic Operations", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 1, + "Avg 2": 2, + "Max 1": 5, + "Max 2": 6, + "Metric 1": 0, + "Metric 2": 7, + "Min 1": 3, + "Min 2": 4, + "Unit 1": 9, + "Unit 2": 8 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 255, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_VMEM", + "target": "${Workload1}.SQ_INST_LEVEL_VMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_vmemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"min_vmemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"max_vmemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"VMEM Latency\",\n \"Avg\": \"&avg_vmemLat\",\n \"Min\": \"&min_vmemLat\",\n \"Max\": \"&max_vmemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_SMEM", + "target": "${Workload1}.SQ_INST_LEVEL_SMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_smemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"min_smemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"max_smemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"SMEM Latency\",\n \"Avg\":\"&avg_smemLat\",\n \"Min\":\"&min_smemLat\",\n \"Max\":\"&max_smemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_IFETCH_LEVEL", + "target": "${Workload1}.SQ_IFETCH_LEVEL.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_instrFetchLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"min_instrFetchLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"max_instrFetchLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"Instr Fetch Latency\",\n \"Avg\":\"&avg_instrFetchLat\",\n \"Min\":\"&min_instrFetchLat\",\n \"Max\":\"&max_instrFetchLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS", + "target": "${Workload1}.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"LDS Latency\",\n \"Avg\":\"&avg_ldsLat\",\n \"Min\":\"&min_ldsLat\",\n \"Max\":\"&max_ldsLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_VMEM2", + "target": "${Workload2}.SQ_INST_LEVEL_VMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_vmemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"min_vmemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"max_vmemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"VMEM Latency\",\n \"Avg 2\": \"&avg_vmemLat\",\n \"Min 2\": \"&min_vmemLat\",\n \"Max 2\": \"&max_vmemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_SMEM2", + "target": "${Workload2}.SQ_INST_LEVEL_SMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_smemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"min_smemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"max_smemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"SMEM Latency\",\n \"Avg 2\":\"&avg_smemLat\",\n \"Min 2\":\"&min_smemLat\",\n \"Max 2\":\"&max_smemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_IFETCH_LEVEL2", + "target": "${Workload2}.SQ_IFETCH_LEVEL.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_instrFetchLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"min_instrFetchLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"max_instrFetchLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"Instr Fetch Latency\",\n \"Avg 2\":\"&avg_instrFetchLat\",\n \"Min 2\":\"&min_instrFetchLat\",\n \"Max 2\":\"&max_instrFetchLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS2", + "target": "${Workload2}.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"LDS Latency\",\n \"Avg 2\":\"&avg_ldsLat\",\n \"Min 2\":\"&min_ldsLat\",\n \"Max 2\":\"&max_ldsLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + } + ], + "title": "Memory Latencies", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Avg": 1, + "Avg 2": 2, + "Max": 5, + "Max 2": 6, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Avg": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Compute Unit - Compute Pipeline", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 98, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 205, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"bconf_rate\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n {\"$multiply\": [\"&SQ_LDS_BANK_CONFLICT\", 3.125]},\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \"bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]},\n \n {\"$multiply\": [$sclk, $numCU, 0.00128]}\n ]}\n },\n\n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n },\n\n \"lds_access_rate\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [200, \"&SQ_ACTIVE_INST_LDS\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n }\n \n }},\n \n {\"$set\": {\n \"array\": [\n {\n \"Utilization\": \"&lds_util\",\n \"Access Rate\": \"&lds_access_rate\",\n \"Bandwith (Pct-of-Peak)\": \"&bw_pop\",\n \"Bank Conflict Rate\": \"&bconf_rate\"\n }\n \n ]\n }},\n \n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n \n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"bconf_rate\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n {\"$multiply\": [\"&SQ_LDS_BANK_CONFLICT\", 3.125]},\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n\n \"bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]},\n \n {\"$multiply\": [$sclk2, $numCU2, 0.00128]}\n ]}\n },\n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}\n ]}\n },\n\n \"lds_access_rate\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [200, \"&SQ_ACTIVE_INST_LDS\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}\n ]}\n }\n\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Utilization\": \"&lds_util\",\n \"Access Rate\": \"&lds_access_rate\",\n \"Bandwith (Pct-of-Peak)\": \"&bw_pop\",\n \"Bank Conflict Rate\": \"&bconf_rate\"\n }\n\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: LDS", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Access Rate 1": 6, + "Access Rate 2": 7, + "Bandwith (Pct-of-Peak) 1": 0, + "Bandwith (Pct-of-Peak) 2": 1, + "Bank Conflict Rate 1": 2, + "Bank Conflict Rate 2": 3, + "Utilization 1": 4, + "Utilization 2": 5 + }, + "renameByName": { + "Access Rate 1": "Access Rate (Current)", + "Access Rate 2": "Access Rate (Baseline)", + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "Bandwith (Pct-of-Peak)": "", + "Bandwith (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "Bandwith (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline) ", + "Bank Conflict Rate 1": "Bank Conflict Rate (Current)", + "Bank Conflict Rate 2": "Bank Conflict Rate (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Latency (Cycles) 1": "Latency (Current) [Cycles]", + "Latency (Cycles) 2": "Latency (Baseline) [Cycles]", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)", + "Utilization 1": "Util (Current)", + "Utilization 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "min": -100000000000000000000, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 107 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 141 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 100, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_waveCycles\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"min_waveCycles\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"max_waveCycles\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \n \"avg_ldsInstrs\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"min_ldsInstrs\": {\n \"$min\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"max_ldsInstrs\": {\n \"$max\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \n \"avg_indexAccesses\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"min_indexAccesses\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"max_indexAccesses\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \n \"avg_atomicCycles\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"min_atomicCycles\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"max_atomicCycles\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \n \"avg_bankConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"min_bankConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"max_bankConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \n \"avg_addrConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"min_addrConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"max_addrConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \n \n \"avg_unalignedStall\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"min_unalignedStall\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"max_unalignedStall\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \n \"avg_memViolations\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"min_memViolations\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"max_memViolations\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \n \"avg_bconf_per_op\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"min_bconf_per_op\": {\n \"$min\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"max_bconf_per_op\": {\n \"$max\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \n \"avg_bw\": {\n \"$avg\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"min_bw\": {\n \"$min\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"max_bw\": {\n \"$max\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Wave Cycles\",\n \"avg\": \"&avg_waveCycles\",\n \"min\": \"&min_waveCycles\",\n \"max\": \"&max_waveCycles\",\n \"Unit\": \"Cycles/Wave\"\n },\n {\n \"metric\": \"LDS Instrs\",\n \"avg\": \"&avg_ldsInstrs\",\n \"min\": \"&min_ldsInstrs\",\n \"max\": \"&max_ldsInstrs\",\n \"Unit\":{\"$concat\": [\"Instr \", $normUnit]} \n },\n {\n \"metric\": \"Bandwidth\",\n \"avg\": \"&avg_bw\",\n \"min\": \"&min_bw\",\n \"max\": \"&max_bw\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conficts/Access\",\n \"avg\": \"&avg_bconf_per_op\",\n \"min\": \"&min_bconf_per_op\",\n \"max\": \"&max_bconf_per_op\",\n \"Unit\": \"Conflicts/Access\"\n },\n {\n \"metric\": \"Index Accesses\",\n \"avg\": \"&avg_indexAccesses\",\n \"min\": \"&min_indexAccesses\",\n \"max\": \"&max_indexAccesses\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Cycles\",\n \"avg\": \"&avg_atomicCycles\",\n \"min\": \"&min_atomicCycles\",\n \"max\": \"&max_atomicCycles\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conflict\",\n \"avg\": \"&avg_bankConflicts\",\n \"min\": \"&min_bankConflicts\",\n \"max\": \"&max_bankConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Addr Conflict\",\n \"avg\": \"&avg_addrConflicts\",\n \"min\": \"&min_addrConflicts\",\n \"max\": \"&max_addrConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Unaligned Stall\",\n \"avg\": \"&avg_unalignedStall\",\n \"min\": \"&min_unalignedStall\",\n \"max\": \"&max_unalignedStall\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Mem Violations\",\n \"avg\": \"&avg_memViolations\",\n \"min\": \"&min_memViolations\",\n \"max\": \"&max_memViolations\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_INST_LEVEL_LDS\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLatency\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLatency\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLatency\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"metric\": \"LDS Latency\",\n \"avg\": \"&avg_ldsLatency\",\n \"min\": \"&min_ldsLatency\",\n \"max\": \"&max_ldsLatency\",\n \"Unit\": \"Cycles\"\n }}\n ]\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}, \n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n \n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_waveCycles\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"min_waveCycles\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"max_waveCycles\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \n \"avg_ldsInstrs\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"min_ldsInstrs\": {\n \"$min\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"max_ldsInstrs\": {\n \"$max\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \n \"avg_indexAccesses\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"min_indexAccesses\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"max_indexAccesses\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \n \"avg_atomicCycles\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"min_atomicCycles\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"max_atomicCycles\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \n \"avg_bankConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"min_bankConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"max_bankConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \n \"avg_addrConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"min_addrConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"max_addrConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"avg_unalignedStall\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"min_unalignedStall\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"max_unalignedStall\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \n \"avg_memViolations\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"min_memViolations\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"max_memViolations\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \n \n \"avg_bconf_per_op\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"min_bconf_per_op\": {\n \"$min\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"max_bconf_per_op\": {\n \"$max\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \n \"avg_bw\": {\n \"$avg\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"min_bw\": {\n \"$min\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"max_bw\": {\n \"$max\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Wave Cycles\",\n \"avg\": \"&avg_waveCycles\",\n \"min\": \"&min_waveCycles\",\n \"max\": \"&max_waveCycles\",\n \"Unit\": \"Cycles/Wave\"\n },\n {\n \"metric\": \"LDS Instrs\",\n \"avg\": \"&avg_ldsInstrs\",\n \"min\": \"&min_ldsInstrs\",\n \"max\": \"&max_ldsInstrs\",\n \"Unit\":{\"$concat\": [\"Instr \", $normUnit]} \n },\n {\n \"metric\": \"Bandwidth\",\n \"avg\": \"&avg_bw\",\n \"min\": \"&min_bw\",\n \"max\": \"&max_bw\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conficts/Access\",\n \"avg\": \"&avg_bconf_per_op\",\n \"min\": \"&min_bconf_per_op\",\n \"max\": \"&max_bconf_per_op\",\n \"Unit\": \"Conflicts/Access\"\n },\n {\n \"metric\": \"Index Accesses\",\n \"avg\": \"&avg_indexAccesses\",\n \"min\": \"&min_indexAccesses\",\n \"max\": \"&max_indexAccesses\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Cycles\",\n \"avg\": \"&avg_atomicCycles\",\n \"min\": \"&min_atomicCycles\",\n \"max\": \"&max_atomicCycles\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conflict\",\n \"avg\": \"&avg_bankConflicts\",\n \"min\": \"&min_bankConflicts\",\n \"max\": \"&max_bankConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Addr Conflict\",\n \"avg\": \"&avg_addrConflicts\",\n \"min\": \"&min_addrConflicts\",\n \"max\": \"&max_addrConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Unaligned Stall\",\n \"avg\": \"&avg_unalignedStall\",\n \"min\": \"&min_unalignedStall\",\n \"max\": \"&max_unalignedStall\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Mem Violations\",\n \"avg\": \"&avg_memViolations\",\n \"min\": \"&min_memViolations\",\n \"max\": \"&max_memViolations\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_INST_LEVEL_LDS\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLatency\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLatency\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLatency\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"metric\": \"LDS Latency\",\n \"avg\": \"&avg_ldsLatency\",\n \"min\": \"&min_ldsLatency\",\n \"max\": \"&max_ldsLatency\",\n \"Unit\": \"Cycles\"\n }}\n ]\n }}\n ]);", + "type": "table" + } + ], + "title": "LDS Stats", + "transformations": [ + { + "id": "concatenate", + "options": { + "frameNameLabel": "frame", + "frameNameMode": "field" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 8, + "avg 1": 1, + "avg 2": 2, + "max 1": 5, + "max 2": 6, + "metric 1": 0, + "metric 2": 7, + "min 1": 3, + "min 2": 4 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Local Data Share (LDS)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 44, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 48, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_ICACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk, $numSQC]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n\n \"cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQC_ICACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\" ] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_ICACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk2, $numSQC2]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n\n \"cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQC_ICACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Instruction Cache ", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "BW (Pct-of-Peak) 1": 4, + "BW (Pct-of-Peak) 2": 5, + "Cache Hit 1": 6, + "Cache Hit 2": 7, + "Stall 1": 2, + "Stall 2": 3, + "Util 1": 0, + "Util 2": 1 + }, + "renameByName": { + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "BW Pct-of-Peak 1": "BW Pct-of-Peak (Current)", + "BW Pct-of-Peak 2": "BW Pct-of-Peak (Baseline)", + "Bandwidth 1": "Bandwidth (Current)", + "Bandwidth 2": "Bandwidth (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 259, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"min_req\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"max_req\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n\n \"avg_hits\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"min_hits\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"max_hits\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n\n \"avg_misses\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"min_misses\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"max_misses\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n\n \"avg_misses_dup\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"min_misses_dup\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"max_misses_dup\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"avg_cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"min_cacheHit\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"max_cacheHit\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&avg_req\",\n \"Min\": \"&min_req\",\n \"Max\": \"&max_req\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&avg_hits\",\n \"Min\": \"&min_hits\",\n \"Max\": \"&max_hits\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean\": \"&avg_misses\",\n \"Min\": \"&min_misses\",\n \"Max\": \"&max_misses\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Duplicated\",\n \"Mean\": \"&avg_misses_dup\",\n \"Min\": \"&min_misses_dup\",\n \"Max\": \"&max_misses_dup\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n \n {\n \"Metric\": \"Cache Hit\",\n \"Mean\": \"&avg_cacheHit\",\n \"Min\": \"&min_cacheHit\",\n \"Max\": \"&max_cacheHit\",\n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"min_req\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"max_req\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n\n \"avg_hits\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"min_hits\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"max_hits\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n\n \"avg_misses\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"min_misses\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"max_misses\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n\n \"avg_misses_dup\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"min_misses_dup\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"max_misses_dup\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"avg_cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"min_cacheHit\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"max_cacheHit\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean 2\": \"&avg_req\",\n \"Min 2\": \"&min_req\",\n \"Max 2\": \"&max_req\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean 2\": \"&avg_hits\",\n \"Min 2\": \"&min_hits\",\n \"Max 2\": \"&max_hits\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean 2\": \"&avg_misses\",\n \"Min 2\" : \"&min_misses\",\n \"Max 2\": \"&max_misses\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Duplicated\",\n \"Mean 2\": \"&avg_misses_dup\",\n \"Min 2\": \"&min_misses_dup\",\n \"Max 2\": \"&max_misses_dup\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean 2\": \"&avg_cacheHit\",\n \"Min 2\": \"&min_cacheHit\",\n \"Max 2\": \"&max_cacheHit\",\n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Instruction Cache Accesses", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Max": 5, + "Max 2": 6, + "Mean": 1, + "Mean 2": 2, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "L1I Metric": "", + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Instruction Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 203, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "L1K-TC BW - GB/s" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 54, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_DCACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk, $numSQC]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n \"cacheHit\": {\n \"$avg\": { \n \"$cond\":[\n {\"$ne\": [{ \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0 ]},\n {\"$divide\": [{ \"$multiply\": [\"&SQC_DCACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } ]},\n null\n ]\n }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "sY628IJnz" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_DCACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk2, $numSQC2]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n \"cacheHit\": {\n \"$avg\": { \n \"$cond\":[\n {\"$ne\": [{ \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0 ]},\n {\"$divide\": [{ \"$multiply\": [\"&SQC_DCACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } ]},\n null\n ]\n }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Scalar L1D Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "BW Pct-of-Peak 1": 0, + "BW Pct-of-Peak 2": 1, + "Cache Hit 1": 2, + "Cache Hit 2": 3, + "Stall 1": 6, + "Stall 2": 7, + "Util 1": 4, + "Util 2": 5 + }, + "renameByName": { + "BW Pct-of-Peak 1": "BW Pct-of-Peak (Current)", + "BW Pct-of-Peak 2": "BW Pct-of-Peak (Baseline)", + "Bandwidth 1": "Bandwidth (Current)", + "Bandwidth 2": "Bandwidth (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 261, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n\n \"hits_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n\n \"misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n \"misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n \"misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n\n \"dup_misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"cacheHit_avg\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_min\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_max\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n\n \"read1d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n\n \"read2d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n\n \"read4d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n\n \"read8d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n\n \"read16d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\": \"&req_min\",\n \"Max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\": \"&hits_min\",\n \"Max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean\": \"&misses_avg\",\n \"Min\": \"&misses_min\",\n \"Max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses- Duplicated\",\n \"Mean\": \"&dup_misses_avg\",\n \"Min\": \"&dup_misses_min\",\n \"Max\": \"&dup_misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean\": \"&cacheHit_avg\",\n \"Min\": \"&cacheHit_min\",\n \"Max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Read Req (Total)\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (1 DWord)\",\n \"Mean\": \"&read1d_avg\",\n \"Min\": \"&read1d_min\",\n \"Max\": \"&read1d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (2 DWord)\",\n \"Mean\": \"&read2d_avg\",\n \"Min\": \"&read2d_min\",\n \"Max\": \"&read2d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (4 DWord)\",\n \"Mean\": \"&read4d_avg\",\n \"Min\": \"&read4d_min\",\n \"Max\": \"&read4d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (8 DWord)\",\n \"Mean\": \"&read8d_avg\",\n \"Min\": \"&read8d_min\",\n \"Max\": \"&read8d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (16 DWord)\",\n \"Mean\": \"&read16d_avg\",\n \"Min\": \"&read16d_min\",\n \"Max\": \"&read16d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }}, \n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n\n \"hits_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n\n \"dup_misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"cacheHit_avg\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_min\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_max\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n\n\n \"read1d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n\n \"read2d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n\n \"read4d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n\n \"read8d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n\n \"read16d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean 2\": \"&req_avg\",\n \"Min 2\": \"&req_min\",\n \"Max 2\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean 2\": \"&hits_avg\",\n \"Min 2\": \"&hits_min\",\n \"Max 2\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean 2\": \"&misses_avg\",\n \"Min 2\": \"&misses_min\",\n \"Max 2\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses- Duplicated\",\n \"Mean 2\": \"&dup_misses_avg\",\n \"Min 2\": \"&dup_misses_min\",\n \"Max 2\": \"&dup_misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean 2\": \"&cacheHit_avg\",\n \"Min 2\": \"&cacheHit_min\",\n \"Max 2\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Read Req (Total)\",\n \"Mean 2\": \"&readReq_avg\",\n \"Min 2\": \"&readReq_min\",\n \"Max 2\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req (Total)\",\n \"Mean 2\": \"&writeReq_avg\",\n \"Min 2\": \"&writeReq_min\",\n \"Max 2\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean 2\": \"&atomicReq_avg\",\n \"Min 2\": \"&atomicReq_min\",\n \"Max 2\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (1 DWord)\",\n \"Mean 2\": \"&read1d_avg\",\n \"Min 2\": \"&read1d_min\",\n \"Max 2\": \"&read1d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (2 DWord)\",\n \"Mean 2\": \"&read2d_avg\",\n \"Min 2\": \"&read2d_min\",\n \"Max 2\": \"&read2d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (4 DWord)\",\n \"Mean 2\": \"&read4d_avg\",\n \"Min 2\": \"&read4d_min\",\n \"Max 2\": \"&read4d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (8 DWord)\",\n \"Mean 2\": \"&read8d_avg\",\n \"Min 2\": \"&read8d_min\",\n \"Max 2\": \"&read8d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (16 DWord)\",\n \"Mean 2\": \"&read16d_avg\",\n \"Min 2\": \"&read16d_min\",\n \"Max 2\": \"&read16d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Scalar L1D Cache Accesses", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Max": 5, + "Max 2": 6, + "Mean": 1, + "Mean 2": 2, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 105 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 134 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 52, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n\n \"writeReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n\n \"tc2l1k_stall_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read Req\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req\",\n \"Mean\": \"&writeReq_avg\",\n \"Min\": \"&writeReq_min\",\n \"Max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Stall\",\n \"Mean\": \"&tc2l1k_stall_avg\",\n \"Min\": \"&tc2l1k_stall_min\",\n \"Max\": \"&tc2l1k_stall_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}, \n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n\n \"writeReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n\n \"tc2l1k_stall_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read Req\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req\",\n \"Mean\": \"&writeReq_avg\",\n \"Min\": \"&writeReq_min\",\n \"Max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Stall\",\n \"Mean\": \"&tc2l1k_stall_avg\",\n \"Min\": \"&tc2l1k_stall_min\",\n \"Max\": \"&tc2l1k_stall_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Scalar L1D Cache - L2 Interface", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Max 1": 7, + "Max 2": 8, + "Mean 1": 3, + "Mean 2": 4, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Scalar L1 Data Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 130, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 133 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + } + ] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 0, + "y": 14 + }, + "id": 132, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"taBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"taBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"taBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n\n \"tc2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"tc2ta_dataStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_dataStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_dataStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"td2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"td2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"td2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"totalInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatWriteInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferWriteInstr_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"buffTotal_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleRead_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleWrite_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TA Busy\",\n \"avg\": \"&taBusy_avg\",\n \"min\": \"&taBusy_min\",\n \"max\": \"&taBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Addr Stall\",\n \"avg\": \"&tc2ta_addrStall_avg\",\n \"min\": \"&tc2ta_addrStall_min\",\n \"max\": \"&tc2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Data Stall\",\n \"avg\": \"&tc2ta_dataStall_avg\",\n \"min\": \"&tc2ta_dataStall_min\",\n \"max\": \"&tc2ta_dataStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TD2TA Addr Stall\",\n \"avg\": \"&td2ta_addrStall_avg\",\n \"min\": \"&td2ta_addrStall_min\",\n \"max\": \"&td2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Total Instructions\",\n \"avg\": \"&totalInstr_avg\",\n \"min\": \"&totalInstr_min\",\n \"max\": \"&totalInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Instr\",\n \"avg\": \"&flatInstr_avg\",\n \"min\": \"&flatInstr_min\",\n \"max\": \"&flatInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Read Instr\",\n \"avg\": \"&flatReadInstr_avg\",\n \"min\": \"&flatReadInstr_min\",\n \"max\": \"&flatReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Write Instr\",\n \"avg\": \"&flatWriteInstr_avg\",\n \"min\": \"&flatWriteInstr_min\",\n \"max\": \"&flatWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Atomic Instr\",\n \"avg\": \"&flatAtomicInstr_avg\",\n \"min\": \"&flatAtomicInstr_min\",\n \"max\": \"&flatAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Instr\",\n \"avg\": \"&bufferInstr_avg\",\n \"min\": \"&bufferInstr_min\",\n \"max\": \"&bufferInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Read Instr\",\n \"avg\": \"&bufferReadInstr_avg\",\n \"min\": \"&bufferReadInstr_min\",\n \"max\": \"&bufferReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Write Instr\",\n \"avg\": \"&bufferWriteInstr_avg\",\n \"min\": \"&bufferWriteInstr_min\",\n \"max\": \"&bufferWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Atomic Instr\",\n \"avg\": \"&bufferAtomicInstr_avg\",\n \"min\": \"&bufferAtomicInstr_min\",\n \"max\": \"&bufferAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Total Cylces\",\n \"avg\": \"&buffTotal_avg\",\n \"min\": \"&buffTotal_min\",\n \"max\": \"&buffTotal_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Read\",\n \"avg\": \"&buffCoscaleRead_avg\",\n \"min\": \"&buffCoscaleRead_min\",\n \"max\": \"&buffCoscaleRead_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Write\",\n \"avg\": \"&buffCoscaleWrite_avg\",\n \"min\": \"&buffCoscaleWrite_min\",\n \"max\": \"&buffCoscaleWrite_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Texture Addr and Data)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"taBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"taBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"taBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n\n \"tc2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"tc2ta_dataStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_dataStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_dataStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"td2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"td2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"td2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"totalInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatWriteInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferWriteInstr_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"buffTotal_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleRead_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleWrite_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TA Busy\",\n \"avg\": \"&taBusy_avg\",\n \"min\": \"&taBusy_min\",\n \"max\": \"&taBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Addr Stall\",\n \"avg\": \"&tc2ta_addrStall_avg\",\n \"min\": \"&tc2ta_addrStall_min\",\n \"max\": \"&tc2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Data Stall\",\n \"avg\": \"&tc2ta_dataStall_avg\",\n \"min\": \"&tc2ta_dataStall_min\",\n \"max\": \"&tc2ta_dataStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TD2TA Addr Stall\",\n \"avg\": \"&td2ta_addrStall_avg\",\n \"min\": \"&td2ta_addrStall_min\",\n \"max\": \"&td2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Total Instructions\",\n \"avg\": \"&totalInstr_avg\",\n \"min\": \"&totalInstr_min\",\n \"max\": \"&totalInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Instr\",\n \"avg\": \"&flatInstr_avg\",\n \"min\": \"&flatInstr_min\",\n \"max\": \"&flatInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Read Instr\",\n \"avg\": \"&flatReadInstr_avg\",\n \"min\": \"&flatReadInstr_min\",\n \"max\": \"&flatReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Write Instr\",\n \"avg\": \"&flatWriteInstr_avg\",\n \"min\": \"&flatWriteInstr_min\",\n \"max\": \"&flatWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Atomic Instr\",\n \"avg\": \"&flatAtomicInstr_avg\",\n \"min\": \"&flatAtomicInstr_min\",\n \"max\": \"&flatAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Instr\",\n \"avg\": \"&bufferInstr_avg\",\n \"min\": \"&bufferInstr_min\",\n \"max\": \"&bufferInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Read Instr\",\n \"avg\": \"&bufferReadInstr_avg\",\n \"min\": \"&bufferReadInstr_min\",\n \"max\": \"&bufferReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Write Instr\",\n \"avg\": \"&bufferWriteInstr_avg\",\n \"min\": \"&bufferWriteInstr_min\",\n \"max\": \"&bufferWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Atomic Instr\",\n \"avg\": \"&bufferAtomicInstr_avg\",\n \"min\": \"&bufferAtomicInstr_min\",\n \"max\": \"&bufferAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Total Cylces\",\n \"avg\": \"&buffTotal_avg\",\n \"min\": \"&buffTotal_min\",\n \"max\": \"&buffTotal_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Read\",\n \"avg\": \"&buffCoscaleRead_avg\",\n \"min\": \"&buffCoscaleRead_min\",\n \"max\": \"&buffCoscaleRead_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Write\",\n \"avg\": \"&buffCoscaleWrite_avg\",\n \"min\": \"&buffCoscaleWrite_min\",\n \"max\": \"&buffCoscaleWrite_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "TA", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 124 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + } + ] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 134, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"tdBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"tdBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"tdBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n\n \"tc2tdStall_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2tdStall_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2tdStall_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"spi2td_stall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"spi2td_stall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"spi2td_stall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"coscaleInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_min\":{\"$min\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_max\":{\"$max\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n\n \"loadInstr_avg\":{\"$avg\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_min\":{\"$min\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_max\":{\"$max\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n\n \"storeInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_min\":{\"$min\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_max\":{\"$max\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n\n \"atomicInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_min\":{\"$min\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_max\":{\"$max\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TD Busy\",\n \"avg\": \"&tdBusy_avg\",\n \"min\": \"&tdBusy_min\",\n \"max\": \"&tdBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TD Stall\",\n \"avg\": \"&tc2tdStall_avg\",\n \"min\": \"&tc2tdStall_min\",\n \"max\": \"&tc2tdStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"SPI2TD Stall\",\n \"avg\": \"&spi2td_stall_avg\",\n \"min\": \"&spi2td_stall_min\",\n \"max\": \"&spi2td_stall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Coalescable Instr\",\n \"avg\": \"&coscaleInstr_avg\",\n \"min\": \"&coscaleInstr_min\",\n \"max\": \"&coscaleInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Load Instr\",\n \"avg\": \"&loadInstr_avg\",\n \"min\": \"&loadInstr_min\",\n \"max\": \"&loadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Store Instr\",\n \"avg\": \"&storeInstr_avg\",\n \"min\": \"&storeInstr_min\",\n \"max\": \"&storeInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Instr\",\n \"avg\": \"&atomicInstr_avg\",\n \"min\": \"&atomicInstr_min\",\n \"max\": \"&atomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Texture Addr and Data)\"}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"tdBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"tdBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"tdBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n\n \"tc2tdStall_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2tdStall_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2tdStall_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"spi2td_stall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"spi2td_stall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"spi2td_stall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"coscaleInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_min\":{\"$min\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_max\":{\"$max\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n\n \"loadInstr_avg\":{\"$avg\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_min\":{\"$min\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_max\":{\"$max\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n\n \"storeInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_min\":{\"$min\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_max\":{\"$max\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n\n \"atomicInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_min\":{\"$min\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_max\":{\"$max\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TD Busy\",\n \"avg\": \"&tdBusy_avg\",\n \"min\": \"&tdBusy_min\",\n \"max\": \"&tdBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TD Stall\",\n \"avg\": \"&tc2tdStall_avg\",\n \"min\": \"&tc2tdStall_min\",\n \"max\": \"&tc2tdStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"SPI2TD Stall\",\n \"avg\": \"&spi2td_stall_avg\",\n \"min\": \"&spi2td_stall_min\",\n \"max\": \"&spi2td_stall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Coalescable Instr\",\n \"avg\": \"&coscaleInstr_avg\",\n \"min\": \"&coscaleInstr_min\",\n \"max\": \"&coscaleInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Load Instr\",\n \"avg\": \"&loadInstr_avg\",\n \"min\": \"&loadInstr_min\",\n \"max\": \"&loadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Store Instr\",\n \"avg\": \"&storeInstr_avg\",\n \"min\": \"&storeInstr_min\",\n \"max\": \"&storeInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Instr\",\n \"avg\": \"&atomicInstr_avg\",\n \"min\": \"&atomicInstr_min\",\n \"max\": \"&atomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "TD", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Texture Addresser and Texture Data (TA/TD)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 112, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 165, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"bufferCoalescing_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n null\n ]\n }\n },\n \"cacheUtil_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TCP_GATE_EN2_sum\", 100]}, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }\n },\n \n \"cacheBW_pct\": {\n \"$avg\": { \"$divide\": [ {\"$multiply\":[64, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"]}, \n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} \n ] \n }\n },\n \"cacheHit_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]\n }] \n },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Buffer Coalescing\": \"&bufferCoalescing_pct\",\n \"Cache Util\": \"&cacheUtil_pct\",\n \"Cache BW\": { \"$divide\": [{ \"$multiply\": [100, \"&cacheBW_pct\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]}] },\n \"Cache Hit\": \"&cacheHit_pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"bufferCoalescing_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n null\n ]\n }\n },\n \"cacheUtil_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TCP_GATE_EN2_sum\", 100]}, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }\n },\n \"cacheBW_pct\": {\n \"$avg\": { \"$divide\": [ {\"$multiply\":[64, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"]}, \n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} \n ] \n }\n },\n \"cacheHit_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]\n }] \n },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Buffer Coalescing\": \"&bufferCoalescing_pct\",\n \"Cache Util\": \"&cacheUtil_pct\",\n \"Cache BW\": { \"$divide\": [{ \"$multiply\": [100, \"&cacheBW_pct\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]}] },\n \"Cache Hit\": \"&cacheHit_pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Vector L1D Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "128B Read Combining 1": 6, + "128B Read Combining 2": 7, + "Buffer Coalescing 1": 0, + "Buffer Coalescing 2": 1, + "Cache BW 1": 2, + "Cache BW 2": 3, + "Cache Hit 1": 4, + "Cache Hit 2": 5 + }, + "renameByName": { + "128B Read Combining 1": "128B Read Combining (Current)", + "128B Read Combining 2": "128B Read Combining(Baseline)", + "Buffer Coalescing 1": "Buf Coalescing (Current)", + "Buffer Coalescing 2": "Buf Coalescing (Baseline)", + "Cache BW 1": "Cache BW (Current)", + "Cache BW 2": "Cache BW (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Cache Util 1": "Cache Util (Current)", + "Cache Util 2": "Cache Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "color-background" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 52 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 199 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 144 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 116, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"l2Pending_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n\n\n \"tcr2tcp_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \"readTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \n \"writeTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \n \"atomicTagRam_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }} \n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Stalled on L2 Data\",\n \"Mean\": \"&l2Pending_avg\",\n \"Min\": \"&l2Pending_min\",\n \"Max\": \"&l2Pending_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Stalled on L2 Req\",\n \"Mean\": \"&tcr2tcp_Stall_avg\",\n \"Min\":\"&tcr2tcp_Stall_min\",\n \"Max\":\"&tcr2tcp_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Read)\",\n \"Mean\": \"&readTagRam_Stall_avg\",\n \"Min\": \"&readTagRam_Stall_min\",\n \"Max\": \"&readTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Write)\",\n \"Mean\": \"&writeTagRam_Stall_avg\",\n \"Min\": \"&writeTagRam_Stall_min\",\n \"Max\": \"&writeTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Atomic)\",\n \"Mean\": \"&atomicTagRam_Stall_avg\",\n \"Min\": \"&atomicTagRam_Stall_min\",\n \"Max\": \"&atomicTagRam_Stall_max\",\n \"unit\":\"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"l2Pending_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n\n \"tcr2tcp_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \"readTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \n \"writeTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \n \"atomicTagRam_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }} \n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Stalled on L2 Data\",\n \"Mean\": \"&l2Pending_avg\",\n \"Min\": \"&l2Pending_min\",\n \"Max\": \"&l2Pending_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Stalled on L2 Req\",\n \"Mean\": \"&tcr2tcp_Stall_avg\",\n \"Min\":\"&tcr2tcp_Stall_min\",\n \"Max\":\"&tcr2tcp_Stall_max\",\n \"unit\":\"pct\"\n },\n\n {\n \"Metric\": \"Tag RAM Stall (Read)\",\n \"Mean\": \"&readTagRam_Stall_avg\",\n \"Min\": \"&readTagRam_Stall_min\",\n \"Max\": \"&readTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Write)\",\n \"Mean\": \"&writeTagRam_Stall_avg\",\n \"Min\": \"&writeTagRam_Stall_min\",\n \"Max\": \"&writeTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Atomic)\",\n \"Mean\": \"&atomicTagRam_Stall_avg\",\n \"Min\": \"&atomicTagRam_Stall_min\",\n \"Max\": \"&atomicTagRam_Stall_max\",\n \"unit\":\"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Cache Stalls", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Units 2": true, + "unit 2": true + }, + "indexByName": { + "Max 1": 6, + "Max 2": 7, + "Mean 1": 2, + "Mean 2": 3, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 4, + "Min 2": 5, + "unit 1": 9, + "unit 2": 8 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "unit 1": "Unit" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 116 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 139 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 50 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "max" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 111 + } + ] + } + ] + }, + "gridPos": { + "h": 18, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 128, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n\n \"totalReq_avg\":{\"$avg\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_min\":{\"$min\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_max\":{\"$max\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n\n \"cacheBW_avg\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_min\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_max\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \n \"cacheAccess_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n\n \"cacheHits_avg\":{\"$avg\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_min\":{\"$min\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_max\":{\"$max\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \n \"cacheHitRate_avg\":{\"$avg\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_min\":{\"$min\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_max\":{\"$max\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \n \"l2_l1_read_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n\n \"l2_l1_write_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n\n\n \"l2_l1_atomic_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n\n \"l2_l1_bw_avg\":{\"$avg\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_min\":{\"$min\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_max\":{\"$max\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n\n \"invalidate_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n\n\n \"l1Latency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n\n\n \"l2ReadLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n\n \"l2WriteLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }}\n\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Total Req\",\n \"avg\": \"&totalReq_avg\",\n \"min\": \"&totalReq_min\",\n \"max\": \"&totalReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache BW\",\n \"avg\": \"&cacheBW_avg\",\n \"min\": \"&cacheBW_min\",\n \"max\": \"&cacheBW_max\",\n \"Unit\": \"GB/s\"\n },\n {\n \"metric\": \"Cache Accesses\",\n \"avg\": \"&cacheAccess_avg\",\n \"min\": \"&cacheAccess_min\",\n \"max\": \"&cacheAccess_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hits\",\n \"avg\": \"&cacheHits_avg\",\n \"min\": \"&cacheHits_min\",\n \"max\": \"&cacheHits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit Rate\",\n \"avg\": \"&cacheHitRate_avg\",\n \"min\": \"&cacheHitRate_min\",\n \"max\": \"&cacheHitRate_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Invalidate\",\n \"avg\": \"&invalidate_avg\",\n \"min\": \"&invalidate_min\",\n \"max\": \"&invalidate_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 BW\",\n \"avg\": \"&l2_l1_bw_avg\",\n \"min\": \"&l2_l1_bw_avg\",\n \"max\": \"&l2_l1_bw_avg\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Read\",\n \"avg\": \"&l2_l1_read_avg\",\n \"min\": \"&l2_l1_read_min\",\n \"max\": \"&l2_l1_read_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Write\",\n \"avg\": \"&l2_l1_write_avg\",\n \"min\": \"&l2_l1_write_min\",\n \"max\": \"&l2_l1_write_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Atomic\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1 Access Latency\",\n \"avg\": \"&l1Latency_avg\",\n \"min\": \"&l1Latency_min\",\n \"max\": \"&l1Latency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Read Latency\",\n \"avg\": \"&l2ReadLatency_avg\",\n \"min\": \"&l2ReadLatency_min\",\n \"max\": \"&l2ReadLatency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Write Latency\",\n \"avg\": \"&l2WriteLatency_avg\",\n \"min\": \"&l2WriteLatency_min\",\n \"max\": \"&l2WriteLatency_max\",\n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n\n \"totalReq_avg\":{\"$avg\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_min\":{\"$min\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_max\":{\"$max\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n\n \"cacheBW_avg\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_min\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_max\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \n \"cacheAccess_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n\n \"cacheHits_avg\":{\"$avg\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_min\":{\"$min\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_max\":{\"$max\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \n \"cacheHitRate_avg\":{\"$avg\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_min\":{\"$min\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_max\":{\"$max\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n\n \"l2_l1_read_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n\n \"l2_l1_write_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n\n\n \"l2_l1_atomic_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n\n \"l2_l1_bw_avg\":{\"$avg\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_min\":{\"$min\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_max\":{\"$max\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n\n \"invalidate_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n\n\n \"l1Latency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n\n\n \"l2ReadLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n\n \"l2WriteLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Total Req\",\n \"avg\": \"&totalReq_avg\",\n \"min\": \"&totalReq_min\",\n \"max\": \"&totalReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache BW\",\n \"avg\": \"&cacheBW_avg\",\n \"min\": \"&cacheBW_min\",\n \"max\": \"&cacheBW_max\",\n \"Unit\": \"GB/s\"\n },\n {\n \"metric\": \"Cache Accesses\",\n \"avg\": \"&cacheAccess_avg\",\n \"min\": \"&cacheAccess_min\",\n \"max\": \"&cacheAccess_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hits\",\n \"avg\": \"&cacheHits_avg\",\n \"min\": \"&cacheHits_min\",\n \"max\": \"&cacheHits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit Rate\",\n \"avg\": \"&cacheHitRate_avg\",\n \"min\": \"&cacheHitRate_min\",\n \"max\": \"&cacheHitRate_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Invalidate\",\n \"avg\": \"&invalidate_avg\",\n \"min\": \"&invalidate_min\",\n \"max\": \"&invalidate_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 BW\",\n \"avg\": \"&l2_l1_bw_avg\",\n \"min\": \"&l2_l1_bw_avg\",\n \"max\": \"&l2_l1_bw_avg\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Read\",\n \"avg\": \"&l2_l1_read_avg\",\n \"min\": \"&l2_l1_read_min\",\n \"max\": \"&l2_l1_read_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Write\",\n \"avg\": \"&l2_l1_write_avg\",\n \"min\": \"&l2_l1_write_min\",\n \"max\": \"&l2_l1_write_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Atomic\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1 Access Latency\",\n \"avg\": \"&l1Latency_avg\",\n \"min\": \"&l1Latency_min\",\n \"max\": \"&l1Latency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Read Latency\",\n \"avg\": \"&l2ReadLatency_avg\",\n \"min\": \"&l2ReadLatency_min\",\n \"max\": \"&l2ReadLatency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Write Latency\",\n \"avg\": \"&l2WriteLatency_avg\",\n \"min\": \"&l2WriteLatency_min\",\n \"max\": \"&l2WriteLatency_max\",\n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Cache Accesses", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 8, + "avg 1": 1, + "avg 2": 2, + "max 1": 5, + "max 2": 6, + "metric 1": 0, + "metric 2": 7, + "min 1": 3, + "min 2": 4 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "Aggregate": "last", + "BarPadding": 30, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "Coherency", + "GroupCols": 2, + "GroupGap": 5, + "GroupLabelColor": "#FF9830", + "GroupLabelFontSize": "100%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": true, + "LabelColName": "Xfer", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 0, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#FADE2A", + "ValueDecimals": 0, + "ValueFontSize": "100%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:172", + "Col": 2, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Mean", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 120, + "pluginVersion": "8.2.1", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "tlh8EwUnk" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n\n \"readNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \n \"writeNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \n \"atomicNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"NC\",\n \"Avg\": \"&readNC_avg\",\n \"Min\": \"&readNC_min\",\n \"Max\": \"&readNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"UC\",\n \"Avg\": \"&readUC_avg\",\n \"Min\": \"&readUC_min\",\n \"Max\": \"&readUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"CC\",\n \"Avg\": \"&readCC_avg\",\n \"Min\": \"&readCC_min\",\n \"Max\": \"&readCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"RW\",\n \"Avg\": \"&readRW_avg\",\n \"Min\": \"&readRW_min\",\n \"Max\": \"&readRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"RW\",\n \"Avg\": \"&writeRW_avg\",\n \"Min\": \"&writeRW_min\",\n \"Max\": \"&writeRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"NC\",\n \"Avg\": \"&writeNC_avg\",\n \"Min\": \"&writeNC_min\",\n \"Max\": \"&writeNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"UC\",\n \"Avg\": \"&writeUC_avg\",\n \"Min\": \"&writeUC_min\",\n \"Max\": \"&writeUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"CC\",\n \"Avg\": \"&writeCC_avg\",\n \"Min\": \"&writeCC_min\",\n \"Max\": \"&writeCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"NC\",\n \"Avg\": \"&atomicNC_avg\",\n \"Min\": \"&atomicNC_min\",\n \"Max\": \"&atomicNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"UC\",\n \"Avg\": \"&atomicUC_avg\",\n \"Min\": \"&atomicUC_min\",\n \"Max\": \"&atomicUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"CC\",\n \"Avg\": \"&atomicCC_avg\",\n \"Min\": \"&atomicCC_min\",\n \"Max\": \"&atomicCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"RW\",\n \"Avg\": \"&atomicRW_avg\",\n \"Min\": \"&atomicRW_min\",\n \"Max\": \"&atomicRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D - L2 Transactions Req $normUnit", + "transparent": true, + "type": "michaeldmoore-multistat-panel" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Units" + }, + "properties": [ + { + "id": "custom.width", + "value": 75 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 124, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n\n\n \"hitRatio_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n\n \"hits_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n\n \"missesTrans_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n\n \"missesPermis_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\":\"&req_min\",\n \"Max\":\"&req_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Hit Ratio\",\n \"Mean\": \"&hitRatio_avg\",\n \"Min\":\"&hitRatio_min\",\n \"Max\":\"&hitRatio_max\",\n \"Units\":\"pct\"\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\":\"&hits_min\",\n \"Max\":\"&hits_max\",\n \"Units\":{ \"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Translation)\",\n \"Mean\": \"&missesTrans_avg\",\n \"Min\":\"&missesTrans_min\",\n \"Max\":\"&missesTrans_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Permission)\",\n \"Mean\": \"&missesPermis_avg\",\n \"Min\":\"&missesPermis_min\",\n \"Max\":\"&missesPermis_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n\n\n \"hitRatio_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n\n \"hits_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n\n \"missesTrans_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n\n \"missesPermis_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\":\"&req_min\",\n \"Max\":\"&req_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Hit Ratio\",\n \"Mean\": \"&hitRatio_avg\",\n \"Min\":\"&hitRatio_min\",\n \"Max\":\"&hitRatio_max\",\n \"Units\":\"pct\"\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\":\"&hits_min\",\n \"Max\":\"&hits_max\",\n \"Units\":{ \"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Translation)\",\n \"Mean\": \"&missesTrans_avg\",\n \"Min\":\"&missesTrans_min\",\n \"Max\":\"&missesTrans_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Permission)\",\n \"Mean\": \"&missesPermis_avg\",\n \"Min\":\"&missesPermis_min\",\n \"Max\":\"&missesPermis_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Addr Translation", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Units 2": true + }, + "indexByName": { + "Max 1": 7, + "Max 2": 8, + "Mean 1": 3, + "Mean 2": 4, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Units 1": 9, + "Units 2": 2 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Vector L1 Data Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 56, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW - GB/s" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + }, + { + "id": "color" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Util" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + } + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache Hit" + }, + "properties": [ + { + "id": "max", + "value": 100 + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + } + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Wr BW" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 64, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n{\"$group\": {\n \"_id\": null,\n \"L2Util\": {\n \"$avg\": { \n \n \"$divide\": [\n {\"$multiply\": [\"&TCC_BUSY_sum\", 100]},\n {\"$multiply\": [{\"$toInt\":\"$L2Banks\"}, \"&GRBM_GUI_ACTIVE\"] }\n ] \n } \n },\n\n \"cacheHit\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n 0\n ] \n }},\n\n \"l2eaRdBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \n \"l2eaWrBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"L2 Util\": \"&L2Util\",\n \"Cache Hit\": \"&cacheHit\",\n \"L2-EA Rd BW\": \"&l2eaRdBW\",\n \"L2-EA Wr BW\": \"&l2eaWrBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n\n{\"$group\": {\n \"_id\": null,\n \"L2Util\": {\n \"$avg\": { \n \"$divide\": [\n {\"$multiply\": [\"&TCC_BUSY_sum\", 100]},\n {\"$multiply\": [{\"$toInt\":\"$L2Banks2\"}, \"&GRBM_GUI_ACTIVE\"] }\n ] \n } \n },\n\n \"cacheHit\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n 0\n ] \n }},\n\n \"l2eaRdBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \n \"l2eaWrBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"L2 Util\": \"&L2Util\",\n \"Cache Hit\": \"&cacheHit\",\n \"L2-EA Rd BW\": \"&l2eaRdBW\",\n \"L2-EA Wr BW\": \"&l2eaWrBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: L2 Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Cache Hit 1": 2, + "Cache Hit 2": 3, + "L2 Util 1": 0, + "L2 Util 2": 1, + "L2-EA Rd BW 1": 4, + "L2-EA Rd BW 2": 5, + "L2-EA Wr BW 1": 6, + "L2-EA Wr BW 2": 7 + }, + "renameByName": { + "Cache Hit 1": "L2 Cache Hit (Current)", + "Cache Hit 2": "L2 Cache Hit (Baseline)", + "L2 Util 1": "L2 Util (Current)", + "L2 Util 2": "L2 Util (Baseline)", + "L2-EA Rd BW - GB/s 1": "L2-EA RD BW (Current)", + "L2-EA Rd BW - GB/s 2": "L2-EA RD BW (baseline)", + "L2-EA Rd BW 1": "L2-EA Rd BW (Current)", + "L2-EA Rd BW 2": "L2-EA Rd BW (Baseline)", + "L2-EA Wr BW - GB/s 1": "L2-EA WR BW (Current)", + "L2-EA Wr BW - GB/s 2": "L2-EA WR BW (Baseline)", + "L2-EA Wr BW 1": "L2-EA Wr BW (Current)", + "L2-EA Wr BW 2": "L2-EA Wr BW (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 106 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + } + ] + }, + "gridPos": { + "h": 16, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 62, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": \"null\",\n \"readStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"writeStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \n \"readBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n\n \"writeBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n\n \"read32_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n\n \"read32Uncached_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"read64_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n\n \"hbmRead_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"write32_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n\n \"write32Uncached_avg\": {\"$avg\":{\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"write64_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n\n \"hbmWrite_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"readLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n\n \"writeLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n\n \"atomicOpLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read BW\",\n \"Avg\": \"&readBW_avg\",\n \"Min\":\"&readBW_min\",\n \"Max\":\"&readBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Write BW\",\n \"Avg\": \"&writeBW_avg\",\n \"Min\":\"&writeBW_min\",\n \"Max\":\"&writeBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Read (32B)\",\n \"Avg\": \"&read32_avg\",\n \"Min\":\"&read32_min\",\n \"Max\":\"&read32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (Uncached 32B)\",\n \"Avg\": \"&read32Uncached_avg\",\n \"Min\":\"&read32Uncached_min\",\n \"Max\":\"&read32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (64B)\",\n \"Avg\": \"&read64_avg\",\n \"Min\":\"&read64_min\",\n \"Max\":\"&read64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Read\",\n \"Avg\": \"&hbmRead_avg\",\n \"Min\":\"&hbmRead_min\",\n \"Max\":\"&hbmRead_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (32B)\",\n \"Avg\": \"&write32_avg\",\n \"Min\":\"&write32_min\",\n \"Max\":\"&write32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (Uncached 32B)\",\n \"Avg\": \"&write32Uncached_avg\",\n \"Min\":\"&write32Uncached_min\",\n \"Max\":\"&write32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (64B)\",\n \"Avg\": \"&write64_avg\",\n \"Min\":\"&write64_min\",\n \"Max\":\"&write64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Write\",\n \"Avg\": \"&hbmWrite_avg\",\n \"Min\":\"&hbmWrite_min\",\n \"Max\":\"&hbmWrite_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read Latency\",\n \"Avg\": \"&readLatency_avg\",\n \"Min\":\"&readLatency_min\",\n \"Max\":\"&readLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Write Latency\",\n \"Avg\": \"&writeLatency_avg\",\n \"Min\":\"&writeLatency_min\",\n \"Max\":\"&writeLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Atomic Latency\",\n \"Avg\": \"&atomicOpLatency_avg\",\n \"Min\":\"&atomicOpLatency_min\",\n \"Max\":\"&atomicOpLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Read Stall\",\n \"Avg\": \"&readStall_avg\",\n \"Min\":\"&readStall_min\",\n \"Max\":\"&readStall_max\",\n \"Unit\":\"pct\"\n },\n {\n \"Metric\": \"Write Stall\",\n \"Avg\": \"&writeStall_avg\",\n \"Min\":\"&writeStall_min\",\n \"Max\":\"&writeStall_max\",\n \"Unit\":\"pct\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": \"null\",\n \"readStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"writeStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"readBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n\n \"writeBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n\n \"read32_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n\n \"read32Uncached_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"read64_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n\n \"hbmRead_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"write32_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n\n \"write32Uncached_avg\": {\"$avg\":{\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"write64_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n\n \"hbmWrite_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"readLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n\n \"writeLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n\n \"atomicOpLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read BW\",\n \"Avg\": \"&readBW_avg\",\n \"Min\":\"&readBW_min\",\n \"Max\":\"&readBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Write BW\",\n \"Avg\": \"&writeBW_avg\",\n \"Min\":\"&writeBW_min\",\n \"Max\":\"&writeBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Read (32B)\",\n \"Avg\": \"&read32_avg\",\n \"Min\":\"&read32_min\",\n \"Max\":\"&read32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (Uncached 32B)\",\n \"Avg\": \"&read32Uncached_avg\",\n \"Min\":\"&read32Uncached_min\",\n \"Max\":\"&read32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (64B)\",\n \"Avg\": \"&read64_avg\",\n \"Min\":\"&read64_min\",\n \"Max\":\"&read64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Read\",\n \"Avg\": \"&hbmRead_avg\",\n \"Min\":\"&hbmRead_min\",\n \"Max\":\"&hbmRead_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (32B)\",\n \"Avg\": \"&write32_avg\",\n \"Min\":\"&write32_min\",\n \"Max\":\"&write32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (Uncached 32B)\",\n \"Avg\": \"&write32Uncached_avg\",\n \"Min\":\"&write32Uncached_min\",\n \"Max\":\"&write32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (64B)\",\n \"Avg\": \"&write64_avg\",\n \"Min\":\"&write64_min\",\n \"Max\":\"&write64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n\n {\n \"Metric\": \"HBM Write\",\n \"Avg\": \"&hbmWrite_avg\",\n \"Min\":\"&hbmWrite_min\",\n \"Max\":\"&hbmWrite_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read Latency\",\n \"Avg\": \"&readLatency_avg\",\n \"Min\":\"&readLatency_min\",\n \"Max\":\"&readLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Write Latency\",\n \"Avg\": \"&writeLatency_avg\",\n \"Min\":\"&writeLatency_min\",\n \"Max\":\"&writeLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Atomic Latency\",\n \"Avg\": \"&atomicOpLatency_avg\",\n \"Min\":\"&atomicOpLatency_min\",\n \"Max\":\"&atomicOpLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Read Stall\",\n \"Avg\": \"&readStall_avg\",\n \"Min\":\"&readStall_min\",\n \"Max\":\"&readStall_max\",\n \"Unit\":\"pct\"\n },\n {\n \"Metric\": \"Write Stall\",\n \"Avg\": \"&writeStall_avg\",\n \"Min\":\"&writeStall_min\",\n \"Max\":\"&writeStall_max\",\n \"Unit\":\"pct\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - Fabric Transactions", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 178 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + } + ] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 23 + }, + "id": 58, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n\n \"streamingReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n\n \"probeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n\n \"hits_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_min\":{\"$min\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_max\":{\"$max\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n\n \"misses_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_min\":{\"$min\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_max\":{\"$max\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n\n \"cacheHit_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n\n\n \"writeback_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n\n \"nc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_min\":{\"$min\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_max\":{\"$max\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n\n \"uc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_min\":{\"$min\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_max\":{\"$max\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n\n \"cc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_min\":{\"$min\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_max\":{\"$max\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n\n \"rw_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_min\":{\"$min\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_max\":{\"$max\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n\n \"writebackNorm_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_min\":{\"$min\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_max\":{\"$max\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n\n \"writebackTC_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_min\":{\"$min\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_max\":{\"$max\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n\n \"evictNorm_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_min\":{\"$min\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_max\":{\"$max\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n\n \"evictTC_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_min\":{\"$min\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_max\":{\"$max\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n\n\n \"readReq128_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Req\",\n \"avg\": \"&req_avg\",\n \"min\": \"&req_min\",\n \"max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Streaming Req\",\n \"avg\": \"&streamingReq_avg\",\n \"min\": \"&streamingReq_min\",\n \"max\": \"&streamingReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n \n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Probe Req\",\n \"avg\": \"&probeReq_avg\",\n \"min\": \"&probeReq_min\",\n \"max\": \"&probeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Hits\",\n \"avg\": \"&hits_avg\",\n \"min\": \"&hits_min\",\n \"max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n }, \n {\n \"metric\": \"Misses\",\n \"avg\": \"&misses_avg\",\n \"min\": \"&misses_min\",\n \"max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit\",\n \"avg\": \"&cacheHit_avg\",\n \"min\": \"&cacheHit_min\",\n \"max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Writeback\",\n \"avg\": \"&writeback_avg\",\n \"min\": \"&writeback_min\",\n \"max\": \"&writeback_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"NC Req\",\n \"avg\": \"&nc_avg\",\n \"min\": \"&nc_min\",\n \"max\": \"&nc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"UC Req\",\n \"avg\": \"&uc_avg\",\n \"min\": \"&uc_min\",\n \"max\": \"&uc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"CC Req\",\n \"avg\": \"&cc_avg\",\n \"min\": \"&cc_min\",\n \"max\": \"&cc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"RW Req\",\n \"avg\": \"&rw_avg\",\n \"min\": \"&rw_min\",\n \"max\": \"&rw_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Writeback (Normal)\",\n \"avg\": \"&writebackNorm_avg\",\n \"min\": \"&writebackNorm_min\",\n \"max\": \"&writebackNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Writeback (TC Req)\",\n \"avg\": \"&writebackTC_avg\",\n \"min\": \"&writebackTC_min\",\n \"max\": \"&writebackTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (Normal)\",\n \"avg\": \"&evictNorm_avg\",\n \"min\": \"&evictNorm_min\",\n \"max\": \"&evictNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (TC Req)\",\n \"avg\": \"&evictTC_avg\",\n \"min\": \"&evictTC_min\",\n \"max\": \"&evictTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n\n \"streamingReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n\n \"probeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n\n \"hits_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_min\":{\"$min\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_max\":{\"$max\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n\n \"misses_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_min\":{\"$min\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_max\":{\"$max\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n\n \"cacheHit_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n\n\n \"writeback_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n\n \"nc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_min\":{\"$min\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_max\":{\"$max\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n\n \"uc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_min\":{\"$min\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_max\":{\"$max\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n\n \"cc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_min\":{\"$min\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_max\":{\"$max\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n\n \"rw_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_min\":{\"$min\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_max\":{\"$max\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n\n \"writebackNorm_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_min\":{\"$min\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_max\":{\"$max\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n\n \"writebackTC_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_min\":{\"$min\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_max\":{\"$max\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n\n \"evictNorm_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_min\":{\"$min\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_max\":{\"$max\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n\n \"evictTC_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_min\":{\"$min\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_max\":{\"$max\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n\n \"readReq128_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Req\",\n \"avg\": \"&req_avg\",\n \"min\": \"&req_min\",\n \"max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Streaming Req\",\n \"avg\": \"&streamingReq_avg\",\n \"min\": \"&streamingReq_min\",\n \"max\": \"&streamingReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n \n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Probe Req\",\n \"avg\": \"&probeReq_avg\",\n \"min\": \"&probeReq_min\",\n \"max\": \"&probeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Hits\",\n \"avg\": \"&hits_avg\",\n \"min\": \"&hits_min\",\n \"max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n }, \n {\n \"metric\": \"Misses\",\n \"avg\": \"&misses_avg\",\n \"min\": \"&misses_min\",\n \"max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit\",\n \"avg\": \"&cacheHit_avg\",\n \"min\": \"&cacheHit_min\",\n \"max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Writeback\",\n \"avg\": \"&writeback_avg\",\n \"min\": \"&writeback_min\",\n \"max\": \"&writeback_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"NC Req\",\n \"avg\": \"&nc_avg\",\n \"min\": \"&nc_min\",\n \"max\": \"&nc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"UC Req\",\n \"avg\": \"&uc_avg\",\n \"min\": \"&uc_min\",\n \"max\": \"&uc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"CC Req\",\n \"avg\": \"&cc_avg\",\n \"min\": \"&cc_min\",\n \"max\": \"&cc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"RW Req\",\n \"avg\": \"&rw_avg\",\n \"min\": \"&rw_min\",\n \"max\": \"&rw_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Writeback (Normal)\",\n \"avg\": \"&writebackNorm_avg\",\n \"min\": \"&writebackNorm_min\",\n \"max\": \"&writebackNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Writeback (TC Req)\",\n \"avg\": \"&writebackTC_avg\",\n \"min\": \"&writebackTC_min\",\n \"max\": \"&writebackTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (Normal)\",\n \"avg\": \"&evictNorm_avg\",\n \"min\": \"&evictNorm_min\",\n \"max\": \"&evictNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (TC Req)\",\n \"avg\": \"&evictTC_avg\",\n \"min\": \"&evictTC_min\",\n \"max\": \"&evictTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "L2 Cache Accesses", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "Aggregate": "last", + "BarPadding": 30, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "Transaction", + "GroupCols": 1, + "GroupGap": 5, + "GroupLabelColor": "#FADE2A", + "GroupLabelFontSize": "120%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": true, + "LabelColName": "Metric", + "LabelColor": "#ffffff", + "LabelFontSize": "80%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 0, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#FF9830", + "ValueDecimals": 0, + "ValueFontSize": "100%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:81", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Selected": true + } + ], + "datasource": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 32 + }, + "id": 60, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"ioStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"gmiStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"hbmStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"ioStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"gmiStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"hbmStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"creditStarvation_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n },\n \"creditStarvation_min\": {\n \"$min\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n },\n \"creditStarvation_max\": {\n \"$max\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n } \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Remote Socket Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"I/O\",\n \"Avg\": \"&ioStall_READ_avg\",\n \"Min\": \"&ioStall_READ_min\",\n \"Max\": \"&ioStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Peer GCD Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"GMI\",\n \"Avg\": \"&gmiStall_READ_avg\",\n \"Min\": \"&gmiStall_READ_min\",\n \"Max\": \"&gmiStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"HBM Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"HBM\",\n \"Avg\": \"&hbmStall_READ_avg\",\n \"Min\": \"&hbmStall_READ_min\",\n \"Max\": \"&hbmStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Remote Socket Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"I/O\",\n \"Avg\": \"&ioStall_WRITE_avg\",\n \"Min\": \"&ioStall_WRITE_min\",\n \"Max\": \"&ioStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Peer GCD Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"GMI\",\n \"Avg\": \"&gmiStall_WRITE_avg\",\n \"Min\": \"&gmiStall_WRITE_min\",\n \"Max\": \"&gmiStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"HBM Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"HBM\",\n \"Avg\": \"&hbmStall_WRITE_avg\",\n \"Min\": \"&hbmStall_WRITE_min\",\n \"Max\": \"&hbmStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Credit Starvation\",\n \"Transaction\": \"Write\",\n \"Target\": \"Fabric\",\n \"Avg\": \"&creditStarvation_avg\",\n \"Min\": \"&creditStarvation_min\",\n \"Max\": \"&creditStarvation_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - Fabric Interface Stalls (Cycles $normUnit)", + "transparent": true, + "type": "michaeldmoore-multistat-panel" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "L2 Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 66, + "panels": [ + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "light", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:850", + "Col": 1, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Hit Rate", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 87, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 Cache Hit Rate (Percent) (Channel 0 - 15) ", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "light", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:850", + "Col": 1, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Hit Rate", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 92, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "Cache Hit Rate % (Channel 16 - 31) ", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:565", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 81, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Read Requests(Channel 0-15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:656", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 25 + }, + "id": 82, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L 2 Read Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:697", + "Col": 4, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 33 + }, + "id": 83, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Write Requests (Channel 0-15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:750", + "Col": 4, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 84, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L2 Write Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:791", + "Col": 5, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 85, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Atomic Requests (Channel 0-15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:791", + "Col": 5, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 91, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L2 Atomic Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 6, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 49 + }, + "id": 189, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Requests (Channel 0 - 15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 6, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 49 + }, + "id": 195, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 7, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 191, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Requests (Channel 0 - 15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 7, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 197, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 8, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 65 + }, + "id": 193, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Request (Channel 0 - 15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 8, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 65 + }, + "id": 199, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "", + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 9, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Lat - cycles", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 73 + }, + "hideTimeOverride": false, + "id": 68, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"b0_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[0]\", \"&TCC_MISS[0]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[0]\"]}, \n { \"$add\": [\"&TCC_HIT[0]\", \"&TCC_MISS[0]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b0_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[0]\"}, \"&denom\"] } \n },\n \"b0_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[0]\"}, \"&denom\"] } \n },\n \"b0_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[0]\"}, \"&denom\"] } \n },\n \"b0_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[0]\"}, \"&denom\"] } \n },\n \"b0_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[0]\"}, \"&denom\"] }\n },\n \"b0_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[0]\"}, \"&denom\"] } \n },\n \"b0_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[0]\"}, \"&denom\"] } \n },\n\n \"b0_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[0]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[0]\", \"&TCC_EA_RDREQ[0]\"]}, null] } },\n \"b0_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[0]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[0]\", \"&TCC_EA_WRREQ[0]\"]}, null] } },\n \"b0_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[0]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[0]\", \"&TCC_EA_ATOMIC[0]\"]}, null]}},\n\n \"b0_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[0]\"}, \"&denom\"] }},\n\n \n \"b1_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[1]\", \"&TCC_MISS[1]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[1]\"]}, \n { \"$add\": [\"&TCC_HIT[1]\", \"&TCC_MISS[1]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b1_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[1]\"}, \"&denom\"] } \n },\n \"b1_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[1]\"}, \"&denom\"] } \n },\n \"b1_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[1]\"}, \"&denom\"] } \n },\n \"b1_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[1]\"}, \"&denom\"] } \n },\n \"b1_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[1]\"}, \"&denom\"] }\n },\n \"b1_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[1]\"}, \"&denom\"] } \n },\n \"b1_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[1]\"}, \"&denom\"] } \n },\n \"b1_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[1]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[1]\", \"&TCC_EA_RDREQ[1]\"]}, null] } },\n \"b1_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[1]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[1]\", \"&TCC_EA_WRREQ[1]\"]}, null] } },\n \"b1_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[1]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[1]\", \"&TCC_EA_ATOMIC[1]\"]}, null]}},\n\n \"b1_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[1]\"}, \"&denom\"] }},\n\n\n \"b2_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[2]\", \"&TCC_MISS[2]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[2]\"]}, \n { \"$add\": [\"&TCC_HIT[2]\", \"&TCC_MISS[2]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b2_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[2]\"}, \"&denom\"] }\n },\n \"b2_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[2]\"}, \"&denom\"] } \n },\n \"b2_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[2]\"}, \"&denom\"] }\n },\n \"b2_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[2]\"}, \"&denom\"] }\n },\n \"b2_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[2]\"}, \"&denom\"] }\n },\n \"b2_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[2]\"}, \"&denom\"] }\n },\n \"b2_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[2]\"}, \"&denom\"] }\n },\n \"b2_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[2]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[2]\", \"&TCC_EA_RDREQ[2]\"]}, null] } },\n \"b2_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[2]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[2]\", \"&TCC_EA_WRREQ[2]\"]}, null] } },\n \"b2_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[2]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[2]\", \"&TCC_EA_ATOMIC[2]\"]}, null]}},\n\n \"b2_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[2]\"}, \"&denom\"] }},\n\n\n \n \"b3_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[3]\", \"&TCC_MISS[3]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[3]\"]}, \n { \"$add\": [\"&TCC_HIT[3]\", \"&TCC_MISS[3]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b3_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[3]\"}, \"&denom\"] } \n },\n \"b3_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[3]\"}, \"&denom\"] } \n },\n \"b3_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[3]\"}, \"&denom\"] }\n },\n \"b3_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[3]\"}, \"&denom\"] }\n },\n \"b3_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[3]\"}, \"&denom\"] }\n },\n \"b3_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[3]\"}, \"&denom\"] }\n },\n \"b3_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[3]\"}, \"&denom\"] } \n },\n \"b3_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[3]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[3]\", \"&TCC_EA_RDREQ[3]\"]}, null] } },\n \"b3_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[3]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[3]\", \"&TCC_EA_WRREQ[3]\"]}, null] } },\n \"b3_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[3]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[3]\", \"&TCC_EA_ATOMIC[3]\"]}, null]}},\n\n \"b3_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[3]\"}, \"&denom\"] }},\n\n\n \n \"b4_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[4]\", \"&TCC_MISS[4]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[4]\"]}, \n { \"$add\": [\"&TCC_HIT[4]\", \"&TCC_MISS[4]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b4_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[4]\"}, \"&denom\"] } \n },\n \"b4_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[4]\"}, \"&denom\"] } \n },\n \"b4_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[4]\"}, \"&denom\"] }\n },\n \"b4_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[4]\"}, \"&denom\"] } \n },\n \"b4_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[4]\"}, \"&denom\"] } \n },\n \"b4_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[4]\"}, \"&denom\"] } \n },\n \"b4_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[4]\"}, \"&denom\"] } \n },\n \"b4_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[4]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[4]\", \"&TCC_EA_RDREQ[4]\"]}, null] } },\n \"b4_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[4]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[4]\", \"&TCC_EA_WRREQ[4]\"]}, null] } },\n \"b4_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[4]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[4]\", \"&TCC_EA_ATOMIC[4]\"]}, null]}},\n\n \"b4_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[4]\"}, \"&denom\"] }},\n\n\n \n \"b5_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[5]\", \"&TCC_MISS[5]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[5]\"]}, \n { \"$add\": [\"&TCC_HIT[5]\", \"&TCC_MISS[5]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b5_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[5]\"}, \"&denom\"] } \n },\n \"b5_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[5]\"}, \"&denom\"] } \n },\n \"b5_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[5]\"}, \"&denom\"] } \n },\n \"b5_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[5]\"}, \"&denom\"] } \n },\n \"b5_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[5]\"}, \"&denom\"] } \n },\n \"b5_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[5]\"}, \"&denom\"] } \n },\n \"b5_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[5]\"}, \"&denom\"] } \n },\n \"b5_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[5]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[5]\", \"&TCC_EA_RDREQ[5]\"]}, null] } },\n \"b5_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[5]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[5]\", \"&TCC_EA_WRREQ[5]\"]}, null] } },\n \"b5_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[5]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[5]\", \"&TCC_EA_ATOMIC[5]\"]}, null]}},\n\n \"b5_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[5]\"}, \"&denom\"] }},\n\n\n \n \"b6_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[6]\", \"&TCC_MISS[6]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[6]\"]}, \n { \"$add\": [\"&TCC_HIT[6]\", \"&TCC_MISS[6]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b6_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[6]\"}, \"&denom\"] } \n },\n \"b6_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[6]\"}, \"&denom\"] } \n },\n \"b6_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[6]\"}, \"&denom\"] } \n },\n \"b6_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[6]\"}, \"&denom\"] } \n },\n \"b6_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[6]\"}, \"&denom\"] } \n },\n \"b6_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[6]\"}, \"&denom\"] }\n },\n \"b6_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[6]\"}, \"&denom\"] } \n },\n \"b6_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[6]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[6]\", \"&TCC_EA_RDREQ[6]\"]}, null] } },\n \"b6_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[6]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[6]\", \"&TCC_EA_WRREQ[6]\"]}, null] } },\n \"b6_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[6]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[6]\", \"&TCC_EA_ATOMIC[6]\"]}, null]}},\n\n \"b6_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[6]\"}, \"&denom\"] }},\n\n\n \n \"b7_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[7]\", \"&TCC_MISS[7]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[7]\"]}, \n { \"$add\": [\"&TCC_HIT[7]\", \"&TCC_MISS[7]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b7_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[7]\"}, \"&denom\"] } \n },\n \"b7_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[7]\"}, \"&denom\"] } \n },\n \"b7_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[7]\"}, \"&denom\"] } \n },\n \"b7_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[7]\"}, \"&denom\"] } \n },\n \"b7_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[7]\"}, \"&denom\"] } \n },\n \"b7_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[7]\"}, \"&denom\"] }\n },\n \"b7_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[7]\"}, \"&denom\"] } \n },\n \"b7_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[7]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[7]\", \"&TCC_EA_RDREQ[7]\"]}, null] } },\n \"b7_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[7]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[7]\", \"&TCC_EA_WRREQ[7]\"]}, null] } },\n \"b7_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[7]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[7]\", \"&TCC_EA_ATOMIC[7]\"]}, null]}},\n\n \"b7_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[7]\"}, \"&denom\"] }},\n\n\n \n \"b8_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[8]\", \"&TCC_MISS[8]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[8]\"]}, \n { \"$add\": [\"&TCC_HIT[8]\", \"&TCC_MISS[8]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b8_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[8]\"}, \"&denom\"] } \n },\n \"b8_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[8]\"}, \"&denom\"] } \n },\n \"b8_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[8]\"}, \"&denom\"] } \n },\n \"b8_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[8]\"}, \"&denom\"] } \n },\n \"b8_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[8]\"}, \"&denom\"] } \n },\n \"b8_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[8]\"}, \"&denom\"] } \n },\n \"b8_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[8]\"}, \"&denom\"] } \n },\n \"b8_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[8]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[8]\", \"&TCC_EA_RDREQ[8]\"]}, null] } },\n \"b8_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[8]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[8]\", \"&TCC_EA_WRREQ[8]\"]}, null] } },\n \"b8_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[8]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[8]\", \"&TCC_EA_ATOMIC[8]\"]}, null]}},\n\n \"b8_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[8]\"}, \"&denom\"] }},\n\n\n \n \"b9_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[9]\", \"&TCC_MISS[9]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[9]\"]}, \n { \"$add\": [\"&TCC_HIT[9]\", \"&TCC_MISS[9]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b9_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[9]\"}, \"&denom\"] } \n },\n \"b9_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[9]\"}, \"&denom\"] } \n },\n \"b9_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[9]\"}, \"&denom\"] } \n },\n \"b9_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[9]\"}, \"&denom\"] } \n },\n \"b9_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[9]\"}, \"&denom\"] } \n },\n \"b9_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[9]\"}, \"&denom\"] } \n },\n \"b9_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[9]\"}, \"&denom\"] } \n },\n \"b9_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[9]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[9]\", \"&TCC_EA_RDREQ[9]\"]}, null] } },\n \"b9_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[9]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[9]\", \"&TCC_EA_WRREQ[9]\"]}, null] } },\n \"b9_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[9]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[9]\", \"&TCC_EA_ATOMIC[9]\"]}, null]}},\n\n \"b9_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[9]\"}, \"&denom\"] }},\n\n\n \n \"b10_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[10]\", \"&TCC_MISS[10]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[10]\"]}, \n { \"$add\": [\"&TCC_HIT[10]\", \"&TCC_MISS[10]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b10_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[10]\"}, \"&denom\"] } \n },\n \"b10_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[10]\"}, \"&denom\"] } \n },\n \"b10_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[10]\"}, \"&denom\"] } \n },\n \"b10_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[10]\"}, \"&denom\"] } \n },\n \"b10_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[10]\"}, \"&denom\"] } \n },\n \"b10_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[10]\"}, \"&denom\"] } \n },\n \"b10_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[10]\"}, \"&denom\"] } \n },\n \"b10_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[10]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[10]\", \"&TCC_EA_RDREQ[10]\"]}, null] } },\n \"b10_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[10]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[10]\", \"&TCC_EA_WRREQ[10]\"]}, null] } },\n \"b10_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[10]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[10]\", \"&TCC_EA_ATOMIC[10]\"]}, null]}},\n\n \"b10_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[10]\"}, \"&denom\"] }},\n\n\n \n \"b11_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[11]\", \"&TCC_MISS[11]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[11]\"]}, \n { \"$add\": [\"&TCC_HIT[11]\", \"&TCC_MISS[11]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b11_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[11]\"}, \"&denom\"] } \n },\n \"b11_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[11]\"}, \"&denom\"] } \n },\n \"b11_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[11]\"}, \"&denom\"] } \n },\n \"b11_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[11]\"}, \"&denom\"] } \n },\n \"b11_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[11]\"}, \"&denom\"] } \n },\n \"b11_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[11]\"}, \"&denom\"] } \n },\n \"b11_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[11]\"}, \"&denom\"] } \n },\n \"b11_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[11]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[11]\", \"&TCC_EA_RDREQ[11]\"]}, null] } },\n \"b11_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[11]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[11]\", \"&TCC_EA_WRREQ[11]\"]}, null] } },\n \"b11_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[11]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[11]\", \"&TCC_EA_ATOMIC[11]\"]}, null]}},\n\n \"b11_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[11]\"}, \"&denom\"] }},\n\n\n \n \"b12_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[12]\", \"&TCC_MISS[12]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[12]\"]}, \n { \"$add\": [\"&TCC_HIT[12]\", \"&TCC_MISS[12]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b12_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[12]\"}, \"&denom\"] } \n },\n \"b12_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[12]\"}, \"&denom\"] } \n },\n \"b12_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[12]\"}, \"&denom\"] } \n },\n \"b12_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[12]\"}, \"&denom\"] } \n },\n \"b12_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[12]\"}, \"&denom\"] } \n },\n \"b12_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[12]\"}, \"&denom\"] } \n },\n \"b12_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[12]\"}, \"&denom\"] } \n },\n \"b12_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[12]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[12]\", \"&TCC_EA_RDREQ[12]\"]}, null] } },\n \"b12_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[12]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[12]\", \"&TCC_EA_WRREQ[12]\"]}, null] } },\n \"b12_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[12]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[12]\", \"&TCC_EA_ATOMIC[12]\"]}, null]}},\n\n \"b12_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[12]\"}, \"&denom\"] }},\n\n\n \n \"b13_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[13]\", \"&TCC_MISS[13]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[13]\"]}, \n { \"$add\": [\"&TCC_HIT[13]\", \"&TCC_MISS[13]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b13_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[13]\"}, \"&denom\"] } \n },\n \"b13_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[13]\"}, \"&denom\"] } \n },\n \"b13_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[13]\"}, \"&denom\"] } \n },\n \"b13_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[13]\"}, \"&denom\"] } \n },\n \"b13_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[13]\"}, \"&denom\"] } \n },\n \"b13_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[13]\"}, \"&denom\"] }\n },\n \"b13_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[13]\"}, \"&denom\"] } \n },\n \"b13_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[13]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[13]\", \"&TCC_EA_RDREQ[13]\"]}, null] } },\n \"b13_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[13]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[13]\", \"&TCC_EA_WRREQ[13]\"]}, null] } },\n \"b13_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[13]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[13]\", \"&TCC_EA_ATOMIC[13]\"]}, null]}},\n\n \"b13_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[13]\"}, \"&denom\"] }},\n\n\n \n \"b14_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[14]\", \"&TCC_MISS[14]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[14]\"]}, \n { \"$add\": [\"&TCC_HIT[14]\", \"&TCC_MISS[14]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b14_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[14]\"}, \"&denom\"] } \n },\n \"b14_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[14]\"}, \"&denom\"] } \n },\n \"b14_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[14]\"}, \"&denom\"] } \n },\n \"b14_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[14]\"}, \"&denom\"] } \n },\n \"b14_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[14]\"}, \"&denom\"] } \n },\n \"b14_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[14]\"}, \"&denom\"] } \n },\n \"b14_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[14]\"}, \"&denom\"] } \n },\n \"b14_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[14]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[14]\", \"&TCC_EA_RDREQ[14]\"]}, null] } },\n \"b14_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[14]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[14]\", \"&TCC_EA_WRREQ[14]\"]}, null] } },\n \"b14_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[14]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[14]\", \"&TCC_EA_ATOMIC[14]\"]}, null]}},\n\n \"b14_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[14]\"}, \"&denom\"] }},\n\n\n \n \"b15_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[15]\", \"&TCC_MISS[15]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[15]\"]}, \n { \"$add\": [\"&TCC_HIT[15]\", \"&TCC_MISS[15]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b15_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[15]\"}, \"&denom\"] } \n },\n \"b15_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[15]\"}, \"&denom\"] } \n },\n \"b15_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[15]\"}, \"&denom\"] } \n },\n \"b15_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[15]\"}, \"&denom\"] } \n },\n \"b15_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[15]\"}, \"&denom\"] } \n },\n \"b15_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[15]\"}, \"&denom\"] } \n },\n \"b15_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[15]\"}, \"&denom\"] }\n },\n \"b15_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[15]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[15]\", \"&TCC_EA_RDREQ[15]\"]}, null] } },\n \"b15_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[15]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[15]\", \"&TCC_EA_WRREQ[15]\"]}, null] } },\n \"b15_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[15]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[15]\", \"&TCC_EA_ATOMIC[15]\"]}, null]}},\n\n \"b15_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[15]\"}, \"&denom\"] }}\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Channel\": \"0\",\n \"Hit Rate\": \"&b0_hitRate\",\n \"Req\": \"&b0_req\",\n \"Read Req\": \"&b0_readReq\",\n \"Write Req\": \"&b0_writeReq\",\n \"AtomicReq\": \"&b0_atomicReq\",\n \"EA Read Req\": \"&b0_eaReadReq\",\n \"EA Write Req\": \"&b0_eaWriteReq\",\n \"EA AtomicReq\": \"&b0_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b0_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b0_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b0_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b0_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b0_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b0_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b0_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b0_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b0_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b0_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n },\n {\n \"Channel\": \"1\",\n \"Hit Rate\": \"&b1_hitRate\",\n \"Req\": \"&b1_req\",\n \"Read Req\": \"&b1_readReq\",\n \"Write Req\": \"&b1_writeReq\",\n \"AtomicReq\": \"&b1_atomicReq\",\n \"EA Read Req\": \"&b1_eaReadReq\",\n \"EA Write Req\": \"&b1_eaWriteReq\",\n \"EA AtomicReq\": \"&b1_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b1_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b1_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b1_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b1_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b1_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b1_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b1_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b1_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b1_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b1_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n },\n {\n \"Channel\": \"2\",\n \"Hit Rate\": \"&b2_hitRate\",\n \"Req\": \"&b2_req\",\n \"Read Req\": \"&b2_readReq\",\n \"Write Req\": \"&b2_writeReq\",\n \"AtomicReq\": \"&b2_atomicReq\",\n \"EA Read Req\": \"&b2_eaReadReq\",\n \"EA Write Req\": \"&b2_eaWriteReq\",\n \"EA AtomicReq\": \"&b2_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b2_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b2_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b2_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b2_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b2_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b2_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b2_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b2_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b2_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b2_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"3\",\n \"Hit Rate\": \"&b3_hitRate\",\n \"Req\": \"&b3_req\",\n \"Read Req\": \"&b3_readReq\",\n \"Write Req\": \"&b3_writeReq\",\n \"AtomicReq\": \"&b3_atomicReq\",\n \"EA Read Req\": \"&b3_eaReadReq\",\n \"EA Write Req\": \"&b3_eaWriteReq\",\n \"EA AtomicReq\": \"&b3_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b3_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b3_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b3_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b3_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b3_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b3_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b3_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b3_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b3_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b3_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"4\",\n \"Hit Rate\": \"&b4_hitRate\",\n \"Req\": \"&b4_req\",\n \"Read Req\": \"&b4_readReq\",\n \"Write Req\": \"&b4_writeReq\",\n \"AtomicReq\": \"&b4_atomicReq\",\n \"EA Read Req\": \"&b4_eaReadReq\",\n \"EA Write Req\": \"&b4_eaWriteReq\",\n \"EA AtomicReq\": \"&b4_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b4_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b4_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b4_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b4_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b4_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b4_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b4_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b4_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b4_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b4_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"5\",\n \"Hit Rate\": \"&b5_hitRate\",\n \"Req\": \"&b5_req\",\n \"Read Req\": \"&b5_readReq\",\n \"Write Req\": \"&b5_writeReq\",\n \"AtomicReq\": \"&b5_atomicReq\",\n \"EA Read Req\": \"&b5_eaReadReq\",\n \"EA Write Req\": \"&b5_eaWriteReq\",\n \"EA AtomicReq\": \"&b5_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b5_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b5_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b5_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b5_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b5_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b5_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b5_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b5_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b5_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b5_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"6\",\n \"Hit Rate\": \"&b6_hitRate\",\n \"Req\": \"&b6_req\",\n \"Read Req\": \"&b6_readReq\",\n \"Write Req\": \"&b6_writeReq\",\n \"AtomicReq\": \"&b6_atomicReq\",\n \"EA Read Req\": \"&b6_eaReadReq\",\n \"EA Write Req\": \"&b6_eaWriteReq\",\n \"EA AtomicReq\": \"&b6_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b6_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b6_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b6_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b6_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b6_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b6_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b6_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b6_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b6_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b6_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"7\",\n \"Hit Rate\": \"&b7_hitRate\",\n \"Req\": \"&b7_req\",\n \"Read Req\": \"&b7_readReq\",\n \"Write Req\": \"&b7_writeReq\",\n \"AtomicReq\": \"&b7_atomicReq\",\n \"EA Read Req\": \"&b7_eaReadReq\",\n \"EA Write Req\": \"&b7_eaWriteReq\",\n \"EA AtomicReq\": \"&b7_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b7_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b7_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b7_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b7_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b7_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b7_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b7_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b7_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b7_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b7_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"8\",\n \"Hit Rate\": \"&b8_hitRate\",\n \"Req\": \"&b8_req\",\n \"Read Req\": \"&b8_readReq\",\n \"Write Req\": \"&b8_writeReq\",\n \"AtomicReq\": \"&b8_atomicReq\",\n \"EA Read Req\": \"&b8_eaReadReq\",\n \"EA Write Req\": \"&b8_eaWriteReq\",\n \"EA AtomicReq\": \"&b8_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b8_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b8_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b8_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b8_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b8_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b8_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b8_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b8_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b8_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b8_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"9\",\n \"Hit Rate\": \"&b9_hitRate\",\n \"Req\": \"&b9_req\",\n \"Read Req\": \"&b9_readReq\",\n \"Write Req\": \"&b9_writeReq\",\n \"AtomicReq\": \"&b9_atomicReq\",\n \"EA Read Req\": \"&b9_eaReadReq\",\n \"EA Write Req\": \"&b9_eaWriteReq\",\n \"EA AtomicReq\": \"&b9_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b9_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b9_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b9_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b9_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b9_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b9_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b9_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b9_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b9_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b9_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"10\",\n \"Hit Rate\": \"&b10_hitRate\",\n \"Req\": \"&b10_req\",\n \"Read Req\": \"&b10_readReq\",\n \"Write Req\": \"&b10_writeReq\",\n \"AtomicReq\": \"&b10_atomicReq\",\n \"EA Read Req\": \"&b10_eaReadReq\",\n \"EA Write Req\": \"&b10_eaWriteReq\",\n \"EA AtomicReq\": \"&b10_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b10_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b10_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b10_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b10_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b10_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b10_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b10_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b10_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b10_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b10_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"11\",\n \"Hit Rate\": \"&b11_hitRate\",\n \"Req\": \"&b11_req\",\n \"Read Req\": \"&b11_readReq\",\n \"Write Req\": \"&b11_writeReq\",\n \"AtomicReq\": \"&b11_atomicReq\",\n \"EA Read Req\": \"&b11_eaReadReq\",\n \"EA Write Req\": \"&b11_eaWriteReq\",\n \"EA AtomicReq\": \"&b11_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b11_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b11_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b11_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b11_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b11_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b11_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b11_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b11_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b11_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b11_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"12\",\n \"Hit Rate\": \"&b12_hitRate\",\n \"Req\": \"&b12_req\",\n \"Read Req\": \"&b12_readReq\",\n \"Write Req\": \"&b12_writeReq\",\n \"AtomicReq\": \"&b12_atomicReq\",\n \"EA Read Req\": \"&b12_eaReadReq\",\n \"EA Write Req\": \"&b12_eaWriteReq\",\n \"EA AtomicReq\": \"&b12_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b12_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b12_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b12_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b12_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b12_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b12_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b12_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b12_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b12_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b12_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"13\",\n \"Hit Rate\": \"&b13_hitRate\",\n \"Req\": \"&b13_req\",\n \"Read Req\": \"&b13_readReq\",\n \"Write Req\": \"&b13_writeReq\",\n \"AtomicReq\": \"&b13_atomicReq\",\n \"EA Read Req\": \"&b13_eaReadReq\",\n \"EA Write Req\": \"&b13_eaWriteReq\",\n \"EA AtomicReq\": \"&b13_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b13_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b13_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b13_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b13_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b13_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b13_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b13_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b13_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b13_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b13_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"14\",\n \"Hit Rate\": \"&b14_hitRate\",\n \"Req\": \"&b14_req\",\n \"Read Req\": \"&b14_readReq\",\n \"Write Req\": \"&b14_writeReq\",\n \"AtomicReq\": \"&b14_atomicReq\",\n \"EA Read Req\": \"&b14_eaReadReq\",\n \"EA Write Req\": \"&b14_eaWriteReq\",\n \"EA AtomicReq\": \"&b14_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b14_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b14_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b14_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b14_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b14_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b14_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b14_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b14_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b14_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b14_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"15\",\n \"Hit Rate\": \"&b15_hitRate\",\n \"Req\": \"&b15_req\",\n \"Read Req\": \"&b15_readReq\",\n \"Write Req\": \"&b15_writeReq\",\n \"AtomicReq\": \"&b15_atomicReq\",\n \"EA Read Req\": \"&b15_eaReadReq\",\n \"EA Write Req\": \"&b15_eaWriteReq\",\n \"EA AtomicReq\": \"&b15_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b15_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b15_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b15_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b15_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b15_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b15_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b15_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b15_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b15_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b15_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - EA Read Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 9, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Lat - cycles", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 73 + }, + "id": 70, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"b16_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[16]\", \"&TCC_MISS[16]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[16]\"]}, \n { \"$add\": [\"&TCC_HIT[16]\", \"&TCC_MISS[16]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b16_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[16]\"}, \"&denom\"] } \n },\n \"b16_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[16]\"}, \"&denom\"] } \n },\n \"b16_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[16]\"}, \"&denom\"] } \n },\n \"b16_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[16]\"}, \"&denom\"] } \n },\n \"b16_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[16]\"}, \"&denom\"] }\n },\n \"b16_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[16]\"}, \"&denom\"] } \n },\n \"b16_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[16]\"}, \"&denom\"] } \n },\n\n \"b16_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[16]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[16]\", \"&TCC_EA_RDREQ[16]\"]}, null] } },\n \"b16_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[16]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[16]\", \"&TCC_EA_WRREQ[16]\"]}, null] } },\n \"b16_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[16]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[16]\", \"&TCC_EA_ATOMIC[16]\"]}, null]}},\n \"b16_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[16]\"}, \"&denom\"] }},\n\n \n \"b17_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[17]\", \"&TCC_MISS[17]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[17]\"]}, \n { \"$add\": [\"&TCC_HIT[17]\", \"&TCC_MISS[17]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b17_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[17]\"}, \"&denom\"] } \n },\n \"b17_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[17]\"}, \"&denom\"] } \n },\n \"b17_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[17]\"}, \"&denom\"] } \n },\n \"b17_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[17]\"}, \"&denom\"] } \n },\n \"b17_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[17]\"}, \"&denom\"] }\n },\n \"b17_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[17]\"}, \"&denom\"] } \n },\n \"b17_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[17]\"}, \"&denom\"] } \n },\n \"b17_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[17]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[17]\", \"&TCC_EA_RDREQ[17]\"]}, null] } },\n \"b17_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[17]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[17]\", \"&TCC_EA_WRREQ[17]\"]}, null] } },\n \"b17_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[17]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[17]\", \"&TCC_EA_ATOMIC[17]\"]}, null]}},\n \"b17_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[17]\"}, \"&denom\"] }},\n\n \n \"b18_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[18]\", \"&TCC_MISS[18]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[18]\"]}, \n { \"$add\": [\"&TCC_HIT[18]\", \"&TCC_MISS[18]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b18_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[18]\"}, \"&denom\"] }\n },\n \"b18_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[18]\"}, \"&denom\"] } \n },\n \"b18_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[18]\"}, \"&denom\"] }\n },\n \"b18_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[18]\"}, \"&denom\"] }\n },\n \"b18_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[18]\"}, \"&denom\"] }\n },\n \"b18_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[18]\"}, \"&denom\"] }\n },\n \"b18_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[18]\"}, \"&denom\"] }\n },\n \"b18_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[18]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[18]\", \"&TCC_EA_RDREQ[18]\"]}, null] } },\n \"b18_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[18]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[18]\", \"&TCC_EA_WRREQ[18]\"]}, null] } },\n \"b18_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[18]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[18]\", \"&TCC_EA_ATOMIC[18]\"]}, null]}},\n \"b18_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[18]\"}, \"&denom\"] }},\n\n \n \"b19_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[19]\", \"&TCC_MISS[19]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[19]\"]}, \n { \"$add\": [\"&TCC_HIT[19]\", \"&TCC_MISS[19]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b19_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[19]\"}, \"&denom\"] } \n },\n \"b19_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[19]\"}, \"&denom\"] } \n },\n \"b19_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[19]\"}, \"&denom\"] }\n },\n \"b19_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[19]\"}, \"&denom\"] }\n },\n \"b19_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[19]\"}, \"&denom\"] }\n },\n \"b19_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[19]\"}, \"&denom\"] }\n },\n \"b19_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[19]\"}, \"&denom\"] } \n },\n \"b19_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[19]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[19]\", \"&TCC_EA_RDREQ[19]\"]}, null] } },\n \"b19_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[19]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[19]\", \"&TCC_EA_WRREQ[19]\"]}, null] } },\n \"b19_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[19]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[19]\", \"&TCC_EA_ATOMIC[19]\"]}, null]}},\n \"b19_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[19]\"}, \"&denom\"] }},\n\n \n \"b20_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[20]\", \"&TCC_MISS[20]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[20]\"]}, \n { \"$add\": [\"&TCC_HIT[20]\", \"&TCC_MISS[20]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b20_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[20]\"}, \"&denom\"] } \n },\n \"b20_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[20]\"}, \"&denom\"] } \n },\n \"b20_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[20]\"}, \"&denom\"] }\n },\n \"b20_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[20]\"}, \"&denom\"] } \n },\n \"b20_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[20]\"}, \"&denom\"] } \n },\n \"b20_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[20]\"}, \"&denom\"] } \n },\n \"b20_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[20]\"}, \"&denom\"] } \n },\n \"b20_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[20]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[20]\", \"&TCC_EA_RDREQ[20]\"]}, null] } },\n \"b20_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[20]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[20]\", \"&TCC_EA_WRREQ[20]\"]}, null] } },\n \"b20_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[20]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[20]\", \"&TCC_EA_ATOMIC[20]\"]}, null]}},\n \"b20_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[20]\"}, \"&denom\"] }},\n\n \n\n \"b21_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[21]\", \"&TCC_MISS[21]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[21]\"]}, \n { \"$add\": [\"&TCC_HIT[21]\", \"&TCC_MISS[21]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b21_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[21]\"}, \"&denom\"] } \n },\n \"b21_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[21]\"}, \"&denom\"] } \n },\n \"b21_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[21]\"}, \"&denom\"] } \n },\n \"b21_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[21]\"}, \"&denom\"] } \n },\n \"b21_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[21]\"}, \"&denom\"] } \n },\n \"b21_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[21]\"}, \"&denom\"] } \n },\n \"b21_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[21]\"}, \"&denom\"] } \n },\n \"b21_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[21]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[21]\", \"&TCC_EA_RDREQ[21]\"]}, null] } },\n \"b21_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[21]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[21]\", \"&TCC_EA_WRREQ[21]\"]}, null] } },\n \"b21_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[21]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[21]\", \"&TCC_EA_ATOMIC[21]\"]}, null]}},\n \"b21_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[21]\"}, \"&denom\"] }},\n\n \n\n \"b22_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[22]\", \"&TCC_MISS[22]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[22]\"]}, \n { \"$add\": [\"&TCC_HIT[22]\", \"&TCC_MISS[22]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b22_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[22]\"}, \"&denom\"] } \n },\n \"b22_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[22]\"}, \"&denom\"] } \n },\n \"b22_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[22]\"}, \"&denom\"] } \n },\n \"b22_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[22]\"}, \"&denom\"] } \n },\n \"b22_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[22]\"}, \"&denom\"] } \n },\n \"b22_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[22]\"}, \"&denom\"] }\n },\n \"b22_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[22]\"}, \"&denom\"] } \n },\n \"b22_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[22]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[22]\", \"&TCC_EA_RDREQ[22]\"]}, null] } },\n \"b22_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[22]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[22]\", \"&TCC_EA_WRREQ[22]\"]}, null] } },\n \"b22_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[22]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[22]\", \"&TCC_EA_ATOMIC[22]\"]}, null]}},\n \"b22_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[22]\"}, \"&denom\"] }},\n\n \n\n \"b23_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[23]\", \"&TCC_MISS[23]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[23]\"]}, \n { \"$add\": [\"&TCC_HIT[23]\", \"&TCC_MISS[23]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b23_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[23]\"}, \"&denom\"] } \n },\n \"b23_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[23]\"}, \"&denom\"] } \n },\n \"b23_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[23]\"}, \"&denom\"] } \n },\n \"b23_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[23]\"}, \"&denom\"] } \n },\n \"b23_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[23]\"}, \"&denom\"] } \n },\n \"b23_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[23]\"}, \"&denom\"] }\n },\n \"b23_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[23]\"}, \"&denom\"] } \n },\n \"b23_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[23]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[23]\", \"&TCC_EA_RDREQ[23]\"]}, null] } },\n \"b23_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[23]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[23]\", \"&TCC_EA_WRREQ[23]\"]}, null] } },\n \"b23_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[23]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[23]\", \"&TCC_EA_ATOMIC[23]\"]}, null]}},\n \"b23_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[23]\"}, \"&denom\"] }},\n\n \n \"b24_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[24]\", \"&TCC_MISS[24]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[24]\"]}, \n { \"$add\": [\"&TCC_HIT[24]\", \"&TCC_MISS[24]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b24_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[24]\"}, \"&denom\"] } \n },\n \"b24_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[24]\"}, \"&denom\"] } \n },\n \"b24_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[24]\"}, \"&denom\"] } \n },\n \"b24_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[24]\"}, \"&denom\"] } \n },\n \"b24_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[24]\"}, \"&denom\"] } \n },\n \"b24_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[24]\"}, \"&denom\"] } \n },\n \"b24_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[24]\"}, \"&denom\"] } \n },\n \"b24_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[24]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[24]\", \"&TCC_EA_RDREQ[24]\"]}, null] } },\n \"b24_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[24]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[24]\", \"&TCC_EA_WRREQ[24]\"]}, null] } },\n \"b24_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[24]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[24]\", \"&TCC_EA_ATOMIC[24]\"]}, null]}},\n \"b24_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[24]\"}, \"&denom\"] }},\n\n \n \"b25_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[25]\", \"&TCC_MISS[25]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[25]\"]}, \n { \"$add\": [\"&TCC_HIT[25]\", \"&TCC_MISS[25]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b25_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[25]\"}, \"&denom\"] } \n },\n \"b25_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[25]\"}, \"&denom\"] } \n },\n \"b25_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[25]\"}, \"&denom\"] } \n },\n \"b25_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[25]\"}, \"&denom\"] } \n },\n \"b25_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[25]\"}, \"&denom\"] } \n },\n \"b25_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[25]\"}, \"&denom\"] } \n },\n \"b25_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[25]\"}, \"&denom\"] } \n },\n \"b25_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[25]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[25]\", \"&TCC_EA_RDREQ[25]\"]}, null] } },\n \"b25_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[25]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[25]\", \"&TCC_EA_WRREQ[25]\"]}, null] } },\n \"b25_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[25]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[25]\", \"&TCC_EA_ATOMIC[25]\"]}, null]}},\n \"b25_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[25]\"}, \"&denom\"] }},\n\n \n \"b26_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[26]\", \"&TCC_MISS[26]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[26]\"]}, \n { \"$add\": [\"&TCC_HIT[26]\", \"&TCC_MISS[26]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b26_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[26]\"}, \"&denom\"] } \n },\n \"b26_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[26]\"}, \"&denom\"] } \n },\n \"b26_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[26]\"}, \"&denom\"] } \n },\n \"b26_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[26]\"}, \"&denom\"] } \n },\n \"b26_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[26]\"}, \"&denom\"] } \n },\n \"b26_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[26]\"}, \"&denom\"] } \n },\n \"b26_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[26]\"}, \"&denom\"] } \n },\n \"b26_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[26]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[26]\", \"&TCC_EA_RDREQ[26]\"]}, null] } },\n \"b26_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[26]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[26]\", \"&TCC_EA_WRREQ[26]\"]}, null] } },\n \"b26_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[26]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[26]\", \"&TCC_EA_ATOMIC[26]\"]}, null]}},\n \"b26_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[26]\"}, \"&denom\"] }},\n\n \n \"b27_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[27]\", \"&TCC_MISS[27]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[27]\"]}, \n { \"$add\": [\"&TCC_HIT[27]\", \"&TCC_MISS[27]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b27_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[27]\"}, \"&denom\"] } \n },\n \"b27_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[27]\"}, \"&denom\"] } \n },\n \"b27_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[27]\"}, \"&denom\"] } \n },\n \"b27_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[27]\"}, \"&denom\"] } \n },\n \"b27_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[27]\"}, \"&denom\"] } \n },\n \"b27_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[27]\"}, \"&denom\"] } \n },\n \"b27_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[27]\"}, \"&denom\"] } \n },\n \"b27_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[27]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[27]\", \"&TCC_EA_RDREQ[27]\"]}, null] } },\n \"b27_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[27]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[27]\", \"&TCC_EA_WRREQ[27]\"]}, null] } },\n \"b27_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[27]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[27]\", \"&TCC_EA_ATOMIC[27]\"]}, null]}},\n \"b27_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[27]\"}, \"&denom\"] }},\n\n \n \"b28_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[28]\", \"&TCC_MISS[28]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[28]\"]}, \n { \"$add\": [\"&TCC_HIT[28]\", \"&TCC_MISS[28]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b28_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[28]\"}, \"&denom\"] } \n },\n \"b28_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[28]\"}, \"&denom\"] } \n },\n \"b28_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[28]\"}, \"&denom\"] } \n },\n \"b28_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[28]\"}, \"&denom\"] } \n },\n \"b28_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[28]\"}, \"&denom\"] } \n },\n \"b28_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[28]\"}, \"&denom\"] } \n },\n \"b28_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[28]\"}, \"&denom\"] } \n },\n \"b28_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[28]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[28]\", \"&TCC_EA_RDREQ[28]\"]}, null] } },\n \"b28_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[28]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[28]\", \"&TCC_EA_WRREQ[28]\"]}, null] } },\n \"b28_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[28]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[28]\", \"&TCC_EA_ATOMIC[28]\"]}, null]}},\n \"b28_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[28]\"}, \"&denom\"] }},\n\n \n \"b29_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[29]\", \"&TCC_MISS[29]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[29]\"]}, \n { \"$add\": [\"&TCC_HIT[29]\", \"&TCC_MISS[29]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b29_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[29]\"}, \"&denom\"] } \n },\n \"b29_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[29]\"}, \"&denom\"] } \n },\n \"b29_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[29]\"}, \"&denom\"] } \n },\n \"b29_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[29]\"}, \"&denom\"] } \n },\n \"b29_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[29]\"}, \"&denom\"] } \n },\n \"b29_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[29]\"}, \"&denom\"] }\n },\n \"b29_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[29]\"}, \"&denom\"] } \n },\n \"b29_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[29]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[29]\", \"&TCC_EA_RDREQ[29]\"]}, null] } },\n \"b29_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[29]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[29]\", \"&TCC_EA_WRREQ[29]\"]}, null] } },\n \"b29_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[29]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[29]\", \"&TCC_EA_ATOMIC[29]\"]}, null]}},\n \"b29_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[29]\"}, \"&denom\"] }},\n\n \n \"b30_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[30]\", \"&TCC_MISS[30]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[30]\"]}, \n { \"$add\": [\"&TCC_HIT[30]\", \"&TCC_MISS[30]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b30_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[30]\"}, \"&denom\"] } \n },\n \"b30_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[30]\"}, \"&denom\"] } \n },\n \"b30_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[30]\"}, \"&denom\"] } \n },\n \"b30_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[30]\"}, \"&denom\"] } \n },\n \"b30_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[30]\"}, \"&denom\"] } \n },\n \"b30_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[30]\"}, \"&denom\"] } \n },\n \"b30_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[30]\"}, \"&denom\"] } \n },\n \"b30_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[30]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[30]\", \"&TCC_EA_RDREQ[30]\"]}, null] } },\n \"b30_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[30]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[30]\", \"&TCC_EA_WRREQ[30]\"]}, null] } },\n \"b30_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[30]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[30]\", \"&TCC_EA_ATOMIC[30]\"]}, null]}},\n \"b30_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[30]\"}, \"&denom\"] }},\n\n \n \"b31_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[31]\", \"&TCC_MISS[31]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[31]\"]}, \n { \"$add\": [\"&TCC_HIT[31]\", \"&TCC_MISS[31]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b31_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[31]\"}, \"&denom\"] } \n },\n \"b31_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[31]\"}, \"&denom\"] } \n },\n \"b31_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[31]\"}, \"&denom\"] } \n },\n \"b31_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[31]\"}, \"&denom\"] } \n },\n \"b31_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[31]\"}, \"&denom\"] } \n },\n \"b31_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[31]\"}, \"&denom\"] } \n },\n \"b31_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[31]\"}, \"&denom\"] }\n },\n \"b31_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[31]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[31]\", \"&TCC_EA_RDREQ[31]\"]}, null] } },\n \"b31_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[31]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[31]\", \"&TCC_EA_WRREQ[31]\"]}, null] } },\n \"b31_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[31]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[31]\", \"&TCC_EA_ATOMIC[31]\"]}, null]}},\n \"b31_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[31]\"}, \"&denom\"] }}\n\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Channel\": \"16\",\n \"Hit Rate\": \"&b16_hitRate\",\n \"Req\": \"&b16_req\",\n \"Read Req\": \"&b16_readReq\",\n \"Write Req\": \"&b16_writeReq\",\n \"AtomicReq\": \"&b16_atomicReq\",\n \"EA Read Req\": \"&b16_eaReadReq\",\n \"EA Write Req\": \"&b16_eaWriteReq\",\n \"EA AtomicReq\": \"&b16_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b16_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b16_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b16_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b16_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b16_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b16_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b16_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b16_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b16_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b16_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"17\",\n \"Hit Rate\": \"&b17_hitRate\",\n \"Req\": \"&b17_req\",\n \"Read Req\": \"&b17_readReq\",\n \"Write Req\": \"&b17_writeReq\",\n \"AtomicReq\": \"&b17_atomicReq\",\n \"EA Read Req\": \"&b17_eaReadReq\",\n \"EA Write Req\": \"&b17_eaWriteReq\",\n \"EA AtomicReq\": \"&b17_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b17_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b17_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b17_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b17_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b17_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b17_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b17_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b17_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b17_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b17_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"18\",\n \"Hit Rate\": \"&b18_hitRate\",\n \"Req\": \"&b18_req\",\n \"Read Req\": \"&b18_readReq\",\n \"Write Req\": \"&b18_writeReq\",\n \"AtomicReq\": \"&b18_atomicReq\",\n \"EA Read Req\": \"&b18_eaReadReq\",\n \"EA Write Req\": \"&b18_eaWriteReq\",\n \"EA AtomicReq\": \"&b18_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b18_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b18_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b18_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b18_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b18_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b18_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b18_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b18_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b18_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b18_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"19\",\n \"Hit Rate\": \"&b19_hitRate\",\n \"Req\": \"&b19_req\",\n \"Read Req\": \"&b19_readReq\",\n \"Write Req\": \"&b19_writeReq\",\n \"AtomicReq\": \"&b19_atomicReq\",\n \"EA Read Req\": \"&b19_eaReadReq\",\n \"EA Write Req\": \"&b19_eaWriteReq\",\n \"EA AtomicReq\": \"&b19_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b19_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b19_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b19_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b19_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b19_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b19_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b19_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b19_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b19_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b19_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"20\",\n \"Hit Rate\": \"&b20_hitRate\",\n \"Req\": \"&b20_req\",\n \"Read Req\": \"&b20_readReq\",\n \"Write Req\": \"&b20_writeReq\",\n \"AtomicReq\": \"&b20_atomicReq\",\n \"EA Read Req\": \"&b20_eaReadReq\",\n \"EA Write Req\": \"&b20_eaWriteReq\",\n \"EA AtomicReq\": \"&b20_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b20_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b20_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b20_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b20_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b20_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b20_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b20_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b20_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b20_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b20_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"21\",\n \"Hit Rate\": \"&b21_hitRate\",\n \"Req\": \"&b21_req\",\n \"Read Req\": \"&b21_readReq\",\n \"Write Req\": \"&b21_writeReq\",\n \"AtomicReq\": \"&b21_atomicReq\",\n \"EA Read Req\": \"&b21_eaReadReq\",\n \"EA Write Req\": \"&b21_eaWriteReq\",\n \"EA AtomicReq\": \"&b21_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b21_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b21_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b21_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b21_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b21_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b21_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b21_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b21_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b21_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b21_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"22\",\n \"Hit Rate\": \"&b22_hitRate\",\n \"Req\": \"&b22_req\",\n \"Read Req\": \"&b22_readReq\",\n \"Write Req\": \"&b22_writeReq\",\n \"AtomicReq\": \"&b22_atomicReq\",\n \"EA Read Req\": \"&b22_eaReadReq\",\n \"EA Write Req\": \"&b22_eaWriteReq\",\n \"EA AtomicReq\": \"&b22_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b22_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b22_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b22_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b22_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b22_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b22_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b22_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b22_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b22_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b22_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"23\",\n \"Hit Rate\": \"&b23_hitRate\",\n \"Req\": \"&b23_req\",\n \"Read Req\": \"&b23_readReq\",\n \"Write Req\": \"&b23_writeReq\",\n \"AtomicReq\": \"&b23_atomicReq\",\n \"EA Read Req\": \"&b23_eaReadReq\",\n \"EA Write Req\": \"&b23_eaWriteReq\",\n \"EA AtomicReq\": \"&b23_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b23_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b23_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b23_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b23_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b23_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b23_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b23_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b23_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b23_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b23_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"24\",\n \"Hit Rate\": \"&b24_hitRate\",\n \"Req\": \"&b24_req\",\n \"Read Req\": \"&b24_readReq\",\n \"Write Req\": \"&b24_writeReq\",\n \"AtomicReq\": \"&b24_atomicReq\",\n \"EA Read Req\": \"&b24_eaReadReq\",\n \"EA Write Req\": \"&b24_eaWriteReq\",\n \"EA AtomicReq\": \"&b24_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b24_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b24_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b24_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b24_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b24_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b24_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b24_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b24_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b24_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b24_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"25\",\n \"Hit Rate\": \"&b25_hitRate\",\n \"Req\": \"&b25_req\",\n \"Read Req\": \"&b25_readReq\",\n \"Write Req\": \"&b25_writeReq\",\n \"AtomicReq\": \"&b25_atomicReq\",\n \"EA Read Req\": \"&b25_eaReadReq\",\n \"EA Write Req\": \"&b25_eaWriteReq\",\n \"EA AtomicReq\": \"&b25_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b25_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b25_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b25_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b25_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b25_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b25_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b25_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b25_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b25_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b25_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"26\",\n \"Hit Rate\": \"&b26_hitRate\",\n \"Req\": \"&b26_req\",\n \"Read Req\": \"&b26_readReq\",\n \"Write Req\": \"&b26_writeReq\",\n \"AtomicReq\": \"&b26_atomicReq\",\n \"EA Read Req\": \"&b26_eaReadReq\",\n \"EA Write Req\": \"&b26_eaWriteReq\",\n \"EA AtomicReq\": \"&b26_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b26_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b26_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b26_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b26_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b26_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b26_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b26_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b26_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b26_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b26_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"27\",\n \"Hit Rate\": \"&b27_hitRate\",\n \"Req\": \"&b27_req\",\n \"Read Req\": \"&b27_readReq\",\n \"Write Req\": \"&b27_writeReq\",\n \"AtomicReq\": \"&b27_atomicReq\",\n \"EA Read Req\": \"&b27_eaReadReq\",\n \"EA Write Req\": \"&b27_eaWriteReq\",\n \"EA AtomicReq\": \"&b27_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b27_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b27_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b27_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b27_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b27_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b27_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b27_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b27_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b27_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b27_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"28\",\n \"Hit Rate\": \"&b28_hitRate\",\n \"Req\": \"&b28_req\",\n \"Read Req\": \"&b28_readReq\",\n \"Write Req\": \"&b28_writeReq\",\n \"AtomicReq\": \"&b28_atomicReq\",\n \"EA Read Req\": \"&b28_eaReadReq\",\n \"EA Write Req\": \"&b28_eaWriteReq\",\n \"EA AtomicReq\": \"&b28_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b28_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b28_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b28_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b28_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b28_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b28_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b28_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b28_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b28_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b28_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"29\",\n \"Hit Rate\": \"&b29_hitRate\",\n \"Req\": \"&b29_req\",\n \"Read Req\": \"&b29_readReq\",\n \"Write Req\": \"&b29_writeReq\",\n \"AtomicReq\": \"&b29_atomicReq\",\n \"EA Read Req\": \"&b29_eaReadReq\",\n \"EA Write Req\": \"&b29_eaWriteReq\",\n \"EA AtomicReq\": \"&b29_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b29_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b29_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b29_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b29_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b29_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b29_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b29_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b29_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b29_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b29_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"30\",\n \"Hit Rate\": \"&b30_hitRate\",\n \"Req\": \"&b30_req\",\n \"Read Req\": \"&b30_readReq\",\n \"Write Req\": \"&b30_writeReq\",\n \"AtomicReq\": \"&b30_atomicReq\",\n \"EA Read Req\": \"&b30_eaReadReq\",\n \"EA Write Req\": \"&b30_eaWriteReq\",\n \"EA AtomicReq\": \"&b30_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b30_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b30_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b30_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b30_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b30_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b30_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b30_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b30_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b30_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b30_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"31\",\n \"Hit Rate\": \"&b31_hitRate\",\n \"Req\": \"&b31_req\",\n \"Read Req\": \"&b31_readReq\",\n \"Write Req\": \"&b31_writeReq\",\n \"AtomicReq\": \"&b31_atomicReq\",\n \"EA Read Req\": \"&b31_eaReadReq\",\n \"EA Write Req\": \"&b31_eaWriteReq\",\n \"EA AtomicReq\": \"&b31_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b31_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b31_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b31_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b31_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b31_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b31_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b31_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b31_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b31_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b31_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - EA Read Latency (Channel 16-31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 10, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 81 + }, + "id": 93, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 10, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 81 + }, + "id": 94, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Latency (Channel 16 - 31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 11, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Atomic Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 89 + }, + "id": 187, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 11, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Atomic Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 89 + }, + "id": 201, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Latency (Channel 16 - 31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 12, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 97 + }, + "id": 220, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - I/O (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 12, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 97 + }, + "id": 227, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - I/O (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 13, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 105 + }, + "id": 221, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - GMI (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 13, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 105 + }, + "id": 228, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - GMI (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 14, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 113 + }, + "id": 222, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - HBM (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 14, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 113 + }, + "id": 229, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - HBM (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 15, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 223, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - I/O (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 15, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 121 + }, + "id": 230, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - I/O (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 16, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 129 + }, + "id": 225, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - GMI (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 16, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 129 + }, + "id": 231, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - GMI (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 17, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 137 + }, + "id": 224, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - HBM (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 17, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 137 + }, + "id": 232, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - HBM (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 18, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - Starve", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 145 + }, + "id": 226, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Starve (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 18, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - Starve", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 145 + }, + "id": 233, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Starve (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "L2 Cache (per Channel)", + "type": "row" + } + ], + "refresh": "", + "schemaVersion": 34, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": true, + "text": "\"per Wave\"", + "value": "\"per Wave\"" + }, + "hide": 0, + "includeAll": false, + "label": "Normalization", + "multi": false, + "name": "normUnit", + "options": [ + { + "selected": true, + "text": "\"per Wave\"", + "value": "\"per Wave\"" + }, + { + "selected": false, + "text": "\"per Cycle\"", + "value": "\"per Cycle\"" + }, + { + "selected": false, + "text": "\"per Sec\"", + "value": "\"per Sec\"" + }, + { + "selected": false, + "text": "\"per Kernel\"", + "value": "\"per Kernel\"" + } + ], + "query": "\"per Wave\",\n\"per Cycle\",\n\"per Sec\",\n\"per Kernel\"", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "L2 Channels", + "multi": false, + "name": "L2Banks", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "8", + "value": "8" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#SEs", + "multi": false, + "name": "numSE", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "104", + "value": "104" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#CUs", + "multi": false, + "name": "numCU", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Max Waves/CU", + "multi": false, + "name": "maxWavesPerCU", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1700", + "value": "1700" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "SCLK (MHz)", + "multi": false, + "name": "sclk", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "56", + "value": "56" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#SQC", + "multi": false, + "name": "numSQC", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1638.4", + "value": "1638.4" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "HBM BW (GB/s)", + "multi": false, + "name": "hbmBW", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "omniperf_gfxWL_test_gemm_BF16_profile10k_mi200", + "value": "omniperf_gfxWL_test_gemm_BF16_profile10k_mi200" + }, + "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Workload", + "multi": false, + "name": "Workload1", + "options": [], + "query": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "148579", + "value": "148579" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Kernel Cycles", + "multi": false, + "name": "kernelBusyCycles", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "63", + "value": "63" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Active CUs", + "multi": false, + "name": "numActiveCUs", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "description": "Defaults to all DispatchIDs", + "hide": 2, + "includeAll": true, + "label": "Filtered Dispatch ID", + "multi": false, + "name": "DispatchIDFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "refresh": 1, + "regex": "${DispatchID:text}", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "", + "value": "" + }, + "description": "Desired DispatchID filters as regex ex. (1|18)", + "hide": 0, + "label": "Dispatch Filter", + "name": "DispatchID", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "current": { + "selected": false, + "text": "0", + "value": "0" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "GCD", + "multi": false, + "name": "gpuFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 3, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "hide": 0, + "includeAll": true, + "label": "Kernels", + "multi": true, + "name": "KernelNameFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "miperf_asw_vcopy_mi200", + "value": "miperf_asw_vcopy_mi200" + }, + "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Baseline Workload", + "multi": false, + "name": "Workload2", + "options": [], + "query": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "84", + "value": "84" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] }, 8] }] }, $numCU2] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline ActiveCUs", + "multi": false, + "name": "numActiveCUs2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] }, 8] }] }, $numCU2] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "description": "Defaults to all DispatchIDs", + "hide": 2, + "includeAll": true, + "label": "Baseline Dispatch IDs", + "multi": false, + "name": "DispatchIDFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "refresh": 1, + "regex": "${DispatchID2:text}", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "", + "value": "" + }, + "description": "Desired DispatchID filters as regex ex. (1|18)", + "hide": 0, + "label": "Baseline Dispatch Filter", + "name": "DispatchID2", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "current": { + "selected": false, + "text": "0", + "value": "0" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Baseline GCD", + "multi": false, + "name": "gpuFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "hide": 0, + "includeAll": true, + "label": "Baseline Kernels", + "multi": true, + "name": "KernelNameFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "System Info" + ], + "value": [ + "System Info" + ] + }, + "hide": 0, + "includeAll": false, + "label": "Comparison Panels", + "multi": true, + "name": "select", + "options": [ + { + "selected": true, + "text": "System Info", + "value": "System Info" + }, + { + "selected": false, + "text": "System Speed-of-Light", + "value": "System Speed-of-Light" + }, + { + "selected": false, + "text": "Roofline", + "value": "Roofline" + }, + { + "selected": false, + "text": "Command Processor", + "value": "Command Processor" + }, + { + "selected": false, + "text": "Shader Processor Input", + "value": "Shader Processor Input" + }, + { + "selected": false, + "text": "Wavefront", + "value": "Wavefront" + }, + { + "selected": false, + "text": "Compute Pipeline", + "value": "Compute Pipeline" + }, + { + "selected": false, + "text": "Instruction Mix", + "value": "Instruction Mix" + }, + { + "selected": false, + "text": "Local Data Share", + "value": "Local Data Share" + }, + { + "selected": false, + "text": "Instruction Cache", + "value": "Instruction Cache" + }, + { + "selected": false, + "text": "Scalar L1D Cache", + "value": "Scalar L1D Cache" + }, + { + "selected": false, + "text": "Texture Addr and Data", + "value": "Texture Addr and Data" + }, + { + "selected": false, + "text": "Vector L1D Cache", + "value": "Vector L1D Cache" + }, + { + "selected": false, + "text": "L2 Cache", + "value": "L2 Cache" + } + ], + "query": "System Info, \nSystem Speed-of-Light, \nRoofline,\nCommand Processor, \nShader Processor Input, \nWavefront,\nCompute Pipeline, \nInstruction Mix,\nLocal Data Share, \nInstruction Cache, \nScalar L1D Cache, \nTexture Addr and Data, \nVector L1D Cache,\nL2 Cache", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline L2 Channels", + "multi": false, + "name": "L2Banks2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "8", + "value": "8" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #SEs", + "multi": false, + "name": "numSE2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "110", + "value": "110" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #CUs", + "multi": false, + "name": "numCU2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline Max Waves/CU", + "multi": false, + "name": "maxWavesPerCU2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1700", + "value": "1700" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline SCLK (MHz)", + "multi": false, + "name": "sclk2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "56", + "value": "56" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #SQC", + "multi": false, + "name": "numSQC2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1638.4", + "value": "1638.4" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline HBM BW (GB/s)", + "multi": false, + "name": "hbmBW2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "mi200", + "value": "mi200" + }, + "definition": "${Workload1}.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "SOC", + "multi": false, + "name": "soc", + "options": [], + "query": "${Workload1}.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "5", + "value": "5" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "TopN", + "options": [ + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": true, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "15", + "value": "15" + }, + { + "selected": false, + "text": "20", + "value": "20" + }, + { + "selected": false, + "text": "50", + "value": "50" + }, + { + "selected": false, + "text": "100", + "value": "100" + } + ], + "query": "1,5,10,15,20,50,100", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "2021-11-04T14:21:39.749Z", + "to": "2021-11-08T14:21:39.749Z" + }, + "timepicker": {}, + "timezone": "", + "title": "Omniperf_v1.0.7_pub", + "uid": "MIPerf_v1_0_06302022112", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml b/src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml index 3c000b4d7e..503bc702ee 100644 --- a/src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml @@ -163,17 +163,17 @@ Panel Config: tips: Tips metric: MFMA-I8: - count: AVG((SQ_INSTS_VALU_MFMA_I8 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_I8 / $denom)) tips: MFMA-F16: - count: AVG((SQ_INSTS_VALU_MFMA_F16 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_F16 / $denom)) tips: MFMA-BF16: - count: AVG((SQ_INSTS_VALU_MFMA_BF16 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_BF16 / $denom)) tips: MFMA-F32: - count: AVG((SQ_INSTS_VALU_MFMA_F32 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_F32 / $denom)) tips: MFMA-F64: - count: AVG((SQ_INSTS_VALU_MFMA_F64 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_F64 / $denom)) tips: From c3e3c9982b33fa7da7d7e98c6008fe9526316354 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 17 Jan 2023 10:26:00 -0600 Subject: [PATCH 30/90] Catch any import errors from matplotlib #62 Signed-off-by: colramos425 --- src/utils/plot_roofline.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/utils/plot_roofline.py b/src/utils/plot_roofline.py index a6e9d2da23..f421dc972e 100644 --- a/src/utils/plot_roofline.py +++ b/src/utils/plot_roofline.py @@ -21,14 +21,22 @@ ################################################################################ from linecache import cache -import subprocess -from operator import sub import os import sys from pathlib import Path import numpy -import matplotlib.pyplot as plt +import matplotlib + +try: + + import matplotlib.pyplot as plt +except ImportError: + # other non-interactive options: + # cairo, pdf, pgf, ps, svg, template + matplotlib.use("agg", force=True) + import matplotlib.pyplot as plt + from matplotlib.pyplot import get, text from math import log, pi, sqrt import pandas as pd @@ -511,8 +519,6 @@ def plot_application(inputs, verbose): print(intensities) - # fig, ax = plt.subplots() - plotted_spots = [] labels = [] for i in intensities: From 263ca0fe771f5eda5127fec9e869d096447a2d9b Mon Sep 17 00:00:00 2001 From: colramos425 Date: Tue, 17 Jan 2023 10:26:48 -0600 Subject: [PATCH 31/90] Clean up roofline code #62 Signed-off-by: colramos425 --- src/omniperf_analyze/utils/gui.py | 1 - .../utils/gui_components/header.py | 3 +- .../utils/gui_components/roofline.py | 2 +- src/omniperf_analyze/utils/roofline_calc.py | 32 +++++++------------ 4 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index 07be15e421..da7c16b07c 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -23,7 +23,6 @@ from selectors import EpollSelector import sys import copy -from matplotlib.axis import XAxis import pandas as pd from dash.dash_table import FormatTemplate from dash.dash_table.Format import Format, Scheme, Symbol diff --git a/src/omniperf_analyze/utils/gui_components/header.py b/src/omniperf_analyze/utils/gui_components/header.py index 0e61055b0a..accae9fa3c 100644 --- a/src/omniperf_analyze/utils/gui_components/header.py +++ b/src/omniperf_analyze/utils/gui_components/header.py @@ -20,9 +20,8 @@ # THE SOFTWARE. ################################################################################ -from dash import html, dash_table, dcc +from dash import html, dcc import dash_bootstrap_components as dbc -from matplotlib.style import available from omniperf_analyze.utils import schema diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 6e4ce2c54c..183bd9dcbb 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -39,7 +39,7 @@ def to_int(a): def generate_plots(roof_info, ai_data, verbose, fig=None): if fig is None: fig = go.Figure() - line_data = roofline_calc.empirical_roof(roof_info) + line_data = roofline_calc.empirical_roof(roof_info, verbose) ####################### # Plot BW Lines diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index 1f49c7dde2..df64248358 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -20,19 +20,7 @@ # THE SOFTWARE. ################################################################################ -from linecache import cache -import subprocess -from operator import sub -import os import sys -from pathlib import Path - -import numpy -import matplotlib.pyplot as plt -from matplotlib.pyplot import get, text -from math import log, pi, sqrt -import pandas as pd -import pylab from dataclasses import dataclass import csv @@ -100,7 +88,7 @@ def get_color(catagory): # ------------------------------------------------------------------------------------- # Plot BW at each cache level # ------------------------------------------------------------------------------------- -def plot_roof(roof_details, roof_data): +def plot_roof(roof_details, roof_data, verbose): graphPoints = {"hbm": [], "l2": [], "l1": [], "lds": [], "valu": [], "mfma": []} @@ -116,7 +104,8 @@ def plot_roof(roof_details, roof_data): ) for i in range(0, len(cacheHierarchy)): # Plot BW line - # print("Current cache level is ", cacheHierarchy[i]) + if verbose >= 3: + print("Current cache level is ", cacheHierarchy[i]) curr_bw = cacheHierarchy[i] + "Bw" peakBw = float(roof_data[curr_bw][roof_details["device"]]) @@ -142,8 +131,9 @@ def plot_roof(roof_details, roof_data): y2_mfma = peakMFMA # These are the points to use: - # print("x = [{}, {}]".format(x1,x2_mfma)) - # print("y = [{}, {}]".format(y1, y2_mfma)) + if verbose >= 3: + print("x = [{}, {}]".format(x1, x2_mfma)) + print("y = [{}, {}]".format(y1, y2_mfma)) graphPoints[cacheHierarchy[i].lower()].append([x1, x2_mfma]) graphPoints[cacheHierarchy[i].lower()].append([y1, y2_mfma]) @@ -159,7 +149,8 @@ def plot_roof(roof_details, roof_data): if x2 < x0: x0 = x2 - # print("FMA ROOF [{}, {}], [{},{}]".format(x0, XMAX, peakOps, peakOps)) + if verbose >= 3: + print("FMA ROOF [{}, {}], [{},{}]".format(x0, XMAX, peakOps, peakOps)) graphPoints["valu"].append([x0, XMAX]) graphPoints["valu"].append([peakOps, peakOps]) graphPoints["valu"].append(peakOps) @@ -172,7 +163,8 @@ def plot_roof(roof_details, roof_data): if x2_mfma < x0_mfma: x0_mfma = x2_mfma - # print("MFMA ROOF [{}, {}], [{},{}]".format(x0_mfma, XMAX, peakMFMA, peakMFMA)) + if verbose >= 3: + print("MFMA ROOF [{}, {}], [{},{}]".format(x0_mfma, XMAX, peakMFMA, peakMFMA)) graphPoints["mfma"].append([x0_mfma, XMAX]) graphPoints["mfma"].append([peakMFMA, peakMFMA]) graphPoints["mfma"].append(peakMFMA) @@ -474,7 +466,7 @@ def plot_application(sortType, ret_df, verbose): return intensityPoints -def empirical_roof(roof_info): +def empirical_roof(roof_info, verbose): if roof_info["sort"] != "kernels" and roof_info["sort"] != "dispatches": sys.exit("Invalid sort. Must be either 'kernels' or 'dispatches'") @@ -517,7 +509,7 @@ def empirical_roof(roof_info): # ------------------ # Generate Roofline # ------------------ - results = plot_roof(roof_info, roof_data) + results = plot_roof(roof_info, roof_data, verbose) # for key in results: # print(key, "->", results[key]) From fca1001a4cb62a72f470763ab61d3ce6340969c9 Mon Sep 17 00:00:00 2001 From: colramos425 Date: Wed, 18 Jan 2023 11:46:12 -0600 Subject: [PATCH 32/90] Modify GUI roofline to accomidate standalone option Signed-off-by: colramos425 --- src/omniperf | 119 +++++++++--------- src/omniperf_analyze/omniperf_analyze.py | 15 +++ .../utils/gui_components/roofline.py | 62 +++++---- src/omniperf_analyze/utils/roofline_calc.py | 2 +- 4 files changed, 111 insertions(+), 87 deletions(-) diff --git a/src/omniperf b/src/omniperf index d8a8ef3d4e..5eca89f45c 100755 --- a/src/omniperf +++ b/src/omniperf @@ -37,7 +37,7 @@ from utils import specs from utils.perfagg import perfmon_filter, pmc_filter from utils import remove_workload from utils import csv_converter # Import workload -from utils import plot_roofline # standalone roofline +from omniperf_analyze.omniperf_analyze import roofline_only from omniperf_analyze.omniperf_analyze import analyze # CLI analysis from common import ( @@ -212,7 +212,61 @@ def mongo_import(args, profileAndImport): ################################################ # Roofline Helpers ################################################ +def roof_setup(args, my_parser): + if args.path == os.getcwd() + "/workloads": + args.path += "/" + args.name + "/" + str(get_soc()) + # Verify valid axes parameters + if args.axes: + if len(args.axes) != 4: + throw_parse_error( + my_parser, + "Invalid argument for --axes.\nMust contain four values formatted as: --axes xmin xmax ymin ymax", + ) + if args.axes[0] > args.axes[1] or args.axes[2] > args.axes[3]: + throw_parse_error( + my_parser, + "Invalid argument for --axes.\nBreaks required conditions: (xmax > xmin && ymax > ymin)", + ) + + # We need to make a directory for a new roofline + if not os.path.isdir(args.path): + os.makedirs(args.path) + # does roof data exist? + print("Checking for roofline.csv in ", args.path) + roof_path = args.path + "/roofline.csv" + roofline_exists = os.path.isfile(roof_path) + if not roofline_exists: + if get_soc() != "mi200": + throw_parse_error( + my_parser, "Invalid SoC.\nRoofline only availible on MI200." + ) + mibench(args) + + # does sysinfo exist? + print("Checking for sysinfo.csv in ", args.path) + sysinfo_path = args.path + "/sysinfo.csv" + sysinfo_exists = os.path.isfile(sysinfo_path) + if not sysinfo_exists: + print("sysinfo not found") + gen_sysinfo(args.name, args.path, [], args.remaining, False) + + # does app data exist? + print("Checking for pmc_perf.csv in ", args.path) + app_path = args.path + "/pmc_perf.csv" + app_exists = os.path.isfile(app_path) + if not app_exists: + if get_soc() != "mi200": + throw_parse_error( + my_parser, "Invalid SoC.\nRoofline only availible on MI200." + ) + if not args.remaining: + throw_parse_error( + my_parser, + "Cannot find existing application data.\nAttempting to generate application data from -- .\n-- option is required to generate application data.", + ) + else: + characterize_app(args.path, args.remaining, args.verbose) def detect_roofline(): mspec = specs.get_machine_specs(0) @@ -248,7 +302,6 @@ def detect_roofline(): target_binary = {"rocm_ver": rocm_ver, "distro": distro} return target_binary - def mibench(args): print("No roofline data found. Generating...") @@ -282,7 +335,6 @@ def mibench(args): ] ) - def characterize_app(path, cmd, verbose): target = get_soc() workload_dir = path @@ -314,12 +366,9 @@ def characterize_app(path, cmd, verbose): # Update pmc_perf.csv timestamps replace_timestamps(workload_dir) - ################################################ # Profiling Helpers ################################################ - - def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): global rocprof_cmd @@ -514,62 +563,10 @@ def main(): elif args.roof_only: print("\n--------\nRoofline only\n--------\n") - if args.path == os.getcwd() + "/workloads": - args.path += "/" + args.name + "/" + str(get_soc()) - # Verify valid axes parameters - if args.axes: - if len(args.axes) != 4: - throw_parse_error( - my_parser, - "Invalid argument for --axes.\nMust contain four values formatted as: --axes xmin xmax ymin ymax", - ) - - if args.axes[0] > args.axes[1] or args.axes[2] > args.axes[3]: - throw_parse_error( - my_parser, - "Invalid argument for --axes.\nBreaks required conditions: (xmax > xmin && ymax > ymin)", - ) - - # We need to make a directory for a new roofline - if not os.path.isdir(args.path): - os.makedirs(args.path) - # does roof data exist? - print("Checking for roofline.csv in ", args.path) - roof_path = args.path + "/roofline.csv" - roofline_exists = os.path.isfile(roof_path) - if not roofline_exists: - if get_soc() != "mi200": - throw_parse_error( - my_parser, "Invalid SoC.\nRoofline only availible on MI200." - ) - mibench(args) - - # does sysinfo exist? - print("Checking for sysinfo.csv in ", args.path) - sysinfo_path = args.path + "/sysinfo.csv" - sysinfo_exists = os.path.isfile(sysinfo_path) - if not sysinfo_exists: - print("sysinfo not found") - gen_sysinfo(args.name, args.path, [], args.remaining, False) - - # does app data exist? - print("Checking for pmc_perf.csv in ", args.path) - app_path = args.path + "/pmc_perf.csv" - app_exists = os.path.isfile(app_path) - if not app_exists: - if get_soc() != "mi200": - throw_parse_error( - my_parser, "Invalid SoC.\nRoofline only availible on MI200." - ) - if not args.remaining: - throw_parse_error( - my_parser, - "Cannot find existing application data.\nAttempting to generate application data from -- .\n-- option is required to generate application data.", - ) - else: - characterize_app(args.path, args.remaining, args.verbose) + # Setup prerequisits for roofline + roof_setup(args, my_parser) # Generate roofline - plot_roofline.empirical_roof(args) + roofline_only(args.path, args.verbose, args.device) # Profile only else: diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index 4741a3acfa..d15dec4c92 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -41,6 +41,7 @@ import argparse import os.path from pathlib import Path from omniperf_analyze.utils import parser, file_io +from omniperf_analyze.utils.gui_components.roofline import get_roofline def initialize_run(args, normalization_filter=None): @@ -209,6 +210,20 @@ def run_cli(args, runs): ) +def roofline_only(path_to_dir, verbose, dev_id): + import pandas as pd + from collections import OrderedDict + + app_path = path_to_dir + "/pmc_perf.csv" + roofline_exists = os.path.isfile(app_path) + if not roofline_exists: + print("Error: {} does not exist") + sys.exit(0) + t_df = OrderedDict() + t_df["pmc_perf"] = pd.read_csv(app_path) + get_roofline(path_to_dir, t_df, dev_id, verbose, True) + + def analyze(args): if args.dependency: print("pip3 install astunparse numpy tabulate pandas pyyaml") diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 183bd9dcbb..669dc284a1 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -164,8 +164,9 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): return fig -def get_roofline(path_to_dir, ret_df, verbose): +def get_roofline(path_to_dir, ret_df, dev_id, verbose, isStandalone=False): # Roofline settings + # TODO: Make "sort" attribute dynamic so user can select desired sort fp32_details = { "path": path_to_dir, "sort": "kernels", @@ -185,6 +186,7 @@ def get_roofline(path_to_dir, ret_df, verbose): ai_data = roofline_calc.plot_application("kernels", ret_df, verbose) if verbose >= 1: # print AI data for each mem level + print("AI at each mem level") for i in ai_data: print(i, "->", ai_data[i]) print("\n") @@ -193,27 +195,37 @@ def get_roofline(path_to_dir, ret_df, verbose): fp16_fig = generate_plots(fp16_details, ai_data, verbose) ml_combo_fig = generate_plots(int8_details, ai_data, verbose, fp16_fig) - return html.Section( - id="roofline", - children=[ - html.Div( - className="float-container", - children=[ - html.Div( - className="float-child", - children=[ - html.H3(children="Empirical Roofline Analysis (FP32/FP64)"), - dcc.Graph(figure=fp32_fig), - ], - ), - html.Div( - className="float-child", - children=[ - html.H3(children="Empirical Roofline Analysis (FP16/INT8)"), - dcc.Graph(figure=ml_combo_fig), - ], - ), - ], - ) - ], - ) + if isStandalone: + dev_id = "ALL" if dev_id == -1 else str(dev_id) + + fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32".format(dev_id)) + ml_combo_fig.write_image(path_to_dir + "empirRoof_gpu-{}_fp8_fp16".format(dev_id)) + else: + return html.Section( + id="roofline", + children=[ + html.Div( + className="float-container", + children=[ + html.Div( + className="float-child", + children=[ + html.H3( + children="Empirical Roofline Analysis (FP32/FP64)" + ), + dcc.Graph(figure=fp32_fig), + ], + ), + html.Div( + className="float-child", + children=[ + html.H3( + children="Empirical Roofline Analysis (FP16/INT8)" + ), + dcc.Graph(figure=ml_combo_fig), + ], + ), + ], + ) + ], + ) diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index df64248358..ca8b5022a5 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -89,7 +89,7 @@ def get_color(catagory): # Plot BW at each cache level # ------------------------------------------------------------------------------------- def plot_roof(roof_details, roof_data, verbose): - + # TODO: This is where filtering by memory level will need to occur for standalone graphPoints = {"hbm": [], "l2": [], "l1": [], "lds": [], "valu": [], "mfma": []} cacheHierarchy = ["HBM", "L2", "L1", "LDS"] From 813ce52fc17558ca8e9ef0495fcc009224eb89ab Mon Sep 17 00:00:00 2001 From: colramos425 Date: Thu, 19 Jan 2023 12:40:14 -0600 Subject: [PATCH 33/90] Add Python dependency for static file saving Signed-off-by: colramos425 --- CMakeLists.txt | 3 ++- requirements.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c03d08f95..ff2df00a4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,8 @@ set(pythonDeps "tabulate" "tqdm" "dash_svg" - "dash_bootstrap_components") + "dash_bootstrap_components" + "kaleido") message(STATUS "Checking for required Python package dependencies...") set_property(GLOBAL PROPERTY pythonDepsFlag "groovy") diff --git a/requirements.txt b/requirements.txt index 69beb6c77b..ced0520724 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ tabulate tqdm dash-svg dash-bootstrap-components +kaleido From 15ed9317dd55991340b76339baa1faa6a7cd980a Mon Sep 17 00:00:00 2001 From: colramos425 Date: Thu, 19 Jan 2023 12:41:13 -0600 Subject: [PATCH 34/90] Add BW label to all roof plots Signed-off-by: colramos425 --- .../utils/gui_components/roofline.py | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 669dc284a1..c86c8365b8 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -40,6 +40,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): if fig is None: fig = go.Figure() line_data = roofline_calc.empirical_roof(roof_info, verbose) + print("Line data:\n", line_data) ####################### # Plot BW Lines @@ -49,12 +50,12 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["hbm"][0], y=line_data["hbm"][1], name="HBM-{}".format(roof_info["dtype"]), - mode="lines", + mode="lines+text", hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["hbm"][2])), - "{} GFLOP/s".format(to_int(line_data["hbm"][2])), ], + textposition="top center" ) ) fig.add_trace( @@ -62,12 +63,12 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["l2"][0], y=line_data["l2"][1], name="L2-{}".format(roof_info["dtype"]), - mode="lines", + mode="lines+text", hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["l2"][2])), - "{} GFLOP/s".format(to_int(line_data["l2"][2])), ], + textposition="top center" ) ) fig.add_trace( @@ -75,12 +76,12 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["l1"][0], y=line_data["l1"][1], name="L1-{}".format(roof_info["dtype"]), - mode="lines", + mode="lines+text", hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["l1"][2])), - "{} GFLOP/s".format(to_int(line_data["l1"][2])), ], + textposition="top center" ) ) fig.add_trace( @@ -88,12 +89,12 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["lds"][0], y=line_data["lds"][1], name="LDS-{}".format(roof_info["dtype"]), - mode="lines", + mode="lines+text", hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["lds"][2])), - "{} GFLOP/s".format(to_int(line_data["lds"][2])), ], + textposition="top center" ) ) if roof_info["dtype"] != "FP16" and roof_info["dtype"] != "I8": @@ -102,25 +103,32 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["valu"][0], y=line_data["valu"][1], name="Peak VALU-{}".format(roof_info["dtype"]), - mode="lines", + mode="lines+text", hovertemplate="%{text}", text=[ - "{} GFLOP/s".format(to_int(line_data["valu"][2])), + None, "{} GFLOP/s".format(to_int(line_data["valu"][2])), ], + textposition="top center" ) ) + + if roof_info["dtype"] == "FP16": + pos = "bottom center" + else: + pos = "top center" fig.add_trace( go.Scatter( x=line_data["mfma"][0], y=line_data["mfma"][1], name="Peak MFMA-{}".format(roof_info["dtype"]), - mode="lines", + mode="lines+text", hovertemplate="%{text}", text=[ - "{} GFLOP/s".format(to_int(line_data["mfma"][2])), + None, "{} GFLOP/s".format(to_int(line_data["mfma"][2])), ], + textposition=pos ) ) ####################### @@ -164,7 +172,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): return fig -def get_roofline(path_to_dir, ret_df, dev_id, verbose, isStandalone=False): +def get_roofline(path_to_dir, ret_df, verbose, dev_id=None, isStandalone=False): # Roofline settings # TODO: Make "sort" attribute dynamic so user can select desired sort fp32_details = { @@ -198,8 +206,8 @@ def get_roofline(path_to_dir, ret_df, dev_id, verbose, isStandalone=False): if isStandalone: dev_id = "ALL" if dev_id == -1 else str(dev_id) - fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32".format(dev_id)) - ml_combo_fig.write_image(path_to_dir + "empirRoof_gpu-{}_fp8_fp16".format(dev_id)) + fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32.pdf".format(dev_id)) + ml_combo_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id)) else: return html.Section( id="roofline", From ff1b9cc5403c34f6c957a0a5a3dfe0ef267fceed Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 20 Jan 2023 12:34:55 -0600 Subject: [PATCH 35/90] Update min ROCm version in docs #64 Signed-off-by: colramos425 --- src/docs/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/installation.md b/src/docs/installation.md index 65be7aa300..ee2489710c 100644 --- a/src/docs/installation.md +++ b/src/docs/installation.md @@ -24,7 +24,7 @@ Omniperf requires the following basic software dependencies prior to usage: * Python (>=3.7) * CMake (>= 3.19) -* ROCm (>= 5.1) +* ROCm (>= 5.2.0) In addition, Omniperf leverages a number of Python packages that are documented in the top-level `requirements.txt` file. These must be From 7b4adc5bc0cf958baab370ad25ff557d52b242aa Mon Sep 17 00:00:00 2001 From: colramos425 Date: Fri, 20 Jan 2023 12:46:17 -0600 Subject: [PATCH 36/90] Update modulefiles for new ROCm requirement #64 Signed-off-by: colramos425 --- cmake/modfile.crusher.mod | 2 +- cmake/modfile.thera.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/modfile.crusher.mod b/cmake/modfile.crusher.mod index 144b2143da..46d6111574 100644 --- a/cmake/modfile.crusher.mod +++ b/cmake/modfile.crusher.mod @@ -1,4 +1,4 @@ -- Crusher-specific additions depends_on "cray-python" depends_on "rocm" -prereq(atleast("rocm","5.1.0")) +prereq(atleast("rocm","5.2.0")) diff --git a/cmake/modfile.thera.mod b/cmake/modfile.thera.mod index f253723ae2..5e5cb5fdfe 100644 --- a/cmake/modfile.thera.mod +++ b/cmake/modfile.thera.mod @@ -1,6 +1,6 @@ -- Thera-specific additions depends_on "python" depends_on "rocm" -prereq(atleast("rocm","5.1.0")) +prereq(atleast("rocm","5.2.0")) local home = os.getenv("HOME") setenv("MPLCONFIGDIR",pathJoin(home,".matplotlib")) From 227760ce1cb8e56315839bf7d51387484b40f56e Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Mon, 23 Jan 2023 13:53:39 -0600 Subject: [PATCH 37/90] Update deprecated mongoimport code Signed-off-by: coleramos425 --- src/utils/csv_converter.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index 2e500ce090..a3000911cd 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -224,27 +224,28 @@ def convert_folder(connectionInfo, Extractionlvl): df_saved_file = t2.to_csv(newfilepath + file) cmd = ( - 'mongoimport --quiet --uri mongodb://{}:{}@{}:{} --authenticationDatabase "admin" --file {} -d {} -c {} --drop --type csv --headerline' + 'mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline' ).format( connectionInfo["username"], connectionInfo["password"], connectionInfo["host"], connectionInfo["port"], - newfilepath + file, connectionInfo["db"], + newfilepath + file, + fileName, ) os.system(cmd) else: cmd = ( - 'mongoimport --quiet --uri mongodb://{}:{}@{}:{} --authenticationDatabase "admin" --file {} -d {} -c {} --drop --type csv --headerline' + 'mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline' ).format( connectionInfo["username"], connectionInfo["password"], connectionInfo["host"], connectionInfo["port"], - connectionInfo["workload"] + "/" + file, connectionInfo["db"], + connectionInfo["workload"] + "/" + file, fileName, ) os.system(cmd) From 49a55b0f45cde2339cb57858b8884c19992205c9 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 23 Jan 2023 14:48:23 -0600 Subject: [PATCH 38/90] Comply to Python formatting Signed-off-by: coleramos425 --- src/utils/csv_converter.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index a3000911cd..2aca0e9486 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -224,7 +224,7 @@ def convert_folder(connectionInfo, Extractionlvl): df_saved_file = t2.to_csv(newfilepath + file) cmd = ( - 'mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline' + "mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline" ).format( connectionInfo["username"], connectionInfo["password"], @@ -232,13 +232,12 @@ def convert_folder(connectionInfo, Extractionlvl): connectionInfo["port"], connectionInfo["db"], newfilepath + file, - fileName, ) os.system(cmd) else: cmd = ( - 'mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline' + "mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline" ).format( connectionInfo["username"], connectionInfo["password"], From 38c2ea61a7b810a2e7882249aacc7f0b241974a0 Mon Sep 17 00:00:00 2001 From: colramos-amd Date: Tue, 8 Nov 2022 11:39:01 -0600 Subject: [PATCH 39/90] Clone multevent via SSH Signed-off-by: colramos-amd Signed-off-by: coleramos425 --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 2c2cc3d0f0..52b4e0f969 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,4 +7,4 @@ url = git@github.com:AARInternal/waveparser.git [submodule "src/multevent"] path = src/multevent - url = https://github.com/AARInternal/multevent + url = git@github.com:AARInternal/multevent.git From 4c6a64f4e569c0ce2cca942508d922e20513337c Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Wed, 9 Nov 2022 11:28:00 -0600 Subject: [PATCH 40/90] Added a new feature --i-feel-lucky that discovers and profiles only the top 5 kernels Signed-off-by: Keith Lowery Signed-off-by: coleramos425 --- src/omniperf | 41 ++++++++++++++++++++++++++++++++++++++++- src/parser.py | 9 +++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/omniperf b/src/omniperf index d483f0bc75..fd3b705767 100755 --- a/src/omniperf +++ b/src/omniperf @@ -318,6 +318,7 @@ def omniperf_profile(args): print("Command: ", args.remaining) print("Kernel Selection: ", args.kernel) print("Dispatch Selection: ", args.dispatch) + if args.ipblocks == None: print("IP Blocks: All") else: @@ -326,10 +327,48 @@ def omniperf_profile(args): # Set up directories workload_dir = args.path + "/" + args.name + "/" + args.target perfmon_dir = str(OMNIPERF_HOME) + "/perfmon_pub" + + if not args.lucky == None and args.lucky == True: + print("You're feeling lucky - only profiling top N kernels") + #look for whether workload_dir exists - create if not + try: + os.makedirs(workload_dir, exist_ok = True) + except Exception as e: + print("Unable to create workload directory: ", workload_dir) + print(e) + sys.exit(1) + subprocess.run( + [ + rocprof_cmd, + # "-i", fname, + # "-m", perfmon_dir + "/" + "metrics.xml", + "--timestamp", + "on", + "-o", + workload_dir + "/" + "timestamps.csv", + '"' + args.remaining + '"', + ] + ) + df_stamps = pd.read_csv(workload_dir + "/timestamps.csv") + df_elapsed = df_stamps['EndNs'] - df_stamps['BeginNs'] + df_stamps['Duration'] = df_elapsed + if args.dispatch == None: + args.dispatch = list(map(lambda x: str(x) + ':' + str(x), df_stamps.sort_values(by=['Duration'], ascending=False)['Index'].iloc[0:5].tolist())) + else: + ids = df_stamps.sort_values(by=['Duration'], ascending=False)['Index'].iloc[0:5].tolist() + dispatch = {} + for d in ids: + dispatch[d] = d + for d in args.dispatch: + dispatch[d] = d + args.dispatch = list(map(lambda x: str(x) + ':' + str(x),dispatch.values())) + + # Perfmon filtering perfmon_filter(workload_dir, perfmon_dir, args) + # Workload profiling for fname in glob.glob(workload_dir + "/perfmon/*.txt"): # Kernel filtering (in-place replacement) @@ -351,7 +390,7 @@ def omniperf_profile(args): "sed", "-i", "-r", - "s%^(range:).*%" + "range: " + ",".join(args.dispatch) + "%g", + "s%^(range:).*%" + "range: " + " ".join(args.dispatch) + "%g", fname, ] ) diff --git a/src/parser.py b/src/parser.py index 6559e7dc0b..ac62fd2995 100644 --- a/src/parser.py +++ b/src/parser.py @@ -116,6 +116,15 @@ def parse(my_parser): default=None, help="\t\t\tKernel filtering.", ) + profile_group.add_argument( + "-l", + "--i-feel-lucky", + required=False, + default=False, + action="store_true", + dest="lucky", + help="\t\t\tProfile only the most time consuming kernels.", + ) profile_group.add_argument( "-b", "--ipblocks", From eadd35e5c6405879ed59f1149fa7474a05d8723b Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Wed, 7 Dec 2022 20:19:22 +0000 Subject: [PATCH 41/90] Integrated support for using rocscope with omniperf for top10 (--i-feel-lucky) Signed-off-by: coleramos425 --- src/common.py | 2 +- src/omniperf | 115 +- src/perfmon_pub/gfx900_metrics.xml | 5161 ++++++++++++++++++++++ src/perfmon_pub/metrics.xml | 5 +- src/perfmon_pub/vega10/pmc_cpc_perf.txt | 15 + src/perfmon_pub/vega10/pmc_cpf_perf.txt | 13 + src/perfmon_pub/vega10/pmc_spi_perf.txt | 12 + src/perfmon_pub/vega10/pmc_sq_perf1.txt | 31 + src/perfmon_pub/vega10/pmc_sq_perf2.txt | 12 + src/perfmon_pub/vega10/pmc_sq_perf3.txt | 13 + src/perfmon_pub/vega10/pmc_sq_perf4.txt | 11 + src/perfmon_pub/vega10/pmc_sq_perf6.txt | 15 + src/perfmon_pub/vega10/pmc_sq_perf8.txt | 7 + src/perfmon_pub/vega10/pmc_sqc_perf1.txt | 12 + src/perfmon_pub/vega10/pmc_ta_perf.txt | 37 + src/perfmon_pub/vega10/pmc_tcc2_perf.txt | 26 + src/perfmon_pub/vega10/pmc_tcc_perf.txt | 19 + src/perfmon_pub/vega10/pmc_tcp_perf.txt | 18 + src/perfmon_pub/vega10/pmc_td_perf.txt | 12 + src/utils/perfagg.py | 13 + src/utils/plot_roofline.py | 2 + src/utils/specs.py | 2 +- 22 files changed, 5487 insertions(+), 66 deletions(-) create mode 100644 src/perfmon_pub/gfx900_metrics.xml create mode 100644 src/perfmon_pub/vega10/pmc_cpc_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_cpf_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_spi_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_sq_perf1.txt create mode 100644 src/perfmon_pub/vega10/pmc_sq_perf2.txt create mode 100644 src/perfmon_pub/vega10/pmc_sq_perf3.txt create mode 100644 src/perfmon_pub/vega10/pmc_sq_perf4.txt create mode 100644 src/perfmon_pub/vega10/pmc_sq_perf6.txt create mode 100644 src/perfmon_pub/vega10/pmc_sq_perf8.txt create mode 100644 src/perfmon_pub/vega10/pmc_sqc_perf1.txt create mode 100644 src/perfmon_pub/vega10/pmc_ta_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_tcc2_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_tcc_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_tcp_perf.txt create mode 100644 src/perfmon_pub/vega10/pmc_td_perf.txt diff --git a/src/common.py b/src/common.py index 2109ede788..8a0fbb2e43 100644 --- a/src/common.py +++ b/src/common.py @@ -29,7 +29,7 @@ OMNIPERF_HOME = Path(__file__).resolve().parent # OMNIPERF INFO PROG = "omniperf" -SOC_LIST = ["mi50", "mi100", "mi200"] +SOC_LIST = ["mi50", "mi100", "mi200", "vega10"] DISTRO_MAP = {"platform:el8": "rhel8", "15.3": "sle15sp3", "20.04": "ubuntu20_04"} version = os.path.join(OMNIPERF_HOME.parent, "VERSION") try: diff --git a/src/omniperf b/src/omniperf index fd3b705767..9032778ddc 100755 --- a/src/omniperf +++ b/src/omniperf @@ -80,6 +80,8 @@ def get_soc(): target = "mi100" elif mspec.GPU == "gfx90a": target = "mi200" + elif mspec.GPU == "gfx900": + target = "vega10" else: print("\nInvalid SoC") sys.exit(0) @@ -328,6 +330,9 @@ def omniperf_profile(args): workload_dir = args.path + "/" + args.name + "/" + args.target perfmon_dir = str(OMNIPERF_HOME) + "/perfmon_pub" + # Perfmon filtering + perfmon_filter(workload_dir, perfmon_dir, args) + if not args.lucky == None and args.lucky == True: print("You're feeling lucky - only profiling top N kernels") #look for whether workload_dir exists - create if not @@ -337,6 +342,51 @@ def omniperf_profile(args): print("Unable to create workload directory: ", workload_dir) print(e) sys.exit(1) + + result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + if result.returncode == 0: + rs_cmd = [result.stdout.decode('ascii').strip(), + "top10", + "-p", args.path, + "-n", args.name, + "--", args.remaining] + print(rs_cmd) + result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if result.returncode != 0: + print(result.stderr.decode('ascii')) + else: + print("rocscope must be in the PATH") + sys.exit(1) + else: + for fname in glob.glob(workload_dir + "/perfmon/*.txt"): + # Kernel filtering (in-place replacement) + if not args.kernel == None: + subprocess.run( + [ + "sed", + "-i", + "-r", + "s%^(kernel:).*%" + "kernel: " + ",".join(args.kernel) + "%g", + fname, + ] + ) + + # Dispatch filtering (inplace replacement) + if not args.dispatch == None: + subprocess.run( + [ + "sed", + "-i", + "-r", + "s%^(range:).*%" + "range: " + " ".join(args.dispatch) + "%g", + fname, + ] + ) + run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose) + + + + # run again with timestamps subprocess.run( [ rocprof_cmd, @@ -349,69 +399,9 @@ def omniperf_profile(args): '"' + args.remaining + '"', ] ) - df_stamps = pd.read_csv(workload_dir + "/timestamps.csv") - df_elapsed = df_stamps['EndNs'] - df_stamps['BeginNs'] - df_stamps['Duration'] = df_elapsed - if args.dispatch == None: - args.dispatch = list(map(lambda x: str(x) + ':' + str(x), df_stamps.sort_values(by=['Duration'], ascending=False)['Index'].iloc[0:5].tolist())) - else: - ids = df_stamps.sort_values(by=['Duration'], ascending=False)['Index'].iloc[0:5].tolist() - dispatch = {} - for d in ids: - dispatch[d] = d - for d in args.dispatch: - dispatch[d] = d - args.dispatch = list(map(lambda x: str(x) + ':' + str(x),dispatch.values())) - - - # Perfmon filtering - perfmon_filter(workload_dir, perfmon_dir, args) - - - # Workload profiling - for fname in glob.glob(workload_dir + "/perfmon/*.txt"): - # Kernel filtering (in-place replacement) - if not args.kernel == None: - subprocess.run( - [ - "sed", - "-i", - "-r", - "s%^(kernel:).*%" + "kernel: " + ",".join(args.kernel) + "%g", - fname, - ] - ) - - # Dispatch filtering (inplace replacement) - if not args.dispatch == None: - subprocess.run( - [ - "sed", - "-i", - "-r", - "s%^(range:).*%" + "range: " + " ".join(args.dispatch) + "%g", - fname, - ] - ) - run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose) - - # run again with timestamps - subprocess.run( - [ - rocprof_cmd, - # "-i", fname, - # "-m", perfmon_dir + "/" + "metrics.xml", - "--timestamp", - "on", - "-o", - workload_dir + "/" + "timestamps.csv", - '"' + args.remaining + '"', - ] - ) - - # Update pmc_perf.csv timestamps - replace_timestamps(workload_dir) + # Update pmc_perf.csv timestamps + replace_timestamps(workload_dir) # Generate sysinfo gen_sysinfo(args.name, workload_dir, args.ipblocks, args.no_roof) @@ -466,6 +456,7 @@ def main(): # PROFILE MODE ############## if args.mode == "profile": + print("Resolving rocprof") resolve_rocprof() if ".." in str(args.path): throw_parse_error( diff --git a/src/perfmon_pub/gfx900_metrics.xml b/src/perfmon_pub/gfx900_metrics.xml new file mode 100644 index 0000000000..8095a6dfa8 --- /dev/null +++ b/src/perfmon_pub/gfx900_metrics.xml @@ -0,0 +1,5161 @@ + + # CPC counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # CPF counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # GDS counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # GRBM counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # SPI counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # SQ counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # SX counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TA counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TCA counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TCC counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TCP counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TD counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # GRBM_SE counters + + + + + + + + + + + + + + + + + # SDMA counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # ATCL2 counters + + + + + + + + + + + + + # MCVML2 counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # ATC counters + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/perfmon_pub/metrics.xml b/src/perfmon_pub/metrics.xml index 4871eaf3ac..f22b2533b3 100644 --- a/src/perfmon_pub/metrics.xml +++ b/src/perfmon_pub/metrics.xml @@ -1,6 +1,7 @@ #include "gfx906_metrics.xml" #include "gfx908_metrics.xml" #include "gfx90a_metrics.xml" +#include "gfx900_metrics.xml" @@ -22,7 +23,7 @@ - + @@ -197,7 +198,7 @@ # # - + # EA1 diff --git a/src/perfmon_pub/vega10/pmc_cpc_perf.txt b/src/perfmon_pub/vega10/pmc_cpc_perf.txt new file mode 100644 index 0000000000..c579c90580 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_cpc_perf.txt @@ -0,0 +1,15 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_WAVES + +pmc: CPC_CPC_STAT_BUSY CPC_CPC_STAT_IDLE +pmc: CPC_CPC_TCIU_BUSY CPC_CPC_TCIU_IDLE +pmc: CPC_CPC_STAT_STALL CPC_UTCL1_STALL_ON_TRANSLATION +pmc: CPC_CPC_UTCL2IU_BUSY CPC_CPC_UTCL2IU_IDLE +pmc: CPC_CPC_UTCL2IU_STALL CPC_ME1_BUSY_FOR_PACKET_DECODE +pmc: CPC_ME1_DC0_SPI_BUSY + +range: +gpu: + +kernel: + + diff --git a/src/perfmon_pub/vega10/pmc_cpf_perf.txt b/src/perfmon_pub/vega10/pmc_cpf_perf.txt new file mode 100644 index 0000000000..452e42e8ae --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_cpf_perf.txt @@ -0,0 +1,13 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_WAVES + +pmc: CPF_CPF_STAT_BUSY CPF_CPF_STAT_STALL +pmc: CPF_CPF_TCIU_BUSY CPF_CPF_TCIU_STALL +pmc: CPF_CPF_STAT_IDLE CPF_CPF_TCIU_IDLE +pmc: CPF_CMP_UTCL1_STALL_ON_TRANSLATION + +range: +gpu: + +kernel: + + diff --git a/src/perfmon_pub/vega10/pmc_spi_perf.txt b/src/perfmon_pub/vega10/pmc_spi_perf.txt new file mode 100644 index 0000000000..09893f746f --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_spi_perf.txt @@ -0,0 +1,12 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_WAVES GRBM_SPI_BUSY + +pmc: SPI_CSN_WINDOW_VALID SPI_CSN_BUSY SPI_CSN_NUM_THREADGROUPS SPI_CSN_WAVE SPI_RA_REQ_NO_ALLOC SPI_RA_REQ_NO_ALLOC_CSN +pmc: SPI_RA_RES_STALL_CSN SPI_RA_TMP_STALL_CSN SPI_RA_WAVE_SIMD_FULL_CSN SPI_RA_VGPR_SIMD_FULL_CSN SPI_RA_SGPR_SIMD_FULL_CSN SPI_RA_LDS_CU_FULL_CSN +pmc: SPI_RA_BAR_CU_FULL_CSN SPI_RA_TGLIM_CU_FULL_CSN SPI_RA_WVLIM_STALL_CSN SPI_SWC_CSC_WR SPI_VWC_CSC_WR SPI_RA_BULKY_CU_FULL_CSN + +range: +gpu: + +kernel: + + diff --git a/src/perfmon_pub/vega10/pmc_sq_perf1.txt b/src/perfmon_pub/vega10/pmc_sq_perf1.txt new file mode 100644 index 0000000000..223c6f3cce --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sq_perf1.txt @@ -0,0 +1,31 @@ +#SQ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_INSTS_VMEM_WR SQ_INSTS_VMEM_RD SQ_INSTS_VMEM SQ_INSTS_SALU SQ_INSTS_VSKIPPED +pmc: SQ_INSTS_SMEM SQ_INSTS_FLAT SQ_INSTS_LDS SQ_INSTS_GDS SQ_INSTS_EXP_GDS SQ_INSTS_BRANCH SQ_INSTS_SENDMSG SQ_INSTS +pmc: SQ_WAVE_CYCLES SQ_WAIT_ANY SQ_WAIT_INST_ANY SQ_ACTIVE_INST_ANY SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_INSTS_VALU +pmc: SQ_ACTIVE_INST_VMEM SQ_ACTIVE_INST_LDS SQ_ACTIVE_INST_VALU SQ_ACTIVE_INST_SCA SQ_ACTIVE_INST_EXP_GDS SQ_ACTIVE_INST_MISC SQ_ACTIVE_INST_FLAT SQ_INST_CYCLES_VMEM_WR +pmc: SQ_INST_CYCLES_VMEM_RD SQ_INST_CYCLES_SMEM SQ_INST_CYCLES_SALU SQ_THREAD_CYCLES_VALU SQ_IFETCH SQ_LDS_BANK_CONFLICT SQ_LDS_ADDR_CONFLICT SQ_LDS_UNALIGNED_STALL +pmc: SQ_WAVES SQ_WAVES_EQ_64 SQ_WAVES_LT_64 SQ_WAVES_LT_48 SQ_WAVES_LT_32 SQ_WAVES_LT_16 SQ_ITEMS SQ_INSTS_VSKIPPED +pmc: SQ_LDS_MEM_VIOLATIONS SQ_LDS_ATOMIC_RETURN SQ_LDS_IDX_ACTIVE SQ_WAVES_RESTORED SQ_WAVES_SAVED SQ_INSTS_SMEM_NORM + + +#SQ:MI200 +#pmc: SQ_INSTS_MFMA SQ_INSTS_VALU_MFMA_I8 SQ_INSTS_VALU_MFMA_F16 SQ_INSTS_VALU_MFMA_BF16 SQ_INSTS_VALU_MFMA_F32 SQ_INSTS_VALU_MFMA_F64 SQ_VALU_MFMA_BUSY_CYCLES +#pmc: SQ_INSTS_FLAT_LDS_ONLY SQ_INSTS_VALU_MFMA_MOPS_I8 SQ_INSTS_VALU_MFMA_MOPS_F16 SQ_INSTS_VALU_MFMA_MOPS_BF16 SQ_INSTS_VALU_MFMA_MOPS_F32 SQ_INSTS_VALU_MFMA_MOPS_F64 + +#SQC +pmc: SQC_TC_INST_REQ SQC_TC_DATA_READ_REQ SQC_TC_DATA_WRITE_REQ SQC_TC_DATA_ATOMIC_REQ SQC_TC_STALL SQC_TC_REQ SQC_DCACHE_REQ_READ_16 +pmc: SQC_ICACHE_REQ SQC_ICACHE_HITS SQC_ICACHE_MISSES SQC_ICACHE_MISSES_DUPLICATE SQC_DCACHE_INPUT_VALID_READYB SQC_DCACHE_ATOMIC SQC_DCACHE_REQ_READ_8 +pmc: SQC_DCACHE_REQ SQC_DCACHE_HITS SQC_DCACHE_MISSES SQC_DCACHE_MISSES_DUPLICATE SQC_DCACHE_REQ_READ_1 SQC_DCACHE_REQ_READ_2 SQC_DCACHE_REQ_READ_4 + + + +######################################## +# Filtering +######################################## +range: +gpu: +kernel: + + + + diff --git a/src/perfmon_pub/vega10/pmc_sq_perf2.txt b/src/perfmon_pub/vega10/pmc_sq_perf2.txt new file mode 100644 index 0000000000..6f39f40015 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sq_perf2.txt @@ -0,0 +1,12 @@ +################################################# +# VMEM latency +################################################# +pmc: SQ_INSTS_VMEM SQ_INST_LEVEL_VMEM SQ_ACCUM_PREV_HIRES + + +range: +gpu: + +kernel: + + diff --git a/src/perfmon_pub/vega10/pmc_sq_perf3.txt b/src/perfmon_pub/vega10/pmc_sq_perf3.txt new file mode 100644 index 0000000000..7b48ccf564 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sq_perf3.txt @@ -0,0 +1,13 @@ +################################################# +# SMEM latency +################################################# +pmc: SQ_INSTS_SMEM SQ_INST_LEVEL_SMEM SQ_ACCUM_PREV_HIRES + + +range: +gpu: + + +kernel: + + diff --git a/src/perfmon_pub/vega10/pmc_sq_perf4.txt b/src/perfmon_pub/vega10/pmc_sq_perf4.txt new file mode 100644 index 0000000000..2161f8a1cb --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sq_perf4.txt @@ -0,0 +1,11 @@ +################################################# +# ifetch latency +################################################# +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_WAVES SQ_IFETCH SQ_IFETCH_LEVEL SQ_ACCUM_PREV_HIRES + +range: +gpu: +kernel: + + + diff --git a/src/perfmon_pub/vega10/pmc_sq_perf6.txt b/src/perfmon_pub/vega10/pmc_sq_perf6.txt new file mode 100644 index 0000000000..13552f40f6 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sq_perf6.txt @@ -0,0 +1,15 @@ +################################################# +# LDS latency +################################################# +pmc: SQ_INSTS_LDS SQ_INST_LEVEL_LDS SQ_ACCUM_PREV_HIRES + +range: +gpu: + +kernel: + + + + + + diff --git a/src/perfmon_pub/vega10/pmc_sq_perf8.txt b/src/perfmon_pub/vega10/pmc_sq_perf8.txt new file mode 100644 index 0000000000..e322b01813 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sq_perf8.txt @@ -0,0 +1,7 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE CPC_ME1_BUSY_FOR_PACKET_DECODE SQ_CYCLES SQ_WAVES SQ_WAVE_CYCLES SQ_BUSY_CYCLES SQ_LEVEL_WAVES SQ_ACCUM_PREV_HIRES + +gpu: +range: + +kernel: + diff --git a/src/perfmon_pub/vega10/pmc_sqc_perf1.txt b/src/perfmon_pub/vega10/pmc_sqc_perf1.txt new file mode 100644 index 0000000000..2b748eacc0 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_sqc_perf1.txt @@ -0,0 +1,12 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES + + +pmc: SQC_TC_INST_REQ SQC_TC_DATA_READ_REQ SQC_TC_DATA_WRITE_REQ SQC_TC_DATA_ATOMIC_REQ SQC_TC_STALL SQC_TC_REQ SQC_DCACHE_REQ_READ_16 +pmc: SQC_ICACHE_REQ SQC_ICACHE_HITS SQC_ICACHE_MISSES SQC_ICACHE_MISSES_DUPLICATE SQC_DCACHE_INPUT_VALID_READYB SQC_DCACHE_ATOMIC SQC_DCACHE_REQ_READ_8 +pmc: SQC_DCACHE_REQ SQC_DCACHE_HITS SQC_DCACHE_MISSES SQC_DCACHE_MISSES_DUPLICATE SQC_DCACHE_REQ_READ_1 SQC_DCACHE_REQ_READ_2 SQC_DCACHE_REQ_READ_4 + +range: +gpu: + +kernel: + diff --git a/src/perfmon_pub/vega10/pmc_ta_perf.txt b/src/perfmon_pub/vega10/pmc_ta_perf.txt new file mode 100644 index 0000000000..851f22400d --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_ta_perf.txt @@ -0,0 +1,37 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES + +pmc: TA_TA_BUSY_sum TA_SH_FIFO_BUSY_sum +pmc: TA_SH_FIFO_CMD_BUSY_sum TA_SH_FIFO_ADDR_BUSY_sum +pmc: TA_SH_FIFO_DATA_BUSY_sum TA_SH_FIFO_DATA_SFIFO_BUSY_sum +pmc: TA_SH_FIFO_DATA_TFIFO_BUSY_sum TA_SQ_TA_CMD_CYCLES_sum +pmc: TA_SP_TA_ADDR_CYCLES_sum TA_SP_TA_DATA_CYCLES_sum + + +# Starvation +pmc: TA_SH_FIFO_ADDR_STARVED_WHILE_BUSY_CYCLES_sum TA_SH_FIFO_CMD_STARVED_WHILE_BUSY_CYCLES_sum +pmc: TA_SH_FIFO_DATA_STARVED_WHILE_BUSY_CYCLES_sum TA_TA_SH_FIFO_STARVED_sum + + + +# buffer access +pmc: TA_BUFFER_WAVEFRONTS_sum TA_BUFFER_READ_WAVEFRONTS_sum +pmc: TA_BUFFER_WRITE_WAVEFRONTS_sum TA_BUFFER_ATOMIC_WAVEFRONTS_sum +pmc: TA_BUFFER_TOTAL_CYCLES_sum TA_BUFFER_COALESCABLE_WAVEFRONTS_sum +pmc: TA_BUFFER_COALESCED_READ_CYCLES_sum TA_BUFFER_COALESCED_WRITE_CYCLES_sum + + +# stalls +pmc: TA_ADDR_STALLED_BY_TC_CYCLES_sum TA_TOTAL_WAVEFRONTS_sum +pmc: TA_ADDR_STALLED_BY_TD_CYCLES_sum TA_DATA_STALLED_BY_TC_CYCLES_sum + +# flat accesses +pmc: TA_FLAT_WAVEFRONTS_sum TA_FLAT_READ_WAVEFRONTS_sum +pmc: TA_FLAT_WRITE_WAVEFRONTS_sum TA_FLAT_ATOMIC_WAVEFRONTS_sum +pmc: TA_FLAT_COALESCEABLE_WAVEFRONTS_sum + + +range: + +gpu: + +kernel: diff --git a/src/perfmon_pub/vega10/pmc_tcc2_perf.txt b/src/perfmon_pub/vega10/pmc_tcc2_perf.txt new file mode 100644 index 0000000000..04b9a2bea5 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_tcc2_perf.txt @@ -0,0 +1,26 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_WAVES + +# MI50: no TCC_RW_REQ +pmc: TCC_CYCLE[0] TCC_HIT[0] TCC_MISS[0] TCC_CYCLE[1] TCC_HIT[1] TCC_MISS[1] TCC_CYCLE[2] TCC_HIT[2] TCC_MISS[2] TCC_CYCLE[3] TCC_HIT[3] TCC_MISS[3] TCC_CYCLE[4] TCC_HIT[4] TCC_MISS[4] TCC_CYCLE[5] TCC_HIT[5] TCC_MISS[5] TCC_CYCLE[6] TCC_HIT[6] TCC_MISS[6] TCC_CYCLE[7] TCC_HIT[7] TCC_MISS[7] TCC_CYCLE[8] TCC_HIT[8] TCC_MISS[8] TCC_CYCLE[9] TCC_HIT[9] TCC_MISS[9] TCC_CYCLE[10] TCC_HIT[10] TCC_MISS[10] TCC_CYCLE[11] TCC_HIT[11] TCC_MISS[11] TCC_CYCLE[12] TCC_HIT[12] TCC_MISS[12] TCC_CYCLE[13] TCC_HIT[13] TCC_MISS[13] TCC_CYCLE[14] TCC_HIT[14] TCC_MISS[14] TCC_CYCLE[15] TCC_HIT[15] TCC_MISS[15] + + + +pmc: TCC_REQ[0] TCC_READ[0] TCC_WRITE[0] TCC_ATOMIC[0] TCC_REQ[1] TCC_READ[1] TCC_WRITE[1] TCC_ATOMIC[1] TCC_REQ[2] TCC_READ[2] TCC_WRITE[2] TCC_ATOMIC[2] TCC_REQ[3] TCC_READ[3] TCC_WRITE[3] TCC_ATOMIC[3] TCC_REQ[4] TCC_READ[4] TCC_WRITE[4] TCC_ATOMIC[4] TCC_REQ[5] TCC_READ[5] TCC_WRITE[5] TCC_ATOMIC[5] TCC_REQ[6] TCC_READ[6] TCC_WRITE[6] TCC_ATOMIC[6] TCC_REQ[7] TCC_READ[7] TCC_WRITE[7] TCC_ATOMIC[7] TCC_REQ[8] TCC_READ[8] TCC_WRITE[8] TCC_ATOMIC[8] TCC_REQ[9] TCC_READ[9] TCC_WRITE[9] TCC_ATOMIC[9] TCC_REQ[10] TCC_READ[10] TCC_WRITE[10] TCC_ATOMIC[10] TCC_REQ[11] TCC_READ[11] TCC_WRITE[11] TCC_ATOMIC[11] TCC_REQ[12] TCC_READ[12] TCC_WRITE[12] TCC_ATOMIC[12] TCC_REQ[13] TCC_READ[13] TCC_WRITE[13] TCC_ATOMIC[13] TCC_REQ[14] TCC_READ[14] TCC_WRITE[14] TCC_ATOMIC[14] TCC_REQ[15] TCC_READ[15] TCC_WRITE[15] TCC_ATOMIC[15] + + + +pmc: TCC_EA_RDREQ[0] TCC_EA_RDREQ_32B[0] TCC_EA_WRREQ[0] TCC_EA_WRREQ_64B[0] TCC_EA_RDREQ[1] TCC_EA_RDREQ_32B[1] TCC_EA_WRREQ[1] TCC_EA_WRREQ_64B[1] TCC_EA_RDREQ[2] TCC_EA_RDREQ_32B[2] TCC_EA_WRREQ[2] TCC_EA_WRREQ_64B[2] TCC_EA_RDREQ[3] TCC_EA_RDREQ_32B[3] TCC_EA_WRREQ[3] TCC_EA_WRREQ_64B[3] TCC_EA_RDREQ[4] TCC_EA_RDREQ_32B[4] TCC_EA_WRREQ[4] TCC_EA_WRREQ_64B[4] TCC_EA_RDREQ[5] TCC_EA_RDREQ_32B[5] TCC_EA_WRREQ[5] TCC_EA_WRREQ_64B[5] TCC_EA_RDREQ[6] TCC_EA_RDREQ_32B[6] TCC_EA_WRREQ[6] TCC_EA_WRREQ_64B[6] TCC_EA_RDREQ[7] TCC_EA_RDREQ_32B[7] TCC_EA_WRREQ[7] TCC_EA_WRREQ_64B[7] TCC_EA_RDREQ[8] TCC_EA_RDREQ_32B[8] TCC_EA_WRREQ[8] TCC_EA_WRREQ_64B[8] TCC_EA_RDREQ[9] TCC_EA_RDREQ_32B[9] TCC_EA_WRREQ[9] TCC_EA_WRREQ_64B[9] TCC_EA_RDREQ[10] TCC_EA_RDREQ_32B[10] TCC_EA_WRREQ[10] TCC_EA_WRREQ_64B[10] TCC_EA_RDREQ[11] TCC_EA_RDREQ_32B[11] TCC_EA_WRREQ[11] TCC_EA_WRREQ_64B[11] TCC_EA_RDREQ[12] TCC_EA_RDREQ_32B[12] TCC_EA_WRREQ[12] TCC_EA_WRREQ_64B[12] TCC_EA_RDREQ[13] TCC_EA_RDREQ_32B[13] TCC_EA_WRREQ[13] TCC_EA_WRREQ_64B[13] TCC_EA_RDREQ[14] TCC_EA_RDREQ_32B[14] TCC_EA_WRREQ[14] TCC_EA_WRREQ_64B[14] TCC_EA_RDREQ[15] TCC_EA_RDREQ_32B[15] TCC_EA_WRREQ[15] TCC_EA_WRREQ_64B[15] + + +pmc: TCC_EA_ATOMIC[0] TCC_EA_RDREQ_LEVEL[0] TCC_EA_WRREQ_LEVEL[0] TCC_EA_ATOMIC_LEVEL[0] TCC_EA_ATOMIC[1] TCC_EA_RDREQ_LEVEL[1] TCC_EA_WRREQ_LEVEL[1] TCC_EA_ATOMIC_LEVEL[1] TCC_EA_ATOMIC[2] TCC_EA_RDREQ_LEVEL[2] TCC_EA_WRREQ_LEVEL[2] TCC_EA_ATOMIC_LEVEL[2] TCC_EA_ATOMIC[3] TCC_EA_RDREQ_LEVEL[3] TCC_EA_WRREQ_LEVEL[3] TCC_EA_ATOMIC_LEVEL[3] TCC_EA_ATOMIC[4] TCC_EA_RDREQ_LEVEL[4] TCC_EA_WRREQ_LEVEL[4] TCC_EA_ATOMIC_LEVEL[4] TCC_EA_ATOMIC[5] TCC_EA_RDREQ_LEVEL[5] TCC_EA_WRREQ_LEVEL[5] TCC_EA_ATOMIC_LEVEL[5] TCC_EA_ATOMIC[6] TCC_EA_RDREQ_LEVEL[6] TCC_EA_WRREQ_LEVEL[6] TCC_EA_ATOMIC_LEVEL[6] TCC_EA_ATOMIC[7] TCC_EA_RDREQ_LEVEL[7] TCC_EA_WRREQ_LEVEL[7] TCC_EA_ATOMIC_LEVEL[7] TCC_EA_ATOMIC[8] TCC_EA_RDREQ_LEVEL[8] TCC_EA_WRREQ_LEVEL[8] TCC_EA_ATOMIC_LEVEL[8] TCC_EA_ATOMIC[9] TCC_EA_RDREQ_LEVEL[9] TCC_EA_WRREQ_LEVEL[9] TCC_EA_ATOMIC_LEVEL[9] TCC_EA_ATOMIC[10] TCC_EA_RDREQ_LEVEL[10] TCC_EA_WRREQ_LEVEL[10] TCC_EA_ATOMIC_LEVEL[10] TCC_EA_ATOMIC[11] TCC_EA_RDREQ_LEVEL[11] TCC_EA_WRREQ_LEVEL[11] TCC_EA_ATOMIC_LEVEL[11] TCC_EA_ATOMIC[12] TCC_EA_RDREQ_LEVEL[12] TCC_EA_WRREQ_LEVEL[12] TCC_EA_ATOMIC_LEVEL[12] TCC_EA_ATOMIC[13] TCC_EA_RDREQ_LEVEL[13] TCC_EA_WRREQ_LEVEL[13] TCC_EA_ATOMIC_LEVEL[13] TCC_EA_ATOMIC[14] TCC_EA_RDREQ_LEVEL[14] TCC_EA_WRREQ_LEVEL[14] TCC_EA_ATOMIC_LEVEL[14] TCC_EA_ATOMIC[15] TCC_EA_RDREQ_LEVEL[15] TCC_EA_WRREQ_LEVEL[15] TCC_EA_ATOMIC_LEVEL[15] + + +pmc: TCC_EA_RDREQ_IO_CREDIT_STALL[0] TCC_EA_RDREQ_GMI_CREDIT_STALL[0] TCC_EA_RDREQ_DRAM_CREDIT_STALL[0] TCC_EA_RDREQ_IO_CREDIT_STALL[1] TCC_EA_RDREQ_GMI_CREDIT_STALL[1] TCC_EA_RDREQ_DRAM_CREDIT_STALL[1] TCC_EA_RDREQ_IO_CREDIT_STALL[2] TCC_EA_RDREQ_GMI_CREDIT_STALL[2] TCC_EA_RDREQ_DRAM_CREDIT_STALL[2] TCC_EA_RDREQ_IO_CREDIT_STALL[3] TCC_EA_RDREQ_GMI_CREDIT_STALL[3] TCC_EA_RDREQ_DRAM_CREDIT_STALL[3] TCC_EA_RDREQ_IO_CREDIT_STALL[4] TCC_EA_RDREQ_GMI_CREDIT_STALL[4] TCC_EA_RDREQ_DRAM_CREDIT_STALL[4] TCC_EA_RDREQ_IO_CREDIT_STALL[5] TCC_EA_RDREQ_GMI_CREDIT_STALL[5] TCC_EA_RDREQ_DRAM_CREDIT_STALL[5] TCC_EA_RDREQ_IO_CREDIT_STALL[6] TCC_EA_RDREQ_GMI_CREDIT_STALL[6] TCC_EA_RDREQ_DRAM_CREDIT_STALL[6] TCC_EA_RDREQ_IO_CREDIT_STALL[7] TCC_EA_RDREQ_GMI_CREDIT_STALL[7] TCC_EA_RDREQ_DRAM_CREDIT_STALL[7] TCC_EA_RDREQ_IO_CREDIT_STALL[8] TCC_EA_RDREQ_GMI_CREDIT_STALL[8] TCC_EA_RDREQ_DRAM_CREDIT_STALL[8] TCC_EA_RDREQ_IO_CREDIT_STALL[9] TCC_EA_RDREQ_GMI_CREDIT_STALL[9] TCC_EA_RDREQ_DRAM_CREDIT_STALL[9] TCC_EA_RDREQ_IO_CREDIT_STALL[10] TCC_EA_RDREQ_GMI_CREDIT_STALL[10] TCC_EA_RDREQ_DRAM_CREDIT_STALL[10] TCC_EA_RDREQ_IO_CREDIT_STALL[11] TCC_EA_RDREQ_GMI_CREDIT_STALL[11] TCC_EA_RDREQ_DRAM_CREDIT_STALL[11] TCC_EA_RDREQ_IO_CREDIT_STALL[12] TCC_EA_RDREQ_GMI_CREDIT_STALL[12] TCC_EA_RDREQ_DRAM_CREDIT_STALL[12] TCC_EA_RDREQ_IO_CREDIT_STALL[13] TCC_EA_RDREQ_GMI_CREDIT_STALL[13] TCC_EA_RDREQ_DRAM_CREDIT_STALL[13] TCC_EA_RDREQ_IO_CREDIT_STALL[14] TCC_EA_RDREQ_GMI_CREDIT_STALL[14] TCC_EA_RDREQ_DRAM_CREDIT_STALL[14] TCC_EA_RDREQ_IO_CREDIT_STALL[15] TCC_EA_RDREQ_GMI_CREDIT_STALL[15] TCC_EA_RDREQ_DRAM_CREDIT_STALL[15] + + +pmc: TCC_EA_WRREQ_IO_CREDIT_STALL[0] TCC_EA_WRREQ_GMI_CREDIT_STALL[0] TCC_EA_WRREQ_DRAM_CREDIT_STALL[0] TCC_TOO_MANY_EA_WRREQS_STALL[0] TCC_EA_WRREQ_IO_CREDIT_STALL[1] TCC_EA_WRREQ_GMI_CREDIT_STALL[1] TCC_EA_WRREQ_DRAM_CREDIT_STALL[1] TCC_TOO_MANY_EA_WRREQS_STALL[1] TCC_EA_WRREQ_IO_CREDIT_STALL[2] TCC_EA_WRREQ_GMI_CREDIT_STALL[2] TCC_EA_WRREQ_DRAM_CREDIT_STALL[2] TCC_TOO_MANY_EA_WRREQS_STALL[2] TCC_EA_WRREQ_IO_CREDIT_STALL[3] TCC_EA_WRREQ_GMI_CREDIT_STALL[3] TCC_EA_WRREQ_DRAM_CREDIT_STALL[3] TCC_TOO_MANY_EA_WRREQS_STALL[3] TCC_EA_WRREQ_IO_CREDIT_STALL[4] TCC_EA_WRREQ_GMI_CREDIT_STALL[4] TCC_EA_WRREQ_DRAM_CREDIT_STALL[4] TCC_TOO_MANY_EA_WRREQS_STALL[4] TCC_EA_WRREQ_IO_CREDIT_STALL[5] TCC_EA_WRREQ_GMI_CREDIT_STALL[5] TCC_EA_WRREQ_DRAM_CREDIT_STALL[5] TCC_TOO_MANY_EA_WRREQS_STALL[5] TCC_EA_WRREQ_IO_CREDIT_STALL[6] TCC_EA_WRREQ_GMI_CREDIT_STALL[6] TCC_EA_WRREQ_DRAM_CREDIT_STALL[6] TCC_TOO_MANY_EA_WRREQS_STALL[6] TCC_EA_WRREQ_IO_CREDIT_STALL[7] TCC_EA_WRREQ_GMI_CREDIT_STALL[7] TCC_EA_WRREQ_DRAM_CREDIT_STALL[7] TCC_TOO_MANY_EA_WRREQS_STALL[7] TCC_EA_WRREQ_IO_CREDIT_STALL[8] TCC_EA_WRREQ_GMI_CREDIT_STALL[8] TCC_EA_WRREQ_DRAM_CREDIT_STALL[8] TCC_TOO_MANY_EA_WRREQS_STALL[8] TCC_EA_WRREQ_IO_CREDIT_STALL[9] TCC_EA_WRREQ_GMI_CREDIT_STALL[9] TCC_EA_WRREQ_DRAM_CREDIT_STALL[9] TCC_TOO_MANY_EA_WRREQS_STALL[9] TCC_EA_WRREQ_IO_CREDIT_STALL[10] TCC_EA_WRREQ_GMI_CREDIT_STALL[10] TCC_EA_WRREQ_DRAM_CREDIT_STALL[10] TCC_TOO_MANY_EA_WRREQS_STALL[10] TCC_EA_WRREQ_IO_CREDIT_STALL[11] TCC_EA_WRREQ_GMI_CREDIT_STALL[11] TCC_EA_WRREQ_DRAM_CREDIT_STALL[11] TCC_TOO_MANY_EA_WRREQS_STALL[11] TCC_EA_WRREQ_IO_CREDIT_STALL[12] TCC_EA_WRREQ_GMI_CREDIT_STALL[12] TCC_EA_WRREQ_DRAM_CREDIT_STALL[12] TCC_TOO_MANY_EA_WRREQS_STALL[12] TCC_EA_WRREQ_IO_CREDIT_STALL[13] TCC_EA_WRREQ_GMI_CREDIT_STALL[13] TCC_EA_WRREQ_DRAM_CREDIT_STALL[13] TCC_TOO_MANY_EA_WRREQS_STALL[13] TCC_EA_WRREQ_IO_CREDIT_STALL[14] TCC_EA_WRREQ_GMI_CREDIT_STALL[14] TCC_EA_WRREQ_DRAM_CREDIT_STALL[14] TCC_TOO_MANY_EA_WRREQS_STALL[14] TCC_EA_WRREQ_IO_CREDIT_STALL[15] TCC_EA_WRREQ_GMI_CREDIT_STALL[15] TCC_EA_WRREQ_DRAM_CREDIT_STALL[15] TCC_TOO_MANY_EA_WRREQS_STALL[15] + +gpu: +kernel: +range: + diff --git a/src/perfmon_pub/vega10/pmc_tcc_perf.txt b/src/perfmon_pub/vega10/pmc_tcc_perf.txt new file mode 100644 index 0000000000..dd71aba6aa --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_tcc_perf.txt @@ -0,0 +1,19 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_WAVES + +pmc: TCC_CYCLE_sum TCC_BUSY_sum TCC_PROBE_sum TCC_PROBE_ALL_sum +pmc: TCC_NC_REQ_sum TCC_UC_REQ_sum TCC_CC_REQ_sum +pmc: TCC_REQ_sum TCC_STREAMING_REQ_sum TCC_HIT_sum TCC_MISS_sum +pmc: TCC_READ_sum TCC_WRITE_sum TCC_ATOMIC_sum TCC_WRITEBACK_sum +pmc: TCC_EA_WRREQ_sum TCC_EA_WRREQ_64B_sum TCC_EA_WR_UNCACHED_32B_sum +pmc: TCC_EA_WRREQ_STALL_sum TCC_EA_WRREQ_IO_CREDIT_STALL_sum TCC_EA_WRREQ_GMI_CREDIT_STALL_sum TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum +pmc: TCC_TOO_MANY_EA_WRREQS_STALL_sum TCC_EA_ATOMIC_sum TCC_EA_RDREQ_sum TCC_EA_RDREQ_32B_sum +pmc: TCC_EA_RD_UNCACHED_32B_sum TCC_EA_RDREQ_IO_CREDIT_STALL_sum TCC_EA_RDREQ_GMI_CREDIT_STALL_sum TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum +pmc: TCC_NORMAL_WRITEBACK_sum TCC_ALL_TC_OP_WB_WRITEBACK_sum TCC_NORMAL_EVICT_sum +pmc: TCC_ALL_TC_OP_INV_EVICT_sum TCC_EA_RDREQ_DRAM_sum TCC_EA_WRREQ_DRAM_sum +pmc: TCC_EA_RDREQ_LEVEL_sum TCC_EA_WRREQ_LEVEL_sum TCC_EA_ATOMIC_LEVEL_sum + +gpu: +kernel: + +range: + diff --git a/src/perfmon_pub/vega10/pmc_tcp_perf.txt b/src/perfmon_pub/vega10/pmc_tcp_perf.txt new file mode 100644 index 0000000000..8b20dfc3a6 --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_tcp_perf.txt @@ -0,0 +1,18 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES + +pmc: TCP_GATE_EN1_sum TCP_GATE_EN2_sum TCP_TD_TCP_STALL_CYCLES_sum TCP_TCR_TCP_STALL_CYCLES_sum +pmc: TCP_READ_TAGCONFLICT_STALL_CYCLES_sum TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum TCP_TA_TCP_STATE_READ_sum +pmc: TCP_VOLATILE_sum TCP_TOTAL_ACCESSES_sum TCP_TOTAL_READ_sum TCP_TOTAL_WRITE_sum +pmc: TCP_TOTAL_ATOMIC_WITH_RET_sum TCP_TOTAL_ATOMIC_WITHOUT_RET_sum TCP_TOTAL_WRITEBACK_INVALIDATES_sum TCP_TOTAL_CACHE_ACCESSES_sum +pmc: TCP_UTCL1_TRANSLATION_MISS_sum TCP_UTCL1_TRANSLATION_HIT_sum TCP_UTCL1_PERMISSION_MISS_sum TCP_UTCL1_REQUEST_sum +pmc: TCP_TCP_LATENCY_sum TCP_TCC_READ_REQ_LATENCY_sum TCP_TCC_WRITE_REQ_LATENCY_sum TCP_TCC_READ_REQ_sum +pmc: TCP_TCC_WRITE_REQ_sum TCP_TCC_ATOMIC_WITH_RET_REQ_sum TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum TCP_TCC_NC_READ_REQ_sum +pmc: TCP_TCC_NC_WRITE_REQ_sum TCP_TCC_NC_ATOMIC_REQ_sum TCP_TCC_UC_READ_REQ_sum TCP_TCC_UC_WRITE_REQ_sum +pmc: TCP_TCC_UC_ATOMIC_REQ_sum TCP_TCC_CC_READ_REQ_sum TCP_TCC_CC_WRITE_REQ_sum TCP_TCC_CC_ATOMIC_REQ_sum +pmc: TCP_PENDING_STALL_CYCLES_sum + +#pmc: TCA_CYCLE_sum TCA_BUSY_sum + +gpu: +kernel: +range: diff --git a/src/perfmon_pub/vega10/pmc_td_perf.txt b/src/perfmon_pub/vega10/pmc_td_perf.txt new file mode 100644 index 0000000000..97c1f37efe --- /dev/null +++ b/src/perfmon_pub/vega10/pmc_td_perf.txt @@ -0,0 +1,12 @@ +pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES + +pmc: TD_TD_BUSY_sum TD_TC_STALL_sum +pmc: TD_COALESCABLE_WAVEFRONT_sum TD_LOAD_WAVEFRONT_sum +pmc: TD_ATOMIC_WAVEFRONT_sum TD_STORE_WAVEFRONT_sum + + + +gpu: +range: +kernel: + diff --git a/src/utils/perfagg.py b/src/utils/perfagg.py index 6c7eb72b5a..07cd4a59bf 100755 --- a/src/utils/perfagg.py +++ b/src/utils/perfagg.py @@ -29,6 +29,19 @@ prog = "omniperf" # Per IP block max number of simulutaneous counters # GFX IP Blocks perfmon_config = { + "vega10": { + "SQ": 8, + "TA": 2, + "TD": 2, + "TCP": 4, + "TCC": 4, + "CPC": 2, + "CPF": 2, + "SPI": 2, + "GRBM": 2, + "GDS": 4, + "TCC_channels": 16, + }, "mi50": { "SQ": 8, "TA": 2, diff --git a/src/utils/plot_roofline.py b/src/utils/plot_roofline.py index 496c5bffae..67247b5c09 100644 --- a/src/utils/plot_roofline.py +++ b/src/utils/plot_roofline.py @@ -28,6 +28,8 @@ import sys from pathlib import Path import numpy +import matplotlib +matplotlib.use('Agg') import matplotlib.pyplot as plt from matplotlib.pyplot import get, text from math import log, pi, sqrt diff --git a/src/utils/specs.py b/src/utils/specs.py index 2ae31481a5..2d315eff94 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -31,7 +31,7 @@ from dataclasses import dataclass from pathlib import Path as path from textwrap import dedent -gpu_list = {"gfx906", "gfx908", "gfx90a"} +gpu_list = {"gfx906", "gfx908", "gfx90a","gfx900"} @dataclass From 9e12acf79c805a1c8bf25df899e38bb1314e49ed Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Wed, 7 Dec 2022 23:45:39 +0000 Subject: [PATCH 42/90] Got kernel summaries in rocscope integrated Signed-off-by: coleramos425 --- src/omniperf | 25 +++++++++++++++++++++++++ src/parser.py | 11 +++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/omniperf b/src/omniperf index 9032778ddc..b88416dfbf 100755 --- a/src/omniperf +++ b/src/omniperf @@ -357,6 +357,31 @@ def omniperf_profile(args): else: print("rocscope must be in the PATH") sys.exit(1) + elif not args.summaries == None and args.summaries == True: + print("creating kernel summaries") + #look for whether workload_dir exists - create if not + try: + os.makedirs(workload_dir, exist_ok = True) + except Exception as e: + print("Unable to create workload directory: ", workload_dir) + print(e) + sys.exit(1) + + result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + if result.returncode == 0: + rs_cmd = [result.stdout.decode('ascii').strip(), + "summary", + "-p", args.path, + "-n", args.name, + "--", args.remaining] + print(rs_cmd) + result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if result.returncode != 0: + print(result.stderr.decode('ascii')) + else: + print("rocscope must be in the PATH") + sys.exit(1) + else: for fname in glob.glob(workload_dir + "/perfmon/*.txt"): # Kernel filtering (in-place replacement) diff --git a/src/parser.py b/src/parser.py index ac62fd2995..f71b6258d3 100644 --- a/src/parser.py +++ b/src/parser.py @@ -125,6 +125,17 @@ def parse(my_parser): dest="lucky", help="\t\t\tProfile only the most time consuming kernels.", ) + + profile_group.add_argument( + "-s", + "--kernel-summaries", + required=False, + default=False, + action="store_true", + dest="summaries", + help="\t\t\tCreate kernel summaries.", + ) + profile_group.add_argument( "-b", "--ipblocks", From 4075a05b9402f9ab7c158f5e0ed1a5c2e9d9137c Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Thu, 8 Dec 2022 09:45:35 -0600 Subject: [PATCH 43/90] Added some debugging information related to corrupt counters from rocscope Signed-off-by: coleramos425 --- src/omniperf_cli/utils/parser.py | 6 ++++++ src/perfmon_pub/metrics.xml | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/omniperf_cli/utils/parser.py b/src/omniperf_cli/utils/parser.py index de416ac174..f3635007f8 100644 --- a/src/omniperf_cli/utils/parser.py +++ b/src/omniperf_cli/utils/parser.py @@ -485,6 +485,12 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug): # NB: assume all build in vars from pmc_perf.csv for now s = build_eval_string(value, schema.pmc_perf_file_prefix) try: + print(s) + print("ammolite__maxWavesPerCU: ", ammolite__maxWavesPerCU) + print("ammolite__numCU: ", ammolite__numCU); + print(raw_pmc_df.get('pmc_perf').get("GRBM_GUI_ACTIVE")) + #if raw_pmc_df.get('pmc_perf').get("GRBM_GUI_ACTIVE") == 0: + # raw_cmd_df.get('pmc_perf').set("GRBM_GUI_ACTIVE", 0) ammolite__build_in[key] = eval(compile(s, "", "eval")) except TypeError: ammolite__build_in[key] = None diff --git a/src/perfmon_pub/metrics.xml b/src/perfmon_pub/metrics.xml index f22b2533b3..cddbad9fb5 100644 --- a/src/perfmon_pub/metrics.xml +++ b/src/perfmon_pub/metrics.xml @@ -23,7 +23,7 @@ - + @@ -198,7 +198,7 @@ # # - + # EA1 From a09c720fe00fadd2be58f3776083ec2582c4f52d Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Tue, 13 Dec 2022 11:29:45 +0000 Subject: [PATCH 44/90] Added command-line argument to use rocscope instead of rocprof Signed-off-by: coleramos425 --- src/parser.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/parser.py b/src/parser.py index f71b6258d3..86f5e0c216 100644 --- a/src/parser.py +++ b/src/parser.py @@ -126,6 +126,16 @@ def parse(my_parser): help="\t\t\tProfile only the most time consuming kernels.", ) + profile_group.add_argument( + "-r", + "--use-rocscope", + required=False, + default=False, + action="store_true", + dest="use_rocscope", + help="\t\t\tUse rocscope for profiling", + ) + profile_group.add_argument( "-s", "--kernel-summaries", From 6e93d5a48a1fac30714dbef6b6676b9abe2bcdf6 Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Mon, 12 Dec 2022 12:16:53 -0600 Subject: [PATCH 45/90] Removed debugging cruft Signed-off-by: coleramos425 --- src/omniperf_cli/utils/parser.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/omniperf_cli/utils/parser.py b/src/omniperf_cli/utils/parser.py index f3635007f8..de416ac174 100644 --- a/src/omniperf_cli/utils/parser.py +++ b/src/omniperf_cli/utils/parser.py @@ -485,12 +485,6 @@ def eval_metric(dfs, dfs_type, sys_info, soc_spec, raw_pmc_df, debug): # NB: assume all build in vars from pmc_perf.csv for now s = build_eval_string(value, schema.pmc_perf_file_prefix) try: - print(s) - print("ammolite__maxWavesPerCU: ", ammolite__maxWavesPerCU) - print("ammolite__numCU: ", ammolite__numCU); - print(raw_pmc_df.get('pmc_perf').get("GRBM_GUI_ACTIVE")) - #if raw_pmc_df.get('pmc_perf').get("GRBM_GUI_ACTIVE") == 0: - # raw_cmd_df.get('pmc_perf').set("GRBM_GUI_ACTIVE", 0) ammolite__build_in[key] = eval(compile(s, "", "eval")) except TypeError: ammolite__build_in[key] = None From 46013280163cf1c337a569d37e2b917cd8224fcf Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Thu, 15 Dec 2022 15:11:54 +0000 Subject: [PATCH 46/90] profile parameters are now contingent on whether rocscope is in the PATH Signed-off-by: coleramos425 --- src/parser.py | 65 ++++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/src/parser.py b/src/parser.py index 86f5e0c216..7a2c8b53ff 100644 --- a/src/parser.py +++ b/src/parser.py @@ -22,6 +22,8 @@ import os import argparse +import subprocess + from common import ( OMNIPERF_HOME, PROG, @@ -116,35 +118,40 @@ def parse(my_parser): default=None, help="\t\t\tKernel filtering.", ) - profile_group.add_argument( - "-l", - "--i-feel-lucky", - required=False, - default=False, - action="store_true", - dest="lucky", - help="\t\t\tProfile only the most time consuming kernels.", - ) - - profile_group.add_argument( - "-r", - "--use-rocscope", - required=False, - default=False, - action="store_true", - dest="use_rocscope", - help="\t\t\tUse rocscope for profiling", - ) - - profile_group.add_argument( - "-s", - "--kernel-summaries", - required=False, - default=False, - action="store_true", - dest="summaries", - help="\t\t\tCreate kernel summaries.", - ) + + result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + if result.returncode == 0: + profile_group.add_argument( + "-l", + "--i-feel-lucky", + required=False, + default=False, + action="store_true", + dest="lucky", + help="\t\t\tProfile only the most time consuming kernels.", + ) + profile_group.add_argument( + "-r", + "--use-rocscope", + required=False, + default=False, + action="store_true", + dest="use_rocscope", + help="\t\t\tUse rocscope for profiling", + ) + profile_group.add_argument( + "-s", + "--kernel-summaries", + required=False, + default=False, + action="store_true", + dest="summaries", + help="\t\t\tCreate kernel summaries.", + ) + else: + profile_group.add_argument("--i-feel-lucky", default=False, dest="lucky", help=argparse.SUPPRESS) + profile_group.add_argument("--use-rocscope", default=False, dest="use_rocscope", help=argparse.SUPPRESS) + profile_group.add_argument("--kernel-summaries", default=False, dest="summaries", help=argparse.SUPPRESS) profile_group.add_argument( "-b", From 5d4de98d182ccb51b5c992851a05a1a37a0c34c5 Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Mon, 16 Jan 2023 09:46:47 -0600 Subject: [PATCH 47/90] Supporting use of rocscope as alternative profiler Signed-off-by: coleramos425 --- src/omniperf | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/omniperf b/src/omniperf index b88416dfbf..fd5066d325 100755 --- a/src/omniperf +++ b/src/omniperf @@ -275,14 +275,29 @@ def characterize_app(path, cmd, verbose): # Workload profiling for fname in glob.glob(workload_dir + "/perfmon/*.txt"): print(fname) - run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose) + run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose, False) ################################################ # Profiling Helpers ################################################ +def run_rocscope(args): + # profile the app + if args.use_rocscope == True: + result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + if result.returncode == 0: + rs_cmd = [result.stdout.decode('ascii').strip(), + "metrics", + "-p", args.path, + "-n", args.name, + "--", args.remaining] + print(rs_cmd) + result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if result.returncode != 0: + print(result.stderr.decode('ascii')) -def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): + +def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose, use_rocscope): global rocprof_cmd fbase = os.path.splitext(os.path.basename(fname))[0] @@ -290,7 +305,6 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): if verbose: print("pmc file:", os.path.basename(fname)) - # profile the app subprocess.run( [ rocprof_cmd, @@ -407,7 +421,7 @@ def omniperf_profile(args): fname, ] ) - run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose) + run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose, args.use_rocscope) From 60eca50d0289bc1ffe34eda11442c4be370aa56e Mon Sep 17 00:00:00 2001 From: Keith Lowery Date: Tue, 17 Jan 2023 05:06:56 -0600 Subject: [PATCH 48/90] Implemented the --use-rocscope command-line argument Signed-off-by: coleramos425 --- src/omniperf | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/omniperf b/src/omniperf index fd5066d325..b592be740e 100755 --- a/src/omniperf +++ b/src/omniperf @@ -275,13 +275,13 @@ def characterize_app(path, cmd, verbose): # Workload profiling for fname in glob.glob(workload_dir + "/perfmon/*.txt"): print(fname) - run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose, False) + run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose) ################################################ # Profiling Helpers ################################################ -def run_rocscope(args): +def run_rocscope(args, fname): # profile the app if args.use_rocscope == True: result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) @@ -290,14 +290,16 @@ def run_rocscope(args): "metrics", "-p", args.path, "-n", args.name, + "-t", fname, "--", args.remaining] print(rs_cmd) result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: print(result.stderr.decode('ascii')) + sys.exit(1) -def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose, use_rocscope): +def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): global rocprof_cmd fbase = os.path.splitext(os.path.basename(fname))[0] @@ -421,7 +423,10 @@ def omniperf_profile(args): fname, ] ) - run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose, args.use_rocscope) + if args.use_rocscope == True: + run_rocscope(args, fname) + else: + run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose) From 00c9ff9493094663619da2aacc5bf2a0b1adfbbc Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 23 Jan 2023 15:28:35 -0600 Subject: [PATCH 49/90] Merge branch 'dev' into lucky Signed-off-by: coleramos425 --- .github/workflows/docs.yml | 56 + .../{analyze-workloads.yml => rhel-8.yml} | 27 +- .github/workflows/tarball.yml | 12 + ...{analyze-commands.yml => ubuntu-focal.yml} | 8 +- .gitignore | 1 + .zenodo.json | 24 + CHANGES | 28 + CMakeLists.txt | 48 +- README.md | 29 +- VERSION | 2 +- cmake/VERSION.sha.in | 1 + cmake/modfile.crusher.mod | 2 +- cmake/modfile.thera.mod | 2 +- dashboards/Omniperf_v1.0.5_pub.json | 13331 ++++++++++++++++ dashboards/Omniperf_v1.0.7_pub.json | 13328 +++++++++++++++ docker-compose.yml | 4 +- grafana_plugins/svg_plugin/package.json | 14 +- pyproject.toml | 2 +- requirements.txt | 4 +- sample/vcopy.cpp | 15 +- src/common.py | 57 +- src/docs/README | 6 + src/docs/analysis.md | 725 + src/docs/conf.py | 6 +- src/docs/getting_started.md | 4 +- src/docs/grafana_analyzer.md | 260 - src/docs/high_level_design.md | 2 +- src/docs/images/datasource_config.png | Bin 0 -> 48072 bytes src/docs/images/datasource_settings.png | Bin 0 -> 115880 bytes src/docs/images/grafana_welcome.png | Bin 0 -> 277970 bytes src/docs/images/import_dashboard.png | Bin 0 -> 58539 bytes src/docs/images/standalone_gui.png | Bin 0 -> 259271 bytes src/docs/index.md | 4 +- src/docs/installation.md | 45 +- .../{performance_analysis.md => profiling.md} | 89 +- src/docs/update-docs.sh | 29 - src/omniperf | 125 +- .../README.md | 2 +- .../assets/default.css | 0 .../assets/font-awesome/css/font-awesome.css | 0 .../font-awesome/css/font-awesome.min.css | 0 .../assets/font-awesome/fonts/FontAwesome.otf | Bin .../fonts/fontawesome-webfont.eot | Bin .../fonts/fontawesome-webfont.svg | 0 .../fonts/fontawesome-webfont.ttf | Bin .../fonts/fontawesome-webfont.woff | Bin .../font-awesome/less/bordered-pulled.less | 0 .../assets/font-awesome/less/core.less | 0 .../assets/font-awesome/less/fixed-width.less | 0 .../font-awesome/less/font-awesome.less | 0 .../assets/font-awesome/less/icons.less | 0 .../assets/font-awesome/less/larger.less | 0 .../assets/font-awesome/less/list.less | 0 .../assets/font-awesome/less/mixins.less | 0 .../assets/font-awesome/less/path.less | 0 .../font-awesome/less/rotated-flipped.less | 0 .../assets/font-awesome/less/spinning.less | 0 .../assets/font-awesome/less/stacked.less | 0 .../assets/font-awesome/less/variables.less | 0 .../font-awesome/scss/_bordered-pulled.scss | 0 .../assets/font-awesome/scss/_core.scss | 0 .../font-awesome/scss/_fixed-width.scss | 0 .../assets/font-awesome/scss/_icons.scss | 0 .../assets/font-awesome/scss/_larger.scss | 0 .../assets/font-awesome/scss/_list.scss | 0 .../assets/font-awesome/scss/_mixins.scss | 0 .../assets/font-awesome/scss/_path.scss | 0 .../font-awesome/scss/_rotated-flipped.scss | 0 .../assets/font-awesome/scss/_spinning.scss | 0 .../assets/font-awesome/scss/_stacked.scss | 0 .../assets/font-awesome/scss/_variables.scss | 0 .../font-awesome/scss/font-awesome.scss | 0 .../assets/fontello/css/animation.css | 0 .../assets/fontello/css/fontello-codes.css | 0 .../assets/fontello/css/fontello-embedded.css | 0 .../fontello/css/fontello-ie7-codes.css | 0 .../assets/fontello/css/fontello-ie7.css | 0 .../assets/fontello/css/fontello.css | 0 .../assets/fontello/font/fontello.eot | Bin .../assets/fontello/font/fontello.svg | 0 .../assets/fontello/font/fontello.ttf | Bin .../assets/fontello/font/fontello.woff | Bin .../assets/fonts.css | 0 .../librebaskerville-bold-webfont.eot | Bin .../librebaskerville-bold-webfont.svg | 0 .../librebaskerville-bold-webfont.ttf | Bin .../librebaskerville-bold-webfont.woff | Bin .../librebaskerville-italic-webfont.eot | Bin .../librebaskerville-italic-webfont.svg | 0 .../librebaskerville-italic-webfont.ttf | Bin .../librebaskerville-italic-webfont.woff | Bin .../librebaskerville-regular-webfont.eot | Bin .../librebaskerville-regular-webfont.svg | 0 .../librebaskerville-regular-webfont.ttf | Bin .../librebaskerville-regular-webfont.woff | Bin .../fonts/opensans/OpenSans-Bold-webfont.eot | Bin .../fonts/opensans/OpenSans-Bold-webfont.svg | 0 .../fonts/opensans/OpenSans-Bold-webfont.ttf | Bin .../fonts/opensans/OpenSans-Bold-webfont.woff | Bin .../opensans/OpenSans-BoldItalic-webfont.eot | Bin .../opensans/OpenSans-BoldItalic-webfont.svg | 0 .../opensans/OpenSans-BoldItalic-webfont.ttf | Bin .../opensans/OpenSans-BoldItalic-webfont.woff | Bin .../opensans/OpenSans-ExtraBold-webfont.eot | Bin .../opensans/OpenSans-ExtraBold-webfont.svg | 0 .../opensans/OpenSans-ExtraBold-webfont.ttf | Bin .../opensans/OpenSans-ExtraBold-webfont.woff | Bin .../OpenSans-ExtraBoldItalic-webfont.eot | Bin .../OpenSans-ExtraBoldItalic-webfont.svg | 0 .../OpenSans-ExtraBoldItalic-webfont.ttf | Bin .../OpenSans-ExtraBoldItalic-webfont.woff | Bin .../opensans/OpenSans-Italic-webfont.eot | Bin .../opensans/OpenSans-Italic-webfont.svg | 0 .../opensans/OpenSans-Italic-webfont.ttf | Bin .../opensans/OpenSans-Italic-webfont.woff | Bin .../fonts/opensans/OpenSans-Light-webfont.eot | Bin .../fonts/opensans/OpenSans-Light-webfont.svg | 0 .../fonts/opensans/OpenSans-Light-webfont.ttf | Bin .../opensans/OpenSans-Light-webfont.woff | Bin .../opensans/OpenSans-LightItalic-webfont.eot | Bin .../opensans/OpenSans-LightItalic-webfont.svg | 0 .../opensans/OpenSans-LightItalic-webfont.ttf | Bin .../OpenSans-LightItalic-webfont.woff | Bin .../opensans/OpenSans-Regular-webfont.eot | Bin .../opensans/OpenSans-Regular-webfont.svg | 0 .../opensans/OpenSans-Regular-webfont.ttf | Bin .../opensans/OpenSans-Regular-webfont.woff | Bin .../opensans/OpenSans-Semibold-webfont.eot | Bin .../opensans/OpenSans-Semibold-webfont.svg | 0 .../opensans/OpenSans-Semibold-webfont.ttf | Bin .../opensans/OpenSans-Semibold-webfont.woff | Bin .../OpenSans-SemiboldItalic-webfont.eot | Bin .../OpenSans-SemiboldItalic-webfont.svg | 0 .../OpenSans-SemiboldItalic-webfont.ttf | Bin .../OpenSans-SemiboldItalic-webfont.woff | Bin .../assets/layout.css | 14 - .../assets/magnific-popup.css | 0 .../assets/media-queries.css | 0 .../configs/gfx906/0000_top_stat.yaml | 0 .../configs/gfx906/0100_system_info.yaml | 0 .../gfx906/0200_system-speed-of-light.yaml | 0 .../gfx906/0500_command-processor.yaml | 0 .../gfx906/0600_shader-processor-input.yaml | 0 .../configs/gfx906/0700_wavefront-launch.yaml | 0 .../1000_compute-unit-instruction-mix.yaml | 0 .../1100_compute-unit-compute-pipeline.yaml | 0 .../configs/gfx906/1200_lds.yaml | 0 .../gfx906/1300_instruction-cache.yaml | 0 .../configs/gfx906/1400_constant-cache.yaml | 0 .../configs/gfx906/1500_TA_and_TD.yaml | 0 .../configs/gfx906/1600_L1_cache.yaml | 76 +- .../configs/gfx906/1700_L2_cache.yaml | 16 + .../gfx906/1800_L2_cache_per_channel.yaml | 204 +- .../configs/gfx906/1900_memory_chart.yaml | 0 .../configs/gfx906/2000_kernels.yaml | 0 .../configs/gfx908/0000_top_stat.yaml | 0 .../configs/gfx908/0100_system_info.yaml | 0 .../gfx908/0200_system-speed-of-light.yaml | 0 .../gfx908/0500_command-processor.yaml | 0 .../gfx908/0600_shader-processor-input.yaml | 0 .../configs/gfx908/0700_wavefront-launch.yaml | 0 .../1000_compute-unit-instruction-mix.yaml | 0 .../1100_compute-unit-compute-pipeline.yaml | 0 .../configs/gfx908/1200_lds.yaml | 0 .../gfx908/1300_instruction-cache.yaml | 0 .../configs/gfx908/1400_constant-cache.yaml | 0 .../configs/gfx908/1500_TA_and_TD.yaml | 0 .../configs/gfx908/1600_L1_cache.yaml | 72 +- .../configs/gfx908/1700_L2_cache.yaml | 16 + .../gfx908/1800_L2_cache_per_channel.yaml | 204 +- .../configs/gfx908/1900_memory_chart.yaml | 0 .../configs/gfx908/2000_kernels.yaml | 0 .../configs/gfx90a/0000_top_stat.yaml | 0 .../configs/gfx90a/0100_system_info.yaml | 0 .../gfx90a/0200_system-speed-of-light.yaml | 0 .../gfx90a/0500_command-processor.yaml | 0 .../gfx90a/0600_shader-processor-input.yaml | 0 .../configs/gfx90a/0700_wavefront-launch.yaml | 0 .../1000_compute-unit-instruction-mix.yaml | 10 +- .../1100_compute-unit-compute-pipeline.yaml | 0 .../configs/gfx90a/1200_lds.yaml | 0 .../gfx90a/1300_instruction-cache.yaml | 0 .../configs/gfx90a/1400_constant-cache.yaml | 0 .../configs/gfx90a/1500_TA_and_TD.yaml | 0 .../configs/gfx90a/1600_L1_cache.yaml | 72 +- .../configs/gfx90a/1700_L2_cache.yaml | 16 + .../gfx90a/1800_L2_cache_per_channel.yaml | 204 +- .../configs/gfx90a/1900_memory_chart.yaml | 0 .../configs/gfx90a/2000_kernels.yaml | 0 .../configs/panel_config_template.yaml | 0 .../convertor/mongodb/README.md | 6 +- .../convertor/mongodb/convert | 0 ..._id_159_SYSTEM-INFO.s0_original_query.json | 0 ..._110_SPEED-OF-LIGHT.s0_original_query.json | 0 ...ISPATCH-IDS-CURRENT.s0_original_query.json | 0 ...SPATCH-IDS-BASELINE.s0_original_query.json | 0 ...RNEL-TIME-HISTOGRAM.s0_original_query.json | 0 ..._id_213_TOP-KERNELS.s0_original_query.json | 0 ..._251_TOP-DISPATCHES.s0_original_query.json | 0 ...MALIZATION-NORMUNIT.s0_original_query.json | 0 ...LINE-FP32FP64-MI200.s0_original_query.json | 0 ...LINE-FP16INT8-MI200.s0_original_query.json | 0 ...D-PROCESSOR-FETCHER.s0_original_query.json | 0 ...D-PROCESSOR-COMPUTE.s0_original_query.json | 0 ...18_id_106_SPI-STATS.s0_original_query.json | 0 ...RESOURCE-ALLOCATION.s0_original_query.json | 0 ...EFRONT-LAUNCH-STATS.s0_original_query.json | 0 ...FRONT-RUNTIME-STATS.s0_original_query.json | 0 ..._12_INSTRUCTION-MIX.s0_original_query.json | 0 ...RITHMETIC-INSTR-MIX.s0_original_query.json | 0 ..._275_VMEM-INSTR-MIX.s0_original_query.json | 0 ...RITHMETIC-INSTR-MIX.s0_original_query.json | 0 ...HT-COMPUTE-PIPELINE.s0_original_query.json | 0 ..._257_PIPELINE-STATS.s0_original_query.json | 0 ...ITHMETIC-OPERATIONS.s0_original_query.json | 0 ...55_MEMORY-LATENCIES.s0_original_query.json | 0 ..._SPEED-OF-LIGHT-LDS.s0_original_query.json | 0 ...35_id_100_LDS-STATS.s0_original_query.json | 0 ...T-INSTRUCTION-CACHE.s0_original_query.json | 0 ...TION-CACHE-ACCESSES.s0_original_query.json | 0 ...HT-SCALAR-L1D-CACHE.s0_original_query.json | 0 ...-L1D-CACHE-ACCESSES.s0_original_query.json | 0 ...-CACHE-L2-INTERFACE.s0_original_query.json | 0 .../44_id_132_TA.s0_original_query.json | 0 .../45_id_134_TD.s0_original_query.json | 0 ...HT-VECTOR-L1D-CACHE.s0_original_query.json | 0 ...OR-L1D-CACHE-STALLS.s0_original_query.json | 0 ...-L1D-CACHE-ACCESSES.s0_original_query.json | 0 ...CTIONS-REQ-NORMUNIT.s0_original_query.json | 0 ...1D-ADDR-TRANSLATION.s0_original_query.json | 0 ...D-OF-LIGHT-L2-CACHE.s0_original_query.json | 0 ...FABRIC-TRANSACTIONS.s0_original_query.json | 0 ...8_L2-CACHE-ACCESSES.s0_original_query.json | 0 ...LLS-CYCLES-NORMUNIT.s0_original_query.json | 0 ...CHANNEL-0-15-CYCLES.s0_original_query.json | 0 ...HANNEL-16-31-CYCLES.s0_original_query.json | 0 ..._id_159_SYSTEM-INFO.s0_original_query.json | 0 ..._110_SPEED-OF-LIGHT.s0_original_query.json | 0 ...ISPATCH-IDS-CURRENT.s0_original_query.json | 0 ...SPATCH-IDS-BASELINE.s0_original_query.json | 0 ...RNEL-TIME-HISTOGRAM.s0_original_query.json | 0 ..._id_213_TOP-KERNELS.s0_original_query.json | 0 ..._251_TOP-DISPATCHES.s0_original_query.json | 0 ...MALIZATION-NORMUNIT.s0_original_query.json | 0 ...LINE-FP32FP64-MI200.s0_original_query.json | 0 ...LINE-FP16INT8-MI200.s0_original_query.json | 0 ...D-PROCESSOR-FETCHER.s0_original_query.json | 0 ...D-PROCESSOR-COMPUTE.s0_original_query.json | 0 ...18_id_106_SPI-STATS.s0_original_query.json | 0 ...RESOURCE-ALLOCATION.s0_original_query.json | 0 ...EFRONT-LAUNCH-STATS.s0_original_query.json | 0 ...FRONT-RUNTIME-STATS.s0_original_query.json | 0 ..._12_INSTRUCTION-MIX.s0_original_query.json | 0 ...RITHMETIC-INSTR-MIX.s0_original_query.json | 0 ..._275_VMEM-INSTR-MIX.s0_original_query.json | 0 ...RITHMETIC-INSTR-MIX.s0_original_query.json | 0 ...HT-COMPUTE-PIPELINE.s0_original_query.json | 0 ..._257_PIPELINE-STATS.s0_original_query.json | 0 ...ITHMETIC-OPERATIONS.s0_original_query.json | 0 ...55_MEMORY-LATENCIES.s0_original_query.json | 0 ..._SPEED-OF-LIGHT-LDS.s0_original_query.json | 0 ...35_id_100_LDS-STATS.s0_original_query.json | 0 ...T-INSTRUCTION-CACHE.s0_original_query.json | 0 ...TION-CACHE-ACCESSES.s0_original_query.json | 0 ...HT-SCALAR-L1D-CACHE.s0_original_query.json | 0 ...-L1D-CACHE-ACCESSES.s0_original_query.json | 0 ...-CACHE-L2-INTERFACE.s0_original_query.json | 0 .../44_id_132_TA.s0_original_query.json | 0 .../45_id_134_TD.s0_original_query.json | 0 ...HT-VECTOR-L1D-CACHE.s0_original_query.json | 0 ...OR-L1D-CACHE-STALLS.s0_original_query.json | 0 ...-L1D-CACHE-ACCESSES.s0_original_query.json | 0 ...CTIONS-REQ-NORMUNIT.s0_original_query.json | 0 ...1D-ADDR-TRANSLATION.s0_original_query.json | 0 ...D-OF-LIGHT-L2-CACHE.s0_original_query.json | 0 ...FABRIC-TRANSACTIONS.s0_original_query.json | 0 ...8_L2-CACHE-ACCESSES.s0_original_query.json | 0 ...LLS-CYCLES-NORMUNIT.s0_original_query.json | 0 ...CHANNEL-0-15-CYCLES.s0_original_query.json | 0 ...HANNEL-16-31-CYCLES.s0_original_query.json | 0 .../convertor/mongodb/sample.json | 0 .../convertor/sql/1001_TA.config | 0 .../convertor/sql/1002_TD.config | 0 .../sql/100_System-speed-of-light.config | 0 .../convertor/sql/401_CPF.config | 0 .../convertor/sql/402_CPC.config | 0 .../convertor/sql/501_SPI-Stats.config | 0 .../sql/502_SPI-Resource-Allocation.config | 0 .../convertor/sql/801_LDS.config | 0 .../convertor/sql/901_L1I_cache.config | 0 .../convertor/sql/902_L1K_cache.config | 0 .../convertor/sql/903_L1K_TC_Interface.config | 0 .../convertor/sql/convertor.py | 0 .../convertor/sql/convertor2.py | 0 .../customized/fft/panel_000_top_stat.yaml | 0 .../fft/panel_100_system-speed-of-light.yaml | 0 .../doc/baseline_comparison.png | Bin .../doc/classes.png | Bin .../doc/main_flow.png | Bin .../omniperf_analyze.py} | 207 +- .../tests/unit/ast_parser_tester.py | 0 .../tests/unit/config/100_if_else.yaml | 0 .../tests/unit/config/100_more_cases.yaml | 0 ...build_in_variables.s4_converted_table.yaml | 0 .../tests/unit/config/expr_format_tester.py | 0 .../utils/file_io.py | 8 +- .../utils/gui.py | 222 +- .../utils/gui_components/header.py | 11 +- .../utils/gui_components/memchart.py | 0 .../utils/gui_components/roofline.py | 6 +- .../utils/parser.py | 26 +- .../utils/roofline_calc.py | 48 +- .../utils/schema.py | 36 +- .../utils/tty.py | 25 +- src/omniperf_cli/perfmon/gfx908_metrics.xml | 5731 ------- src/omniperf_cli/perfmon/gfx90a_metrics.xml | 56 - src/omniperf_cli/perfmon/metrics.xml | 13 - src/parser.py | 40 +- src/perfmon_pub/gfx900_metrics.xml | 5161 ------ src/perfmon_pub/gfx906_metrics.xml | 5248 ------ src/perfmon_pub/gfx908_metrics.xml | 5731 ------- src/perfmon_pub/gfx90a_metrics.xml | 5587 ------- src/perfmon_pub/gfx9_metrics.xml | 5161 ------ src/perfmon_pub/metrics.xml | 771 - src/perfmon_pub/mi100/pmc_ta_perf.txt | 18 +- src/perfmon_pub/mi200/pmc_ta_perf.txt | 16 +- src/perfmon_pub/mi50/pmc_ta_perf.txt | 18 +- src/utils/csv_converter.py | 8 +- src/utils/plot_roofline.py | 39 +- src/utils/specs.py | 23 + tests/generate_test_analyze_workloads.py | 4 +- tests/test_import_workloads.py | 824 +- utils/build.sh | 6 +- 333 files changed, 29217 insertions(+), 35029 deletions(-) create mode 100644 .github/workflows/docs.yml rename .github/workflows/{analyze-workloads.yml => rhel-8.yml} (69%) rename .github/workflows/{analyze-commands.yml => ubuntu-focal.yml} (88%) create mode 100644 .zenodo.json create mode 100644 CHANGES create mode 100644 cmake/VERSION.sha.in create mode 100644 dashboards/Omniperf_v1.0.5_pub.json create mode 100644 dashboards/Omniperf_v1.0.7_pub.json create mode 100644 src/docs/README create mode 100644 src/docs/analysis.md delete mode 100644 src/docs/grafana_analyzer.md create mode 100644 src/docs/images/datasource_config.png create mode 100644 src/docs/images/datasource_settings.png create mode 100644 src/docs/images/grafana_welcome.png create mode 100644 src/docs/images/import_dashboard.png create mode 100644 src/docs/images/standalone_gui.png rename src/docs/{performance_analysis.md => profiling.md} (68%) delete mode 100755 src/docs/update-docs.sh rename src/{omniperf_cli => omniperf_analyze}/README.md (93%) rename src/{omniperf_cli => omniperf_analyze}/assets/default.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/css/font-awesome.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/css/font-awesome.min.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/fonts/FontAwesome.otf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/fonts/fontawesome-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/fonts/fontawesome-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/fonts/fontawesome-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/fonts/fontawesome-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/bordered-pulled.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/core.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/fixed-width.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/font-awesome.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/icons.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/larger.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/list.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/mixins.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/path.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/rotated-flipped.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/spinning.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/stacked.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/less/variables.less (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_bordered-pulled.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_core.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_fixed-width.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_icons.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_larger.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_list.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_mixins.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_path.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_rotated-flipped.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_spinning.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_stacked.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/_variables.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/font-awesome/scss/font-awesome.scss (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/css/animation.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/css/fontello-codes.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/css/fontello-embedded.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/css/fontello-ie7-codes.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/css/fontello-ie7.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/css/fontello.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/font/fontello.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/font/fontello.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/font/fontello.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fontello/font/fontello.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Bold-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Bold-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Bold-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Bold-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Italic-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Italic-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Italic-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Italic-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Light-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Light-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Light-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Light-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Regular-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Regular-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Regular-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Regular-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Semibold-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Semibold-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-Semibold-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/layout.css (95%) rename src/{omniperf_cli => omniperf_analyze}/assets/magnific-popup.css (100%) rename src/{omniperf_cli => omniperf_analyze}/assets/media-queries.css (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/0000_top_stat.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/0100_system_info.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/0200_system-speed-of-light.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/0500_command-processor.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/0600_shader-processor-input.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/0700_wavefront-launch.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1000_compute-unit-instruction-mix.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1100_compute-unit-compute-pipeline.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1200_lds.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1300_instruction-cache.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1400_constant-cache.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1500_TA_and_TD.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1600_L1_cache.yaml (85%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1700_L2_cache.yaml (96%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1800_L2_cache_per_channel.yaml (86%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/1900_memory_chart.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx906/2000_kernels.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/0000_top_stat.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/0100_system_info.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/0200_system-speed-of-light.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/0500_command-processor.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/0600_shader-processor-input.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/0700_wavefront-launch.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1000_compute-unit-instruction-mix.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1100_compute-unit-compute-pipeline.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1200_lds.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1300_instruction-cache.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1400_constant-cache.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1500_TA_and_TD.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1600_L1_cache.yaml (85%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1700_L2_cache.yaml (96%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1800_L2_cache_per_channel.yaml (89%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/1900_memory_chart.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx908/2000_kernels.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/0000_top_stat.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/0100_system_info.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/0200_system-speed-of-light.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/0500_command-processor.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/0600_shader-processor-input.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/0700_wavefront-launch.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1000_compute-unit-instruction-mix.yaml (94%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1100_compute-unit-compute-pipeline.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1200_lds.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1300_instruction-cache.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1400_constant-cache.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1500_TA_and_TD.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1600_L1_cache.yaml (85%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1700_L2_cache.yaml (96%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1800_L2_cache_per_channel.yaml (88%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/1900_memory_chart.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/gfx90a/2000_kernels.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/configs/panel_config_template.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/README.md (76%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/convert (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/00_id_159_SYSTEM-INFO.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/07_id_213_TOP-KERNELS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/08_id_251_TOP-DISPATCHES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/18_id_106_SPI-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/30_id_257_PIPELINE-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/35_id_100_LDS-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/44_id_132_TA.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/45_id_134_TD.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/modified_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/00_id_159_SYSTEM-INFO.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/07_id_213_TOP-KERNELS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/08_id_251_TOP-DISPATCHES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/18_id_106_SPI-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/30_id_257_PIPELINE-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/35_id_100_LDS-STATS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/44_id_132_TA.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/45_id_134_TD.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/original_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/mongodb/sample.json (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/1001_TA.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/1002_TD.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/100_System-speed-of-light.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/401_CPF.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/402_CPC.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/501_SPI-Stats.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/502_SPI-Resource-Allocation.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/801_LDS.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/901_L1I_cache.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/902_L1K_cache.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/903_L1K_TC_Interface.config (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/convertor.py (100%) rename src/{omniperf_cli => omniperf_analyze}/convertor/sql/convertor2.py (100%) rename src/{omniperf_cli => omniperf_analyze}/customized/fft/panel_000_top_stat.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/customized/fft/panel_100_system-speed-of-light.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/doc/baseline_comparison.png (100%) rename src/{omniperf_cli => omniperf_analyze}/doc/classes.png (100%) rename src/{omniperf_cli => omniperf_analyze}/doc/main_flow.png (100%) rename src/{omniperf_cli/omniperf_cli.py => omniperf_analyze/omniperf_analyze.py} (60%) rename src/{omniperf_cli => omniperf_analyze}/tests/unit/ast_parser_tester.py (100%) rename src/{omniperf_cli => omniperf_analyze}/tests/unit/config/100_if_else.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/tests/unit/config/100_more_cases.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/tests/unit/config/build-in/00_id_00_build_in_variables.s4_converted_table.yaml (100%) rename src/{omniperf_cli => omniperf_analyze}/tests/unit/config/expr_format_tester.py (100%) rename src/{omniperf_cli => omniperf_analyze}/utils/file_io.py (98%) rename src/{omniperf_cli => omniperf_analyze}/utils/gui.py (66%) rename src/{omniperf_cli => omniperf_analyze}/utils/gui_components/header.py (97%) rename src/{omniperf_cli => omniperf_analyze}/utils/gui_components/memchart.py (100%) rename src/{omniperf_cli => omniperf_analyze}/utils/gui_components/roofline.py (98%) rename src/{omniperf_cli => omniperf_analyze}/utils/parser.py (98%) rename src/{omniperf_cli => omniperf_analyze}/utils/roofline_calc.py (94%) rename src/{omniperf_cli => omniperf_analyze}/utils/schema.py (82%) rename src/{omniperf_cli => omniperf_analyze}/utils/tty.py (90%) delete mode 100644 src/omniperf_cli/perfmon/gfx908_metrics.xml delete mode 100644 src/omniperf_cli/perfmon/gfx90a_metrics.xml delete mode 100644 src/omniperf_cli/perfmon/metrics.xml delete mode 100644 src/perfmon_pub/gfx900_metrics.xml delete mode 100644 src/perfmon_pub/gfx906_metrics.xml delete mode 100644 src/perfmon_pub/gfx908_metrics.xml delete mode 100644 src/perfmon_pub/gfx90a_metrics.xml delete mode 100644 src/perfmon_pub/gfx9_metrics.xml delete mode 100644 src/perfmon_pub/metrics.xml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000000..5d7789692c --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: Documentation + +on: + push: + branches: ["main"] + paths: + - 'src/docs' + - '.github/workflows/docs.yml' + - 'VERSION' + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Build job + build: + runs-on: ubuntu-latest + container: + image: sphinxdoc/sphinx + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Additional python packages + run: pip3 install recommonmark myst_parser sphinx_rtd_theme + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Build html + run: | + cd src/docs + make html + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ./src/docs/_build/html + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 + diff --git a/.github/workflows/analyze-workloads.yml b/.github/workflows/rhel-8.yml similarity index 69% rename from .github/workflows/analyze-workloads.yml rename to .github/workflows/rhel-8.yml index ef38abfdde..b7d0208ef4 100644 --- a/.github/workflows/analyze-workloads.yml +++ b/.github/workflows/rhel-8.yml @@ -1,7 +1,6 @@ # This is a basic workflow to help you get started with Actions -name: analyze-workloads - +name: RHEL 8 # Controls when the workflow will run on: @@ -19,7 +18,7 @@ jobs: # The type of runner that the job will run on runs-on: ubuntu-latest container: - image: rocm/dev-ubuntu-22.04:5.3 + image: colramos/target-images:rhel8 # Steps represent a sequence of tasks that will be executed as part of the job steps: # Cancel any previous runs @@ -27,26 +26,30 @@ jobs: uses: styfle/cancel-workflow-action@0.11.0 - name: Install baseline OS dependencies run: | - sudo apt-get update - sudo apt-get install -y git - sudo apt-get install -y python3-pip - sudo apt-get install -y cmake - - name: Checkout + yum -y update + yum -y install git + yum -y install python39 + yum -y install cmake3 + - name: Checkout uses: actions/checkout@v3 with: submodules: recursive token: ${{ secrets.GH_PAT }} - name: Install Python prereqs run: | - python3 -m pip install -r requirements.txt - python3 -m pip install pyinstaller pytest pytest-cov - - name: Configure and install + python3.9 -m pip install -r requirements.txt + python3.9 -m pip install pyinstaller pytest pytest-cov mock + - name: Configure and install run: | mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/omniperf .. make install - - name: run ctest + - name: CTest- Analyze Commands + run: | + cd build + ctest --verbose -R test_analyze_commands + - name: CTest- Analyze Workloads run: | cd build ctest --verbose -R test_analyze_workloads test_saved_analysis diff --git a/.github/workflows/tarball.yml b/.github/workflows/tarball.yml index f43c31ef03..dba77e5c8f 100644 --- a/.github/workflows/tarball.yml +++ b/.github/workflows/tarball.yml @@ -13,8 +13,18 @@ jobs: env: INSTALL_DIR: /tmp/foo1 steps: + - name: Set git sha mode + id: sha-mode + run: | + if [ "$EVENT" == 'pull_request' ]; then + echo "sha=${{github.event.pull_request.head.sha}}" >> $GITHUB_OUTPUT + else + echo "sha=$GITHUB_SHA" >> $GITHUB_OUTPUT + fi - name: Checkout code uses: actions/checkout@v3 + with: + ref: ${{ steps.sha-mode.sha }} - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 - name: Install Python @@ -73,6 +83,8 @@ jobs: - name: Verify expected paths run: | test -d $INSTALL_DIR/omniperf + test -s $INSTALL_DIR/omniperf/VERSION + test -s $INSTALL_DIR/omniperf/VERSION.sha test -d $INSTALL_DIR/omniperf/bin test -x $INSTALL_DIR/omniperf/bin/omniperf test -d $INSTALL_DIR/modulefiles/omniperf diff --git a/.github/workflows/analyze-commands.yml b/.github/workflows/ubuntu-focal.yml similarity index 88% rename from .github/workflows/analyze-commands.yml rename to .github/workflows/ubuntu-focal.yml index 786195916a..d9683af8c1 100644 --- a/.github/workflows/analyze-commands.yml +++ b/.github/workflows/ubuntu-focal.yml @@ -1,6 +1,6 @@ # This is a basic workflow to help you get started with Actions -name: analyze-commands +name: Ubuntu 20.04 # Controls when the workflow will run on: @@ -45,7 +45,11 @@ jobs: cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/omniperf .. make install - - name: Run ctest + - name: CTest- Analyze Commands run: | cd build ctest --verbose -R test_analyze_commands + - name: CTest- Analyze Workloads + run: | + cd build + ctest --verbose -R test_analyze_workloads test_saved_analysis diff --git a/.gitignore b/.gitignore index 95f8be7bd8..aecccd7a1a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ __pycache__ .coverage saved_analysis pmc_kernel_top.csv +VERSION.sha # temp files /tests/Testing \ No newline at end of file diff --git a/.zenodo.json b/.zenodo.json new file mode 100644 index 0000000000..96a4efb823 --- /dev/null +++ b/.zenodo.json @@ -0,0 +1,24 @@ +{ + "creators": [ + { + "affiliation": "AMD", + "name": "Xiaomin Lu" + }, + { + "affiliation": "AMD Research", + "name": "Cole Ramos" + }, + { + "affiliation": "AMD", + "name": "Fei Zheng" + }, + { + "affiliation": "AMD Research", + "name": "Karl W. Schulz" + }, + { + "affiliation": "AMD Research", + "name": "Jose Santos" + } + ] +} diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000000..0d3f2025a1 --- /dev/null +++ b/CHANGES @@ -0,0 +1,28 @@ +Version 1.0.6 (21 Dec 2022) + + * CI update: documentation now published via github action (#22) + * better error detection for incomplete ROCm installs (#56) + +Version 1.0.5 (13 Dec 2022) + + * store application command-line parameters in profiling output (#27) + * enable additional normalizations in CLI mode (#30) + * add missing ubuntu 20.04 roofline binary to packaging (#34) + * update L1 bandwidth metric calculations (#36) + * add L1 <-> L2 bandwidth calculation (#37) + * documentation updates (#38, #41) + * enhanced subprocess logging to identify critical errors in rocprofiler (#50) + * maintain git sha in production installs from tarball (#53) + +Version 1.0.4 (11 Nov 2022) + + * update python requirements.txt with minimum versions for numpy and pandas + * addition of progress bar indicator in web-based GUI (#8) + * reduced default content for web-based GUI to reduce load times (#9) + * minor packaging and CI updates + * variety of documentation updates + * added an optional argument to vcopy.cpp workload example to specify device id + +Version 1.0.3 (07 Nov 2022) + + * initial Omniperf release diff --git a/CMakeLists.txt b/CMakeLists.txt index cc33ffd2d3..8c03d08f95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,19 @@ project( include(ExternalProject) include(GNUInstallDirs) +# version control info +find_package(Git) +if(Git_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") + execute_process( + COMMAND git log --pretty=format:%h -n 1 + OUTPUT_VARIABLE OMNIPERF_GIT_REV + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Git revision: ${OMNIPERF_GIT_REV}") + set(GIT_CLONE TRUE) +else() + set(GIT_CLONE FALSER) +endif() + set(CMAKE_BUILD_TYPE "Release") if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX @@ -140,7 +153,7 @@ if(LOCALHOST MATCHES ".*\.crusher\.olcf\.ornl\.gov") endif() # Thera mods -if(LOCALHOST MATCHES ".*\.thera\.amd\.com") +if(LOCALHOST MATCHES "TheraS01|.*\.thera\.amd\.com|thera-hn") list(APPEND CMAKE_MESSAGE_INDENT " ") message(STATUS "Using thera-specific modulefile modification") file(READ ${PROJECT_SOURCE_DIR}/cmake/modfile.thera.mod mod_additions) @@ -151,6 +164,12 @@ if(LOCALHOST MATCHES ".*\.thera\.amd\.com") list(POP_BACK CMAKE_MESSAGE_INDENT) endif() +# git versioning file +if(${GIT_CLONE}) + configure_file(${PROJECT_SOURCE_DIR}/cmake/VERSION.sha.in + ${PROJECT_SOURCE_DIR}/VERSION.sha @ONLY) +endif() + enable_testing() add_test( @@ -196,12 +215,12 @@ add_test( install(PROGRAMS src/omniperf TYPE BIN) install(FILES src/parser.py TYPE BIN) install(FILES src/common.py TYPE BIN) -install(FILES VERSION DESTINATION ${CMAKE_INSTALL_PREFIX}) -# src/omniperf_cli +install(FILES VERSION VERSION.sha DESTINATION ${CMAKE_INSTALL_PREFIX}) +# src/omniperf_analyze install( - DIRECTORY src/omniperf_cli + DIRECTORY src/omniperf_analyze TYPE BIN - PATTERN src/omniperf_cli/tests EXCLUDE + PATTERN src/omniperf_analyze/tests EXCLUDE PATTERN "__pycache__" EXCLUDE) # src/utils install( @@ -209,9 +228,11 @@ install( TYPE BIN PATTERN "rooflines*" EXCLUDE) # src/utils/rooflines -install(PROGRAMS src/utils/rooflines/roofline-rhel8-mi200-rocm5 - src/utils/rooflines/roofline-sle15sp3-mi200-rocm5 - DESTINATION ${CMAKE_INSTALL_BINDIR}/utils/rooflines) +install( + PROGRAMS src/utils/rooflines/roofline-rhel8-mi200-rocm5 + src/utils/rooflines/roofline-sle15sp3-mi200-rocm5 + src/utils/rooflines/roofline-ubuntu20_04-mi200-rocm5 + DESTINATION ${CMAKE_INSTALL_BINDIR}/utils/rooflines) # src/perfmon_pub install( DIRECTORY src/perfmon_pub @@ -272,6 +293,13 @@ install( # Source tarball set(CPACK_SOURCE_GENERATOR "TGZ") -set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}) -set(CPACK_SOURCE_IGNORE_FILES ".*~$" \.git/ \.github /tests /build) +set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${FULL_VERSION_STRING}) +set(CPACK_SOURCE_IGNORE_FILES + ".*~$" + \.git/ + \.github + \.gitmodules + \.gitignore + /tests + /build) include(CPack) diff --git a/README.md b/README.md index 87602e49cd..90b8c3547e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -[![Docs](https://github.com/AMDResearch/omniperf/actions/workflows/pages/pages-build-deployment/badge.svg?branch=gh-pages)](https://amdresearch.github.io/omniperf/) +[![Ubuntu 20.04](https://github.com/AMDResearch/omniperf/actions/workflows/ubuntu-focal.yml/badge.svg)](https://github.com/AMDResearch/omniperf/actions/workflows/ubuntu-focal.yml) +[![RHEL 8](https://github.com/AMDResearch/omniperf/actions/workflows/opensuse.yml/badge.svg)](https://github.com/AMDResearch/omniperf/actions/workflows/opensuse.yml) +[![Docs](https://github.com/AMDResearch/omniperf/actions/workflows/docs.yml/badge.svg)](https://amdresearch.github.io/omniperf/) +[![DOI](https://zenodo.org/badge/561919887.svg)](https://zenodo.org/badge/latestdoi/561919887) - # Omniperf @@ -34,3 +36,26 @@ from `dev` with `*` being the version number of the upcoming release. This branch will only receive bug fixes and users may checkout to preview upcoming features. +## How to Cite + +This software can be cited using a Zenodo +[DOI](https://doi.org/10.5281/zenodo.7314631) reference. A BibTex +style reference is provided below for convenience: + +``` +@software{xiamin_lu_2022_7314631 + author = {Xiaomin Lu and + Cole Ramos and + Fei Zheng and + Karl W. Schulz and + Jose Santos}, + title = {AMDResearch/omniperf: v1.0.6 (21 December 2022)}, + month = dec, + year = 2022, + publisher = {Zenodo}, + version = {v1.0.6}, + doi = {10.5281/zenodo.7314631}, + url = {https://doi.org/10.5281/zenodo.7314631} +} +``` + diff --git a/VERSION b/VERSION index 21e8796a09..af0b7ddbff 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.3 +1.0.6 diff --git a/cmake/VERSION.sha.in b/cmake/VERSION.sha.in new file mode 100644 index 0000000000..5b3d301508 --- /dev/null +++ b/cmake/VERSION.sha.in @@ -0,0 +1 @@ +@OMNIPERF_GIT_REV@ diff --git a/cmake/modfile.crusher.mod b/cmake/modfile.crusher.mod index 144b2143da..46d6111574 100644 --- a/cmake/modfile.crusher.mod +++ b/cmake/modfile.crusher.mod @@ -1,4 +1,4 @@ -- Crusher-specific additions depends_on "cray-python" depends_on "rocm" -prereq(atleast("rocm","5.1.0")) +prereq(atleast("rocm","5.2.0")) diff --git a/cmake/modfile.thera.mod b/cmake/modfile.thera.mod index f253723ae2..5e5cb5fdfe 100644 --- a/cmake/modfile.thera.mod +++ b/cmake/modfile.thera.mod @@ -1,6 +1,6 @@ -- Thera-specific additions depends_on "python" depends_on "rocm" -prereq(atleast("rocm","5.1.0")) +prereq(atleast("rocm","5.2.0")) local home = os.getenv("HOME") setenv("MPLCONFIGDIR",pathJoin(home,".matplotlib")) diff --git a/dashboards/Omniperf_v1.0.5_pub.json b/dashboards/Omniperf_v1.0.5_pub.json new file mode 100644 index 0000000000..4cbfd4a8ec --- /dev/null +++ b/dashboards/Omniperf_v1.0.5_pub.json @@ -0,0 +1,13331 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 41, + "iteration": 1670355676329, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 217, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 23, + "w": 13, + "x": 0, + "y": 1 + }, + "id": 159, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.sysinfo.aggregate([\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.sysinfo.aggregate([\n {\"$match\": {\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(System Info)\"}}\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "System Info", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true + }, + "indexByName": {}, + "renameByName": { + "Value 1": "Current", + "Value 2": "Baseline" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "System Info", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 108, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto", + "filterable": false + }, + "decimals": 0, + "links": [], + "mappings": [ + { + "options": { + "match": "false", + "result": { + "index": 0 + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text" + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Percent of Peak - PoP" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent" + }, + { + "color": "orange", + "value": 50 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + { + "id": "custom.displayMode", + "value": "color-background" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "color-text" + }, + { + "id": "custom.width", + "value": 252 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit 1" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "color-background" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 137 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 161 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 15, + "x": 0, + "y": 2 + }, + "id": 110, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n \n \"valu_intOps_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \n \n \"salu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU] }] }\n },\n \n \"valu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU] }] }\n },\n \n \"mfma_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU, 4] }] }\n },\n\n \n \"lds_bconf\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \n \"lds_bw\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n \n \"lds_bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}, \n {\"$multiply\": [$sclk, $numCU, 0.00128]}\n ]}\n },\n \n \"unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \n \"ipcIssue_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\", \"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"eaWriteLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null \n ]\n }\n },\n \"eaReadLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null \n ]\n }\n },\n \"eaWriteBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }, \n \"eaReadBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \"l2_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null \n ]\n }\n },\n \"vecl1_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]},\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vecl1_BW_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"l1k_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]} , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]}] },\n null\n ]\n }\n },\n \"l1i_hitRate_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\"]}] }\n },\n \"l1i_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_ICACHE_REQ\",{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n },\n \"l1k_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_DCACHE_REQ\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"VALU FLOPs\",\n \"Value\": \"&valu_flops_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"VALU IOPs\",\n \"Value\": \"&valu_intOps_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_intOps_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (BF16)\",\n \"Value\": \"&mfma_flops_bf16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F16)\",\n \"Value\": \"&mfma_flops_f16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F32)\",\n \"Value\": \"&mfma_flops_f32_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F64)\",\n \"Value\": \"&mfma_flops_f64_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA IOPs (Int8)\",\n \"Value\": \"&mfma_flops_i8_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Value\": $numActiveCUs,\n \"Unit\": \"CUs\",\n \"peak\": $numCU,\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, $numActiveCUs] }, $numCU]}\n },\n \n {\n \"Metric\": \"SALU Util\",\n \"Value\": \"&salu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&salu_val\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Value\": \"&valu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&valu_val\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Value\": \"&mfma_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&mfma_val\"\n },\n {\n \"Metric\": \"VALU Active Threads/Wave\",\n \"Value\": \"&unpredthreads_val\",\n \"Unit\": \"Threads\",\n \"peak\": 64,\n \"Percent of Peak - PoP\": { \"$multiply\": [\"&unpredthreads_val\", 1.5625]}\n },\n {\n \"Metric\": \"IPC - Issue\",\n \"Value\": \"&ipcIssue_val\",\n \"Unit\": \"Instr/cycle\",\n \"peak\": 5,\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&ipcIssue_val\"] }, 5] }\n },\n {\n \"Metric\": \"LDS BW\",\n \"Value\": \"&lds_bw\",\n \"Unit\": \"GB/sec\",\n \"peak\": {\"$multiply\": [$sclk, $numCU, 0.128]},\n \"Percent of Peak - PoP\": \"&lds_bw_pop\"\n },\n {\n \"Metric\": \"LDS Bank Conflict\",\n \"Value\": \"&lds_bconf\",\n \"Unit\": \"Conflicts/access\",\n \"peak\": \"32\",\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&lds_bconf\"] }, 32] }\n },\n {\n \"Metric\": \"Instr Cache Hit Rate\",\n \"Value\": \"&l1i_hitRate_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1i_hitRate_val\"\n }, \n {\n \"Metric\": \"Instr Cache BW\",\n \"Value\": \"&l1i_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1i_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]}] }\n },\n {\n \"Metric\": \"Scalar L1D Cache Hit Rate\",\n \"Value\": \"&l1k_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1k_cacheHits_val\"\n },\n {\n \"Metric\": \"Scalar L1D Cache BW\",\n \"Value\": \"&l1k_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1k_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]}] }\n },\n\n {\n \"Metric\": \"Vector L1D Cache Hit Rate\",\n \"Value\": \"&vecl1_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&vecl1_cacheHits_val\"\n },\n {\n \"Metric\": \"Vector L1D Cache BW\",\n \"Value\": \"&vecl1_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&vecl1_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]}] }\n },\n {\n \"Metric\": \"L2 Cache Hit Rate\",\n \"Value\": \"&l2_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l2_cacheHits_val\"\n },\n {\n \"Metric\": \"L2-Fabric Read BW\",\n \"Value\": \"&eaReadBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaReadBW_val\"] }, $hbmBW] }\n },\n {\n \"Metric\": \"L2-Fabric Write BW\",\n \"Value\": \"&eaWriteBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaWriteBW_val\"] }, $hbmBW] }\n },\n {\n \"Metric\": \"L2-Fabric Read Latency\",\n \"Value\": \"&eaReadLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n },\n {\n \"Metric\": \"L2-Fabric Write Latency\",\n \"Value\": \"&eaWriteLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"waveOcc_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] }\n },\n \"waveOcc_pop\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] },{ \"$multiply\": [$maxWavesPerCU, $numCU] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Value\": \"&waveOcc_val\",\n \"Unit\": \"Wavefronts\",\n \"peak\": { \"$multiply\": [$maxWavesPerCU, $numCU] },\n \"Percent of Peak - PoP\": { \"$multiply\": [100, \"&waveOcc_pop\"] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_IFETCH_LEVEL\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"instrFetchBW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQ_IFETCH\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }, 32] }\n },\n \"instrFetchLat_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\"] }\n }\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Instr Fetch BW\",\n \"Value\": \"&instrFetchBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 32] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&instrFetchBW_val\"]}, { \"$multiply\": [$numSQC, { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 32] }] }] }\n },\n {\n \"Metric\": \"Instr Fetch Latency\",\n \"Value\": \"&instrFetchLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }}\n\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n \n \"valu_intOps_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \n \n \"salu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2] }] }\n },\n \n \"valu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2] }] }\n },\n \n \"mfma_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2, 4] }] }\n },\n \n \"lds_bconf\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \"lds_bw\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n \n \"lds_bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}, \n {\"$multiply\": [$sclk2, $numCU2, 0.00128]}\n ]}\n },\n \n \"unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \n \"ipcIssue_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\", \"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"eaWriteLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null \n ]\n }\n },\n \"eaReadLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null \n ]\n }\n },\n \"eaWriteBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }, \n \"eaReadBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \"l2_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null \n ]\n }\n },\n \"vecl1_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]},\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vecl1_BW_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"l1k_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]} , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]}] },\n null\n ]\n }\n },\n \"l1i_hitRate_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\"]}] }\n },\n \"l1i_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_ICACHE_REQ\",{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n },\n \"l1k_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_DCACHE_REQ\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"VALU FLOPs\",\n \"Value\": \"&valu_flops_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"VALU IOPs\",\n \"Value\": \"&valu_intOps_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_intOps_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (BF16)\",\n \"Value\": \"&mfma_flops_bf16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F16)\",\n \"Value\": \"&mfma_flops_f16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F32)\",\n \"Value\": \"&mfma_flops_f32_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F64)\",\n \"Value\": \"&mfma_flops_f64_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA IOPs (Int8)\",\n \"Value\": \"&mfma_flops_i8_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Value\": $numActiveCUs2,\n \"Unit\": \"CUs\",\n \"peak\": $numCU2,\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, $numActiveCUs2] }, $numCU2]}\n },\n \n {\n \"Metric\": \"SALU Util\",\n \"Value\": \"&salu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&salu_val\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Value\": \"&valu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&valu_val\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Value\": \"&mfma_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&mfma_val\"\n },\n {\n \"Metric\": \"VALU Active Threads/Wave\",\n \"Value\": \"&unpredthreads_val\",\n \"Unit\": \"Threads\",\n \"peak\": 64,\n \"Percent of Peak - PoP\": { \"$multiply\": [\"&unpredthreads_val\", 1.5625]}\n },\n {\n \"Metric\": \"IPC - Issue\",\n \"Value\": \"&ipcIssue_val\",\n \"Unit\": \"Instr/cycle\",\n \"peak\": 5,\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&ipcIssue_val\"] }, 5] }\n },\n {\n \"Metric\": \"LDS BW\",\n \"Value\": \"&lds_bw\",\n \"Unit\": \"GB/sec\",\n \"peak\": {\"$multiply\": [$sclk2, $numCU2, 0.128]},\n \"Percent of Peak - PoP\": \"&lds_bw_pop\"\n },\n {\n \"Metric\": \"LDS Bank Conflict\",\n \"Value\": \"&lds_bconf\",\n \"Unit\": \"Conflicts/access\",\n \"peak\": \"32\",\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&lds_bconf\"] }, 32] }\n },\n {\n \"Metric\": \"Instr Cache Hit Rate\",\n \"Value\": \"&l1i_hitRate_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1i_hitRate_val\"\n }, \n {\n \"Metric\": \"Instr Cache BW\",\n \"Value\": \"&l1i_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1i_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]}] }\n },\n {\n \"Metric\": \"Scalar L1D Cache Hit Rate\",\n \"Value\": \"&l1k_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1k_cacheHits_val\"\n },\n {\n \"Metric\": \"Scalar L1D Cache BW\",\n \"Value\": \"&l1k_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1k_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]}] }\n },\n\n {\n \"Metric\": \"Vector L1D Cache Hit Rate\",\n \"Value\": \"&vecl1_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&vecl1_cacheHits_val\"\n },\n {\n \"Metric\": \"Vector L1D Cache BW\",\n \"Value\": \"&vecl1_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&vecl1_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]}] }\n },\n {\n \"Metric\": \"L2 Cache Hit Rate\",\n \"Value\": \"&l2_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l2_cacheHits_val\"\n }, \n {\n \"Metric\": \"L2-Fabric Read BW\",\n \"Value\": \"&eaReadBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW2\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaReadBW_val\"] }, $hbmBW2] }\n },\n {\n \"Metric\": \"L2-Fabric Write BW\",\n \"Value\": \"&eaWriteBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW2\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaWriteBW_val\"] }, $hbmBW2] }\n },\n {\n \"Metric\": \"L2-Fabric Read Latency\",\n \"Value\": \"&eaReadLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n },\n {\n \"Metric\": \"L2-Fabric Write Latency\",\n \"Value\": \"&eaWriteLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n }\n \n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"waveOcc_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] }\n },\n \"waveOcc_pop\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] },{ \"$multiply\": [$maxWavesPerCU2, $numCU2] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Value\": \"&waveOcc_val\",\n \"Unit\": \"Wavefronts\",\n \"peak\": { \"$multiply\": [$maxWavesPerCU2, $numCU2] },\n \"Percent of Peak - PoP\": { \"$multiply\": [100, \"&waveOcc_pop\"] }\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_IFETCH_LEVEL\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"instrFetchBW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQ_IFETCH\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }, 32] }\n },\n \"instrFetchLat_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Instr Fetch BW\",\n \"Value\": \"&instrFetchBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 32] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&instrFetchBW_val\"]}, { \"$multiply\": [$numSQC2, { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 32] }] }] }\n },\n {\n \"Metric\": \"Instr Fetch Latency\",\n \"Value\": \"&instrFetchLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]\n }}\n\n ]);", + "type": "table" + } + ], + "title": "Speed of Light", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Metric 1": 0, + "Metric 2": 7, + "Percent of Peak - PoP 1": 5, + "Percent of Peak - PoP 2": 6, + "Unit 1": 8, + "Unit 2": 9, + "Value 1": 1, + "Value 2": 2, + "peak 1": 3, + "peak 2": 4 + }, + "renameByName": { + "Percent of Peak - PoP": "Pct-of-Peak", + "Percent of Peak - PoP 1": "Pct-of-Peak (Current)", + "Percent of Peak - PoP 2": "Pct-of-Peak (Baseline)", + "Unit": "", + "Value": "Avg", + "Value 1": "Avg (Current)", + "Value 2": "Avg (Baseline)", + "peak": "Theoretical Max", + "peak 1": "Theoretical Max (Current)", + "peak 2": "Theoretical Max (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dispatch ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 4, + "x": 16, + "y": 2 + }, + "id": 175, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Dispatch ID\": \"&Index\",\n \"Kernel Name\": \"&KernelName\"\n }},\n {\"$sort\": {\n \"Dispatch ID\": 1\n }}\n],\n{ allowDiskUse: true }\n);", + "type": "table" + } + ], + "title": "Dispatch IDs - Current", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "_id": "Dispatch ID" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dispatch ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 4, + "x": 20, + "y": 2 + }, + "id": 215, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "tlh8EwUnk" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Dispatch ID\": \"&Index\",\n \"Kernel Name\": \"&KernelName\"\n }},\n {\"$sort\": {\n \"Dispatch ID\": 1\n }}\n]);", + "type": "table" + } + ], + "title": "Dispatch IDs - Baseline", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "_id": "Dispatch ID" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "System Speed-of-Light", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 36, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 157, + "options": { + "bucketOffset": 0, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + } + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "u5Z2zJhnk" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"elapsedTime1\": {\n \"$divide\": [{\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}, 1000]\n }\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"elapsedTime1\": 1\n }}\n]);", + "type": "table" + } + ], + "title": "Kernel Time Histogram", + "transparent": true, + "type": "histogram" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "TotalDuration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg Duration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + }, + { + "id": "custom.width", + "value": 107 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L1 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 123 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Calls" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 143 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (BF16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 155 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F32)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F64)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Throughput" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 141 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VALU FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (HBM)" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L2 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L1 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Performance" + }, + "properties": [ + { + "id": "custom.width", + "value": 144 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Peak FLOPs" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 213, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "L1 Cache (Bytes)" + } + ] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "HV80ot2nz" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"Throughput\": {\n \"$avg\": { \"$divide\": [\n \n {\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]},\n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"LDS_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 128 ]} \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n },\n \"hbm_bw\": {\n \"$avg\": {\n \"$divide\": [\n {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n },\n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}\n ]\n\n }\n }\n\n }},\n \n {\"$sort\": { \"TotalDuration\": -1 }},\n \n { \"$limit\": $TopN },\n\n {\"$addFields\": {\n \"ai_L1\": { \"$cond\": [\n {\"$ne\": [\"&L1cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"]},\n \"\"\n ]},\n \"ai_L2\": { \"$cond\": [\n {\"$ne\": [\"&L2cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"]},\n \"\"\n ]},\n \"ai_hbm\": { \"$cond\": [\n {\"$ne\": [\"&hbm_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"]},\n \"\"\n ]}\n }}\n]);", + "type": "table" + } + ], + "title": "Top Kernels", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "AvgDuration": 5, + "Calls": 1, + "L1cache_data": 16, + "L2cache_data": 17, + "LDS_data": 15, + "Throughput": 2, + "TotalDuration": 4, + "_id": 0, + "ai_L1": 6, + "ai_L2": 7, + "ai_hbm": 8, + "hbm_bw": 3, + "hbm_data": 18, + "mfma_flops_bf16": 12, + "mfma_flops_f16": 11, + "mfma_flops_f32": 13, + "mfma_flops_f64": 14, + "total_flops": 9, + "valu_flops": 10 + }, + "renameByName": { + "AvgDuration": "Avg Duration", + "Calls": "", + "L1cache_data": "Vector L1D Cache", + "L2cache_data": "L2 Cache", + "LDS_data": "LDS", + "Throughput": "Performance", + "TotalDuration": "Total Duration", + "_id": "Name", + "ai_L1": "AI (Vector L1D Cache)", + "ai_L2": "AI (L2 Cache)", + "ai_hbm": "AI (HBM)", + "hbm_bw": "HBM BW ", + "hbm_data": "HBM", + "mfma_flops_bf16": "MFMA FLOPs (BF16)", + "mfma_flops_f16": "MFMA FLOPs (F16)", + "mfma_flops_f32": "MFMA FLOPs (F32)", + "mfma_flops_f64": "MFMA FLOPs (F64)", + "peak_flops": "Peak FLOPs", + "total_flops": "Total FLOPs", + "valu_flops": "VALU FLOPs" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "TotalDuration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg Duration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + }, + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS " + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L1 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 87 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Calls" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 153 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 143 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (BF16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 155 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F32)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F64)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Throughput" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 141 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VALU FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (HBM)" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L2 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L1 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS (Bytes)" + }, + "properties": [ + { + "id": "custom.width", + "value": 98 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM" + }, + "properties": [ + { + "id": "custom.width", + "value": 124 + }, + { + "id": "unit", + "value": "decbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dispatch" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 251, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "HV80ot2nz" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n { \"$group\": { \n \"_id\": \"&Index\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"Throughput\": {\n \"$avg\": { \"$divide\": [\n \n {\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]},\n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"LDS_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 128]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n },\n\n \"hbm_bw\": {\n \"$avg\": {\n \"$divide\": [\n {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n },\n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}\n ]\n\n }\n }\n\n }},\n \n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": $TopN },\n\n {\"$addFields\": {\n \"ai_L1\": { \"$cond\": [\n {\"$ne\": [\"&L1cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"]},\n \"\"\n ]},\n \"ai_L2\": { \"$cond\": [\n {\"$ne\": [\"&L2cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"]},\n \"\"\n ]},\n \"ai_hbm\": { \"$cond\": [\n {\"$ne\": [\"&hbm_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"]},\n \"\"\n ]}\n\n }}\n]);", + "type": "table" + } + ], + "title": "Top Dispatches", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "AvgDuration": 5, + "Calls": 1, + "L1cache_data": 16, + "L2cache_data": 17, + "LDS_data": 15, + "Throughput": 2, + "TotalDuration": 4, + "_id": 0, + "ai_L1": 6, + "ai_L2": 7, + "ai_hbm": 8, + "hbm_bw": 3, + "hbm_data": 18, + "mfma_flops_bf16": 12, + "mfma_flops_f16": 11, + "mfma_flops_f32": 13, + "mfma_flops_f64": 14, + "peak_flops": 19, + "total_flops": 9, + "valu_flops": 10 + }, + "renameByName": { + "AvgDuration": "Avg Duration", + "Calls": "", + "L1cache_data": "Vector L1D Cache", + "L2cache_data": "L2 Cache", + "LDS_data": "LDS ", + "Throughput": "Performance", + "TotalDuration": "Total Duration", + "_id": "Dispatch", + "ai_L1": "AI (Vector L1D Cache)", + "ai_L2": "AI (L2 Cache)", + "ai_hbm": "AI (HBM)", + "hbm_bw": "HBM BW ", + "hbm_data": "HBM", + "mfma_flops_bf16": "MFMA FLOPs (BF16)", + "mfma_flops_f16": "MFMA FLOPs (F16)", + "mfma_flops_f32": "MFMA FLOPs (F32)", + "mfma_flops_f64": "MFMA FLOPs (F64)", + "total_flops": "Total FLOPs", + "valu_flops": "VALU FLOPs" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Kernel Statistics", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 40, + "panels": [ + { + "description": "All transaction units default to Billion, when per-sec norm is used", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 285, + "options": { + "addAllIDs": false, + "captureMappings": false, + "eventAutoComplete": true, + "eventSource": "options.animateLogo(svgmap, data);\r\nconsole.log(\"Starting render\");\r\nlet buff = data.series[0].fields[2].values.buffer;\r\nlet valueCount = buff.length;\r\nconsole.log(\"The buff is \", valueCount, \" long\");\r\n\r\nsvgmap.wave_life_.text(buff[0]);\r\nsvgmap.active_cu_.text(buff[1]);\r\nsvgmap.salu_.text(buff[2]);\r\nsvgmap.smem_.text(buff[3]);\r\nsvgmap.valu_.text(buff[4]);\r\nsvgmap.mfma_.text(buff[5]);\r\nsvgmap.vmem_.text(buff[6]);\r\nsvgmap.lds_.text(buff[7]);\r\nsvgmap.gws_.text(buff[8]);\r\nsvgmap.br_.text(buff[9]);\r\nsvgmap.vgpr_.text(buff[10]);\r\nsvgmap.sgpr_.text(buff[11]);\r\nsvgmap.lds_alloc_.text(buff[12]);\r\nsvgmap.scratch_alloc_.text(buff[13]);\r\nsvgmap.wavefronts_.text(buff[14]);\r\nsvgmap.workgroups_.text(buff[15]);\r\nsvgmap.lds_req_.text(buff[16]);\r\nsvgmap.il1_fetch_.text(buff[17]);\r\nsvgmap.il1_hit_.text(buff[18]);\r\nsvgmap.il1_l2_rd_.text(buff[19]);\r\nsvgmap.sl1_rd_.text(buff[20]);\r\nsvgmap.sl1_hit_.text(buff[21]);\r\nsvgmap.sl1_l2_rd_.text(buff[22]);\r\nsvgmap.sl1_l2_wr_.text(buff[23]);\r\nsvgmap.sl1_l2_atom_.text(buff[24]);\r\nsvgmap.vl1_rd_.text(buff[25]);\r\nsvgmap.vl1_wr_.text(buff[26]);\r\nsvgmap.vl1_atom_.text(buff[27]);\r\nsvgmap.vl1_hit_.text(buff[28]);\r\nsvgmap.vl1_lat_.text(buff[29]);\r\nsvgmap.vl1_l2_rd_.text(buff[30]);\r\nsvgmap.vl1_l2_wr_.text(buff[31]);\r\nsvgmap.vl1_l2_atom_.text(buff[32]);\r\nsvgmap.l2_rd_.text(buff[33]);\r\nsvgmap.l2_wr_.text(buff[34])\r\nsvgmap.l2_atom_.text(buff[35]);\r\nsvgmap.l2_hit_.text(buff[36]);\r\nsvgmap.l2_rd_lat_.text(buff[37]);\r\nsvgmap.l2_wr_lat_.text(buff[38]);\r\nsvgmap.fabric_rd_lat_.text(buff[39]);\r\nsvgmap.fabric_wr_lat_.text(buff[40]);\r\nsvgmap.fabric_atom_lat_.text(buff[41]);\r\nsvgmap.l2_fabric_rd_.text(buff[42]);\r\nsvgmap.l2_fabric_wr_.text(buff[43]);\r\nsvgmap.l2_fabric_atom_.text(buff[44]);\r\nsvgmap.hbm_rd_.text(buff[45]);\r\nsvgmap.hbm_wr_.text(buff[46]);\r\nsvgmap.lds_util_.text(buff[47]);\r\nsvgmap.vl1_coales_.text(buff[48]);\r\nsvgmap.vl1_stall_.text(buff[49]);\r\nsvgmap.wave_occ_.text(buff[50]);\r\nsvgmap.lds_lat_.text(buff[51]);\r\nsvgmap.il1_lat_.text(buff[52]);\r\nsvgmap.sl1_lat_.text(buff[53]);\r\nsvgmap.gds_req_.text(buff[54]);", + "initAutoComplete": true, + "initSource": "options.animateLogo = (svgmap, data) => {\r\n \r\n}\r\n ", + "svgMappings": [ + { + "mappedName": "wave_life_", + "svgId": "wave_life" + }, + { + "mappedName": "wave_occ_", + "svgId": "wave_occ" + }, + { + "mappedName": "salu_", + "svgId": "salu" + }, + { + "mappedName": "smem_", + "svgId": "smem" + }, + { + "mappedName": "valu_", + "svgId": "valu" + }, + { + "mappedName": "mfma_", + "svgId": "mfma" + }, + { + "mappedName": "vmem_", + "svgId": "vmem" + }, + { + "mappedName": "lds_", + "svgId": "lds" + }, + { + "mappedName": "gws_", + "svgId": "gws" + }, + { + "mappedName": "br_", + "svgId": "br" + }, + { + "mappedName": "active_cu_", + "svgId": "active_cu" + }, + { + "mappedName": "vgpr_", + "svgId": "vgpr" + }, + { + "mappedName": "sgpr_", + "svgId": "sgpr" + }, + { + "mappedName": "lds_alloc_", + "svgId": "lds_alloc" + }, + { + "mappedName": "scratch_alloc_", + "svgId": "scratch_alloc" + }, + { + "mappedName": "wavefronts_", + "svgId": "wavefronts" + }, + { + "mappedName": "workgroups_", + "svgId": "workgroups" + }, + { + "mappedName": "lds_req_", + "svgId": "lds_req" + }, + { + "mappedName": "vl1_wr_", + "svgId": "vl1_wr" + }, + { + "mappedName": "vl1_atom_", + "svgId": "vl1_atom" + }, + { + "mappedName": "sl1_rd_", + "svgId": "sl1_rd" + }, + { + "mappedName": "il1_fetch_", + "svgId": "il1_fetch" + }, + { + "mappedName": "lds_lat_", + "svgId": "lds_lat" + }, + { + "mappedName": "lds_bw_", + "svgId": "lds_bw" + }, + { + "mappedName": "lds_util_", + "svgId": "lds_util" + }, + { + "mappedName": "vl1_hit_", + "svgId": "vl1_hit" + }, + { + "mappedName": "vl1_lat_", + "svgId": "vl1_lat" + }, + { + "mappedName": "vl1_coales_", + "svgId": "vl1_coales" + }, + { + "mappedName": "vl1_stall_", + "svgId": "vl1_stall" + }, + { + "mappedName": "sl1_hit_", + "svgId": "sl1_hit" + }, + { + "mappedName": "sl1_lat_", + "svgId": "sl1_lat" + }, + { + "mappedName": "il1_hit_", + "svgId": "il1_hit" + }, + { + "mappedName": "il1_lat_", + "svgId": "il1_lat" + }, + { + "mappedName": "sl1_l2_rd_", + "svgId": "sl1_l2_rd" + }, + { + "mappedName": "sl1_l2_wr_", + "svgId": "sl1_l2_wr" + }, + { + "mappedName": "sl1_l2_atom_", + "svgId": "sl1_l2_atom" + }, + { + "mappedName": "il1_l2_rd_", + "svgId": "il1_l2_rd" + }, + { + "mappedName": "sl1_l2_rd_", + "svgId": "sl1_l2_rd" + }, + { + "mappedName": "sl1_l2_wr_", + "svgId": "sl1_l2_wr" + }, + { + "mappedName": "sl1_l2_atom_", + "svgId": "sl1_l2_atom" + }, + { + "mappedName": "l2_rd_", + "svgId": "l2_rd" + }, + { + "mappedName": "l2_wr_", + "svgId": "l2_wr" + }, + { + "mappedName": "l2_atom_", + "svgId": "l2_atom" + }, + { + "mappedName": "l2_hit_", + "svgId": "l2_hit" + }, + { + "mappedName": "l2_rd_lat_", + "svgId": "l2_rd_lat" + }, + { + "mappedName": "l2_wr_lat_", + "svgId": "l2_wr_lat" + }, + { + "mappedName": "l2_fabric_rd_", + "svgId": "l2_fabric_rd" + }, + { + "mappedName": "l2_fabric_wr_", + "svgId": "l2_fabric_wr" + }, + { + "mappedName": "l2_fabric_atom_", + "svgId": "l2_fabric_atom" + }, + { + "mappedName": "fabric_rd_lat_", + "svgId": "fabric_rd_lat" + }, + { + "mappedName": "fabric_wr_lat_", + "svgId": "fabric_wr_lat" + }, + { + "mappedName": "fabric_atom_lat_", + "svgId": "fabric_atom_lat" + }, + { + "mappedName": "fabric_hbm_rd_", + "svgId": "fabric_hbm_rd" + }, + { + "mappedName": "fabric_hbm_wr_", + "svgId": "fabric_hbm_wr" + }, + { + "mappedName": "vl1_rd_", + "svgId": "vl1_rd" + }, + { + "mappedName": "vl1_l2_rd_", + "svgId": "vl1_l2_rd" + }, + { + "mappedName": "vl1_l2_wr_", + "svgId": "vl1_l2_wr" + }, + { + "mappedName": "vl1_l2_atom_", + "svgId": "vl1_l2_atom" + }, + { + "mappedName": "hbm_rd_", + "svgId": "hbm_rd" + }, + { + "mappedName": "hbm_wr_", + "svgId": "hbm_wr" + } + ], + "svgSource": "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Wave Occupancy\r\n \r\n Wave Life\r\n \r\n \r\n \r\n xGMI /\r\n PCIe\r\n \r\n GMI\r\n \r\n HBM\r\n \r\n Fabric\r\n \r\n \r\n SALU:\r\n 00000\r\n \r\n \r\n SMEM:\r\n 00000\r\n \r\n \r\n VALU:\r\n 00000\r\n \r\n \r\n MFMA:\r\n 00000\r\n \r\n \r\n VMEM:\r\n 00000\r\n \r\n \r\n LDS:\r\n 00000\r\n \r\n \r\n GWS:\r\n 00000\r\n \r\n \r\n Br:\r\n 00000\r\n \r\n \r\n cycles\r\n Rd:\r\n 00000\r\n \r\n \r\n cycles\r\n Wr:\r\n 00000\r\n \r\n \r\n cycles\r\n Atomic:\r\n 00000\r\n \r\n \r\n Rd:\r\n 00000\r\n \r\n \r\n Wr:\r\n \r\n \r\n 00000\r\n \r\n \r\n Atomic:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n 00000\r\n Rd:\r\n 00000\r\n Wr:\r\n 00000\r\n Req:\r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n per-GCD\r\n cycles\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Rd:\r\n 00000\r\n \r\n \r\n cycles\r\n Wr:\r\n 00000\r\n Wave 0 Instr buff\r\n Wave N-1 Instr buff\r\n Active CUs\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Util:\r\n 00000\r\n \r\n \r\n %\r\n Coales:\r\n 00000\r\n Exec\r\n Instr Buff\r\n Instr Dispatch\r\n LDS\r\n Vector L1 Cache\r\n Scalar L1D Cache\r\n Instr L1 Cache\r\n L2 Cache\r\n 00000\r\n Req:\r\n \r\n \r\n %\r\n Stall:\r\n 00000\r\n 00000\r\n Fetch:\r\n 0000000\r\n 00000\r\n 000/000\r\n \r\n Latency\r\n \r\n LDS Alloc:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n \r\n Scratch Alloc:\r\n \r\n 00000\r\n \r\n Wavefronts:\r\n \r\n 00000\r\n \r\n Workgroups:\r\n \r\n 00000\r\n \r\n VGPRs:\r\n \r\n 00000\r\n \r\n SGPRs:\r\n \r\n 00000\r\n \r\n \r\n 00000\r\n Rd:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n Latency\r\n \r\n \r\n \r\n \r\n Text is not SVG - cannot display\r\n \r\n \r\n" + }, + "pluginVersion": "8.4.0", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"wave_life\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&SQ_WAVES\", 0] },\n { \"$multiply\": [4, { \"$divide\": [\"&SQ_WAVE_CYCLES\", \"&SQ_WAVES\"] }] },\n null\n ]\n }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"valu\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_VALU\", \"&denom\"] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_MFMA\", \"&denom\"] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_VMEM\", \"&denom\"] }\n },\n \"lds_instr\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\", \"&denom\"] }\n },\n \"gws\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_GDS\", \"&denom\"] }\n },\n \"br\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_BRANCH\", \"&denom\"] }\n },\n \"vgpr\": {\n \"$avg\": \"&vgpr\"\n },\n \"sgpr\": {\n \"$avg\": \"&sgpr\"\n },\n \"lds_alloc\": {\n \"$avg\": \"&lds\"\n },\n \"scratch_alloc\": {\n \"$avg\": \"&scr\"\n },\n \"wavefronts\": {\n \"$avg\": \"&SPI_CSN_WAVE\"\n },\n \"workgroups\": {\n \"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"\n },\n \"lds_req\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\", \"&denom\"] }\n }, \n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n },\n \"vl1_rd\": {\n \"$avg\": { \"$divide\": [\"&TCP_TOTAL_READ_sum\", \"&denom\"] }\n },\n \"vl1_wr\": {\n \"$avg\": { \"$divide\": [\"&TCP_TOTAL_WRITE_sum\", \"&denom\"] }\n },\n \"vl1_atom\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"] }\n },\n \"il1_fetch\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"il1_hit\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_REQ\"] }\n },\n \"il1_l2_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_INST_REQ\", \"&denom\"] }\n },\n \"sl1_rd\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"sl1_hit\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQC_DCACHE_REQ\", 0]},\n { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_REQ\"] },\n \"\"\n ]\n }\n},\n \"sl1_l2_rd\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"sl1_l2_wr\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"sl1_l2_atom\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"vl1_hit\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vl1_lat\": {\n \"$avg\": { \n \"$cond\": [\n { \"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0] },\n { \"$divide\": [\"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\"] },\n null\n ]\n }\n },\n \"vl1_coales\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n 0\n ]\n }\n },\n \"vl1_stall\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n \"\"\n ]\n }},\n \"vl1_l2_rd\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_READ_REQ_sum\", \"&denom\"] }\n },\n \"vl1_l2_wr\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"vl1_l2_atom\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }\n },\n \"l2_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_READ_sum\", \"&denom\"] }\n },\n \"l2_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_WRITE_sum\", \"&denom\"] }\n },\n \"l2_atom\": {\n \"$avg\": { \"$divide\": [\"&TCC_ATOMIC_sum\", \"&denom\"] }\n },\n \"l2_hit\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0] },\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null\n ]\n }\n },\n \"l2_rd_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }, 0] },\n { \"$divide\": [\"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }] },\n null\n ]\n }\n },\n \"l2_wr_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 0] },\n { \"$divide\": [\"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] },\n null\n ]\n }\n },\n \"fabric_rd_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_RDREQ_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null\n ]\n }\n },\n \"fabric_wr_lat\": { \n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_WRREQ_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null\n ]\n }\n },\n \"fabric_atom_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\"] },\n null\n ]\n }\n },\n \"l2_fabric_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_sum\", \"&denom\"] }\n },\n \"l2_fabric_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_sum\", \"&denom\"] }\n },\n \"l2_fabric_atom\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_ATOMIC_sum\", \"&denom\"] }\n },\n \"hbm_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\"] }\n },\n \"hbm_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Life\",\n \"Alias\": \"wave_life_\",\n \"Value\": { \"$round\": [\"&wave_life\", 0] }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Alias\": \"active_cu_\",\n \"Value\": {\"$concat\": [\"$numActiveCUs\", \"/\", \"$numCU\"]}\n },\n {\n \"Metric\": \"SALU\",\n \"Alias\": \"salu_\",\n \"Value\": { \"$round\": [\"&salu\", 0] }\n },\n {\n \"Metric\": \"SMEM\",\n \"Alias\": \"smem_\",\n \"Value\": { \"$round\": [\"&smem\", 0] }\n },\n {\n \"Metric\": \"VALU\",\n \"Alias\": \"valu_\",\n \"Value\": { \"$round\": [\"&valu\", 0] }\n },\n {\n \"Metric\": \"MFMA\",\n \"Alias\": \"mfma_\",\n \"Value\": { \"$round\": [\"&mfma\", 0] }\n },\n {\n \"Metric\": \"VMEM\",\n \"Alias\": \"vmem_\",\n \"Value\": { \"$round\": [\"&vmem\", 0] }\n },\n {\n \"Metric\": \"LDS\",\n \"Alias\": \"lds_\",\n \"Value\": { \"$round\": [\"&lds_instr\", 0] }\n },\n {\n \"Metric\": \"GWS\",\n \"Alias\": \"gws_\",\n \"Value\": { \"$round\": [\"&gws\", 0] }\n },\n {\n \"Metric\": \"BR\",\n \"Alias\": \"br_\",\n \"Value\": { \"$round\": [\"&br\", 0] }\n },\n {\n \"Metric\": \"VGPR\",\n \"Alias\": \"vgpr_\",\n \"Value\": { \"$round\": [\"&vgpr\", 0] }\n },\n {\n \"Metric\": \"SGPR\",\n \"Alias\": \"sgpr_\",\n \"Value\": { \"$round\": [\"&sgpr\", 0] }\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Alias\": \"lds_alloc_\",\n \"Value\": { \"$round\": [\"&lds_alloc\", 0] }\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Alias\": \"scratch_alloc_\",\n \"Value\": { \"$round\": [\"&scratch_alloc\", 0] }\n },\n {\n \"Metric\": \"Wavefronts\",\n \"Alias\": \"wavefronts_\",\n \"Value\": { \"$round\": [\"&wavefronts\", 0] }\n },\n {\n \"Metric\": \"Workgroups\",\n \"Alias\": \"workgroups_\",\n \"Value\": { \"$round\": [\"&workgroups\", 0] }\n },\n {\n \"Metric\": \"LDS Req\",\n \"Alias\": \"lds_req_\",\n \"Value\": { \"$round\": [\"&lds_req\", 0] }\n },\n {\n \"Metric\": \"IL1 Fetch\",\n \"Alias\": \"il1_fetch_\",\n \"Value\": { \"$round\": [\"&il1_fetch\", 0] }\n },\n {\n \"Metric\": \"IL1 Hit\",\n \"Alias\": \"il1_hit_\",\n \"Value\": { \"$round\": [{ \"$multiply\": [\"&il1_hit\", 100] }, 0] }\n },\n {\n \"Metric\": \"IL1_L2 Rd\",\n \"Alias\": \"il1_l2_req_\",\n \"Value\": { \"$round\": [\"&il1_l2_req\", 0] }\n },\n {\n \"Metric\": \"vL1D Rd\",\n \"Alias\": \"sl1_rd_\",\n \"Value\": { \"$round\": [\"&sl1_rd\", 0] }\n },\n {\n \"Metric\": \"vL1D Hit\",\n \"Alias\": \"sl1_hit_\",\n \"Value\": { \"$round\": [{ \"$multiply\": [\"&sl1_hit\", 100] }, 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Rd\",\n \"Alias\": \"sl1_l2_rd_\",\n \"Value\": { \"$round\": [\"&sl1_l2_rd\", 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Wr\",\n \"Alias\": \"sl1_l2_wr_\",\n \"Value\": { \"$round\": [\"&sl1_l2_wr\", 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Atomic\",\n \"Alias\": \"sl1_l2_atom_\",\n \"Value\": { \"$round\": [\"&sl1_l2_atom\", 0] }\n },\n {\n \"Metric\": \"VL1 Rd\",\n \"Alias\": \"vl1_rd_\",\n \"Value\": { \"$round\": [\"&vl1_rd\", 0] }\n },\n {\n \"Metric\": \"VL1 Wr\",\n \"Alias\": \"vl1_wr_\",\n \"Value\": { \"$round\": [\"&vl1_wr\", 0] }\n },\n {\n \"Metric\": \"VL1 Atomic\",\n \"Alias\": \"vl1_atom_\",\n \"Value\": { \"$round\": [\"&vl1_atom\", 0] }\n },\n {\n \"Metric\": \"VL1 Hit\",\n \"Alias\": \"vl1_hit_\",\n \"Value\": { \"$round\": [\"&vl1_hit\", 0] }\n },\n {\n \"Metric\": \"VL1 Lat\",\n \"Alias\": \"vl1_lat_\",\n \"Value\": { \"$round\": [\"&vl1_lat\", 0] }\n },\n {\n \"Metric\": \"VL1_L2 Rd\",\n \"Alias\": \"vl1_l2_rd_\",\n \"Value\": { \"$round\": [\"&vl1_l2_rd\", 0] }\n },\n {\n \"Metric\": \"VL1_L2 Wr\",\n \"Alias\": \"vl1_l2_wr_\",\n \"Value\": { \"$round\": [\"&vl1_l2_wr\", 0] }\n },\n {\n \"Metric\": \"vL1_L2 Atomic\",\n \"Alias\": \"vl1_l2_atom_\",\n \"Value\": { \"$round\": [\"&vl1_l2_atom\", 0] }\n },\n {\n \"Metric\": \"L2 Rd\",\n \"Alias\": \"l2_rd_\",\n \"Value\": { \"$round\": [\"&l2_rd\", 0] }\n },\n {\n \"Metric\": \"L2 Wr\",\n \"Alias\": \"l2_wr_\",\n \"Value\": { \"$round\": [\"&l2_wr\", 0] }\n },\n {\n \"Metric\": \"L2 Atomic\",\n \"Alias\": \"l2_atom_\",\n \"Value\": { \"$round\": [\"&l2_atom\", 0] }\n },\n {\n \"Metric\": \"L2 Hit\",\n \"Alias\": \"l2_hit_\",\n \"Value\": { \"$round\": [\"&l2_hit\", 0] }\n },\n {\n \"Metric\": \"L2 Rd Lat\",\n \"Alias\": \"l2_rd_lat_\",\n \"Value\": { \"$round\": [\"&l2_rd_lat\", 0] }\n },\n {\n \"Metric\": \"L2 Wr Lat\",\n \"Alias\": \"l2_wr_lat_\",\n \"Value\": { \"$round\": [\"&l2_wr_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Rd Lat\",\n \"Alias\": \"fabric_rd_lat_\",\n \"Value\": { \"$round\": [\"&fabric_rd_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Wr Lat\",\n \"Alias\": \"fabric_wr_lat_\",\n \"Value\": { \"$round\": [\"&fabric_wr_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Atomic Lat\",\n \"Alias\": \"fabric_atom_lat_\",\n \"Value\": { \"$round\": [\"&fabric_atom_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric_L2 Rd\",\n \"Alias\": \"l2_fabric_rd_\",\n \"Value\": { \"$round\": [\"&l2_fabric_rd\", 0] }\n },\n {\n \"Metric\": \"Fabric_L2 Wr\",\n \"Alias\": \"l2_fabric_wr_\",\n \"Value\": { \"$round\": [\"&l2_fabric_wr\", 0] }\n },\n {\n \"Metric\": \"Fabric_l2 Atomic\",\n \"Alias\": \"l2_fabric_atom_\",\n \"Value\": { \"$round\": [\"&l2_fabric_atom\", 0] }\n },\n {\n \"Metric\": \"HBM Rd\",\n \"Alias\": \"hbm_rd_\",\n \"Value\": { \"$round\": [\"&hbm_rd\", 0] }\n },\n {\n \"Metric\": \"HBM Wr\",\n \"Alias\": \"hbm_wr_\",\n \"Value\": { \"$round\": [\"&hbm_wr\", 0] }\n },\n {\n \"Metric\": \"LDS Util\",\n \"Alias\": \"lds_util_\",\n \"Value\": { \"$round\": [\"&lds_util\", 0] }\n },\n {\n \"Metric\": \"VL1 Coalesce\",\n \"Alias\": \"vl1_coales_\",\n \"Value\": { \"$round\": [\"&vl1_coales\", 0]}\n },\n {\n \"Metric\": \"VL1 Stall\",\n \"Alias\": \"vl1_stall_\",\n \"Value\": { \"$round\": [\"&vl1_stall\", 0]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_LEVEL_WAVES", + "target": "$Workload1.SQ_LEVEL_WAVES.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"wave_occ\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\",\"&GRBM_GUI_ACTIVE\"] }, $numActiveCUs]}\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Alias\": \"wave_occ_\",\n \"Value\":{ \"$round\": [\"&wave_occ\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS", + "target": "$Workload1.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"lds_lat\": {\n \"$avg\": { \n \"$cond\": [\n { \"$ne\": [\"&SQ_INSTS_LDS\", 0] },\n { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\"] },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"LDS Lat\",\n \"Alias\": \"lds_lat_\",\n \"Value\":{ \"$round\": [\"&lds_lat\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQC_ICACHE_INFLIGHT", + "target": "$Workload1.pmc_perf.aggregate([\n\t{\"$match\": {\n\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t}},\n\t{\"$lookup\": {\n\t\t\"from\": \"SQ_IFETCH_LEVEL\",\n\t\t\"localField\": \"Index\",\n\t\t\"foreignField\": \"Index\",\n\t\t\"as\": \"SQ_IFETCH_LEVEL\",\n\t\t\"pipeline\": [\n\t\t\t{\"$match\": {\n\t\t\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t\t\t}},\n\t\t\t{\"$project\":{\n\t\t\t\t\"_id\": 0,\n\t\t\t\t\"SQ_ACCUM_PREV_HIRES\": 1\n\t\t\t}}\n\t\t]\n\t}},\n\t{\"$unwind\":{\n\t\t\"path\": \"&SQ_IFETCH_LEVEL\"\n\t}},\n\t{\"$group\":{\n\t\t\"_id\": null,\n\t\t\"il1_lat\": {\n\t\t\t\"$avg\":{\n\t\t\t\t\"$cond\":[\n\t\t\t\t\t\t{\"$ne\":[\"&SQC_ICACHE_REQ\",0]},\n\t\t\t\t\t\t{\"$divide\":[\"&SQ_IFETCH_LEVEL.SQ_ACCUM_PREV_HIRES\",\"&SQC_ICACHE_REQ\"]},\n\t\t\t\t\t\tnull\n\t\t\t\t\t]\n\t\t\t}\n\t\t} \n\t}},\n\t{\"$set\": {\n \t\t\"array\": [\n \t\t{\n \t\t\t\"Metric\": \"IL1 Lat\",\n \t\t\t\"Alias\": \"il1_lat_\",\n \t\t\t\"Value\": { \"$round\": [\"&il1_lat\", 0] }\n \t\t}\n \t\t]\n\t}},\n \t{\"$unwind\": {\n \t\t\"path\": \"&array\"\n \t}},\n \t{\"$replaceRoot\": {\n \t\t\"newRoot\": \"&array\"\n \t}}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQC_DCACHE_INFLIGHT_LEVEL", + "target": "$Workload1.pmc_perf.aggregate([\n\t{\"$match\": {\n\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t}},\n\t{\"$lookup\": {\n\t\t\"from\": \"SQ_IFETCH_LEVEL\",\n\t\t\"localField\": \"Index\",\n\t\t\"foreignField\": \"Index\",\n\t\t\"as\": \"SQ_IFETCH_LEVEL\",\n\t\t\"pipeline\": [\n\t\t\t{\"$match\": {\n\t\t\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t\t\t}},\n\t\t\t{\"$project\":{\n\t\t\t\t\"_id\": 0,\n\t\t\t\t\"SQ_ACCUM_PREV_HIRES\": 1\n\t\t\t}}\n\t\t]\n\t}},\n\t{\"$unwind\":{\n\t\t\"path\": \"&SQ_IFETCH_LEVEL\"\n\t}},\n\t{\"$group\":{\n\t\t\"_id\": null,\n\t\t\"sl1_lat\": {\n\t\t\t\"$avg\":{\n\t\t\t\t\"$cond\":[\n\t\t\t\t\t\t{\"$ne\":[\"&SQC_DCACHE_REQ\",0]},\n\t\t\t\t\t\t{\"$divide\":[\"&SQ_IFETCH_LEVEL.SQ_ACCUM_PREV_HIRES\",\"&SQC_DCACHE_REQ\"]},\n\t\t\t\t\t\tnull\n\t\t\t\t\t]\n\t\t\t}\n\t\t} \n\t}},\n\t{\"$set\": {\n \t\t\"array\": [\n \t\t{\n \t\t\t\"Metric\": \"vL1D Lat\",\n \t\t\t\"Alias\": \"sl1_lat_\",\n \t\t\t\"Value\": { \"$round\": [\"&sl1_lat\", 0] }\n \t\t}\n \t\t]\n\t}},\n \t{\"$unwind\": {\n \t\t\"path\": \"&array\"\n \t}},\n \t{\"$replaceRoot\": {\n \t\t\"newRoot\": \"&array\"\n \t}}\n]);", + "type": "table" + } + ], + "title": "Memory Chart (Normalization: $normUnit\")", + "transformations": [ + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "string", + "targetField": "Value" + } + ], + "fields": {} + } + }, + { + "id": "merge", + "options": {} + } + ], + "type": "amd-custom-svg" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Memory Chart Analysis", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 241, + "panels": [ + { + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 253, + "pconfig": { + "fixScale": "", + "layout": { + "dragmode": "zoom", + "font": { + "family": "\"Open Sans\", Helvetica, Arial, sans-serif" + }, + "hovermode": "closest", + "legend": { + "orientation": "v" + }, + "showlegend": true, + "xaxis": { + "range": [ + -2, + 3.8 + ], + "rangemode": "between", + "showgrid": true, + "title": "Arithmetic Intensity (FLOP/Byte)", + "type": "log", + "zeroline": false + }, + "yaxis": { + "rangemode": "normal", + "showgrid": true, + "title": "Performance (GFLOP/sec)", + "type": "log", + "zeroline": false + }, + "zaxis": { + "rangemode": "normal", + "showgrid": true, + "type": "linear", + "zeroline": false + } + }, + "loadFromCDN": false, + "settings": { + "displayModeBar": false, + "type": "scatter" + }, + "showAnnotations": true, + "traces": [ + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm" + }, + "name": "HBM-VLAU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2" + }, + "name": "L2-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1" + }, + "name": "vL1D-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS" + }, + "name": "LDS-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "cur_ai_hbm", + "y": "cur_perf" + }, + "name": "Cur - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "cur_ai_L2", + "y": "cur_perf" + }, + "name": "Cur - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "cur_ai_L1", + "y": "cur_perf" + }, + "name": "Cur - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "base_ai_hbm", + "y": "base_perf" + }, + "name": "Baseline - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "base_ai_L2", + "y": "base_perf" + }, + "name": "Baseline - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "base_ai_L1", + "y": "base_perf" + }, + "name": "Baseline - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA" + }, + "name": "HBM-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA" + }, + "name": "L2-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA" + }, + "name": "vL1D-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA" + }, + "name": "LDS-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + } + ] + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "rawQuery": true, + "refId": "HBM-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"hbmBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&HBMBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n\n \"L2Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L2Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"&high_flop\"\n }\n },\n\n \"L1Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L1Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n\n \"LDSBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&LDSBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Cur Workload", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"cur_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"cur_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"cur_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"cur_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Baseline Workload", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Roofline)\"}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"base_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"base_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"base_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"base_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + } + ], + "title": "Empirical Roofline FP32/FP64 (MI200)", + "type": "natel-plotly-panel", + "version": 1 + }, + { + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 312, + "pconfig": { + "fixScale": "", + "layout": { + "dragmode": "zoom", + "font": { + "family": "\"Open Sans\", Helvetica, Arial, sans-serif" + }, + "hovermode": "closest", + "legend": { + "orientation": "v" + }, + "showlegend": true, + "xaxis": { + "range": [ + -2, + 3.8 + ], + "rangemode": "between", + "showgrid": true, + "title": "Arithmetic Intensity (FLOP/Byte)", + "type": "log", + "zeroline": false + }, + "yaxis": { + "rangemode": "normal", + "showgrid": true, + "title": "Performance (GFLOP/sec)", + "type": "log", + "zeroline": false + }, + "zaxis": { + "rangemode": "normal", + "showgrid": true, + "type": "linear", + "zeroline": false + } + }, + "loadFromCDN": false, + "settings": { + "displayModeBar": false, + "type": "scatter" + }, + "showAnnotations": true, + "traces": [ + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "cur_ai_hbm", + "y": "cur_perf" + }, + "name": "Cur - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "cur_ai_L2", + "y": "cur_perf" + }, + "name": "Cur - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "cur_ai_L1", + "y": "cur_perf" + }, + "name": "Cur - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "base_ai_hbm", + "y": "base_perf" + }, + "name": "Baseline - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "base_ai_L2", + "y": "base_perf" + }, + "name": "Baseline - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "base_ai_L1", + "y": "base_perf" + }, + "name": "Baseline - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA_fp16" + }, + "name": "HBM-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA_fp16" + }, + "name": "L2-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA_fp16" + }, + "name": "vL1D-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA_fp16" + }, + "name": "LDS-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA_i8" + }, + "name": "HBM-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA_i8" + }, + "name": "L2-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA_i8" + }, + "name": "vL1D-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA_i8" + }, + "name": "LDS-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + } + ] + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"hbmBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&HBMBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Cur Workload", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"cur_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"cur_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"cur_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"cur_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Baseline Workload", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Roofline)\"}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"base_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"base_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"base_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"base_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"L2Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L2Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"L1Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L1Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"LDSBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&LDSBw\", 1] },0, 32]}, \" GB/s\"] }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + } + ], + "title": "Empirical Roofline FP16/INT8 (MI200)", + "type": "natel-plotly-panel", + "version": 1 + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Roofline Analysis", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 2, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 13, + "x": 0, + "y": 62 + }, + "id": 6, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1 \n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n\n \"cpfBusy_avg\": {\"$avg\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_min\": {\"$min\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_max\": {\"$max\": \"&CPF_CPF_STAT_BUSY\"},\n\n \"cpfUtil_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n\n \"cpfStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\": {\"$avg\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_min\": {\"$min\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_max\": {\"$max\": \"&CPF_CPF_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n\n \"utcL1Stall_avg\": {\"$avg\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\": {\"$min\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\": {\"$max\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"}\n\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Busy\",\n \"Avg\": \"&cpfBusy_avg\",\n \"Min\": \"&cpfBusy_min\",\n \"Max\": \"&cpfBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Util\",\n \"Avg\": \"&cpfUtil_avg\",\n \"Min\": \"&cpfUtil_min\",\n \"Max\": \"&cpfUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPF Stall\",\n \"Avg\": \"&cpfStall_avg\",\n \"Min\": \"&cpfStall_min\",\n \"Max\": \"&cpfStall_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Busy\",\n \"Avg\": \"&l2CacheBusy_avg\",\n \"Min\": \"&l2CacheBusy_min\",\n \"Max\": \"&l2CacheBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Stall\",\n \"Avg\": \"&l2CacheStall_avg\",\n \"Min\": \"&l2CacheStall_min\",\n \"Max\": \"&l2CacheStall_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles/Kernel\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Command Processor)\"}}\n }},\n\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1 \n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"cpfBusy_avg\": {\"$avg\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_min\": {\"$min\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_max\": {\"$max\": \"&CPF_CPF_STAT_BUSY\"},\n\n \"cpfUtil_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n\n \"cpfStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\": {\"$avg\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_min\": {\"$min\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_max\": {\"$max\": \"&CPF_CPF_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n\n \"utcL1Stall_avg\": {\"$avg\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\": {\"$min\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\": {\"$max\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Busy\",\n \"Avg\": \"&cpfBusy_avg\",\n \"Min\": \"&cpfBusy_min\",\n \"Max\": \"&cpfBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Util\",\n \"Avg\": \"&cpfUtil_avg\",\n \"Min\": \"&cpfUtil_min\",\n \"Max\": \"&cpfUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPF Stall\",\n \"Avg\": \"&cpfStall_avg\",\n \"Min\": \"&cpfStall_min\",\n \"Max\": \"&cpfStall_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Busy\",\n \"Avg\": \"&l2CacheBusy_avg\",\n \"Min\": \"&l2CacheBusy_min\",\n \"Max\": \"&l2CacheBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Stall\",\n \"Avg\": \"&l2CacheStall_avg\",\n \"Min\": \"&l2CacheStall_min\",\n \"Max\": \"&l2CacheStall_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles/Kernel\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Command Processor Fetcher", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 171 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 180 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baselin)" + }, + "properties": [ + { + "id": "custom.width", + "value": 139 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 147 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 11, + "x": 13, + "y": 62 + }, + "id": 4, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n\n \"cpcBusy_avg\": {\"$avg\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_min\": {\"$min\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_max\": {\"$max\": \"&CPC_CPC_STAT_BUSY\"},\n\n \"cpcUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"cpcStall_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallCycles_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallRate_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"cpcPacketDecoding_avg\":{\"$avg\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_min\":{\"$min\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_max\":{\"$max\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n\n \"spiUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\":{\"$avg\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_min\":{\"$min\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_max\":{\"$max\": \"&CPC_CPC_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"utcL1Stall_avg\":{\"$avg\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\":{\"$min\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\":{\"$max\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n\n \"utcL2Busy_avg\":{\"$avg\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_min\":{\"$min\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_max\":{\"$max\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n\n \"utcL2Util_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Busy Cycles\",\n \"Avg\": \"&cpcBusy_avg\",\n \"Min\": \"&cpcBusy_min\",\n \"Max\": \"&cpcBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Util\",\n \"Avg\": \"&cpcUtil_avg\",\n \"Min\": \"&cpcUtil_min\",\n \"Max\": \"&cpcUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Stall Cycles\",\n \"Avg\": \"&cpcStallCycles_avg\",\n \"Min\": \"&cpcStallCycles_min\",\n \"Max\": \"&cpcStallCycles_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Stall Rate\",\n \"Avg\": \"&cpcStallRate_avg\",\n \"Min\": \"&cpcStallRate_min\",\n \"Max\": \"&cpcStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Packet Decoding\",\n \"Avg\": \"&cpcPacketDecoding_avg\",\n \"Min\": \"&cpcPacketDecoding_min\",\n \"Max\": \"&cpcPacketDecoding_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Busy Cycles\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Util\",\n \"Avg\": \"&spiUtil_avg\",\n \"Min\": \"&spiUtil_min\",\n \"Max\": \"&spiUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall Cycles\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Busy Cycles\",\n \"Avg\": \"&utcL2Busy_avg\",\n \"Min\": \"&utcL2Busy_min\",\n \"Max\": \"&utcL2Busy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Util\",\n \"Avg\": \"&utcL2Util_avg\",\n \"Min\": \"&utcL2Util_min\",\n \"Max\": \"&utcL2Util_max\", \n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Command Processor)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"cpcBusy_avg\": {\"$avg\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_min\": {\"$min\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_max\": {\"$max\": \"&CPC_CPC_STAT_BUSY\"},\n\n \"cpcUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"cpcStall_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallCycles_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallRate_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"cpcPacketDecoding_avg\":{\"$avg\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_min\":{\"$min\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_max\":{\"$max\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n\n \"spiUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\":{\"$avg\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_min\":{\"$min\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_max\":{\"$max\": \"&CPC_CPC_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"utcL1Stall_avg\":{\"$avg\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\":{\"$min\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\":{\"$max\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n\n \"utcL2Busy_avg\":{\"$avg\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_min\":{\"$min\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_max\":{\"$max\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n\n \"utcL2Util_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Busy Cycles\",\n \"Avg\": \"&cpcBusy_avg\",\n \"Min\": \"&cpcBusy_min\",\n \"Max\": \"&cpcBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Util\",\n \"Avg\": \"&cpcUtil_avg\",\n \"Min\": \"&cpcUtil_min\",\n \"Max\": \"&cpcUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Stall Cycles\",\n \"Avg\": \"&cpcStallCycles_avg\",\n \"Min\": \"&cpcStallCycles_min\",\n \"Max\": \"&cpcStallCycles_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Stall Rate\",\n \"Avg\": \"&cpcStallRate_avg\",\n \"Min\": \"&cpcStallRate_min\",\n \"Max\": \"&cpcStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Packet Decoding\",\n \"Avg\": \"&cpcPacketDecoding_avg\",\n \"Min\": \"&cpcPacketDecoding_min\",\n \"Max\": \"&cpcPacketDecoding_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Busy Cycles\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Util\",\n \"Avg\": \"&spiUtil_avg\",\n \"Min\": \"&spiUtil_min\",\n \"Max\": \"&spiUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall Cycles\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Busy Cycles\",\n \"Avg\": \"&utcL2Busy_avg\",\n \"Min\": \"&utcL2Busy_min\",\n \"Max\": \"&utcL2Busy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Util\",\n \"Avg\": \"&utcL2Util_avg\",\n \"Min\": \"&utcL2Util_min\",\n \"Max\": \"&utcL2Util_max\", \n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Command Processor Compute", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Metric 1": "", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Command Processor (CPC/CPF)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 102, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 101 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 96 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 145 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg 2" + }, + "properties": [ + { + "id": "custom.width", + "value": 97 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min 2" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 123 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 0, + "y": 63 + }, + "id": 106, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"csBusy_avg\":{\"$avg\": \"&SPI_CSN_BUSY\"},\n \"csBusy_min\":{\"$min\": \"&SPI_CSN_BUSY\"},\n \"csBusy_max\":{\"$max\": \"&SPI_CSN_BUSY\"},\n\n \"gpuBusy_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&GRBM_SPI_BUSY\"},\n\n \"sqBusy_avg\":{\"$avg\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_min\":{\"$min\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_max\":{\"$max\": \"&SQ_BUSY_CYCLES\"},\n\n \"dispatchedWorkgroups_avg\":{\"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_min\":{\"$min\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_max\":{\"$max\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n\n \"dispatchedWavefronts_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n\n \"waveAllocFail_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC\"},\n\n \"waveAllocFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Busy\",\n \"Avg\": \"&csBusy_avg\",\n \"Min\": \"&csBusy_min\",\n \"Max\": \"&csBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Busy\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SQ Busy\",\n \"Avg\": \"&sqBusy_avg\",\n \"Min\": \"&sqBusy_min\",\n \"Max\": \"&sqBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Dispatched Workgroups\",\n \"Avg\": \"&dispatchedWorkgroups_avg\",\n \"Min\": \"&dispatchedWorkgroups_min\",\n \"Max\": \"&dispatchedWorkgroups_max\", \n \"Unit\": \"Workgroups\"\n },\n {\n \"Metric\": \"Dispatched Wavefronts\",\n \"Avg\": \"&dispatchedWavefronts_avg\",\n \"Min\": \"&dispatchedWavefronts_min\",\n \"Max\": \"&dispatchedWavefronts_max\", \n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Wave Alloc Failed\",\n \"Avg\": \"&waveAllocFail_avg\",\n \"Min\": \"&waveAllocFail_min\",\n \"Max\": \"&waveAllocFail_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Wave Alloc Failed - CS\",\n \"Avg\": \"&waveAllocFailCS_avg\",\n \"Min\": \"&waveAllocFailCS_min\",\n \"Max\": \"&waveAllocFailCS_max\", \n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Shader Processor Input)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"csBusy_avg\":{\"$avg\": \"&SPI_CSN_BUSY\"},\n \"csBusy_min\":{\"$min\": \"&SPI_CSN_BUSY\"},\n \"csBusy_max\":{\"$max\": \"&SPI_CSN_BUSY\"},\n\n \"gpuBusy_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&GRBM_SPI_BUSY\"},\n\n \"sqBusy_avg\":{\"$avg\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_min\":{\"$min\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_max\":{\"$max\": \"&SQ_BUSY_CYCLES\"},\n\n \"dispatchedWorkgroups_avg\":{\"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_min\":{\"$min\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_max\":{\"$max\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n\n \"dispatchedWavefronts_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"waveAllocFail_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC\"},\n\n \"waveAllocFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Busy\",\n \"Avg\": \"&csBusy_avg\",\n \"Min\": \"&csBusy_min\",\n \"Max\": \"&csBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Busy\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SQ Busy\",\n \"Avg\": \"&sqBusy_avg\",\n \"Min\": \"&sqBusy_min\",\n \"Max\": \"&sqBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Dispatched Workgroups\",\n \"Avg\": \"&dispatchedWorkgroups_avg\",\n \"Min\": \"&dispatchedWorkgroups_min\",\n \"Max\": \"&dispatchedWorkgroups_max\", \n \"Unit\": \"Workgroups\"\n },\n {\n \"Metric\": \"Dispatched Wavefronts\",\n \"Avg\": \"&dispatchedWavefronts_avg\",\n \"Min\": \"&dispatchedWavefronts_min\",\n \"Max\": \"&dispatchedWavefronts_max\", \n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Wave Alloc Failed\",\n \"Avg\": \"&waveAllocFail_avg\",\n \"Min\": \"&waveAllocFail_min\",\n \"Max\": \"&waveAllocFail_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Wave Alloc Failed - CS\",\n \"Avg\": \"&waveAllocFailCS_avg\",\n \"Min\": \"&waveAllocFailCS_min\",\n \"Max\": \"&waveAllocFailCS_max\", \n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "SPI Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit 1": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 285 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 102 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 122 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 242 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 12, + "y": 63 + }, + "id": 104, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"waveReqFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n\n \"csStall_avg\":{\"$avg\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_min\":{\"$min\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_max\":{\"$max\": \"&SPI_RA_RES_STALL_CSN\"},\n\n \"csStallRate_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n\n \"scratchStall_avg\":{\"$avg\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_min\":{\"$min\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_max\":{\"$max\": \"&SPI_RA_TMP_STALL_CSN\"},\n\n \"simdWaveslots_avg\":{\"$avg\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_min\":{\"$min\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_max\":{\"$max\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n\n \"simdVGPRs_avg\":{\"$avg\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_min\":{\"$min\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_max\":{\"$max\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n\n \"simdSGPRs_avg\":{\"$avg\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_min\":{\"$min\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_max\":{\"$max\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n\n \"cuLDS_avg\":{\"$avg\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_min\":{\"$min\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_max\":{\"$max\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n\n \"cuBarries_avg\":{\"$avg\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_min\":{\"$min\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_max\":{\"$max\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n\n \"bulkyResource_avg\":{\"$avg\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_min\":{\"$min\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_max\":{\"$max\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n\n \"threadgroupLimit_avg\":{\"$avg\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_min\":{\"$min\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_max\":{\"$max\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n\n \"waveLimit_avg\":{\"$avg\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_min\":{\"$min\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_max\":{\"$max\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n\n \"vgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n\n \"sgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \n \n \"sgprsWritesUti_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave request Failed (CS)\",\n \"Avg\": \"&waveReqFailCS_avg\",\n \"Min\": \"&waveReqFailCS_min\",\n \"Max\": \"&waveReqFailCS_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall\",\n \"Avg\": \"&csStall_avg\",\n \"Min\": \"&csStall_min\",\n \"Max\": \"&csStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall Rate\",\n \"Avg\": \"&csStallRate_avg\",\n \"Min\": \"&csStallRate_min\",\n \"Max\": \"&csStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Scratch Stall\",\n \"Avg\": \"&scratchStall_avg\",\n \"Min\": \"&scratchStall_min\",\n \"Max\": \"&scratchStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Insufficient SIMD Waveslots\",\n \"Avg\": \"&simdWaveslots_avg\",\n \"Min\": \"&simdWaveslots_min\",\n \"Max\": \"&simdWaveslots_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD VGPRs\",\n \"Avg\": \"&simdVGPRs_avg\",\n \"Min\": \"&simdVGPRs_min\",\n \"Max\": \"&simdVGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD SGPRs\",\n \"Avg\": \"&simdSGPRs_avg\",\n \"Min\": \"&simdSGPRs_min\",\n \"Max\": \"&simdSGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient CU LDS\",\n \"Avg\": \"&cuLDS_avg\",\n \"Min\": \"&cuLDS_min\",\n \"Max\": \"&cuLDS_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient CU Barries\",\n \"Avg\": \"&cuBarries_avg\",\n \"Min\": \"&cuBarries_min\",\n \"Max\": \"&cuBarries_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient Bulky Resource\",\n \"Avg\": \"&bulkyResource_avg\",\n \"Min\": \"&bulkyResource_min\",\n \"Max\": \"&bulkyResource_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Reach CU Threadgroups Limit\",\n \"Avg\": \"&threadgroupLimit_avg\",\n \"Min\": \"&threadgroupLimit_min\",\n \"Max\": \"&threadgroupLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Reach CU Wave Limit\",\n \"Avg\": \"&waveLimit_avg\",\n \"Min\": \"&waveLimit_min\",\n \"Max\": \"&waveLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"VGPR Writes\",\n \"Avg\": \"&vgprsWrites_avg\",\n \"Min\": \"&vgprsWrites_min\",\n \"Max\": \"&vgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"SGPR Writes\",\n \"Avg\": \"&sgprsWrites_avg\",\n \"Min\": \"&sgprsWrites_min\",\n \"Max\": \"&sgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Shader Processor Input)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"waveReqFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n\n \"csStall_avg\":{\"$avg\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_min\":{\"$min\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_max\":{\"$max\": \"&SPI_RA_RES_STALL_CSN\"},\n\n \"csStallRate_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n\n \"scratchStall_avg\":{\"$avg\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_min\":{\"$min\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_max\":{\"$max\": \"&SPI_RA_TMP_STALL_CSN\"},\n\n \"simdWaveslots_avg\":{\"$avg\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_min\":{\"$min\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_max\":{\"$max\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n\n \"simdVGPRs_avg\":{\"$avg\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_min\":{\"$min\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_max\":{\"$max\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n\n \"simdSGPRs_avg\":{\"$avg\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_min\":{\"$min\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_max\":{\"$max\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n\n \"cuLDS_avg\":{\"$avg\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_min\":{\"$min\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_max\":{\"$max\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n\n \"cuBarries_avg\":{\"$avg\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_min\":{\"$min\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_max\":{\"$max\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n\n \"bulkyResource_avg\":{\"$avg\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_min\":{\"$min\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_max\":{\"$max\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n\n \"threadgroupLimit_avg\":{\"$avg\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_min\":{\"$min\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_max\":{\"$max\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n\n \"waveLimit_avg\":{\"$avg\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_min\":{\"$min\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_max\":{\"$max\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n\n \"vgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n\n \"sgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \n \n \"sgprsWritesUti_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave request Failed (CS)\",\n \"Avg\": \"&waveReqFailCS_avg\",\n \"Min\": \"&waveReqFailCS_min\",\n \"Max\": \"&waveReqFailCS_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall\",\n \"Avg\": \"&csStall_avg\",\n \"Min\": \"&csStall_min\",\n \"Max\": \"&csStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall Rate\",\n \"Avg\": \"&csStallRate_avg\",\n \"Min\": \"&csStallRate_min\",\n \"Max\": \"&csStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Scratch Stall\",\n \"Avg\": \"&scratchStall_avg\",\n \"Min\": \"&scratchStall_min\",\n \"Max\": \"&scratchStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Insufficient SIMD Waveslots\",\n \"Avg\": \"&simdWaveslots_avg\",\n \"Min\": \"&simdWaveslots_min\",\n \"Max\": \"&simdWaveslots_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD VGPRs\",\n \"Avg\": \"&simdVGPRs_avg\",\n \"Min\": \"&simdVGPRs_min\",\n \"Max\": \"&simdVGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD SGPRs\",\n \"Avg\": \"&simdSGPRs_avg\",\n \"Min\": \"&simdSGPRs_min\",\n \"Max\": \"&simdSGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient CU LDS\",\n \"Avg\": \"&cuLDS_avg\",\n \"Min\": \"&cuLDS_min\",\n \"Max\": \"&cuLDS_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient CU Barries\",\n \"Avg\": \"&cuBarries_avg\",\n \"Min\": \"&cuBarries_min\",\n \"Max\": \"&cuBarries_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient Bulky Resource\",\n \"Avg\": \"&bulkyResource_avg\",\n \"Min\": \"&bulkyResource_min\",\n \"Max\": \"&bulkyResource_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Reach CU Threadgroups Limit\",\n \"Avg\": \"&threadgroupLimit_avg\",\n \"Min\": \"&threadgroupLimit_min\",\n \"Max\": \"&threadgroupLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Reach CU Wave Limit\",\n \"Avg\": \"&waveLimit_avg\",\n \"Min\": \"&waveLimit_min\",\n \"Max\": \"&waveLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"VGPR Writes\",\n \"Avg\": \"&vgprsWrites_avg\",\n \"Min\": \"&vgprsWrites_min\",\n \"Max\": \"&vgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"SGPR Writes\",\n \"Avg\": \"&sgprsWrites_avg\",\n \"Min\": \"&sgprsWrites_min\",\n \"Max\": \"&sgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "SPI Resource Allocation", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Shader Processor Input (SPI)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 185, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 169 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 142 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 196 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 174 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max" + }, + "properties": [ + { + "id": "custom.width", + "value": 168 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min" + }, + "properties": [ + { + "id": "custom.width", + "value": 272 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 225 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 100 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 64 + }, + "id": 10, + "interval": "12h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"gridSize_avg\":{\"$avg\": \"&grd\"},\n \"gridSize_min\":{\"$min\": \"&grd\"},\n \"gridSize_max\":{\"$max\": \"&grd\"},\n\n \"workSize_avg\":{\"$avg\": \"&wgr\"},\n \"workSize_min\":{\"$min\": \"&wgr\"},\n \"workSize_max\":{\"$max\": \"&wgr\"},\n\n \"totWavefront_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"savedWavefront_avg\":{\"$avg\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_min\":{\"$min\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_max\":{\"$max\": \"&SQ_WAVES_SAVED\"},\n\n \"restoredWavefront_avg\":{\"$avg\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_min\":{\"$min\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_max\":{\"$max\": \"&SQ_WAVES_RESTORED\"},\n\n \"vgprs_avg\":{\"$avg\": \"&vgpr\"},\n \"vgprs_min\":{\"$min\": \"&vgpr\"},\n \"vgprs_max\":{\"$max\": \"&vgpr\"},\n\n \"sgprs_avg\":{\"$avg\": \"&sgpr\"},\n \"sgprs_min\":{\"$min\": \"&sgpr\"},\n \"sgprs_max\":{\"$max\": \"&sgpr\"},\n\n \"ldsAlloc_avg\":{\"$avg\": \"&lds\"},\n \"ldsAlloc_min\":{\"$min\": \"&lds\"},\n \"ldsAlloc_max\":{\"$max\": \"&lds\"},\n\n \"scratchAlloc_avg\":{\"$avg\": \"&scr\"},\n \"scratchAlloc_min\":{\"$min\": \"&scr\"},\n \"scratchAlloc_max\":{\"$max\": \"&scr\"}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Grid Size\",\n \"Avg\": \"&gridSize_avg\",\n \"Min\": \"&gridSize_min\",\n \"Max\": \"&gridSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Workgroup Size\",\n \"Avg\": \"&workSize_avg\",\n \"Min\": \"&workSize_min\",\n \"Max\": \"&workSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Total Wavefronts\",\n \"Avg\": \"&totWavefront_avg\",\n \"Min\": \"&totWavefront_min\",\n \"Max\": \"&totWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Saved Wavefronts\",\n \"Avg\": \"&savedWavefront_avg\",\n \"Min\": \"&savedWavefront_min\",\n \"Max\": \"&savedWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Restored Wavefronts\",\n \"Avg\": \"&restoredWavefront_avg\",\n \"Min\": \"&restoredWavefront_min\",\n \"Max\": \"&restoredWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"VGPRs\",\n \"Avg\": \"&vgprs_avg\",\n \"Min\": \"&vgprs_min\",\n \"Max\": \"&vgprs_max\",\n \"Unit\": \"Registers\"\n },\n {\n \"Metric\": \"SGPRs\",\n \"Avg\": \"&sgprs_avg\",\n \"Min\": \"&sgprs_min\",\n \"Max\": \"&sgprs_max\",\n \"Unit\":\"Registers\"\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Avg\": \"&ldsAlloc_avg\",\n \"Min\": \"&ldsAlloc_min\",\n \"Max\": \"&ldsAlloc_max\",\n \"Unit\": \"Bytes\"\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Avg\": \"&scratchAlloc_avg\",\n \"Min\": \"&scratchAlloc_min\",\n \"Max\": \"&scratchAlloc_max\",\n \"Unit\": \"Bytes\"\n }\n \n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"gridSize_avg\":{\"$avg\": \"&grd\"},\n \"gridSize_min\":{\"$min\": \"&grd\"},\n \"gridSize_max\":{\"$max\": \"&grd\"},\n\n \"workSize_avg\":{\"$avg\": \"&wgr\"},\n \"workSize_min\":{\"$min\": \"&wgr\"},\n \"workSize_max\":{\"$max\": \"&wgr\"},\n\n\n \"totWavefront_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"savedWavefront_avg\":{\"$avg\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_min\":{\"$min\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_max\":{\"$max\": \"&SQ_WAVES_SAVED\"},\n\n \"restoredWavefront_avg\":{\"$avg\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_min\":{\"$min\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_max\":{\"$max\": \"&SQ_WAVES_RESTORED\"},\n\n\n \"vgprs_avg\":{\"$avg\": \"&vgpr\"},\n \"vgprs_min\":{\"$min\": \"&vgpr\"},\n \"vgprs_max\":{\"$max\": \"&vgpr\"},\n\n \"sgprs_avg\":{\"$avg\": \"&sgpr\"},\n \"sgprs_min\":{\"$min\": \"&sgpr\"},\n \"sgprs_max\":{\"$max\": \"&sgpr\"},\n\n \"ldsAlloc_avg\":{\"$avg\": \"&lds\"},\n \"ldsAlloc_min\":{\"$min\": \"&lds\"},\n \"ldsAlloc_max\":{\"$max\": \"&lds\"},\n\n \"scratchAlloc_avg\":{\"$avg\": \"&scr\"},\n \"scratchAlloc_min\":{\"$min\": \"&scr\"},\n \"scratchAlloc_max\":{\"$max\": \"&scr\"}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Grid Size\",\n \"Avg\": \"&gridSize_avg\",\n \"Min\": \"&gridSize_min\",\n \"Max\": \"&gridSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Workgroup Size\",\n \"Avg\": \"&workSize_avg\",\n \"Min\": \"&workSize_min\",\n \"Max\": \"&workSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Total Wavefronts\",\n \"Avg\": \"&totWavefront_avg\",\n \"Min\": \"&totWavefront_min\",\n \"Max\": \"&totWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Saved Wavefronts\",\n \"Avg\": \"&savedWavefront_avg\",\n \"Min\": \"&savedWavefront_min\",\n \"Max\": \"&savedWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Restored Wavefronts\",\n \"Avg\": \"&restoredWavefront_avg\",\n \"Min\": \"&restoredWavefront_min\",\n \"Max\": \"&restoredWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"VGPRs\",\n \"Avg\": \"&vgprs_avg\",\n \"Min\": \"&vgprs_min\",\n \"Max\": \"&vgprs_max\",\n \"Unit\": \"Registers\"\n },\n {\n \"Metric\": \"SGPRs\",\n \"Avg\": \"&sgprs_avg\",\n \"Min\": \"&sgprs_min\",\n \"Max\": \"&sgprs_max\",\n \"Unit\":\"Registers\"\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Avg\": \"&ldsAlloc_avg\",\n \"Min\": \"&ldsAlloc_min\",\n \"Max\": \"&ldsAlloc_max\",\n \"Unit\": \"Bytes\"\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Avg\": \"&scratchAlloc_avg\",\n \"Min\": \"&scratchAlloc_min\",\n \"Max\": \"&scratchAlloc_max\",\n \"Unit\": \"Bytes\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Wavefront Launch Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true, + "Units 2": true, + "metric 2": true + }, + "indexByName": { + "Avg 1": 1, + "Avg 2": 2, + "Max 1": 5, + "Max 2": 6, + "Metric 1": 0, + "Metric 2": 7, + "Min 1": 3, + "Min 2": 4, + "Unit 1": 9, + "Unit 2": 8 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 122 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 106 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 223 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 169 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 133 + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 64 + }, + "id": 34, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"instrWavefront_avg\":{\"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_min\":{\"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_max\":{\"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n\n \"waveCycles_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n\n \"depWaitingCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"issueWaitCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"activeCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"kernelTime_avg\":{\"$avg\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_min\":{\"$min\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_max\":{\"$max\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n\n \"kernelCycle_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Kernel Time (Nanosec)\",\n \"Avg\": \"&kernelTime_avg\",\n \"Min\": \"&kernelTime_min\",\n \"Max\": \"&kernelTime_max\",\n \"Unit\":\"ns\"\n },\n {\n \"Metric\": \"Kernel Time (Cycles)\",\n \"Avg\": \"&kernelCycle_avg\",\n \"Min\": \"&kernelCycle_min\",\n \"Max\": \"&kernelCycle_max\",\n \"Unit\":\"Cycle\"\n },\n\n {\n \"Metric\": \"Instr/wavefront\",\n \"Avg\": \"&instrWavefront_avg\",\n \"Min\": \"&instrWavefront_min\",\n \"Max\": \"&instrWavefront_max\",\n \"Unit\": \"Instr/wavefront\"\n },\n {\n \"Metric\": \"Wave Cycles\",\n \"Avg\": \"&waveCycles_avg\",\n \"Min\": \"&waveCycles_min\",\n \"Max\": \"&waveCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Dependency Wait Cycles\",\n \"Avg\": \"&depWaitingCycles_avg\",\n \"Min\": \"&depWaitingCycles_min\",\n \"Max\": \"&depWaitingCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Issue Wait Cycles\",\n \"Avg\": \"&issueWaitCycles_avg\",\n \"Min\": \"&issueWaitCycles_min\",\n \"Max\": \"&issueWaitCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Active Cycles\",\n \"Avg\": \"&activeCycles_avg\",\n \"Min\": \"&activeCycles_min\",\n \"Max\": \"&activeCycles_max\",\n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"occAvg\": {\"$avg\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMin\": {\"$min\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMax\": {\"$max\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } }\n }},\n {\"$project\": {\n \"_id\":0,\n \"Metric\": \"Wavefront Occupancy\",\n \"Avg\": \"&occAvg\",\n \"Min\":\"&occMin\",\n \"Max\":\"&occMax\",\n \"Unit\":\"Wavefronts\"\n }}\n ]\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"instrWavefront_avg\":{\"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_min\":{\"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_max\":{\"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n\n \"waveCycles_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n\n \"depWaitingCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"issueWaitCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"activeCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"kernelTime_avg\":{\"$avg\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_min\":{\"$min\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_max\":{\"$max\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n\n \"kernelCycle_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Kernel Time (Nanosec)\",\n \"Avg\": \"&kernelTime_avg\",\n \"Min\": \"&kernelTime_min\",\n \"Max\": \"&kernelTime_max\",\n \"Unit\":\"ns\"\n },\n {\n \"Metric\": \"Kernel Time (Cycles)\",\n \"Avg\": \"&kernelCycle_avg\",\n \"Min\": \"&kernelCycle_min\",\n \"Max\": \"&kernelCycle_max\",\n \"Unit\":\"Cycle\"\n },\n\n {\n \"Metric\": \"Instr/wavefront\",\n \"Avg\": \"&instrWavefront_avg\",\n \"Min\": \"&instrWavefront_min\",\n \"Max\": \"&instrWavefront_max\",\n \"Unit\": \"Instr/wavefront\"\n },\n {\n \"Metric\": \"Wave Cycles\",\n \"Avg\": \"&waveCycles_avg\",\n \"Min\": \"&waveCycles_min\",\n \"Max\": \"&waveCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Dependency Wait Cycles\",\n \"Avg\": \"&depWaitingCycles_avg\",\n \"Min\": \"&depWaitingCycles_min\",\n \"Max\": \"&depWaitingCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Issue Wait Cycles\",\n \"Avg\": \"&issueWaitCycles_avg\",\n \"Min\": \"&issueWaitCycles_min\",\n \"Max\": \"&issueWaitCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Active Cycles\",\n \"Avg\": \"&activeCycles_avg\",\n \"Min\": \"&activeCycles_min\",\n \"Max\": \"&activeCycles_max\",\n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"occAvg\": {\"$avg\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMin\": {\"$min\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMax\": {\"$max\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } }\n }},\n {\"$project\": {\n \"_id\":0,\n \"Metric\": \"Wavefront Occupancy\",\n \"Avg\": \"&occAvg\",\n \"Min\":\"&occMin\",\n \"Max\":\"&occMax\",\n \"Unit\":\"Wavefronts\"\n }}\n ]\n }}\n ]);", + "type": "table" + } + ], + "title": "Wavefront Runtime Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg": "", + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit 1": "", + "Unit 2": "" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Wavefront", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 209, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 12, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": { + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"valu\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_MFMA\"]}, \"&denom\" ] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_MFMA\", \"&denom\" ] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VMEM\", \"&SQ_INSTS_FLAT_LDS_ONLY\"]}, \"&denom\" ] }\n },\n \"lds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_LDS\", \"&denom\" ] }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"branch\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_BRANCH\", \"&denom\" ] }\n },\n \"gds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_GDS\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"VALU - Vector\",\n \"count\": \"&valu\"\n },\n {\n \"metric\": \"VMEM\",\n \"count\": \"&vmem\"\n },\n {\n \"metric\": \"LDS\",\n \"count\": \"&lds\"\n },\n {\n \"metric\": \"VALU - MFMA\",\n \"count\": \"&mfma\"\n },\n {\n \"metric\": \"SALU\",\n \"count\": \"&salu\"\n },\n {\n \"metric\": \"SMEM\",\n \"count\": \"&smem\"\n },\n {\n \"metric\": \"Branch\",\n \"count\": \"&branch\"\n },\n {\n \"metric\": \"GDS\",\n \"count\": \"&gds\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n \n {\"$group\": {\n \"_id\": null,\n \"valu\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_MFMA\"]}, \"&denom\" ] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_MFMA\", \"&denom\" ] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VMEM\", \"&SQ_INSTS_FLAT_LDS_ONLY\"]}, \"&denom\" ] }\n },\n \"lds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_LDS\", \"&denom\" ] }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"branch\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_BRANCH\", \"&denom\" ] }\n },\n \"gds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_GDS\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"VALU - Vector (Baseline)\",\n \"count\": \"&valu\"\n },\n {\n \"metric\": \"VMEM (Baseline)\",\n \"count\": \"&vmem\"\n },\n {\n \"metric\": \"LDS (Baseline)\",\n \"count\": \"&lds\"\n },\n {\n \"metric\": \"VALU - MFMA (Baseline)\",\n \"count\": \"&mfma\"\n },\n {\n \"metric\": \"SALU (Baseline)\",\n \"count\": \"&salu\"\n },\n {\n \"metric\": \"SMEM (Baseline)\",\n \"count\": \"&smem\"\n },\n {\n \"metric\": \"Branch (Baseline)\",\n \"count\": \"&branch\"\n },\n {\n \"metric\": \"GDS (Baseline)\",\n \"count\": \"&gds\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Instruction Mix", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "metric" + } + ] + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 24, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 24, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^count$/", + "limit": 100, + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"count_int_i32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT32\", \"&denom\" ] }\n },\n \"count_int_i64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT64\", \"&denom\" ] }\n },\n \"count_f16_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F16\", \"&denom\" ] }\n },\n \"count_f16_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F16\", \"&denom\" ] }\n },\n \"count_f16_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F16\", \"&denom\" ] }\n },\n \"count_f16_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F16\", \"&denom\" ] }\n },\n \"count_f32_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F32\", \"&denom\" ] }\n },\n \"count_f32_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F32\", \"&denom\" ] }\n },\n \"count_f32_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F32\", \"&denom\" ] }\n },\n \"count_f32_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F32\", \"&denom\" ] }\n },\n \"count_f64_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F64\", \"&denom\" ] }\n },\n \"count_f64_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F64\", \"&denom\" ] }\n },\n \"count_f64_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F64\", \"&denom\" ] }\n },\n \"count_f64_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F64\", \"&denom\" ] }\n },\n \"conversion\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_CVT\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"INT32\",\n \"count\": \"&count_int_i32\"\n },\n {\n \"metric\": \"INT64\",\n \"count\": \"&count_int_i64\"\n },\n {\n \"metric\": \"F16-ADD\",\n \"count\": \"&count_f16_add\"\n },\n {\n \"metric\": \"F16-MUL\",\n \"count\": \"&count_f16_MUL\"\n },\n {\n \"metric\": \"F16-FMA\",\n \"count\": \"&count_f16_fma\"\n },\n {\n \"metric\": \"F16-Trans\",\n \"count\": \"&count_f16_trans\"\n },\n {\n \"metric\": \"F32-ADD\",\n \"count\": \"&count_f32_add\"\n },\n {\n \"metric\": \"F32-MUL\",\n \"count\": \"&count_f32_MUL\"\n },\n {\n \"metric\": \"F32-FMA\",\n \"count\": \"&count_f32_fma\"\n },\n {\n \"metric\": \"F32-Trans\",\n \"count\": \"&count_f32_trans\"\n },\n {\n \"metric\": \"F64-ADD\",\n \"count\": \"&count_f64_add\"\n },\n {\n \"metric\": \"F64-MUL\",\n \"count\": \"&count_f64_MUL\"\n },\n {\n \"metric\": \"F64-FMA\",\n \"count\": \"&count_f64_fma\"\n },\n {\n \"metric\": \"F64-Trans\",\n \"count\": \"&count_f64_trans\"\n },\n {\n \"metric\": \"Conversion\",\n \"count\": \"&conversion\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"count_int_i32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT32\", \"&denom\" ] }\n },\n \"count_int_i64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT64\", \"&denom\" ] }\n },\n \"count_f16_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F16\", \"&denom\" ] }\n },\n \"count_f16_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F16\", \"&denom\" ] }\n },\n \"count_f16_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F16\", \"&denom\" ] }\n },\n \"count_f16_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F16\", \"&denom\" ] }\n },\n \"count_f32_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F32\", \"&denom\" ] }\n },\n \"count_f32_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F32\", \"&denom\" ] }\n },\n \"count_f32_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F32\", \"&denom\" ] }\n },\n \"count_f32_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F32\", \"&denom\" ] }\n },\n \"count_f64_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F64\", \"&denom\" ] }\n },\n \"count_f64_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F64\", \"&denom\" ] }\n },\n \"count_f64_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F64\", \"&denom\" ] }\n },\n \"count_f64_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F64\", \"&denom\" ] }\n },\n \"conversion\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_CVT\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"INT32 (Baseline)\",\n \"count\": \"&count_int_i32\"\n },\n {\n \"metric\": \"INT64 (Baseline)\",\n \"count\": \"&count_int_i64\"\n },\n {\n \"metric\": \"F16-ADD (Baseline)\",\n \"count\": \"&count_f16_add\"\n },\n {\n \"metric\": \"F16-MUL (Baseline)\",\n \"count\": \"&count_f16_MUL\"\n },\n {\n \"metric\": \"F16-FMA (Baseline)\",\n \"count\": \"&count_f16_fma\"\n },\n {\n \"metric\": \"F16-Trans (Baseline)\",\n \"count\": \"&count_f16_trans\"\n },\n {\n \"metric\": \"F32-ADD (Baseline)\",\n \"count\": \"&count_f32_add\"\n },\n {\n \"metric\": \"F32-MUL (Baseline)\",\n \"count\": \"&count_f32_MUL\"\n },\n {\n \"metric\": \"F32-FMA (Baseline)\",\n \"count\": \"&count_f32_fma\"\n },\n {\n \"metric\": \"F32-Trans (Baseline)\",\n \"count\": \"&count_f32_trans\"\n },\n {\n \"metric\": \"F64-ADD (Baseline)\",\n \"count\": \"&count_f64_add\"\n },\n {\n \"metric\": \"F64-MUL (Baseline)\",\n \"count\": \"&count_f64_MUL\"\n },\n {\n \"metric\": \"F64-FMA (Baseline)\",\n \"count\": \"&count_f64_fma\"\n },\n {\n \"metric\": \"F64-Trans (Baseline)\",\n \"count\": \"&count_f64_trans\"\n },\n {\n \"metric\": \"Conversion (Baseline)\",\n \"count\": \"&conversion\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "VALU Arithmetic Instr Mix", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "metric" + } + ] + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 275, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"buffer_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \n \"flat_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"Buffer Instr\",\n \"count\": \"&buffer_instr\"\n },\n {\n \"type\": \"Buffer Read\",\n \"count\": \"&buffer_read\"\n },\n {\n \"type\": \"Buffer Write\",\n \"count\": \"&buffer_write\"\n },\n {\n \"type\": \"Buffer Atomic\",\n \"count\": \"&buffer_atomic\"\n },\n {\n \"type\": \"Flat Instr\",\n \"count\": \"&flat_instr\"\n },\n {\n \"type\": \"Flat Read\",\n \"count\": \"&flat_read\"\n },\n {\n \"type\": \"Flat Write\",\n \"count\": \"&flat_write\"\n },\n {\n \"type\": \"Flat Atomic\",\n \"count\": \"&flat_atomic\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"buffer_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n\n \"flat_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"Buffer Instr (Baseline)\",\n \"count\": \"&buffer_instr\"\n },\n {\n \"type\": \"Buffer Read (Baseline)\",\n \"count\": \"&buffer_read\"\n },\n {\n \"type\": \"Buffer Write (Baseline)\",\n \"count\": \"&buffer_write\"\n },\n {\n \"type\": \"Buffer Atomic (Baseline)\",\n \"count\": \"&buffer_atomic\"\n },\n {\n \"type\": \"Flat Instr (Baseline)\",\n \"count\": \"&flat_instr\"\n },\n {\n \"type\": \"Flat Read (Baseline)\",\n \"count\": \"&flat_read\"\n },\n {\n \"type\": \"Flat Write (Baseline)\",\n \"count\": \"&flat_write\"\n },\n {\n \"type\": \"Flat Atomic (Baseline)\",\n \"count\": \"&flat_atomic\"\n }\n\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "VMEM Instr Mix", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "type 2": true + }, + "indexByName": {}, + "renameByName": { + "count": "Count", + "count 1": "Avg (Current)", + "count 2": "Avg (Baseline)", + "type": "VMEM Instr", + "type 1": "VMEM Instr" + } + } + } + ], + "transparent": true, + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 16, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"mmfa_i8\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_I8\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_f16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F16\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_bf16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_BF16\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F32\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F64\", \"&SQ_WAVES\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"MFMA-I8\",\n \"count\": \"&mmfa_i8\"\n },\n {\n \"type\": \"MFMA-F16\",\n \"count\": \"&mmfa_f16\"\n },\n {\n \"type\": \"MFMA-BF16\",\n \"count\": \"&mmfa_bf16\"\n },\n {\n \"type\": \"MFMA-F32\",\n \"count\": \"&mfma_f32\"\n },\n {\n \"type\": \"MFMA-F64\",\n \"count\": \"&mfma_f64\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"mmfa_i8\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_I8\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_f16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F16\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_bf16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_BF16\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F32\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F64\", \"&SQ_WAVES\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"MFMA-I8 (Baseline)\",\n \"count\": \"&mmfa_i8\"\n },\n {\n \"type\": \"MFMA-F16 (Baseline)\",\n \"count\": \"&mmfa_f16\"\n },\n {\n \"type\": \"MFMA-BF16 (Baseline)\",\n \"count\": \"&mmfa_bf16\"\n },\n {\n \"type\": \"MFMA-F32 (Baseline)\",\n \"count\": \"&mfma_f32\"\n },\n {\n \"type\": \"MFMA-F64 (Baseline)\",\n \"count\": \"&mfma_f64\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "MFMA Arithmetic Instr Mix", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "type 2": true + }, + "indexByName": {}, + "renameByName": { + "count": "Count", + "count 1": "Avg (Current)", + "count 2": "Avg (Baseline)", + "type": "MFMA Instr", + "type 1": "MFMA Instr" + } + } + } + ], + "transparent": true, + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Compute Unit - Instruction Mix", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 8, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 211, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 14 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n\n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } }\n\n }}, \n {\"$set\": {\n \"array\": [\n {\n \"valu_flops_pop\": {\"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }] },\n \"mfma_flops_bf16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] }]},\n \"mfma_flops_f16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]},\n \"mfma_flops_f32_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]},\n \"mfma_flops_f64_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]},\n \"mfma_flops_i8_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]}\n }\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n\n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n\n \"instr_val\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }\n\n }}, \n {\"$set\": {\n \"array\": [\n {\n \"valu_flops_pop\": {\"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }] },\n \"mfma_flops_bf16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] }]},\n \"mfma_flops_f16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]},\n \"mfma_flops_f32_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]},\n \"mfma_flops_f64_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]},\n \"mfma_flops_i8_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]}\n }\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Compute Pipeline", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "mfma_flops_bf16_pop 1": 4, + "mfma_flops_bf16_pop 2": 5, + "mfma_flops_f16_pop 1": 6, + "mfma_flops_f16_pop 2": 7, + "mfma_flops_f32_pop 1": 8, + "mfma_flops_f32_pop 2": 9, + "mfma_flops_f64_pop 1": 10, + "mfma_flops_f64_pop 2": 11, + "mfma_flops_i8_pop 1": 12, + "mfma_flops_i8_pop 2": 13, + "valu_flops_pop 1": 0, + "valu_flops_pop 2": 1, + "valu_iops_pop 1": 2, + "valu_iops_pop 2": 3 + }, + "renameByName": { + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "Bandwith (Pct-of-Peak)": "", + "Bandwith (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "Bandwith (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline) ", + "Bank Conflict Rate 1": "Bank Conflict Rate (Current)", + "Bank Conflict Rate 2": "Bank Conflict Rate (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Latency (Cycles) 1": "Latency (Current) [Cycles]", + "Latency (Cycles) 2": "Latency (Baseline) [Cycles]", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)", + "flops_pop": "FLOPs", + "flops_pop 1": "FLOPs (Current)", + "flops_pop 2": "FLOPs (Baseline)", + "iops_pop": "IOPs", + "iops_pop 1": "IOPs (Current)", + "iops_pop 2": "IOPs (Baseline)", + "mfma_flops_bf16_pop": "MFMA- BF16 (FLOPs)", + "mfma_flops_bf16_pop 1": "MFMA-BF16 (Cur)", + "mfma_flops_bf16_pop 2": "MFMA-BF16 (Baseline)", + "mfma_flops_f16_pop": "MFMA-F16 (FLOPs)", + "mfma_flops_f16_pop 1": "MFMA-F16 (Cur)", + "mfma_flops_f16_pop 2": "MFMA-F16 (Baseline)", + "mfma_flops_f32_pop": "MFMA-F32 (FLOPs)", + "mfma_flops_f32_pop 1": "MFMA-F32 (Cur)", + "mfma_flops_f32_pop 2": "MFMA-F32 (Baseline)", + "mfma_flops_f64_pop": "MFMA-F64 (FLOPs)", + "mfma_flops_f64_pop 1": "MFMA-F64 (Cur)", + "mfma_flops_f64_pop 2": "MFMA-F64 (Baseline)", + "mfma_flops_i8_pop": "MFMA-i8 (IOPs)", + "mfma_flops_i8_pop 1": "MFMA-I8 (Cur)", + "mfma_flops_i8_pop 2": "MFMA-I8 (Baseline)", + "valu_flops_pop": "VALU (FLOPs)", + "valu_flops_pop 1": "VALU FLOPs (Cur)", + "valu_flops_pop 2": "VALU FLOPs (Baseline)", + "valu_iops_pop": "VALU (IOPs)", + "valu_iops_pop 1": "VALU IOPs (Cur)", + "valu_iops_pop 2": "VALU IOPs (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 257, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_ipcAvg\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \"min_ipcAvg\": {\n \"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] } \n },\n \"max_ipcAvg\": {\n \"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \n \"avg_ipcIssue\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"min_ipcIssue\": {\n \"$min\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"max_ipcIssue\": {\n \"$max\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n\n \"avg_saluUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"min_saluUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"max_saluUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n\n \"avg_valuUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"min_valuUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"max_valuUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n\n \"avg_mfmaUtil\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"min_mfmaUtil\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"max_mfmaUtil\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n\n \"avg_mfmaInstrCycles\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"min_mfmaInstrCycles\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"max_mfmaInstrCycles\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n\n\n \"avg_unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"min_unpredthreads_val\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"max_unpredthreads_val\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n\n \"avg_instrFetchBand\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"min_instrFetchBand\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"max_instrFetchBand\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"IPC (Avg)\",\n \"Avg\": \"&avg_ipcAvg\",\n \"Min\": \"&min_ipcAvg\",\n \"Max\": \"&max_ipcAvg\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"IPC (Issue)\",\n \"Avg\": \"&avg_ipcIssue\",\n \"Min\": \"&min_ipcIssue\",\n \"Max\": \"&max_ipcIssue\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"SALU Util\",\n \"Avg\": \"&avg_saluUtil\",\n \"Min\": \"&min_saluUtil\",\n \"Max\": \"&max_saluUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Avg\": \"&avg_valuUtil\",\n \"Min\": \"&min_valuUtil\",\n \"Max\": \"&max_valuUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Active Threads\",\n \"Avg\": \"&avg_unpredthreads_val\",\n \"Min\": \"&min_unpredthreads_val\",\n \"Max\": \"&max_unpredthreads_val\",\n \"Unit\": \"Threads\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Avg\": \"&avg_mfmaUtil\",\n \"Min\": \"&min_mfmaUtil\",\n \"Max\": \"&max_mfmaUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"MFMA Instr Cycles\",\n \"Avg\": \"&avg_mfmaInstrCycles\",\n \"Min\": \"&min_mfmaInstrCycles\",\n \"Max\": \"&max_mfmaInstrCycles\",\n \"Unit\": \"cycles/instr\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ipcAvg\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \"min_ipcAvg\": {\n \"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] } \n },\n \"max_ipcAvg\": {\n \"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \n \"avg_ipcIssue\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"min_ipcIssue\": {\n \"$min\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"max_ipcIssue\": {\n \"$max\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n\n \"avg_saluUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"min_saluUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"max_saluUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n\n \"avg_valuUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"min_valuUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"max_valuUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n\n\n \"avg_mfmaUtil\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"min_mfmaUtil\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"max_mfmaUtil\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n\n \"avg_mfmaInstrCycles\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"min_mfmaInstrCycles\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"max_mfmaInstrCycles\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n\n \"avg_unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"min_unpredthreads_val\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"max_unpredthreads_val\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n\n \"avg_instrFetchBand\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"min_instrFetchBand\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"max_instrFetchBand\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"IPC (Avg)\",\n \"Avg 2\": \"&avg_ipcAvg\",\n \"Min 2\": \"&min_ipcAvg\",\n \"Max 2\": \"&max_ipcAvg\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"IPC (Issue)\",\n \"Avg 2\": \"&avg_ipcIssue\",\n \"Min 2\": \"&min_ipcIssue\",\n \"Max 2\": \"&max_ipcIssue\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"SALU Util\",\n \"Avg 2\": \"&avg_saluUtil\",\n \"Min 2\": \"&min_saluUtil\",\n \"Max 2\": \"&max_saluUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Avg 2\": \"&avg_valuUtil\",\n \"Min 2\": \"&min_valuUtil\",\n \"Max 2\": \"&max_valuUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Active Threads\",\n \"Avg 2\": \"&avg_unpredthreads_val\",\n \"Min 2\": \"&min_unpredthreads_val\",\n \"Max 2\": \"&max_unpredthreads_val\",\n \"Unit\": \"Threads\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Avg 2\": \"&avg_mfmaUtil\",\n \"Min 2\": \"&min_mfmaUtil\",\n \"Max 2\": \"&max_mfmaUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"MFMA Instr Cycles\",\n \"Avg 2\": \"&avg_mfmaInstrCycles\",\n \"Min 2\": \"&min_mfmaInstrCycles\",\n \"Max 2\": \"&max_mfmaInstrCycles\",\n \"Unit\": \"cycles/instr\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Pipeline Stats", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Avg": 1, + "Avg 2": 2, + "Max": 5, + "Max 2": 6, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Avg 2": "Avg (Baseline)", + "Max 2": "Max (Baseline)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 111 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 96, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_intOps\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"min_intOps\":{\"$min\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"max_intOps\":{\"$max\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n\n\n \"avg_flops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_flops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n \"max_flops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n\n \"avg_int8Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"min_int8Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"max_int8Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n\n \"avg_int32Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"min_int32Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"max_int32Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n\n \"avg_int64Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"min_int64Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"max_int64Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n\n \"avg_f16Ops\":{\"$avg\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"min_f16Ops\":{\"$min\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"max_f16Ops\":{\"$max\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n\n\n\n \"avg_bf16Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"min_bf16Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"max_bf16Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n\n \"avg_f32Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"min_f32Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"max_f32Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n\n \"avg_f64Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_f64Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"max_f64Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"FLOPs (Total)\",\n \"Avg\": \"&avg_flops\",\n \"Min\": \"&min_flops\",\n \"Max\": \"&max_flops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"INT8 OPs\",\n \"Avg\": \"&avg_int8Ops\",\n \"Min\": \"&min_int8Ops\",\n \"Max\": \"&max_int8Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F16 OPs\",\n \"Avg\": \"&avg_f16Ops\",\n \"Min\": \"&min_f16Ops\",\n \"Max\": \"&max_f16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"BF16 OPs\",\n \"Avg\": \"&avg_bf16Ops\",\n \"Min\": \"&min_bf16Ops\",\n \"Max\": \"&max_bf16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n\n {\n \"Metric\": \"F32 OPs\",\n \"Avg\": \"&avg_f32Ops\",\n \"Min\": \"&min_f32Ops\",\n \"Max\": \"&max_f32Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F64 OPs\",\n \"Avg\": \"&avg_f64Ops\",\n \"Min\": \"&min_f64Ops\",\n \"Max\": \"&max_f64Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_intOps\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"min_intOps\":{\"$min\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"max_intOps\":{\"$max\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n\n\n \"avg_flops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_flops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n \"max_flops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n\n \"avg_int8Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"min_int8Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"max_int8Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n\n \"avg_int32Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"min_int32Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"max_int32Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n\n \"avg_int64Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"min_int64Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"max_int64Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n\n \"avg_f16Ops\":{\"$avg\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"min_f16Ops\":{\"$min\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"max_f16Ops\":{\"$max\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n\n\n\n \"avg_bf16Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"min_bf16Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"max_bf16Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n\n \"avg_f32Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"min_f32Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"max_f32Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n\n \"avg_f64Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_f64Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"max_f64Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"FLOPs (Total)\",\n \"Avg\": \"&avg_flops\",\n \"Min\": \"&min_flops\",\n \"Max\": \"&max_flops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"INT8 OPs\",\n \"Avg\": \"&avg_int8Ops\",\n \"Min\": \"&min_int8Ops\",\n \"Max\": \"&max_int8Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F16 OPs\",\n \"Avg\": \"&avg_f16Ops\",\n \"Min\": \"&min_f16Ops\",\n \"Max\": \"&max_f16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"BF16 OPs\",\n \"Avg\": \"&avg_bf16Ops\",\n \"Min\": \"&min_bf16Ops\",\n \"Max\": \"&max_bf16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n\n {\n \"Metric\": \"F32 OPs\",\n \"Avg\": \"&avg_f32Ops\",\n \"Min\": \"&min_f32Ops\",\n \"Max\": \"&max_f32Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F64 OPs\",\n \"Avg\": \"&avg_f64Ops\",\n \"Min\": \"&min_f64Ops\",\n \"Max\": \"&max_f64Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Arithmetic Operations", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 1, + "Avg 2": 2, + "Max 1": 5, + "Max 2": 6, + "Metric 1": 0, + "Metric 2": 7, + "Min 1": 3, + "Min 2": 4, + "Unit 1": 9, + "Unit 2": 8 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 255, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_VMEM", + "target": "${Workload1}.SQ_INST_LEVEL_VMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_vmemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"min_vmemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"max_vmemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"VMEM Latency\",\n \"Avg\": \"&avg_vmemLat\",\n \"Min\": \"&min_vmemLat\",\n \"Max\": \"&max_vmemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_SMEM", + "target": "${Workload1}.SQ_INST_LEVEL_SMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_smemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"min_smemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"max_smemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"SMEM Latency\",\n \"Avg\":\"&avg_smemLat\",\n \"Min\":\"&min_smemLat\",\n \"Max\":\"&max_smemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_IFETCH_LEVEL", + "target": "${Workload1}.SQ_IFETCH_LEVEL.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_instrFetchLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"min_instrFetchLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"max_instrFetchLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"Instr Fetch Latency\",\n \"Avg\":\"&avg_instrFetchLat\",\n \"Min\":\"&min_instrFetchLat\",\n \"Max\":\"&max_instrFetchLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS", + "target": "${Workload1}.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"LDS Latency\",\n \"Avg\":\"&avg_ldsLat\",\n \"Min\":\"&min_ldsLat\",\n \"Max\":\"&max_ldsLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_VMEM2", + "target": "${Workload2}.SQ_INST_LEVEL_VMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_vmemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"min_vmemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"max_vmemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"VMEM Latency\",\n \"Avg 2\": \"&avg_vmemLat\",\n \"Min 2\": \"&min_vmemLat\",\n \"Max 2\": \"&max_vmemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_SMEM2", + "target": "${Workload2}.SQ_INST_LEVEL_SMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_smemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"min_smemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"max_smemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"SMEM Latency\",\n \"Avg 2\":\"&avg_smemLat\",\n \"Min 2\":\"&min_smemLat\",\n \"Max 2\":\"&max_smemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_IFETCH_LEVEL2", + "target": "${Workload2}.SQ_IFETCH_LEVEL.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_instrFetchLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"min_instrFetchLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"max_instrFetchLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"Instr Fetch Latency\",\n \"Avg 2\":\"&avg_instrFetchLat\",\n \"Min 2\":\"&min_instrFetchLat\",\n \"Max 2\":\"&max_instrFetchLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS2", + "target": "${Workload2}.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"LDS Latency\",\n \"Avg 2\":\"&avg_ldsLat\",\n \"Min 2\":\"&min_ldsLat\",\n \"Max 2\":\"&max_ldsLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + } + ], + "title": "Memory Latencies", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Avg": 1, + "Avg 2": 2, + "Max": 5, + "Max 2": 6, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Avg": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Compute Unit - Compute Pipeline", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 98, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 205, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"bconf_rate\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n {\"$multiply\": [\"&SQ_LDS_BANK_CONFLICT\", 3.125]},\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \"bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]},\n \n {\"$multiply\": [$sclk, $numCU, 0.00128]}\n ]}\n },\n\n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n },\n\n \"lds_access_rate\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [200, \"&SQ_ACTIVE_INST_LDS\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n }\n \n }},\n \n {\"$set\": {\n \"array\": [\n {\n \"Utilization\": \"&lds_util\",\n \"Access Rate\": \"&lds_access_rate\",\n \"Bandwith (Pct-of-Peak)\": \"&bw_pop\",\n \"Bank Conflict Rate\": \"&bconf_rate\"\n }\n \n ]\n }},\n \n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n \n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"bconf_rate\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n {\"$multiply\": [\"&SQ_LDS_BANK_CONFLICT\", 3.125]},\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n\n \"bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]},\n \n {\"$multiply\": [$sclk2, $numCU2, 0.00128]}\n ]}\n },\n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}\n ]}\n },\n\n \"lds_access_rate\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [200, \"&SQ_ACTIVE_INST_LDS\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}\n ]}\n }\n\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Utilization\": \"&lds_util\",\n \"Access Rate\": \"&lds_access_rate\",\n \"Bandwith (Pct-of-Peak)\": \"&bw_pop\",\n \"Bank Conflict Rate\": \"&bconf_rate\"\n }\n\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: LDS", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Access Rate 1": 6, + "Access Rate 2": 7, + "Bandwith (Pct-of-Peak) 1": 0, + "Bandwith (Pct-of-Peak) 2": 1, + "Bank Conflict Rate 1": 2, + "Bank Conflict Rate 2": 3, + "Utilization 1": 4, + "Utilization 2": 5 + }, + "renameByName": { + "Access Rate 1": "Access Rate (Current)", + "Access Rate 2": "Access Rate (Baseline)", + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "Bandwith (Pct-of-Peak)": "", + "Bandwith (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "Bandwith (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline) ", + "Bank Conflict Rate 1": "Bank Conflict Rate (Current)", + "Bank Conflict Rate 2": "Bank Conflict Rate (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Latency (Cycles) 1": "Latency (Current) [Cycles]", + "Latency (Cycles) 2": "Latency (Baseline) [Cycles]", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)", + "Utilization 1": "Util (Current)", + "Utilization 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "min": -100000000000000000000, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 107 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 141 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 100, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_waveCycles\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"min_waveCycles\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"max_waveCycles\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \n \"avg_ldsInstrs\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"min_ldsInstrs\": {\n \"$min\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"max_ldsInstrs\": {\n \"$max\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \n \"avg_indexAccesses\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"min_indexAccesses\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"max_indexAccesses\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \n \"avg_atomicCycles\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"min_atomicCycles\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"max_atomicCycles\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \n \"avg_bankConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"min_bankConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"max_bankConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \n \"avg_addrConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"min_addrConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"max_addrConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \n \n \"avg_unalignedStall\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"min_unalignedStall\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"max_unalignedStall\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \n \"avg_memViolations\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"min_memViolations\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"max_memViolations\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \n \"avg_bconf_per_op\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"min_bconf_per_op\": {\n \"$min\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"max_bconf_per_op\": {\n \"$max\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \n \"avg_bw\": {\n \"$avg\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"min_bw\": {\n \"$min\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"max_bw\": {\n \"$max\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Wave Cycles\",\n \"avg\": \"&avg_waveCycles\",\n \"min\": \"&min_waveCycles\",\n \"max\": \"&max_waveCycles\",\n \"Unit\": \"Cycles/Wave\"\n },\n {\n \"metric\": \"LDS Instrs\",\n \"avg\": \"&avg_ldsInstrs\",\n \"min\": \"&min_ldsInstrs\",\n \"max\": \"&max_ldsInstrs\",\n \"Unit\":{\"$concat\": [\"Instr \", $normUnit]} \n },\n {\n \"metric\": \"Bandwidth\",\n \"avg\": \"&avg_bw\",\n \"min\": \"&min_bw\",\n \"max\": \"&max_bw\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conficts/Access\",\n \"avg\": \"&avg_bconf_per_op\",\n \"min\": \"&min_bconf_per_op\",\n \"max\": \"&max_bconf_per_op\",\n \"Unit\": \"Conflicts/Access\"\n },\n {\n \"metric\": \"Index Accesses\",\n \"avg\": \"&avg_indexAccesses\",\n \"min\": \"&min_indexAccesses\",\n \"max\": \"&max_indexAccesses\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Cycles\",\n \"avg\": \"&avg_atomicCycles\",\n \"min\": \"&min_atomicCycles\",\n \"max\": \"&max_atomicCycles\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conflict\",\n \"avg\": \"&avg_bankConflicts\",\n \"min\": \"&min_bankConflicts\",\n \"max\": \"&max_bankConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Addr Conflict\",\n \"avg\": \"&avg_addrConflicts\",\n \"min\": \"&min_addrConflicts\",\n \"max\": \"&max_addrConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Unaligned Stall\",\n \"avg\": \"&avg_unalignedStall\",\n \"min\": \"&min_unalignedStall\",\n \"max\": \"&max_unalignedStall\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Mem Violations\",\n \"avg\": \"&avg_memViolations\",\n \"min\": \"&min_memViolations\",\n \"max\": \"&max_memViolations\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_INST_LEVEL_LDS\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLatency\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLatency\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLatency\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"metric\": \"LDS Latency\",\n \"avg\": \"&avg_ldsLatency\",\n \"min\": \"&min_ldsLatency\",\n \"max\": \"&max_ldsLatency\",\n \"Unit\": \"Cycles\"\n }}\n ]\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}, \n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n \n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_waveCycles\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"min_waveCycles\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"max_waveCycles\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \n \"avg_ldsInstrs\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"min_ldsInstrs\": {\n \"$min\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"max_ldsInstrs\": {\n \"$max\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \n \"avg_indexAccesses\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"min_indexAccesses\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"max_indexAccesses\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \n \"avg_atomicCycles\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"min_atomicCycles\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"max_atomicCycles\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \n \"avg_bankConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"min_bankConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"max_bankConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \n \"avg_addrConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"min_addrConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"max_addrConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"avg_unalignedStall\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"min_unalignedStall\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"max_unalignedStall\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \n \"avg_memViolations\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"min_memViolations\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"max_memViolations\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \n \n \"avg_bconf_per_op\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"min_bconf_per_op\": {\n \"$min\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"max_bconf_per_op\": {\n \"$max\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \n \"avg_bw\": {\n \"$avg\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"min_bw\": {\n \"$min\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"max_bw\": {\n \"$max\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Wave Cycles\",\n \"avg\": \"&avg_waveCycles\",\n \"min\": \"&min_waveCycles\",\n \"max\": \"&max_waveCycles\",\n \"Unit\": \"Cycles/Wave\"\n },\n {\n \"metric\": \"LDS Instrs\",\n \"avg\": \"&avg_ldsInstrs\",\n \"min\": \"&min_ldsInstrs\",\n \"max\": \"&max_ldsInstrs\",\n \"Unit\":{\"$concat\": [\"Instr \", $normUnit]} \n },\n {\n \"metric\": \"Bandwidth\",\n \"avg\": \"&avg_bw\",\n \"min\": \"&min_bw\",\n \"max\": \"&max_bw\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conficts/Access\",\n \"avg\": \"&avg_bconf_per_op\",\n \"min\": \"&min_bconf_per_op\",\n \"max\": \"&max_bconf_per_op\",\n \"Unit\": \"Conflicts/Access\"\n },\n {\n \"metric\": \"Index Accesses\",\n \"avg\": \"&avg_indexAccesses\",\n \"min\": \"&min_indexAccesses\",\n \"max\": \"&max_indexAccesses\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Cycles\",\n \"avg\": \"&avg_atomicCycles\",\n \"min\": \"&min_atomicCycles\",\n \"max\": \"&max_atomicCycles\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conflict\",\n \"avg\": \"&avg_bankConflicts\",\n \"min\": \"&min_bankConflicts\",\n \"max\": \"&max_bankConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Addr Conflict\",\n \"avg\": \"&avg_addrConflicts\",\n \"min\": \"&min_addrConflicts\",\n \"max\": \"&max_addrConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Unaligned Stall\",\n \"avg\": \"&avg_unalignedStall\",\n \"min\": \"&min_unalignedStall\",\n \"max\": \"&max_unalignedStall\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Mem Violations\",\n \"avg\": \"&avg_memViolations\",\n \"min\": \"&min_memViolations\",\n \"max\": \"&max_memViolations\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_INST_LEVEL_LDS\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLatency\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLatency\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLatency\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"metric\": \"LDS Latency\",\n \"avg\": \"&avg_ldsLatency\",\n \"min\": \"&min_ldsLatency\",\n \"max\": \"&max_ldsLatency\",\n \"Unit\": \"Cycles\"\n }}\n ]\n }}\n ]);", + "type": "table" + } + ], + "title": "LDS Stats", + "transformations": [ + { + "id": "concatenate", + "options": { + "frameNameLabel": "frame", + "frameNameMode": "field" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 8, + "avg 1": 1, + "avg 2": 2, + "max 1": 5, + "max 2": 6, + "metric 1": 0, + "metric 2": 7, + "min 1": 3, + "min 2": 4 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Local Data Share (LDS)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 44, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 48, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_ICACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk, $numSQC]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n\n \"cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQC_ICACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\" ] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_ICACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk2, $numSQC2]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n\n \"cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQC_ICACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Instruction Cache ", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "BW (Pct-of-Peak) 1": 4, + "BW (Pct-of-Peak) 2": 5, + "Cache Hit 1": 6, + "Cache Hit 2": 7, + "Stall 1": 2, + "Stall 2": 3, + "Util 1": 0, + "Util 2": 1 + }, + "renameByName": { + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "BW Pct-of-Peak 1": "BW Pct-of-Peak (Current)", + "BW Pct-of-Peak 2": "BW Pct-of-Peak (Baseline)", + "Bandwidth 1": "Bandwidth (Current)", + "Bandwidth 2": "Bandwidth (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 259, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"min_req\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"max_req\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n\n \"avg_hits\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"min_hits\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"max_hits\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n\n \"avg_misses\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"min_misses\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"max_misses\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n\n \"avg_misses_dup\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"min_misses_dup\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"max_misses_dup\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"avg_cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"min_cacheHit\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"max_cacheHit\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&avg_req\",\n \"Min\": \"&min_req\",\n \"Max\": \"&max_req\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&avg_hits\",\n \"Min\": \"&min_hits\",\n \"Max\": \"&max_hits\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean\": \"&avg_misses\",\n \"Min\": \"&min_misses\",\n \"Max\": \"&max_misses\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Duplicated\",\n \"Mean\": \"&avg_misses_dup\",\n \"Min\": \"&min_misses_dup\",\n \"Max\": \"&max_misses_dup\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n \n {\n \"Metric\": \"Cache Hit\",\n \"Mean\": \"&avg_cacheHit\",\n \"Min\": \"&min_cacheHit\",\n \"Max\": \"&max_cacheHit\",\n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"min_req\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"max_req\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n\n \"avg_hits\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"min_hits\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"max_hits\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n\n \"avg_misses\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"min_misses\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"max_misses\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n\n \"avg_misses_dup\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"min_misses_dup\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"max_misses_dup\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"avg_cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"min_cacheHit\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"max_cacheHit\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean 2\": \"&avg_req\",\n \"Min 2\": \"&min_req\",\n \"Max 2\": \"&max_req\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean 2\": \"&avg_hits\",\n \"Min 2\": \"&min_hits\",\n \"Max 2\": \"&max_hits\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean 2\": \"&avg_misses\",\n \"Min 2\" : \"&min_misses\",\n \"Max 2\": \"&max_misses\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Duplicated\",\n \"Mean 2\": \"&avg_misses_dup\",\n \"Min 2\": \"&min_misses_dup\",\n \"Max 2\": \"&max_misses_dup\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean 2\": \"&avg_cacheHit\",\n \"Min 2\": \"&min_cacheHit\",\n \"Max 2\": \"&max_cacheHit\",\n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Instruction Cache Accesses", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Max": 5, + "Max 2": 6, + "Mean": 1, + "Mean 2": 2, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "L1I Metric": "", + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Instruction Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 203, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "L1K-TC BW - GB/s" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 54, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_DCACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk, $numSQC]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n \"cacheHit\": {\n \"$avg\": { \n \"$cond\":[\n {\"$ne\": [{ \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0 ]},\n {\"$divide\": [{ \"$multiply\": [\"&SQC_DCACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } ]},\n null\n ]\n }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "sY628IJnz" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_DCACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk2, $numSQC2]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n \"cacheHit\": {\n \"$avg\": { \n \"$cond\":[\n {\"$ne\": [{ \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0 ]},\n {\"$divide\": [{ \"$multiply\": [\"&SQC_DCACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } ]},\n null\n ]\n }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Scalar L1D Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "BW Pct-of-Peak 1": 0, + "BW Pct-of-Peak 2": 1, + "Cache Hit 1": 2, + "Cache Hit 2": 3, + "Stall 1": 6, + "Stall 2": 7, + "Util 1": 4, + "Util 2": 5 + }, + "renameByName": { + "BW Pct-of-Peak 1": "BW Pct-of-Peak (Current)", + "BW Pct-of-Peak 2": "BW Pct-of-Peak (Baseline)", + "Bandwidth 1": "Bandwidth (Current)", + "Bandwidth 2": "Bandwidth (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 261, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n\n \"hits_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n\n \"misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n \"misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n \"misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n\n \"dup_misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"cacheHit_avg\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_min\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_max\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n\n \"read1d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n\n \"read2d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n\n \"read4d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n\n \"read8d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n\n \"read16d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\": \"&req_min\",\n \"Max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\": \"&hits_min\",\n \"Max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean\": \"&misses_avg\",\n \"Min\": \"&misses_min\",\n \"Max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses- Duplicated\",\n \"Mean\": \"&dup_misses_avg\",\n \"Min\": \"&dup_misses_min\",\n \"Max\": \"&dup_misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean\": \"&cacheHit_avg\",\n \"Min\": \"&cacheHit_min\",\n \"Max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Read Req (Total)\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (1 DWord)\",\n \"Mean\": \"&read1d_avg\",\n \"Min\": \"&read1d_min\",\n \"Max\": \"&read1d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (2 DWord)\",\n \"Mean\": \"&read2d_avg\",\n \"Min\": \"&read2d_min\",\n \"Max\": \"&read2d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (4 DWord)\",\n \"Mean\": \"&read4d_avg\",\n \"Min\": \"&read4d_min\",\n \"Max\": \"&read4d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (8 DWord)\",\n \"Mean\": \"&read8d_avg\",\n \"Min\": \"&read8d_min\",\n \"Max\": \"&read8d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (16 DWord)\",\n \"Mean\": \"&read16d_avg\",\n \"Min\": \"&read16d_min\",\n \"Max\": \"&read16d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }}, \n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n\n \"hits_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n\n \"dup_misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"cacheHit_avg\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_min\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_max\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n\n\n \"read1d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n\n \"read2d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n\n \"read4d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n\n \"read8d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n\n \"read16d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean 2\": \"&req_avg\",\n \"Min 2\": \"&req_min\",\n \"Max 2\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean 2\": \"&hits_avg\",\n \"Min 2\": \"&hits_min\",\n \"Max 2\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean 2\": \"&misses_avg\",\n \"Min 2\": \"&misses_min\",\n \"Max 2\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses- Duplicated\",\n \"Mean 2\": \"&dup_misses_avg\",\n \"Min 2\": \"&dup_misses_min\",\n \"Max 2\": \"&dup_misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean 2\": \"&cacheHit_avg\",\n \"Min 2\": \"&cacheHit_min\",\n \"Max 2\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Read Req (Total)\",\n \"Mean 2\": \"&readReq_avg\",\n \"Min 2\": \"&readReq_min\",\n \"Max 2\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req (Total)\",\n \"Mean 2\": \"&writeReq_avg\",\n \"Min 2\": \"&writeReq_min\",\n \"Max 2\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean 2\": \"&atomicReq_avg\",\n \"Min 2\": \"&atomicReq_min\",\n \"Max 2\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (1 DWord)\",\n \"Mean 2\": \"&read1d_avg\",\n \"Min 2\": \"&read1d_min\",\n \"Max 2\": \"&read1d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (2 DWord)\",\n \"Mean 2\": \"&read2d_avg\",\n \"Min 2\": \"&read2d_min\",\n \"Max 2\": \"&read2d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (4 DWord)\",\n \"Mean 2\": \"&read4d_avg\",\n \"Min 2\": \"&read4d_min\",\n \"Max 2\": \"&read4d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (8 DWord)\",\n \"Mean 2\": \"&read8d_avg\",\n \"Min 2\": \"&read8d_min\",\n \"Max 2\": \"&read8d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (16 DWord)\",\n \"Mean 2\": \"&read16d_avg\",\n \"Min 2\": \"&read16d_min\",\n \"Max 2\": \"&read16d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Scalar L1D Cache Accesses", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Max": 5, + "Max 2": 6, + "Mean": 1, + "Mean 2": 2, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 105 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 134 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 52, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n\n \"writeReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n\n \"tc2l1k_stall_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read Req\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req\",\n \"Mean\": \"&writeReq_avg\",\n \"Min\": \"&writeReq_min\",\n \"Max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Stall\",\n \"Mean\": \"&tc2l1k_stall_avg\",\n \"Min\": \"&tc2l1k_stall_min\",\n \"Max\": \"&tc2l1k_stall_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}, \n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n\n \"writeReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n\n \"tc2l1k_stall_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read Req\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req\",\n \"Mean\": \"&writeReq_avg\",\n \"Min\": \"&writeReq_min\",\n \"Max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Stall\",\n \"Mean\": \"&tc2l1k_stall_avg\",\n \"Min\": \"&tc2l1k_stall_min\",\n \"Max\": \"&tc2l1k_stall_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Scalar L1D Cache - L2 Interface", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Max 1": 7, + "Max 2": 8, + "Mean 1": 3, + "Mean 2": 4, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Scalar L1 Data Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 130, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 133 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + } + ] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 0, + "y": 14 + }, + "id": 132, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"taBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"taBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"taBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n\n \"tc2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"tc2ta_dataStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_dataStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_dataStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"td2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"td2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"td2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"totalInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatWriteInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferWriteInstr_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"buffTotal_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleRead_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleWrite_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TA Busy\",\n \"avg\": \"&taBusy_avg\",\n \"min\": \"&taBusy_min\",\n \"max\": \"&taBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Addr Stall\",\n \"avg\": \"&tc2ta_addrStall_avg\",\n \"min\": \"&tc2ta_addrStall_min\",\n \"max\": \"&tc2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Data Stall\",\n \"avg\": \"&tc2ta_dataStall_avg\",\n \"min\": \"&tc2ta_dataStall_min\",\n \"max\": \"&tc2ta_dataStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TD2TA Addr Stall\",\n \"avg\": \"&td2ta_addrStall_avg\",\n \"min\": \"&td2ta_addrStall_min\",\n \"max\": \"&td2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Total Instructions\",\n \"avg\": \"&totalInstr_avg\",\n \"min\": \"&totalInstr_min\",\n \"max\": \"&totalInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Instr\",\n \"avg\": \"&flatInstr_avg\",\n \"min\": \"&flatInstr_min\",\n \"max\": \"&flatInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Read Instr\",\n \"avg\": \"&flatReadInstr_avg\",\n \"min\": \"&flatReadInstr_min\",\n \"max\": \"&flatReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Write Instr\",\n \"avg\": \"&flatWriteInstr_avg\",\n \"min\": \"&flatWriteInstr_min\",\n \"max\": \"&flatWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Atomic Instr\",\n \"avg\": \"&flatAtomicInstr_avg\",\n \"min\": \"&flatAtomicInstr_min\",\n \"max\": \"&flatAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Instr\",\n \"avg\": \"&bufferInstr_avg\",\n \"min\": \"&bufferInstr_min\",\n \"max\": \"&bufferInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Read Instr\",\n \"avg\": \"&bufferReadInstr_avg\",\n \"min\": \"&bufferReadInstr_min\",\n \"max\": \"&bufferReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Write Instr\",\n \"avg\": \"&bufferWriteInstr_avg\",\n \"min\": \"&bufferWriteInstr_min\",\n \"max\": \"&bufferWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Atomic Instr\",\n \"avg\": \"&bufferAtomicInstr_avg\",\n \"min\": \"&bufferAtomicInstr_min\",\n \"max\": \"&bufferAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Total Cylces\",\n \"avg\": \"&buffTotal_avg\",\n \"min\": \"&buffTotal_min\",\n \"max\": \"&buffTotal_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Read\",\n \"avg\": \"&buffCoscaleRead_avg\",\n \"min\": \"&buffCoscaleRead_min\",\n \"max\": \"&buffCoscaleRead_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Write\",\n \"avg\": \"&buffCoscaleWrite_avg\",\n \"min\": \"&buffCoscaleWrite_min\",\n \"max\": \"&buffCoscaleWrite_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Texture Addr and Data)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"taBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"taBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"taBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n\n \"tc2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"tc2ta_dataStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_dataStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_dataStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"td2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"td2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"td2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"totalInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatWriteInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferWriteInstr_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"buffTotal_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleRead_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleWrite_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TA Busy\",\n \"avg\": \"&taBusy_avg\",\n \"min\": \"&taBusy_min\",\n \"max\": \"&taBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Addr Stall\",\n \"avg\": \"&tc2ta_addrStall_avg\",\n \"min\": \"&tc2ta_addrStall_min\",\n \"max\": \"&tc2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Data Stall\",\n \"avg\": \"&tc2ta_dataStall_avg\",\n \"min\": \"&tc2ta_dataStall_min\",\n \"max\": \"&tc2ta_dataStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TD2TA Addr Stall\",\n \"avg\": \"&td2ta_addrStall_avg\",\n \"min\": \"&td2ta_addrStall_min\",\n \"max\": \"&td2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Total Instructions\",\n \"avg\": \"&totalInstr_avg\",\n \"min\": \"&totalInstr_min\",\n \"max\": \"&totalInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Instr\",\n \"avg\": \"&flatInstr_avg\",\n \"min\": \"&flatInstr_min\",\n \"max\": \"&flatInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Read Instr\",\n \"avg\": \"&flatReadInstr_avg\",\n \"min\": \"&flatReadInstr_min\",\n \"max\": \"&flatReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Write Instr\",\n \"avg\": \"&flatWriteInstr_avg\",\n \"min\": \"&flatWriteInstr_min\",\n \"max\": \"&flatWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Atomic Instr\",\n \"avg\": \"&flatAtomicInstr_avg\",\n \"min\": \"&flatAtomicInstr_min\",\n \"max\": \"&flatAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Instr\",\n \"avg\": \"&bufferInstr_avg\",\n \"min\": \"&bufferInstr_min\",\n \"max\": \"&bufferInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Read Instr\",\n \"avg\": \"&bufferReadInstr_avg\",\n \"min\": \"&bufferReadInstr_min\",\n \"max\": \"&bufferReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Write Instr\",\n \"avg\": \"&bufferWriteInstr_avg\",\n \"min\": \"&bufferWriteInstr_min\",\n \"max\": \"&bufferWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Atomic Instr\",\n \"avg\": \"&bufferAtomicInstr_avg\",\n \"min\": \"&bufferAtomicInstr_min\",\n \"max\": \"&bufferAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Total Cylces\",\n \"avg\": \"&buffTotal_avg\",\n \"min\": \"&buffTotal_min\",\n \"max\": \"&buffTotal_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Read\",\n \"avg\": \"&buffCoscaleRead_avg\",\n \"min\": \"&buffCoscaleRead_min\",\n \"max\": \"&buffCoscaleRead_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Write\",\n \"avg\": \"&buffCoscaleWrite_avg\",\n \"min\": \"&buffCoscaleWrite_min\",\n \"max\": \"&buffCoscaleWrite_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "TA", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 124 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + } + ] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 134, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"tdBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"tdBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"tdBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n\n \"tc2tdStall_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2tdStall_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2tdStall_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"spi2td_stall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"spi2td_stall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"spi2td_stall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"coscaleInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_min\":{\"$min\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_max\":{\"$max\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n\n \"loadInstr_avg\":{\"$avg\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_min\":{\"$min\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_max\":{\"$max\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n\n \"storeInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_min\":{\"$min\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_max\":{\"$max\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n\n \"atomicInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_min\":{\"$min\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_max\":{\"$max\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TD Busy\",\n \"avg\": \"&tdBusy_avg\",\n \"min\": \"&tdBusy_min\",\n \"max\": \"&tdBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TD Stall\",\n \"avg\": \"&tc2tdStall_avg\",\n \"min\": \"&tc2tdStall_min\",\n \"max\": \"&tc2tdStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"SPI2TD Stall\",\n \"avg\": \"&spi2td_stall_avg\",\n \"min\": \"&spi2td_stall_min\",\n \"max\": \"&spi2td_stall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Coalescable Instr\",\n \"avg\": \"&coscaleInstr_avg\",\n \"min\": \"&coscaleInstr_min\",\n \"max\": \"&coscaleInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Load Instr\",\n \"avg\": \"&loadInstr_avg\",\n \"min\": \"&loadInstr_min\",\n \"max\": \"&loadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Store Instr\",\n \"avg\": \"&storeInstr_avg\",\n \"min\": \"&storeInstr_min\",\n \"max\": \"&storeInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Instr\",\n \"avg\": \"&atomicInstr_avg\",\n \"min\": \"&atomicInstr_min\",\n \"max\": \"&atomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Texture Addr and Data)\"}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"tdBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"tdBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"tdBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n\n \"tc2tdStall_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2tdStall_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2tdStall_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"spi2td_stall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"spi2td_stall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"spi2td_stall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"coscaleInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_min\":{\"$min\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_max\":{\"$max\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n\n \"loadInstr_avg\":{\"$avg\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_min\":{\"$min\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_max\":{\"$max\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n\n \"storeInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_min\":{\"$min\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_max\":{\"$max\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n\n \"atomicInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_min\":{\"$min\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_max\":{\"$max\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TD Busy\",\n \"avg\": \"&tdBusy_avg\",\n \"min\": \"&tdBusy_min\",\n \"max\": \"&tdBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TD Stall\",\n \"avg\": \"&tc2tdStall_avg\",\n \"min\": \"&tc2tdStall_min\",\n \"max\": \"&tc2tdStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"SPI2TD Stall\",\n \"avg\": \"&spi2td_stall_avg\",\n \"min\": \"&spi2td_stall_min\",\n \"max\": \"&spi2td_stall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Coalescable Instr\",\n \"avg\": \"&coscaleInstr_avg\",\n \"min\": \"&coscaleInstr_min\",\n \"max\": \"&coscaleInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Load Instr\",\n \"avg\": \"&loadInstr_avg\",\n \"min\": \"&loadInstr_min\",\n \"max\": \"&loadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Store Instr\",\n \"avg\": \"&storeInstr_avg\",\n \"min\": \"&storeInstr_min\",\n \"max\": \"&storeInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Instr\",\n \"avg\": \"&atomicInstr_avg\",\n \"min\": \"&atomicInstr_min\",\n \"max\": \"&atomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "TD", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Texture Addresser and Texture Data (TA/TD)", + "type": "row" + }, + { + "collapsed": false, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 112, + "panels": [], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Vector L1 Data Cache", + "type": "row" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 165, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"bufferCoalescing_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n null\n ]\n }\n },\n \"cacheUtil_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TCP_GATE_EN2_sum\", 100]}, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }\n },\n \n \"cacheBW_pct\": {\n \"$avg\": { \"$divide\": [ {\"$multiply\":[64, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"]}, \n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} \n ] \n }\n },\n \"cacheHit_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]\n }] \n },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Buffer Coalescing\": \"&bufferCoalescing_pct\",\n \"Cache Util\": \"&cacheUtil_pct\",\n \"Cache BW\": { \"$divide\": [{ \"$multiply\": [100, \"&cacheBW_pct\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]}] },\n \"Cache Hit\": \"&cacheHit_pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"bufferCoalescing_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n null\n ]\n }\n },\n \"cacheUtil_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TCP_GATE_EN2_sum\", 100]}, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }\n },\n \"cacheBW_pct\": {\n \"$avg\": { \"$divide\": [ {\"$multiply\":[64, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"]}, \n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} \n ] \n }\n },\n \"cacheHit_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]\n }] \n },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Buffer Coalescing\": \"&bufferCoalescing_pct\",\n \"Cache Util\": \"&cacheUtil_pct\",\n \"Cache BW\": { \"$divide\": [{ \"$multiply\": [100, \"&cacheBW_pct\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]}] },\n \"Cache Hit\": \"&cacheHit_pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Vector L1D Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "128B Read Combining 1": 6, + "128B Read Combining 2": 7, + "Buffer Coalescing 1": 0, + "Buffer Coalescing 2": 1, + "Cache BW 1": 2, + "Cache BW 2": 3, + "Cache Hit 1": 4, + "Cache Hit 2": 5 + }, + "renameByName": { + "128B Read Combining 1": "128B Read Combining (Current)", + "128B Read Combining 2": "128B Read Combining(Baseline)", + "Buffer Coalescing 1": "Buf Coalescing (Current)", + "Buffer Coalescing 2": "Buf Coalescing (Baseline)", + "Cache BW 1": "Cache BW (Current)", + "Cache BW 2": "Cache BW (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Cache Util 1": "Cache Util (Current)", + "Cache Util 2": "Cache Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "color-background" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 52 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 199 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 144 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 116, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"l2Pending_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n\n\n \"tcr2tcp_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \"readTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \n \"writeTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \n \"atomicTagRam_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }} \n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Stalled on L2 Data\",\n \"Mean\": \"&l2Pending_avg\",\n \"Min\": \"&l2Pending_min\",\n \"Max\": \"&l2Pending_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Stalled on L2 Req\",\n \"Mean\": \"&tcr2tcp_Stall_avg\",\n \"Min\":\"&tcr2tcp_Stall_min\",\n \"Max\":\"&tcr2tcp_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Read)\",\n \"Mean\": \"&readTagRam_Stall_avg\",\n \"Min\": \"&readTagRam_Stall_min\",\n \"Max\": \"&readTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Write)\",\n \"Mean\": \"&writeTagRam_Stall_avg\",\n \"Min\": \"&writeTagRam_Stall_min\",\n \"Max\": \"&writeTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Atomic)\",\n \"Mean\": \"&atomicTagRam_Stall_avg\",\n \"Min\": \"&atomicTagRam_Stall_min\",\n \"Max\": \"&atomicTagRam_Stall_max\",\n \"unit\":\"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"l2Pending_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n\n \"tcr2tcp_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \"readTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \n \"writeTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \n \"atomicTagRam_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }} \n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Stalled on L2 Data\",\n \"Mean\": \"&l2Pending_avg\",\n \"Min\": \"&l2Pending_min\",\n \"Max\": \"&l2Pending_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Stalled on L2 Req\",\n \"Mean\": \"&tcr2tcp_Stall_avg\",\n \"Min\":\"&tcr2tcp_Stall_min\",\n \"Max\":\"&tcr2tcp_Stall_max\",\n \"unit\":\"pct\"\n },\n\n {\n \"Metric\": \"Tag RAM Stall (Read)\",\n \"Mean\": \"&readTagRam_Stall_avg\",\n \"Min\": \"&readTagRam_Stall_min\",\n \"Max\": \"&readTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Write)\",\n \"Mean\": \"&writeTagRam_Stall_avg\",\n \"Min\": \"&writeTagRam_Stall_min\",\n \"Max\": \"&writeTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Atomic)\",\n \"Mean\": \"&atomicTagRam_Stall_avg\",\n \"Min\": \"&atomicTagRam_Stall_min\",\n \"Max\": \"&atomicTagRam_Stall_max\",\n \"unit\":\"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Cache Stalls", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Units 2": true, + "unit 2": true + }, + "indexByName": { + "Max 1": 6, + "Max 2": 7, + "Mean 1": 2, + "Mean 2": 3, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 4, + "Min 2": 5, + "unit 1": 9, + "unit 2": 8 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "unit 1": "Unit" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 116 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 139 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 50 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "max" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 111 + } + ] + } + ] + }, + "gridPos": { + "h": 18, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 128, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n\n \"totalReq_avg\":{\"$avg\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_min\":{\"$min\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_max\":{\"$max\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n\n \"cacheBW_avg\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_min\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_max\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \n \"cacheAccess_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n\n \"cacheHits_avg\":{\"$avg\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_min\":{\"$min\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_max\":{\"$max\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \n \"cacheHitRate_avg\":{\"$avg\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_min\":{\"$min\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_max\":{\"$max\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \n \"l2_l1_read_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n\n \"l2_l1_write_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n\n\n \"l2_l1_atomic_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n\n \"l2_l1_bw_avg\":{\"$avg\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_min\":{\"$min\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_max\":{\"$max\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n\n \"invalidate_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n\n\n \"l1Latency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n\n\n \"l2ReadLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n\n \"l2WriteLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }}\n\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Total Req\",\n \"avg\": \"&totalReq_avg\",\n \"min\": \"&totalReq_min\",\n \"max\": \"&totalReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache BW\",\n \"avg\": \"&cacheBW_avg\",\n \"min\": \"&cacheBW_min\",\n \"max\": \"&cacheBW_max\",\n \"Unit\": \"GB/s\"\n },\n {\n \"metric\": \"Cache Accesses\",\n \"avg\": \"&cacheAccess_avg\",\n \"min\": \"&cacheAccess_min\",\n \"max\": \"&cacheAccess_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hits\",\n \"avg\": \"&cacheHits_avg\",\n \"min\": \"&cacheHits_min\",\n \"max\": \"&cacheHits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit Rate\",\n \"avg\": \"&cacheHitRate_avg\",\n \"min\": \"&cacheHitRate_min\",\n \"max\": \"&cacheHitRate_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Invalidate\",\n \"avg\": \"&invalidate_avg\",\n \"min\": \"&invalidate_min\",\n \"max\": \"&invalidate_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 BW\",\n \"avg\": \"&l2_l1_bw_avg\",\n \"min\": \"&l2_l1_bw_avg\",\n \"max\": \"&l2_l1_bw_avg\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Read\",\n \"avg\": \"&l2_l1_read_avg\",\n \"min\": \"&l2_l1_read_min\",\n \"max\": \"&l2_l1_read_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Write\",\n \"avg\": \"&l2_l1_write_avg\",\n \"min\": \"&l2_l1_write_min\",\n \"max\": \"&l2_l1_write_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Atomic\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1 Access Latency\",\n \"avg\": \"&l1Latency_avg\",\n \"min\": \"&l1Latency_min\",\n \"max\": \"&l1Latency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Read Latency\",\n \"avg\": \"&l2ReadLatency_avg\",\n \"min\": \"&l2ReadLatency_min\",\n \"max\": \"&l2ReadLatency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Write Latency\",\n \"avg\": \"&l2WriteLatency_avg\",\n \"min\": \"&l2WriteLatency_min\",\n \"max\": \"&l2WriteLatency_max\",\n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n\n \"totalReq_avg\":{\"$avg\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_min\":{\"$min\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_max\":{\"$max\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n\n \"cacheBW_avg\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_min\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_max\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \n \"cacheAccess_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n\n \"cacheHits_avg\":{\"$avg\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_min\":{\"$min\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_max\":{\"$max\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \n \"cacheHitRate_avg\":{\"$avg\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_min\":{\"$min\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_max\":{\"$max\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n\n \"l2_l1_read_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n\n \"l2_l1_write_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n\n\n \"l2_l1_atomic_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n\n \"l2_l1_bw_avg\":{\"$avg\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_min\":{\"$min\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_max\":{\"$max\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n\n \"invalidate_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n\n\n \"l1Latency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n\n\n \"l2ReadLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n\n \"l2WriteLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Total Req\",\n \"avg\": \"&totalReq_avg\",\n \"min\": \"&totalReq_min\",\n \"max\": \"&totalReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache BW\",\n \"avg\": \"&cacheBW_avg\",\n \"min\": \"&cacheBW_min\",\n \"max\": \"&cacheBW_max\",\n \"Unit\": \"GB/s\"\n },\n {\n \"metric\": \"Cache Accesses\",\n \"avg\": \"&cacheAccess_avg\",\n \"min\": \"&cacheAccess_min\",\n \"max\": \"&cacheAccess_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hits\",\n \"avg\": \"&cacheHits_avg\",\n \"min\": \"&cacheHits_min\",\n \"max\": \"&cacheHits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit Rate\",\n \"avg\": \"&cacheHitRate_avg\",\n \"min\": \"&cacheHitRate_min\",\n \"max\": \"&cacheHitRate_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Invalidate\",\n \"avg\": \"&invalidate_avg\",\n \"min\": \"&invalidate_min\",\n \"max\": \"&invalidate_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 BW\",\n \"avg\": \"&l2_l1_bw_avg\",\n \"min\": \"&l2_l1_bw_avg\",\n \"max\": \"&l2_l1_bw_avg\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Read\",\n \"avg\": \"&l2_l1_read_avg\",\n \"min\": \"&l2_l1_read_min\",\n \"max\": \"&l2_l1_read_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Write\",\n \"avg\": \"&l2_l1_write_avg\",\n \"min\": \"&l2_l1_write_min\",\n \"max\": \"&l2_l1_write_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Atomic\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1 Access Latency\",\n \"avg\": \"&l1Latency_avg\",\n \"min\": \"&l1Latency_min\",\n \"max\": \"&l1Latency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Read Latency\",\n \"avg\": \"&l2ReadLatency_avg\",\n \"min\": \"&l2ReadLatency_min\",\n \"max\": \"&l2ReadLatency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Write Latency\",\n \"avg\": \"&l2WriteLatency_avg\",\n \"min\": \"&l2WriteLatency_min\",\n \"max\": \"&l2WriteLatency_max\",\n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Cache Accesses", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 8, + "avg 1": 1, + "avg 2": 2, + "max 1": 5, + "max 2": 6, + "metric 1": 0, + "metric 2": 7, + "min 1": 3, + "min 2": 4 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "Aggregate": "last", + "BarPadding": 30, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "Coherency", + "GroupCols": 2, + "GroupGap": 5, + "GroupLabelColor": "#FF9830", + "GroupLabelFontSize": "100%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": true, + "LabelColName": "Xfer", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 0, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#FADE2A", + "ValueDecimals": 0, + "ValueFontSize": "100%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:172", + "Col": 2, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Mean", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 120, + "pluginVersion": "8.2.1", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "tlh8EwUnk" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n\n \"readNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \n \"writeNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \n \"atomicNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"NC\",\n \"Mean\": \"&readNC_avg\",\n \"Min\": \"&readNC_min\",\n \"Max\": \"&readNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"UC\",\n \"Mean\": \"&readUC_avg\",\n \"Min\": \"&readUC_min\",\n \"Max\": \"&readUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"CC\",\n \"Mean\": \"&readCC_avg\",\n \"Min\": \"&readCC_min\",\n \"Max\": \"&readCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"RW\",\n \"Mean\": \"&readRW_avg\",\n \"Min\": \"&readRW_min\",\n \"Max\": \"&readRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"RW\",\n \"Mean\": \"&writeRW_avg\",\n \"Min\": \"&writeRW_min\",\n \"Max\": \"&writeRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"NC\",\n \"Mean\": \"&writeNC_avg\",\n \"Min\": \"&writeNC_min\",\n \"Max\": \"&writeNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"UC\",\n \"Mean\": \"&writeUC_avg\",\n \"Min\": \"&writeUC_min\",\n \"Max\": \"&writeUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"CC\",\n \"Mean\": \"&writeCC_avg\",\n \"Min\": \"&writeCC_min\",\n \"Max\": \"&writeCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"NC\",\n \"Mean\": \"&atomicNC_avg\",\n \"Min\": \"&atomicNC_min\",\n \"Max\": \"&atomicNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"UC\",\n \"Mean\": \"&atomicUC_avg\",\n \"Min\": \"&atomicUC_min\",\n \"Max\": \"&atomicUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"CC\",\n \"Mean\": \"&atomicCC_avg\",\n \"Min\": \"&atomicCC_min\",\n \"Max\": \"&atomicCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"RW\",\n \"Mean\": \"&atomicRW_avg\",\n \"Min\": \"&atomicRW_min\",\n \"Max\": \"&atomicRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D - L2 Transactions Req $normUnit", + "transparent": true, + "type": "michaeldmoore-multistat-panel" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Units" + }, + "properties": [ + { + "id": "custom.width", + "value": 75 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 124, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n\n\n \"hitRatio_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n\n \"hits_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n\n \"missesTrans_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n\n \"missesPermis_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\":\"&req_min\",\n \"Max\":\"&req_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Hit Ratio\",\n \"Mean\": \"&hitRatio_avg\",\n \"Min\":\"&hitRatio_min\",\n \"Max\":\"&hitRatio_max\",\n \"Units\":\"pct\"\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\":\"&hits_min\",\n \"Max\":\"&hits_max\",\n \"Units\":{ \"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Translation)\",\n \"Mean\": \"&missesTrans_avg\",\n \"Min\":\"&missesTrans_min\",\n \"Max\":\"&missesTrans_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Permission)\",\n \"Mean\": \"&missesPermis_avg\",\n \"Min\":\"&missesPermis_min\",\n \"Max\":\"&missesPermis_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n\n\n \"hitRatio_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n\n \"hits_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n\n \"missesTrans_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n\n \"missesPermis_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\":\"&req_min\",\n \"Max\":\"&req_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Hit Ratio\",\n \"Mean\": \"&hitRatio_avg\",\n \"Min\":\"&hitRatio_min\",\n \"Max\":\"&hitRatio_max\",\n \"Units\":\"pct\"\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\":\"&hits_min\",\n \"Max\":\"&hits_max\",\n \"Units\":{ \"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Translation)\",\n \"Mean\": \"&missesTrans_avg\",\n \"Min\":\"&missesTrans_min\",\n \"Max\":\"&missesTrans_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Permission)\",\n \"Mean\": \"&missesPermis_avg\",\n \"Min\":\"&missesPermis_min\",\n \"Max\":\"&missesPermis_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Addr Translation", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Units 2": true + }, + "indexByName": { + "Max 1": 7, + "Max 2": 8, + "Mean 1": 3, + "Mean 2": 4, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Units 1": 9, + "Units 2": 2 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 56, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW - GB/s" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + }, + { + "id": "color" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Util" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + } + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache Hit" + }, + "properties": [ + { + "id": "max", + "value": 100 + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + } + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Wr BW" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 47 + }, + "id": 64, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n{\"$group\": {\n \"_id\": null,\n \"L2Util\": {\n \"$avg\": { \n \n \"$divide\": [\n {\"$multiply\": [\"&TCC_BUSY_sum\", 100]},\n {\"$multiply\": [{\"$toInt\":\"$L2Banks\"}, \"&GRBM_GUI_ACTIVE\"] }\n ] \n } \n },\n\n \"cacheHit\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n 0\n ] \n }},\n\n \"l2eaRdBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \n \"l2eaWrBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"L2 Util\": \"&L2Util\",\n \"Cache Hit\": \"&cacheHit\",\n \"L2-EA Rd BW\": \"&l2eaRdBW\",\n \"L2-EA Wr BW\": \"&l2eaWrBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n\n{\"$group\": {\n \"_id\": null,\n \"L2Util\": {\n \"$avg\": { \n \"$divide\": [\n {\"$multiply\": [\"&TCC_BUSY_sum\", 100]},\n {\"$multiply\": [{\"$toInt\":\"$L2Banks2\"}, \"&GRBM_GUI_ACTIVE\"] }\n ] \n } \n },\n\n \"cacheHit\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n 0\n ] \n }},\n\n \"l2eaRdBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \n \"l2eaWrBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"L2 Util\": \"&L2Util\",\n \"Cache Hit\": \"&cacheHit\",\n \"L2-EA Rd BW\": \"&l2eaRdBW\",\n \"L2-EA Wr BW\": \"&l2eaWrBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: L2 Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Cache Hit 1": 2, + "Cache Hit 2": 3, + "L2 Util 1": 0, + "L2 Util 2": 1, + "L2-EA Rd BW 1": 4, + "L2-EA Rd BW 2": 5, + "L2-EA Wr BW 1": 6, + "L2-EA Wr BW 2": 7 + }, + "renameByName": { + "Cache Hit 1": "L2 Cache Hit (Current)", + "Cache Hit 2": "L2 Cache Hit (Baseline)", + "L2 Util 1": "L2 Util (Current)", + "L2 Util 2": "L2 Util (Baseline)", + "L2-EA Rd BW - GB/s 1": "L2-EA RD BW (Current)", + "L2-EA Rd BW - GB/s 2": "L2-EA RD BW (baseline)", + "L2-EA Rd BW 1": "L2-EA Rd BW (Current)", + "L2-EA Rd BW 2": "L2-EA Rd BW (Baseline)", + "L2-EA Wr BW - GB/s 1": "L2-EA WR BW (Current)", + "L2-EA Wr BW - GB/s 2": "L2-EA WR BW (Baseline)", + "L2-EA Wr BW 1": "L2-EA Wr BW (Current)", + "L2-EA Wr BW 2": "L2-EA Wr BW (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 106 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + } + ] + }, + "gridPos": { + "h": 16, + "w": 12, + "x": 12, + "y": 47 + }, + "id": 62, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": \"null\",\n \"readStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"writeStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \n \"readBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n\n \"writeBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n\n \"read32_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n\n \"read32Uncached_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"read64_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n\n \"hbmRead_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"write32_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n\n \"write32Uncached_avg\": {\"$avg\":{\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"write64_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n\n \"hbmWrite_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"readLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n\n \"writeLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n\n \"atomicOpLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read BW\",\n \"Avg\": \"&readBW_avg\",\n \"Min\":\"&readBW_min\",\n \"Max\":\"&readBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Write BW\",\n \"Avg\": \"&writeBW_avg\",\n \"Min\":\"&writeBW_min\",\n \"Max\":\"&writeBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Read (32B)\",\n \"Avg\": \"&read32_avg\",\n \"Min\":\"&read32_min\",\n \"Max\":\"&read32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (Uncached 32B)\",\n \"Avg\": \"&read32Uncached_avg\",\n \"Min\":\"&read32Uncached_min\",\n \"Max\":\"&read32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (64B)\",\n \"Avg\": \"&read64_avg\",\n \"Min\":\"&read64_min\",\n \"Max\":\"&read64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Read\",\n \"Avg\": \"&hbmRead_avg\",\n \"Min\":\"&hbmRead_min\",\n \"Max\":\"&hbmRead_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (32B)\",\n \"Avg\": \"&write32_avg\",\n \"Min\":\"&write32_min\",\n \"Max\":\"&write32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (Uncached 32B)\",\n \"Avg\": \"&write32Uncached_avg\",\n \"Min\":\"&write32Uncached_min\",\n \"Max\":\"&write32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (64B)\",\n \"Avg\": \"&write64_avg\",\n \"Min\":\"&write64_min\",\n \"Max\":\"&write64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Write\",\n \"Avg\": \"&hbmWrite_avg\",\n \"Min\":\"&hbmWrite_min\",\n \"Max\":\"&hbmWrite_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read Latency\",\n \"Avg\": \"&readLatency_avg\",\n \"Min\":\"&readLatency_min\",\n \"Max\":\"&readLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Write Latency\",\n \"Avg\": \"&writeLatency_avg\",\n \"Min\":\"&writeLatency_min\",\n \"Max\":\"&writeLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Atomic Latency\",\n \"Avg\": \"&atomicOpLatency_avg\",\n \"Min\":\"&atomicOpLatency_min\",\n \"Max\":\"&atomicOpLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Read Stall\",\n \"Avg\": \"&readStall_avg\",\n \"Min\":\"&readStall_min\",\n \"Max\":\"&readStall_max\",\n \"Unit\":\"pct\"\n },\n {\n \"Metric\": \"Write Stall\",\n \"Avg\": \"&writeStall_avg\",\n \"Min\":\"&writeStall_min\",\n \"Max\":\"&writeStall_max\",\n \"Unit\":\"pct\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": \"null\",\n \"readStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"writeStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"readBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n\n \"writeBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n\n \"read32_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n\n \"read32Uncached_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"read64_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n\n \"hbmRead_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"write32_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n\n \"write32Uncached_avg\": {\"$avg\":{\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"write64_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n\n \"hbmWrite_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"readLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n\n \"writeLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n\n \"atomicOpLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read BW\",\n \"Avg\": \"&readBW_avg\",\n \"Min\":\"&readBW_min\",\n \"Max\":\"&readBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Write BW\",\n \"Avg\": \"&writeBW_avg\",\n \"Min\":\"&writeBW_min\",\n \"Max\":\"&writeBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Read (32B)\",\n \"Avg\": \"&read32_avg\",\n \"Min\":\"&read32_min\",\n \"Max\":\"&read32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (Uncached 32B)\",\n \"Avg\": \"&read32Uncached_avg\",\n \"Min\":\"&read32Uncached_min\",\n \"Max\":\"&read32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (64B)\",\n \"Avg\": \"&read64_avg\",\n \"Min\":\"&read64_min\",\n \"Max\":\"&read64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Read\",\n \"Avg\": \"&hbmRead_avg\",\n \"Min\":\"&hbmRead_min\",\n \"Max\":\"&hbmRead_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (32B)\",\n \"Avg\": \"&write32_avg\",\n \"Min\":\"&write32_min\",\n \"Max\":\"&write32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (Uncached 32B)\",\n \"Avg\": \"&write32Uncached_avg\",\n \"Min\":\"&write32Uncached_min\",\n \"Max\":\"&write32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (64B)\",\n \"Avg\": \"&write64_avg\",\n \"Min\":\"&write64_min\",\n \"Max\":\"&write64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n\n {\n \"Metric\": \"HBM Write\",\n \"Avg\": \"&hbmWrite_avg\",\n \"Min\":\"&hbmWrite_min\",\n \"Max\":\"&hbmWrite_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read Latency\",\n \"Avg\": \"&readLatency_avg\",\n \"Min\":\"&readLatency_min\",\n \"Max\":\"&readLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Write Latency\",\n \"Avg\": \"&writeLatency_avg\",\n \"Min\":\"&writeLatency_min\",\n \"Max\":\"&writeLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Atomic Latency\",\n \"Avg\": \"&atomicOpLatency_avg\",\n \"Min\":\"&atomicOpLatency_min\",\n \"Max\":\"&atomicOpLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Read Stall\",\n \"Avg\": \"&readStall_avg\",\n \"Min\":\"&readStall_min\",\n \"Max\":\"&readStall_max\",\n \"Unit\":\"pct\"\n },\n {\n \"Metric\": \"Write Stall\",\n \"Avg\": \"&writeStall_avg\",\n \"Min\":\"&writeStall_min\",\n \"Max\":\"&writeStall_max\",\n \"Unit\":\"pct\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - Fabric Transactions", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 178 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + } + ] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 54 + }, + "id": 58, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n\n \"streamingReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n\n \"probeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n\n \"hits_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_min\":{\"$min\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_max\":{\"$max\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n\n \"misses_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_min\":{\"$min\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_max\":{\"$max\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n\n \"cacheHit_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n\n\n \"writeback_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n\n \"nc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_min\":{\"$min\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_max\":{\"$max\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n\n \"uc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_min\":{\"$min\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_max\":{\"$max\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n\n \"cc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_min\":{\"$min\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_max\":{\"$max\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n\n \"rw_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_min\":{\"$min\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_max\":{\"$max\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n\n \"writebackNorm_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_min\":{\"$min\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_max\":{\"$max\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n\n \"writebackTC_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_min\":{\"$min\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_max\":{\"$max\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n\n \"evictNorm_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_min\":{\"$min\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_max\":{\"$max\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n\n \"evictTC_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_min\":{\"$min\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_max\":{\"$max\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n\n\n \"readReq128_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Req\",\n \"avg\": \"&req_avg\",\n \"min\": \"&req_min\",\n \"max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Streaming Req\",\n \"avg\": \"&streamingReq_avg\",\n \"min\": \"&streamingReq_min\",\n \"max\": \"&streamingReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n \n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Probe Req\",\n \"avg\": \"&probeReq_avg\",\n \"min\": \"&probeReq_min\",\n \"max\": \"&probeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Hits\",\n \"avg\": \"&hits_avg\",\n \"min\": \"&hits_min\",\n \"max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n }, \n {\n \"metric\": \"Misses\",\n \"avg\": \"&misses_avg\",\n \"min\": \"&misses_min\",\n \"max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit\",\n \"avg\": \"&cacheHit_avg\",\n \"min\": \"&cacheHit_min\",\n \"max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Writeback\",\n \"avg\": \"&writeback_avg\",\n \"min\": \"&writeback_min\",\n \"max\": \"&writeback_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"NC Req\",\n \"avg\": \"&nc_avg\",\n \"min\": \"&nc_min\",\n \"max\": \"&nc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"UC Req\",\n \"avg\": \"&uc_avg\",\n \"min\": \"&uc_min\",\n \"max\": \"&uc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"CC Req\",\n \"avg\": \"&cc_avg\",\n \"min\": \"&cc_min\",\n \"max\": \"&cc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"RW Req\",\n \"avg\": \"&rw_avg\",\n \"min\": \"&rw_min\",\n \"max\": \"&rw_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Writeback (Normal)\",\n \"avg\": \"&writebackNorm_avg\",\n \"min\": \"&writebackNorm_min\",\n \"max\": \"&writebackNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Writeback (TC Req)\",\n \"avg\": \"&writebackTC_avg\",\n \"min\": \"&writebackTC_min\",\n \"max\": \"&writebackTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (Normal)\",\n \"avg\": \"&evictNorm_avg\",\n \"min\": \"&evictNorm_min\",\n \"max\": \"&evictNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (TC Req)\",\n \"avg\": \"&evictTC_avg\",\n \"min\": \"&evictTC_min\",\n \"max\": \"&evictTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n\n \"streamingReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n\n \"probeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n\n \"hits_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_min\":{\"$min\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_max\":{\"$max\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n\n \"misses_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_min\":{\"$min\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_max\":{\"$max\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n\n \"cacheHit_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n\n\n \"writeback_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n\n \"nc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_min\":{\"$min\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_max\":{\"$max\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n\n \"uc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_min\":{\"$min\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_max\":{\"$max\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n\n \"cc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_min\":{\"$min\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_max\":{\"$max\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n\n \"rw_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_min\":{\"$min\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_max\":{\"$max\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n\n \"writebackNorm_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_min\":{\"$min\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_max\":{\"$max\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n\n \"writebackTC_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_min\":{\"$min\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_max\":{\"$max\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n\n \"evictNorm_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_min\":{\"$min\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_max\":{\"$max\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n\n \"evictTC_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_min\":{\"$min\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_max\":{\"$max\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n\n \"readReq128_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Req\",\n \"avg\": \"&req_avg\",\n \"min\": \"&req_min\",\n \"max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Streaming Req\",\n \"avg\": \"&streamingReq_avg\",\n \"min\": \"&streamingReq_min\",\n \"max\": \"&streamingReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n \n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Probe Req\",\n \"avg\": \"&probeReq_avg\",\n \"min\": \"&probeReq_min\",\n \"max\": \"&probeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Hits\",\n \"avg\": \"&hits_avg\",\n \"min\": \"&hits_min\",\n \"max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n }, \n {\n \"metric\": \"Misses\",\n \"avg\": \"&misses_avg\",\n \"min\": \"&misses_min\",\n \"max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit\",\n \"avg\": \"&cacheHit_avg\",\n \"min\": \"&cacheHit_min\",\n \"max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Writeback\",\n \"avg\": \"&writeback_avg\",\n \"min\": \"&writeback_min\",\n \"max\": \"&writeback_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"NC Req\",\n \"avg\": \"&nc_avg\",\n \"min\": \"&nc_min\",\n \"max\": \"&nc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"UC Req\",\n \"avg\": \"&uc_avg\",\n \"min\": \"&uc_min\",\n \"max\": \"&uc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"CC Req\",\n \"avg\": \"&cc_avg\",\n \"min\": \"&cc_min\",\n \"max\": \"&cc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"RW Req\",\n \"avg\": \"&rw_avg\",\n \"min\": \"&rw_min\",\n \"max\": \"&rw_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Writeback (Normal)\",\n \"avg\": \"&writebackNorm_avg\",\n \"min\": \"&writebackNorm_min\",\n \"max\": \"&writebackNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Writeback (TC Req)\",\n \"avg\": \"&writebackTC_avg\",\n \"min\": \"&writebackTC_min\",\n \"max\": \"&writebackTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (Normal)\",\n \"avg\": \"&evictNorm_avg\",\n \"min\": \"&evictNorm_min\",\n \"max\": \"&evictNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (TC Req)\",\n \"avg\": \"&evictTC_avg\",\n \"min\": \"&evictTC_min\",\n \"max\": \"&evictTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "L2 Cache Accesses", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "Aggregate": "last", + "BarPadding": 30, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "Transaction", + "GroupCols": 1, + "GroupGap": 5, + "GroupLabelColor": "#FADE2A", + "GroupLabelFontSize": "120%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": true, + "LabelColName": "Metric", + "LabelColor": "#ffffff", + "LabelFontSize": "80%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 0, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#FF9830", + "ValueDecimals": 0, + "ValueFontSize": "100%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:81", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Selected": true + } + ], + "datasource": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 63 + }, + "id": 60, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"ioStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"gmiStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"hbmStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"ioStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"gmiStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"hbmStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"creditStarvation_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n },\n \"creditStarvation_min\": {\n \"$min\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n },\n \"creditStarvation_max\": {\n \"$max\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n } \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Remote Socket Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"I/O\",\n \"Avg\": \"&ioStall_READ_avg\",\n \"Min\": \"&ioStall_READ_min\",\n \"Max\": \"&ioStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Peer GCD Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"GMI\",\n \"Avg\": \"&gmiStall_READ_avg\",\n \"Min\": \"&gmiStall_READ_min\",\n \"Max\": \"&gmiStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"HBM Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"HBM\",\n \"Avg\": \"&hbmStall_READ_avg\",\n \"Min\": \"&hbmStall_READ_min\",\n \"Max\": \"&hbmStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Remote Socket Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"I/O\",\n \"Avg\": \"&ioStall_WRITE_avg\",\n \"Min\": \"&ioStall_WRITE_min\",\n \"Max\": \"&ioStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Peer GCD Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"GMI\",\n \"Avg\": \"&gmiStall_WRITE_avg\",\n \"Min\": \"&gmiStall_WRITE_min\",\n \"Max\": \"&gmiStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"HBM Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"HBM\",\n \"Avg\": \"&hbmStall_WRITE_avg\",\n \"Min\": \"&hbmStall_WRITE_min\",\n \"Max\": \"&hbmStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Credit Starvation\",\n \"Transaction\": \"Write\",\n \"Target\": \"Fabric\",\n \"Avg\": \"&creditStarvation_avg\",\n \"Min\": \"&creditStarvation_min\",\n \"Max\": \"&creditStarvation_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - Fabric Interface Stalls (Cycles $normUnit)", + "transparent": true, + "type": "michaeldmoore-multistat-panel" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "L2 Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 47 + }, + "id": 66, + "panels": [ + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "light", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:850", + "Col": 1, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Hit Rate", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 87, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 Cache Hit Rate (Percent) (Channel 0 - 15) ", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "light", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:850", + "Col": 1, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Hit Rate", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 92, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "Cache Hit Rate % (Channel 16 - 31) ", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:565", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 81, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Read Requests(Channel 0-15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:656", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 25 + }, + "id": 82, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L 2 Read Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:697", + "Col": 4, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 33 + }, + "id": 83, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Write Requests (Channel 0-15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:750", + "Col": 4, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 84, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L2 Write Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:791", + "Col": 5, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 85, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Atomic Requests (Channel 0-15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:791", + "Col": 5, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 91, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L2 Atomic Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 6, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 49 + }, + "id": 189, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Requests (Channel 0 - 15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 6, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 49 + }, + "id": 195, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 7, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 191, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Requests (Channel 0 - 15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 7, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 197, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 8, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 65 + }, + "id": 193, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Request (Channel 0 - 15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 8, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 65 + }, + "id": 199, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "", + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 9, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Lat - cycles", + "Selected": true + } + ], + "datasource": {}, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 73 + }, + "hideTimeOverride": false, + "id": 68, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"b0_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[0]\", \"&TCC_MISS[0]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[0]\"]}, \n { \"$add\": [\"&TCC_HIT[0]\", \"&TCC_MISS[0]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b0_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[0]\"}, \"&denom\"] } \n },\n \"b0_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[0]\"}, \"&denom\"] } \n },\n \"b0_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[0]\"}, \"&denom\"] } \n },\n \"b0_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[0]\"}, \"&denom\"] } \n },\n \"b0_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[0]\"}, \"&denom\"] }\n },\n \"b0_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[0]\"}, \"&denom\"] } \n },\n \"b0_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[0]\"}, \"&denom\"] } \n },\n\n \"b0_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[0]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[0]\", \"&TCC_EA_RDREQ[0]\"]}, null] } },\n \"b0_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[0]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[0]\", \"&TCC_EA_WRREQ[0]\"]}, null] } },\n \"b0_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[0]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[0]\", \"&TCC_EA_ATOMIC[0]\"]}, null]}},\n\n \"b0_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[0]\"}, \"&denom\"] }},\n\n \n \"b1_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[1]\", \"&TCC_MISS[1]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[1]\"]}, \n { \"$add\": [\"&TCC_HIT[1]\", \"&TCC_MISS[1]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b1_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[1]\"}, \"&denom\"] } \n },\n \"b1_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[1]\"}, \"&denom\"] } \n },\n \"b1_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[1]\"}, \"&denom\"] } \n },\n \"b1_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[1]\"}, \"&denom\"] } \n },\n \"b1_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[1]\"}, \"&denom\"] }\n },\n \"b1_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[1]\"}, \"&denom\"] } \n },\n \"b1_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[1]\"}, \"&denom\"] } \n },\n \"b1_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[1]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[1]\", \"&TCC_EA_RDREQ[1]\"]}, null] } },\n \"b1_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[1]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[1]\", \"&TCC_EA_WRREQ[1]\"]}, null] } },\n \"b1_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[1]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[1]\", \"&TCC_EA_ATOMIC[1]\"]}, null]}},\n\n \"b1_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[1]\"}, \"&denom\"] }},\n\n\n \"b2_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[2]\", \"&TCC_MISS[2]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[2]\"]}, \n { \"$add\": [\"&TCC_HIT[2]\", \"&TCC_MISS[2]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b2_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[2]\"}, \"&denom\"] }\n },\n \"b2_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[2]\"}, \"&denom\"] } \n },\n \"b2_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[2]\"}, \"&denom\"] }\n },\n \"b2_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[2]\"}, \"&denom\"] }\n },\n \"b2_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[2]\"}, \"&denom\"] }\n },\n \"b2_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[2]\"}, \"&denom\"] }\n },\n \"b2_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[2]\"}, \"&denom\"] }\n },\n \"b2_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[2]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[2]\", \"&TCC_EA_RDREQ[2]\"]}, null] } },\n \"b2_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[2]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[2]\", \"&TCC_EA_WRREQ[2]\"]}, null] } },\n \"b2_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[2]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[2]\", \"&TCC_EA_ATOMIC[2]\"]}, null]}},\n\n \"b2_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[2]\"}, \"&denom\"] }},\n\n\n \n \"b3_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[3]\", \"&TCC_MISS[3]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[3]\"]}, \n { \"$add\": [\"&TCC_HIT[3]\", \"&TCC_MISS[3]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b3_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[3]\"}, \"&denom\"] } \n },\n \"b3_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[3]\"}, \"&denom\"] } \n },\n \"b3_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[3]\"}, \"&denom\"] }\n },\n \"b3_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[3]\"}, \"&denom\"] }\n },\n \"b3_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[3]\"}, \"&denom\"] }\n },\n \"b3_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[3]\"}, \"&denom\"] }\n },\n \"b3_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[3]\"}, \"&denom\"] } \n },\n \"b3_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[3]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[3]\", \"&TCC_EA_RDREQ[3]\"]}, null] } },\n \"b3_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[3]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[3]\", \"&TCC_EA_WRREQ[3]\"]}, null] } },\n \"b3_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[3]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[3]\", \"&TCC_EA_ATOMIC[3]\"]}, null]}},\n\n \"b3_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[3]\"}, \"&denom\"] }},\n\n\n \n \"b4_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[4]\", \"&TCC_MISS[4]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[4]\"]}, \n { \"$add\": [\"&TCC_HIT[4]\", \"&TCC_MISS[4]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b4_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[4]\"}, \"&denom\"] } \n },\n \"b4_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[4]\"}, \"&denom\"] } \n },\n \"b4_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[4]\"}, \"&denom\"] }\n },\n \"b4_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[4]\"}, \"&denom\"] } \n },\n \"b4_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[4]\"}, \"&denom\"] } \n },\n \"b4_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[4]\"}, \"&denom\"] } \n },\n \"b4_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[4]\"}, \"&denom\"] } \n },\n \"b4_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[4]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[4]\", \"&TCC_EA_RDREQ[4]\"]}, null] } },\n \"b4_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[4]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[4]\", \"&TCC_EA_WRREQ[4]\"]}, null] } },\n \"b4_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[4]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[4]\", \"&TCC_EA_ATOMIC[4]\"]}, null]}},\n\n \"b4_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[4]\"}, \"&denom\"] }},\n\n\n \n \"b5_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[5]\", \"&TCC_MISS[5]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[5]\"]}, \n { \"$add\": [\"&TCC_HIT[5]\", \"&TCC_MISS[5]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b5_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[5]\"}, \"&denom\"] } \n },\n \"b5_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[5]\"}, \"&denom\"] } \n },\n \"b5_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[5]\"}, \"&denom\"] } \n },\n \"b5_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[5]\"}, \"&denom\"] } \n },\n \"b5_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[5]\"}, \"&denom\"] } \n },\n \"b5_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[5]\"}, \"&denom\"] } \n },\n \"b5_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[5]\"}, \"&denom\"] } \n },\n \"b5_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[5]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[5]\", \"&TCC_EA_RDREQ[5]\"]}, null] } },\n \"b5_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[5]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[5]\", \"&TCC_EA_WRREQ[5]\"]}, null] } },\n \"b5_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[5]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[5]\", \"&TCC_EA_ATOMIC[5]\"]}, null]}},\n\n \"b5_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[5]\"}, \"&denom\"] }},\n\n\n \n \"b6_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[6]\", \"&TCC_MISS[6]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[6]\"]}, \n { \"$add\": [\"&TCC_HIT[6]\", \"&TCC_MISS[6]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b6_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[6]\"}, \"&denom\"] } \n },\n \"b6_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[6]\"}, \"&denom\"] } \n },\n \"b6_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[6]\"}, \"&denom\"] } \n },\n \"b6_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[6]\"}, \"&denom\"] } \n },\n \"b6_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[6]\"}, \"&denom\"] } \n },\n \"b6_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[6]\"}, \"&denom\"] }\n },\n \"b6_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[6]\"}, \"&denom\"] } \n },\n \"b6_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[6]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[6]\", \"&TCC_EA_RDREQ[6]\"]}, null] } },\n \"b6_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[6]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[6]\", \"&TCC_EA_WRREQ[6]\"]}, null] } },\n \"b6_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[6]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[6]\", \"&TCC_EA_ATOMIC[6]\"]}, null]}},\n\n \"b6_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[6]\"}, \"&denom\"] }},\n\n\n \n \"b7_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[7]\", \"&TCC_MISS[7]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[7]\"]}, \n { \"$add\": [\"&TCC_HIT[7]\", \"&TCC_MISS[7]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b7_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[7]\"}, \"&denom\"] } \n },\n \"b7_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[7]\"}, \"&denom\"] } \n },\n \"b7_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[7]\"}, \"&denom\"] } \n },\n \"b7_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[7]\"}, \"&denom\"] } \n },\n \"b7_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[7]\"}, \"&denom\"] } \n },\n \"b7_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[7]\"}, \"&denom\"] }\n },\n \"b7_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[7]\"}, \"&denom\"] } \n },\n \"b7_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[7]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[7]\", \"&TCC_EA_RDREQ[7]\"]}, null] } },\n \"b7_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[7]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[7]\", \"&TCC_EA_WRREQ[7]\"]}, null] } },\n \"b7_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[7]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[7]\", \"&TCC_EA_ATOMIC[7]\"]}, null]}},\n\n \"b7_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[7]\"}, \"&denom\"] }},\n\n\n \n \"b8_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[8]\", \"&TCC_MISS[8]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[8]\"]}, \n { \"$add\": [\"&TCC_HIT[8]\", \"&TCC_MISS[8]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b8_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[8]\"}, \"&denom\"] } \n },\n \"b8_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[8]\"}, \"&denom\"] } \n },\n \"b8_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[8]\"}, \"&denom\"] } \n },\n \"b8_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[8]\"}, \"&denom\"] } \n },\n \"b8_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[8]\"}, \"&denom\"] } \n },\n \"b8_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[8]\"}, \"&denom\"] } \n },\n \"b8_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[8]\"}, \"&denom\"] } \n },\n \"b8_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[8]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[8]\", \"&TCC_EA_RDREQ[8]\"]}, null] } },\n \"b8_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[8]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[8]\", \"&TCC_EA_WRREQ[8]\"]}, null] } },\n \"b8_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[8]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[8]\", \"&TCC_EA_ATOMIC[8]\"]}, null]}},\n\n \"b8_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[8]\"}, \"&denom\"] }},\n\n\n \n \"b9_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[9]\", \"&TCC_MISS[9]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[9]\"]}, \n { \"$add\": [\"&TCC_HIT[9]\", \"&TCC_MISS[9]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b9_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[9]\"}, \"&denom\"] } \n },\n \"b9_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[9]\"}, \"&denom\"] } \n },\n \"b9_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[9]\"}, \"&denom\"] } \n },\n \"b9_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[9]\"}, \"&denom\"] } \n },\n \"b9_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[9]\"}, \"&denom\"] } \n },\n \"b9_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[9]\"}, \"&denom\"] } \n },\n \"b9_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[9]\"}, \"&denom\"] } \n },\n \"b9_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[9]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[9]\", \"&TCC_EA_RDREQ[9]\"]}, null] } },\n \"b9_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[9]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[9]\", \"&TCC_EA_WRREQ[9]\"]}, null] } },\n \"b9_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[9]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[9]\", \"&TCC_EA_ATOMIC[9]\"]}, null]}},\n\n \"b9_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[9]\"}, \"&denom\"] }},\n\n\n \n \"b10_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[10]\", \"&TCC_MISS[10]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[10]\"]}, \n { \"$add\": [\"&TCC_HIT[10]\", \"&TCC_MISS[10]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b10_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[10]\"}, \"&denom\"] } \n },\n \"b10_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[10]\"}, \"&denom\"] } \n },\n \"b10_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[10]\"}, \"&denom\"] } \n },\n \"b10_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[10]\"}, \"&denom\"] } \n },\n \"b10_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[10]\"}, \"&denom\"] } \n },\n \"b10_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[10]\"}, \"&denom\"] } \n },\n \"b10_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[10]\"}, \"&denom\"] } \n },\n \"b10_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[10]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[10]\", \"&TCC_EA_RDREQ[10]\"]}, null] } },\n \"b10_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[10]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[10]\", \"&TCC_EA_WRREQ[10]\"]}, null] } },\n \"b10_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[10]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[10]\", \"&TCC_EA_ATOMIC[10]\"]}, null]}},\n\n \"b10_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[10]\"}, \"&denom\"] }},\n\n\n \n \"b11_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[11]\", \"&TCC_MISS[11]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[11]\"]}, \n { \"$add\": [\"&TCC_HIT[11]\", \"&TCC_MISS[11]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b11_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[11]\"}, \"&denom\"] } \n },\n \"b11_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[11]\"}, \"&denom\"] } \n },\n \"b11_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[11]\"}, \"&denom\"] } \n },\n \"b11_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[11]\"}, \"&denom\"] } \n },\n \"b11_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[11]\"}, \"&denom\"] } \n },\n \"b11_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[11]\"}, \"&denom\"] } \n },\n \"b11_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[11]\"}, \"&denom\"] } \n },\n \"b11_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[11]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[11]\", \"&TCC_EA_RDREQ[11]\"]}, null] } },\n \"b11_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[11]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[11]\", \"&TCC_EA_WRREQ[11]\"]}, null] } },\n \"b11_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[11]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[11]\", \"&TCC_EA_ATOMIC[11]\"]}, null]}},\n\n \"b11_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[11]\"}, \"&denom\"] }},\n\n\n \n \"b12_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[12]\", \"&TCC_MISS[12]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[12]\"]}, \n { \"$add\": [\"&TCC_HIT[12]\", \"&TCC_MISS[12]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b12_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[12]\"}, \"&denom\"] } \n },\n \"b12_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[12]\"}, \"&denom\"] } \n },\n \"b12_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[12]\"}, \"&denom\"] } \n },\n \"b12_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[12]\"}, \"&denom\"] } \n },\n \"b12_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[12]\"}, \"&denom\"] } \n },\n \"b12_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[12]\"}, \"&denom\"] } \n },\n \"b12_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[12]\"}, \"&denom\"] } \n },\n \"b12_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[12]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[12]\", \"&TCC_EA_RDREQ[12]\"]}, null] } },\n \"b12_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[12]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[12]\", \"&TCC_EA_WRREQ[12]\"]}, null] } },\n \"b12_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[12]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[12]\", \"&TCC_EA_ATOMIC[12]\"]}, null]}},\n\n \"b12_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[12]\"}, \"&denom\"] }},\n\n\n \n \"b13_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[13]\", \"&TCC_MISS[13]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[13]\"]}, \n { \"$add\": [\"&TCC_HIT[13]\", \"&TCC_MISS[13]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b13_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[13]\"}, \"&denom\"] } \n },\n \"b13_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[13]\"}, \"&denom\"] } \n },\n \"b13_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[13]\"}, \"&denom\"] } \n },\n \"b13_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[13]\"}, \"&denom\"] } \n },\n \"b13_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[13]\"}, \"&denom\"] } \n },\n \"b13_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[13]\"}, \"&denom\"] }\n },\n \"b13_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[13]\"}, \"&denom\"] } \n },\n \"b13_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[13]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[13]\", \"&TCC_EA_RDREQ[13]\"]}, null] } },\n \"b13_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[13]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[13]\", \"&TCC_EA_WRREQ[13]\"]}, null] } },\n \"b13_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[13]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[13]\", \"&TCC_EA_ATOMIC[13]\"]}, null]}},\n\n \"b13_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[13]\"}, \"&denom\"] }},\n\n\n \n \"b14_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[14]\", \"&TCC_MISS[14]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[14]\"]}, \n { \"$add\": [\"&TCC_HIT[14]\", \"&TCC_MISS[14]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b14_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[14]\"}, \"&denom\"] } \n },\n \"b14_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[14]\"}, \"&denom\"] } \n },\n \"b14_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[14]\"}, \"&denom\"] } \n },\n \"b14_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[14]\"}, \"&denom\"] } \n },\n \"b14_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[14]\"}, \"&denom\"] } \n },\n \"b14_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[14]\"}, \"&denom\"] } \n },\n \"b14_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[14]\"}, \"&denom\"] } \n },\n \"b14_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[14]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[14]\", \"&TCC_EA_RDREQ[14]\"]}, null] } },\n \"b14_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[14]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[14]\", \"&TCC_EA_WRREQ[14]\"]}, null] } },\n \"b14_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[14]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[14]\", \"&TCC_EA_ATOMIC[14]\"]}, null]}},\n\n \"b14_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[14]\"}, \"&denom\"] }},\n\n\n \n \"b15_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[15]\", \"&TCC_MISS[15]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[15]\"]}, \n { \"$add\": [\"&TCC_HIT[15]\", \"&TCC_MISS[15]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b15_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[15]\"}, \"&denom\"] } \n },\n \"b15_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[15]\"}, \"&denom\"] } \n },\n \"b15_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[15]\"}, \"&denom\"] } \n },\n \"b15_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[15]\"}, \"&denom\"] } \n },\n \"b15_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[15]\"}, \"&denom\"] } \n },\n \"b15_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[15]\"}, \"&denom\"] } \n },\n \"b15_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[15]\"}, \"&denom\"] }\n },\n \"b15_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[15]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[15]\", \"&TCC_EA_RDREQ[15]\"]}, null] } },\n \"b15_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[15]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[15]\", \"&TCC_EA_WRREQ[15]\"]}, null] } },\n \"b15_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[15]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[15]\", \"&TCC_EA_ATOMIC[15]\"]}, null]}},\n\n \"b15_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[15]\"}, \"&denom\"] }}\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Channel\": \"0\",\n \"Hit Rate\": \"&b0_hitRate\",\n \"Req\": \"&b0_req\",\n \"Read Req\": \"&b0_readReq\",\n \"Write Req\": \"&b0_writeReq\",\n \"AtomicReq\": \"&b0_atomicReq\",\n \"EA Read Req\": \"&b0_eaReadReq\",\n \"EA Write Req\": \"&b0_eaWriteReq\",\n \"EA AtomicReq\": \"&b0_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b0_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b0_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b0_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b0_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b0_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b0_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b0_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b0_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b0_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b0_ea_write_stall_too_many\"\n },\n {\n \"Channel\": \"1\",\n \"Hit Rate\": \"&b1_hitRate\",\n \"Req\": \"&b1_req\",\n \"Read Req\": \"&b1_readReq\",\n \"Write Req\": \"&b1_writeReq\",\n \"AtomicReq\": \"&b1_atomicReq\",\n \"EA Read Req\": \"&b1_eaReadReq\",\n \"EA Write Req\": \"&b1_eaWriteReq\",\n \"EA AtomicReq\": \"&b1_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b1_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b1_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b1_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b1_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b1_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b1_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b1_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b1_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b1_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b1_ea_write_stall_too_many\"\n },\n {\n \"Channel\": \"2\",\n \"Hit Rate\": \"&b2_hitRate\",\n \"Req\": \"&b2_req\",\n \"Read Req\": \"&b2_readReq\",\n \"Write Req\": \"&b2_writeReq\",\n \"AtomicReq\": \"&b2_atomicReq\",\n \"EA Read Req\": \"&b2_eaReadReq\",\n \"EA Write Req\": \"&b2_eaWriteReq\",\n \"EA AtomicReq\": \"&b2_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b2_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b2_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b2_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b2_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b2_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b2_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b2_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b2_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b2_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b2_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"3\",\n \"Hit Rate\": \"&b3_hitRate\",\n \"Req\": \"&b3_req\",\n \"Read Req\": \"&b3_readReq\",\n \"Write Req\": \"&b3_writeReq\",\n \"AtomicReq\": \"&b3_atomicReq\",\n \"EA Read Req\": \"&b3_eaReadReq\",\n \"EA Write Req\": \"&b3_eaWriteReq\",\n \"EA AtomicReq\": \"&b3_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b3_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b3_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b3_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b3_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b3_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b3_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b3_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b3_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b3_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b3_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"4\",\n \"Hit Rate\": \"&b4_hitRate\",\n \"Req\": \"&b4_req\",\n \"Read Req\": \"&b4_readReq\",\n \"Write Req\": \"&b4_writeReq\",\n \"AtomicReq\": \"&b4_atomicReq\",\n \"EA Read Req\": \"&b4_eaReadReq\",\n \"EA Write Req\": \"&b4_eaWriteReq\",\n \"EA AtomicReq\": \"&b4_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b4_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b4_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b4_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b4_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b4_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b4_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b4_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b4_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b4_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b4_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"5\",\n \"Hit Rate\": \"&b5_hitRate\",\n \"Req\": \"&b5_req\",\n \"Read Req\": \"&b5_readReq\",\n \"Write Req\": \"&b5_writeReq\",\n \"AtomicReq\": \"&b5_atomicReq\",\n \"EA Read Req\": \"&b5_eaReadReq\",\n \"EA Write Req\": \"&b5_eaWriteReq\",\n \"EA AtomicReq\": \"&b5_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b5_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b5_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b5_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b5_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b5_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b5_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b5_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b5_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b5_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b5_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"6\",\n \"Hit Rate\": \"&b6_hitRate\",\n \"Req\": \"&b6_req\",\n \"Read Req\": \"&b6_readReq\",\n \"Write Req\": \"&b6_writeReq\",\n \"AtomicReq\": \"&b6_atomicReq\",\n \"EA Read Req\": \"&b6_eaReadReq\",\n \"EA Write Req\": \"&b6_eaWriteReq\",\n \"EA AtomicReq\": \"&b6_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b6_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b6_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b6_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b6_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b6_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b6_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b6_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b6_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b6_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b6_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"7\",\n \"Hit Rate\": \"&b7_hitRate\",\n \"Req\": \"&b7_req\",\n \"Read Req\": \"&b7_readReq\",\n \"Write Req\": \"&b7_writeReq\",\n \"AtomicReq\": \"&b7_atomicReq\",\n \"EA Read Req\": \"&b7_eaReadReq\",\n \"EA Write Req\": \"&b7_eaWriteReq\",\n \"EA AtomicReq\": \"&b7_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b7_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b7_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b7_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b7_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b7_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b7_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b7_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b7_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b7_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b7_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"8\",\n \"Hit Rate\": \"&b8_hitRate\",\n \"Req\": \"&b8_req\",\n \"Read Req\": \"&b8_readReq\",\n \"Write Req\": \"&b8_writeReq\",\n \"AtomicReq\": \"&b8_atomicReq\",\n \"EA Read Req\": \"&b8_eaReadReq\",\n \"EA Write Req\": \"&b8_eaWriteReq\",\n \"EA AtomicReq\": \"&b8_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b8_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b8_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b8_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b8_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b8_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b8_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b8_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b8_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b8_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b8_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"9\",\n \"Hit Rate\": \"&b9_hitRate\",\n \"Req\": \"&b9_req\",\n \"Read Req\": \"&b9_readReq\",\n \"Write Req\": \"&b9_writeReq\",\n \"AtomicReq\": \"&b9_atomicReq\",\n \"EA Read Req\": \"&b9_eaReadReq\",\n \"EA Write Req\": \"&b9_eaWriteReq\",\n \"EA AtomicReq\": \"&b9_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b9_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b9_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b9_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b9_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b9_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b9_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b9_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b9_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b9_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b9_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"10\",\n \"Hit Rate\": \"&b10_hitRate\",\n \"Req\": \"&b10_req\",\n \"Read Req\": \"&b10_readReq\",\n \"Write Req\": \"&b10_writeReq\",\n \"AtomicReq\": \"&b10_atomicReq\",\n \"EA Read Req\": \"&b10_eaReadReq\",\n \"EA Write Req\": \"&b10_eaWriteReq\",\n \"EA AtomicReq\": \"&b10_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b10_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b10_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b10_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b10_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b10_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b10_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b10_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b10_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b10_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b10_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"11\",\n \"Hit Rate\": \"&b11_hitRate\",\n \"Req\": \"&b11_req\",\n \"Read Req\": \"&b11_readReq\",\n \"Write Req\": \"&b11_writeReq\",\n \"AtomicReq\": \"&b11_atomicReq\",\n \"EA Read Req\": \"&b11_eaReadReq\",\n \"EA Write Req\": \"&b11_eaWriteReq\",\n \"EA AtomicReq\": \"&b11_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b11_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b11_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b11_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b11_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b11_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b11_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b11_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b11_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b11_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b11_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"12\",\n \"Hit Rate\": \"&b12_hitRate\",\n \"Req\": \"&b12_req\",\n \"Read Req\": \"&b12_readReq\",\n \"Write Req\": \"&b12_writeReq\",\n \"AtomicReq\": \"&b12_atomicReq\",\n \"EA Read Req\": \"&b12_eaReadReq\",\n \"EA Write Req\": \"&b12_eaWriteReq\",\n \"EA AtomicReq\": \"&b12_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b12_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b12_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b12_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b12_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b12_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b12_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b12_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b12_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b12_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b12_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"13\",\n \"Hit Rate\": \"&b13_hitRate\",\n \"Req\": \"&b13_req\",\n \"Read Req\": \"&b13_readReq\",\n \"Write Req\": \"&b13_writeReq\",\n \"AtomicReq\": \"&b13_atomicReq\",\n \"EA Read Req\": \"&b13_eaReadReq\",\n \"EA Write Req\": \"&b13_eaWriteReq\",\n \"EA AtomicReq\": \"&b13_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b13_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b13_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b13_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b13_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b13_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b13_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b13_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b13_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b13_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b13_ea_write_stall_too_many\"\n\n\n },\n {\n \"Channel\": \"14\",\n \"Hit Rate\": \"&b14_hitRate\",\n \"Req\": \"&b14_req\",\n \"Read Req\": \"&b14_readReq\",\n \"Write Req\": \"&b14_writeReq\",\n \"AtomicReq\": \"&b14_atomicReq\",\n \"EA Read Req\": \"&b14_eaReadReq\",\n \"EA Write Req\": \"&b14_eaWriteReq\",\n \"EA AtomicReq\": \"&b14_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b14_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b14_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b14_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b14_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b14_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b14_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b14_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b14_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b14_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b14_ea_write_stall_too_many\"\n\n\n },\n {\n \"Channel\": \"15\",\n \"Hit Rate\": \"&b15_hitRate\",\n \"Req\": \"&b15_req\",\n \"Read Req\": \"&b15_readReq\",\n \"Write Req\": \"&b15_writeReq\",\n \"AtomicReq\": \"&b15_atomicReq\",\n \"EA Read Req\": \"&b15_eaReadReq\",\n \"EA Write Req\": \"&b15_eaWriteReq\",\n \"EA AtomicReq\": \"&b15_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b15_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b15_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b15_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b15_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b15_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b15_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b15_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b15_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b15_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b15_ea_write_stall_too_many\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - EA Read Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 9, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Lat - cycles", + "Selected": true + } + ], + "datasource": {}, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 73 + }, + "id": 70, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"b16_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[16]\", \"&TCC_MISS[16]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[16]\"]}, \n { \"$add\": [\"&TCC_HIT[16]\", \"&TCC_MISS[16]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b16_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[16]\"}, \"&denom\"] } \n },\n \"b16_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[16]\"}, \"&denom\"] } \n },\n \"b16_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[16]\"}, \"&denom\"] } \n },\n \"b16_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[16]\"}, \"&denom\"] } \n },\n \"b16_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[16]\"}, \"&denom\"] }\n },\n \"b16_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[16]\"}, \"&denom\"] } \n },\n \"b16_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[16]\"}, \"&denom\"] } \n },\n\n \"b16_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[16]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[16]\", \"&TCC_EA_RDREQ[16]\"]}, null] } },\n \"b16_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[16]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[16]\", \"&TCC_EA_WRREQ[16]\"]}, null] } },\n \"b16_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[16]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[16]\", \"&TCC_EA_ATOMIC[16]\"]}, null]}},\n \"b16_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[16]\"}, \"&denom\"] }},\n\n \n \"b17_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[17]\", \"&TCC_MISS[17]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[17]\"]}, \n { \"$add\": [\"&TCC_HIT[17]\", \"&TCC_MISS[17]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b17_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[17]\"}, \"&denom\"] } \n },\n \"b17_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[17]\"}, \"&denom\"] } \n },\n \"b17_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[17]\"}, \"&denom\"] } \n },\n \"b17_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[17]\"}, \"&denom\"] } \n },\n \"b17_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[17]\"}, \"&denom\"] }\n },\n \"b17_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[17]\"}, \"&denom\"] } \n },\n \"b17_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[17]\"}, \"&denom\"] } \n },\n \"b17_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[17]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[17]\", \"&TCC_EA_RDREQ[17]\"]}, null] } },\n \"b17_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[17]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[17]\", \"&TCC_EA_WRREQ[17]\"]}, null] } },\n \"b17_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[17]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[17]\", \"&TCC_EA_ATOMIC[17]\"]}, null]}},\n \"b17_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[17]\"}, \"&denom\"] }},\n\n \n \"b18_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[18]\", \"&TCC_MISS[18]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[18]\"]}, \n { \"$add\": [\"&TCC_HIT[18]\", \"&TCC_MISS[18]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b18_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[18]\"}, \"&denom\"] }\n },\n \"b18_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[18]\"}, \"&denom\"] } \n },\n \"b18_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[18]\"}, \"&denom\"] }\n },\n \"b18_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[18]\"}, \"&denom\"] }\n },\n \"b18_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[18]\"}, \"&denom\"] }\n },\n \"b18_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[18]\"}, \"&denom\"] }\n },\n \"b18_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[18]\"}, \"&denom\"] }\n },\n \"b18_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[18]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[18]\", \"&TCC_EA_RDREQ[18]\"]}, null] } },\n \"b18_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[18]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[18]\", \"&TCC_EA_WRREQ[18]\"]}, null] } },\n \"b18_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[18]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[18]\", \"&TCC_EA_ATOMIC[18]\"]}, null]}},\n \"b18_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[18]\"}, \"&denom\"] }},\n\n \n \"b19_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[19]\", \"&TCC_MISS[19]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[19]\"]}, \n { \"$add\": [\"&TCC_HIT[19]\", \"&TCC_MISS[19]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b19_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[19]\"}, \"&denom\"] } \n },\n \"b19_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[19]\"}, \"&denom\"] } \n },\n \"b19_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[19]\"}, \"&denom\"] }\n },\n \"b19_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[19]\"}, \"&denom\"] }\n },\n \"b19_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[19]\"}, \"&denom\"] }\n },\n \"b19_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[19]\"}, \"&denom\"] }\n },\n \"b19_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[19]\"}, \"&denom\"] } \n },\n \"b19_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[19]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[19]\", \"&TCC_EA_RDREQ[19]\"]}, null] } },\n \"b19_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[19]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[19]\", \"&TCC_EA_WRREQ[19]\"]}, null] } },\n \"b19_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[19]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[19]\", \"&TCC_EA_ATOMIC[19]\"]}, null]}},\n \"b19_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[19]\"}, \"&denom\"] }},\n\n \n \"b20_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[20]\", \"&TCC_MISS[20]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[20]\"]}, \n { \"$add\": [\"&TCC_HIT[20]\", \"&TCC_MISS[20]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b20_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[20]\"}, \"&denom\"] } \n },\n \"b20_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[20]\"}, \"&denom\"] } \n },\n \"b20_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[20]\"}, \"&denom\"] }\n },\n \"b20_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[20]\"}, \"&denom\"] } \n },\n \"b20_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[20]\"}, \"&denom\"] } \n },\n \"b20_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[20]\"}, \"&denom\"] } \n },\n \"b20_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[20]\"}, \"&denom\"] } \n },\n \"b20_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[20]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[20]\", \"&TCC_EA_RDREQ[20]\"]}, null] } },\n \"b20_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[20]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[20]\", \"&TCC_EA_WRREQ[20]\"]}, null] } },\n \"b20_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[20]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[20]\", \"&TCC_EA_ATOMIC[20]\"]}, null]}},\n \"b20_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[20]\"}, \"&denom\"] }},\n\n \n\n \"b21_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[21]\", \"&TCC_MISS[21]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[21]\"]}, \n { \"$add\": [\"&TCC_HIT[21]\", \"&TCC_MISS[21]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b21_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[21]\"}, \"&denom\"] } \n },\n \"b21_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[21]\"}, \"&denom\"] } \n },\n \"b21_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[21]\"}, \"&denom\"] } \n },\n \"b21_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[21]\"}, \"&denom\"] } \n },\n \"b21_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[21]\"}, \"&denom\"] } \n },\n \"b21_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[21]\"}, \"&denom\"] } \n },\n \"b21_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[21]\"}, \"&denom\"] } \n },\n \"b21_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[21]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[21]\", \"&TCC_EA_RDREQ[21]\"]}, null] } },\n \"b21_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[21]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[21]\", \"&TCC_EA_WRREQ[21]\"]}, null] } },\n \"b21_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[21]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[21]\", \"&TCC_EA_ATOMIC[21]\"]}, null]}},\n \"b21_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[21]\"}, \"&denom\"] }},\n\n \n\n \"b22_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[22]\", \"&TCC_MISS[22]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[22]\"]}, \n { \"$add\": [\"&TCC_HIT[22]\", \"&TCC_MISS[22]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b22_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[22]\"}, \"&denom\"] } \n },\n \"b22_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[22]\"}, \"&denom\"] } \n },\n \"b22_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[22]\"}, \"&denom\"] } \n },\n \"b22_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[22]\"}, \"&denom\"] } \n },\n \"b22_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[22]\"}, \"&denom\"] } \n },\n \"b22_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[22]\"}, \"&denom\"] }\n },\n \"b22_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[22]\"}, \"&denom\"] } \n },\n \"b22_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[22]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[22]\", \"&TCC_EA_RDREQ[22]\"]}, null] } },\n \"b22_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[22]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[22]\", \"&TCC_EA_WRREQ[22]\"]}, null] } },\n \"b22_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[22]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[22]\", \"&TCC_EA_ATOMIC[22]\"]}, null]}},\n \"b22_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[22]\"}, \"&denom\"] }},\n\n \n\n \"b23_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[23]\", \"&TCC_MISS[23]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[23]\"]}, \n { \"$add\": [\"&TCC_HIT[23]\", \"&TCC_MISS[23]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b23_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[23]\"}, \"&denom\"] } \n },\n \"b23_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[23]\"}, \"&denom\"] } \n },\n \"b23_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[23]\"}, \"&denom\"] } \n },\n \"b23_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[23]\"}, \"&denom\"] } \n },\n \"b23_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[23]\"}, \"&denom\"] } \n },\n \"b23_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[23]\"}, \"&denom\"] }\n },\n \"b23_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[23]\"}, \"&denom\"] } \n },\n \"b23_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[23]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[23]\", \"&TCC_EA_RDREQ[23]\"]}, null] } },\n \"b23_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[23]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[23]\", \"&TCC_EA_WRREQ[23]\"]}, null] } },\n \"b23_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[23]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[23]\", \"&TCC_EA_ATOMIC[23]\"]}, null]}},\n \"b23_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[23]\"}, \"&denom\"] }},\n\n \n \"b24_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[24]\", \"&TCC_MISS[24]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[24]\"]}, \n { \"$add\": [\"&TCC_HIT[24]\", \"&TCC_MISS[24]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b24_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[24]\"}, \"&denom\"] } \n },\n \"b24_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[24]\"}, \"&denom\"] } \n },\n \"b24_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[24]\"}, \"&denom\"] } \n },\n \"b24_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[24]\"}, \"&denom\"] } \n },\n \"b24_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[24]\"}, \"&denom\"] } \n },\n \"b24_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[24]\"}, \"&denom\"] } \n },\n \"b24_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[24]\"}, \"&denom\"] } \n },\n \"b24_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[24]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[24]\", \"&TCC_EA_RDREQ[24]\"]}, null] } },\n \"b24_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[24]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[24]\", \"&TCC_EA_WRREQ[24]\"]}, null] } },\n \"b24_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[24]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[24]\", \"&TCC_EA_ATOMIC[24]\"]}, null]}},\n \"b24_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[24]\"}, \"&denom\"] }},\n\n \n \"b25_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[25]\", \"&TCC_MISS[25]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[25]\"]}, \n { \"$add\": [\"&TCC_HIT[25]\", \"&TCC_MISS[25]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b25_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[25]\"}, \"&denom\"] } \n },\n \"b25_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[25]\"}, \"&denom\"] } \n },\n \"b25_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[25]\"}, \"&denom\"] } \n },\n \"b25_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[25]\"}, \"&denom\"] } \n },\n \"b25_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[25]\"}, \"&denom\"] } \n },\n \"b25_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[25]\"}, \"&denom\"] } \n },\n \"b25_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[25]\"}, \"&denom\"] } \n },\n \"b25_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[25]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[25]\", \"&TCC_EA_RDREQ[25]\"]}, null] } },\n \"b25_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[25]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[25]\", \"&TCC_EA_WRREQ[25]\"]}, null] } },\n \"b25_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[25]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[25]\", \"&TCC_EA_ATOMIC[25]\"]}, null]}},\n \"b25_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[25]\"}, \"&denom\"] }},\n\n \n \"b26_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[26]\", \"&TCC_MISS[26]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[26]\"]}, \n { \"$add\": [\"&TCC_HIT[26]\", \"&TCC_MISS[26]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b26_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[26]\"}, \"&denom\"] } \n },\n \"b26_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[26]\"}, \"&denom\"] } \n },\n \"b26_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[26]\"}, \"&denom\"] } \n },\n \"b26_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[26]\"}, \"&denom\"] } \n },\n \"b26_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[26]\"}, \"&denom\"] } \n },\n \"b26_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[26]\"}, \"&denom\"] } \n },\n \"b26_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[26]\"}, \"&denom\"] } \n },\n \"b26_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[26]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[26]\", \"&TCC_EA_RDREQ[26]\"]}, null] } },\n \"b26_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[26]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[26]\", \"&TCC_EA_WRREQ[26]\"]}, null] } },\n \"b26_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[26]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[26]\", \"&TCC_EA_ATOMIC[26]\"]}, null]}},\n \"b26_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[26]\"}, \"&denom\"] }},\n\n \n \"b27_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[27]\", \"&TCC_MISS[27]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[27]\"]}, \n { \"$add\": [\"&TCC_HIT[27]\", \"&TCC_MISS[27]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b27_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[27]\"}, \"&denom\"] } \n },\n \"b27_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[27]\"}, \"&denom\"] } \n },\n \"b27_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[27]\"}, \"&denom\"] } \n },\n \"b27_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[27]\"}, \"&denom\"] } \n },\n \"b27_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[27]\"}, \"&denom\"] } \n },\n \"b27_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[27]\"}, \"&denom\"] } \n },\n \"b27_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[27]\"}, \"&denom\"] } \n },\n \"b27_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[27]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[27]\", \"&TCC_EA_RDREQ[27]\"]}, null] } },\n \"b27_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[27]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[27]\", \"&TCC_EA_WRREQ[27]\"]}, null] } },\n \"b27_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[27]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[27]\", \"&TCC_EA_ATOMIC[27]\"]}, null]}},\n \"b27_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[27]\"}, \"&denom\"] }},\n\n \n \"b28_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[28]\", \"&TCC_MISS[28]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[28]\"]}, \n { \"$add\": [\"&TCC_HIT[28]\", \"&TCC_MISS[28]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b28_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[28]\"}, \"&denom\"] } \n },\n \"b28_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[28]\"}, \"&denom\"] } \n },\n \"b28_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[28]\"}, \"&denom\"] } \n },\n \"b28_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[28]\"}, \"&denom\"] } \n },\n \"b28_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[28]\"}, \"&denom\"] } \n },\n \"b28_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[28]\"}, \"&denom\"] } \n },\n \"b28_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[28]\"}, \"&denom\"] } \n },\n \"b28_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[28]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[28]\", \"&TCC_EA_RDREQ[28]\"]}, null] } },\n \"b28_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[28]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[28]\", \"&TCC_EA_WRREQ[28]\"]}, null] } },\n \"b28_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[28]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[28]\", \"&TCC_EA_ATOMIC[28]\"]}, null]}},\n \"b28_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[28]\"}, \"&denom\"] }},\n\n \n \"b29_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[29]\", \"&TCC_MISS[29]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[29]\"]}, \n { \"$add\": [\"&TCC_HIT[29]\", \"&TCC_MISS[29]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b29_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[29]\"}, \"&denom\"] } \n },\n \"b29_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[29]\"}, \"&denom\"] } \n },\n \"b29_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[29]\"}, \"&denom\"] } \n },\n \"b29_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[29]\"}, \"&denom\"] } \n },\n \"b29_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[29]\"}, \"&denom\"] } \n },\n \"b29_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[29]\"}, \"&denom\"] }\n },\n \"b29_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[29]\"}, \"&denom\"] } \n },\n \"b29_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[29]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[29]\", \"&TCC_EA_RDREQ[29]\"]}, null] } },\n \"b29_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[29]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[29]\", \"&TCC_EA_WRREQ[29]\"]}, null] } },\n \"b29_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[29]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[29]\", \"&TCC_EA_ATOMIC[29]\"]}, null]}},\n \"b29_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[29]\"}, \"&denom\"] }},\n\n \n \"b30_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[30]\", \"&TCC_MISS[30]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[30]\"]}, \n { \"$add\": [\"&TCC_HIT[30]\", \"&TCC_MISS[30]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b30_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[30]\"}, \"&denom\"] } \n },\n \"b30_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[30]\"}, \"&denom\"] } \n },\n \"b30_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[30]\"}, \"&denom\"] } \n },\n \"b30_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[30]\"}, \"&denom\"] } \n },\n \"b30_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[30]\"}, \"&denom\"] } \n },\n \"b30_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[30]\"}, \"&denom\"] } \n },\n \"b30_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[30]\"}, \"&denom\"] } \n },\n \"b30_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[30]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[30]\", \"&TCC_EA_RDREQ[30]\"]}, null] } },\n \"b30_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[30]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[30]\", \"&TCC_EA_WRREQ[30]\"]}, null] } },\n \"b30_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[30]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[30]\", \"&TCC_EA_ATOMIC[30]\"]}, null]}},\n \"b30_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[30]\"}, \"&denom\"] }},\n\n \n \"b31_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[31]\", \"&TCC_MISS[31]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[31]\"]}, \n { \"$add\": [\"&TCC_HIT[31]\", \"&TCC_MISS[31]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b31_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[31]\"}, \"&denom\"] } \n },\n \"b31_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[31]\"}, \"&denom\"] } \n },\n \"b31_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[31]\"}, \"&denom\"] } \n },\n \"b31_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[31]\"}, \"&denom\"] } \n },\n \"b31_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[31]\"}, \"&denom\"] } \n },\n \"b31_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[31]\"}, \"&denom\"] } \n },\n \"b31_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[31]\"}, \"&denom\"] }\n },\n \"b31_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[31]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[31]\", \"&TCC_EA_RDREQ[31]\"]}, null] } },\n \"b31_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[31]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[31]\", \"&TCC_EA_WRREQ[31]\"]}, null] } },\n \"b31_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[31]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[31]\", \"&TCC_EA_ATOMIC[31]\"]}, null]}},\n \"b31_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[31]\"}, \"&denom\"] }}\n\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Channel\": \"16\",\n \"Hit Rate\": \"&b16_hitRate\",\n \"Req\": \"&b16_req\",\n \"Read Req\": \"&b16_readReq\",\n \"Write Req\": \"&b16_writeReq\",\n \"AtomicReq\": \"&b16_atomicReq\",\n \"EA Read Req\": \"&b16_eaReadReq\",\n \"EA Write Req\": \"&b16_eaWriteReq\",\n \"EA AtomicReq\": \"&b16_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b16_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b16_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b16_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b16_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b16_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b16_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b16_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b16_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b16_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b16_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"17\",\n \"Hit Rate\": \"&b17_hitRate\",\n \"Req\": \"&b17_req\",\n \"Read Req\": \"&b17_readReq\",\n \"Write Req\": \"&b17_writeReq\",\n \"AtomicReq\": \"&b17_atomicReq\",\n \"EA Read Req\": \"&b17_eaReadReq\",\n \"EA Write Req\": \"&b17_eaWriteReq\",\n \"EA AtomicReq\": \"&b17_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b17_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b17_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b17_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b17_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b17_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b17_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b17_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b17_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b17_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b17_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"18\",\n \"Hit Rate\": \"&b18_hitRate\",\n \"Req\": \"&b18_req\",\n \"Read Req\": \"&b18_readReq\",\n \"Write Req\": \"&b18_writeReq\",\n \"AtomicReq\": \"&b18_atomicReq\",\n \"EA Read Req\": \"&b18_eaReadReq\",\n \"EA Write Req\": \"&b18_eaWriteReq\",\n \"EA AtomicReq\": \"&b18_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b18_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b18_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b18_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b18_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b18_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b18_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b18_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b18_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b18_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b18_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"19\",\n \"Hit Rate\": \"&b19_hitRate\",\n \"Req\": \"&b19_req\",\n \"Read Req\": \"&b19_readReq\",\n \"Write Req\": \"&b19_writeReq\",\n \"AtomicReq\": \"&b19_atomicReq\",\n \"EA Read Req\": \"&b19_eaReadReq\",\n \"EA Write Req\": \"&b19_eaWriteReq\",\n \"EA AtomicReq\": \"&b19_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b19_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b19_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b19_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b19_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b19_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b19_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b19_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b19_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b19_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b19_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"20\",\n \"Hit Rate\": \"&b20_hitRate\",\n \"Req\": \"&b20_req\",\n \"Read Req\": \"&b20_readReq\",\n \"Write Req\": \"&b20_writeReq\",\n \"AtomicReq\": \"&b20_atomicReq\",\n \"EA Read Req\": \"&b20_eaReadReq\",\n \"EA Write Req\": \"&b20_eaWriteReq\",\n \"EA AtomicReq\": \"&b20_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b20_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b20_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b20_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b20_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b20_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b20_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b20_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b20_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b20_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b20_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"21\",\n \"Hit Rate\": \"&b21_hitRate\",\n \"Req\": \"&b21_req\",\n \"Read Req\": \"&b21_readReq\",\n \"Write Req\": \"&b21_writeReq\",\n \"AtomicReq\": \"&b21_atomicReq\",\n \"EA Read Req\": \"&b21_eaReadReq\",\n \"EA Write Req\": \"&b21_eaWriteReq\",\n \"EA AtomicReq\": \"&b21_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b21_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b21_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b21_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b21_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b21_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b21_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b21_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b21_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b21_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b21_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"22\",\n \"Hit Rate\": \"&b22_hitRate\",\n \"Req\": \"&b22_req\",\n \"Read Req\": \"&b22_readReq\",\n \"Write Req\": \"&b22_writeReq\",\n \"AtomicReq\": \"&b22_atomicReq\",\n \"EA Read Req\": \"&b22_eaReadReq\",\n \"EA Write Req\": \"&b22_eaWriteReq\",\n \"EA AtomicReq\": \"&b22_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b22_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b22_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b22_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b22_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b22_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b22_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b22_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b22_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b22_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b22_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"23\",\n \"Hit Rate\": \"&b23_hitRate\",\n \"Req\": \"&b23_req\",\n \"Read Req\": \"&b23_readReq\",\n \"Write Req\": \"&b23_writeReq\",\n \"AtomicReq\": \"&b23_atomicReq\",\n \"EA Read Req\": \"&b23_eaReadReq\",\n \"EA Write Req\": \"&b23_eaWriteReq\",\n \"EA AtomicReq\": \"&b23_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b23_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b23_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b23_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b23_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b23_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b23_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b23_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b23_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b23_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b23_ea_write_stall_too_many\"\n\n\n },\n {\n \"Channel\": \"24\",\n \"Hit Rate\": \"&b24_hitRate\",\n \"Req\": \"&b24_req\",\n \"Read Req\": \"&b24_readReq\",\n \"Write Req\": \"&b24_writeReq\",\n \"AtomicReq\": \"&b24_atomicReq\",\n \"EA Read Req\": \"&b24_eaReadReq\",\n \"EA Write Req\": \"&b24_eaWriteReq\",\n \"EA AtomicReq\": \"&b24_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b24_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b24_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b24_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b24_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b24_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b24_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b24_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b24_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b24_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b24_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"25\",\n \"Hit Rate\": \"&b25_hitRate\",\n \"Req\": \"&b25_req\",\n \"Read Req\": \"&b25_readReq\",\n \"Write Req\": \"&b25_writeReq\",\n \"AtomicReq\": \"&b25_atomicReq\",\n \"EA Read Req\": \"&b25_eaReadReq\",\n \"EA Write Req\": \"&b25_eaWriteReq\",\n \"EA AtomicReq\": \"&b25_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b25_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b25_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b25_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b25_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b25_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b25_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b25_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b25_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b25_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b25_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"26\",\n \"Hit Rate\": \"&b26_hitRate\",\n \"Req\": \"&b26_req\",\n \"Read Req\": \"&b26_readReq\",\n \"Write Req\": \"&b26_writeReq\",\n \"AtomicReq\": \"&b26_atomicReq\",\n \"EA Read Req\": \"&b26_eaReadReq\",\n \"EA Write Req\": \"&b26_eaWriteReq\",\n \"EA AtomicReq\": \"&b26_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b26_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b26_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b26_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b26_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b26_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b26_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b26_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b26_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b26_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b26_ea_write_stall_too_many\"\n\n\n },\n {\n \"Channel\": \"27\",\n \"Hit Rate\": \"&b27_hitRate\",\n \"Req\": \"&b27_req\",\n \"Read Req\": \"&b27_readReq\",\n \"Write Req\": \"&b27_writeReq\",\n \"AtomicReq\": \"&b27_atomicReq\",\n \"EA Read Req\": \"&b27_eaReadReq\",\n \"EA Write Req\": \"&b27_eaWriteReq\",\n \"EA AtomicReq\": \"&b27_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b27_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b27_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b27_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b27_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b27_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b27_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b27_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b27_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b27_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b27_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"28\",\n \"Hit Rate\": \"&b28_hitRate\",\n \"Req\": \"&b28_req\",\n \"Read Req\": \"&b28_readReq\",\n \"Write Req\": \"&b28_writeReq\",\n \"AtomicReq\": \"&b28_atomicReq\",\n \"EA Read Req\": \"&b28_eaReadReq\",\n \"EA Write Req\": \"&b28_eaWriteReq\",\n \"EA AtomicReq\": \"&b28_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b28_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b28_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b28_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b28_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b28_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b28_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b28_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b28_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b28_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b28_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"29\",\n \"Hit Rate\": \"&b29_hitRate\",\n \"Req\": \"&b29_req\",\n \"Read Req\": \"&b29_readReq\",\n \"Write Req\": \"&b29_writeReq\",\n \"AtomicReq\": \"&b29_atomicReq\",\n \"EA Read Req\": \"&b29_eaReadReq\",\n \"EA Write Req\": \"&b29_eaWriteReq\",\n \"EA AtomicReq\": \"&b29_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b29_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b29_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b29_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b29_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b29_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b29_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b29_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b29_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b29_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b29_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"30\",\n \"Hit Rate\": \"&b30_hitRate\",\n \"Req\": \"&b30_req\",\n \"Read Req\": \"&b30_readReq\",\n \"Write Req\": \"&b30_writeReq\",\n \"AtomicReq\": \"&b30_atomicReq\",\n \"EA Read Req\": \"&b30_eaReadReq\",\n \"EA Write Req\": \"&b30_eaWriteReq\",\n \"EA AtomicReq\": \"&b30_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b30_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b30_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b30_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b30_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b30_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b30_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b30_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b30_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b30_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b30_ea_write_stall_too_many\"\n\n },\n {\n \"Channel\": \"31\",\n \"Hit Rate\": \"&b31_hitRate\",\n \"Req\": \"&b31_req\",\n \"Read Req\": \"&b31_readReq\",\n \"Write Req\": \"&b31_writeReq\",\n \"AtomicReq\": \"&b31_atomicReq\",\n \"EA Read Req\": \"&b31_eaReadReq\",\n \"EA Write Req\": \"&b31_eaWriteReq\",\n \"EA AtomicReq\": \"&b31_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b31_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b31_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b31_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b31_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b31_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b31_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b31_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b31_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b31_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b31_ea_write_stall_too_many\"\n\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - EA Read Latency (Channel 16-31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 10, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 81 + }, + "id": 93, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 10, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 81 + }, + "id": 94, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Latency (Channel 16 - 31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 11, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Atomic Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 89 + }, + "id": 187, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 11, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Atomic Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 89 + }, + "id": 201, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Latency (Channel 16 - 31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 12, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 97 + }, + "id": 220, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - I/O (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 12, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 97 + }, + "id": 227, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - I/O (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 13, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 105 + }, + "id": 221, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - GMI (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 13, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 105 + }, + "id": 228, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - GMI (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 14, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 113 + }, + "id": 222, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - HBM (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 14, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 113 + }, + "id": 229, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - HBM (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 15, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 223, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - I/O (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 15, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 121 + }, + "id": 230, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - I/O (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 16, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 129 + }, + "id": 225, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - GMI (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 16, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 129 + }, + "id": 231, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - GMI (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 17, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 137 + }, + "id": 224, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - HBM (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 17, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 137 + }, + "id": 232, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - HBM (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 18, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - Starve", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 145 + }, + "id": 226, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Starve (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 18, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - Starve", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 145 + }, + "id": 233, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Starve (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "L2 Cache (per Channel)", + "type": "row" + } + ], + "refresh": "", + "schemaVersion": 34, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": true, + "text": "\"per Wave\"", + "value": "\"per Wave\"" + }, + "hide": 0, + "includeAll": false, + "label": "Normalization", + "multi": false, + "name": "normUnit", + "options": [ + { + "selected": true, + "text": "\"per Wave\"", + "value": "\"per Wave\"" + }, + { + "selected": false, + "text": "\"per Cycle\"", + "value": "\"per Cycle\"" + }, + { + "selected": false, + "text": "\"per Sec\"", + "value": "\"per Sec\"" + }, + { + "selected": false, + "text": "\"per Kernel\"", + "value": "\"per Kernel\"" + } + ], + "query": "\"per Wave\",\n\"per Cycle\",\n\"per Sec\",\n\"per Kernel\"", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "L2 Channels", + "multi": false, + "name": "L2Banks", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "8", + "value": "8" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#SEs", + "multi": false, + "name": "numSE", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "110", + "value": "110" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#CUs", + "multi": false, + "name": "numCU", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Max Waves/CU", + "multi": false, + "name": "maxWavesPerCU", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1700", + "value": "1700" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "SCLK (MHz)", + "multi": false, + "name": "sclk", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "56", + "value": "56" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#SQC", + "multi": false, + "name": "numSQC", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1638.4", + "value": "1638.4" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "HBM BW (GB/s)", + "multi": false, + "name": "hbmBW", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "miperf_ast_reproducer_swatomics_mi200", + "value": "miperf_ast_reproducer_swatomics_mi200" + }, + "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Workload", + "multi": false, + "name": "Workload1", + "options": [], + "query": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1528823703", + "value": "1528823703" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Kernel Cycles", + "multi": false, + "name": "kernelBusyCycles", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "110", + "value": "110" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Active CUs", + "multi": false, + "name": "numActiveCUs", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "description": "Defaults to all DispatchIDs", + "hide": 2, + "includeAll": true, + "label": "Filtered Dispatch ID", + "multi": false, + "name": "DispatchIDFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "refresh": 1, + "regex": "${DispatchID:text}", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "", + "value": "" + }, + "description": "Desired DispatchID filters as regex ex. (1|18)", + "hide": 0, + "label": "Dispatch Filter", + "name": "DispatchID", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "current": { + "selected": false, + "text": "0", + "value": "0" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "GCD", + "multi": false, + "name": "gpuFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 3, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "hide": 0, + "includeAll": true, + "label": "Kernels", + "multi": true, + "name": "KernelNameFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "miperf_asw_vcopy_mi200", + "value": "miperf_asw_vcopy_mi200" + }, + "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Baseline Workload", + "multi": false, + "name": "Workload2", + "options": [], + "query": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "84", + "value": "84" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] }, 8] }] }, $numCU2] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline ActiveCUs", + "multi": false, + "name": "numActiveCUs2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] }, 8] }] }, $numCU2] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "description": "Defaults to all DispatchIDs", + "hide": 2, + "includeAll": true, + "label": "Baseline Dispatch IDs", + "multi": false, + "name": "DispatchIDFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "refresh": 1, + "regex": "${DispatchID2:text}", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "", + "value": "" + }, + "description": "Desired DispatchID filters as regex ex. (1|18)", + "hide": 0, + "label": "Baseline Dispatch Filter", + "name": "DispatchID2", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "current": { + "selected": false, + "text": "0", + "value": "0" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Baseline GCD", + "multi": false, + "name": "gpuFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "hide": 0, + "includeAll": true, + "label": "Baseline Kernels", + "multi": true, + "name": "KernelNameFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "System Info" + ], + "value": [ + "System Info" + ] + }, + "hide": 0, + "includeAll": false, + "label": "Comparison Panels", + "multi": true, + "name": "select", + "options": [ + { + "selected": true, + "text": "System Info", + "value": "System Info" + }, + { + "selected": false, + "text": "System Speed-of-Light", + "value": "System Speed-of-Light" + }, + { + "selected": false, + "text": "Roofline", + "value": "Roofline" + }, + { + "selected": false, + "text": "Command Processor", + "value": "Command Processor" + }, + { + "selected": false, + "text": "Shader Processor Input", + "value": "Shader Processor Input" + }, + { + "selected": false, + "text": "Wavefront", + "value": "Wavefront" + }, + { + "selected": false, + "text": "Compute Pipeline", + "value": "Compute Pipeline" + }, + { + "selected": false, + "text": "Instruction Mix", + "value": "Instruction Mix" + }, + { + "selected": false, + "text": "Local Data Share", + "value": "Local Data Share" + }, + { + "selected": false, + "text": "Instruction Cache", + "value": "Instruction Cache" + }, + { + "selected": false, + "text": "Scalar L1D Cache", + "value": "Scalar L1D Cache" + }, + { + "selected": false, + "text": "Texture Addr and Data", + "value": "Texture Addr and Data" + }, + { + "selected": false, + "text": "Vector L1D Cache", + "value": "Vector L1D Cache" + }, + { + "selected": false, + "text": "L2 Cache", + "value": "L2 Cache" + } + ], + "query": "System Info, \nSystem Speed-of-Light, \nRoofline,\nCommand Processor, \nShader Processor Input, \nWavefront,\nCompute Pipeline, \nInstruction Mix,\nLocal Data Share, \nInstruction Cache, \nScalar L1D Cache, \nTexture Addr and Data, \nVector L1D Cache,\nL2 Cache", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline L2 Channels", + "multi": false, + "name": "L2Banks2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "8", + "value": "8" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #SEs", + "multi": false, + "name": "numSE2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "110", + "value": "110" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #CUs", + "multi": false, + "name": "numCU2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline Max Waves/CU", + "multi": false, + "name": "maxWavesPerCU2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1700", + "value": "1700" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline SCLK (MHz)", + "multi": false, + "name": "sclk2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "56", + "value": "56" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #SQC", + "multi": false, + "name": "numSQC2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1638.4", + "value": "1638.4" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline HBM BW (GB/s)", + "multi": false, + "name": "hbmBW2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "mi200", + "value": "mi200" + }, + "definition": "${Workload1}.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "SOC", + "multi": false, + "name": "soc", + "options": [], + "query": "${Workload1}.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "5", + "value": "5" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "TopN", + "options": [ + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": true, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "15", + "value": "15" + }, + { + "selected": false, + "text": "20", + "value": "20" + }, + { + "selected": false, + "text": "50", + "value": "50" + }, + { + "selected": false, + "text": "100", + "value": "100" + } + ], + "query": "1,5,10,15,20,50,100", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "2021-11-04T14:21:39.749Z", + "to": "2021-11-08T14:21:39.749Z" + }, + "timepicker": {}, + "timezone": "", + "title": "Omniperf_v1.0.5_pub", + "uid": "MIPerf_v1_0_0630202211", + "version": 3, + "weekStart": "" +} \ No newline at end of file diff --git a/dashboards/Omniperf_v1.0.7_pub.json b/dashboards/Omniperf_v1.0.7_pub.json new file mode 100644 index 0000000000..1a9c07c07b --- /dev/null +++ b/dashboards/Omniperf_v1.0.7_pub.json @@ -0,0 +1,13328 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 42, + "iteration": 1673969861340, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 217, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 23, + "w": 13, + "x": 0, + "y": 1 + }, + "id": 159, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.sysinfo.aggregate([\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.sysinfo.aggregate([\n {\"$match\": {\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(System Info)\"}}\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "System Info", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true + }, + "indexByName": {}, + "renameByName": { + "Value 1": "Current", + "Value 2": "Baseline" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "System Info", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 108, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto", + "filterable": false + }, + "decimals": 0, + "links": [], + "mappings": [ + { + "options": { + "match": "false", + "result": { + "index": 0 + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Percent of Peak - PoP" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "orange", + "value": 50 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + { + "id": "custom.displayMode", + "value": "color-background" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "color-text" + }, + { + "id": "custom.width", + "value": 252 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit 1" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "color-background" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 137 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 161 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 15, + "x": 0, + "y": 2 + }, + "id": 110, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n \n \"valu_intOps_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \n \n \"salu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU] }] }\n },\n \n \"valu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU] }] }\n },\n \n \"mfma_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU, 4] }] }\n },\n\n \n \"lds_bconf\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \n \"lds_bw\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n \n \"lds_bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}, \n {\"$multiply\": [$sclk, $numCU, 0.00128]}\n ]}\n },\n \n \"unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \n \"ipcIssue_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\", \"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"eaWriteLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null \n ]\n }\n },\n \"eaReadLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null \n ]\n }\n },\n \"eaWriteBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }, \n \"eaReadBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \"l2_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null \n ]\n }\n },\n \"vecl1_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]},\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vecl1_BW_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"l1k_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]} , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]}] },\n null\n ]\n }\n },\n \"l1i_hitRate_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\"]}] }\n },\n \"l1i_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_ICACHE_REQ\",{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n },\n \"l1k_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_DCACHE_REQ\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"VALU FLOPs\",\n \"Value\": \"&valu_flops_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"VALU IOPs\",\n \"Value\": \"&valu_intOps_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_intOps_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (BF16)\",\n \"Value\": \"&mfma_flops_bf16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F16)\",\n \"Value\": \"&mfma_flops_f16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F32)\",\n \"Value\": \"&mfma_flops_f32_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F64)\",\n \"Value\": \"&mfma_flops_f64_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA IOPs (Int8)\",\n \"Value\": \"&mfma_flops_i8_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Value\": $numActiveCUs,\n \"Unit\": \"CUs\",\n \"peak\": $numCU,\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, $numActiveCUs] }, $numCU]}\n },\n \n {\n \"Metric\": \"SALU Util\",\n \"Value\": \"&salu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&salu_val\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Value\": \"&valu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&valu_val\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Value\": \"&mfma_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&mfma_val\"\n },\n {\n \"Metric\": \"VALU Active Threads/Wave\",\n \"Value\": \"&unpredthreads_val\",\n \"Unit\": \"Threads\",\n \"peak\": 64,\n \"Percent of Peak - PoP\": { \"$multiply\": [\"&unpredthreads_val\", 1.5625]}\n },\n {\n \"Metric\": \"IPC - Issue\",\n \"Value\": \"&ipcIssue_val\",\n \"Unit\": \"Instr/cycle\",\n \"peak\": 5,\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&ipcIssue_val\"] }, 5] }\n },\n {\n \"Metric\": \"LDS BW\",\n \"Value\": \"&lds_bw\",\n \"Unit\": \"GB/sec\",\n \"peak\": {\"$multiply\": [$sclk, $numCU, 0.128]},\n \"Percent of Peak - PoP\": \"&lds_bw_pop\"\n },\n {\n \"Metric\": \"LDS Bank Conflict\",\n \"Value\": \"&lds_bconf\",\n \"Unit\": \"Conflicts/access\",\n \"peak\": \"32\",\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&lds_bconf\"] }, 32] }\n },\n {\n \"Metric\": \"Instr Cache Hit Rate\",\n \"Value\": \"&l1i_hitRate_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1i_hitRate_val\"\n }, \n {\n \"Metric\": \"Instr Cache BW\",\n \"Value\": \"&l1i_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1i_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]}] }\n },\n {\n \"Metric\": \"Scalar L1D Cache Hit Rate\",\n \"Value\": \"&l1k_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1k_cacheHits_val\"\n },\n {\n \"Metric\": \"Scalar L1D Cache BW\",\n \"Value\": \"&l1k_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1k_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numSQC]}] }\n },\n\n {\n \"Metric\": \"Vector L1D Cache Hit Rate\",\n \"Value\": \"&vecl1_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&vecl1_cacheHits_val\"\n },\n {\n \"Metric\": \"Vector L1D Cache BW\",\n \"Value\": \"&vecl1_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&vecl1_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]}] }\n },\n {\n \"Metric\": \"L2 Cache Hit Rate\",\n \"Value\": \"&l2_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l2_cacheHits_val\"\n },\n {\n \"Metric\": \"L2-Fabric Read BW\",\n \"Value\": \"&eaReadBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaReadBW_val\"] }, $hbmBW] }\n },\n {\n \"Metric\": \"L2-Fabric Write BW\",\n \"Value\": \"&eaWriteBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaWriteBW_val\"] }, $hbmBW] }\n },\n {\n \"Metric\": \"L2-Fabric Read Latency\",\n \"Value\": \"&eaReadLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n },\n {\n \"Metric\": \"L2-Fabric Write Latency\",\n \"Value\": \"&eaWriteLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"waveOcc_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] }\n },\n \"waveOcc_pop\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] },{ \"$multiply\": [$maxWavesPerCU, $numCU] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Value\": \"&waveOcc_val\",\n \"Unit\": \"Wavefronts\",\n \"peak\": { \"$multiply\": [$maxWavesPerCU, $numCU] },\n \"Percent of Peak - PoP\": { \"$multiply\": [100, \"&waveOcc_pop\"] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_IFETCH_LEVEL\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"instrFetchBW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQ_IFETCH\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }, 32] }\n },\n \"instrFetchLat_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\"] }\n }\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Instr Fetch BW\",\n \"Value\": \"&instrFetchBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 32] }, $numSQC]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&instrFetchBW_val\"]}, { \"$multiply\": [$numSQC, { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 32] }] }] }\n },\n {\n \"Metric\": \"Instr Fetch Latency\",\n \"Value\": \"&instrFetchLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }}\n\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n \n \"valu_intOps_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \n \n \"salu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2] }] }\n },\n \n \"valu_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2] }] }\n },\n \n \"mfma_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2, 4] }] }\n },\n \n \"lds_bconf\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \"lds_bw\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n \n \"lds_bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}, \n {\"$multiply\": [$sclk2, $numCU2, 0.00128]}\n ]}\n },\n \n \"unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \n \"ipcIssue_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\", \"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"eaWriteLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null \n ]\n }\n },\n \"eaReadLat_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\" , 0]},\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null \n ]\n }\n },\n \"eaWriteBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }, \n \"eaReadBW_val\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32] }, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] }] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n },\n \"l2_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null \n ]\n }\n },\n \"vecl1_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]},\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vecl1_BW_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"l1k_cacheHits_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]} , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\"]}] },\n null\n ]\n }\n },\n \"l1i_hitRate_val\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\"]}] }\n },\n \"l1i_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_ICACHE_REQ\",{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n },\n \"l1k_BW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQC_DCACHE_REQ\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }, 64] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"VALU FLOPs\",\n \"Value\": \"&valu_flops_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"VALU IOPs\",\n \"Value\": \"&valu_intOps_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&valu_intOps_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (BF16)\",\n \"Value\": \"&mfma_flops_bf16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F16)\",\n \"Value\": \"&mfma_flops_f16_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F32)\",\n \"Value\": \"&mfma_flops_f32_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA FLOPs (F64)\",\n \"Value\": \"&mfma_flops_f64_val\",\n \"Unit\": \"GFLOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"MFMA IOPs (Int8)\",\n \"Value\": \"&mfma_flops_i8_val\",\n \"Unit\": \"GIOP\",\n \"peak\": { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] },\n \"Percent of Peak - PoP\": {\n \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]\n }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Value\": $numActiveCUs2,\n \"Unit\": \"CUs\",\n \"peak\": $numCU2,\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, $numActiveCUs2] }, $numCU2]}\n },\n \n {\n \"Metric\": \"SALU Util\",\n \"Value\": \"&salu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&salu_val\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Value\": \"&valu_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&valu_val\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Value\": \"&mfma_val\",\n \"Unit\": \"pct\",\n \"peak\": 100,\n \"Percent of Peak - PoP\": \"&mfma_val\"\n },\n {\n \"Metric\": \"VALU Active Threads/Wave\",\n \"Value\": \"&unpredthreads_val\",\n \"Unit\": \"Threads\",\n \"peak\": 64,\n \"Percent of Peak - PoP\": { \"$multiply\": [\"&unpredthreads_val\", 1.5625]}\n },\n {\n \"Metric\": \"IPC - Issue\",\n \"Value\": \"&ipcIssue_val\",\n \"Unit\": \"Instr/cycle\",\n \"peak\": 5,\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&ipcIssue_val\"] }, 5] }\n },\n {\n \"Metric\": \"LDS BW\",\n \"Value\": \"&lds_bw\",\n \"Unit\": \"GB/sec\",\n \"peak\": {\"$multiply\": [$sclk2, $numCU2, 0.128]},\n \"Percent of Peak - PoP\": \"&lds_bw_pop\"\n },\n {\n \"Metric\": \"LDS Bank Conflict\",\n \"Value\": \"&lds_bconf\",\n \"Unit\": \"Conflicts/access\",\n \"peak\": \"32\",\n \"Percent of Peak - PoP\": {\"$divide\": [{ \"$multiply\": [100, \"&lds_bconf\"] }, 32] }\n },\n {\n \"Metric\": \"Instr Cache Hit Rate\",\n \"Value\": \"&l1i_hitRate_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1i_hitRate_val\"\n }, \n {\n \"Metric\": \"Instr Cache BW\",\n \"Value\": \"&l1i_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1i_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]}] }\n },\n {\n \"Metric\": \"Scalar L1D Cache Hit Rate\",\n \"Value\": \"&l1k_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l1k_cacheHits_val\"\n },\n {\n \"Metric\": \"Scalar L1D Cache BW\",\n \"Value\": \"&l1k_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&l1k_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numSQC2]}] }\n },\n\n {\n \"Metric\": \"Vector L1D Cache Hit Rate\",\n \"Value\": \"&vecl1_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&vecl1_cacheHits_val\"\n },\n {\n \"Metric\": \"Vector L1D Cache BW\",\n \"Value\": \"&vecl1_BW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&vecl1_BW_val\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]}] }\n },\n {\n \"Metric\": \"L2 Cache Hit Rate\",\n \"Value\": \"&l2_cacheHits_val\",\n \"Unit\": \"pct\",\n \"peak\": \"100\",\n \"Percent of Peak - PoP\": \"&l2_cacheHits_val\"\n }, \n {\n \"Metric\": \"L2-Fabric Read BW\",\n \"Value\": \"&eaReadBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW2\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaReadBW_val\"] }, $hbmBW2] }\n },\n {\n \"Metric\": \"L2-Fabric Write BW\",\n \"Value\": \"&eaWriteBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": \"$hbmBW2\",\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&eaWriteBW_val\"] }, $hbmBW2] }\n },\n {\n \"Metric\": \"L2-Fabric Read Latency\",\n \"Value\": \"&eaReadLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n },\n {\n \"Metric\": \"L2-Fabric Write Latency\",\n \"Value\": \"&eaWriteLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n }\n \n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"waveOcc_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] }\n },\n \"waveOcc_pop\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\"] },{ \"$multiply\": [$maxWavesPerCU2, $numCU2] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Value\": \"&waveOcc_val\",\n \"Unit\": \"Wavefronts\",\n \"peak\": { \"$multiply\": [$maxWavesPerCU2, $numCU2] },\n \"Percent of Peak - PoP\": { \"$multiply\": [100, \"&waveOcc_pop\"] }\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n ]\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_IFETCH_LEVEL\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"System Speed-of-Light\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"instrFetchBW_val\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [\"&SQ_IFETCH\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }, 32] }\n },\n \"instrFetchLat_val\": {\n \"$avg\": { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Instr Fetch BW\",\n \"Value\": \"&instrFetchBW_val\",\n \"Unit\": \"GB/s\",\n \"peak\": { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 32] }, $numSQC2]},\n \"Percent of Peak - PoP\": { \"$divide\": [{ \"$multiply\": [100, \"&instrFetchBW_val\"]}, { \"$multiply\": [$numSQC2, { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 32] }] }] }\n },\n {\n \"Metric\": \"Instr Fetch Latency\",\n \"Value\": \"&instrFetchLat_val\",\n \"Unit\": \"Cycles\",\n \"peak\": \"\",\n \"Percent of Peak - PoP\": \"\"\n\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]\n }}\n\n ]);", + "type": "table" + } + ], + "title": "Speed of Light", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Metric 1": 0, + "Metric 2": 7, + "Percent of Peak - PoP 1": 5, + "Percent of Peak - PoP 2": 6, + "Unit 1": 8, + "Unit 2": 9, + "Value 1": 1, + "Value 2": 2, + "peak 1": 3, + "peak 2": 4 + }, + "renameByName": { + "Percent of Peak - PoP": "Pct-of-Peak", + "Percent of Peak - PoP 1": "Pct-of-Peak (Current)", + "Percent of Peak - PoP 2": "Pct-of-Peak (Baseline)", + "Unit": "", + "Value": "Avg", + "Value 1": "Avg (Current)", + "Value 2": "Avg (Baseline)", + "peak": "Theoretical Max", + "peak 1": "Theoretical Max (Current)", + "peak 2": "Theoretical Max (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dispatch ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 4, + "x": 16, + "y": 2 + }, + "id": 175, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Dispatch ID\": \"&Index\",\n \"Kernel Name\": \"&KernelName\"\n }},\n {\"$sort\": {\n \"Dispatch ID\": 1\n }}\n],\n{ allowDiskUse: true }\n);", + "type": "table" + } + ], + "title": "Dispatch IDs - Current", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "_id": "Dispatch ID" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dispatch ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 29, + "w": 4, + "x": 20, + "y": 2 + }, + "id": 215, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "tlh8EwUnk" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Dispatch ID\": \"&Index\",\n \"Kernel Name\": \"&KernelName\"\n }},\n {\"$sort\": {\n \"Dispatch ID\": 1\n }}\n]);", + "type": "table" + } + ], + "title": "Dispatch IDs - Baseline", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "_id": "Dispatch ID" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "System Speed-of-Light", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 36, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 157, + "options": { + "bucketOffset": 0, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + } + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "u5Z2zJhnk" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"elapsedTime1\": {\n \"$divide\": [{\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}, 1000]\n }\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"elapsedTime1\": 1\n }}\n]);", + "type": "table" + } + ], + "title": "Kernel Time Histogram", + "transparent": true, + "type": "histogram" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "TotalDuration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg Duration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + }, + { + "id": "custom.width", + "value": 107 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L1 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 123 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Calls" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 143 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (BF16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 155 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F32)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F64)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Throughput" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 141 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VALU FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (HBM)" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L2 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L1 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Performance" + }, + "properties": [ + { + "id": "custom.width", + "value": 144 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Peak FLOPs" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 213, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "L1 Cache (Bytes)" + } + ] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "HV80ot2nz" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"Throughput\": {\n \"$avg\": { \"$divide\": [\n \n {\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]},\n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"LDS_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 128 ]} \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n },\n \"hbm_bw\": {\n \"$avg\": {\n \"$divide\": [\n {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n },\n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}\n ]\n\n }\n }\n\n }},\n \n {\"$sort\": { \"TotalDuration\": -1 }},\n \n { \"$limit\": $TopN },\n\n {\"$addFields\": {\n \"ai_L1\": { \"$cond\": [\n {\"$ne\": [\"&L1cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"]},\n \"\"\n ]},\n \"ai_L2\": { \"$cond\": [\n {\"$ne\": [\"&L2cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"]},\n \"\"\n ]},\n \"ai_hbm\": { \"$cond\": [\n {\"$ne\": [\"&hbm_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"]},\n \"\"\n ]}\n }}\n]);", + "type": "table" + } + ], + "title": "Top Kernels", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "AvgDuration": 5, + "Calls": 1, + "L1cache_data": 16, + "L2cache_data": 17, + "LDS_data": 15, + "Throughput": 2, + "TotalDuration": 4, + "_id": 0, + "ai_L1": 6, + "ai_L2": 7, + "ai_hbm": 8, + "hbm_bw": 3, + "hbm_data": 18, + "mfma_flops_bf16": 12, + "mfma_flops_f16": 11, + "mfma_flops_f32": 13, + "mfma_flops_f64": 14, + "total_flops": 9, + "valu_flops": 10 + }, + "renameByName": { + "AvgDuration": "Avg Duration", + "Calls": "", + "L1cache_data": "Vector L1D Cache", + "L2cache_data": "L2 Cache", + "LDS_data": "LDS", + "Throughput": "Performance", + "TotalDuration": "Total Duration", + "_id": "Name", + "ai_L1": "AI (Vector L1D Cache)", + "ai_L2": "AI (L2 Cache)", + "ai_hbm": "AI (HBM)", + "hbm_bw": "HBM BW ", + "hbm_data": "HBM", + "mfma_flops_bf16": "MFMA FLOPs (BF16)", + "mfma_flops_f16": "MFMA FLOPs (F16)", + "mfma_flops_f32": "MFMA FLOPs (F32)", + "mfma_flops_f64": "MFMA FLOPs (F64)", + "peak_flops": "Peak FLOPs", + "total_flops": "Total FLOPs", + "valu_flops": "VALU FLOPs" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "TotalDuration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg Duration" + }, + "properties": [ + { + "id": "unit", + "value": "ns" + }, + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS " + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L1 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Cache" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.width", + "value": 87 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Calls" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Name" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 153 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 143 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (BF16)" + }, + "properties": [ + { + "id": "custom.width", + "value": 155 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F32)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MFMA FLOPs (F64)" + }, + "properties": [ + { + "id": "custom.width", + "value": 146 + }, + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Throughput" + }, + "properties": [ + { + "id": "unit", + "value": "gflops" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 141 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VALU FLOPs" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (HBM)" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L2 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "AI (L1 Cache)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LDS (Bytes)" + }, + "properties": [ + { + "id": "custom.width", + "value": 98 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "HBM" + }, + "properties": [ + { + "id": "custom.width", + "value": 124 + }, + { + "id": "unit", + "value": "decbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dispatch" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 251, + "interval": "2h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "HV80ot2nz" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n { \"$group\": { \n \"_id\": \"&Index\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"Throughput\": {\n \"$avg\": { \"$divide\": [\n \n {\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]},\n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]}\n },\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"LDS_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 128]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n },\n\n \"hbm_bw\": {\n \"$avg\": {\n \"$divide\": [\n {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n },\n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}\n ]\n\n }\n }\n\n }},\n \n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": $TopN },\n\n {\"$addFields\": {\n \"ai_L1\": { \"$cond\": [\n {\"$ne\": [\"&L1cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"]},\n \"\"\n ]},\n \"ai_L2\": { \"$cond\": [\n {\"$ne\": [\"&L2cache_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"]},\n \"\"\n ]},\n \"ai_hbm\": { \"$cond\": [\n {\"$ne\": [\"&hbm_data\", 0]},\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"]},\n \"\"\n ]}\n\n }}\n]);", + "type": "table" + } + ], + "title": "Top Dispatches", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "AvgDuration": 5, + "Calls": 1, + "L1cache_data": 16, + "L2cache_data": 17, + "LDS_data": 15, + "Throughput": 2, + "TotalDuration": 4, + "_id": 0, + "ai_L1": 6, + "ai_L2": 7, + "ai_hbm": 8, + "hbm_bw": 3, + "hbm_data": 18, + "mfma_flops_bf16": 12, + "mfma_flops_f16": 11, + "mfma_flops_f32": 13, + "mfma_flops_f64": 14, + "peak_flops": 19, + "total_flops": 9, + "valu_flops": 10 + }, + "renameByName": { + "AvgDuration": "Avg Duration", + "Calls": "", + "L1cache_data": "Vector L1D Cache", + "L2cache_data": "L2 Cache", + "LDS_data": "LDS ", + "Throughput": "Performance", + "TotalDuration": "Total Duration", + "_id": "Dispatch", + "ai_L1": "AI (Vector L1D Cache)", + "ai_L2": "AI (L2 Cache)", + "ai_hbm": "AI (HBM)", + "hbm_bw": "HBM BW ", + "hbm_data": "HBM", + "mfma_flops_bf16": "MFMA FLOPs (BF16)", + "mfma_flops_f16": "MFMA FLOPs (F16)", + "mfma_flops_f32": "MFMA FLOPs (F32)", + "mfma_flops_f64": "MFMA FLOPs (F64)", + "total_flops": "Total FLOPs", + "valu_flops": "VALU FLOPs" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Kernel Statistics", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 40, + "panels": [ + { + "description": "All transaction units default to Billion, when per-sec norm is used", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 285, + "options": { + "addAllIDs": false, + "captureMappings": false, + "eventAutoComplete": true, + "eventSource": "options.animateLogo(svgmap, data);\r\nconsole.log(\"Starting render\");\r\nlet buff = data.series[0].fields[2].values.buffer;\r\nlet valueCount = buff.length;\r\nconsole.log(\"The buff is \", valueCount, \" long\");\r\n\r\nsvgmap.wave_life_.text(buff[0]);\r\nsvgmap.active_cu_.text(buff[1]);\r\nsvgmap.salu_.text(buff[2]);\r\nsvgmap.smem_.text(buff[3]);\r\nsvgmap.valu_.text(buff[4]);\r\nsvgmap.mfma_.text(buff[5]);\r\nsvgmap.vmem_.text(buff[6]);\r\nsvgmap.lds_.text(buff[7]);\r\nsvgmap.gws_.text(buff[8]);\r\nsvgmap.br_.text(buff[9]);\r\nsvgmap.vgpr_.text(buff[10]);\r\nsvgmap.sgpr_.text(buff[11]);\r\nsvgmap.lds_alloc_.text(buff[12]);\r\nsvgmap.scratch_alloc_.text(buff[13]);\r\nsvgmap.wavefronts_.text(buff[14]);\r\nsvgmap.workgroups_.text(buff[15]);\r\nsvgmap.lds_req_.text(buff[16]);\r\nsvgmap.il1_fetch_.text(buff[17]);\r\nsvgmap.il1_hit_.text(buff[18]);\r\nsvgmap.il1_l2_rd_.text(buff[19]);\r\nsvgmap.sl1_rd_.text(buff[20]);\r\nsvgmap.sl1_hit_.text(buff[21]);\r\nsvgmap.sl1_l2_rd_.text(buff[22]);\r\nsvgmap.sl1_l2_wr_.text(buff[23]);\r\nsvgmap.sl1_l2_atom_.text(buff[24]);\r\nsvgmap.vl1_rd_.text(buff[25]);\r\nsvgmap.vl1_wr_.text(buff[26]);\r\nsvgmap.vl1_atom_.text(buff[27]);\r\nsvgmap.vl1_hit_.text(buff[28]);\r\nsvgmap.vl1_lat_.text(buff[29]);\r\nsvgmap.vl1_l2_rd_.text(buff[30]);\r\nsvgmap.vl1_l2_wr_.text(buff[31]);\r\nsvgmap.vl1_l2_atom_.text(buff[32]);\r\nsvgmap.l2_rd_.text(buff[33]);\r\nsvgmap.l2_wr_.text(buff[34])\r\nsvgmap.l2_atom_.text(buff[35]);\r\nsvgmap.l2_hit_.text(buff[36]);\r\nsvgmap.l2_rd_lat_.text(buff[37]);\r\nsvgmap.l2_wr_lat_.text(buff[38]);\r\nsvgmap.fabric_rd_lat_.text(buff[39]);\r\nsvgmap.fabric_wr_lat_.text(buff[40]);\r\nsvgmap.fabric_atom_lat_.text(buff[41]);\r\nsvgmap.l2_fabric_rd_.text(buff[42]);\r\nsvgmap.l2_fabric_wr_.text(buff[43]);\r\nsvgmap.l2_fabric_atom_.text(buff[44]);\r\nsvgmap.hbm_rd_.text(buff[45]);\r\nsvgmap.hbm_wr_.text(buff[46]);\r\nsvgmap.lds_util_.text(buff[47]);\r\nsvgmap.vl1_coales_.text(buff[48]);\r\nsvgmap.vl1_stall_.text(buff[49]);\r\nsvgmap.wave_occ_.text(buff[50]);\r\nsvgmap.lds_lat_.text(buff[51]);\r\nsvgmap.il1_lat_.text(buff[52]);\r\nsvgmap.sl1_lat_.text(buff[53]);\r\nsvgmap.gds_req_.text(buff[54]);", + "initAutoComplete": true, + "initSource": "options.animateLogo = (svgmap, data) => {\r\n \r\n}\r\n ", + "svgMappings": [ + { + "mappedName": "wave_life_", + "svgId": "wave_life" + }, + { + "mappedName": "wave_occ_", + "svgId": "wave_occ" + }, + { + "mappedName": "salu_", + "svgId": "salu" + }, + { + "mappedName": "smem_", + "svgId": "smem" + }, + { + "mappedName": "valu_", + "svgId": "valu" + }, + { + "mappedName": "mfma_", + "svgId": "mfma" + }, + { + "mappedName": "vmem_", + "svgId": "vmem" + }, + { + "mappedName": "lds_", + "svgId": "lds" + }, + { + "mappedName": "gws_", + "svgId": "gws" + }, + { + "mappedName": "br_", + "svgId": "br" + }, + { + "mappedName": "active_cu_", + "svgId": "active_cu" + }, + { + "mappedName": "vgpr_", + "svgId": "vgpr" + }, + { + "mappedName": "sgpr_", + "svgId": "sgpr" + }, + { + "mappedName": "lds_alloc_", + "svgId": "lds_alloc" + }, + { + "mappedName": "scratch_alloc_", + "svgId": "scratch_alloc" + }, + { + "mappedName": "wavefronts_", + "svgId": "wavefronts" + }, + { + "mappedName": "workgroups_", + "svgId": "workgroups" + }, + { + "mappedName": "lds_req_", + "svgId": "lds_req" + }, + { + "mappedName": "vl1_wr_", + "svgId": "vl1_wr" + }, + { + "mappedName": "vl1_atom_", + "svgId": "vl1_atom" + }, + { + "mappedName": "sl1_rd_", + "svgId": "sl1_rd" + }, + { + "mappedName": "il1_fetch_", + "svgId": "il1_fetch" + }, + { + "mappedName": "lds_lat_", + "svgId": "lds_lat" + }, + { + "mappedName": "lds_bw_", + "svgId": "lds_bw" + }, + { + "mappedName": "lds_util_", + "svgId": "lds_util" + }, + { + "mappedName": "vl1_hit_", + "svgId": "vl1_hit" + }, + { + "mappedName": "vl1_lat_", + "svgId": "vl1_lat" + }, + { + "mappedName": "vl1_coales_", + "svgId": "vl1_coales" + }, + { + "mappedName": "vl1_stall_", + "svgId": "vl1_stall" + }, + { + "mappedName": "sl1_hit_", + "svgId": "sl1_hit" + }, + { + "mappedName": "sl1_lat_", + "svgId": "sl1_lat" + }, + { + "mappedName": "il1_hit_", + "svgId": "il1_hit" + }, + { + "mappedName": "il1_lat_", + "svgId": "il1_lat" + }, + { + "mappedName": "sl1_l2_rd_", + "svgId": "sl1_l2_rd" + }, + { + "mappedName": "sl1_l2_wr_", + "svgId": "sl1_l2_wr" + }, + { + "mappedName": "sl1_l2_atom_", + "svgId": "sl1_l2_atom" + }, + { + "mappedName": "il1_l2_rd_", + "svgId": "il1_l2_rd" + }, + { + "mappedName": "sl1_l2_rd_", + "svgId": "sl1_l2_rd" + }, + { + "mappedName": "sl1_l2_wr_", + "svgId": "sl1_l2_wr" + }, + { + "mappedName": "sl1_l2_atom_", + "svgId": "sl1_l2_atom" + }, + { + "mappedName": "l2_rd_", + "svgId": "l2_rd" + }, + { + "mappedName": "l2_wr_", + "svgId": "l2_wr" + }, + { + "mappedName": "l2_atom_", + "svgId": "l2_atom" + }, + { + "mappedName": "l2_hit_", + "svgId": "l2_hit" + }, + { + "mappedName": "l2_rd_lat_", + "svgId": "l2_rd_lat" + }, + { + "mappedName": "l2_wr_lat_", + "svgId": "l2_wr_lat" + }, + { + "mappedName": "l2_fabric_rd_", + "svgId": "l2_fabric_rd" + }, + { + "mappedName": "l2_fabric_wr_", + "svgId": "l2_fabric_wr" + }, + { + "mappedName": "l2_fabric_atom_", + "svgId": "l2_fabric_atom" + }, + { + "mappedName": "fabric_rd_lat_", + "svgId": "fabric_rd_lat" + }, + { + "mappedName": "fabric_wr_lat_", + "svgId": "fabric_wr_lat" + }, + { + "mappedName": "fabric_atom_lat_", + "svgId": "fabric_atom_lat" + }, + { + "mappedName": "fabric_hbm_rd_", + "svgId": "fabric_hbm_rd" + }, + { + "mappedName": "fabric_hbm_wr_", + "svgId": "fabric_hbm_wr" + }, + { + "mappedName": "vl1_rd_", + "svgId": "vl1_rd" + }, + { + "mappedName": "vl1_l2_rd_", + "svgId": "vl1_l2_rd" + }, + { + "mappedName": "vl1_l2_wr_", + "svgId": "vl1_l2_wr" + }, + { + "mappedName": "vl1_l2_atom_", + "svgId": "vl1_l2_atom" + }, + { + "mappedName": "hbm_rd_", + "svgId": "hbm_rd" + }, + { + "mappedName": "hbm_wr_", + "svgId": "hbm_wr" + } + ], + "svgSource": "\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Wave Occupancy\r\n \r\n Wave Life\r\n \r\n \r\n \r\n xGMI /\r\n PCIe\r\n \r\n GMI\r\n \r\n HBM\r\n \r\n Fabric\r\n \r\n \r\n SALU:\r\n 00000\r\n \r\n \r\n SMEM:\r\n 00000\r\n \r\n \r\n VALU:\r\n 00000\r\n \r\n \r\n MFMA:\r\n 00000\r\n \r\n \r\n VMEM:\r\n 00000\r\n \r\n \r\n LDS:\r\n 00000\r\n \r\n \r\n GWS:\r\n 00000\r\n \r\n \r\n Br:\r\n 00000\r\n \r\n \r\n cycles\r\n Rd:\r\n 00000\r\n \r\n \r\n cycles\r\n Wr:\r\n 00000\r\n \r\n \r\n cycles\r\n Atomic:\r\n 00000\r\n \r\n \r\n Rd:\r\n 00000\r\n \r\n \r\n Wr:\r\n \r\n \r\n 00000\r\n \r\n \r\n Atomic:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n 00000\r\n Rd:\r\n 00000\r\n Wr:\r\n 00000\r\n Req:\r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n per-GCD\r\n cycles\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Rd:\r\n 00000\r\n \r\n \r\n cycles\r\n Wr:\r\n 00000\r\n Wave 0 Instr buff\r\n Wave N-1 Instr buff\r\n Active CUs\r\n \r\n \r\n %\r\n Hit:\r\n 00000\r\n \r\n \r\n cycles\r\n Lat:\r\n 00000\r\n \r\n \r\n %\r\n Util:\r\n 00000\r\n \r\n \r\n %\r\n Coales:\r\n 00000\r\n Exec\r\n Instr Buff\r\n Instr Dispatch\r\n LDS\r\n Vector L1 Cache\r\n Scalar L1D Cache\r\n Instr L1 Cache\r\n L2 Cache\r\n 00000\r\n Req:\r\n \r\n \r\n %\r\n Stall:\r\n 00000\r\n 00000\r\n Fetch:\r\n 0000000\r\n 00000\r\n 000/000\r\n \r\n Latency\r\n \r\n LDS Alloc:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n \r\n Scratch Alloc:\r\n \r\n 00000\r\n \r\n Wavefronts:\r\n \r\n 00000\r\n \r\n Workgroups:\r\n \r\n 00000\r\n \r\n VGPRs:\r\n \r\n 00000\r\n \r\n SGPRs:\r\n \r\n 00000\r\n \r\n \r\n 00000\r\n Rd:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 00000\r\n 00000\r\n 00000\r\n Rd:\r\n Wr:\r\n Atomic:\r\n \r\n \r\n \r\n Latency\r\n \r\n \r\n \r\n \r\n Text is not SVG - cannot display\r\n \r\n \r\n" + }, + "pluginVersion": "8.4.0", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"wave_life\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&SQ_WAVES\", 0] },\n { \"$multiply\": [4, { \"$divide\": [\"&SQ_WAVE_CYCLES\", \"&SQ_WAVES\"] }] },\n null\n ]\n }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"valu\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_VALU\", \"&denom\"] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_MFMA\", \"&denom\"] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_VMEM\", \"&denom\"] }\n },\n \"lds_instr\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\", \"&denom\"] }\n },\n \"gws\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_GDS\", \"&denom\"] }\n },\n \"br\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_BRANCH\", \"&denom\"] }\n },\n \"vgpr\": {\n \"$avg\": \"&vgpr\"\n },\n \"sgpr\": {\n \"$avg\": \"&sgpr\"\n },\n \"lds_alloc\": {\n \"$avg\": \"&lds\"\n },\n \"scratch_alloc\": {\n \"$avg\": \"&scr\"\n },\n \"wavefronts\": {\n \"$avg\": \"&SPI_CSN_WAVE\"\n },\n \"workgroups\": {\n \"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"\n },\n \"lds_req\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\", \"&denom\"] }\n }, \n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n },\n \"vl1_rd\": {\n \"$avg\": { \"$divide\": [\"&TCP_TOTAL_READ_sum\", \"&denom\"] }\n },\n \"vl1_wr\": {\n \"$avg\": { \"$divide\": [\"&TCP_TOTAL_WRITE_sum\", \"&denom\"] }\n },\n \"vl1_atom\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"] }\n },\n \"il1_fetch\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"il1_hit\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_REQ\"] }\n },\n \"il1_l2_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_INST_REQ\", \"&denom\"] }\n },\n \"sl1_rd\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"sl1_hit\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQC_DCACHE_REQ\", 0]},\n { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_REQ\"] },\n \"\"\n ]\n }\n},\n \"sl1_l2_rd\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"sl1_l2_wr\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"sl1_l2_atom\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"vl1_hit\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, { \"$divide\": [{ \"$multiply\": [100, { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] }, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"] }] },\n null\n ]\n }\n },\n \"vl1_lat\": {\n \"$avg\": { \n \"$cond\": [\n { \"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0] },\n { \"$divide\": [\"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\"] },\n null\n ]\n }\n },\n \"vl1_coales\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n 0\n ]\n }\n },\n \"vl1_stall\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n \"\"\n ]\n }},\n \"vl1_l2_rd\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_READ_REQ_sum\", \"&denom\"] }\n },\n \"vl1_l2_wr\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"vl1_l2_atom\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }\n },\n \"l2_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_READ_sum\", \"&denom\"] }\n },\n \"l2_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_WRITE_sum\", \"&denom\"] }\n },\n \"l2_atom\": {\n \"$avg\": { \"$divide\": [\"&TCC_ATOMIC_sum\", \"&denom\"] }\n },\n \"l2_hit\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }, 0] },\n { \"$divide\": [{ \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [\"&TCC_HIT_sum\", \"&TCC_MISS_sum\"] }] },\n null\n ]\n }\n },\n \"l2_rd_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }, 0] },\n { \"$divide\": [\"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }] },\n null\n ]\n }\n },\n \"l2_wr_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [{ \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 0] },\n { \"$divide\": [\"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }] },\n null\n ]\n }\n },\n \"fabric_rd_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_RDREQ_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\"] },\n null\n ]\n }\n },\n \"fabric_wr_lat\": { \n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_WRREQ_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\"] },\n null\n ]\n }\n },\n \"fabric_atom_lat\": {\n \"$avg\": {\n \"$cond\": [\n { \"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0] },\n { \"$divide\": [\"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\"] },\n null\n ]\n }\n },\n \"l2_fabric_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_sum\", \"&denom\"] }\n },\n \"l2_fabric_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_sum\", \"&denom\"] }\n },\n \"l2_fabric_atom\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_ATOMIC_sum\", \"&denom\"] }\n },\n \"hbm_rd\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\"] }\n },\n \"hbm_wr\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Life\",\n \"Alias\": \"wave_life_\",\n \"Value\": { \"$round\": [\"&wave_life\", 0] }\n },\n {\n \"Metric\": \"Active CUs\",\n \"Alias\": \"active_cu_\",\n \"Value\": {\"$concat\": [\"$numActiveCUs\", \"/\", \"$numCU\"]}\n },\n {\n \"Metric\": \"SALU\",\n \"Alias\": \"salu_\",\n \"Value\": { \"$round\": [\"&salu\", 0] }\n },\n {\n \"Metric\": \"SMEM\",\n \"Alias\": \"smem_\",\n \"Value\": { \"$round\": [\"&smem\", 0] }\n },\n {\n \"Metric\": \"VALU\",\n \"Alias\": \"valu_\",\n \"Value\": { \"$round\": [\"&valu\", 0] }\n },\n {\n \"Metric\": \"MFMA\",\n \"Alias\": \"mfma_\",\n \"Value\": { \"$round\": [\"&mfma\", 0] }\n },\n {\n \"Metric\": \"VMEM\",\n \"Alias\": \"vmem_\",\n \"Value\": { \"$round\": [\"&vmem\", 0] }\n },\n {\n \"Metric\": \"LDS\",\n \"Alias\": \"lds_\",\n \"Value\": { \"$round\": [\"&lds_instr\", 0] }\n },\n {\n \"Metric\": \"GWS\",\n \"Alias\": \"gws_\",\n \"Value\": { \"$round\": [\"&gws\", 0] }\n },\n {\n \"Metric\": \"BR\",\n \"Alias\": \"br_\",\n \"Value\": { \"$round\": [\"&br\", 0] }\n },\n {\n \"Metric\": \"VGPR\",\n \"Alias\": \"vgpr_\",\n \"Value\": { \"$round\": [\"&vgpr\", 0] }\n },\n {\n \"Metric\": \"SGPR\",\n \"Alias\": \"sgpr_\",\n \"Value\": { \"$round\": [\"&sgpr\", 0] }\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Alias\": \"lds_alloc_\",\n \"Value\": { \"$round\": [\"&lds_alloc\", 0] }\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Alias\": \"scratch_alloc_\",\n \"Value\": { \"$round\": [\"&scratch_alloc\", 0] }\n },\n {\n \"Metric\": \"Wavefronts\",\n \"Alias\": \"wavefronts_\",\n \"Value\": { \"$round\": [\"&wavefronts\", 0] }\n },\n {\n \"Metric\": \"Workgroups\",\n \"Alias\": \"workgroups_\",\n \"Value\": { \"$round\": [\"&workgroups\", 0] }\n },\n {\n \"Metric\": \"LDS Req\",\n \"Alias\": \"lds_req_\",\n \"Value\": { \"$round\": [\"&lds_req\", 0] }\n },\n {\n \"Metric\": \"IL1 Fetch\",\n \"Alias\": \"il1_fetch_\",\n \"Value\": { \"$round\": [\"&il1_fetch\", 0] }\n },\n {\n \"Metric\": \"IL1 Hit\",\n \"Alias\": \"il1_hit_\",\n \"Value\": { \"$round\": [{ \"$multiply\": [\"&il1_hit\", 100] }, 0] }\n },\n {\n \"Metric\": \"IL1_L2 Rd\",\n \"Alias\": \"il1_l2_req_\",\n \"Value\": { \"$round\": [\"&il1_l2_req\", 0] }\n },\n {\n \"Metric\": \"vL1D Rd\",\n \"Alias\": \"sl1_rd_\",\n \"Value\": { \"$round\": [\"&sl1_rd\", 0] }\n },\n {\n \"Metric\": \"vL1D Hit\",\n \"Alias\": \"sl1_hit_\",\n \"Value\": { \"$round\": [{ \"$multiply\": [\"&sl1_hit\", 100] }, 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Rd\",\n \"Alias\": \"sl1_l2_rd_\",\n \"Value\": { \"$round\": [\"&sl1_l2_rd\", 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Wr\",\n \"Alias\": \"sl1_l2_wr_\",\n \"Value\": { \"$round\": [\"&sl1_l2_wr\", 0] }\n },\n {\n \"Metric\": \"vL1D_L2 Atomic\",\n \"Alias\": \"sl1_l2_atom_\",\n \"Value\": { \"$round\": [\"&sl1_l2_atom\", 0] }\n },\n {\n \"Metric\": \"VL1 Rd\",\n \"Alias\": \"vl1_rd_\",\n \"Value\": { \"$round\": [\"&vl1_rd\", 0] }\n },\n {\n \"Metric\": \"VL1 Wr\",\n \"Alias\": \"vl1_wr_\",\n \"Value\": { \"$round\": [\"&vl1_wr\", 0] }\n },\n {\n \"Metric\": \"VL1 Atomic\",\n \"Alias\": \"vl1_atom_\",\n \"Value\": { \"$round\": [\"&vl1_atom\", 0] }\n },\n {\n \"Metric\": \"VL1 Hit\",\n \"Alias\": \"vl1_hit_\",\n \"Value\": { \"$round\": [\"&vl1_hit\", 0] }\n },\n {\n \"Metric\": \"VL1 Lat\",\n \"Alias\": \"vl1_lat_\",\n \"Value\": { \"$round\": [\"&vl1_lat\", 0] }\n },\n {\n \"Metric\": \"VL1_L2 Rd\",\n \"Alias\": \"vl1_l2_rd_\",\n \"Value\": { \"$round\": [\"&vl1_l2_rd\", 0] }\n },\n {\n \"Metric\": \"VL1_L2 Wr\",\n \"Alias\": \"vl1_l2_wr_\",\n \"Value\": { \"$round\": [\"&vl1_l2_wr\", 0] }\n },\n {\n \"Metric\": \"vL1_L2 Atomic\",\n \"Alias\": \"vl1_l2_atom_\",\n \"Value\": { \"$round\": [\"&vl1_l2_atom\", 0] }\n },\n {\n \"Metric\": \"L2 Rd\",\n \"Alias\": \"l2_rd_\",\n \"Value\": { \"$round\": [\"&l2_rd\", 0] }\n },\n {\n \"Metric\": \"L2 Wr\",\n \"Alias\": \"l2_wr_\",\n \"Value\": { \"$round\": [\"&l2_wr\", 0] }\n },\n {\n \"Metric\": \"L2 Atomic\",\n \"Alias\": \"l2_atom_\",\n \"Value\": { \"$round\": [\"&l2_atom\", 0] }\n },\n {\n \"Metric\": \"L2 Hit\",\n \"Alias\": \"l2_hit_\",\n \"Value\": { \"$round\": [\"&l2_hit\", 0] }\n },\n {\n \"Metric\": \"L2 Rd Lat\",\n \"Alias\": \"l2_rd_lat_\",\n \"Value\": { \"$round\": [\"&l2_rd_lat\", 0] }\n },\n {\n \"Metric\": \"L2 Wr Lat\",\n \"Alias\": \"l2_wr_lat_\",\n \"Value\": { \"$round\": [\"&l2_wr_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Rd Lat\",\n \"Alias\": \"fabric_rd_lat_\",\n \"Value\": { \"$round\": [\"&fabric_rd_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Wr Lat\",\n \"Alias\": \"fabric_wr_lat_\",\n \"Value\": { \"$round\": [\"&fabric_wr_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric Atomic Lat\",\n \"Alias\": \"fabric_atom_lat_\",\n \"Value\": { \"$round\": [\"&fabric_atom_lat\", 0] }\n },\n {\n \"Metric\": \"Fabric_L2 Rd\",\n \"Alias\": \"l2_fabric_rd_\",\n \"Value\": { \"$round\": [\"&l2_fabric_rd\", 0] }\n },\n {\n \"Metric\": \"Fabric_L2 Wr\",\n \"Alias\": \"l2_fabric_wr_\",\n \"Value\": { \"$round\": [\"&l2_fabric_wr\", 0] }\n },\n {\n \"Metric\": \"Fabric_l2 Atomic\",\n \"Alias\": \"l2_fabric_atom_\",\n \"Value\": { \"$round\": [\"&l2_fabric_atom\", 0] }\n },\n {\n \"Metric\": \"HBM Rd\",\n \"Alias\": \"hbm_rd_\",\n \"Value\": { \"$round\": [\"&hbm_rd\", 0] }\n },\n {\n \"Metric\": \"HBM Wr\",\n \"Alias\": \"hbm_wr_\",\n \"Value\": { \"$round\": [\"&hbm_wr\", 0] }\n },\n {\n \"Metric\": \"LDS Util\",\n \"Alias\": \"lds_util_\",\n \"Value\": { \"$round\": [\"&lds_util\", 0] }\n },\n {\n \"Metric\": \"VL1 Coalesce\",\n \"Alias\": \"vl1_coales_\",\n \"Value\": { \"$round\": [\"&vl1_coales\", 0]}\n },\n {\n \"Metric\": \"VL1 Stall\",\n \"Alias\": \"vl1_stall_\",\n \"Value\": { \"$round\": [\"&vl1_stall\", 0]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_LEVEL_WAVES", + "target": "$Workload1.SQ_LEVEL_WAVES.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"wave_occ\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\",\"&GRBM_GUI_ACTIVE\"] }, $numActiveCUs]}\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave Occupancy\",\n \"Alias\": \"wave_occ_\",\n \"Value\":{ \"$round\": [\"&wave_occ\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS", + "target": "$Workload1.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"lds_lat\": {\n \"$avg\": { \n \"$cond\": [\n { \"$ne\": [\"&SQ_INSTS_LDS\", 0] },\n { \"$divide\": [\"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\"] },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"LDS Lat\",\n \"Alias\": \"lds_lat_\",\n \"Value\":{ \"$round\": [\"&lds_lat\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQC_ICACHE_INFLIGHT", + "target": "$Workload1.pmc_perf.aggregate([\n\t{\"$match\": {\n\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t}},\n\t{\"$lookup\": {\n\t\t\"from\": \"SQ_IFETCH_LEVEL\",\n\t\t\"localField\": \"Index\",\n\t\t\"foreignField\": \"Index\",\n\t\t\"as\": \"SQ_IFETCH_LEVEL\",\n\t\t\"pipeline\": [\n\t\t\t{\"$match\": {\n\t\t\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t\t\t}},\n\t\t\t{\"$project\":{\n\t\t\t\t\"_id\": 0,\n\t\t\t\t\"SQ_ACCUM_PREV_HIRES\": 1\n\t\t\t}}\n\t\t]\n\t}},\n\t{\"$unwind\":{\n\t\t\"path\": \"&SQ_IFETCH_LEVEL\"\n\t}},\n\t{\"$group\":{\n\t\t\"_id\": null,\n\t\t\"il1_lat\": {\n\t\t\t\"$avg\":{\n\t\t\t\t\"$cond\":[\n\t\t\t\t\t\t{\"$ne\":[\"&SQC_ICACHE_REQ\",0]},\n\t\t\t\t\t\t{\"$divide\":[\"&SQ_IFETCH_LEVEL.SQ_ACCUM_PREV_HIRES\",\"&SQC_ICACHE_REQ\"]},\n\t\t\t\t\t\tnull\n\t\t\t\t\t]\n\t\t\t}\n\t\t} \n\t}},\n\t{\"$set\": {\n \t\t\"array\": [\n \t\t{\n \t\t\t\"Metric\": \"IL1 Lat\",\n \t\t\t\"Alias\": \"il1_lat_\",\n \t\t\t\"Value\": { \"$round\": [\"&il1_lat\", 0] }\n \t\t}\n \t\t]\n\t}},\n \t{\"$unwind\": {\n \t\t\"path\": \"&array\"\n \t}},\n \t{\"$replaceRoot\": {\n \t\t\"newRoot\": \"&array\"\n \t}}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQC_DCACHE_INFLIGHT_LEVEL", + "target": "$Workload1.pmc_perf.aggregate([\n\t{\"$match\": {\n\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t}},\n\t{\"$lookup\": {\n\t\t\"from\": \"SQ_IFETCH_LEVEL\",\n\t\t\"localField\": \"Index\",\n\t\t\"foreignField\": \"Index\",\n\t\t\"as\": \"SQ_IFETCH_LEVEL\",\n\t\t\"pipeline\": [\n\t\t\t{\"$match\": {\n\t\t\t\t\"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \t\t\t\t\"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \t\t\t\t\"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n \t\t\t}},\n\t\t\t{\"$project\":{\n\t\t\t\t\"_id\": 0,\n\t\t\t\t\"SQ_ACCUM_PREV_HIRES\": 1\n\t\t\t}}\n\t\t]\n\t}},\n\t{\"$unwind\":{\n\t\t\"path\": \"&SQ_IFETCH_LEVEL\"\n\t}},\n\t{\"$group\":{\n\t\t\"_id\": null,\n\t\t\"sl1_lat\": {\n\t\t\t\"$avg\":{\n\t\t\t\t\"$cond\":[\n\t\t\t\t\t\t{\"$ne\":[\"&SQC_DCACHE_REQ\",0]},\n\t\t\t\t\t\t{\"$divide\":[\"&SQ_IFETCH_LEVEL.SQ_ACCUM_PREV_HIRES\",\"&SQC_DCACHE_REQ\"]},\n\t\t\t\t\t\tnull\n\t\t\t\t\t]\n\t\t\t}\n\t\t} \n\t}},\n\t{\"$set\": {\n \t\t\"array\": [\n \t\t{\n \t\t\t\"Metric\": \"vL1D Lat\",\n \t\t\t\"Alias\": \"sl1_lat_\",\n \t\t\t\"Value\": { \"$round\": [\"&sl1_lat\", 0] }\n \t\t}\n \t\t]\n\t}},\n \t{\"$unwind\": {\n \t\t\"path\": \"&array\"\n \t}},\n \t{\"$replaceRoot\": {\n \t\t\"newRoot\": \"&array\"\n \t}}\n]);", + "type": "table" + } + ], + "title": "Memory Chart (Normalization: $normUnit\")", + "transformations": [ + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "string", + "targetField": "Value" + } + ], + "fields": {} + } + }, + { + "id": "merge", + "options": {} + } + ], + "type": "amd-custom-svg" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Memory Chart Analysis", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 241, + "panels": [ + { + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 253, + "pconfig": { + "fixScale": "", + "layout": { + "dragmode": "zoom", + "font": { + "family": "\"Open Sans\", Helvetica, Arial, sans-serif" + }, + "hovermode": "closest", + "legend": { + "orientation": "v" + }, + "showlegend": true, + "xaxis": { + "range": [ + -2, + 3.8 + ], + "rangemode": "between", + "showgrid": true, + "title": "Arithmetic Intensity (FLOP/Byte)", + "type": "log", + "zeroline": false + }, + "yaxis": { + "rangemode": "normal", + "showgrid": true, + "title": "Performance (GFLOP/sec)", + "type": "log", + "zeroline": false + }, + "zaxis": { + "rangemode": "normal", + "showgrid": true, + "type": "linear", + "zeroline": false + } + }, + "loadFromCDN": false, + "settings": { + "displayModeBar": false, + "type": "scatter" + }, + "showAnnotations": true, + "traces": [ + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm" + }, + "name": "HBM-VLAU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2" + }, + "name": "L2-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1" + }, + "name": "vL1D-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS" + }, + "name": "LDS-VALU", + "settings": { + "color_option": "ramp", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#33B5E5", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 15, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "circle" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "cur_ai_hbm", + "y": "cur_perf" + }, + "name": "Cur - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "cur_ai_L2", + "y": "cur_perf" + }, + "name": "Cur - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "cur_ai_L1", + "y": "cur_perf" + }, + "name": "Cur - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "base_ai_hbm", + "y": "base_perf" + }, + "name": "Baseline - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "base_ai_L2", + "y": "base_perf" + }, + "name": "Baseline - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "base_ai_L1", + "y": "base_perf" + }, + "name": "Baseline - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA" + }, + "name": "HBM-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA" + }, + "name": "L2-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA" + }, + "name": "vL1D-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA" + }, + "name": "LDS-MFMA", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + } + ] + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "rawQuery": true, + "refId": "HBM-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"hbmBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&HBMBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n\n \"L2Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L2Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-VALU", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"&high_flop\"\n }\n },\n\n \"L1Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L1Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&FP32Flops\", \"&FP64Flops\"]\n },\n \"then\": \"&FP64Flops\",\n \"else\": \"&FP32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n\n \"LDSBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&LDSBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Cur Workload", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"cur_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"cur_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"cur_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"cur_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Baseline Workload", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Roofline)\"}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"base_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"base_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"base_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"base_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [\"&MFMAF32Flops\", \"&MFMAF64Flops\"]\n },\n \"then\": \"&MFMAF64Flops\",\n \"else\": \"&MFMAF32Flops\"\n }\n }\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + } + ], + "title": "Empirical Roofline FP32/FP64 (MI200)", + "type": "natel-plotly-panel", + "version": 1 + }, + { + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 312, + "pconfig": { + "fixScale": "", + "layout": { + "dragmode": "zoom", + "font": { + "family": "\"Open Sans\", Helvetica, Arial, sans-serif" + }, + "hovermode": "closest", + "legend": { + "orientation": "v" + }, + "showlegend": true, + "xaxis": { + "range": [ + -2, + 3.8 + ], + "rangemode": "between", + "showgrid": true, + "title": "Arithmetic Intensity (FLOP/Byte)", + "type": "log", + "zeroline": false + }, + "yaxis": { + "rangemode": "normal", + "showgrid": true, + "title": "Performance (GFLOP/sec)", + "type": "log", + "zeroline": false + }, + "zaxis": { + "rangemode": "normal", + "showgrid": true, + "type": "linear", + "zeroline": false + } + }, + "loadFromCDN": false, + "settings": { + "displayModeBar": false, + "type": "scatter" + }, + "showAnnotations": true, + "traces": [ + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "cur_ai_hbm", + "y": "cur_perf" + }, + "name": "Cur - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "cur_ai_L2", + "y": "cur_perf" + }, + "name": "Cur - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "cur_ai_L1", + "y": "cur_perf" + }, + "name": "Cur - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "base_ai_hbm", + "y": "base_perf" + }, + "name": "Baseline - HBM", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#F2495C", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "square-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "base_ai_L2", + "y": "base_perf" + }, + "name": "Baseline - L2", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#5794F2", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "diamond-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "base_ai_L1", + "y": "base_perf" + }, + "name": "Baseline - vL1D", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": false, + "markers": true + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA_fp16" + }, + "name": "HBM-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA_fp16" + }, + "name": "L2-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA_fp16" + }, + "name": "vL1D-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA_fp16" + }, + "name": "LDS-MFMA-FP16", + "settings": { + "color_option": "solid", + "line": { + "color": "#005f81", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "hbmBw_peak", + "x": "xrange", + "y": "roofline_hbm_MFMA_i8" + }, + "name": "HBM-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L2Bw_peak", + "x": "xrange", + "y": "roofline_L2_MFMA_i8" + }, + "name": "L2-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "L1Bw_peak", + "x": "xrange", + "y": "roofline_L1_MFMA_i8" + }, + "name": "vL1D-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + }, + { + "mapping": { + "color": "n", + "text": "LDSBw_peak", + "x": "xrange", + "y": "roofline_LDS_MFMA_i8" + }, + "name": "LDS-MFMA-I8", + "settings": { + "color_option": "solid", + "line": { + "color": "#FA6400", + "dash": "solid", + "shape": "linear", + "width": 2 + }, + "marker": { + "color": "#B877D9", + "colorscale": "YlOrRd", + "line": { + "color": "#DDD", + "width": 0 + }, + "showscale": false, + "size": 12, + "sizemin": 3, + "sizemode": "diameter", + "sizeref": 0.2, + "symbol": "star-open" + } + }, + "show": { + "line": true, + "lines": true, + "markers": false + } + } + ] + }, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"hbmBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&HBMBw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "HBM-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_hbm_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&HBMBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&HBMBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Cur Workload", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"cur_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"cur_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"cur_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"cur_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "Baseline Workload", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Roofline)\"}}\n }},\n { \"$group\": { \n \"_id\": \"&KernelName\", \n \"Calls\": { \"$sum\": 1} ,\n \"TotalDuration\": { \"$sum\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n \"AvgDuration\": { \"$avg\": {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]}},\n\n \"total_flops\": {\n \"$avg\":{\"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] },\n { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }\n ]}\n },\n\n \"valu_flops\": {\n \"$avg\": { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }, \"&SQ_INSTS_VALU_TRANS_F16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }, \"&SQ_INSTS_VALU_TRANS_F32\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }, \"&SQ_INSTS_VALU_TRANS_F64\"] }] }\n ]}\n },\n \n \"mfma_flops_f16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] } },\n \"mfma_flops_bf16\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] } },\n \"mfma_flops_f32\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] } },\n \"mfma_flops_f64\": { \"$avg\": { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] } },\n\n\n \"lds_data\": {\n \"$avg\": { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]\n } \n },\n\n \"L1cache_data\": {\n \"$avg\": { \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64] } \n },\n\n \"L2cache_data\": {\n \"$avg\": {\n \"$multiply\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \n \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, 64]}\n },\n\n \"hbm_data\": {\n \"$avg\": {\n \"$add\": [ { \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] },\n { \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]},\n { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] }\n ]\n }\n }\n\n\n }},\n {\"$sort\": { \"TotalDuration\": -1 }},\n { \"$limit\": 10 },\n {\"$project\": {\n \"_id\": 0,\n \"Kernel\": \"&KernelName\",\n \"base_ai_L1\": {\n \"$cond\": [\n { \"$ne\": [\"&L1cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L1cache_data\"] },\n 0\n ]\n },\n \"base_ai_L2\": {\n \"$cond\": [\n { \"$ne\": [\"&L2cache_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&L2cache_data\"] },\n 0\n ]\n },\n \"base_ai_hbm\": {\n \"$cond\": [\n { \"$ne\": [\"&hbm_data\", 0] },\n {\"$divide\": [\"&total_flops\", \"&hbm_data\"] },\n 0\n ]\n },\n \"base_perf\": { \n \"$cond\": [\n { \"$ne\": [\"&AvgDuration\", 0] },\n { \"$divide\": [\"&total_flops\", \"&AvgDuration\"] },\n 0\n ]\n }\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"L2Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L2Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L2-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L2_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L2Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L2Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"L1Bw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&L1Bw\", 1] },0, 32]}, \" GB/s\"] }\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "LJKvMZank" + }, + "hide": false, + "rawQuery": true, + "refId": "L1-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_L1_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&L1Bw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&L1Bw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA-FP16", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAF16Flops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA_fp16\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n },\n \"LDSBw_peak\": { \"$concat\": [{\"$substr\":[{ \"$round\":[\"&LDSBw\", 1] },0, 32]}, \" GB/s\"] }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "jYrBWHfnz" + }, + "hide": false, + "rawQuery": true, + "refId": "LDS-MFMA-I8", + "target": "${Workload1}.roofline.aggregate([\n {\"$match\": {\n \"device\": { \"$in\": [${gpuFilter:raw}] }\n }},\n { \"$addFields\": {\n \"xaxis\": {\"$range\": [0, 50000]}\n }},\n { \"$addFields\": {\n \"high_flop\": \"&MFMAI8Ops\"\n }},\n { \"$addFields\": {\n \"cte\": {\n \"$map\": {\n \"input\": \"$xaxis\",\n \"as\": \"n\",\n \"in\": {\n \"xrange\": {\"$multiply\": [0.1, \"$$n\"]},\n \"roofline_LDS_MFMA_i8\": {\n \"$cond\": {\n \"if\": {\n \"$lt\": [ {\"$multiply\": [0.1, \"$$n\", \"&LDSBw\"]}, \"$high_flop\" ]\n },\n \"then\": { \"$multiply\": [0.1, \"$$n\", \"&LDSBw\"] },\n \"else\": \"$high_flop\"\n }\n }\n\n } \n }}\n }},\n \n {\"$unwind\": \"$cte\"\n },\n {\"$replaceRoot\": {\n \"newRoot\": \"$cte\"\n }}\n]);", + "type": "table" + } + ], + "title": "Empirical Roofline FP16/INT8 (MI200)", + "type": "natel-plotly-panel", + "version": 1 + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Roofline Analysis", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 2, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 13, + "x": 0, + "y": 6 + }, + "id": 6, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1 \n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n\n \"cpfBusy_avg\": {\"$avg\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_min\": {\"$min\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_max\": {\"$max\": \"&CPF_CPF_STAT_BUSY\"},\n\n \"cpfUtil_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n\n \"cpfStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\": {\"$avg\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_min\": {\"$min\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_max\": {\"$max\": \"&CPF_CPF_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n\n \"utcL1Stall_avg\": {\"$avg\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\": {\"$min\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\": {\"$max\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"}\n\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Busy\",\n \"Avg\": \"&cpfBusy_avg\",\n \"Min\": \"&cpfBusy_min\",\n \"Max\": \"&cpfBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Util\",\n \"Avg\": \"&cpfUtil_avg\",\n \"Min\": \"&cpfUtil_min\",\n \"Max\": \"&cpfUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPF Stall\",\n \"Avg\": \"&cpfStall_avg\",\n \"Min\": \"&cpfStall_min\",\n \"Max\": \"&cpfStall_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Busy\",\n \"Avg\": \"&l2CacheBusy_avg\",\n \"Min\": \"&l2CacheBusy_min\",\n \"Max\": \"&l2CacheBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Stall\",\n \"Avg\": \"&l2CacheStall_avg\",\n \"Min\": \"&l2CacheStall_min\",\n \"Max\": \"&l2CacheStall_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles/Kernel\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Command Processor)\"}}\n }},\n\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1 \n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"cpfBusy_avg\": {\"$avg\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_min\": {\"$min\": \"&CPF_CPF_STAT_BUSY\"},\n \"cpfBusy_max\": {\"$max\": \"&CPF_CPF_STAT_BUSY\"},\n\n \"cpfUtil_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n \"cpfUtil_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }, 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_BUSY\"] }, { \"$add\": [\"&CPF_CPF_STAT_BUSY\", \"&CPF_CPF_STAT_IDLE\"] }]},\n null\n ]\n }},\n\n \"cpfStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n \"cpfStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_STAT_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_STAT_STALL\"] }, \"&CPF_CPF_STAT_BUSY\"] } ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\": {\"$avg\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_min\": {\"$min\": \"&CPF_CPF_TCIU_BUSY\"},\n \"l2CacheBusy_max\": {\"$max\": \"&CPF_CPF_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_BUSY\"] }, { \"$add\": [\"&CPF_CPF_TCIU_BUSY\", \"&CPF_CPF_TCIU_IDLE\"] }]},\n null\n ]\n }},\n \"l2CacheStall_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n \"l2CacheStall_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPF_CPF_TCIU_BUSY\", 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&CPF_CPF_TCIU_STALL\"] }, \"&CPF_CPF_TCIU_BUSY\"] },\n null\n ]\n }},\n\n \"utcL1Stall_avg\": {\"$avg\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\": {\"$min\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\": {\"$max\": \"&CPF_CMP_UTCL1_STALL_ON_TRANSLATION\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Busy\",\n \"Avg\": \"&cpfBusy_avg\",\n \"Min\": \"&cpfBusy_min\",\n \"Max\": \"&cpfBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"CPF Util\",\n \"Avg\": \"&cpfUtil_avg\",\n \"Min\": \"&cpfUtil_min\",\n \"Max\": \"&cpfUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPF Stall\",\n \"Avg\": \"&cpfStall_avg\",\n \"Min\": \"&cpfStall_min\",\n \"Max\": \"&cpfStall_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Busy\",\n \"Avg\": \"&l2CacheBusy_avg\",\n \"Min\": \"&l2CacheBusy_min\",\n \"Max\": \"&l2CacheBusy_max\", \n \"Unit\": \"Cycles/Kernel\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Stall\",\n \"Avg\": \"&l2CacheStall_avg\",\n \"Min\": \"&l2CacheStall_min\",\n \"Max\": \"&l2CacheStall_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles/Kernel\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Command Processor Fetcher", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 171 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 180 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baselin)" + }, + "properties": [ + { + "id": "custom.width", + "value": 139 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 147 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 11, + "x": 13, + "y": 6 + }, + "id": 4, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n\n \"cpcBusy_avg\": {\"$avg\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_min\": {\"$min\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_max\": {\"$max\": \"&CPC_CPC_STAT_BUSY\"},\n\n \"cpcUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"cpcStall_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallCycles_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallRate_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"cpcPacketDecoding_avg\":{\"$avg\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_min\":{\"$min\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_max\":{\"$max\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n\n \"spiUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\":{\"$avg\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_min\":{\"$min\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_max\":{\"$max\": \"&CPC_CPC_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"utcL1Stall_avg\":{\"$avg\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\":{\"$min\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\":{\"$max\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n\n \"utcL2Busy_avg\":{\"$avg\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_min\":{\"$min\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_max\":{\"$max\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n\n \"utcL2Util_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Busy Cycles\",\n \"Avg\": \"&cpcBusy_avg\",\n \"Min\": \"&cpcBusy_min\",\n \"Max\": \"&cpcBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Util\",\n \"Avg\": \"&cpcUtil_avg\",\n \"Min\": \"&cpcUtil_min\",\n \"Max\": \"&cpcUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Stall Cycles\",\n \"Avg\": \"&cpcStallCycles_avg\",\n \"Min\": \"&cpcStallCycles_min\",\n \"Max\": \"&cpcStallCycles_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Stall Rate\",\n \"Avg\": \"&cpcStallRate_avg\",\n \"Min\": \"&cpcStallRate_min\",\n \"Max\": \"&cpcStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Packet Decoding\",\n \"Avg\": \"&cpcPacketDecoding_avg\",\n \"Min\": \"&cpcPacketDecoding_min\",\n \"Max\": \"&cpcPacketDecoding_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Busy Cycles\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Util\",\n \"Avg\": \"&spiUtil_avg\",\n \"Min\": \"&spiUtil_min\",\n \"Max\": \"&spiUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall Cycles\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Busy Cycles\",\n \"Avg\": \"&utcL2Busy_avg\",\n \"Min\": \"&utcL2Busy_min\",\n \"Max\": \"&utcL2Busy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Util\",\n \"Avg\": \"&utcL2Util_avg\",\n \"Min\": \"&utcL2Util_min\",\n \"Max\": \"&utcL2Util_max\", \n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Command Processor)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"gpuBusy_avg\": {\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\": {\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\": {\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"cpcBusy_avg\": {\"$avg\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_min\": {\"$min\": \"&CPC_CPC_STAT_BUSY\"},\n \"cpcBusy_max\": {\"$max\": \"&CPC_CPC_STAT_BUSY\"},\n\n \"cpcUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n \"cpcUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_BUSY\"] }, { \"$add\": [\"&CPC_CPC_STAT_BUSY\", \"&CPC_CPC_STAT_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"cpcStall_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStall_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallCycles_avg\": {\"$avg\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_min\": {\"$min\": \"&CPC_CPC_STAT_STALL\"},\n \"cpcStallCycles_max\": {\"$max\": \"&CPC_CPC_STAT_STALL\"},\n\n \"cpcStallRate_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"cpcStallRate_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_STAT_STALL\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"cpcPacketDecoding_avg\":{\"$avg\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_min\":{\"$min\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n \"cpcPacketDecoding_max\":{\"$max\": \"&CPC_ME1_BUSY_FOR_PACKET_DECODE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&CPC_ME1_DC0_SPI_BUSY\"},\n\n \"spiUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n \"spiUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [\"&CPC_CPC_STAT_BUSY\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_ME1_DC0_SPI_BUSY\"] }, \"&CPC_CPC_STAT_BUSY\"]} ,\n null\n ]\n }},\n\n \"l2CacheBusy_avg\":{\"$avg\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_min\":{\"$min\": \"&CPC_CPC_TCIU_BUSY\"},\n \"l2CacheBusy_max\":{\"$max\": \"&CPC_CPC_TCIU_BUSY\"},\n\n \"l2CacheUtil_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n \"l2CacheUtil_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_TCIU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_TCIU_BUSY\", \"&CPC_CPC_TCIU_IDLE\"] }]} ,\n null\n ]\n }},\n\n \"utcL1Stall_avg\":{\"$avg\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_min\":{\"$min\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n \"utcL1Stall_max\":{\"$max\": \"&CPC_UTCL1_STALL_ON_TRANSLATION\"},\n\n \"utcL2Busy_avg\":{\"$avg\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_min\":{\"$min\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n \"utcL2Busy_max\":{\"$max\": \"&CPC_CPC_UTCL2IU_BUSY\"},\n\n \"utcL2Util_avg\": {\"$avg\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_min\": {\"$min\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }},\n \"utcL2Util_max\": {\"$max\":{\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }, 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&CPC_CPC_UTCL2IU_BUSY\"] }, { \"$add\": [\"&CPC_CPC_UTCL2IU_BUSY\", \"&CPC_CPC_UTCL2IU_IDLE\"] }]} ,\n null\n ]\n }}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy Cycles\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Busy Cycles\",\n \"Avg\": \"&cpcBusy_avg\",\n \"Min\": \"&cpcBusy_min\",\n \"Max\": \"&cpcBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Util\",\n \"Avg\": \"&cpcUtil_avg\",\n \"Min\": \"&cpcUtil_min\",\n \"Max\": \"&cpcUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Stall Cycles\",\n \"Avg\": \"&cpcStallCycles_avg\",\n \"Min\": \"&cpcStallCycles_min\",\n \"Max\": \"&cpcStallCycles_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CPC Stall Rate\",\n \"Avg\": \"&cpcStallRate_avg\",\n \"Min\": \"&cpcStallRate_min\",\n \"Max\": \"&cpcStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"CPC Packet Decoding\",\n \"Avg\": \"&cpcPacketDecoding_avg\",\n \"Min\": \"&cpcPacketDecoding_min\",\n \"Max\": \"&cpcPacketDecoding_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Busy Cycles\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Intf Util\",\n \"Avg\": \"&spiUtil_avg\",\n \"Min\": \"&spiUtil_min\",\n \"Max\": \"&spiUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"L2Cache Intf Util\",\n \"Avg\": \"&l2CacheUtil_avg\",\n \"Min\": \"&l2CacheUtil_min\",\n \"Max\": \"&l2CacheUtil_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"UTCL1 Stall Cycles\",\n \"Avg\": \"&utcL1Stall_avg\",\n \"Min\": \"&utcL1Stall_min\",\n \"Max\": \"&utcL1Stall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Busy Cycles\",\n \"Avg\": \"&utcL2Busy_avg\",\n \"Min\": \"&utcL2Busy_min\",\n \"Max\": \"&utcL2Busy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"UTCL2 Intf Util\",\n \"Avg\": \"&utcL2Util_avg\",\n \"Min\": \"&utcL2Util_min\",\n \"Max\": \"&utcL2Util_max\", \n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Command Processor Compute", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Metric 1": "", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Command Processor (CPC/CPF)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 102, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 101 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 96 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max 1" + }, + "properties": [ + { + "id": "custom.width", + "value": 145 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg 2" + }, + "properties": [ + { + "id": "custom.width", + "value": 97 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min 2" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 123 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 106, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"csBusy_avg\":{\"$avg\": \"&SPI_CSN_BUSY\"},\n \"csBusy_min\":{\"$min\": \"&SPI_CSN_BUSY\"},\n \"csBusy_max\":{\"$max\": \"&SPI_CSN_BUSY\"},\n\n \"gpuBusy_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&GRBM_SPI_BUSY\"},\n\n \"sqBusy_avg\":{\"$avg\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_min\":{\"$min\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_max\":{\"$max\": \"&SQ_BUSY_CYCLES\"},\n\n \"dispatchedWorkgroups_avg\":{\"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_min\":{\"$min\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_max\":{\"$max\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n\n \"dispatchedWavefronts_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n\n \"waveAllocFail_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC\"},\n\n \"waveAllocFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Busy\",\n \"Avg\": \"&csBusy_avg\",\n \"Min\": \"&csBusy_min\",\n \"Max\": \"&csBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Busy\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SQ Busy\",\n \"Avg\": \"&sqBusy_avg\",\n \"Min\": \"&sqBusy_min\",\n \"Max\": \"&sqBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Dispatched Workgroups\",\n \"Avg\": \"&dispatchedWorkgroups_avg\",\n \"Min\": \"&dispatchedWorkgroups_min\",\n \"Max\": \"&dispatchedWorkgroups_max\", \n \"Unit\": \"Workgroups\"\n },\n {\n \"Metric\": \"Dispatched Wavefronts\",\n \"Avg\": \"&dispatchedWavefronts_avg\",\n \"Min\": \"&dispatchedWavefronts_min\",\n \"Max\": \"&dispatchedWavefronts_max\", \n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Wave Alloc Failed\",\n \"Avg\": \"&waveAllocFail_avg\",\n \"Min\": \"&waveAllocFail_min\",\n \"Max\": \"&waveAllocFail_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Wave Alloc Failed - CS\",\n \"Avg\": \"&waveAllocFailCS_avg\",\n \"Min\": \"&waveAllocFailCS_min\",\n \"Max\": \"&waveAllocFailCS_max\", \n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Shader Processor Input)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"csBusy_avg\":{\"$avg\": \"&SPI_CSN_BUSY\"},\n \"csBusy_min\":{\"$min\": \"&SPI_CSN_BUSY\"},\n \"csBusy_max\":{\"$max\": \"&SPI_CSN_BUSY\"},\n\n \"gpuBusy_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"gpuBusy_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"},\n\n \"spiBusy_avg\":{\"$avg\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_min\":{\"$min\": \"&GRBM_SPI_BUSY\"},\n \"spiBusy_max\":{\"$max\": \"&GRBM_SPI_BUSY\"},\n\n \"sqBusy_avg\":{\"$avg\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_min\":{\"$min\": \"&SQ_BUSY_CYCLES\"},\n \"sqBusy_max\":{\"$max\": \"&SQ_BUSY_CYCLES\"},\n\n \"dispatchedWorkgroups_avg\":{\"$avg\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_min\":{\"$min\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n \"dispatchedWorkgroups_max\":{\"$max\": \"&SPI_CSN_NUM_THREADGROUPS\"},\n\n \"dispatchedWavefronts_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"dispatchedWavefronts_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"waveAllocFail_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC\"},\n \"waveAllocFail_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC\"},\n\n \"waveAllocFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveAllocFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"GPU Busy\",\n \"Avg\": \"&gpuBusy_avg\",\n \"Min\": \"&gpuBusy_min\",\n \"Max\": \"&gpuBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Busy\",\n \"Avg\": \"&csBusy_avg\",\n \"Min\": \"&csBusy_min\",\n \"Max\": \"&csBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SPI Busy\",\n \"Avg\": \"&spiBusy_avg\",\n \"Min\": \"&spiBusy_min\",\n \"Max\": \"&spiBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"SQ Busy\",\n \"Avg\": \"&sqBusy_avg\",\n \"Min\": \"&sqBusy_min\",\n \"Max\": \"&sqBusy_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Dispatched Workgroups\",\n \"Avg\": \"&dispatchedWorkgroups_avg\",\n \"Min\": \"&dispatchedWorkgroups_min\",\n \"Max\": \"&dispatchedWorkgroups_max\", \n \"Unit\": \"Workgroups\"\n },\n {\n \"Metric\": \"Dispatched Wavefronts\",\n \"Avg\": \"&dispatchedWavefronts_avg\",\n \"Min\": \"&dispatchedWavefronts_min\",\n \"Max\": \"&dispatchedWavefronts_max\", \n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Wave Alloc Failed\",\n \"Avg\": \"&waveAllocFail_avg\",\n \"Min\": \"&waveAllocFail_min\",\n \"Max\": \"&waveAllocFail_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Wave Alloc Failed - CS\",\n \"Avg\": \"&waveAllocFailCS_avg\",\n \"Min\": \"&waveAllocFailCS_min\",\n \"Max\": \"&waveAllocFailCS_max\", \n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "SPI Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit 1": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 285 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 102 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 122 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 242 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 104, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"waveReqFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n\n \"csStall_avg\":{\"$avg\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_min\":{\"$min\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_max\":{\"$max\": \"&SPI_RA_RES_STALL_CSN\"},\n\n \"csStallRate_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n\n \"scratchStall_avg\":{\"$avg\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_min\":{\"$min\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_max\":{\"$max\": \"&SPI_RA_TMP_STALL_CSN\"},\n\n \"simdWaveslots_avg\":{\"$avg\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_min\":{\"$min\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_max\":{\"$max\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n\n \"simdVGPRs_avg\":{\"$avg\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_min\":{\"$min\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_max\":{\"$max\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n\n \"simdSGPRs_avg\":{\"$avg\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_min\":{\"$min\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_max\":{\"$max\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n\n \"cuLDS_avg\":{\"$avg\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_min\":{\"$min\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_max\":{\"$max\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n\n \"cuBarries_avg\":{\"$avg\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_min\":{\"$min\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_max\":{\"$max\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n\n \"bulkyResource_avg\":{\"$avg\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_min\":{\"$min\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_max\":{\"$max\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n\n \"threadgroupLimit_avg\":{\"$avg\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_min\":{\"$min\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_max\":{\"$max\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n\n \"waveLimit_avg\":{\"$avg\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_min\":{\"$min\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_max\":{\"$max\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n\n \"vgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n\n \"sgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \n \n \"sgprsWritesUti_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave request Failed (CS)\",\n \"Avg\": \"&waveReqFailCS_avg\",\n \"Min\": \"&waveReqFailCS_min\",\n \"Max\": \"&waveReqFailCS_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall\",\n \"Avg\": \"&csStall_avg\",\n \"Min\": \"&csStall_min\",\n \"Max\": \"&csStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall Rate\",\n \"Avg\": \"&csStallRate_avg\",\n \"Min\": \"&csStallRate_min\",\n \"Max\": \"&csStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Scratch Stall\",\n \"Avg\": \"&scratchStall_avg\",\n \"Min\": \"&scratchStall_min\",\n \"Max\": \"&scratchStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Insufficient SIMD Waveslots\",\n \"Avg\": \"&simdWaveslots_avg\",\n \"Min\": \"&simdWaveslots_min\",\n \"Max\": \"&simdWaveslots_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD VGPRs\",\n \"Avg\": \"&simdVGPRs_avg\",\n \"Min\": \"&simdVGPRs_min\",\n \"Max\": \"&simdVGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD SGPRs\",\n \"Avg\": \"&simdSGPRs_avg\",\n \"Min\": \"&simdSGPRs_min\",\n \"Max\": \"&simdSGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient CU LDS\",\n \"Avg\": \"&cuLDS_avg\",\n \"Min\": \"&cuLDS_min\",\n \"Max\": \"&cuLDS_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient CU Barries\",\n \"Avg\": \"&cuBarries_avg\",\n \"Min\": \"&cuBarries_min\",\n \"Max\": \"&cuBarries_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient Bulky Resource\",\n \"Avg\": \"&bulkyResource_avg\",\n \"Min\": \"&bulkyResource_min\",\n \"Max\": \"&bulkyResource_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Reach CU Threadgroups Limit\",\n \"Avg\": \"&threadgroupLimit_avg\",\n \"Min\": \"&threadgroupLimit_min\",\n \"Max\": \"&threadgroupLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Reach CU Wave Limit\",\n \"Avg\": \"&waveLimit_avg\",\n \"Min\": \"&waveLimit_min\",\n \"Max\": \"&waveLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"VGPR Writes\",\n \"Avg\": \"&vgprsWrites_avg\",\n \"Min\": \"&vgprsWrites_min\",\n \"Max\": \"&vgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"SGPR Writes\",\n \"Avg\": \"&sgprsWrites_avg\",\n \"Min\": \"&sgprsWrites_min\",\n \"Max\": \"&sgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Shader Processor Input)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"waveReqFailCS_avg\":{\"$avg\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_min\":{\"$min\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n \"waveReqFailCS_max\":{\"$max\": \"&SPI_RA_REQ_NO_ALLOC_CSN\"},\n\n \"csStall_avg\":{\"$avg\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_min\":{\"$min\": \"&SPI_RA_RES_STALL_CSN\"},\n \"csStall_max\":{\"$max\": \"&SPI_RA_RES_STALL_CSN\"},\n\n \"csStallRate_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n \"csStallRate_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$multiply\": [100, \"&SPI_RA_RES_STALL_CSN\"]}, \"&GRBM_SPI_BUSY\"]},\n null\n ]\n }},\n\n \"scratchStall_avg\":{\"$avg\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_min\":{\"$min\": \"&SPI_RA_TMP_STALL_CSN\"},\n \"scratchStall_max\":{\"$max\": \"&SPI_RA_TMP_STALL_CSN\"},\n\n \"simdWaveslots_avg\":{\"$avg\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_min\":{\"$min\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n \"simdWaveslots_max\":{\"$max\": \"&SPI_RA_WAVE_SIMD_FULL_CSN\"},\n\n \"simdVGPRs_avg\":{\"$avg\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_min\":{\"$min\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n \"simdVGPRs_max\":{\"$max\": \"&SPI_RA_VGPR_SIMD_FULL_CSN\"},\n\n \"simdSGPRs_avg\":{\"$avg\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_min\":{\"$min\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n \"simdSGPRs_max\":{\"$max\": \"&SPI_RA_SGPR_SIMD_FULL_CSN\"},\n\n \"cuLDS_avg\":{\"$avg\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_min\":{\"$min\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n \"cuLDS_max\":{\"$max\": \"&SPI_RA_LDS_CU_FULL_CSN\"},\n\n \"cuBarries_avg\":{\"$avg\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_min\":{\"$min\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n \"cuBarries_max\":{\"$max\": \"&SPI_RA_BAR_CU_FULL_CSN\"},\n\n \"bulkyResource_avg\":{\"$avg\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_min\":{\"$min\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n \"bulkyResource_max\":{\"$max\": \"&SPI_RA_BULKY_CU_FULL_CSN\"},\n\n \"threadgroupLimit_avg\":{\"$avg\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_min\":{\"$min\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n \"threadgroupLimit_max\":{\"$max\": \"&SPI_RA_TGLIM_CU_FULL_CSN\"},\n\n \"waveLimit_avg\":{\"$avg\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_min\":{\"$min\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n \"waveLimit_max\":{\"$max\": \"&SPI_RA_WVLIM_STALL_CSN\"},\n\n \"vgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n \"vgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n {\"$divide\": [{ \"$multiply\": [4, \"&SPI_VWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"]},\n null\n ]\n }},\n\n \"sgprsWrites_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \"sgprsWrites_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&SPI_CSN_WAVE\", 0]}, \n { \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&SPI_CSN_WAVE\"] },\n null\n ]\n }},\n \n \n \"sgprsWritesUti_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }},\n \"sgprsWritesUti_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&GRBM_SPI_BUSY\", 0]}, \n {\"$divide\": [{ \"$divide\": [{ \"$multiply\": [1, \"&SPI_SWC_CSC_WR\"] }, \"&GRBM_SPI_BUSY\"] }, 8] },\n null\n ]\n }}\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Wave request Failed (CS)\",\n \"Avg\": \"&waveReqFailCS_avg\",\n \"Min\": \"&waveReqFailCS_min\",\n \"Max\": \"&waveReqFailCS_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall\",\n \"Avg\": \"&csStall_avg\",\n \"Min\": \"&csStall_min\",\n \"Max\": \"&csStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"CS Stall Rate\",\n \"Avg\": \"&csStallRate_avg\",\n \"Min\": \"&csStallRate_min\",\n \"Max\": \"&csStallRate_max\", \n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Scratch Stall\",\n \"Avg\": \"&scratchStall_avg\",\n \"Min\": \"&scratchStall_min\",\n \"Max\": \"&scratchStall_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Insufficient SIMD Waveslots\",\n \"Avg\": \"&simdWaveslots_avg\",\n \"Min\": \"&simdWaveslots_min\",\n \"Max\": \"&simdWaveslots_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD VGPRs\",\n \"Avg\": \"&simdVGPRs_avg\",\n \"Min\": \"&simdVGPRs_min\",\n \"Max\": \"&simdVGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient SIMD SGPRs\",\n \"Avg\": \"&simdSGPRs_avg\",\n \"Min\": \"&simdSGPRs_min\",\n \"Max\": \"&simdSGPRs_max\", \n \"Unit\": \"#SIMD\"\n },\n {\n \"Metric\": \"Insufficient CU LDS\",\n \"Avg\": \"&cuLDS_avg\",\n \"Min\": \"&cuLDS_min\",\n \"Max\": \"&cuLDS_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient CU Barries\",\n \"Avg\": \"&cuBarries_avg\",\n \"Min\": \"&cuBarries_min\",\n \"Max\": \"&cuBarries_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Insufficient Bulky Resource\",\n \"Avg\": \"&bulkyResource_avg\",\n \"Min\": \"&bulkyResource_min\",\n \"Max\": \"&bulkyResource_max\", \n \"Unit\": \"#CU\"\n },\n {\n \"Metric\": \"Reach CU Threadgroups Limit\",\n \"Avg\": \"&threadgroupLimit_avg\",\n \"Min\": \"&threadgroupLimit_min\",\n \"Max\": \"&threadgroupLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"Reach CU Wave Limit\",\n \"Avg\": \"&waveLimit_avg\",\n \"Min\": \"&waveLimit_min\",\n \"Max\": \"&waveLimit_max\", \n \"Unit\": \"Cycles\"\n },\n {\n \"Metric\": \"VGPR Writes\",\n \"Avg\": \"&vgprsWrites_avg\",\n \"Min\": \"&vgprsWrites_min\",\n \"Max\": \"&vgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"SGPR Writes\",\n \"Avg\": \"&sgprsWrites_avg\",\n \"Min\": \"&sgprsWrites_min\",\n \"Max\": \"&sgprsWrites_max\", \n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "SPI Resource Allocation", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Shader Processor Input (SPI)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 185, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 169 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 142 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 196 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 174 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max" + }, + "properties": [ + { + "id": "custom.width", + "value": 168 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min" + }, + "properties": [ + { + "id": "custom.width", + "value": 272 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 225 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 100 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 103 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 10, + "interval": "12h", + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"gridSize_avg\":{\"$avg\": \"&grd\"},\n \"gridSize_min\":{\"$min\": \"&grd\"},\n \"gridSize_max\":{\"$max\": \"&grd\"},\n\n \"workSize_avg\":{\"$avg\": \"&wgr\"},\n \"workSize_min\":{\"$min\": \"&wgr\"},\n \"workSize_max\":{\"$max\": \"&wgr\"},\n\n \"totWavefront_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"savedWavefront_avg\":{\"$avg\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_min\":{\"$min\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_max\":{\"$max\": \"&SQ_WAVES_SAVED\"},\n\n \"restoredWavefront_avg\":{\"$avg\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_min\":{\"$min\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_max\":{\"$max\": \"&SQ_WAVES_RESTORED\"},\n\n \"vgprs_avg\":{\"$avg\": \"&vgpr\"},\n \"vgprs_min\":{\"$min\": \"&vgpr\"},\n \"vgprs_max\":{\"$max\": \"&vgpr\"},\n\n \"sgprs_avg\":{\"$avg\": \"&sgpr\"},\n \"sgprs_min\":{\"$min\": \"&sgpr\"},\n \"sgprs_max\":{\"$max\": \"&sgpr\"},\n\n \"ldsAlloc_avg\":{\"$avg\": \"&lds\"},\n \"ldsAlloc_min\":{\"$min\": \"&lds\"},\n \"ldsAlloc_max\":{\"$max\": \"&lds\"},\n\n \"scratchAlloc_avg\":{\"$avg\": \"&scr\"},\n \"scratchAlloc_min\":{\"$min\": \"&scr\"},\n \"scratchAlloc_max\":{\"$max\": \"&scr\"}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Grid Size\",\n \"Avg\": \"&gridSize_avg\",\n \"Min\": \"&gridSize_min\",\n \"Max\": \"&gridSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Workgroup Size\",\n \"Avg\": \"&workSize_avg\",\n \"Min\": \"&workSize_min\",\n \"Max\": \"&workSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Total Wavefronts\",\n \"Avg\": \"&totWavefront_avg\",\n \"Min\": \"&totWavefront_min\",\n \"Max\": \"&totWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Saved Wavefronts\",\n \"Avg\": \"&savedWavefront_avg\",\n \"Min\": \"&savedWavefront_min\",\n \"Max\": \"&savedWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Restored Wavefronts\",\n \"Avg\": \"&restoredWavefront_avg\",\n \"Min\": \"&restoredWavefront_min\",\n \"Max\": \"&restoredWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"VGPRs\",\n \"Avg\": \"&vgprs_avg\",\n \"Min\": \"&vgprs_min\",\n \"Max\": \"&vgprs_max\",\n \"Unit\": \"Registers\"\n },\n {\n \"Metric\": \"SGPRs\",\n \"Avg\": \"&sgprs_avg\",\n \"Min\": \"&sgprs_min\",\n \"Max\": \"&sgprs_max\",\n \"Unit\":\"Registers\"\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Avg\": \"&ldsAlloc_avg\",\n \"Min\": \"&ldsAlloc_min\",\n \"Max\": \"&ldsAlloc_max\",\n \"Unit\": \"Bytes\"\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Avg\": \"&scratchAlloc_avg\",\n \"Min\": \"&scratchAlloc_min\",\n \"Max\": \"&scratchAlloc_max\",\n \"Unit\": \"Bytes\"\n }\n \n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"gridSize_avg\":{\"$avg\": \"&grd\"},\n \"gridSize_min\":{\"$min\": \"&grd\"},\n \"gridSize_max\":{\"$max\": \"&grd\"},\n\n \"workSize_avg\":{\"$avg\": \"&wgr\"},\n \"workSize_min\":{\"$min\": \"&wgr\"},\n \"workSize_max\":{\"$max\": \"&wgr\"},\n\n\n \"totWavefront_avg\":{\"$avg\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_min\":{\"$min\": \"&SPI_CSN_WAVE\"},\n \"totWavefront_max\":{\"$max\": \"&SPI_CSN_WAVE\"},\n\n \"savedWavefront_avg\":{\"$avg\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_min\":{\"$min\": \"&SQ_WAVES_SAVED\"},\n \"savedWavefront_max\":{\"$max\": \"&SQ_WAVES_SAVED\"},\n\n \"restoredWavefront_avg\":{\"$avg\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_min\":{\"$min\": \"&SQ_WAVES_RESTORED\"},\n \"restoredWavefront_max\":{\"$max\": \"&SQ_WAVES_RESTORED\"},\n\n\n \"vgprs_avg\":{\"$avg\": \"&vgpr\"},\n \"vgprs_min\":{\"$min\": \"&vgpr\"},\n \"vgprs_max\":{\"$max\": \"&vgpr\"},\n\n \"sgprs_avg\":{\"$avg\": \"&sgpr\"},\n \"sgprs_min\":{\"$min\": \"&sgpr\"},\n \"sgprs_max\":{\"$max\": \"&sgpr\"},\n\n \"ldsAlloc_avg\":{\"$avg\": \"&lds\"},\n \"ldsAlloc_min\":{\"$min\": \"&lds\"},\n \"ldsAlloc_max\":{\"$max\": \"&lds\"},\n\n \"scratchAlloc_avg\":{\"$avg\": \"&scr\"},\n \"scratchAlloc_min\":{\"$min\": \"&scr\"},\n \"scratchAlloc_max\":{\"$max\": \"&scr\"}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Grid Size\",\n \"Avg\": \"&gridSize_avg\",\n \"Min\": \"&gridSize_min\",\n \"Max\": \"&gridSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Workgroup Size\",\n \"Avg\": \"&workSize_avg\",\n \"Min\": \"&workSize_min\",\n \"Max\": \"&workSize_max\",\n \"Unit\": \"Work Items\"\n },\n {\n \"Metric\": \"Total Wavefronts\",\n \"Avg\": \"&totWavefront_avg\",\n \"Min\": \"&totWavefront_min\",\n \"Max\": \"&totWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Saved Wavefronts\",\n \"Avg\": \"&savedWavefront_avg\",\n \"Min\": \"&savedWavefront_min\",\n \"Max\": \"&savedWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"Restored Wavefronts\",\n \"Avg\": \"&restoredWavefront_avg\",\n \"Min\": \"&restoredWavefront_min\",\n \"Max\": \"&restoredWavefront_max\",\n \"Unit\": \"Wavefronts\"\n },\n {\n \"Metric\": \"VGPRs\",\n \"Avg\": \"&vgprs_avg\",\n \"Min\": \"&vgprs_min\",\n \"Max\": \"&vgprs_max\",\n \"Unit\": \"Registers\"\n },\n {\n \"Metric\": \"SGPRs\",\n \"Avg\": \"&sgprs_avg\",\n \"Min\": \"&sgprs_min\",\n \"Max\": \"&sgprs_max\",\n \"Unit\":\"Registers\"\n },\n {\n \"Metric\": \"LDS Allocation\",\n \"Avg\": \"&ldsAlloc_avg\",\n \"Min\": \"&ldsAlloc_min\",\n \"Max\": \"&ldsAlloc_max\",\n \"Unit\": \"Bytes\"\n },\n {\n \"Metric\": \"Scratch Allocation\",\n \"Avg\": \"&scratchAlloc_avg\",\n \"Min\": \"&scratchAlloc_min\",\n \"Max\": \"&scratchAlloc_max\",\n \"Unit\": \"Bytes\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Wavefront Launch Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true, + "Units 2": true, + "metric 2": true + }, + "indexByName": { + "Avg 1": 1, + "Avg 2": 2, + "Max 1": 5, + "Max 2": 6, + "Metric 1": 0, + "Metric 2": 7, + "Min 1": 3, + "Min 2": 4, + "Unit 1": 9, + "Unit 2": 8 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 122 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 106 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg" + }, + "properties": [ + { + "id": "custom.width", + "value": 223 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 169 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 165 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 133 + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 34, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"instrWavefront_avg\":{\"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_min\":{\"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_max\":{\"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n\n \"waveCycles_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n\n \"depWaitingCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"issueWaitCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"activeCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"kernelTime_avg\":{\"$avg\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_min\":{\"$min\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_max\":{\"$max\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n\n \"kernelCycle_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Kernel Time (Nanosec)\",\n \"Avg\": \"&kernelTime_avg\",\n \"Min\": \"&kernelTime_min\",\n \"Max\": \"&kernelTime_max\",\n \"Unit\":\"ns\"\n },\n {\n \"Metric\": \"Kernel Time (Cycles)\",\n \"Avg\": \"&kernelCycle_avg\",\n \"Min\": \"&kernelCycle_min\",\n \"Max\": \"&kernelCycle_max\",\n \"Unit\":\"Cycle\"\n },\n\n {\n \"Metric\": \"Instr/wavefront\",\n \"Avg\": \"&instrWavefront_avg\",\n \"Min\": \"&instrWavefront_min\",\n \"Max\": \"&instrWavefront_max\",\n \"Unit\": \"Instr/wavefront\"\n },\n {\n \"Metric\": \"Wave Cycles\",\n \"Avg\": \"&waveCycles_avg\",\n \"Min\": \"&waveCycles_min\",\n \"Max\": \"&waveCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Dependency Wait Cycles\",\n \"Avg\": \"&depWaitingCycles_avg\",\n \"Min\": \"&depWaitingCycles_min\",\n \"Max\": \"&depWaitingCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Issue Wait Cycles\",\n \"Avg\": \"&issueWaitCycles_avg\",\n \"Min\": \"&issueWaitCycles_min\",\n \"Max\": \"&issueWaitCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Active Cycles\",\n \"Avg\": \"&activeCycles_avg\",\n \"Min\": \"&activeCycles_min\",\n \"Max\": \"&activeCycles_max\",\n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"occAvg\": {\"$avg\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMin\": {\"$min\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMax\": {\"$max\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } }\n }},\n {\"$project\": {\n \"_id\":0,\n \"Metric\": \"Wavefront Occupancy\",\n \"Avg\": \"&occAvg\",\n \"Min\":\"&occMin\",\n \"Max\":\"&occMax\",\n \"Unit\":\"Wavefronts\"\n }}\n ]\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"instrWavefront_avg\":{\"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_min\":{\"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n \"instrWavefront_max\":{\"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_WAVES\" ] }},\n\n \"waveCycles_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n \"waveCycles_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ]}},\n\n \"depWaitingCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"depWaitingCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"issueWaitCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"issueWaitCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_WAIT_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"activeCycles_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n \"activeCycles_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [4, \"&SQ_ACTIVE_INST_ANY\"] }, \"&SQ_WAVES\" ]}},\n\n \"kernelTime_avg\":{\"$avg\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_min\":{\"$min\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n \"kernelTime_max\":{\"$max\": {\"$subtract\": [ \"&EndNs\", \"&BeginNs\" ]}},\n\n \"kernelCycle_avg\":{\"$avg\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_min\":{\"$min\": \"&GRBM_GUI_ACTIVE\"},\n \"kernelCycle_max\":{\"$max\": \"&GRBM_GUI_ACTIVE\"}\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Kernel Time (Nanosec)\",\n \"Avg\": \"&kernelTime_avg\",\n \"Min\": \"&kernelTime_min\",\n \"Max\": \"&kernelTime_max\",\n \"Unit\":\"ns\"\n },\n {\n \"Metric\": \"Kernel Time (Cycles)\",\n \"Avg\": \"&kernelCycle_avg\",\n \"Min\": \"&kernelCycle_min\",\n \"Max\": \"&kernelCycle_max\",\n \"Unit\":\"Cycle\"\n },\n\n {\n \"Metric\": \"Instr/wavefront\",\n \"Avg\": \"&instrWavefront_avg\",\n \"Min\": \"&instrWavefront_min\",\n \"Max\": \"&instrWavefront_max\",\n \"Unit\": \"Instr/wavefront\"\n },\n {\n \"Metric\": \"Wave Cycles\",\n \"Avg\": \"&waveCycles_avg\",\n \"Min\": \"&waveCycles_min\",\n \"Max\": \"&waveCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Dependency Wait Cycles\",\n \"Avg\": \"&depWaitingCycles_avg\",\n \"Min\": \"&depWaitingCycles_min\",\n \"Max\": \"&depWaitingCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Issue Wait Cycles\",\n \"Avg\": \"&issueWaitCycles_avg\",\n \"Min\": \"&issueWaitCycles_min\",\n \"Max\": \"&issueWaitCycles_max\",\n \"Unit\": \"Cycles/wave\"\n },\n {\n \"Metric\": \"Active Cycles\",\n \"Avg\": \"&activeCycles_avg\",\n \"Min\": \"&activeCycles_min\",\n \"Max\": \"&activeCycles_max\",\n \"Unit\": \"Cycles/wave\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_LEVEL_WAVES\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Wavefront)\"}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"occAvg\": {\"$avg\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMin\": {\"$min\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } },\n \"occMax\": {\"$max\": { \"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&GRBM_GUI_ACTIVE\" ] } }\n }},\n {\"$project\": {\n \"_id\":0,\n \"Metric\": \"Wavefront Occupancy\",\n \"Avg\": \"&occAvg\",\n \"Min\":\"&occMin\",\n \"Max\":\"&occMax\",\n \"Unit\":\"Wavefronts\"\n }}\n ]\n }}\n ]);", + "type": "table" + } + ], + "title": "Wavefront Runtime Stats", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg": "", + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit 1": "", + "Unit 2": "" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Wavefront", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 209, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 12, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": { + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"valu\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_MFMA\"]}, \"&denom\" ] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_MFMA\", \"&denom\" ] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VMEM\", \"&SQ_INSTS_FLAT_LDS_ONLY\"]}, \"&denom\" ] }\n },\n \"lds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_LDS\", \"&denom\" ] }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"branch\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_BRANCH\", \"&denom\" ] }\n },\n \"gds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_GDS\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"VALU - Vector\",\n \"count\": \"&valu\"\n },\n {\n \"metric\": \"VMEM\",\n \"count\": \"&vmem\"\n },\n {\n \"metric\": \"LDS\",\n \"count\": \"&lds\"\n },\n {\n \"metric\": \"VALU - MFMA\",\n \"count\": \"&mfma\"\n },\n {\n \"metric\": \"SALU\",\n \"count\": \"&salu\"\n },\n {\n \"metric\": \"SMEM\",\n \"count\": \"&smem\"\n },\n {\n \"metric\": \"Branch\",\n \"count\": \"&branch\"\n },\n {\n \"metric\": \"GDS\",\n \"count\": \"&gds\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n \n {\"$group\": {\n \"_id\": null,\n \"valu\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VALU\", \"&SQ_INSTS_MFMA\"]}, \"&denom\" ] }\n },\n \"mfma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_MFMA\", \"&denom\" ] }\n },\n \"vmem\": {\n \"$avg\": { \"$divide\": [ { \"$subtract\": [\"&SQ_INSTS_VMEM\", \"&SQ_INSTS_FLAT_LDS_ONLY\"]}, \"&denom\" ] }\n },\n \"lds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_LDS\", \"&denom\" ] }\n },\n \"salu\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SALU\", \"&denom\" ] }\n },\n \"smem\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_SMEM\", \"&denom\" ] }\n },\n \"branch\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_BRANCH\", \"&denom\" ] }\n },\n \"gds\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_GDS\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"VALU - Vector (Baseline)\",\n \"count\": \"&valu\"\n },\n {\n \"metric\": \"VMEM (Baseline)\",\n \"count\": \"&vmem\"\n },\n {\n \"metric\": \"LDS (Baseline)\",\n \"count\": \"&lds\"\n },\n {\n \"metric\": \"VALU - MFMA (Baseline)\",\n \"count\": \"&mfma\"\n },\n {\n \"metric\": \"SALU (Baseline)\",\n \"count\": \"&salu\"\n },\n {\n \"metric\": \"SMEM (Baseline)\",\n \"count\": \"&smem\"\n },\n {\n \"metric\": \"Branch (Baseline)\",\n \"count\": \"&branch\"\n },\n {\n \"metric\": \"GDS (Baseline)\",\n \"count\": \"&gds\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Instruction Mix", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "metric" + } + ] + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 24, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 24, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^count$/", + "limit": 100, + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"count_int_i32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT32\", \"&denom\" ] }\n },\n \"count_int_i64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT64\", \"&denom\" ] }\n },\n \"count_f16_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F16\", \"&denom\" ] }\n },\n \"count_f16_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F16\", \"&denom\" ] }\n },\n \"count_f16_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F16\", \"&denom\" ] }\n },\n \"count_f16_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F16\", \"&denom\" ] }\n },\n \"count_f32_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F32\", \"&denom\" ] }\n },\n \"count_f32_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F32\", \"&denom\" ] }\n },\n \"count_f32_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F32\", \"&denom\" ] }\n },\n \"count_f32_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F32\", \"&denom\" ] }\n },\n \"count_f64_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F64\", \"&denom\" ] }\n },\n \"count_f64_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F64\", \"&denom\" ] }\n },\n \"count_f64_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F64\", \"&denom\" ] }\n },\n \"count_f64_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F64\", \"&denom\" ] }\n },\n \"conversion\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_CVT\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"INT32\",\n \"count\": \"&count_int_i32\"\n },\n {\n \"metric\": \"INT64\",\n \"count\": \"&count_int_i64\"\n },\n {\n \"metric\": \"F16-ADD\",\n \"count\": \"&count_f16_add\"\n },\n {\n \"metric\": \"F16-MUL\",\n \"count\": \"&count_f16_MUL\"\n },\n {\n \"metric\": \"F16-FMA\",\n \"count\": \"&count_f16_fma\"\n },\n {\n \"metric\": \"F16-Trans\",\n \"count\": \"&count_f16_trans\"\n },\n {\n \"metric\": \"F32-ADD\",\n \"count\": \"&count_f32_add\"\n },\n {\n \"metric\": \"F32-MUL\",\n \"count\": \"&count_f32_MUL\"\n },\n {\n \"metric\": \"F32-FMA\",\n \"count\": \"&count_f32_fma\"\n },\n {\n \"metric\": \"F32-Trans\",\n \"count\": \"&count_f32_trans\"\n },\n {\n \"metric\": \"F64-ADD\",\n \"count\": \"&count_f64_add\"\n },\n {\n \"metric\": \"F64-MUL\",\n \"count\": \"&count_f64_MUL\"\n },\n {\n \"metric\": \"F64-FMA\",\n \"count\": \"&count_f64_fma\"\n },\n {\n \"metric\": \"F64-Trans\",\n \"count\": \"&count_f64_trans\"\n },\n {\n \"metric\": \"Conversion\",\n \"count\": \"&conversion\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"count_int_i32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT32\", \"&denom\" ] }\n },\n \"count_int_i64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_INT64\", \"&denom\" ] }\n },\n \"count_f16_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F16\", \"&denom\" ] }\n },\n \"count_f16_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F16\", \"&denom\" ] }\n },\n \"count_f16_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F16\", \"&denom\" ] }\n },\n \"count_f16_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F16\", \"&denom\" ] }\n },\n \"count_f32_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F32\", \"&denom\" ] }\n },\n \"count_f32_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F32\", \"&denom\" ] }\n },\n \"count_f32_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F32\", \"&denom\" ] }\n },\n \"count_f32_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F32\", \"&denom\" ] }\n },\n \"count_f64_add\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_ADD_F64\", \"&denom\" ] }\n },\n \"count_f64_MUL\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MUL_F64\", \"&denom\" ] }\n },\n \"count_f64_fma\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_FMA_F64\", \"&denom\" ] }\n },\n \"count_f64_trans\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_TRANS_F64\", \"&denom\" ] }\n },\n \"conversion\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_CVT\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"INT32 (Baseline)\",\n \"count\": \"&count_int_i32\"\n },\n {\n \"metric\": \"INT64 (Baseline)\",\n \"count\": \"&count_int_i64\"\n },\n {\n \"metric\": \"F16-ADD (Baseline)\",\n \"count\": \"&count_f16_add\"\n },\n {\n \"metric\": \"F16-MUL (Baseline)\",\n \"count\": \"&count_f16_MUL\"\n },\n {\n \"metric\": \"F16-FMA (Baseline)\",\n \"count\": \"&count_f16_fma\"\n },\n {\n \"metric\": \"F16-Trans (Baseline)\",\n \"count\": \"&count_f16_trans\"\n },\n {\n \"metric\": \"F32-ADD (Baseline)\",\n \"count\": \"&count_f32_add\"\n },\n {\n \"metric\": \"F32-MUL (Baseline)\",\n \"count\": \"&count_f32_MUL\"\n },\n {\n \"metric\": \"F32-FMA (Baseline)\",\n \"count\": \"&count_f32_fma\"\n },\n {\n \"metric\": \"F32-Trans (Baseline)\",\n \"count\": \"&count_f32_trans\"\n },\n {\n \"metric\": \"F64-ADD (Baseline)\",\n \"count\": \"&count_f64_add\"\n },\n {\n \"metric\": \"F64-MUL (Baseline)\",\n \"count\": \"&count_f64_MUL\"\n },\n {\n \"metric\": \"F64-FMA (Baseline)\",\n \"count\": \"&count_f64_fma\"\n },\n {\n \"metric\": \"F64-Trans (Baseline)\",\n \"count\": \"&count_f64_trans\"\n },\n {\n \"metric\": \"Conversion (Baseline)\",\n \"count\": \"&conversion\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "VALU Arithmetic Instr Mix", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "metric" + } + ] + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 275, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"buffer_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \n \"flat_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"Buffer Instr\",\n \"count\": \"&buffer_instr\"\n },\n {\n \"type\": \"Buffer Read\",\n \"count\": \"&buffer_read\"\n },\n {\n \"type\": \"Buffer Write\",\n \"count\": \"&buffer_write\"\n },\n {\n \"type\": \"Buffer Atomic\",\n \"count\": \"&buffer_atomic\"\n },\n {\n \"type\": \"Flat Instr\",\n \"count\": \"&flat_instr\"\n },\n {\n \"type\": \"Flat Read\",\n \"count\": \"&flat_read\"\n },\n {\n \"type\": \"Flat Write\",\n \"count\": \"&flat_write\"\n },\n {\n \"type\": \"Flat Atomic\",\n \"count\": \"&flat_atomic\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"buffer_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"buffer_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n\n \"flat_instr\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_read\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_write\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\" ] }\n },\n \"flat_atomic\": {\n \"$avg\": { \"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"Buffer Instr (Baseline)\",\n \"count\": \"&buffer_instr\"\n },\n {\n \"type\": \"Buffer Read (Baseline)\",\n \"count\": \"&buffer_read\"\n },\n {\n \"type\": \"Buffer Write (Baseline)\",\n \"count\": \"&buffer_write\"\n },\n {\n \"type\": \"Buffer Atomic (Baseline)\",\n \"count\": \"&buffer_atomic\"\n },\n {\n \"type\": \"Flat Instr (Baseline)\",\n \"count\": \"&flat_instr\"\n },\n {\n \"type\": \"Flat Read (Baseline)\",\n \"count\": \"&flat_read\"\n },\n {\n \"type\": \"Flat Write (Baseline)\",\n \"count\": \"&flat_write\"\n },\n {\n \"type\": \"Flat Atomic (Baseline)\",\n \"count\": \"&flat_atomic\"\n }\n\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "VMEM Instr Mix", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "type 2": true + }, + "indexByName": {}, + "renameByName": { + "count": "Count", + "count 1": "Avg (Current)", + "count 2": "Avg (Baseline)", + "type": "VMEM Instr", + "type 1": "VMEM Instr" + } + } + } + ], + "transparent": true, + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 16, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"mmfa_i8\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_I8\", \"&denom\" ] }\n },\n \"mmfa_f16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F16\", \"&denom\" ] }\n },\n \"mmfa_bf16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_BF16\", \"&denom\" ] }\n },\n \"mfma_f32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F32\", \"&denom\" ] }\n },\n \"mfma_f64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F64\", \"&denom\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"MFMA-I8\",\n \"count\": \"&mmfa_i8\"\n },\n {\n \"type\": \"MFMA-F16\",\n \"count\": \"&mmfa_f16\"\n },\n {\n \"type\": \"MFMA-BF16\",\n \"count\": \"&mmfa_bf16\"\n },\n {\n \"type\": \"MFMA-F32\",\n \"count\": \"&mfma_f32\"\n },\n {\n \"type\": \"MFMA-F64\",\n \"count\": \"&mfma_f64\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Mix)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"mmfa_i8\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_I8\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_f16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F16\", \"&SQ_WAVES\" ] }\n },\n \"mmfa_bf16\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_BF16\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f32\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F32\", \"&SQ_WAVES\" ] }\n },\n \"mfma_f64\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS_VALU_MFMA_F64\", \"&SQ_WAVES\" ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"type\": \"MFMA-I8 (Baseline)\",\n \"count\": \"&mmfa_i8\"\n },\n {\n \"type\": \"MFMA-F16 (Baseline)\",\n \"count\": \"&mmfa_f16\"\n },\n {\n \"type\": \"MFMA-BF16 (Baseline)\",\n \"count\": \"&mmfa_bf16\"\n },\n {\n \"type\": \"MFMA-F32 (Baseline)\",\n \"count\": \"&mfma_f32\"\n },\n {\n \"type\": \"MFMA-F64 (Baseline)\",\n \"count\": \"&mfma_f64\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "MFMA Arithmetic Instr Mix", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "type 2": true + }, + "indexByName": {}, + "renameByName": { + "count": "Count", + "count 1": "Avg (Current)", + "count 2": "Avg (Baseline)", + "type": "MFMA Instr", + "type 1": "MFMA Instr" + } + } + } + ], + "transparent": true, + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Compute Unit - Instruction Mix", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 8, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 211, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 14 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n\n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } }\n\n }}, \n {\"$set\": {\n \"array\": [\n {\n \"valu_flops_pop\": {\"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 64, 2 ]}, 1000] }] },\n \"mfma_flops_bf16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 512 ]}, 1000] }]},\n \"mfma_flops_f16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]},\n \"mfma_flops_f32_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]},\n \"mfma_flops_f64_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 256 ]}, 1000] }]},\n \"mfma_flops_i8_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk, $numCU, 1024 ]}, 1000] }]}\n }\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"valu_flops_val\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F16\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F32\"] }] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", { \"$multiply\": [2, \"&SQ_INSTS_VALU_FMA_F64\"] }] }] }\n ]}\n ,{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }]\n }},\n\n \"mfma_flops_f16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_bf16_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_BF16\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f32_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F32\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_f64_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_F64\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n \"mfma_flops_i8_val\": { \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] } },\n\n \"instr_val\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }] }\n }\n\n }}, \n {\"$set\": {\n \"array\": [\n {\n \"valu_flops_pop\": {\"$divide\": [{ \"$multiply\": [100, \"&valu_flops_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 64, 2 ]}, 1000] }] },\n \"mfma_flops_bf16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_bf16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 512 ]}, 1000] }]},\n \"mfma_flops_f16_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f16_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]},\n \"mfma_flops_f32_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f32_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]},\n \"mfma_flops_f64_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_f64_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 256 ]}, 1000] }]},\n \"mfma_flops_i8_pop\": { \"$divide\": [{ \"$multiply\": [100, \"&mfma_flops_i8_val\"] }, { \"$divide\": [{ \"$multiply\": [$sclk2, $numCU2, 1024 ]}, 1000] }]}\n }\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Compute Pipeline", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "mfma_flops_bf16_pop 1": 4, + "mfma_flops_bf16_pop 2": 5, + "mfma_flops_f16_pop 1": 6, + "mfma_flops_f16_pop 2": 7, + "mfma_flops_f32_pop 1": 8, + "mfma_flops_f32_pop 2": 9, + "mfma_flops_f64_pop 1": 10, + "mfma_flops_f64_pop 2": 11, + "mfma_flops_i8_pop 1": 12, + "mfma_flops_i8_pop 2": 13, + "valu_flops_pop 1": 0, + "valu_flops_pop 2": 1, + "valu_iops_pop 1": 2, + "valu_iops_pop 2": 3 + }, + "renameByName": { + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "Bandwith (Pct-of-Peak)": "", + "Bandwith (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "Bandwith (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline) ", + "Bank Conflict Rate 1": "Bank Conflict Rate (Current)", + "Bank Conflict Rate 2": "Bank Conflict Rate (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Latency (Cycles) 1": "Latency (Current) [Cycles]", + "Latency (Cycles) 2": "Latency (Baseline) [Cycles]", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)", + "flops_pop": "FLOPs", + "flops_pop 1": "FLOPs (Current)", + "flops_pop 2": "FLOPs (Baseline)", + "iops_pop": "IOPs", + "iops_pop 1": "IOPs (Current)", + "iops_pop 2": "IOPs (Baseline)", + "mfma_flops_bf16_pop": "MFMA- BF16 (FLOPs)", + "mfma_flops_bf16_pop 1": "MFMA-BF16 (Cur)", + "mfma_flops_bf16_pop 2": "MFMA-BF16 (Baseline)", + "mfma_flops_f16_pop": "MFMA-F16 (FLOPs)", + "mfma_flops_f16_pop 1": "MFMA-F16 (Cur)", + "mfma_flops_f16_pop 2": "MFMA-F16 (Baseline)", + "mfma_flops_f32_pop": "MFMA-F32 (FLOPs)", + "mfma_flops_f32_pop 1": "MFMA-F32 (Cur)", + "mfma_flops_f32_pop 2": "MFMA-F32 (Baseline)", + "mfma_flops_f64_pop": "MFMA-F64 (FLOPs)", + "mfma_flops_f64_pop 1": "MFMA-F64 (Cur)", + "mfma_flops_f64_pop 2": "MFMA-F64 (Baseline)", + "mfma_flops_i8_pop": "MFMA-i8 (IOPs)", + "mfma_flops_i8_pop 1": "MFMA-I8 (Cur)", + "mfma_flops_i8_pop 2": "MFMA-I8 (Baseline)", + "valu_flops_pop": "VALU (FLOPs)", + "valu_flops_pop 1": "VALU FLOPs (Cur)", + "valu_flops_pop 2": "VALU FLOPs (Baseline)", + "valu_iops_pop": "VALU (IOPs)", + "valu_iops_pop 1": "VALU IOPs (Cur)", + "valu_iops_pop 2": "VALU IOPs (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 257, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_ipcAvg\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \"min_ipcAvg\": {\n \"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] } \n },\n \"max_ipcAvg\": {\n \"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \n \"avg_ipcIssue\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"min_ipcIssue\": {\n \"$min\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"max_ipcIssue\": {\n \"$max\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n\n \"avg_saluUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"min_saluUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"max_saluUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n\n \"avg_valuUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"min_valuUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n \"max_valuUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU ] }\n },\n\n \"avg_mfmaUtil\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"min_mfmaUtil\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"max_mfmaUtil\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n\n \"avg_mfmaInstrCycles\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"min_mfmaInstrCycles\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"max_mfmaInstrCycles\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n\n\n \"avg_unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"min_unpredthreads_val\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"max_unpredthreads_val\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n\n \"avg_instrFetchBand\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"min_instrFetchBand\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"max_instrFetchBand\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"IPC (Avg)\",\n \"Avg\": \"&avg_ipcAvg\",\n \"Min\": \"&min_ipcAvg\",\n \"Max\": \"&max_ipcAvg\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"IPC (Issue)\",\n \"Avg\": \"&avg_ipcIssue\",\n \"Min\": \"&min_ipcIssue\",\n \"Max\": \"&max_ipcIssue\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"SALU Util\",\n \"Avg\": \"&avg_saluUtil\",\n \"Min\": \"&min_saluUtil\",\n \"Max\": \"&max_saluUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Avg\": \"&avg_valuUtil\",\n \"Min\": \"&min_valuUtil\",\n \"Max\": \"&max_valuUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Active Threads\",\n \"Avg\": \"&avg_unpredthreads_val\",\n \"Min\": \"&min_unpredthreads_val\",\n \"Max\": \"&max_unpredthreads_val\",\n \"Unit\": \"Threads\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Avg\": \"&avg_mfmaUtil\",\n \"Min\": \"&min_mfmaUtil\",\n \"Max\": \"&max_mfmaUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"MFMA Instr Cycles\",\n \"Avg\": \"&avg_mfmaInstrCycles\",\n \"Min\": \"&min_mfmaInstrCycles\",\n \"Max\": \"&max_mfmaInstrCycles\",\n \"Unit\": \"cycles/instr\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ipcAvg\": {\n \"$avg\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \"min_ipcAvg\": {\n \"$min\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] } \n },\n \"max_ipcAvg\": {\n \"$max\": { \"$divide\": [ \"&SQ_INSTS\", \"&SQ_BUSY_CU_CYCLES\" ] }\n },\n \n \"avg_ipcIssue\": {\n \"$avg\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"min_ipcIssue\": {\n \"$min\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n \"max_ipcIssue\": {\n \"$max\": { \"$divide\": [ { \"$add\": [ \"&SQ_INSTS_VALU\", \"&SQ_INSTS_VMEM\",\"&SQ_INSTS_SALU\", \"&SQ_INSTS_SMEM\", \"&SQ_INSTS_GDS\", \"&SQ_INSTS_BRANCH\", \"&SQ_INSTS_SENDMSG\", \"&SQ_INSTS_VSKIPPED\"] }, \"&SQ_ACTIVE_INST_ANY\"] }\n },\n\n \"avg_saluUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"min_saluUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"max_saluUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_SCA\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n\n \"avg_valuUtil\": {\n \"$avg\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"min_valuUtil\": {\n \"$min\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n \"max_valuUtil\": {\n \"$max\": { \"$divide\": [{ \"$divide\": [ { \"$multiply\": [100, \"&SQ_ACTIVE_INST_VALU\"] }, \"&GRBM_GUI_ACTIVE\"] },$numCU2 ] }\n },\n\n\n \"avg_mfmaUtil\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"min_mfmaUtil\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n \"max_mfmaUtil\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQ_VALU_MFMA_BUSY_CYCLES\"] }, { \"$multiply\": [4, $numCU2, \"&GRBM_GUI_ACTIVE\"] }] }\n },\n\n \"avg_mfmaInstrCycles\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"min_mfmaInstrCycles\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n \"max_mfmaInstrCycles\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_MFMA\", 0]},\n {\"$divide\": [ \"&SQ_VALU_MFMA_BUSY_CYCLES\", \"&SQ_INSTS_MFMA\" ]},\n null\n ]\n }\n },\n\n \"avg_unpredthreads_val\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"min_unpredthreads_val\": {\n \"$min\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n \"max_unpredthreads_val\": {\n \"$max\": {\n \"$cond\": [\n {\"$ne\":[\"&SQ_ACTIVE_INST_VALU\" , 0]},\n { \"$divide\": [\"&SQ_THREAD_CYCLES_VALU\", \"&SQ_ACTIVE_INST_VALU\"] },\n null\n ]\n }\n },\n\n \"avg_instrFetchBand\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"min_instrFetchBand\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \"max_instrFetchBand\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [\"&SQ_IFETCH\", 32] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"IPC (Avg)\",\n \"Avg 2\": \"&avg_ipcAvg\",\n \"Min 2\": \"&min_ipcAvg\",\n \"Max 2\": \"&max_ipcAvg\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"IPC (Issue)\",\n \"Avg 2\": \"&avg_ipcIssue\",\n \"Min 2\": \"&min_ipcIssue\",\n \"Max 2\": \"&max_ipcIssue\",\n \"Unit\": \"Instr/cycle\"\n },\n {\n \"Metric\": \"SALU Util\",\n \"Avg 2\": \"&avg_saluUtil\",\n \"Min 2\": \"&min_saluUtil\",\n \"Max 2\": \"&max_saluUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Util\",\n \"Avg 2\": \"&avg_valuUtil\",\n \"Min 2\": \"&min_valuUtil\",\n \"Max 2\": \"&max_valuUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"VALU Active Threads\",\n \"Avg 2\": \"&avg_unpredthreads_val\",\n \"Min 2\": \"&min_unpredthreads_val\",\n \"Max 2\": \"&max_unpredthreads_val\",\n \"Unit\": \"Threads\"\n },\n {\n \"Metric\": \"MFMA Util\",\n \"Avg 2\": \"&avg_mfmaUtil\",\n \"Min 2\": \"&min_mfmaUtil\",\n \"Max 2\": \"&max_mfmaUtil\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"MFMA Instr Cycles\",\n \"Avg 2\": \"&avg_mfmaInstrCycles\",\n \"Min 2\": \"&min_mfmaInstrCycles\",\n \"Max 2\": \"&max_mfmaInstrCycles\",\n \"Unit\": \"cycles/instr\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Pipeline Stats", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Avg": 1, + "Avg 2": 2, + "Max": 5, + "Max 2": 6, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Avg 2": "Avg (Baseline)", + "Max 2": "Max (Baseline)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 111 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 117 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 118 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 96, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_intOps\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"min_intOps\":{\"$min\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"max_intOps\":{\"$max\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n\n\n \"avg_flops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_flops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n \"max_flops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n\n \"avg_int8Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"min_int8Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"max_int8Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n\n \"avg_int32Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"min_int32Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"max_int32Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n\n \"avg_int64Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"min_int64Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"max_int64Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n\n \"avg_f16Ops\":{\"$avg\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"min_f16Ops\":{\"$min\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"max_f16Ops\":{\"$max\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n\n\n\n \"avg_bf16Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"min_bf16Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"max_bf16Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n\n \"avg_f32Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"min_f32Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"max_f32Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n\n \"avg_f64Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_f64Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"max_f64Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"FLOPs (Total)\",\n \"Avg\": \"&avg_flops\",\n \"Min\": \"&min_flops\",\n \"Max\": \"&max_flops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"INT8 OPs\",\n \"Avg\": \"&avg_int8Ops\",\n \"Min\": \"&min_int8Ops\",\n \"Max\": \"&max_int8Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F16 OPs\",\n \"Avg\": \"&avg_f16Ops\",\n \"Min\": \"&min_f16Ops\",\n \"Max\": \"&max_f16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"BF16 OPs\",\n \"Avg\": \"&avg_bf16Ops\",\n \"Min\": \"&min_bf16Ops\",\n \"Max\": \"&max_bf16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n\n {\n \"Metric\": \"F32 OPs\",\n \"Avg\": \"&avg_f32Ops\",\n \"Min\": \"&min_f32Ops\",\n \"Max\": \"&max_f32Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F64 OPs\",\n \"Avg\": \"&avg_f64Ops\",\n \"Min\": \"&min_f64Ops\",\n \"Max\": \"&max_f64Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_intOps\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"min_intOps\":{\"$min\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n \"max_intOps\":{\"$max\": {\n \"$divide\": [{ \"$add\": [{ \"$multiply\": [{ \"$add\": [\"&SQ_INSTS_VALU_INT32\", \"&SQ_INSTS_VALU_INT64\"] },64] }, { \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\",512] }] },\"&denom\"]\n }},\n\n\n \"avg_flops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_flops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n \"max_flops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F16\", \"&SQ_INSTS_VALU_MUL_F16\", \"&SQ_INSTS_VALU_TRANS_F16\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F16\", 2]}] }] },\n { \"$add\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"] }, { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] },\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n\n\n \"avg_int8Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"min_int8Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n \"max_int8Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_MFMA_MOPS_I8\", 512] }, \"&denom\"] }},\n\n \"avg_int32Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"min_int32Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n \"max_int32Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT32\", 64] }, \"&denom\"] }},\n\n \"avg_int64Ops\":{\"$avg\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"min_int64Ops\":{\"$min\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n \"max_int64Ops\":{\"$max\": {\"$divide\": [{ \"$multiply\": [\"&SQ_INSTS_VALU_INT64\", 64] }, \"&denom\"] }},\n\n \"avg_f16Ops\":{\"$avg\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"min_f16Ops\":{\"$min\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n \"max_f16Ops\":{\"$max\": {\n \"$divide\": [ \n {\"$add\": [{ \"$multiply\": [64, \"&SQ_INSTS_VALU_ADD_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_MUL_F16\"]}, \n { \"$multiply\": [64, \"&SQ_INSTS_VALU_TRANS_F16\"]}, \n { \"$multiply\": [128, \"&SQ_INSTS_VALU_FMA_F16\"]}, \n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F16\"]}\n ]},\n \"&denom\"]\n }},\n\n\n\n \"avg_bf16Ops\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"min_bf16Ops\":{\"$min\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n \"max_bf16Ops\":{\"$max\": { \"$divide\": [{ \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_BF16\"] }, \"&denom\"] }},\n\n \"avg_f32Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"min_f32Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n \"max_f32Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F32\", \"&SQ_INSTS_VALU_MUL_F32\", \"&SQ_INSTS_VALU_TRANS_F32\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F32\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F32\"] }\n ] }, \"&denom\"]\n }},\n\n \"avg_f64Ops\":{\"$avg\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"min_f64Ops\":{\"$min\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }},\n \"max_f64Ops\":{\"$max\": {\n \"$divide\": [{ \"$add\": [\n { \"$multiply\": [64, { \"$add\": [\"&SQ_INSTS_VALU_ADD_F64\", \"&SQ_INSTS_VALU_MUL_F64\", \"&SQ_INSTS_VALU_TRANS_F64\", {\"$multiply\": [\"&SQ_INSTS_VALU_FMA_F64\", 2]}] }] },\n { \"$multiply\": [512, \"&SQ_INSTS_VALU_MFMA_MOPS_F64\"] }\n ] }, \"&denom\"]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"FLOPs (Total)\",\n \"Avg\": \"&avg_flops\",\n \"Min\": \"&min_flops\",\n \"Max\": \"&max_flops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"INT8 OPs\",\n \"Avg\": \"&avg_int8Ops\",\n \"Min\": \"&min_int8Ops\",\n \"Max\": \"&max_int8Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F16 OPs\",\n \"Avg\": \"&avg_f16Ops\",\n \"Min\": \"&min_f16Ops\",\n \"Max\": \"&max_f16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"BF16 OPs\",\n \"Avg\": \"&avg_bf16Ops\",\n \"Min\": \"&min_bf16Ops\",\n \"Max\": \"&max_bf16Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n\n {\n \"Metric\": \"F32 OPs\",\n \"Avg\": \"&avg_f32Ops\",\n \"Min\": \"&min_f32Ops\",\n \"Max\": \"&max_f32Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n },\n {\n \"Metric\": \"F64 OPs\",\n \"Avg\": \"&avg_f64Ops\",\n \"Min\": \"&min_f64Ops\",\n \"Max\": \"&max_f64Ops\",\n \"Unit\": {\"$concat\": [\"OPs \", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Arithmetic Operations", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 1, + "Avg 2": 2, + "Max 1": 5, + "Max 2": 6, + "Metric 1": 0, + "Metric 2": 7, + "Min 1": 3, + "Min 2": 4, + "Unit 1": 9, + "Unit 2": 8 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 255, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_VMEM", + "target": "${Workload1}.SQ_INST_LEVEL_VMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_vmemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"min_vmemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"max_vmemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"VMEM Latency\",\n \"Avg\": \"&avg_vmemLat\",\n \"Min\": \"&min_vmemLat\",\n \"Max\": \"&max_vmemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_SMEM", + "target": "${Workload1}.SQ_INST_LEVEL_SMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_smemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"min_smemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"max_smemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"SMEM Latency\",\n \"Avg\":\"&avg_smemLat\",\n \"Min\":\"&min_smemLat\",\n \"Max\":\"&max_smemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_IFETCH_LEVEL", + "target": "${Workload1}.SQ_IFETCH_LEVEL.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_instrFetchLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"min_instrFetchLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"max_instrFetchLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"Instr Fetch Latency\",\n \"Avg\":\"&avg_instrFetchLat\",\n \"Min\":\"&min_instrFetchLat\",\n \"Max\":\"&max_instrFetchLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS", + "target": "${Workload1}.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"LDS Latency\",\n \"Avg\":\"&avg_ldsLat\",\n \"Min\":\"&min_ldsLat\",\n \"Max\":\"&max_ldsLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_VMEM2", + "target": "${Workload2}.SQ_INST_LEVEL_VMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_vmemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"min_vmemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n },\n \"max_vmemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_VMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_VMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"VMEM Latency\",\n \"Avg 2\": \"&avg_vmemLat\",\n \"Min 2\": \"&min_vmemLat\",\n \"Max 2\": \"&max_vmemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_SMEM2", + "target": "${Workload2}.SQ_INST_LEVEL_SMEM.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_smemLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"min_smemLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n },\n \"max_smemLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_SMEM\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_SMEM\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"SMEM Latency\",\n \"Avg 2\":\"&avg_smemLat\",\n \"Min 2\":\"&min_smemLat\",\n \"Max 2\":\"&max_smemLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_IFETCH_LEVEL2", + "target": "${Workload2}.SQ_IFETCH_LEVEL.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_instrFetchLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"min_instrFetchLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n },\n \"max_instrFetchLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_IFETCH\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_IFETCH\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"Instr Fetch Latency\",\n \"Avg 2\":\"&avg_instrFetchLat\",\n \"Min 2\":\"&min_instrFetchLat\",\n \"Max 2\":\"&max_instrFetchLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "SQ_INST_LEVEL_LDS2", + "target": "${Workload2}.SQ_INST_LEVEL_LDS.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Compute Pipeline)\"}}\n }}, \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLat\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLat\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLat\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"Metric\": \"LDS Latency\",\n \"Avg 2\":\"&avg_ldsLat\",\n \"Min 2\":\"&min_ldsLat\",\n \"Max 2\":\"&max_ldsLat\",\n \"Unit\": \"Cycles\"\n }}\n]);", + "type": "table" + } + ], + "title": "Memory Latencies", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Avg": 1, + "Avg 2": 2, + "Max": 5, + "Max 2": 6, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Avg": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Compute Unit - Compute Pipeline", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 98, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 205, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \n \"bconf_rate\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n {\"$multiply\": [\"&SQ_LDS_BANK_CONFLICT\", 3.125]},\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n \n \"bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]},\n \n {\"$multiply\": [$sclk, $numCU, 0.00128]}\n ]}\n },\n\n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n },\n\n \"lds_access_rate\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [200, \"&SQ_ACTIVE_INST_LDS\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}\n ]}\n }\n \n }},\n \n {\"$set\": {\n \"array\": [\n {\n \"Utilization\": \"&lds_util\",\n \"Access Rate\": \"&lds_access_rate\",\n \"Bandwith (Pct-of-Peak)\": \"&bw_pop\",\n \"Bank Conflict Rate\": \"&bconf_rate\"\n }\n \n ]\n }},\n \n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n \n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"bconf_rate\": {\n \"$avg\": {\"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n {\"$multiply\": [\"&SQ_LDS_BANK_CONFLICT\", 3.125]},\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n } \n },\n\n \"bw_pop\": {\n \"$avg\": {\"$divide\": [\n {\"$divide\":[ \n { \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, \n 4, \n {\"$toInt\": \"$L2Banks2\"}\n ]}, \n {\"$subtract\": [\"&EndNs\", \"&BeginNs\"]}\n ]},\n \n {\"$multiply\": [$sclk2, $numCU2, 0.00128]}\n ]}\n },\n \"lds_util\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [ 100, \"&SQ_LDS_IDX_ACTIVE\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}\n ]}\n },\n\n \"lds_access_rate\": {\n \"$avg\": {\"$divide\":[ \n { \"$multiply\": [200, \"&SQ_ACTIVE_INST_LDS\" ]}, \n {\"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}\n ]}\n }\n\n\n }},\n\n {\"$set\": {\n \"array\": [\n {\n \"Utilization\": \"&lds_util\",\n \"Access Rate\": \"&lds_access_rate\",\n \"Bandwith (Pct-of-Peak)\": \"&bw_pop\",\n \"Bank Conflict Rate\": \"&bconf_rate\"\n }\n\n ]\n }},\n\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n \n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: LDS", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Access Rate 1": 6, + "Access Rate 2": 7, + "Bandwith (Pct-of-Peak) 1": 0, + "Bandwith (Pct-of-Peak) 2": 1, + "Bank Conflict Rate 1": 2, + "Bank Conflict Rate 2": 3, + "Utilization 1": 4, + "Utilization 2": 5 + }, + "renameByName": { + "Access Rate 1": "Access Rate (Current)", + "Access Rate 2": "Access Rate (Baseline)", + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "Bandwith (Pct-of-Peak)": "", + "Bandwith (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "Bandwith (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline) ", + "Bank Conflict Rate 1": "Bank Conflict Rate (Current)", + "Bank Conflict Rate 2": "Bank Conflict Rate (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Latency (Cycles) 1": "Latency (Current) [Cycles]", + "Latency (Cycles) 2": "Latency (Baseline) [Cycles]", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)", + "Utilization 1": "Util (Current)", + "Utilization 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "min": -100000000000000000000, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 107 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 115 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 138 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 141 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 100, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_waveCycles\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"min_waveCycles\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"max_waveCycles\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \n \"avg_ldsInstrs\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"min_ldsInstrs\": {\n \"$min\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"max_ldsInstrs\": {\n \"$max\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \n \"avg_indexAccesses\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"min_indexAccesses\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"max_indexAccesses\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \n \"avg_atomicCycles\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"min_atomicCycles\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"max_atomicCycles\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \n \"avg_bankConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"min_bankConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"max_bankConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \n \"avg_addrConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"min_addrConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"max_addrConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \n \n \"avg_unalignedStall\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"min_unalignedStall\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"max_unalignedStall\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \n \"avg_memViolations\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"min_memViolations\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"max_memViolations\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \n \"avg_bconf_per_op\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"min_bconf_per_op\": {\n \"$min\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"max_bconf_per_op\": {\n \"$max\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \n \"avg_bw\": {\n \"$avg\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"min_bw\": {\n \"$min\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"max_bw\": {\n \"$max\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Wave Cycles\",\n \"avg\": \"&avg_waveCycles\",\n \"min\": \"&min_waveCycles\",\n \"max\": \"&max_waveCycles\",\n \"Unit\": \"Cycles/Wave\"\n },\n {\n \"metric\": \"LDS Instrs\",\n \"avg\": \"&avg_ldsInstrs\",\n \"min\": \"&min_ldsInstrs\",\n \"max\": \"&max_ldsInstrs\",\n \"Unit\":{\"$concat\": [\"Instr \", $normUnit]} \n },\n {\n \"metric\": \"Bandwidth\",\n \"avg\": \"&avg_bw\",\n \"min\": \"&min_bw\",\n \"max\": \"&max_bw\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conficts/Access\",\n \"avg\": \"&avg_bconf_per_op\",\n \"min\": \"&min_bconf_per_op\",\n \"max\": \"&max_bconf_per_op\",\n \"Unit\": \"Conflicts/Access\"\n },\n {\n \"metric\": \"Index Accesses\",\n \"avg\": \"&avg_indexAccesses\",\n \"min\": \"&min_indexAccesses\",\n \"max\": \"&max_indexAccesses\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Cycles\",\n \"avg\": \"&avg_atomicCycles\",\n \"min\": \"&min_atomicCycles\",\n \"max\": \"&max_atomicCycles\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conflict\",\n \"avg\": \"&avg_bankConflicts\",\n \"min\": \"&min_bankConflicts\",\n \"max\": \"&max_bankConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Addr Conflict\",\n \"avg\": \"&avg_addrConflicts\",\n \"min\": \"&min_addrConflicts\",\n \"max\": \"&max_addrConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Unaligned Stall\",\n \"avg\": \"&avg_unalignedStall\",\n \"min\": \"&min_unalignedStall\",\n \"max\": \"&max_unalignedStall\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Mem Violations\",\n \"avg\": \"&avg_memViolations\",\n \"min\": \"&min_memViolations\",\n \"max\": \"&max_memViolations\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_INST_LEVEL_LDS\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLatency\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLatency\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLatency\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"metric\": \"LDS Latency\",\n \"avg\": \"&avg_ldsLatency\",\n \"min\": \"&min_ldsLatency\",\n \"max\": \"&max_ldsLatency\",\n \"Unit\": \"Cycles\"\n }}\n ]\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}, \n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n \n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_waveCycles\": {\n \"$avg\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"min_waveCycles\": {\n \"$min\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \"max_waveCycles\": {\n \"$max\": { \"$divide\": [ { \"$multiply\": [4, \"&SQ_WAVE_CYCLES\"] }, \"&SQ_WAVES\" ] }\n },\n \n \"avg_ldsInstrs\": {\n \"$avg\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"min_ldsInstrs\": {\n \"$min\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \"max_ldsInstrs\": {\n \"$max\": { \"$divide\": [\"&SQ_INSTS_LDS\" , \"&denom\"] }\n },\n \n \"avg_indexAccesses\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"min_indexAccesses\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \"max_indexAccesses\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_IDX_ACTIVE\" , \"&denom\"] }\n },\n \n \"avg_atomicCycles\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"min_atomicCycles\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \"max_atomicCycles\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ATOMIC_RETURN\" , \"&denom\" ] }\n },\n \n \"avg_bankConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"min_bankConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \"max_bankConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_BANK_CONFLICT\" , \"&denom\" ] }\n },\n \n \"avg_addrConflicts\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"min_addrConflicts\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"max_addrConflicts\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_ADDR_CONFLICT\" , \"&denom\" ] }\n },\n \"avg_unalignedStall\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"min_unalignedStall\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \"max_unalignedStall\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_UNALIGNED_STALL\" , \"&denom\" ] }\n },\n \n \"avg_memViolations\": {\n \"$avg\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"min_memViolations\": {\n \"$min\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \"max_memViolations\": {\n \"$max\": { \"$divide\": [\"&SQ_LDS_MEM_VIOLATIONS\" , \"&denom\" ] }\n },\n \n \n \"avg_bconf_per_op\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"min_bconf_per_op\": {\n \"$min\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \"max_bconf_per_op\": {\n \"$max\": {\n \"$cond\": [ {\"$ne\": [{\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}, 0]},\n {\"$divide\": [\n \"&SQ_LDS_BANK_CONFLICT\",\n {\"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]}\n ]},\n null\n ]\n }\n },\n \n \"avg_bw\": {\n \"$avg\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"min_bw\": {\n \"$min\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n },\n \"max_bw\": {\n \"$max\": {\n \"$divide\":\n [ { \"$multiply\": [{ \"$multiply\": [ { \"$subtract\": [\"&SQ_LDS_IDX_ACTIVE\", \"&SQ_LDS_BANK_CONFLICT\"]} , 4]}, {\"$toInt\": \"$L2Banks\"}]}, \n \"&denom\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Wave Cycles\",\n \"avg\": \"&avg_waveCycles\",\n \"min\": \"&min_waveCycles\",\n \"max\": \"&max_waveCycles\",\n \"Unit\": \"Cycles/Wave\"\n },\n {\n \"metric\": \"LDS Instrs\",\n \"avg\": \"&avg_ldsInstrs\",\n \"min\": \"&min_ldsInstrs\",\n \"max\": \"&max_ldsInstrs\",\n \"Unit\":{\"$concat\": [\"Instr \", $normUnit]} \n },\n {\n \"metric\": \"Bandwidth\",\n \"avg\": \"&avg_bw\",\n \"min\": \"&min_bw\",\n \"max\": \"&max_bw\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conficts/Access\",\n \"avg\": \"&avg_bconf_per_op\",\n \"min\": \"&min_bconf_per_op\",\n \"max\": \"&max_bconf_per_op\",\n \"Unit\": \"Conflicts/Access\"\n },\n {\n \"metric\": \"Index Accesses\",\n \"avg\": \"&avg_indexAccesses\",\n \"min\": \"&min_indexAccesses\",\n \"max\": \"&max_indexAccesses\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Cycles\",\n \"avg\": \"&avg_atomicCycles\",\n \"min\": \"&min_atomicCycles\",\n \"max\": \"&max_atomicCycles\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Bank Conflict\",\n \"avg\": \"&avg_bankConflicts\",\n \"min\": \"&min_bankConflicts\",\n \"max\": \"&max_bankConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Addr Conflict\",\n \"avg\": \"&avg_addrConflicts\",\n \"min\": \"&min_addrConflicts\",\n \"max\": \"&max_addrConflicts\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Unaligned Stall\",\n \"avg\": \"&avg_unalignedStall\",\n \"min\": \"&min_unalignedStall\",\n \"max\": \"&max_unalignedStall\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Mem Violations\",\n \"avg\": \"&avg_memViolations\",\n \"min\": \"&min_memViolations\",\n \"max\": \"&max_memViolations\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }},\n {\"$unionWith\": {\n \"coll\": \"SQ_INST_LEVEL_LDS\",\n \"pipeline\": [\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Local Data Share)\"}}\n }},\n \n {\"$group\": {\n \"_id\": null,\n \"avg_ldsLatency\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"min_ldsLatency\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n },\n \"max_ldsLatency\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [\"&SQ_INSTS_LDS\", 0]},\n {\"$divide\": [ \"&SQ_ACCUM_PREV_HIRES\", \"&SQ_INSTS_LDS\" ]},\n null\n ] \n }\n }\n }},\n {\"$project\": {\n \"_id\": 0,\n \"metric\": \"LDS Latency\",\n \"avg\": \"&avg_ldsLatency\",\n \"min\": \"&min_ldsLatency\",\n \"max\": \"&max_ldsLatency\",\n \"Unit\": \"Cycles\"\n }}\n ]\n }}\n ]);", + "type": "table" + } + ], + "title": "LDS Stats", + "transformations": [ + { + "id": "concatenate", + "options": { + "frameNameLabel": "frame", + "frameNameMode": "field" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 8, + "avg 1": 1, + "avg 2": 2, + "max 1": 5, + "max 2": 6, + "metric 1": 0, + "metric 2": 7, + "min 1": 3, + "min 2": 4 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Local Data Share (LDS)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 44, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 48, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/.*/", + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_ICACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk, $numSQC]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n\n \"cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQC_ICACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\" ] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_ICACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk2, $numSQC2]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n\n \"cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [\"&SQC_ICACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Instruction Cache ", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "BW (Pct-of-Peak) 1": 4, + "BW (Pct-of-Peak) 2": 5, + "Cache Hit 1": 6, + "Cache Hit 2": 7, + "Stall 1": 2, + "Stall 2": 3, + "Util 1": 0, + "Util 2": 1 + }, + "renameByName": { + "BW (Pct-of-Peak) 1": "BW Pct-of-Peak (Current)", + "BW (Pct-of-Peak) 2": "BW Pct-of-Peak (Baseline)", + "BW Pct-of-Peak 1": "BW Pct-of-Peak (Current)", + "BW Pct-of-Peak 2": "BW Pct-of-Peak (Baseline)", + "Bandwidth 1": "Bandwidth (Current)", + "Bandwidth 2": "Bandwidth (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 259, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"min_req\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"max_req\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n\n \"avg_hits\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"min_hits\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"max_hits\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n\n \"avg_misses\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"min_misses\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"max_misses\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n\n \"avg_misses_dup\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"min_misses_dup\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"max_misses_dup\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"avg_cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"min_cacheHit\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"max_cacheHit\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&avg_req\",\n \"Min\": \"&min_req\",\n \"Max\": \"&max_req\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&avg_hits\",\n \"Min\": \"&min_hits\",\n \"Max\": \"&max_hits\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean\": \"&avg_misses\",\n \"Min\": \"&min_misses\",\n \"Max\": \"&max_misses\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Duplicated\",\n \"Mean\": \"&avg_misses_dup\",\n \"Min\": \"&min_misses_dup\",\n \"Max\": \"&max_misses_dup\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n \n {\n \"Metric\": \"Cache Hit\",\n \"Mean\": \"&avg_cacheHit\",\n \"Min\": \"&min_cacheHit\",\n \"Max\": \"&max_cacheHit\",\n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Instruction Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"avg_req\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"min_req\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n \"max_req\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_REQ\", \"&denom\"] }\n },\n\n \"avg_hits\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"min_hits\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n \"max_hits\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_HITS\", \"&denom\"] }\n },\n\n \"avg_misses\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"min_misses\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n \"max_misses\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES\", \"&denom\"] }\n },\n\n \"avg_misses_dup\": {\n \"$avg\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"min_misses_dup\": {\n \"$min\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"max_misses_dup\": {\n \"$max\": { \"$divide\": [\"&SQC_ICACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"avg_cacheHit\": {\n \"$avg\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"min_cacheHit\": {\n \"$min\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n },\n \"max_cacheHit\": {\n \"$max\": { \"$divide\": [{ \"$multiply\": [100, \"&SQC_ICACHE_HITS\"] }, { \"$add\": [\"&SQC_ICACHE_HITS\", \"&SQC_ICACHE_MISSES\", \"&SQC_ICACHE_MISSES_DUPLICATE\"] }] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean 2\": \"&avg_req\",\n \"Min 2\": \"&min_req\",\n \"Max 2\": \"&max_req\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean 2\": \"&avg_hits\",\n \"Min 2\": \"&min_hits\",\n \"Max 2\": \"&max_hits\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean 2\": \"&avg_misses\",\n \"Min 2\" : \"&min_misses\",\n \"Max 2\": \"&max_misses\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Duplicated\",\n \"Mean 2\": \"&avg_misses_dup\",\n \"Min 2\": \"&min_misses_dup\",\n \"Max 2\": \"&max_misses_dup\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean 2\": \"&avg_cacheHit\",\n \"Min 2\": \"&min_cacheHit\",\n \"Max 2\": \"&max_cacheHit\",\n \"Unit\": \"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Instruction Cache Accesses", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Max": 5, + "Max 2": 6, + "Mean": 1, + "Mean 2": 2, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "L1I Metric": "", + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Instruction Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 203, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "L1K-TC BW - GB/s" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 54, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_DCACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk, $numSQC]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n \"cacheHit\": {\n \"$avg\": { \n \"$cond\":[\n {\"$ne\": [{ \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0 ]},\n {\"$divide\": [{ \"$multiply\": [\"&SQC_DCACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } ]},\n null\n ]\n }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "sY628IJnz" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"reqBW_pop\": {\n \"$avg\": {\n \"$divide\": [\n {\"$multiply\": [\"&SQC_DCACHE_REQ\", 100000]}, \n {\"$multiply\": [ {\"$multiply\": [$sclk2, $numSQC2]}, {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} ]}\n ]\n }\n },\n \"cacheHit\": {\n \"$avg\": { \n \"$cond\":[\n {\"$ne\": [{ \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0 ]},\n {\"$divide\": [{ \"$multiply\": [\"&SQC_DCACHE_HITS\", 100] }, { \"$add\": [ \"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } ]},\n null\n ]\n }\n }\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Bandwidth\": \"&reqBW_pop\",\n \"Cache Hit\": \"&cacheHit\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Scalar L1D Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "BW Pct-of-Peak 1": 0, + "BW Pct-of-Peak 2": 1, + "Cache Hit 1": 2, + "Cache Hit 2": 3, + "Stall 1": 6, + "Stall 2": 7, + "Util 1": 4, + "Util 2": 5 + }, + "renameByName": { + "BW Pct-of-Peak 1": "BW Pct-of-Peak (Current)", + "BW Pct-of-Peak 2": "BW Pct-of-Peak (Baseline)", + "Bandwidth 1": "Bandwidth (Current)", + "Bandwidth 2": "Bandwidth (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Stall 1": "Stall (Current)", + "Stall 2": "Stall (Baseline)", + "Util 1": "Util (Current)", + "Util 2": "Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 261, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n\n \"hits_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n\n \"misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n \"misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n \"misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES\", \"&denom\"] }\n },\n\n \"dup_misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"cacheHit_avg\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_min\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_max\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n\n \"read1d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n\n \"read2d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n\n \"read4d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n\n \"read8d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n\n \"read16d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\": \"&req_min\",\n \"Max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\": \"&hits_min\",\n \"Max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean\": \"&misses_avg\",\n \"Min\": \"&misses_min\",\n \"Max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses- Duplicated\",\n \"Mean\": \"&dup_misses_avg\",\n \"Min\": \"&dup_misses_min\",\n \"Max\": \"&dup_misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean\": \"&cacheHit_avg\",\n \"Min\": \"&cacheHit_min\",\n \"Max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Read Req (Total)\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (1 DWord)\",\n \"Mean\": \"&read1d_avg\",\n \"Min\": \"&read1d_min\",\n \"Max\": \"&read1d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (2 DWord)\",\n \"Mean\": \"&read2d_avg\",\n \"Min\": \"&read2d_min\",\n \"Max\": \"&read2d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (4 DWord)\",\n \"Mean\": \"&read4d_avg\",\n \"Min\": \"&read4d_min\",\n \"Max\": \"&read4d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (8 DWord)\",\n \"Mean\": \"&read8d_avg\",\n \"Min\": \"&read8d_min\",\n \"Max\": \"&read8d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (16 DWord)\",\n \"Mean\": \"&read16d_avg\",\n \"Min\": \"&read16d_min\",\n \"Max\": \"&read16d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "bhNVuvBnk" + }, + "hide": false, + "rawQuery": true, + "refId": "pmc_perf2", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }}, \n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n \"req_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ\", \"&denom\"] }\n },\n\n \"hits_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n \"hits_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_HITS\", \"&denom\"] }\n },\n\n \"dup_misses_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n \"dup_misses_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_MISSES_DUPLICATE\", \"&denom\"] }\n },\n\n\n \"cacheHit_avg\": {\n \"$avg\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_min\": {\n \"$min\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n \"cacheHit_max\": {\n \"$max\": { \n \"$cond\": [\n {\"$ne\": [{ \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] } , 0]},\n { \"$divide\": [{ \"$multiply\": [100, \"&SQC_DCACHE_HITS\"] }, { \"$add\": [\"&SQC_DCACHE_HITS\", \"&SQC_DCACHE_MISSES\", \"&SQC_DCACHE_MISSES_DUPLICATE\"] }] },\n \"\"\n ]\n }\n },\n\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [{ \"$add\": [\"&SQC_DCACHE_REQ_READ_1\", \"&SQC_DCACHE_REQ_READ_2\", \"&SQC_DCACHE_REQ_READ_4\", \"&SQC_DCACHE_REQ_READ_8\", \"&SQC_DCACHE_REQ_READ_16\"] }, \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_ATOMIC\", \"&denom\"] }\n },\n\n\n \"read1d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n \"read1d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_1\", \"&denom\"] }\n },\n\n \"read2d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n \"read2d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_2\", \"&denom\"] }\n },\n\n \"read4d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n \"read4d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_4\", \"&denom\"] }\n },\n\n \"read8d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n \"read8d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_8\", \"&denom\"] }\n },\n\n \"read16d_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_min\": {\n \"$min\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n },\n \"read16d_max\": {\n \"$max\": { \"$divide\": [\"&SQC_DCACHE_REQ_READ_16\", \"&denom\"] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean 2\": \"&req_avg\",\n \"Min 2\": \"&req_min\",\n \"Max 2\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Hits\",\n \"Mean 2\": \"&hits_avg\",\n \"Min 2\": \"&hits_min\",\n \"Max 2\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses - Non Duplicated\",\n \"Mean 2\": \"&misses_avg\",\n \"Min 2\": \"&misses_min\",\n \"Max 2\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Misses- Duplicated\",\n \"Mean 2\": \"&dup_misses_avg\",\n \"Min 2\": \"&dup_misses_min\",\n \"Max 2\": \"&dup_misses_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Cache Hit\",\n \"Mean 2\": \"&cacheHit_avg\",\n \"Min 2\": \"&cacheHit_min\",\n \"Max 2\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"Metric\": \"Read Req (Total)\",\n \"Mean 2\": \"&readReq_avg\",\n \"Min 2\": \"&readReq_min\",\n \"Max 2\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req (Total)\",\n \"Mean 2\": \"&writeReq_avg\",\n \"Min 2\": \"&writeReq_min\",\n \"Max 2\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean 2\": \"&atomicReq_avg\",\n \"Min 2\": \"&atomicReq_min\",\n \"Max 2\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (1 DWord)\",\n \"Mean 2\": \"&read1d_avg\",\n \"Min 2\": \"&read1d_min\",\n \"Max 2\": \"&read1d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (2 DWord)\",\n \"Mean 2\": \"&read2d_avg\",\n \"Min 2\": \"&read2d_min\",\n \"Max 2\": \"&read2d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (4 DWord)\",\n \"Mean 2\": \"&read4d_avg\",\n \"Min 2\": \"&read4d_min\",\n \"Max 2\": \"&read4d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (8 DWord)\",\n \"Mean 2\": \"&read8d_avg\",\n \"Min 2\": \"&read8d_min\",\n \"Max 2\": \"&read8d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Read Req (16 DWord)\",\n \"Mean 2\": \"&read16d_avg\",\n \"Min 2\": \"&read16d_min\",\n \"Max 2\": \"&read16d_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Scalar L1D Cache Accesses", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Max": 5, + "Max 2": 6, + "Mean": 1, + "Mean 2": 2, + "Metric": 0, + "Min": 3, + "Min 2": 4, + "Unit": 7 + }, + "renameByName": { + "Max": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min": "Min (Current)", + "Min 2": "Min (Baseline)", + "Unit": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 105 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 134 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 52, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n\n \"writeReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n\n \"tc2l1k_stall_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n }\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read Req\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req\",\n \"Mean\": \"&writeReq_avg\",\n \"Min\": \"&writeReq_min\",\n \"Max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Stall\",\n \"Mean\": \"&tc2l1k_stall_avg\",\n \"Min\": \"&tc2l1k_stall_min\",\n \"Max\": \"&tc2l1k_stall_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}, \n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Scalar L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"readReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n \"readReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_READ_REQ\", \"&denom\"] }\n },\n\n \"writeReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n \"writeReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_WRITE_REQ\", \"&denom\"] }\n },\n\n \"atomicReq_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n \"atomicReq_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_DATA_ATOMIC_REQ\", \"&denom\"] }\n },\n\n \"tc2l1k_stall_avg\": {\n \"$avg\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_min\": {\n \"$min\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n },\n \"tc2l1k_stall_max\": {\n \"$max\": { \"$divide\": [\"&SQC_TC_STALL\", \"&denom\" ] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read Req\",\n \"Mean\": \"&readReq_avg\",\n \"Min\": \"&readReq_min\",\n \"Max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Write Req\",\n \"Mean\": \"&writeReq_avg\",\n \"Min\": \"&writeReq_min\",\n \"Max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Atomic Req\",\n \"Mean\": \"&atomicReq_avg\",\n \"Min\": \"&atomicReq_min\",\n \"Max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Stall\",\n \"Mean\": \"&tc2l1k_stall_avg\",\n \"Min\": \"&tc2l1k_stall_min\",\n \"Max\": \"&tc2l1k_stall_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "Scalar L1D Cache - L2 Interface", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Max 1": 7, + "Max 2": 8, + "Mean 1": 3, + "Mean 2": 4, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Scalar L1 Data Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 130, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 133 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 112 + } + ] + } + ] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 0, + "y": 14 + }, + "id": 132, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"taBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"taBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"taBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n\n \"tc2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"tc2ta_dataStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_dataStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2ta_dataStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"td2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"td2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"td2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"totalInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatWriteInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferWriteInstr_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"buffTotal_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleRead_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleWrite_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TA Busy\",\n \"avg\": \"&taBusy_avg\",\n \"min\": \"&taBusy_min\",\n \"max\": \"&taBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Addr Stall\",\n \"avg\": \"&tc2ta_addrStall_avg\",\n \"min\": \"&tc2ta_addrStall_min\",\n \"max\": \"&tc2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Data Stall\",\n \"avg\": \"&tc2ta_dataStall_avg\",\n \"min\": \"&tc2ta_dataStall_min\",\n \"max\": \"&tc2ta_dataStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TD2TA Addr Stall\",\n \"avg\": \"&td2ta_addrStall_avg\",\n \"min\": \"&td2ta_addrStall_min\",\n \"max\": \"&td2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Total Instructions\",\n \"avg\": \"&totalInstr_avg\",\n \"min\": \"&totalInstr_min\",\n \"max\": \"&totalInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Instr\",\n \"avg\": \"&flatInstr_avg\",\n \"min\": \"&flatInstr_min\",\n \"max\": \"&flatInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Read Instr\",\n \"avg\": \"&flatReadInstr_avg\",\n \"min\": \"&flatReadInstr_min\",\n \"max\": \"&flatReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Write Instr\",\n \"avg\": \"&flatWriteInstr_avg\",\n \"min\": \"&flatWriteInstr_min\",\n \"max\": \"&flatWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Atomic Instr\",\n \"avg\": \"&flatAtomicInstr_avg\",\n \"min\": \"&flatAtomicInstr_min\",\n \"max\": \"&flatAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Instr\",\n \"avg\": \"&bufferInstr_avg\",\n \"min\": \"&bufferInstr_min\",\n \"max\": \"&bufferInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Read Instr\",\n \"avg\": \"&bufferReadInstr_avg\",\n \"min\": \"&bufferReadInstr_min\",\n \"max\": \"&bufferReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Write Instr\",\n \"avg\": \"&bufferWriteInstr_avg\",\n \"min\": \"&bufferWriteInstr_min\",\n \"max\": \"&bufferWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Atomic Instr\",\n \"avg\": \"&bufferAtomicInstr_avg\",\n \"min\": \"&bufferAtomicInstr_min\",\n \"max\": \"&bufferAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Total Cylces\",\n \"avg\": \"&buffTotal_avg\",\n \"min\": \"&buffTotal_min\",\n \"max\": \"&buffTotal_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Read\",\n \"avg\": \"&buffCoscaleRead_avg\",\n \"min\": \"&buffCoscaleRead_min\",\n \"max\": \"&buffCoscaleRead_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Write\",\n \"avg\": \"&buffCoscaleWrite_avg\",\n \"min\": \"&buffCoscaleWrite_min\",\n \"max\": \"&buffCoscaleWrite_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Texture Addr and Data)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"taBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"taBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"taBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TA_TA_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n\n \"tc2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"tc2ta_dataStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_dataStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2ta_dataStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_DATA_STALLED_BY_TC_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"td2ta_addrStall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"td2ta_addrStall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"td2ta_addrStall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TA_ADDR_STALLED_BY_TD_CYCLES_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"totalInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n \"totalInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_TOTAL_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n \"flatInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WAVEFRONTS_sum\", \"&denom\"] }},\n\n \"flatReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatWriteInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatWriteInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"flatAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"flatAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_FLAT_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferReadInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferReadInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_READ_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferWriteInstr_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferWriteInstr_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_WRITE_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"bufferAtomicInstr_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n \"bufferAtomicInstr_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_ATOMIC_WAVEFRONTS_sum\", \"&denom\"]}},\n\n \"buffTotal_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n \"buffTotal_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_TOTAL_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleRead_avg\":{\"$avg\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_min\":{\"$min\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleRead_max\":{\"$max\": {\"$divide\": [ \"&TA_BUFFER_COALESCED_READ_CYCLES_sum\", \"&denom\"] }},\n\n \"buffCoscaleWrite_avg\":{\"$avg\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_min\":{\"$min\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }},\n \"buffCoscaleWrite_max\":{\"$max\": { \"$divide\": [ \"&TA_BUFFER_COALESCED_WRITE_CYCLES_sum\", \"&denom\"] }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TA Busy\",\n \"avg\": \"&taBusy_avg\",\n \"min\": \"&taBusy_min\",\n \"max\": \"&taBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Addr Stall\",\n \"avg\": \"&tc2ta_addrStall_avg\",\n \"min\": \"&tc2ta_addrStall_min\",\n \"max\": \"&tc2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TA Data Stall\",\n \"avg\": \"&tc2ta_dataStall_avg\",\n \"min\": \"&tc2ta_dataStall_min\",\n \"max\": \"&tc2ta_dataStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TD2TA Addr Stall\",\n \"avg\": \"&td2ta_addrStall_avg\",\n \"min\": \"&td2ta_addrStall_min\",\n \"max\": \"&td2ta_addrStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Total Instructions\",\n \"avg\": \"&totalInstr_avg\",\n \"min\": \"&totalInstr_min\",\n \"max\": \"&totalInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Instr\",\n \"avg\": \"&flatInstr_avg\",\n \"min\": \"&flatInstr_min\",\n \"max\": \"&flatInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Read Instr\",\n \"avg\": \"&flatReadInstr_avg\",\n \"min\": \"&flatReadInstr_min\",\n \"max\": \"&flatReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Write Instr\",\n \"avg\": \"&flatWriteInstr_avg\",\n \"min\": \"&flatWriteInstr_min\",\n \"max\": \"&flatWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Flat Atomic Instr\",\n \"avg\": \"&flatAtomicInstr_avg\",\n \"min\": \"&flatAtomicInstr_min\",\n \"max\": \"&flatAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Instr\",\n \"avg\": \"&bufferInstr_avg\",\n \"min\": \"&bufferInstr_min\",\n \"max\": \"&bufferInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Read Instr\",\n \"avg\": \"&bufferReadInstr_avg\",\n \"min\": \"&bufferReadInstr_min\",\n \"max\": \"&bufferReadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Write Instr\",\n \"avg\": \"&bufferWriteInstr_avg\",\n \"min\": \"&bufferWriteInstr_min\",\n \"max\": \"&bufferWriteInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Atomic Instr\",\n \"avg\": \"&bufferAtomicInstr_avg\",\n \"min\": \"&bufferAtomicInstr_min\",\n \"max\": \"&bufferAtomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Total Cylces\",\n \"avg\": \"&buffTotal_avg\",\n \"min\": \"&buffTotal_min\",\n \"max\": \"&buffTotal_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Read\",\n \"avg\": \"&buffCoscaleRead_avg\",\n \"min\": \"&buffCoscaleRead_min\",\n \"max\": \"&buffCoscaleRead_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n },\n {\n \"metric\": \"Buffer Coalesced Write\",\n \"avg\": \"&buffCoscaleWrite_avg\",\n \"min\": \"&buffCoscaleWrite_min\",\n \"max\": \"&buffCoscaleWrite_max\",\n \"Unit\": {\"$concat\": [\"Cycles \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "TA", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 124 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 130 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + } + ] + }, + "gridPos": { + "h": 17, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 134, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"tdBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"tdBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n \"tdBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}] }},\n\n \"tc2tdStall_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2tdStall_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"tc2tdStall_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"spi2td_stall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"spi2td_stall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n \"spi2td_stall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU]}]}},\n\n \"coscaleInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_min\":{\"$min\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_max\":{\"$max\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n\n \"loadInstr_avg\":{\"$avg\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_min\":{\"$min\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_max\":{\"$max\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n\n \"storeInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_min\":{\"$min\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_max\":{\"$max\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n\n \"atomicInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_min\":{\"$min\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_max\":{\"$max\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TD Busy\",\n \"avg\": \"&tdBusy_avg\",\n \"min\": \"&tdBusy_min\",\n \"max\": \"&tdBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TD Stall\",\n \"avg\": \"&tc2tdStall_avg\",\n \"min\": \"&tc2tdStall_min\",\n \"max\": \"&tc2tdStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"SPI2TD Stall\",\n \"avg\": \"&spi2td_stall_avg\",\n \"min\": \"&spi2td_stall_min\",\n \"max\": \"&spi2td_stall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Coalescable Instr\",\n \"avg\": \"&coscaleInstr_avg\",\n \"min\": \"&coscaleInstr_min\",\n \"max\": \"&coscaleInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Load Instr\",\n \"avg\": \"&loadInstr_avg\",\n \"min\": \"&loadInstr_min\",\n \"max\": \"&loadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Store Instr\",\n \"avg\": \"&storeInstr_avg\",\n \"min\": \"&storeInstr_min\",\n \"max\": \"&storeInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Instr\",\n \"avg\": \"&atomicInstr_avg\",\n \"min\": \"&atomicInstr_min\",\n \"max\": \"&atomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Texture Addr and Data)\"}}\n }},\n {\"$addFields\": {\n \n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"tdBusy_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"tdBusy_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n \"tdBusy_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TD_BUSY_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}] }},\n\n \"tc2tdStall_avg\":{\"$avg\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2tdStall_min\":{\"$min\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"tc2tdStall_max\":{\"$max\": { \"$divide\": [ { \"$multiply\": [100, \"&TD_TC_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"spi2td_stall_avg\":{\"$avg\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"spi2td_stall_min\":{\"$min\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n \"spi2td_stall_max\":{\"$max\": {\"$divide\": [ { \"$multiply\": [100, \"&TD_SPI_STALL_sum\"] }, { \"$multiply\": [\"&GRBM_GUI_ACTIVE\", $numCU2]}]}},\n\n \"coscaleInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_min\":{\"$min\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n \"coscaleInstr_max\":{\"$max\": {\"$divide\": [\"&TD_COALESCABLE_WAVEFRONT_sum\", \"&denom\"] }},\n\n \"loadInstr_avg\":{\"$avg\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_min\":{\"$min\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n \"loadInstr_max\":{\"$max\": {\"$divide\": [{ \"$subtract\": [{ \"$subtract\": [\"&TD_LOAD_WAVEFRONT_sum\", \"&TD_STORE_WAVEFRONT_sum\"]}, \"&TD_ATOMIC_WAVEFRONT_sum\"] }, \"&denom\" ] }},\n\n \"storeInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_min\":{\"$min\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n \"storeInstr_max\":{\"$max\": {\"$divide\": [\"&TD_STORE_WAVEFRONT_sum\", \"&denom\" ] }},\n\n \"atomicInstr_avg\":{\"$avg\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_min\":{\"$min\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}},\n \"atomicInstr_max\":{\"$max\": {\"$divide\": [\"&TD_ATOMIC_WAVEFRONT_sum\", \"&denom\" ]}}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"TD Busy\",\n \"avg\": \"&tdBusy_avg\",\n \"min\": \"&tdBusy_min\",\n \"max\": \"&tdBusy_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"TC2TD Stall\",\n \"avg\": \"&tc2tdStall_avg\",\n \"min\": \"&tc2tdStall_min\",\n \"max\": \"&tc2tdStall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"SPI2TD Stall\",\n \"avg\": \"&spi2td_stall_avg\",\n \"min\": \"&spi2td_stall_min\",\n \"max\": \"&spi2td_stall_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Coalescable Instr\",\n \"avg\": \"&coscaleInstr_avg\",\n \"min\": \"&coscaleInstr_min\",\n \"max\": \"&coscaleInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Load Instr\",\n \"avg\": \"&loadInstr_avg\",\n \"min\": \"&loadInstr_min\",\n \"max\": \"&loadInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Store Instr\",\n \"avg\": \"&storeInstr_avg\",\n \"min\": \"&storeInstr_min\",\n \"max\": \"&storeInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Instr\",\n \"avg\": \"&atomicInstr_avg\",\n \"min\": \"&atomicInstr_min\",\n \"max\": \"&atomicInstr_max\",\n \"Unit\": {\"$concat\": [\"Instr \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n ]);", + "type": "table" + } + ], + "title": "TD", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Texture Addresser and Texture Data (TA/TD)", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 112, + "panels": [ + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 165, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"bufferCoalescing_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n null\n ]\n }\n },\n \"cacheUtil_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TCP_GATE_EN2_sum\", 100]}, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }\n },\n \n \"cacheBW_pct\": {\n \"$avg\": { \"$divide\": [ {\"$multiply\":[64, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"]}, \n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} \n ] \n }\n },\n \"cacheHit_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]\n }] \n },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Buffer Coalescing\": \"&bufferCoalescing_pct\",\n \"Cache Util\": \"&cacheUtil_pct\",\n \"Cache BW\": { \"$divide\": [{ \"$multiply\": [100, \"&cacheBW_pct\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk, 1000] }, 64] }, $numCU]}] },\n \"Cache Hit\": \"&cacheHit_pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"bufferCoalescing_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_ACCESSES_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TA_TOTAL_WAVEFRONTS_sum\", 64, 100]}, {\"$multiply\": [\"&TCP_TOTAL_ACCESSES_sum\", 4]}] },\n null\n ]\n }\n },\n \"cacheUtil_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0] },\n { \"$divide\": [{\"$multiply\": [\"&TCP_GATE_EN2_sum\", 100]}, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }\n },\n \"cacheBW_pct\": {\n \"$avg\": { \"$divide\": [ {\"$multiply\":[64, \"&TCP_TOTAL_CACHE_ACCESSES_sum\"]}, \n {\"$subtract\":[\"&EndNs\", \"&BeginNs\"]} \n ] \n }\n },\n \"cacheHit_pct\": {\n \"$avg\": {\n \"$cond\": [ {\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0] },\n { \"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]\n }] \n },\n null\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Buffer Coalescing\": \"&bufferCoalescing_pct\",\n \"Cache Util\": \"&cacheUtil_pct\",\n \"Cache BW\": { \"$divide\": [{ \"$multiply\": [100, \"&cacheBW_pct\"] }, { \"$multiply\": [ { \"$multiply\": [{ \"$divide\": [$sclk2, 1000] }, 64] }, $numCU2]}] },\n \"Cache Hit\": \"&cacheHit_pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: Vector L1D Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "128B Read Combining 1": 6, + "128B Read Combining 2": 7, + "Buffer Coalescing 1": 0, + "Buffer Coalescing 2": 1, + "Cache BW 1": 2, + "Cache BW 2": 3, + "Cache Hit 1": 4, + "Cache Hit 2": 5 + }, + "renameByName": { + "128B Read Combining 1": "128B Read Combining (Current)", + "128B Read Combining 2": "128B Read Combining(Baseline)", + "Buffer Coalescing 1": "Buf Coalescing (Current)", + "Buffer Coalescing 2": "Buf Coalescing (Baseline)", + "Cache BW 1": "Cache BW (Current)", + "Cache BW 2": "Cache BW (Baseline)", + "Cache Hit 1": "Cache Hit (Current)", + "Cache Hit 2": "Cache Hit (Baseline)", + "Cache Util 1": "Cache Util (Current)", + "Cache Util 2": "Cache Util (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "color-background" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "transparent" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 52 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 199 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 144 + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 116, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"l2Pending_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n\n\n \"tcr2tcp_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \"readTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \n \"writeTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \n \"atomicTagRam_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }} \n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Stalled on L2 Data\",\n \"Mean\": \"&l2Pending_avg\",\n \"Min\": \"&l2Pending_min\",\n \"Max\": \"&l2Pending_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Stalled on L2 Req\",\n \"Mean\": \"&tcr2tcp_Stall_avg\",\n \"Min\":\"&tcr2tcp_Stall_min\",\n \"Max\":\"&tcr2tcp_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Read)\",\n \"Mean\": \"&readTagRam_Stall_avg\",\n \"Min\": \"&readTagRam_Stall_min\",\n \"Max\": \"&readTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Write)\",\n \"Mean\": \"&writeTagRam_Stall_avg\",\n \"Min\": \"&writeTagRam_Stall_min\",\n \"Max\": \"&writeTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Atomic)\",\n \"Mean\": \"&atomicTagRam_Stall_avg\",\n \"Min\": \"&atomicTagRam_Stall_min\",\n \"Max\": \"&atomicTagRam_Stall_max\",\n \"unit\":\"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$group\": {\n \"_id\": null,\n\n \"l2Pending_avg\": {\"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_min\": {\"$min\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"l2Pending_max\": {\"$max\": {\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_PENDING_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n\n \"tcr2tcp_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"tcr2tcp_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_TCR_TCP_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \"readTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \"readTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_READ_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"]},\n null\n ]\n }},\n \n \"writeTagRam_Stall_avg\": {\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_min\": {\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \"writeTagRam_Stall_max\": {\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_WRITE_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }},\n \n \n \"atomicTagRam_Stall_avg\":{\"$avg\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_min\":{\"$min\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }}, \n \"atomicTagRam_Stall_max\":{\"$max\":{\n \"$cond\":[\n {\"$ne\": [\"&TCP_GATE_EN1_sum\", 0]}, \n {\"$divide\": [ { \"$multiply\": [100, \"&TCP_ATOMIC_TAGCONFLICT_STALL_CYCLES_sum\"] }, \"&TCP_GATE_EN1_sum\"] },\n null\n ]\n }} \n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Stalled on L2 Data\",\n \"Mean\": \"&l2Pending_avg\",\n \"Min\": \"&l2Pending_min\",\n \"Max\": \"&l2Pending_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Stalled on L2 Req\",\n \"Mean\": \"&tcr2tcp_Stall_avg\",\n \"Min\":\"&tcr2tcp_Stall_min\",\n \"Max\":\"&tcr2tcp_Stall_max\",\n \"unit\":\"pct\"\n },\n\n {\n \"Metric\": \"Tag RAM Stall (Read)\",\n \"Mean\": \"&readTagRam_Stall_avg\",\n \"Min\": \"&readTagRam_Stall_min\",\n \"Max\": \"&readTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Write)\",\n \"Mean\": \"&writeTagRam_Stall_avg\",\n \"Min\": \"&writeTagRam_Stall_min\",\n \"Max\": \"&writeTagRam_Stall_max\",\n \"unit\":\"pct\"\n },\n {\n \"Metric\": \"Tag RAM Stall (Atomic)\",\n \"Mean\": \"&atomicTagRam_Stall_avg\",\n \"Min\": \"&atomicTagRam_Stall_min\",\n \"Max\": \"&atomicTagRam_Stall_max\",\n \"unit\":\"pct\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Cache Stalls", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Units 2": true, + "unit 2": true + }, + "indexByName": { + "Max 1": 6, + "Max 2": 7, + "Mean 1": 2, + "Mean 2": 3, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 4, + "Min 2": 5, + "unit 1": 9, + "unit 2": 8 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)", + "unit 1": "Unit" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 116 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 139 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 50 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "max" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 111 + } + ] + } + ] + }, + "gridPos": { + "h": 18, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 128, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n\n \"totalReq_avg\":{\"$avg\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_min\":{\"$min\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_max\":{\"$max\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n\n \"cacheBW_avg\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_min\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_max\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \n \"cacheAccess_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n\n \"cacheHits_avg\":{\"$avg\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_min\":{\"$min\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_max\":{\"$max\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \n \"cacheHitRate_avg\":{\"$avg\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_min\":{\"$min\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_max\":{\"$max\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \n \"l2_l1_read_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n\n \"l2_l1_write_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n\n\n \"l2_l1_atomic_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n\n \"l2_l1_bw_avg\":{\"$avg\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_min\":{\"$min\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_max\":{\"$max\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n\n \"invalidate_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n\n\n \"l1Latency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n\n\n \"l2ReadLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n\n \"l2WriteLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }}\n\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Total Req\",\n \"avg\": \"&totalReq_avg\",\n \"min\": \"&totalReq_min\",\n \"max\": \"&totalReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache BW\",\n \"avg\": \"&cacheBW_avg\",\n \"min\": \"&cacheBW_min\",\n \"max\": \"&cacheBW_max\",\n \"Unit\": \"GB/s\"\n },\n {\n \"metric\": \"Cache Accesses\",\n \"avg\": \"&cacheAccess_avg\",\n \"min\": \"&cacheAccess_min\",\n \"max\": \"&cacheAccess_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hits\",\n \"avg\": \"&cacheHits_avg\",\n \"min\": \"&cacheHits_min\",\n \"max\": \"&cacheHits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit Rate\",\n \"avg\": \"&cacheHitRate_avg\",\n \"min\": \"&cacheHitRate_min\",\n \"max\": \"&cacheHitRate_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Invalidate\",\n \"avg\": \"&invalidate_avg\",\n \"min\": \"&invalidate_min\",\n \"max\": \"&invalidate_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 BW\",\n \"avg\": \"&l2_l1_bw_avg\",\n \"min\": \"&l2_l1_bw_avg\",\n \"max\": \"&l2_l1_bw_avg\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Read\",\n \"avg\": \"&l2_l1_read_avg\",\n \"min\": \"&l2_l1_read_min\",\n \"max\": \"&l2_l1_read_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Write\",\n \"avg\": \"&l2_l1_write_avg\",\n \"min\": \"&l2_l1_write_min\",\n \"max\": \"&l2_l1_write_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Atomic\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1 Access Latency\",\n \"avg\": \"&l1Latency_avg\",\n \"min\": \"&l1Latency_min\",\n \"max\": \"&l1Latency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Read Latency\",\n \"avg\": \"&l2ReadLatency_avg\",\n \"min\": \"&l2ReadLatency_min\",\n \"max\": \"&l2ReadLatency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Write Latency\",\n \"avg\": \"&l2WriteLatency_avg\",\n \"min\": \"&l2WriteLatency_min\",\n \"max\": \"&l2WriteLatency_max\",\n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n\n \"totalReq_avg\":{\"$avg\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_min\":{\"$min\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n \"totalReq_max\":{\"$max\": { \"$divide\": [ \"&TCP_TOTAL_ACCESSES_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TOTAL_ATOMIC_WITH_RET_sum\", \"&TCP_TOTAL_ATOMIC_WITHOUT_RET_sum\"] }, \"&denom\"]}},\n\n \"cacheBW_avg\":{\"$avg\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_min\":{\"$min\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \"cacheBW_max\":{\"$max\": { \"$divide\": [{ \"$multiply\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 64 ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }},\n \n \"cacheAccess_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n \"cacheAccess_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \"&denom\"]}},\n\n \"cacheHits_avg\":{\"$avg\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_min\":{\"$min\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \"cacheHits_max\":{\"$max\": {\"$divide\": [ \n { \"$subtract\": [\n \"&TCP_TOTAL_CACHE_ACCESSES_sum\", \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}\n ]}, \n \"&denom\"\n ]}\n },\n \n \"cacheHitRate_avg\":{\"$avg\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_min\":{\"$min\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n \"cacheHitRate_max\":{\"$max\": {\n \"$cond\": [{\"$ne\": [\"&TCP_TOTAL_CACHE_ACCESSES_sum\", 0]}, \n {\"$subtract\": [100, \n { \"$divide\": [ \n { \"$multiply\": [100, \n { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }\n ] \n }, \n \"&TCP_TOTAL_CACHE_ACCESSES_sum\"\n ]}\n ]},\n null\n ]\n }},\n\n \"l2_l1_read_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n \"l2_l1_read_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_READ_REQ_sum\", \"&denom\"]}},\n\n \"l2_l1_write_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n \"l2_l1_write_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_sum\", \"&denom\"] }},\n\n\n \"l2_l1_atomic_avg\":{\"$avg\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_min\":{\"$min\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n \"l2_l1_atomic_max\":{\"$max\": {\"$divide\": [ { \"$add\": [\"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }, \"&denom\"] }},\n\n \"l2_l1_bw_avg\":{\"$avg\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_min\":{\"$min\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n \"l2_l1_bw_max\":{\"$max\": {\"$divide\": [{\"$multiply\": [64, {\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] } ]}, \"&denom\" ]}},\n\n \"invalidate_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_min\":{\"$min\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n \"invalidate_max\":{\"$max\": {\"$divide\": [ \"&TCP_TOTAL_WRITEBACK_INVALIDATES_sum\", \"&denom\"] }},\n\n\n \"l1Latency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n \"l1Latency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_TA_TCP_STATE_READ_sum\", 0]},\n {\"$divide\": [ \"&TCP_TCP_LATENCY_sum\", \"&TCP_TA_TCP_STATE_READ_sum\" ]},\n null\n ] \n }},\n\n\n \"l2ReadLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n \"l2ReadLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_READ_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_READ_REQ_sum\", \"&TCP_TCC_ATOMIC_WITH_RET_REQ_sum\"] }]},\n null\n ] \n }},\n\n \"l2WriteLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }},\n \"l2WriteLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{\"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"]}, 0]},\n {\"$divide\": [ \"&TCP_TCC_WRITE_REQ_LATENCY_sum\", { \"$add\": [\"&TCP_TCC_WRITE_REQ_sum\", \"&TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum\"] }]},\n null\n ]\n }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Total Req\",\n \"avg\": \"&totalReq_avg\",\n \"min\": \"&totalReq_min\",\n \"max\": \"&totalReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache BW\",\n \"avg\": \"&cacheBW_avg\",\n \"min\": \"&cacheBW_min\",\n \"max\": \"&cacheBW_max\",\n \"Unit\": \"GB/s\"\n },\n {\n \"metric\": \"Cache Accesses\",\n \"avg\": \"&cacheAccess_avg\",\n \"min\": \"&cacheAccess_min\",\n \"max\": \"&cacheAccess_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hits\",\n \"avg\": \"&cacheHits_avg\",\n \"min\": \"&cacheHits_min\",\n \"max\": \"&cacheHits_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit Rate\",\n \"avg\": \"&cacheHitRate_avg\",\n \"min\": \"&cacheHitRate_min\",\n \"max\": \"&cacheHitRate_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Invalidate\",\n \"avg\": \"&invalidate_avg\",\n \"min\": \"&invalidate_min\",\n \"max\": \"&invalidate_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 BW\",\n \"avg\": \"&l2_l1_bw_avg\",\n \"min\": \"&l2_l1_bw_avg\",\n \"max\": \"&l2_l1_bw_avg\",\n \"Unit\": {\"$concat\": [\"Bytes \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Read\",\n \"avg\": \"&l2_l1_read_avg\",\n \"min\": \"&l2_l1_read_min\",\n \"max\": \"&l2_l1_read_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Write\",\n \"avg\": \"&l2_l1_write_avg\",\n \"min\": \"&l2_l1_write_min\",\n \"max\": \"&l2_l1_write_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1-L2 Atomic\",\n \"avg\": \"&l2_l1_atomic_avg\",\n \"min\": \"&l2_l1_atomic_min\",\n \"max\": \"&l2_l1_atomic_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"L1 Access Latency\",\n \"avg\": \"&l1Latency_avg\",\n \"min\": \"&l1Latency_min\",\n \"max\": \"&l1Latency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Read Latency\",\n \"avg\": \"&l2ReadLatency_avg\",\n \"min\": \"&l2ReadLatency_min\",\n \"max\": \"&l2ReadLatency_max\",\n \"Unit\": \"Cycles\"\n },\n {\n \"metric\": \"L1-L2 Write Latency\",\n \"avg\": \"&l2WriteLatency_avg\",\n \"min\": \"&l2WriteLatency_min\",\n \"max\": \"&l2WriteLatency_max\",\n \"Unit\": \"Cycles\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Cache Accesses", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 8, + "avg 1": 1, + "avg 2": 2, + "max 1": 5, + "max 2": 6, + "metric 1": 0, + "metric 2": 7, + "min 1": 3, + "min 2": 4 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "Aggregate": "last", + "BarPadding": 30, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "Coherency", + "GroupCols": 2, + "GroupGap": 5, + "GroupLabelColor": "#FF9830", + "GroupLabelFontSize": "100%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": true, + "LabelColName": "Xfer", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 0, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#FADE2A", + "ValueDecimals": 0, + "ValueFontSize": "100%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:172", + "Col": 2, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Mean", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 120, + "pluginVersion": "8.2.1", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "tlh8EwUnk" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n\n \"readNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \"readRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_READ_REQ_sum\", \"&denom\"] }\n },\n \n \"writeNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \"writeRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_WRITE_REQ_sum\", \"&denom\"] }\n },\n \n \"atomicNC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicNC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicNC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_NC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicUC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_UC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicCC_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_CC_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_avg\": {\n \"$avg\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_min\": {\n \"$min\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n },\n \"atomicRW_max\": {\n \"$max\": { \"$divide\": [\"&TCP_TCC_RW_ATOMIC_REQ_sum\", \"&denom\"] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"NC\",\n \"Avg\": \"&readNC_avg\",\n \"Min\": \"&readNC_min\",\n \"Max\": \"&readNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"UC\",\n \"Avg\": \"&readUC_avg\",\n \"Min\": \"&readUC_min\",\n \"Max\": \"&readUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"CC\",\n \"Avg\": \"&readCC_avg\",\n \"Min\": \"&readCC_min\",\n \"Max\": \"&readCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Read\",\n \"Coherency\": \"RW\",\n \"Avg\": \"&readRW_avg\",\n \"Min\": \"&readRW_min\",\n \"Max\": \"&readRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"RW\",\n \"Avg\": \"&writeRW_avg\",\n \"Min\": \"&writeRW_min\",\n \"Max\": \"&writeRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"NC\",\n \"Avg\": \"&writeNC_avg\",\n \"Min\": \"&writeNC_min\",\n \"Max\": \"&writeNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"UC\",\n \"Avg\": \"&writeUC_avg\",\n \"Min\": \"&writeUC_min\",\n \"Max\": \"&writeUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Write\",\n \"Coherency\": \"CC\",\n \"Avg\": \"&writeCC_avg\",\n \"Min\": \"&writeCC_min\",\n \"Max\": \"&writeCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"NC\",\n \"Avg\": \"&atomicNC_avg\",\n \"Min\": \"&atomicNC_min\",\n \"Max\": \"&atomicNC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"UC\",\n \"Avg\": \"&atomicUC_avg\",\n \"Min\": \"&atomicUC_min\",\n \"Max\": \"&atomicUC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"CC\",\n \"Avg\": \"&atomicCC_avg\",\n \"Min\": \"&atomicCC_min\",\n \"Max\": \"&atomicCC_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Xfer\": \"Atomic\",\n \"Coherency\": \"RW\",\n \"Avg\": \"&atomicRW_avg\",\n \"Min\": \"&atomicRW_min\",\n \"Max\": \"&atomicRW_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D - L2 Transactions Req $normUnit", + "transparent": true, + "type": "michaeldmoore-multistat-panel" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Units" + }, + "properties": [ + { + "id": "custom.width", + "value": 75 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 124, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n\n\n \"hitRatio_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n\n \"hits_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n\n \"missesTrans_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n\n \"missesPermis_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\":\"&req_min\",\n \"Max\":\"&req_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Hit Ratio\",\n \"Mean\": \"&hitRatio_avg\",\n \"Min\":\"&hitRatio_min\",\n \"Max\":\"&hitRatio_max\",\n \"Units\":\"pct\"\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\":\"&hits_min\",\n \"Max\":\"&hits_max\",\n \"Units\":{ \"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Translation)\",\n \"Mean\": \"&missesTrans_avg\",\n \"Min\":\"&missesTrans_min\",\n \"Max\":\"&missesTrans_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Permission)\",\n \"Mean\": \"&missesPermis_avg\",\n \"Min\":\"&missesPermis_min\",\n \"Max\":\"&missesPermis_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(Vector L1D Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_REQUEST_sum\" ,\"&denom\"] }},\n\n\n \"hitRatio_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n \"hitRatio_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCP_UTCL1_REQUEST_sum\", 0]},\n {\"$divide\": [{ \"$multiply\": [100, \"&TCP_UTCL1_TRANSLATION_HIT_sum\"] },\"&TCP_UTCL1_REQUEST_sum\"]},\n null\n ]\n }},\n\n \"hits_avg\":{\"$avg\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_min\":{\"$min\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n \"hits_max\":{\"$max\": { \"$divide\": [\"&TCP_UTCL1_TRANSLATION_HIT_sum\" ,\"&denom\"] }},\n\n \"missesTrans_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n \"missesTrans_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_TRANSLATION_MISS_sum\" ,\"&denom\"] }},\n\n \"missesPermis_avg\":{\"$avg\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_min\":{\"$min\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }},\n \"missesPermis_max\":{\"$max\": {\"$divide\": [\"&TCP_UTCL1_PERMISSION_MISS_sum\" ,\"&denom\"] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Req\",\n \"Mean\": \"&req_avg\",\n \"Min\":\"&req_min\",\n \"Max\":\"&req_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Hit Ratio\",\n \"Mean\": \"&hitRatio_avg\",\n \"Min\":\"&hitRatio_min\",\n \"Max\":\"&hitRatio_max\",\n \"Units\":\"pct\"\n },\n {\n \"Metric\": \"Hits\",\n \"Mean\": \"&hits_avg\",\n \"Min\":\"&hits_min\",\n \"Max\":\"&hits_max\",\n \"Units\":{ \"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Translation)\",\n \"Mean\": \"&missesTrans_avg\",\n \"Min\":\"&missesTrans_min\",\n \"Max\":\"&missesTrans_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n },\n {\n \"Metric\": \"Misses (Permission)\",\n \"Mean\": \"&missesPermis_avg\",\n \"Min\":\"&missesPermis_min\",\n \"Max\":\"&missesPermis_max\",\n \"Units\":{\"$concat\": [\"\", $normUnit] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Vector L1D Addr Translation", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Units 2": true + }, + "indexByName": { + "Max 1": 7, + "Max 2": 8, + "Mean 1": 3, + "Mean 2": 4, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Units 1": 9, + "Units 2": 2 + }, + "renameByName": { + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Mean 1": "Avg (Current)", + "Mean 2": "Avg (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "Vector L1 Data Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 56, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW - GB/s" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW " + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + }, + { + "id": "color" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2 Util" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + } + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache Hit" + }, + "properties": [ + { + "id": "max", + "value": 100 + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 90 + } + ] + } + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Wr BW" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "L2-EA Rd BW" + }, + "properties": [ + { + "id": "unit", + "value": "GBs" + }, + { + "id": "max", + "value": 1638 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 64, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": { + "titleSize": 14, + "valueSize": 16 + } + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n{\"$group\": {\n \"_id\": null,\n \"L2Util\": {\n \"$avg\": { \n \n \"$divide\": [\n {\"$multiply\": [\"&TCC_BUSY_sum\", 100]},\n {\"$multiply\": [{\"$toInt\":\"$L2Banks\"}, \"&GRBM_GUI_ACTIVE\"] }\n ] \n } \n },\n\n \"cacheHit\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n 0\n ] \n }},\n\n \"l2eaRdBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \n \"l2eaWrBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"L2 Util\": \"&L2Util\",\n \"Cache Hit\": \"&cacheHit\",\n \"L2-EA Rd BW\": \"&l2eaRdBW\",\n \"L2-EA Wr BW\": \"&l2eaWrBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n\n{\"$group\": {\n \"_id\": null,\n \"L2Util\": {\n \"$avg\": { \n \"$divide\": [\n {\"$multiply\": [\"&TCC_BUSY_sum\", 100]},\n {\"$multiply\": [{\"$toInt\":\"$L2Banks2\"}, \"&GRBM_GUI_ACTIVE\"] }\n ] \n } \n },\n\n \"cacheHit\": {\n \"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n 0\n ] \n }},\n\n \"l2eaRdBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n },\n \n \"l2eaWrBW\": {\n \"$avg\": { \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, { \"$subtract\": [\"&EndNs\", \"&BeginNs\"] } ] }\n }\n }\n },\n {\"$set\": {\n \"array\": [\n {\n \"L2 Util\": \"&L2Util\",\n \"Cache Hit\": \"&cacheHit\",\n \"L2-EA Rd BW\": \"&l2eaRdBW\",\n \"L2-EA Wr BW\": \"&l2eaWrBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "Speed-of-Light: L2 Cache", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Cache Hit 1": 2, + "Cache Hit 2": 3, + "L2 Util 1": 0, + "L2 Util 2": 1, + "L2-EA Rd BW 1": 4, + "L2-EA Rd BW 2": 5, + "L2-EA Wr BW 1": 6, + "L2-EA Wr BW 2": 7 + }, + "renameByName": { + "Cache Hit 1": "L2 Cache Hit (Current)", + "Cache Hit 2": "L2 Cache Hit (Baseline)", + "L2 Util 1": "L2 Util (Current)", + "L2 Util 2": "L2 Util (Baseline)", + "L2-EA Rd BW - GB/s 1": "L2-EA RD BW (Current)", + "L2-EA Rd BW - GB/s 2": "L2-EA RD BW (baseline)", + "L2-EA Rd BW 1": "L2-EA Rd BW (Current)", + "L2-EA Rd BW 2": "L2-EA Rd BW (Baseline)", + "L2-EA Wr BW - GB/s 1": "L2-EA WR BW (Current)", + "L2-EA Wr BW - GB/s 2": "L2-EA WR BW (Baseline)", + "L2-EA Wr BW 1": "L2-EA Wr BW (Current)", + "L2-EA Wr BW 2": "L2-EA Wr BW (Baseline)" + } + } + } + ], + "transparent": true, + "type": "bargauge" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 106 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 114 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 148 + } + ] + } + ] + }, + "gridPos": { + "h": 16, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 62, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": \"null\",\n \"readStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"writeStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \n \"readBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n\n \"writeBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n\n \"read32_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n\n \"read32Uncached_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"read64_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n\n \"hbmRead_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"write32_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n\n \"write32Uncached_avg\": {\"$avg\":{\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"write64_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n\n \"hbmWrite_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"readLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n\n \"writeLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n\n \"atomicOpLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read BW\",\n \"Avg\": \"&readBW_avg\",\n \"Min\":\"&readBW_min\",\n \"Max\":\"&readBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Write BW\",\n \"Avg\": \"&writeBW_avg\",\n \"Min\":\"&writeBW_min\",\n \"Max\":\"&writeBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Read (32B)\",\n \"Avg\": \"&read32_avg\",\n \"Min\":\"&read32_min\",\n \"Max\":\"&read32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (Uncached 32B)\",\n \"Avg\": \"&read32Uncached_avg\",\n \"Min\":\"&read32Uncached_min\",\n \"Max\":\"&read32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (64B)\",\n \"Avg\": \"&read64_avg\",\n \"Min\":\"&read64_min\",\n \"Max\":\"&read64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Read\",\n \"Avg\": \"&hbmRead_avg\",\n \"Min\":\"&hbmRead_min\",\n \"Max\":\"&hbmRead_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (32B)\",\n \"Avg\": \"&write32_avg\",\n \"Min\":\"&write32_min\",\n \"Max\":\"&write32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (Uncached 32B)\",\n \"Avg\": \"&write32Uncached_avg\",\n \"Min\":\"&write32Uncached_min\",\n \"Max\":\"&write32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (64B)\",\n \"Avg\": \"&write64_avg\",\n \"Min\":\"&write64_min\",\n \"Max\":\"&write64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Write\",\n \"Avg\": \"&hbmWrite_avg\",\n \"Min\":\"&hbmWrite_min\",\n \"Max\":\"&hbmWrite_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read Latency\",\n \"Avg\": \"&readLatency_avg\",\n \"Min\":\"&readLatency_min\",\n \"Max\":\"&readLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Write Latency\",\n \"Avg\": \"&writeLatency_avg\",\n \"Min\":\"&writeLatency_min\",\n \"Max\":\"&writeLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Atomic Latency\",\n \"Avg\": \"&atomicOpLatency_avg\",\n \"Min\":\"&atomicOpLatency_min\",\n \"Max\":\"&atomicOpLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Read Stall\",\n \"Avg\": \"&readStall_avg\",\n \"Min\":\"&readStall_min\",\n \"Max\":\"&readStall_max\",\n \"Unit\":\"pct\"\n },\n {\n \"Metric\": \"Write Stall\",\n \"Avg\": \"&writeStall_avg\",\n \"Min\":\"&writeStall_min\",\n \"Max\":\"&writeStall_max\",\n \"Unit\":\"pct\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": \"null\",\n \"readStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"readStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"writeStall_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n \"writeStall_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_BUSY_sum\", 0]},\n { \"$divide\": [ \n {\"$multiply\": [100, {\"$add\":[\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\"]}]},\n \"&TCC_BUSY_sum\" \n ]},\n null\n ]\n }},\n\n \"readBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n \"readBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_RDREQ_32B_sum\", 32]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, 64] } ] }, \"&denom\" ]\n }},\n\n \"writeBW_avg\":{\"$avg\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_min\":{\"$min\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n \"writeBW_max\":{\"$max\": {\n \"$divide\": [ { \"$add\" : [{ \"$multiply\": [\"&TCC_EA_WRREQ_64B_sum\", 64]}, { \"$multiply\": [{ \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, 32] } ] }, \"&denom\" ]\n }},\n\n \"read32_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n \"read32_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_32B_sum\", \"&denom\" ]\n }},\n\n \"read32Uncached_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"read32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RD_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"read64_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n \"read64_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_RDREQ_sum\", \"&TCC_EA_RDREQ_32B_sum\"] }, \"&denom\" ]\n }},\n\n \"hbmRead_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmRead_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_RDREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"write32_avg\":{\"$avg\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_min\":{\"$min\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n \"write32_max\":{\"$max\": {\n \"$divide\": [ { \"$subtract\": [\"&TCC_EA_WRREQ_sum\", \"&TCC_EA_WRREQ_64B_sum\"] }, \"&denom\" ]\n }},\n\n \"write32Uncached_avg\": {\"$avg\":{\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n \"write32Uncached_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WR_UNCACHED_32B_sum\", \"&denom\" ]\n }},\n\n \"write64_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n \"write64_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_64B_sum\", \"&denom\" ]\n }},\n\n \"hbmWrite_avg\":{\"$avg\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_min\":{\"$min\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n \"hbmWrite_max\":{\"$max\": {\n \"$divide\": [ \"&TCC_EA_WRREQ_DRAM_sum\", \"&denom\" ]\n }},\n\n \"readLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n \"readLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_RDREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_RDREQ_LEVEL_sum\", \"&TCC_EA_RDREQ_sum\" ] },\n null\n ]\n }},\n\n \"writeLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n \"writeLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_WRREQ_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_WRREQ_LEVEL_sum\", \"&TCC_EA_WRREQ_sum\" ] },\n null\n ]\n }},\n\n \"atomicOpLatency_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }},\n \"atomicOpLatency_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [\"&TCC_EA_ATOMIC_sum\", 0]},\n { \"$divide\": [ \"&TCC_EA_ATOMIC_LEVEL_sum\", \"&TCC_EA_ATOMIC_sum\" ] },\n null\n ]\n }}\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Read BW\",\n \"Avg\": \"&readBW_avg\",\n \"Min\":\"&readBW_min\",\n \"Max\":\"&readBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Write BW\",\n \"Avg\": \"&writeBW_avg\",\n \"Min\":\"&writeBW_min\",\n \"Max\":\"&writeBW_max\",\n \"Unit\":{\"$concat\": [\"Bytes \", $normUnit] }\n },\n {\n \"Metric\": \"Read (32B)\",\n \"Avg\": \"&read32_avg\",\n \"Min\":\"&read32_min\",\n \"Max\":\"&read32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (Uncached 32B)\",\n \"Avg\": \"&read32Uncached_avg\",\n \"Min\":\"&read32Uncached_min\",\n \"Max\":\"&read32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read (64B)\",\n \"Avg\": \"&read64_avg\",\n \"Min\":\"&read64_min\",\n \"Max\":\"&read64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"HBM Read\",\n \"Avg\": \"&hbmRead_avg\",\n \"Min\":\"&hbmRead_min\",\n \"Max\":\"&hbmRead_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (32B)\",\n \"Avg\": \"&write32_avg\",\n \"Min\":\"&write32_min\",\n \"Max\":\"&write32_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (Uncached 32B)\",\n \"Avg\": \"&write32Uncached_avg\",\n \"Min\":\"&write32Uncached_min\",\n \"Max\":\"&write32Uncached_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Write (64B)\",\n \"Avg\": \"&write64_avg\",\n \"Min\":\"&write64_min\",\n \"Max\":\"&write64_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n\n {\n \"Metric\": \"HBM Write\",\n \"Avg\": \"&hbmWrite_avg\",\n \"Min\":\"&hbmWrite_min\",\n \"Max\":\"&hbmWrite_max\",\n \"Unit\":{\"$concat\": [\"Req \", $normUnit] }\n },\n {\n \"Metric\": \"Read Latency\",\n \"Avg\": \"&readLatency_avg\",\n \"Min\":\"&readLatency_min\",\n \"Max\":\"&readLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Write Latency\",\n \"Avg\": \"&writeLatency_avg\",\n \"Min\":\"&writeLatency_min\",\n \"Max\":\"&writeLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Atomic Latency\",\n \"Avg\": \"&atomicOpLatency_avg\",\n \"Min\":\"&atomicOpLatency_min\",\n \"Max\":\"&atomicOpLatency_max\",\n \"Unit\":\"Cycles\"\n },\n {\n \"Metric\": \"Read Stall\",\n \"Avg\": \"&readStall_avg\",\n \"Min\":\"&readStall_min\",\n \"Max\":\"&readStall_max\",\n \"Unit\":\"pct\"\n },\n {\n \"Metric\": \"Write Stall\",\n \"Avg\": \"&writeStall_avg\",\n \"Min\":\"&writeStall_min\",\n \"Max\":\"&writeStall_max\",\n \"Unit\":\"pct\"\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - Fabric Transactions", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Metric 2": true, + "Unit 2": true + }, + "indexByName": { + "Avg 1": 3, + "Avg 2": 4, + "Max 1": 7, + "Max 2": 8, + "Metric 1": 0, + "Metric 2": 1, + "Min 1": 5, + "Min 2": 6, + "Unit 1": 9, + "Unit 2": 2 + }, + "renameByName": { + "Avg 1": "Avg (Current)", + "Avg 2": "Avg (Baseline)", + "Max 1": "Max (Current)", + "Max 2": "Max (Baseline)", + "Min 1": "Min (Current)", + "Min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "locale" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Avg (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 178 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unit" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avg (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Current)" + }, + "properties": [ + { + "id": "custom.width", + "value": 126 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min (Baseline)" + }, + "properties": [ + { + "id": "custom.width", + "value": 128 + } + ] + } + ] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 23 + }, + "id": 58, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n\n \"streamingReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n\n \"probeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n\n \"hits_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_min\":{\"$min\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_max\":{\"$max\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n\n \"misses_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_min\":{\"$min\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_max\":{\"$max\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n\n \"cacheHit_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n\n\n \"writeback_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n\n \"nc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_min\":{\"$min\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_max\":{\"$max\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n\n \"uc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_min\":{\"$min\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_max\":{\"$max\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n\n \"cc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_min\":{\"$min\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_max\":{\"$max\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n\n \"rw_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_min\":{\"$min\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_max\":{\"$max\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n\n \"writebackNorm_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_min\":{\"$min\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_max\":{\"$max\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n\n \"writebackTC_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_min\":{\"$min\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_max\":{\"$max\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n\n \"evictNorm_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_min\":{\"$min\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_max\":{\"$max\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n\n \"evictTC_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_min\":{\"$min\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_max\":{\"$max\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n\n\n \"readReq128_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Req\",\n \"avg\": \"&req_avg\",\n \"min\": \"&req_min\",\n \"max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Streaming Req\",\n \"avg\": \"&streamingReq_avg\",\n \"min\": \"&streamingReq_min\",\n \"max\": \"&streamingReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n \n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Probe Req\",\n \"avg\": \"&probeReq_avg\",\n \"min\": \"&probeReq_min\",\n \"max\": \"&probeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Hits\",\n \"avg\": \"&hits_avg\",\n \"min\": \"&hits_min\",\n \"max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n }, \n {\n \"metric\": \"Misses\",\n \"avg\": \"&misses_avg\",\n \"min\": \"&misses_min\",\n \"max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit\",\n \"avg\": \"&cacheHit_avg\",\n \"min\": \"&cacheHit_min\",\n \"max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Writeback\",\n \"avg\": \"&writeback_avg\",\n \"min\": \"&writeback_min\",\n \"max\": \"&writeback_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"NC Req\",\n \"avg\": \"&nc_avg\",\n \"min\": \"&nc_min\",\n \"max\": \"&nc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"UC Req\",\n \"avg\": \"&uc_avg\",\n \"min\": \"&uc_min\",\n \"max\": \"&uc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"CC Req\",\n \"avg\": \"&cc_avg\",\n \"min\": \"&cc_min\",\n \"max\": \"&cc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"RW Req\",\n \"avg\": \"&rw_avg\",\n \"min\": \"&rw_min\",\n \"max\": \"&rw_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Writeback (Normal)\",\n \"avg\": \"&writebackNorm_avg\",\n \"min\": \"&writebackNorm_min\",\n \"max\": \"&writebackNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Writeback (TC Req)\",\n \"avg\": \"&writebackTC_avg\",\n \"min\": \"&writebackTC_min\",\n \"max\": \"&writebackTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (Normal)\",\n \"avg\": \"&evictNorm_avg\",\n \"min\": \"&evictNorm_min\",\n \"max\": \"&evictNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (TC Req)\",\n \"avg\": \"&evictTC_avg\",\n \"min\": \"&evictTC_min\",\n \"max\": \"&evictTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + }, + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "hide": false, + "rawQuery": true, + "refId": "B", + "target": "${Workload2}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}},\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(L2 Cache)\"}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n {\"$group\": {\n \"_id\": null,\n \"req_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_min\":{\"$min\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n \"req_max\":{\"$max\": { \"$divide\": [ \"&TCC_REQ_sum\", \"&denom\"] }},\n\n \"streamingReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n \"streamingReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_STREAMING_REQ_sum\", \"&denom\" ] }},\n\n \"readReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n \"readReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_READ_sum\", \"&denom\" ] }},\n\n \"writeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n \"writeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITE_sum\", \"&denom\" ]}},\n\n \"atomicReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n \"atomicReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_ATOMIC_sum\", \"&denom\" ]}},\n\n \"probeReq_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_min\":{\"$min\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n \"probeReq_max\":{\"$max\": {\"$divide\": [ \"&TCC_PROBE_sum\", \"&denom\" ]}},\n\n \"hits_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_min\":{\"$min\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n \"hits_max\":{\"$max\": {\"$divide\": [ \"&TCC_HIT_sum\", \"&denom\"] }},\n\n \"misses_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_min\":{\"$min\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n \"misses_max\":{\"$max\": { \"$divide\": [ \"&TCC_MISS_sum\", \"&denom\"] }},\n\n \"cacheHit_avg\":{\"$avg\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_min\":{\"$min\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n \"cacheHit_max\":{\"$max\": {\n \"$cond\": [\n {\"$ne\": [{ \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] }, 0]},\n { \"$divide\": [ { \"$multiply\": [100, \"&TCC_HIT_sum\"] }, { \"$add\": [ \"&TCC_HIT_sum\", \"&TCC_MISS_sum\" ] } ] },\n null\n ] \n }},\n\n\n \"writeback_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_min\":{\"$min\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n \"writeback_max\":{\"$max\": {\"$divide\": [ \"&TCC_WRITEBACK_sum\", \"&denom\"] }},\n\n \"nc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_min\":{\"$min\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n \"nc_max\":{\"$max\": {\"$divide\": [ \"&TCC_NC_REQ_sum\", \"&denom\" ] }},\n\n \"uc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_min\":{\"$min\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n \"uc_max\":{\"$max\": {\"$divide\": [ \"&TCC_UC_REQ_sum\", \"&denom\" ] }},\n\n \"cc_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_min\":{\"$min\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n \"cc_max\":{\"$max\": {\"$divide\": [ \"&TCC_CC_REQ_sum\", \"&denom\" ] }},\n\n \"rw_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_min\":{\"$min\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n \"rw_max\":{\"$max\": {\"$divide\": [ \"&TCC_RW_REQ_sum\", \"&denom\" ] }},\n\n \"writebackNorm_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_min\":{\"$min\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n \"writebackNorm_max\":{\"$max\": {\"$divide\": [ \"&TCC_NORMAL_WRITEBACK_sum\", \"&denom\" ]}},\n\n \"writebackTC_avg\":{\"$avg\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_min\":{\"$min\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n \"writebackTC_max\":{\"$max\": {\"$divide\": [ \"&TCC_ALL_TC_OP_WB_WRITEBACK_sum\", \"&denom\" ] }},\n\n \"evictNorm_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_min\":{\"$min\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n \"evictNorm_max\":{\"$max\": { \"$divide\": [ \"&TCC_NORMAL_EVICT_sum\", \"&denom\" ] }},\n\n \"evictTC_avg\":{\"$avg\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_min\":{\"$min\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n \"evictTC_max\":{\"$max\": { \"$divide\": [ \"&TCC_ALL_TC_OP_INV_EVICT_sum\", \"&denom\" ] }},\n\n \"readReq128_avg\":{\"$avg\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_min\":{\"$min\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }},\n \"readReq128_max\":{\"$max\": {\"$divide\": [ \"&TCP_TCR_REQ_XFER128B_COMBINING_sum\", \"&denom\" ] }}\n\n }},\n {\"$set\": {\n \"array\": [\n {\n \"metric\": \"Req\",\n \"avg\": \"&req_avg\",\n \"min\": \"&req_min\",\n \"max\": \"&req_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Streaming Req\",\n \"avg\": \"&streamingReq_avg\",\n \"min\": \"&streamingReq_min\",\n \"max\": \"&streamingReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Read Req\",\n \"avg\": \"&readReq_avg\",\n \"min\": \"&readReq_min\",\n \"max\": \"&readReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n \n {\n \"metric\": \"Write Req\",\n \"avg\": \"&writeReq_avg\",\n \"min\": \"&writeReq_min\",\n \"max\": \"&writeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Atomic Req\",\n \"avg\": \"&atomicReq_avg\",\n \"min\": \"&atomicReq_min\",\n \"max\": \"&atomicReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Probe Req\",\n \"avg\": \"&probeReq_avg\",\n \"min\": \"&probeReq_min\",\n \"max\": \"&probeReq_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Hits\",\n \"avg\": \"&hits_avg\",\n \"min\": \"&hits_min\",\n \"max\": \"&hits_max\",\n \"Unit\": {\"$concat\": [\"Hits \", $normUnit]}\n }, \n {\n \"metric\": \"Misses\",\n \"avg\": \"&misses_avg\",\n \"min\": \"&misses_min\",\n \"max\": \"&misses_max\",\n \"Unit\": {\"$concat\": [\"Misses \", $normUnit]}\n },\n {\n \"metric\": \"Cache Hit\",\n \"avg\": \"&cacheHit_avg\",\n \"min\": \"&cacheHit_min\",\n \"max\": \"&cacheHit_max\",\n \"Unit\": \"pct\"\n },\n {\n \"metric\": \"Writeback\",\n \"avg\": \"&writeback_avg\",\n \"min\": \"&writeback_min\",\n \"max\": \"&writeback_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"NC Req\",\n \"avg\": \"&nc_avg\",\n \"min\": \"&nc_min\",\n \"max\": \"&nc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"UC Req\",\n \"avg\": \"&uc_avg\",\n \"min\": \"&uc_min\",\n \"max\": \"&uc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"CC Req\",\n \"avg\": \"&cc_avg\",\n \"min\": \"&cc_min\",\n \"max\": \"&cc_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"RW Req\",\n \"avg\": \"&rw_avg\",\n \"min\": \"&rw_min\",\n \"max\": \"&rw_max\",\n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"metric\": \"Writeback (Normal)\",\n \"avg\": \"&writebackNorm_avg\",\n \"min\": \"&writebackNorm_min\",\n \"max\": \"&writebackNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Writeback (TC Req)\",\n \"avg\": \"&writebackTC_avg\",\n \"min\": \"&writebackTC_min\",\n \"max\": \"&writebackTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (Normal)\",\n \"avg\": \"&evictNorm_avg\",\n \"min\": \"&evictNorm_min\",\n \"max\": \"&evictNorm_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n },\n {\n \"metric\": \"Evict (TC Req)\",\n \"avg\": \"&evictTC_avg\",\n \"min\": \"&evictTC_min\",\n \"max\": \"&evictTC_max\",\n \"Unit\": {\"$concat\": [\"\", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n\n]);", + "type": "table" + } + ], + "title": "L2 Cache Accesses", + "transformations": [ + { + "id": "concatenate", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Unit 2": true, + "metric 2": true + }, + "indexByName": { + "Unit 1": 9, + "Unit 2": 2, + "avg 1": 3, + "avg 2": 4, + "max 1": 7, + "max 2": 8, + "metric 1": 0, + "metric 2": 1, + "min 1": 5, + "min 2": 6 + }, + "renameByName": { + "avg 1": "Avg (Current)", + "avg 2": "Avg (Baseline)", + "max 1": "Max (Current)", + "max 2": "Max (Baseline)", + "min 1": "Min (Current)", + "min 2": "Min (Baseline)" + } + } + } + ], + "type": "table" + }, + { + "Aggregate": "last", + "BarPadding": 30, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "Transaction", + "GroupCols": 1, + "GroupGap": 5, + "GroupLabelColor": "#FADE2A", + "GroupLabelFontSize": "120%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": true, + "LabelColName": "Metric", + "LabelColor": "#ffffff", + "LabelFontSize": "80%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 0, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#FF9830", + "ValueDecimals": 0, + "ValueFontSize": "100%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:81", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Selected": true + } + ], + "datasource": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 32 + }, + "id": 60, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"ioStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"gmiStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"hbmStall_READ_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_READ_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_READ_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"ioStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"ioStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_IO_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"gmiStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"gmiStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_GMI_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"hbmStall_WRITE_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_WRITE_min\": {\n \"$min\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n \"hbmStall_WRITE_max\": {\n \"$max\": { \"$divide\": [\"&TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum\", \"&denom\"] }\n },\n\n \"creditStarvation_avg\": {\n \"$avg\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n },\n \"creditStarvation_min\": {\n \"$min\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n },\n \"creditStarvation_max\": {\n \"$max\": { \"$divide\": [\"&TCC_TOO_MANY_EA_WRREQS_STALL_sum\", \"&denom\"] }\n } \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\": \"Remote Socket Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"I/O\",\n \"Avg\": \"&ioStall_READ_avg\",\n \"Min\": \"&ioStall_READ_min\",\n \"Max\": \"&ioStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Peer GCD Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"GMI\",\n \"Avg\": \"&gmiStall_READ_avg\",\n \"Min\": \"&gmiStall_READ_min\",\n \"Max\": \"&gmiStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"HBM Stall\",\n \"Transaction\": \"Read\",\n \"Target\": \"HBM\",\n \"Avg\": \"&hbmStall_READ_avg\",\n \"Min\": \"&hbmStall_READ_min\",\n \"Max\": \"&hbmStall_READ_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Remote Socket Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"I/O\",\n \"Avg\": \"&ioStall_WRITE_avg\",\n \"Min\": \"&ioStall_WRITE_min\",\n \"Max\": \"&ioStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Peer GCD Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"GMI\",\n \"Avg\": \"&gmiStall_WRITE_avg\",\n \"Min\": \"&gmiStall_WRITE_min\",\n \"Max\": \"&gmiStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"HBM Stall\",\n \"Transaction\": \"Write\",\n \"Target\": \"HBM\",\n \"Avg\": \"&hbmStall_WRITE_avg\",\n \"Min\": \"&hbmStall_WRITE_min\",\n \"Max\": \"&hbmStall_WRITE_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n },\n {\n \"Metric\": \"Credit Starvation\",\n \"Transaction\": \"Write\",\n \"Target\": \"Fabric\",\n \"Avg\": \"&creditStarvation_avg\",\n \"Min\": \"&creditStarvation_min\",\n \"Max\": \"&creditStarvation_max\", \n \"Unit\": {\"$concat\": [\"Req \", $normUnit]}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - Fabric Interface Stalls (Cycles $normUnit)", + "transparent": true, + "type": "michaeldmoore-multistat-panel" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "L2 Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 66, + "panels": [ + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "light", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:850", + "Col": 1, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Hit Rate", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 87, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 Cache Hit Rate (Percent) (Channel 0 - 15) ", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "light", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:850", + "Col": 1, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Hit Rate", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 92, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "Cache Hit Rate % (Channel 16 - 31) ", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:565", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 81, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Read Requests(Channel 0-15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:656", + "Col": 3, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 25 + }, + "id": 82, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L 2 Read Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:697", + "Col": 4, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 33 + }, + "id": 83, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Write Requests (Channel 0-15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:750", + "Col": 4, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 84, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L2 Write Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:791", + "Col": 5, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 85, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L1 - L2 Atomic Requests (Channel 0-15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLimitValue": 100, + "HighLmitLineWidth": 1, + "HighSideMargin": 0, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "100%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 80, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineValue": 105, + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": true, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:791", + "Col": 5, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 91, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L1 - L2 Atomic Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 6, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 49 + }, + "id": 189, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Requests (Channel 0 - 15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 6, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 49 + }, + "id": 195, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 7, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 191, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Requests (Channel 0 - 15) : $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 7, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Req", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 197, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 8, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 65 + }, + "id": 193, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Request (Channel 0 - 15): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": false, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 2, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 8, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA AtomicReq", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 65 + }, + "id": 199, + "maxDataPoints": 10, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Requests (Channel 16-31): $normUnit", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupColName": "", + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 9, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Lat - cycles", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 73 + }, + "hideTimeOverride": false, + "id": 68, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"b0_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[0]\", \"&TCC_MISS[0]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[0]\"]}, \n { \"$add\": [\"&TCC_HIT[0]\", \"&TCC_MISS[0]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b0_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[0]\"}, \"&denom\"] } \n },\n \"b0_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[0]\"}, \"&denom\"] } \n },\n \"b0_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[0]\"}, \"&denom\"] } \n },\n \"b0_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[0]\"}, \"&denom\"] } \n },\n \"b0_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[0]\"}, \"&denom\"] }\n },\n \"b0_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[0]\"}, \"&denom\"] } \n },\n \"b0_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[0]\"}, \"&denom\"] } \n },\n\n \"b0_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[0]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[0]\", \"&TCC_EA_RDREQ[0]\"]}, null] } },\n \"b0_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[0]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[0]\", \"&TCC_EA_WRREQ[0]\"]}, null] } },\n \"b0_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[0]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[0]\", \"&TCC_EA_ATOMIC[0]\"]}, null]}},\n\n \"b0_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[0]\"}, \"&denom\"] }},\n \"b0_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[0]\"}, \"&denom\"] }},\n\n \n \"b1_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[1]\", \"&TCC_MISS[1]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[1]\"]}, \n { \"$add\": [\"&TCC_HIT[1]\", \"&TCC_MISS[1]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b1_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[1]\"}, \"&denom\"] } \n },\n \"b1_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[1]\"}, \"&denom\"] } \n },\n \"b1_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[1]\"}, \"&denom\"] } \n },\n \"b1_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[1]\"}, \"&denom\"] } \n },\n \"b1_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[1]\"}, \"&denom\"] }\n },\n \"b1_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[1]\"}, \"&denom\"] } \n },\n \"b1_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[1]\"}, \"&denom\"] } \n },\n \"b1_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[1]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[1]\", \"&TCC_EA_RDREQ[1]\"]}, null] } },\n \"b1_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[1]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[1]\", \"&TCC_EA_WRREQ[1]\"]}, null] } },\n \"b1_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[1]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[1]\", \"&TCC_EA_ATOMIC[1]\"]}, null]}},\n\n \"b1_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[1]\"}, \"&denom\"] }},\n \"b1_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[1]\"}, \"&denom\"] }},\n\n\n \"b2_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[2]\", \"&TCC_MISS[2]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[2]\"]}, \n { \"$add\": [\"&TCC_HIT[2]\", \"&TCC_MISS[2]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b2_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[2]\"}, \"&denom\"] }\n },\n \"b2_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[2]\"}, \"&denom\"] } \n },\n \"b2_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[2]\"}, \"&denom\"] }\n },\n \"b2_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[2]\"}, \"&denom\"] }\n },\n \"b2_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[2]\"}, \"&denom\"] }\n },\n \"b2_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[2]\"}, \"&denom\"] }\n },\n \"b2_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[2]\"}, \"&denom\"] }\n },\n \"b2_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[2]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[2]\", \"&TCC_EA_RDREQ[2]\"]}, null] } },\n \"b2_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[2]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[2]\", \"&TCC_EA_WRREQ[2]\"]}, null] } },\n \"b2_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[2]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[2]\", \"&TCC_EA_ATOMIC[2]\"]}, null]}},\n\n \"b2_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[2]\"}, \"&denom\"] }},\n \"b2_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[2]\"}, \"&denom\"] }},\n\n\n \n \"b3_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[3]\", \"&TCC_MISS[3]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[3]\"]}, \n { \"$add\": [\"&TCC_HIT[3]\", \"&TCC_MISS[3]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b3_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[3]\"}, \"&denom\"] } \n },\n \"b3_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[3]\"}, \"&denom\"] } \n },\n \"b3_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[3]\"}, \"&denom\"] }\n },\n \"b3_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[3]\"}, \"&denom\"] }\n },\n \"b3_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[3]\"}, \"&denom\"] }\n },\n \"b3_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[3]\"}, \"&denom\"] }\n },\n \"b3_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[3]\"}, \"&denom\"] } \n },\n \"b3_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[3]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[3]\", \"&TCC_EA_RDREQ[3]\"]}, null] } },\n \"b3_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[3]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[3]\", \"&TCC_EA_WRREQ[3]\"]}, null] } },\n \"b3_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[3]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[3]\", \"&TCC_EA_ATOMIC[3]\"]}, null]}},\n\n \"b3_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[3]\"}, \"&denom\"] }},\n \"b3_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[3]\"}, \"&denom\"] }},\n\n\n \n \"b4_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[4]\", \"&TCC_MISS[4]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[4]\"]}, \n { \"$add\": [\"&TCC_HIT[4]\", \"&TCC_MISS[4]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b4_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[4]\"}, \"&denom\"] } \n },\n \"b4_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[4]\"}, \"&denom\"] } \n },\n \"b4_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[4]\"}, \"&denom\"] }\n },\n \"b4_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[4]\"}, \"&denom\"] } \n },\n \"b4_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[4]\"}, \"&denom\"] } \n },\n \"b4_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[4]\"}, \"&denom\"] } \n },\n \"b4_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[4]\"}, \"&denom\"] } \n },\n \"b4_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[4]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[4]\", \"&TCC_EA_RDREQ[4]\"]}, null] } },\n \"b4_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[4]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[4]\", \"&TCC_EA_WRREQ[4]\"]}, null] } },\n \"b4_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[4]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[4]\", \"&TCC_EA_ATOMIC[4]\"]}, null]}},\n\n \"b4_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[4]\"}, \"&denom\"] }},\n \"b4_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[4]\"}, \"&denom\"] }},\n\n\n \n \"b5_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[5]\", \"&TCC_MISS[5]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[5]\"]}, \n { \"$add\": [\"&TCC_HIT[5]\", \"&TCC_MISS[5]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b5_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[5]\"}, \"&denom\"] } \n },\n \"b5_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[5]\"}, \"&denom\"] } \n },\n \"b5_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[5]\"}, \"&denom\"] } \n },\n \"b5_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[5]\"}, \"&denom\"] } \n },\n \"b5_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[5]\"}, \"&denom\"] } \n },\n \"b5_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[5]\"}, \"&denom\"] } \n },\n \"b5_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[5]\"}, \"&denom\"] } \n },\n \"b5_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[5]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[5]\", \"&TCC_EA_RDREQ[5]\"]}, null] } },\n \"b5_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[5]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[5]\", \"&TCC_EA_WRREQ[5]\"]}, null] } },\n \"b5_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[5]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[5]\", \"&TCC_EA_ATOMIC[5]\"]}, null]}},\n\n \"b5_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[5]\"}, \"&denom\"] }},\n \"b5_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[5]\"}, \"&denom\"] }},\n\n\n \n \"b6_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[6]\", \"&TCC_MISS[6]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[6]\"]}, \n { \"$add\": [\"&TCC_HIT[6]\", \"&TCC_MISS[6]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b6_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[6]\"}, \"&denom\"] } \n },\n \"b6_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[6]\"}, \"&denom\"] } \n },\n \"b6_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[6]\"}, \"&denom\"] } \n },\n \"b6_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[6]\"}, \"&denom\"] } \n },\n \"b6_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[6]\"}, \"&denom\"] } \n },\n \"b6_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[6]\"}, \"&denom\"] }\n },\n \"b6_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[6]\"}, \"&denom\"] } \n },\n \"b6_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[6]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[6]\", \"&TCC_EA_RDREQ[6]\"]}, null] } },\n \"b6_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[6]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[6]\", \"&TCC_EA_WRREQ[6]\"]}, null] } },\n \"b6_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[6]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[6]\", \"&TCC_EA_ATOMIC[6]\"]}, null]}},\n\n \"b6_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[6]\"}, \"&denom\"] }},\n \"b6_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[6]\"}, \"&denom\"] }},\n\n\n \n \"b7_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[7]\", \"&TCC_MISS[7]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[7]\"]}, \n { \"$add\": [\"&TCC_HIT[7]\", \"&TCC_MISS[7]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b7_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[7]\"}, \"&denom\"] } \n },\n \"b7_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[7]\"}, \"&denom\"] } \n },\n \"b7_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[7]\"}, \"&denom\"] } \n },\n \"b7_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[7]\"}, \"&denom\"] } \n },\n \"b7_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[7]\"}, \"&denom\"] } \n },\n \"b7_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[7]\"}, \"&denom\"] }\n },\n \"b7_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[7]\"}, \"&denom\"] } \n },\n \"b7_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[7]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[7]\", \"&TCC_EA_RDREQ[7]\"]}, null] } },\n \"b7_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[7]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[7]\", \"&TCC_EA_WRREQ[7]\"]}, null] } },\n \"b7_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[7]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[7]\", \"&TCC_EA_ATOMIC[7]\"]}, null]}},\n\n \"b7_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[7]\"}, \"&denom\"] }},\n \"b7_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[7]\"}, \"&denom\"] }},\n\n\n \n \"b8_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[8]\", \"&TCC_MISS[8]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[8]\"]}, \n { \"$add\": [\"&TCC_HIT[8]\", \"&TCC_MISS[8]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b8_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[8]\"}, \"&denom\"] } \n },\n \"b8_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[8]\"}, \"&denom\"] } \n },\n \"b8_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[8]\"}, \"&denom\"] } \n },\n \"b8_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[8]\"}, \"&denom\"] } \n },\n \"b8_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[8]\"}, \"&denom\"] } \n },\n \"b8_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[8]\"}, \"&denom\"] } \n },\n \"b8_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[8]\"}, \"&denom\"] } \n },\n \"b8_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[8]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[8]\", \"&TCC_EA_RDREQ[8]\"]}, null] } },\n \"b8_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[8]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[8]\", \"&TCC_EA_WRREQ[8]\"]}, null] } },\n \"b8_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[8]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[8]\", \"&TCC_EA_ATOMIC[8]\"]}, null]}},\n\n \"b8_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[8]\"}, \"&denom\"] }},\n \"b8_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[8]\"}, \"&denom\"] }},\n\n\n \n \"b9_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[9]\", \"&TCC_MISS[9]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[9]\"]}, \n { \"$add\": [\"&TCC_HIT[9]\", \"&TCC_MISS[9]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b9_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[9]\"}, \"&denom\"] } \n },\n \"b9_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[9]\"}, \"&denom\"] } \n },\n \"b9_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[9]\"}, \"&denom\"] } \n },\n \"b9_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[9]\"}, \"&denom\"] } \n },\n \"b9_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[9]\"}, \"&denom\"] } \n },\n \"b9_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[9]\"}, \"&denom\"] } \n },\n \"b9_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[9]\"}, \"&denom\"] } \n },\n \"b9_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[9]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[9]\", \"&TCC_EA_RDREQ[9]\"]}, null] } },\n \"b9_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[9]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[9]\", \"&TCC_EA_WRREQ[9]\"]}, null] } },\n \"b9_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[9]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[9]\", \"&TCC_EA_ATOMIC[9]\"]}, null]}},\n\n \"b9_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[9]\"}, \"&denom\"] }},\n \"b9_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[9]\"}, \"&denom\"] }},\n\n\n \n \"b10_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[10]\", \"&TCC_MISS[10]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[10]\"]}, \n { \"$add\": [\"&TCC_HIT[10]\", \"&TCC_MISS[10]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b10_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[10]\"}, \"&denom\"] } \n },\n \"b10_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[10]\"}, \"&denom\"] } \n },\n \"b10_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[10]\"}, \"&denom\"] } \n },\n \"b10_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[10]\"}, \"&denom\"] } \n },\n \"b10_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[10]\"}, \"&denom\"] } \n },\n \"b10_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[10]\"}, \"&denom\"] } \n },\n \"b10_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[10]\"}, \"&denom\"] } \n },\n \"b10_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[10]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[10]\", \"&TCC_EA_RDREQ[10]\"]}, null] } },\n \"b10_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[10]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[10]\", \"&TCC_EA_WRREQ[10]\"]}, null] } },\n \"b10_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[10]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[10]\", \"&TCC_EA_ATOMIC[10]\"]}, null]}},\n\n \"b10_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[10]\"}, \"&denom\"] }},\n \"b10_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[10]\"}, \"&denom\"] }},\n\n\n \n \"b11_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[11]\", \"&TCC_MISS[11]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[11]\"]}, \n { \"$add\": [\"&TCC_HIT[11]\", \"&TCC_MISS[11]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b11_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[11]\"}, \"&denom\"] } \n },\n \"b11_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[11]\"}, \"&denom\"] } \n },\n \"b11_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[11]\"}, \"&denom\"] } \n },\n \"b11_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[11]\"}, \"&denom\"] } \n },\n \"b11_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[11]\"}, \"&denom\"] } \n },\n \"b11_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[11]\"}, \"&denom\"] } \n },\n \"b11_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[11]\"}, \"&denom\"] } \n },\n \"b11_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[11]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[11]\", \"&TCC_EA_RDREQ[11]\"]}, null] } },\n \"b11_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[11]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[11]\", \"&TCC_EA_WRREQ[11]\"]}, null] } },\n \"b11_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[11]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[11]\", \"&TCC_EA_ATOMIC[11]\"]}, null]}},\n\n \"b11_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[11]\"}, \"&denom\"] }},\n \"b11_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[11]\"}, \"&denom\"] }},\n\n\n \n \"b12_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[12]\", \"&TCC_MISS[12]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[12]\"]}, \n { \"$add\": [\"&TCC_HIT[12]\", \"&TCC_MISS[12]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b12_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[12]\"}, \"&denom\"] } \n },\n \"b12_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[12]\"}, \"&denom\"] } \n },\n \"b12_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[12]\"}, \"&denom\"] } \n },\n \"b12_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[12]\"}, \"&denom\"] } \n },\n \"b12_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[12]\"}, \"&denom\"] } \n },\n \"b12_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[12]\"}, \"&denom\"] } \n },\n \"b12_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[12]\"}, \"&denom\"] } \n },\n \"b12_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[12]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[12]\", \"&TCC_EA_RDREQ[12]\"]}, null] } },\n \"b12_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[12]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[12]\", \"&TCC_EA_WRREQ[12]\"]}, null] } },\n \"b12_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[12]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[12]\", \"&TCC_EA_ATOMIC[12]\"]}, null]}},\n\n \"b12_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[12]\"}, \"&denom\"] }},\n \"b12_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[12]\"}, \"&denom\"] }},\n\n\n \n \"b13_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[13]\", \"&TCC_MISS[13]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[13]\"]}, \n { \"$add\": [\"&TCC_HIT[13]\", \"&TCC_MISS[13]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b13_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[13]\"}, \"&denom\"] } \n },\n \"b13_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[13]\"}, \"&denom\"] } \n },\n \"b13_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[13]\"}, \"&denom\"] } \n },\n \"b13_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[13]\"}, \"&denom\"] } \n },\n \"b13_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[13]\"}, \"&denom\"] } \n },\n \"b13_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[13]\"}, \"&denom\"] }\n },\n \"b13_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[13]\"}, \"&denom\"] } \n },\n \"b13_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[13]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[13]\", \"&TCC_EA_RDREQ[13]\"]}, null] } },\n \"b13_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[13]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[13]\", \"&TCC_EA_WRREQ[13]\"]}, null] } },\n \"b13_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[13]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[13]\", \"&TCC_EA_ATOMIC[13]\"]}, null]}},\n\n \"b13_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[13]\"}, \"&denom\"] }},\n \"b13_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[13]\"}, \"&denom\"] }},\n\n\n \n \"b14_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[14]\", \"&TCC_MISS[14]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[14]\"]}, \n { \"$add\": [\"&TCC_HIT[14]\", \"&TCC_MISS[14]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b14_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[14]\"}, \"&denom\"] } \n },\n \"b14_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[14]\"}, \"&denom\"] } \n },\n \"b14_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[14]\"}, \"&denom\"] } \n },\n \"b14_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[14]\"}, \"&denom\"] } \n },\n \"b14_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[14]\"}, \"&denom\"] } \n },\n \"b14_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[14]\"}, \"&denom\"] } \n },\n \"b14_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[14]\"}, \"&denom\"] } \n },\n \"b14_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[14]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[14]\", \"&TCC_EA_RDREQ[14]\"]}, null] } },\n \"b14_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[14]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[14]\", \"&TCC_EA_WRREQ[14]\"]}, null] } },\n \"b14_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[14]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[14]\", \"&TCC_EA_ATOMIC[14]\"]}, null]}},\n\n \"b14_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[14]\"}, \"&denom\"] }},\n \"b14_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[14]\"}, \"&denom\"] }},\n\n\n \n \"b15_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[15]\", \"&TCC_MISS[15]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[15]\"]}, \n { \"$add\": [\"&TCC_HIT[15]\", \"&TCC_MISS[15]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b15_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[15]\"}, \"&denom\"] } \n },\n \"b15_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[15]\"}, \"&denom\"] } \n },\n \"b15_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[15]\"}, \"&denom\"] } \n },\n \"b15_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[15]\"}, \"&denom\"] } \n },\n \"b15_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[15]\"}, \"&denom\"] } \n },\n \"b15_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[15]\"}, \"&denom\"] } \n },\n \"b15_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[15]\"}, \"&denom\"] }\n },\n \"b15_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[15]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[15]\", \"&TCC_EA_RDREQ[15]\"]}, null] } },\n \"b15_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[15]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[15]\", \"&TCC_EA_WRREQ[15]\"]}, null] } },\n \"b15_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[15]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[15]\", \"&TCC_EA_ATOMIC[15]\"]}, null]}},\n\n \"b15_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[15]\"}, \"&denom\"] }},\n \"b15_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[15]\"}, \"&denom\"] }}\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Channel\": \"0\",\n \"Hit Rate\": \"&b0_hitRate\",\n \"Req\": \"&b0_req\",\n \"Read Req\": \"&b0_readReq\",\n \"Write Req\": \"&b0_writeReq\",\n \"AtomicReq\": \"&b0_atomicReq\",\n \"EA Read Req\": \"&b0_eaReadReq\",\n \"EA Write Req\": \"&b0_eaWriteReq\",\n \"EA AtomicReq\": \"&b0_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b0_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b0_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b0_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b0_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b0_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b0_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b0_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b0_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b0_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b0_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n },\n {\n \"Channel\": \"1\",\n \"Hit Rate\": \"&b1_hitRate\",\n \"Req\": \"&b1_req\",\n \"Read Req\": \"&b1_readReq\",\n \"Write Req\": \"&b1_writeReq\",\n \"AtomicReq\": \"&b1_atomicReq\",\n \"EA Read Req\": \"&b1_eaReadReq\",\n \"EA Write Req\": \"&b1_eaWriteReq\",\n \"EA AtomicReq\": \"&b1_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b1_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b1_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b1_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b1_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b1_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b1_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b1_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b1_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b1_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b1_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n },\n {\n \"Channel\": \"2\",\n \"Hit Rate\": \"&b2_hitRate\",\n \"Req\": \"&b2_req\",\n \"Read Req\": \"&b2_readReq\",\n \"Write Req\": \"&b2_writeReq\",\n \"AtomicReq\": \"&b2_atomicReq\",\n \"EA Read Req\": \"&b2_eaReadReq\",\n \"EA Write Req\": \"&b2_eaWriteReq\",\n \"EA AtomicReq\": \"&b2_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b2_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b2_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b2_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b2_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b2_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b2_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b2_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b2_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b2_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b2_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"3\",\n \"Hit Rate\": \"&b3_hitRate\",\n \"Req\": \"&b3_req\",\n \"Read Req\": \"&b3_readReq\",\n \"Write Req\": \"&b3_writeReq\",\n \"AtomicReq\": \"&b3_atomicReq\",\n \"EA Read Req\": \"&b3_eaReadReq\",\n \"EA Write Req\": \"&b3_eaWriteReq\",\n \"EA AtomicReq\": \"&b3_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b3_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b3_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b3_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b3_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b3_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b3_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b3_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b3_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b3_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b3_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"4\",\n \"Hit Rate\": \"&b4_hitRate\",\n \"Req\": \"&b4_req\",\n \"Read Req\": \"&b4_readReq\",\n \"Write Req\": \"&b4_writeReq\",\n \"AtomicReq\": \"&b4_atomicReq\",\n \"EA Read Req\": \"&b4_eaReadReq\",\n \"EA Write Req\": \"&b4_eaWriteReq\",\n \"EA AtomicReq\": \"&b4_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b4_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b4_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b4_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b4_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b4_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b4_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b4_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b4_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b4_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b4_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"5\",\n \"Hit Rate\": \"&b5_hitRate\",\n \"Req\": \"&b5_req\",\n \"Read Req\": \"&b5_readReq\",\n \"Write Req\": \"&b5_writeReq\",\n \"AtomicReq\": \"&b5_atomicReq\",\n \"EA Read Req\": \"&b5_eaReadReq\",\n \"EA Write Req\": \"&b5_eaWriteReq\",\n \"EA AtomicReq\": \"&b5_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b5_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b5_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b5_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b5_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b5_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b5_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b5_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b5_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b5_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b5_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"6\",\n \"Hit Rate\": \"&b6_hitRate\",\n \"Req\": \"&b6_req\",\n \"Read Req\": \"&b6_readReq\",\n \"Write Req\": \"&b6_writeReq\",\n \"AtomicReq\": \"&b6_atomicReq\",\n \"EA Read Req\": \"&b6_eaReadReq\",\n \"EA Write Req\": \"&b6_eaWriteReq\",\n \"EA AtomicReq\": \"&b6_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b6_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b6_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b6_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b6_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b6_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b6_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b6_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b6_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b6_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b6_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"7\",\n \"Hit Rate\": \"&b7_hitRate\",\n \"Req\": \"&b7_req\",\n \"Read Req\": \"&b7_readReq\",\n \"Write Req\": \"&b7_writeReq\",\n \"AtomicReq\": \"&b7_atomicReq\",\n \"EA Read Req\": \"&b7_eaReadReq\",\n \"EA Write Req\": \"&b7_eaWriteReq\",\n \"EA AtomicReq\": \"&b7_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b7_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b7_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b7_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b7_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b7_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b7_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b7_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b7_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b7_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b7_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"8\",\n \"Hit Rate\": \"&b8_hitRate\",\n \"Req\": \"&b8_req\",\n \"Read Req\": \"&b8_readReq\",\n \"Write Req\": \"&b8_writeReq\",\n \"AtomicReq\": \"&b8_atomicReq\",\n \"EA Read Req\": \"&b8_eaReadReq\",\n \"EA Write Req\": \"&b8_eaWriteReq\",\n \"EA AtomicReq\": \"&b8_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b8_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b8_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b8_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b8_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b8_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b8_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b8_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b8_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b8_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b8_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"9\",\n \"Hit Rate\": \"&b9_hitRate\",\n \"Req\": \"&b9_req\",\n \"Read Req\": \"&b9_readReq\",\n \"Write Req\": \"&b9_writeReq\",\n \"AtomicReq\": \"&b9_atomicReq\",\n \"EA Read Req\": \"&b9_eaReadReq\",\n \"EA Write Req\": \"&b9_eaWriteReq\",\n \"EA AtomicReq\": \"&b9_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b9_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b9_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b9_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b9_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b9_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b9_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b9_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b9_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b9_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b9_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"10\",\n \"Hit Rate\": \"&b10_hitRate\",\n \"Req\": \"&b10_req\",\n \"Read Req\": \"&b10_readReq\",\n \"Write Req\": \"&b10_writeReq\",\n \"AtomicReq\": \"&b10_atomicReq\",\n \"EA Read Req\": \"&b10_eaReadReq\",\n \"EA Write Req\": \"&b10_eaWriteReq\",\n \"EA AtomicReq\": \"&b10_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b10_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b10_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b10_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b10_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b10_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b10_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b10_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b10_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b10_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b10_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"11\",\n \"Hit Rate\": \"&b11_hitRate\",\n \"Req\": \"&b11_req\",\n \"Read Req\": \"&b11_readReq\",\n \"Write Req\": \"&b11_writeReq\",\n \"AtomicReq\": \"&b11_atomicReq\",\n \"EA Read Req\": \"&b11_eaReadReq\",\n \"EA Write Req\": \"&b11_eaWriteReq\",\n \"EA AtomicReq\": \"&b11_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b11_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b11_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b11_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b11_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b11_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b11_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b11_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b11_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b11_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b11_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"12\",\n \"Hit Rate\": \"&b12_hitRate\",\n \"Req\": \"&b12_req\",\n \"Read Req\": \"&b12_readReq\",\n \"Write Req\": \"&b12_writeReq\",\n \"AtomicReq\": \"&b12_atomicReq\",\n \"EA Read Req\": \"&b12_eaReadReq\",\n \"EA Write Req\": \"&b12_eaWriteReq\",\n \"EA AtomicReq\": \"&b12_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b12_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b12_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b12_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b12_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b12_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b12_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b12_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b12_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b12_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b12_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"13\",\n \"Hit Rate\": \"&b13_hitRate\",\n \"Req\": \"&b13_req\",\n \"Read Req\": \"&b13_readReq\",\n \"Write Req\": \"&b13_writeReq\",\n \"AtomicReq\": \"&b13_atomicReq\",\n \"EA Read Req\": \"&b13_eaReadReq\",\n \"EA Write Req\": \"&b13_eaWriteReq\",\n \"EA AtomicReq\": \"&b13_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b13_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b13_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b13_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b13_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b13_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b13_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b13_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b13_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b13_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b13_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"14\",\n \"Hit Rate\": \"&b14_hitRate\",\n \"Req\": \"&b14_req\",\n \"Read Req\": \"&b14_readReq\",\n \"Write Req\": \"&b14_writeReq\",\n \"AtomicReq\": \"&b14_atomicReq\",\n \"EA Read Req\": \"&b14_eaReadReq\",\n \"EA Write Req\": \"&b14_eaWriteReq\",\n \"EA AtomicReq\": \"&b14_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b14_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b14_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b14_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b14_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b14_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b14_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b14_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b14_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b14_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b14_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"15\",\n \"Hit Rate\": \"&b15_hitRate\",\n \"Req\": \"&b15_req\",\n \"Read Req\": \"&b15_readReq\",\n \"Write Req\": \"&b15_writeReq\",\n \"AtomicReq\": \"&b15_atomicReq\",\n \"EA Read Req\": \"&b15_eaReadReq\",\n \"EA Write Req\": \"&b15_eaWriteReq\",\n \"EA AtomicReq\": \"&b15_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b15_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b15_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b15_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b15_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b15_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b15_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b15_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b15_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b15_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b15_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - EA Read Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:341", + "Col": 9, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Lat - cycles", + "Selected": true + } + ], + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 73 + }, + "id": 70, + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "Zzw1yR27k" + }, + "rawQuery": true, + "refId": "A", + "target": "${Workload1}.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$addFields\": {\n \"denom\": {\n \"$switch\" : {\n \"branches\": [\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Wave\"]} ,\n \"then\": \"&SQ_WAVES\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Cycle\"]} ,\n \"then\": \"&GRBM_GUI_ACTIVE\"\n },\n {\n \"case\": { \"$eq\": [ $normUnit, \"per Sec\"]} ,\n \"then\": {\"$divide\":[{\"$subtract\": [\"&EndNs\", \"&BeginNs\" ]}, 1000000000]}\n }\n ],\n \"default\": 1\n } \n } \n }},\n\n {\"$group\": {\n \"_id\": null,\n \"b16_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[16]\", \"&TCC_MISS[16]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[16]\"]}, \n { \"$add\": [\"&TCC_HIT[16]\", \"&TCC_MISS[16]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b16_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[16]\"}, \"&denom\"] } \n },\n \"b16_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[16]\"}, \"&denom\"] } \n },\n \"b16_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[16]\"}, \"&denom\"] } \n },\n \"b16_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[16]\"}, \"&denom\"] } \n },\n \"b16_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[16]\"}, \"&denom\"] }\n },\n \"b16_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[16]\"}, \"&denom\"] } \n },\n \"b16_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[16]\"}, \"&denom\"] } \n },\n\n \"b16_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[16]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[16]\", \"&TCC_EA_RDREQ[16]\"]}, null] } },\n \"b16_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[16]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[16]\", \"&TCC_EA_WRREQ[16]\"]}, null] } },\n \"b16_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[16]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[16]\", \"&TCC_EA_ATOMIC[16]\"]}, null]}},\n \"b16_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[16]\"}, \"&denom\"] }},\n \"b16_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[16]\"}, \"&denom\"] }},\n\n \n \"b17_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[17]\", \"&TCC_MISS[17]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[17]\"]}, \n { \"$add\": [\"&TCC_HIT[17]\", \"&TCC_MISS[17]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b17_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[17]\"}, \"&denom\"] } \n },\n \"b17_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[17]\"}, \"&denom\"] } \n },\n \"b17_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[17]\"}, \"&denom\"] } \n },\n \"b17_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[17]\"}, \"&denom\"] } \n },\n \"b17_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[17]\"}, \"&denom\"] }\n },\n \"b17_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[17]\"}, \"&denom\"] } \n },\n \"b17_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[17]\"}, \"&denom\"] } \n },\n \"b17_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[17]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[17]\", \"&TCC_EA_RDREQ[17]\"]}, null] } },\n \"b17_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[17]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[17]\", \"&TCC_EA_WRREQ[17]\"]}, null] } },\n \"b17_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[17]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[17]\", \"&TCC_EA_ATOMIC[17]\"]}, null]}},\n \"b17_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[17]\"}, \"&denom\"] }},\n \"b17_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[17]\"}, \"&denom\"] }},\n\n \n \"b18_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[18]\", \"&TCC_MISS[18]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[18]\"]}, \n { \"$add\": [\"&TCC_HIT[18]\", \"&TCC_MISS[18]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b18_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[18]\"}, \"&denom\"] }\n },\n \"b18_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[18]\"}, \"&denom\"] } \n },\n \"b18_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[18]\"}, \"&denom\"] }\n },\n \"b18_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[18]\"}, \"&denom\"] }\n },\n \"b18_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[18]\"}, \"&denom\"] }\n },\n \"b18_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[18]\"}, \"&denom\"] }\n },\n \"b18_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[18]\"}, \"&denom\"] }\n },\n \"b18_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[18]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[18]\", \"&TCC_EA_RDREQ[18]\"]}, null] } },\n \"b18_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[18]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[18]\", \"&TCC_EA_WRREQ[18]\"]}, null] } },\n \"b18_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[18]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[18]\", \"&TCC_EA_ATOMIC[18]\"]}, null]}},\n \"b18_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[18]\"}, \"&denom\"] }},\n \"b18_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[18]\"}, \"&denom\"] }},\n\n \n \"b19_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[19]\", \"&TCC_MISS[19]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[19]\"]}, \n { \"$add\": [\"&TCC_HIT[19]\", \"&TCC_MISS[19]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b19_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[19]\"}, \"&denom\"] } \n },\n \"b19_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[19]\"}, \"&denom\"] } \n },\n \"b19_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[19]\"}, \"&denom\"] }\n },\n \"b19_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[19]\"}, \"&denom\"] }\n },\n \"b19_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[19]\"}, \"&denom\"] }\n },\n \"b19_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[19]\"}, \"&denom\"] }\n },\n \"b19_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[19]\"}, \"&denom\"] } \n },\n \"b19_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[19]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[19]\", \"&TCC_EA_RDREQ[19]\"]}, null] } },\n \"b19_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[19]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[19]\", \"&TCC_EA_WRREQ[19]\"]}, null] } },\n \"b19_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[19]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[19]\", \"&TCC_EA_ATOMIC[19]\"]}, null]}},\n \"b19_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[19]\"}, \"&denom\"] }},\n \"b19_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[19]\"}, \"&denom\"] }},\n\n \n \"b20_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[20]\", \"&TCC_MISS[20]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[20]\"]}, \n { \"$add\": [\"&TCC_HIT[20]\", \"&TCC_MISS[20]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b20_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[20]\"}, \"&denom\"] } \n },\n \"b20_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[20]\"}, \"&denom\"] } \n },\n \"b20_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[20]\"}, \"&denom\"] }\n },\n \"b20_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[20]\"}, \"&denom\"] } \n },\n \"b20_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[20]\"}, \"&denom\"] } \n },\n \"b20_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[20]\"}, \"&denom\"] } \n },\n \"b20_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[20]\"}, \"&denom\"] } \n },\n \"b20_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[20]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[20]\", \"&TCC_EA_RDREQ[20]\"]}, null] } },\n \"b20_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[20]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[20]\", \"&TCC_EA_WRREQ[20]\"]}, null] } },\n \"b20_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[20]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[20]\", \"&TCC_EA_ATOMIC[20]\"]}, null]}},\n \"b20_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[20]\"}, \"&denom\"] }},\n \"b20_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[20]\"}, \"&denom\"] }},\n\n \n\n \"b21_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[21]\", \"&TCC_MISS[21]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[21]\"]}, \n { \"$add\": [\"&TCC_HIT[21]\", \"&TCC_MISS[21]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b21_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[21]\"}, \"&denom\"] } \n },\n \"b21_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[21]\"}, \"&denom\"] } \n },\n \"b21_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[21]\"}, \"&denom\"] } \n },\n \"b21_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[21]\"}, \"&denom\"] } \n },\n \"b21_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[21]\"}, \"&denom\"] } \n },\n \"b21_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[21]\"}, \"&denom\"] } \n },\n \"b21_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[21]\"}, \"&denom\"] } \n },\n \"b21_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[21]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[21]\", \"&TCC_EA_RDREQ[21]\"]}, null] } },\n \"b21_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[21]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[21]\", \"&TCC_EA_WRREQ[21]\"]}, null] } },\n \"b21_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[21]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[21]\", \"&TCC_EA_ATOMIC[21]\"]}, null]}},\n \"b21_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[21]\"}, \"&denom\"] }},\n \"b21_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[21]\"}, \"&denom\"] }},\n\n \n\n \"b22_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[22]\", \"&TCC_MISS[22]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[22]\"]}, \n { \"$add\": [\"&TCC_HIT[22]\", \"&TCC_MISS[22]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b22_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[22]\"}, \"&denom\"] } \n },\n \"b22_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[22]\"}, \"&denom\"] } \n },\n \"b22_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[22]\"}, \"&denom\"] } \n },\n \"b22_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[22]\"}, \"&denom\"] } \n },\n \"b22_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[22]\"}, \"&denom\"] } \n },\n \"b22_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[22]\"}, \"&denom\"] }\n },\n \"b22_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[22]\"}, \"&denom\"] } \n },\n \"b22_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[22]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[22]\", \"&TCC_EA_RDREQ[22]\"]}, null] } },\n \"b22_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[22]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[22]\", \"&TCC_EA_WRREQ[22]\"]}, null] } },\n \"b22_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[22]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[22]\", \"&TCC_EA_ATOMIC[22]\"]}, null]}},\n \"b22_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[22]\"}, \"&denom\"] }},\n \"b22_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[22]\"}, \"&denom\"] }},\n\n \n\n \"b23_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[23]\", \"&TCC_MISS[23]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[23]\"]}, \n { \"$add\": [\"&TCC_HIT[23]\", \"&TCC_MISS[23]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b23_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[23]\"}, \"&denom\"] } \n },\n \"b23_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[23]\"}, \"&denom\"] } \n },\n \"b23_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[23]\"}, \"&denom\"] } \n },\n \"b23_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[23]\"}, \"&denom\"] } \n },\n \"b23_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[23]\"}, \"&denom\"] } \n },\n \"b23_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[23]\"}, \"&denom\"] }\n },\n \"b23_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[23]\"}, \"&denom\"] } \n },\n \"b23_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[23]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[23]\", \"&TCC_EA_RDREQ[23]\"]}, null] } },\n \"b23_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[23]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[23]\", \"&TCC_EA_WRREQ[23]\"]}, null] } },\n \"b23_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[23]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[23]\", \"&TCC_EA_ATOMIC[23]\"]}, null]}},\n \"b23_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[23]\"}, \"&denom\"] }},\n \"b23_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[23]\"}, \"&denom\"] }},\n\n \n \"b24_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[24]\", \"&TCC_MISS[24]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[24]\"]}, \n { \"$add\": [\"&TCC_HIT[24]\", \"&TCC_MISS[24]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b24_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[24]\"}, \"&denom\"] } \n },\n \"b24_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[24]\"}, \"&denom\"] } \n },\n \"b24_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[24]\"}, \"&denom\"] } \n },\n \"b24_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[24]\"}, \"&denom\"] } \n },\n \"b24_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[24]\"}, \"&denom\"] } \n },\n \"b24_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[24]\"}, \"&denom\"] } \n },\n \"b24_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[24]\"}, \"&denom\"] } \n },\n \"b24_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[24]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[24]\", \"&TCC_EA_RDREQ[24]\"]}, null] } },\n \"b24_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[24]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[24]\", \"&TCC_EA_WRREQ[24]\"]}, null] } },\n \"b24_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[24]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[24]\", \"&TCC_EA_ATOMIC[24]\"]}, null]}},\n \"b24_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[24]\"}, \"&denom\"] }},\n \"b24_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[24]\"}, \"&denom\"] }},\n\n \n \"b25_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[25]\", \"&TCC_MISS[25]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[25]\"]}, \n { \"$add\": [\"&TCC_HIT[25]\", \"&TCC_MISS[25]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b25_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[25]\"}, \"&denom\"] } \n },\n \"b25_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[25]\"}, \"&denom\"] } \n },\n \"b25_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[25]\"}, \"&denom\"] } \n },\n \"b25_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[25]\"}, \"&denom\"] } \n },\n \"b25_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[25]\"}, \"&denom\"] } \n },\n \"b25_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[25]\"}, \"&denom\"] } \n },\n \"b25_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[25]\"}, \"&denom\"] } \n },\n \"b25_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[25]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[25]\", \"&TCC_EA_RDREQ[25]\"]}, null] } },\n \"b25_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[25]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[25]\", \"&TCC_EA_WRREQ[25]\"]}, null] } },\n \"b25_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[25]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[25]\", \"&TCC_EA_ATOMIC[25]\"]}, null]}},\n \"b25_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[25]\"}, \"&denom\"] }},\n \"b25_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[25]\"}, \"&denom\"] }},\n\n \n \"b26_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[26]\", \"&TCC_MISS[26]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[26]\"]}, \n { \"$add\": [\"&TCC_HIT[26]\", \"&TCC_MISS[26]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b26_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[26]\"}, \"&denom\"] } \n },\n \"b26_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[26]\"}, \"&denom\"] } \n },\n \"b26_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[26]\"}, \"&denom\"] } \n },\n \"b26_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[26]\"}, \"&denom\"] } \n },\n \"b26_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[26]\"}, \"&denom\"] } \n },\n \"b26_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[26]\"}, \"&denom\"] } \n },\n \"b26_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[26]\"}, \"&denom\"] } \n },\n \"b26_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[26]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[26]\", \"&TCC_EA_RDREQ[26]\"]}, null] } },\n \"b26_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[26]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[26]\", \"&TCC_EA_WRREQ[26]\"]}, null] } },\n \"b26_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[26]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[26]\", \"&TCC_EA_ATOMIC[26]\"]}, null]}},\n \"b26_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[26]\"}, \"&denom\"] }},\n \"b26_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[26]\"}, \"&denom\"] }},\n\n \n \"b27_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[27]\", \"&TCC_MISS[27]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[27]\"]}, \n { \"$add\": [\"&TCC_HIT[27]\", \"&TCC_MISS[27]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b27_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[27]\"}, \"&denom\"] } \n },\n \"b27_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[27]\"}, \"&denom\"] } \n },\n \"b27_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[27]\"}, \"&denom\"] } \n },\n \"b27_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[27]\"}, \"&denom\"] } \n },\n \"b27_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[27]\"}, \"&denom\"] } \n },\n \"b27_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[27]\"}, \"&denom\"] } \n },\n \"b27_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[27]\"}, \"&denom\"] } \n },\n \"b27_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[27]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[27]\", \"&TCC_EA_RDREQ[27]\"]}, null] } },\n \"b27_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[27]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[27]\", \"&TCC_EA_WRREQ[27]\"]}, null] } },\n \"b27_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[27]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[27]\", \"&TCC_EA_ATOMIC[27]\"]}, null]}},\n \"b27_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[27]\"}, \"&denom\"] }},\n \"b27_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[27]\"}, \"&denom\"] }},\n\n \n \"b28_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[28]\", \"&TCC_MISS[28]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[28]\"]}, \n { \"$add\": [\"&TCC_HIT[28]\", \"&TCC_MISS[28]\"] }\n ] \n },\n null \n ] \n }\n },\n \"b28_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[28]\"}, \"&denom\"] } \n },\n \"b28_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[28]\"}, \"&denom\"] } \n },\n \"b28_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[28]\"}, \"&denom\"] } \n },\n \"b28_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[28]\"}, \"&denom\"] } \n },\n \"b28_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[28]\"}, \"&denom\"] } \n },\n \"b28_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[28]\"}, \"&denom\"] } \n },\n \"b28_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[28]\"}, \"&denom\"] } \n },\n \"b28_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[28]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[28]\", \"&TCC_EA_RDREQ[28]\"]}, null] } },\n \"b28_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[28]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[28]\", \"&TCC_EA_WRREQ[28]\"]}, null] } },\n \"b28_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[28]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[28]\", \"&TCC_EA_ATOMIC[28]\"]}, null]}},\n \"b28_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[28]\"}, \"&denom\"] }},\n \"b28_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[28]\"}, \"&denom\"] }},\n\n \n \"b29_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[29]\", \"&TCC_MISS[29]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[29]\"]}, \n { \"$add\": [\"&TCC_HIT[29]\", \"&TCC_MISS[29]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b29_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[29]\"}, \"&denom\"] } \n },\n \"b29_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[29]\"}, \"&denom\"] } \n },\n \"b29_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[29]\"}, \"&denom\"] } \n },\n \"b29_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[29]\"}, \"&denom\"] } \n },\n \"b29_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[29]\"}, \"&denom\"] } \n },\n \"b29_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[29]\"}, \"&denom\"] }\n },\n \"b29_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[29]\"}, \"&denom\"] } \n },\n \"b29_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[29]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[29]\", \"&TCC_EA_RDREQ[29]\"]}, null] } },\n \"b29_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[29]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[29]\", \"&TCC_EA_WRREQ[29]\"]}, null] } },\n \"b29_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[29]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[29]\", \"&TCC_EA_ATOMIC[29]\"]}, null]}},\n \"b29_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[29]\"}, \"&denom\"] }},\n \"b29_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[29]\"}, \"&denom\"] }},\n\n \n \"b30_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[30]\", \"&TCC_MISS[30]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[30]\"]}, \n { \"$add\": [\"&TCC_HIT[30]\", \"&TCC_MISS[30]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b30_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[30]\"}, \"&denom\"] } \n },\n \"b30_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[30]\"}, \"&denom\"] } \n },\n \"b30_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[30]\"}, \"&denom\"] } \n },\n \"b30_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[30]\"}, \"&denom\"] } \n },\n \"b30_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[30]\"}, \"&denom\"] } \n },\n \"b30_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[30]\"}, \"&denom\"] } \n },\n \"b30_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[30]\"}, \"&denom\"] } \n },\n \"b30_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[30]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[30]\", \"&TCC_EA_RDREQ[30]\"]}, null] } },\n \"b30_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[30]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[30]\", \"&TCC_EA_WRREQ[30]\"]}, null] } },\n \"b30_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[30]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[30]\", \"&TCC_EA_ATOMIC[30]\"]}, null]}},\n \"b30_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[30]\"}, \"&denom\"] }},\n \"b30_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[30]\"}, \"&denom\"] }},\n\n \n \"b31_hitRate\": {\n \"$avg\":{ \n \"$cond\": [ \n {\"$ne\": [{ \"$add\": [\"&TCC_HIT[31]\", \"&TCC_MISS[31]\"] }, 0]}, \n {\"$divide\": [\n { \"$multiply\": [100, \"&TCC_HIT[31]\"]}, \n { \"$add\": [\"&TCC_HIT[31]\", \"&TCC_MISS[31]\"] }\n ] \n },\n null\n ] \n }\n },\n \"b31_req\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_REQ[31]\"}, \"&denom\"] } \n },\n \"b31_readReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_READ[31]\"}, \"&denom\"] } \n },\n \"b31_writeReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_WRITE[31]\"}, \"&denom\"] } \n },\n \"b31_atomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_ATOMIC[31]\"}, \"&denom\"] } \n },\n \"b31_eaReadReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ[31]\"}, \"&denom\"] } \n },\n \"b31_eaWriteReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ[31]\"}, \"&denom\"] } \n },\n \"b31_eaAtomicReq\": {\n \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_ATOMIC[31]\"}, \"&denom\"] }\n },\n \"b31_eaReadLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_RDREQ[31]\", 0]}, {\"$divide\": [\"&TCC_EA_RDREQ_LEVEL[31]\", \"&TCC_EA_RDREQ[31]\"]}, null] } },\n \"b31_eaWriteLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_WRREQ[31]\", 0]}, {\"$divide\": [\"&TCC_EA_WRREQ_LEVEL[31]\", \"&TCC_EA_WRREQ[31]\"]}, null] } },\n \"b31_eaAtomicLat\": { \"$avg\": {\"$cond\": [{\"$ne\": [\"&TCC_EA_ATOMIC[31]\", 0]}, {\"$divide\": [\"&TCC_EA_ATOMIC_LEVEL[31]\", \"&TCC_EA_ATOMIC[31]\"]}, null]}},\n \"b31_ea_read_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_IO_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_read_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_GMI_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_read_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_RDREQ_DRAM_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_io_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_IO_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_gmi_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_GMI_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_dram_credit\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_EA_WRREQ_DRAM_CREDIT_STALL[31]\"}, \"&denom\"] }},\n \"b31_ea_write_stall_too_many\": { \"$avg\":{ \"$divide\":[{\"$toInt\": \"&TCC_TOO_MANY_EA_WRREQS_STALL[31]\"}, \"&denom\"] }}\n\n \n }},\n {\"$set\": {\n \"array\": [\n {\n \"Channel\": \"16\",\n \"Hit Rate\": \"&b16_hitRate\",\n \"Req\": \"&b16_req\",\n \"Read Req\": \"&b16_readReq\",\n \"Write Req\": \"&b16_writeReq\",\n \"AtomicReq\": \"&b16_atomicReq\",\n \"EA Read Req\": \"&b16_eaReadReq\",\n \"EA Write Req\": \"&b16_eaWriteReq\",\n \"EA AtomicReq\": \"&b16_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b16_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b16_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b16_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b16_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b16_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b16_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b16_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b16_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b16_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b16_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"17\",\n \"Hit Rate\": \"&b17_hitRate\",\n \"Req\": \"&b17_req\",\n \"Read Req\": \"&b17_readReq\",\n \"Write Req\": \"&b17_writeReq\",\n \"AtomicReq\": \"&b17_atomicReq\",\n \"EA Read Req\": \"&b17_eaReadReq\",\n \"EA Write Req\": \"&b17_eaWriteReq\",\n \"EA AtomicReq\": \"&b17_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b17_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b17_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b17_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b17_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b17_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b17_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b17_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b17_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b17_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b17_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"18\",\n \"Hit Rate\": \"&b18_hitRate\",\n \"Req\": \"&b18_req\",\n \"Read Req\": \"&b18_readReq\",\n \"Write Req\": \"&b18_writeReq\",\n \"AtomicReq\": \"&b18_atomicReq\",\n \"EA Read Req\": \"&b18_eaReadReq\",\n \"EA Write Req\": \"&b18_eaWriteReq\",\n \"EA AtomicReq\": \"&b18_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b18_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b18_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b18_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b18_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b18_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b18_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b18_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b18_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b18_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b18_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"19\",\n \"Hit Rate\": \"&b19_hitRate\",\n \"Req\": \"&b19_req\",\n \"Read Req\": \"&b19_readReq\",\n \"Write Req\": \"&b19_writeReq\",\n \"AtomicReq\": \"&b19_atomicReq\",\n \"EA Read Req\": \"&b19_eaReadReq\",\n \"EA Write Req\": \"&b19_eaWriteReq\",\n \"EA AtomicReq\": \"&b19_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b19_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b19_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b19_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b19_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b19_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b19_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b19_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b19_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b19_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b19_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"20\",\n \"Hit Rate\": \"&b20_hitRate\",\n \"Req\": \"&b20_req\",\n \"Read Req\": \"&b20_readReq\",\n \"Write Req\": \"&b20_writeReq\",\n \"AtomicReq\": \"&b20_atomicReq\",\n \"EA Read Req\": \"&b20_eaReadReq\",\n \"EA Write Req\": \"&b20_eaWriteReq\",\n \"EA AtomicReq\": \"&b20_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b20_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b20_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b20_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b20_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b20_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b20_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b20_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b20_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b20_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b20_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"21\",\n \"Hit Rate\": \"&b21_hitRate\",\n \"Req\": \"&b21_req\",\n \"Read Req\": \"&b21_readReq\",\n \"Write Req\": \"&b21_writeReq\",\n \"AtomicReq\": \"&b21_atomicReq\",\n \"EA Read Req\": \"&b21_eaReadReq\",\n \"EA Write Req\": \"&b21_eaWriteReq\",\n \"EA AtomicReq\": \"&b21_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b21_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b21_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b21_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b21_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b21_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b21_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b21_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b21_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b21_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b21_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"22\",\n \"Hit Rate\": \"&b22_hitRate\",\n \"Req\": \"&b22_req\",\n \"Read Req\": \"&b22_readReq\",\n \"Write Req\": \"&b22_writeReq\",\n \"AtomicReq\": \"&b22_atomicReq\",\n \"EA Read Req\": \"&b22_eaReadReq\",\n \"EA Write Req\": \"&b22_eaWriteReq\",\n \"EA AtomicReq\": \"&b22_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b22_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b22_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b22_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b22_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b22_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b22_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b22_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b22_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b22_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b22_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"23\",\n \"Hit Rate\": \"&b23_hitRate\",\n \"Req\": \"&b23_req\",\n \"Read Req\": \"&b23_readReq\",\n \"Write Req\": \"&b23_writeReq\",\n \"AtomicReq\": \"&b23_atomicReq\",\n \"EA Read Req\": \"&b23_eaReadReq\",\n \"EA Write Req\": \"&b23_eaWriteReq\",\n \"EA AtomicReq\": \"&b23_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b23_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b23_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b23_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b23_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b23_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b23_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b23_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b23_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b23_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b23_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"24\",\n \"Hit Rate\": \"&b24_hitRate\",\n \"Req\": \"&b24_req\",\n \"Read Req\": \"&b24_readReq\",\n \"Write Req\": \"&b24_writeReq\",\n \"AtomicReq\": \"&b24_atomicReq\",\n \"EA Read Req\": \"&b24_eaReadReq\",\n \"EA Write Req\": \"&b24_eaWriteReq\",\n \"EA AtomicReq\": \"&b24_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b24_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b24_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b24_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b24_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b24_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b24_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b24_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b24_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b24_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b24_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"25\",\n \"Hit Rate\": \"&b25_hitRate\",\n \"Req\": \"&b25_req\",\n \"Read Req\": \"&b25_readReq\",\n \"Write Req\": \"&b25_writeReq\",\n \"AtomicReq\": \"&b25_atomicReq\",\n \"EA Read Req\": \"&b25_eaReadReq\",\n \"EA Write Req\": \"&b25_eaWriteReq\",\n \"EA AtomicReq\": \"&b25_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b25_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b25_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b25_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b25_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b25_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b25_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b25_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b25_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b25_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b25_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"26\",\n \"Hit Rate\": \"&b26_hitRate\",\n \"Req\": \"&b26_req\",\n \"Read Req\": \"&b26_readReq\",\n \"Write Req\": \"&b26_writeReq\",\n \"AtomicReq\": \"&b26_atomicReq\",\n \"EA Read Req\": \"&b26_eaReadReq\",\n \"EA Write Req\": \"&b26_eaWriteReq\",\n \"EA AtomicReq\": \"&b26_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b26_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b26_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b26_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b26_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b26_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b26_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b26_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b26_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b26_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b26_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n\n },\n {\n \"Channel\": \"27\",\n \"Hit Rate\": \"&b27_hitRate\",\n \"Req\": \"&b27_req\",\n \"Read Req\": \"&b27_readReq\",\n \"Write Req\": \"&b27_writeReq\",\n \"AtomicReq\": \"&b27_atomicReq\",\n \"EA Read Req\": \"&b27_eaReadReq\",\n \"EA Write Req\": \"&b27_eaWriteReq\",\n \"EA AtomicReq\": \"&b27_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b27_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b27_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b27_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b27_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b27_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b27_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b27_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b27_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b27_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b27_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"28\",\n \"Hit Rate\": \"&b28_hitRate\",\n \"Req\": \"&b28_req\",\n \"Read Req\": \"&b28_readReq\",\n \"Write Req\": \"&b28_writeReq\",\n \"AtomicReq\": \"&b28_atomicReq\",\n \"EA Read Req\": \"&b28_eaReadReq\",\n \"EA Write Req\": \"&b28_eaWriteReq\",\n \"EA AtomicReq\": \"&b28_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b28_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b28_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b28_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b28_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b28_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b28_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b28_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b28_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b28_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b28_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"29\",\n \"Hit Rate\": \"&b29_hitRate\",\n \"Req\": \"&b29_req\",\n \"Read Req\": \"&b29_readReq\",\n \"Write Req\": \"&b29_writeReq\",\n \"AtomicReq\": \"&b29_atomicReq\",\n \"EA Read Req\": \"&b29_eaReadReq\",\n \"EA Write Req\": \"&b29_eaWriteReq\",\n \"EA AtomicReq\": \"&b29_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b29_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b29_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b29_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b29_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b29_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b29_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b29_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b29_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b29_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b29_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"30\",\n \"Hit Rate\": \"&b30_hitRate\",\n \"Req\": \"&b30_req\",\n \"Read Req\": \"&b30_readReq\",\n \"Write Req\": \"&b30_writeReq\",\n \"AtomicReq\": \"&b30_atomicReq\",\n \"EA Read Req\": \"&b30_eaReadReq\",\n \"EA Write Req\": \"&b30_eaWriteReq\",\n \"EA AtomicReq\": \"&b30_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b30_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b30_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b30_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b30_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b30_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b30_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b30_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b30_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b30_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b30_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n },\n {\n \"Channel\": \"31\",\n \"Hit Rate\": \"&b31_hitRate\",\n \"Req\": \"&b31_req\",\n \"Read Req\": \"&b31_readReq\",\n \"Write Req\": \"&b31_writeReq\",\n \"AtomicReq\": \"&b31_atomicReq\",\n \"EA Read Req\": \"&b31_eaReadReq\",\n \"EA Write Req\": \"&b31_eaWriteReq\",\n \"EA AtomicReq\": \"&b31_eaAtomicReq\",\n \"EA Read Lat - cycles\": \"&b31_eaReadLat\",\n \"EA Write Lat - cycles\": \"&b31_eaWriteLat\",\n \"EA Atomic Lat - cycles\": \"&b31_eaAtomicLat\",\n \"EA Read Stall - IO\": \"&b31_ea_read_stall_io_credit\",\n \"EA Read Stall - GMI\": \"&b31_ea_read_stall_gmi_credit\",\n \"EA Read Stall - DRAM\": \"&b31_ea_read_stall_dram_credit\",\n \"EA Write Stall - IO\": \"&b31_ea_write_stall_io_credit\",\n \"EA Write Stall - GMI\": \"&b31_ea_write_stall_gmi_credit\",\n \"EA Write Stall - DRAM\": \"&b31_ea_write_stall_dram_credit\",\n \"EA Write Stall - Starve\": \"&b31_ea_write_stall_too_many\",\n \"Units\": \"&denom\"\n\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "type": "table" + } + ], + "title": "L2 - EA Read Latency (Channel 16-31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 10, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 81 + }, + "id": 93, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 10, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 81 + }, + "id": 94, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Latency (Channel 16 - 31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 11, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Atomic Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 89 + }, + "id": 187, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Latency (Channel 0 - 15) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 11, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Atomic Lat - cycles", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 89 + }, + "id": 201, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Atomic Latency (Channel 16 - 31) (Cycles)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 12, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 97 + }, + "id": 220, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - I/O (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 12, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 97 + }, + "id": 227, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - I/O (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 13, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 105 + }, + "id": 221, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - GMI (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 13, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 105 + }, + "id": 228, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - GMI (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 14, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 113 + }, + "id": 222, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - HBM (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 14, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Read Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 113 + }, + "id": 229, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Read Stall - HBM (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 15, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 223, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - I/O (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 15, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - IO", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 121 + }, + "id": 230, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - I/O (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 16, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 129 + }, + "id": 225, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - GMI (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 16, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - GMI", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 129 + }, + "id": 231, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - GMI (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 17, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 137 + }, + "id": 224, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - HBM (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 17, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - DRAM", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 137 + }, + "id": 232, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Stall - HBM (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 18, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - Starve", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 145 + }, + "id": 226, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 68, + "refId": "A" + } + ], + "title": "L2 - EA Write Starve (Channel 0 - 15) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + }, + { + "Aggregate": "last", + "BarPadding": 10, + "BaseLineColor": "#ff0000", + "BaseLineWidth": 1, + "CurveType": "Monotone", + "DateFormat": "YYYY-MM-DD HH:mm:ss", + "DateTimeColName": "date", + "DotColor": "white", + "DotSize": 10, + "EvenRowColor": "rgba(61, 61, 64, 0.78)", + "FlashHighLimitBar": false, + "FlashLowLimitBar": false, + "GroupCols": 0, + "GroupGap": 5, + "GroupLabelColor": "#ffffff", + "GroupLabelFontSize": "200%", + "GroupNameFilter": "", + "GroupRenamingRules": [], + "GroupSortString": "", + "HighAxisColor": "#ffffff", + "HighAxisWidth": 1, + "HighBarColor": "rgb(120, 128, 0)", + "HighLimitBarColor": "#ff0000", + "HighLimitBarFlashColor": "#ffa500", + "HighLimitBarFlashTimeout": 1000, + "HighLimitLineColor": "#ff0000", + "HighLmitLineWidth": 1, + "HighSideMargin": 22, + "Horizontal": false, + "LabelColName": "Channel", + "LabelColor": "#ffffff", + "LabelFontSize": "70%", + "LabelNameFilter": "", + "LabelRenamingRules": [], + "LableAngle": 0, + "Legend": false, + "LineColor": "blue", + "LineWidth": 5, + "Links": [], + "LowAxisColor": "#ffffff", + "LowAxisWidth": 1, + "LowBarColor": "teal", + "LowLimitBarColor": "#ff0000", + "LowLimitBarFlashColor": "#ffa500", + "LowLimitBarFlashTimeout": 200, + "LowLimitLineColor": "#ff0000", + "LowLmitLineWidth": 1, + "LowSideMargin": 50, + "MaxLineColor": "rgb(74, 232, 12)", + "MaxLineWidth": 1, + "MinLineColor": "#ff0000", + "MinLineWidth": 1, + "MultiBarPadding": 10, + "OddRowColor": "rgba(33, 33, 34, 0.92)", + "OutOfRangeLabelColor": "#ffffff", + "OutlineColor": "rgba(245, 255, 0, 0.1)", + "RecolorHighLimitBar": false, + "RecolorLowLimitBar": false, + "RecolorRules": [], + "ScaleFactor": 1, + "ShowBars": true, + "ShowBaseLine": false, + "ShowDate": false, + "ShowGroupLabels": true, + "ShowHighLimitLine": false, + "ShowLabels": true, + "ShowLeftAxis": true, + "ShowLines": false, + "ShowLowLimitLine": false, + "ShowMaxLine": false, + "ShowMinLine": false, + "ShowRightAxis": true, + "ShowValues": true, + "SortColName": "value", + "SortDirection": "ascending", + "TZOffsetHours": 0, + "ToolTipFontSize": "100%", + "ToolTipType": "", + "TooltipDateFormat": "YYYY-MM-DD HH:mm:ss", + "VGroupGap": 5, + "ValueColName": "", + "ValueColor": "#ffffff", + "ValueDecimals": 0, + "ValueFontSize": "70%", + "ValuePosition": "top", + "Values": [ + { + "$$hashKey": "object:277", + "Col": 18, + "HighBarColor": "rgb(120, 128, 0)", + "LowBarColor": "teal", + "Name": "EA Write Stall - Starve", + "Selected": true + } + ], + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 145 + }, + "id": 233, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 70, + "refId": "A" + } + ], + "title": "L2 - EA Write Starve (Channel 16 - 31) (Cycles $normUnit)", + "type": "michaeldmoore-multistat-panel" + } + ], + "targets": [ + { + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "refId": "A" + } + ], + "title": "L2 Cache (per Channel)", + "type": "row" + } + ], + "refresh": "", + "schemaVersion": 34, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": true, + "text": "\"per Wave\"", + "value": "\"per Wave\"" + }, + "hide": 0, + "includeAll": false, + "label": "Normalization", + "multi": false, + "name": "normUnit", + "options": [ + { + "selected": true, + "text": "\"per Wave\"", + "value": "\"per Wave\"" + }, + { + "selected": false, + "text": "\"per Cycle\"", + "value": "\"per Cycle\"" + }, + { + "selected": false, + "text": "\"per Sec\"", + "value": "\"per Sec\"" + }, + { + "selected": false, + "text": "\"per Kernel\"", + "value": "\"per Kernel\"" + } + ], + "query": "\"per Wave\",\n\"per Cycle\",\n\"per Sec\",\n\"per Kernel\"", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "L2 Channels", + "multi": false, + "name": "L2Banks", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "8", + "value": "8" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#SEs", + "multi": false, + "name": "numSE", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "104", + "value": "104" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#CUs", + "multi": false, + "name": "numCU", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Max Waves/CU", + "multi": false, + "name": "maxWavesPerCU", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1700", + "value": "1700" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "SCLK (MHz)", + "multi": false, + "name": "sclk", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "56", + "value": "56" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "#SQC", + "multi": false, + "name": "numSQC", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1638.4", + "value": "1638.4" + }, + "definition": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "HBM BW (GB/s)", + "multi": false, + "name": "hbmBW", + "options": [], + "query": "$Workload1.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "omniperf_gfxWL_test_gemm_BF16_profile10k_mi200", + "value": "omniperf_gfxWL_test_gemm_BF16_profile10k_mi200" + }, + "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Workload", + "multi": false, + "name": "Workload1", + "options": [], + "query": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "148579", + "value": "148579" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Kernel Cycles", + "multi": false, + "name": "kernelBusyCycles", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "63", + "value": "63" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Active CUs", + "multi": false, + "name": "numActiveCUs", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "description": "Defaults to all DispatchIDs", + "hide": 2, + "includeAll": true, + "label": "Filtered Dispatch ID", + "multi": false, + "name": "DispatchIDFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "refresh": 1, + "regex": "${DispatchID:text}", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "", + "value": "" + }, + "description": "Desired DispatchID filters as regex ex. (1|18)", + "hide": 0, + "label": "Dispatch Filter", + "name": "DispatchID", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "current": { + "selected": false, + "text": "0", + "value": "0" + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "GCD", + "multi": false, + "name": "gpuFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 3, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "definition": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "hide": 0, + "includeAll": true, + "label": "Kernels", + "multi": true, + "name": "KernelNameFilter", + "options": [], + "query": "$Workload1.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "miperf_asw_vcopy_mi200", + "value": "miperf_asw_vcopy_mi200" + }, + "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Baseline Workload", + "multi": false, + "name": "Workload2", + "options": [], + "query": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "84", + "value": "84" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] }, 8] }] }, $numCU2] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline ActiveCUs", + "multi": false, + "name": "numActiveCUs2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter2:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU2] }, 8] }] }, $numCU2] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "description": "Defaults to all DispatchIDs", + "hide": 2, + "includeAll": true, + "label": "Baseline Dispatch IDs", + "multi": false, + "name": "DispatchIDFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$match\": {\n \"gpu-id\": { \"$in\": [${gpuFilter2:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter2:json}}\n }},\n {\"$group\": {\n \"_id\": \"&Index\"\n }},\n {\"$sort\": {\n \"_id\": 1\n }}\n]);", + "refresh": 1, + "regex": "${DispatchID2:text}", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "", + "value": "" + }, + "description": "Desired DispatchID filters as regex ex. (1|18)", + "hide": 0, + "label": "Baseline Dispatch Filter", + "name": "DispatchID2", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "current": { + "selected": false, + "text": "0", + "value": "0" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "hide": 0, + "includeAll": false, + "label": "Baseline GCD", + "multi": false, + "name": "gpuFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&gpu-id\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "amd-miperf-data-plugin", + "uid": "oVK0I__nk" + }, + "definition": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "hide": 0, + "includeAll": true, + "label": "Baseline Kernels", + "multi": true, + "name": "KernelNameFilter2", + "options": [], + "query": "$Workload2.pmc_perf.aggregate([\n {\"$group\": {\n \"_id\": \"&KernelName\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "System Info" + ], + "value": [ + "System Info" + ] + }, + "hide": 0, + "includeAll": false, + "label": "Comparison Panels", + "multi": true, + "name": "select", + "options": [ + { + "selected": true, + "text": "System Info", + "value": "System Info" + }, + { + "selected": false, + "text": "System Speed-of-Light", + "value": "System Speed-of-Light" + }, + { + "selected": false, + "text": "Roofline", + "value": "Roofline" + }, + { + "selected": false, + "text": "Command Processor", + "value": "Command Processor" + }, + { + "selected": false, + "text": "Shader Processor Input", + "value": "Shader Processor Input" + }, + { + "selected": false, + "text": "Wavefront", + "value": "Wavefront" + }, + { + "selected": false, + "text": "Compute Pipeline", + "value": "Compute Pipeline" + }, + { + "selected": false, + "text": "Instruction Mix", + "value": "Instruction Mix" + }, + { + "selected": false, + "text": "Local Data Share", + "value": "Local Data Share" + }, + { + "selected": false, + "text": "Instruction Cache", + "value": "Instruction Cache" + }, + { + "selected": false, + "text": "Scalar L1D Cache", + "value": "Scalar L1D Cache" + }, + { + "selected": false, + "text": "Texture Addr and Data", + "value": "Texture Addr and Data" + }, + { + "selected": false, + "text": "Vector L1D Cache", + "value": "Vector L1D Cache" + }, + { + "selected": false, + "text": "L2 Cache", + "value": "L2 Cache" + } + ], + "query": "System Info, \nSystem Speed-of-Light, \nRoofline,\nCommand Processor, \nShader Processor Input, \nWavefront,\nCompute Pipeline, \nInstruction Mix,\nLocal Data Share, \nInstruction Cache, \nScalar L1D Cache, \nTexture Addr and Data, \nVector L1D Cache,\nL2 Cache", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline L2 Channels", + "multi": false, + "name": "L2Banks2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&L2Banks\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "8", + "value": "8" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #SEs", + "multi": false, + "name": "numSE2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSE\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "110", + "value": "110" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #CUs", + "multi": false, + "name": "numCU2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "32", + "value": "32" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline Max Waves/CU", + "multi": false, + "name": "maxWavesPerCU2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&maxWavesPerCU\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1700", + "value": "1700" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline SCLK (MHz)", + "multi": false, + "name": "sclk2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&sclk\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "56", + "value": "56" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline #SQC", + "multi": false, + "name": "numSQC2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&numSQC\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1638.4", + "value": "1638.4" + }, + "definition": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "Baseline HBM BW (GB/s)", + "multi": false, + "name": "hbmBW2", + "options": [], + "query": "$Workload2.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&hbmBW\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "mi200", + "value": "mi200" + }, + "definition": "${Workload1}.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "hide": 2, + "includeAll": false, + "label": "SOC", + "multi": false, + "name": "soc", + "options": [], + "query": "${Workload1}.sysinfo.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "5", + "value": "5" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "TopN", + "options": [ + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": true, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "15", + "value": "15" + }, + { + "selected": false, + "text": "20", + "value": "20" + }, + { + "selected": false, + "text": "50", + "value": "50" + }, + { + "selected": false, + "text": "100", + "value": "100" + } + ], + "query": "1,5,10,15,20,50,100", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "2021-11-04T14:21:39.749Z", + "to": "2021-11-08T14:21:39.749Z" + }, + "timepicker": {}, + "timezone": "", + "title": "Omniperf_v1.0.7_pub", + "uid": "MIPerf_v1_0_06302022112", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index bd4d92edb6..35db4b3add 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,8 +24,8 @@ services: image: mongo restart: always environment: - MONGO_INITDB_ROOT_USERNAME: amd - MONGO_INITDB_ROOT_PASSWORD: amd123 + MONGO_INITDB_ROOT_USERNAME: temp + MONGO_INITDB_ROOT_PASSWORD: temp123 volumes: - grafana-mongo-db:/data/db ports: diff --git a/grafana_plugins/svg_plugin/package.json b/grafana_plugins/svg_plugin/package.json index 1908ef09ea..fb88025c1d 100644 --- a/grafana_plugins/svg_plugin/package.json +++ b/grafana_plugins/svg_plugin/package.json @@ -13,19 +13,19 @@ "author": "Audacious Software Group", "license": "MIT", "devDependencies": { - "@grafana/data": "latest", "@grafana/toolkit": "latest", - "@grafana/ui": "latest", - "emotion": "10.0.27" + "emotion": "10.0.27", + "react-monaco-editor": "^0.44.0", + "tslib": "^2.3.1" }, "engines": { "node": ">=14" }, "dependencies": { - "@grafana/runtime": "^8.1.1", - "@svgdotjs/svg.js": "^3.1.1", - "react-monaco-editor": "^0.44.0", - "tslib": "^2.3.1" + "@grafana/runtime": "9.1.2", + "@grafana/data": "9.1.2", + "@grafana/ui": "9.1.2", + "@svgdotjs/svg.js": "^3.1.1" }, "_comments": "Dependencies are not included as part of Omniperf. It's the user's responsibility to accept any licensing implications before building the project." } diff --git a/pyproject.toml b/pyproject.toml index 08ec85685d..933c110895 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,5 +31,5 @@ pythonpath = [ ".", "src", "src/utils", - "src/omniperf_cli/utils" + "src/omniperf_analyze/utils" ] diff --git a/requirements.txt b/requirements.txt index 5ba33d4a76..69beb6c77b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,8 +2,8 @@ astunparse==1.6.2 colorlover dash matplotlib -numpy -pandas +numpy>=1.17.5 +pandas>=1.4.3 pymongo pyyaml tabulate diff --git a/sample/vcopy.cpp b/sample/vcopy.cpp index 91412e6180..0eed48711a 100644 --- a/sample/vcopy.cpp +++ b/sample/vcopy.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +using namespace std; #define HIP_ASSERT(x) (assert((x)==hipSuccess)) @@ -19,7 +21,7 @@ __global__ void vecCopy(double *a, double *b, double *c, int n,int stride) void usage() { - printf("\nUsage: vcopy [n] [blocksize]\n\n"); + printf("\nUsage: vcopy [n] [blocksize] {dev}\n\n"); exit(1); return; } @@ -45,13 +47,24 @@ int main( int argc, char* argv[] ) double *d_c; int stride = 1; + int devId = 0; if(argc < 3) usage(); + if(argc > 3) + devId = atoi(argv[3]); n = atoi(argv[1]); blockSize = atoi(argv[2]); + int numGpuDevices; + HIP_ASSERT(hipGetDeviceCount(&numGpuDevices)); + if(devId >= numGpuDevices) + devId = 0; + HIP_ASSERT(hipSetDevice(devId)); + + printf("vcopy testing on GCD %d\n", devId); + assert(n > 0); assert(blockSize > 0); diff --git a/src/common.py b/src/common.py index 8a0fbb2e43..8268608b4a 100644 --- a/src/common.py +++ b/src/common.py @@ -22,8 +22,10 @@ import os import sys +import io from pathlib import Path import subprocess +import shutil OMNIPERF_HOME = Path(__file__).resolve().parent @@ -31,10 +33,51 @@ OMNIPERF_HOME = Path(__file__).resolve().parent PROG = "omniperf" SOC_LIST = ["mi50", "mi100", "mi200", "vega10"] DISTRO_MAP = {"platform:el8": "rhel8", "15.3": "sle15sp3", "20.04": "ubuntu20_04"} -version = os.path.join(OMNIPERF_HOME.parent, "VERSION") -try: - with open(version, "r") as file: - VER = file.read().replace("\n", "") -except EnvironmentError: - print("ERROR: Cannot find VERSION file at {}".format(version)) - sys.exit(1) + + +def getVersion(): + # symantic version info + version = os.path.join(OMNIPERF_HOME.parent, "VERSION") + try: + with open(version, "r") as file: + VER = file.read().replace("\n", "") + except EnvironmentError: + print("ERROR: Cannot find VERSION file at {}".format(version)) + sys.exit(1) + + # git version info + gitDir = os.path.join(OMNIPERF_HOME.parent, ".git") + if (shutil.which("git") is not None) and os.path.exists(gitDir): + gitQuery = subprocess.run( + ["git", "log", "--pretty=format:%h", "-n", "1"], + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, + ) + if gitQuery.returncode != 0: + SHA = "unknown" + MODE = "unknown" + else: + SHA = gitQuery.stdout.decode("utf-8") + MODE = "dev" + else: + shaFile = os.path.join(OMNIPERF_HOME.parent, "VERSION.sha") + try: + with open(shaFile, "r") as file: + SHA = file.read().replace("\n", "") + except EnvironmentError: + print("ERROR: Cannot find VERSION.sha file at {}".format(shaFile)) + sys.exit(1) + + MODE = "release" + + versionData = {"version": VER, "sha": SHA, "mode": MODE} + return versionData + + +def getVersionDisplay(version, sha, mode): + buf = io.StringIO() + print("-" * 40, file=buf) + print("Omniperf version: %s (%s)" % (version, mode), file=buf) + print("Git revision: %s" % sha, file=buf) + print("-" * 40, file=buf) + return buf.getvalue() diff --git a/src/docs/README b/src/docs/README new file mode 100644 index 0000000000..d888e91be2 --- /dev/null +++ b/src/docs/README @@ -0,0 +1,6 @@ +This subdirectory houses the input markup for Omniperf documentation using +Sphinx. Changes committed here on the main branch will automatically be built +and pushed live using a Github action. + +You can build a local copy of the documentation in this directory using +"make html" assuming you have the necessary sphinx dependencies installed. diff --git a/src/docs/analysis.md b/src/docs/analysis.md new file mode 100644 index 0000000000..f355ba7c67 --- /dev/null +++ b/src/docs/analysis.md @@ -0,0 +1,725 @@ +# Analysis + +```eval_rst +.. toctree:: + :glob: + :maxdepth: 4 +``` +Omniperf offers several ways to interact with the metrics it generates from profiling. The option you choose will likey be influnced by your familiarity with the profiled application, computing enviroment, and experience with Omniperf. + +While analyzing with the CLI offers quick and straightforward access to Omniperf metrics from terminal, the GUI adds an extra layer of styling and interactiveness some users may prefer. + +See sections below for more information on each. + +## CLI Analysis +> Profiling results from the [aforementioned vcopy workload](https://amdresearch.github.io/omniperf/profiling.html#workload-compilation) will be used in the following sections to demonstrate the use of Omniperf in MI GPU performance analysis. Unless otherwise noted, the performance analysis is done on the MI200 platform. + +### Features + +- All Omniperf built-in metrics. +- Multiple runs base line comparison. +- Metrics customization: pick up subset of build-in metrics or build your own profiling configuration. +- Kernel, gpu-id, dispatch-id filters. + +Run `omniperf analyze -h` for more details. + +### Recommended workflow + +1) Do a comprehensive analysis with Omniperf CLI at the beginning. +```shell +$ omniperf analyze -p workloads/vcopy/mi200/ + +-------- +Analyze +-------- + + +-------------------------------------------------------------------------------- +0. Top Stat +╒════╤══════════════════════════════════════════╤═════════╤═══════════╤════════════╤══════════════╤════════╕ +│ │ KernelName │ Count │ Sum(ns) │ Mean(ns) │ Median(ns) │ Pct │ +╞════╪══════════════════════════════════════════╪═════════╪═══════════╪════════════╪══════════════╪════════╡ +│ 0 │ vecCopy(double*, double*, double*, int, │ 1 │ 20000.00 │ 20000.00 │ 20000.00 │ 100.00 │ +│ │ int) [clone .kd] │ │ │ │ │ │ +╘════╧══════════════════════════════════════════╧═════════╧═══════════╧════════════╧══════════════╧════════╛ + + +-------------------------------------------------------------------------------- +1. System Info +╒══════════════════╤═══════════════════════════════════════════════╕ +│ │ Info │ +╞══════════════════╪═══════════════════════════════════════════════╡ +│ workload_name │ vcopy │ +├──────────────────┼───────────────────────────────────────────────┤ +│ command │ /home/colramos/vcopy 1048576 256 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ host_name │ sv-pdp-2 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ host_cpu │ AMD EPYC 7282 16-Core Processor │ +├──────────────────┼───────────────────────────────────────────────┤ +│ host_distro │ Ubuntu 20.04.3 LTS │ +├──────────────────┼───────────────────────────────────────────────┤ +│ host_kernel │ 5.15.0-43-generic │ +├──────────────────┼───────────────────────────────────────────────┤ +│ host_rocmver │ 5.2.1-79 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ date │ Fri Jan 20 11:22:20 2023 (CST) │ +├──────────────────┼───────────────────────────────────────────────┤ +│ gpu_soc │ gfx90a │ +├──────────────────┼───────────────────────────────────────────────┤ +│ numSE │ 8 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ numCU │ 104 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ numSIMD │ 4 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ waveSize │ 64 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ maxWavesPerCU │ 32 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ maxWorkgroupSize │ 1024 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ L1 │ 16 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ L2 │ 8192 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ sclk │ 1700 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ mclk │ 1600 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ cur_sclk │ 800 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ cur_mclk │ 1600 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ L2Banks │ 32 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ name │ mi200 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ numSQC │ 56 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ hbmBW │ 1638.4 │ +├──────────────────┼───────────────────────────────────────────────┤ +│ ip_blocks │ roofline|SQ|LDS|SQC|TA|TD|TCP|TCC|SPI|CPC|CPF │ +╘══════════════════╧═══════════════════════════════════════════════╛ + + +-------------------------------------------------------------------------------- +2. System Speed-of-Light +.... +``` + 2. Use `--list-metrics` to generate a list of availible metrics for inspection + ```shell +$ omniperf analyze -p workloads/vcopy/mi200/ --list-metrics gfx90a +╒═════════╤═════════════════════════════╕ +│ │ Metric │ +╞═════════╪═════════════════════════════╡ +│ 0 │ Top Stat │ +├─────────┼─────────────────────────────┤ +│ 1 │ System Info │ +├─────────┼─────────────────────────────┤ +│ 2.1.0 │ VALU_FLOPs │ +├─────────┼─────────────────────────────┤ +│ 2.1.1 │ VALU_IOPs │ +├─────────┼─────────────────────────────┤ +│ 2.1.2 │ MFMA_FLOPs_(BF16) │ +├─────────┼─────────────────────────────┤ +│ 2.1.3 │ MFMA_FLOPs_(F16) │ +├─────────┼─────────────────────────────┤ +│ 2.1.4 │ MFMA_FLOPs_(F32) │ +├─────────┼─────────────────────────────┤ +│ 2.1.5 │ MFMA_FLOPs_(F64) │ +├─────────┼─────────────────────────────┤ +│ 2.1.6 │ MFMA_IOPs_(Int8) │ +├─────────┼─────────────────────────────┤ +│ 2.1.7 │ Active_CUs │ +├─────────┼─────────────────────────────┤ +│ 2.1.8 │ SALU_Util │ +├─────────┼─────────────────────────────┤ +│ 2.1.9 │ VALU_Util │ +├─────────┼─────────────────────────────┤ +│ 2.1.10 │ MFMA_Util │ +├─────────┼─────────────────────────────┤ +│ 2.1.11 │ VALU_Active_Threads/Wave │ +├─────────┼─────────────────────────────┤ +│ 2.1.12 │ IPC_-_Issue │ +├─────────┼─────────────────────────────┤ +│ 2.1.13 │ LDS_BW │ +├─────────┼─────────────────────────────┤ +│ 2.1.14 │ LDS_Bank_Conflict │ +├─────────┼─────────────────────────────┤ +│ 2.1.15 │ Instr_Cache_Hit_Rate │ +├─────────┼─────────────────────────────┤ +│ 2.1.16 │ Instr_Cache_BW │ +├─────────┼─────────────────────────────┤ +│ 2.1.17 │ Scalar_L1D_Cache_Hit_Rate │ +├─────────┼─────────────────────────────┤ +│ 2.1.18 │ Scalar_L1D_Cache_BW │ +├─────────┼─────────────────────────────┤ +│ 2.1.19 │ Vector_L1D_Cache_Hit_Rate │ +├─────────┼─────────────────────────────┤ +│ 2.1.20 │ Vector_L1D_Cache_BW │ +├─────────┼─────────────────────────────┤ +│ 2.1.21 │ L2_Cache_Hit_Rate │ +├─────────┼─────────────────────────────┤ +│ 2.1.22 │ L2-Fabric_Read_BW │ +├─────────┼─────────────────────────────┤ +│ 2.1.23 │ L2-Fabric_Write_BW │ +├─────────┼─────────────────────────────┤ +│ 2.1.24 │ L2-Fabric_Read_Latency │ +├─────────┼─────────────────────────────┤ +│ 2.1.25 │ L2-Fabric_Write_Latency │ +├─────────┼─────────────────────────────┤ +... + ``` + 2. Choose your own customized subset of metrics with `-b` (a.k.a. `--filter-metrics`), or build your own config following [config_template](https://github.com/AMDResearch/omniperf/blob/main/src/omniperf_analyze/configs/panel_config_template.yaml). Below we'll inspect block 2 (a.k.a. System Speed-of-Light). +```shell +$ omniperf analyze -p workloads/vcopy/mi200/ -b 2 +-------- +Analyze +-------- + +-------------------------------------------------------------------------------- +0. Top Stat +╒════╤══════════════════════════════════════════╤═════════╤═══════════╤════════════╤══════════════╤════════╕ +│ │ KernelName │ Count │ Sum(ns) │ Mean(ns) │ Median(ns) │ Pct │ +╞════╪══════════════════════════════════════════╪═════════╪═══════════╪════════════╪══════════════╪════════╡ +│ 0 │ vecCopy(double*, double*, double*, int, │ 1 │ 20000.00 │ 20000.00 │ 20000.00 │ 100.00 │ +│ │ int) [clone .kd] │ │ │ │ │ │ +╘════╧══════════════════════════════════════════╧═════════╧═══════════╧════════════╧══════════════╧════════╛ + + +-------------------------------------------------------------------------------- +2. System Speed-of-Light +╒═════════╤═══════════════════════════╤═══════════════════════╤══════════════════╤════════════════════╤════════════════════════╕ +│ Index │ Metric │ Value │ Unit │ Peak │ PoP │ +╞═════════╪═══════════════════════════╪═══════════════════════╪══════════════════╪════════════════════╪════════════════════════╡ +│ 2.1.0 │ VALU FLOPs │ 0.0 │ Gflop │ 22630.4 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.1 │ VALU IOPs │ 367.0016 │ Giop │ 22630.4 │ 1.6217194570135745 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.2 │ MFMA FLOPs (BF16) │ 0.0 │ Gflop │ 90521.6 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.3 │ MFMA FLOPs (F16) │ 0.0 │ Gflop │ 181043.2 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.4 │ MFMA FLOPs (F32) │ 0.0 │ Gflop │ 45260.8 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.5 │ MFMA FLOPs (F64) │ 0.0 │ Gflop │ 45260.8 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.6 │ MFMA IOPs (Int8) │ 0.0 │ Giop │ 181043.2 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.7 │ Active CUs │ 74 │ Cus │ 104 │ 71.15384615384616 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.8 │ SALU Util │ 4.016057506716307 │ Pct │ 100 │ 4.016057506716307 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.9 │ VALU Util │ 5.737225009594725 │ Pct │ 100 │ 5.737225009594725 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.10 │ MFMA Util │ 0.0 │ Pct │ 100 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.11 │ VALU Active Threads/Wave │ 64.0 │ Threads │ 64 │ 100.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.12 │ IPC - Issue │ 1.0 │ Instr/cycle │ 5 │ 20.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.13 │ LDS BW │ 0.0 │ Gb/sec │ 22630.4 │ 0.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.14 │ LDS Bank Conflict │ │ Conflicts/access │ 32 │ │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.15 │ Instr Cache Hit Rate │ 99.91306912556854 │ Pct │ 100 │ 99.91306912556854 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.16 │ Instr Cache BW │ 209.7152 │ Gb/s │ 6092.8 │ 3.442016806722689 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.17 │ Scalar L1D Cache Hit Rate │ 99.81986908342313 │ Pct │ 100 │ 99.81986908342313 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.18 │ Scalar L1D Cache BW │ 209.7152 │ Gb/s │ 6092.8 │ 3.442016806722689 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.19 │ Vector L1D Cache Hit Rate │ 50.0 │ Pct │ 100 │ 50.0 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.20 │ Vector L1D Cache BW │ 1677.7216 │ Gb/s │ 11315.199999999999 │ 14.82714932126697 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.21 │ L2 Cache Hit Rate │ 35.55067615693325 │ Pct │ 100 │ 35.55067615693325 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.22 │ L2-Fabric Read BW │ 419.8496 │ Gb/s │ 1638.4 │ 25.6255859375 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.23 │ L2-Fabric Write BW │ 293.9456 │ Gb/s │ 1638.4 │ 17.941015625 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.24 │ L2-Fabric Read Latency │ 256.6482321288385 │ Cycles │ │ │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.25 │ L2-Fabric Write Latency │ 317.2264255699014 │ Cycles │ │ │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.26 │ Wave Occupancy │ 1821.723057333852 │ Wavefronts │ 3328 │ 54.73927455931046 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.27 │ Instr Fetch BW │ 4.174722306564298e-08 │ Gb/s │ 3046.4 │ 1.3703789084047721e-09 │ +├─────────┼───────────────────────────┼───────────────────────┼──────────────────┼────────────────────┼────────────────────────┤ +│ 2.1.28 │ Instr Fetch Latency │ 21.729248046875 │ Cycles │ │ │ +╘═════════╧═══════════════════════════╧═══════════════════════╧══════════════════╧════════════════════╧════════════════════════╛ +``` +> **Note:** Some cells may be blank indicating a missing/unavailible hardware counter or NULL value + +3. Quick optimization iterations and profiling with customized metrics. +4. Redo a comprehensive analysis with Omniperf CLI at any milestone or at the end. + +### Demo + +- Single run + ```shell + $ omniperf analyze -p path/to/profiling/results/ + ``` + +- List top kernels + ```shell + $ omniperf analyze -p path/to/profiling/results/ --list-kernels + ``` + +- List metrics + + ```shell + omniperf analyze -p path/to/profiling/results/ --list-metrics gfx90a + ``` + +- Customized profiling "System Speed-of-Light" and "CS_Busy" only + + ```shell + omniperf analyze -p path/to/profiling/results/ -b 2 5.1.0 + ``` + + Note: People can filter single metric or the whole IP block by its id. + In this case, 1 is the id for "system speed of light" and 5.1.0 the id for metric "GPU Busy Cycles". + +- Multiple runs + + ```shell + omniperf analyze -p workload1/path/ -p workload2/path/ + ``` + +- Filter kernels + + ```shell + omniperf analyze -p workload1/path/ -k 0 -p workload2/path/ -k 0 + ``` + + +## GUI Analysis + +### Web-based GUI + +#### Features + +Omniperf's standalone GUI analyzer is a lightweight web page that can +be generated directly from the command-line. This option is provided +as an alternative for users wanting to explore profiling results +graphically, but without the additional setup requirements or +server-side overhead of Omniperf's detailed [Grafana +interface](https://amdresearch.github.io/omniperf/analysis.html#grafana-based-gui) +option. The standalone GUI analyzer is provided as simple +[Flask](https://flask.palletsprojects.com/en/2.2.x/) application +allowing users to view results from within a web browser. + +```{admonition} Port forwarding + +Note that the standalone GUI analyzer publishes a web interface on port 8050 by default. +On production HPC systems where profiling jobs run +under the auspices of a resource manager, additional ssh tunneling +between the desired web browser host (e.g. login node or remote workstation) and compute host may be +required. Alternatively, users may find it more convenient to download +profiled workloads to perform analysis on their local system. +``` + +#### Usage + +To launch the standalone GUI, include the `--gui` flag with your desired analysis command. For example: + +```bash +$ omniperf analyze -p workloads/vcopy/mi200/ --gui + +-------- +Analyze +-------- + +Dash is running on http://0.0.0.0:8050/ + + * Serving Flask app 'omniperf_analyze.omniperf_analyze' (lazy loading) + * Environment: production + WARNING: This is a development server. Do not use it in a production deployment. + Use a production WSGI server instead. + * Debug mode: off + * Running on all addresses (0.0.0.0) + WARNING: This is a development server. Do not use it in a production deployment. + * Running on http://127.0.0.1:8050 + * Running on http://10.228.32.139:8050 (Press CTRL+C to quit) +``` + +At this point, users can then launch their web browser of choice and +go to http://localhost:8050/ to see an analysis page. + + + +![Standalone GUI Homepage](images/standalone_gui.png) + +```{tip} +To launch the web application on a port other than 8050, include an optional port argument: +`--gui ` +``` + +When no filters are applied, users will see five basic sections derived from their application's profiling data: + +1. Memory Chart Analysis +2. Empirical Roofline Analysis +3. Top Stats (Top Kernel Statistics) +4. System Info +5. System Speed-of-Light + +To dive deeper, use the top drop down menus to isolate particular +kernel(s) or dispatch(s). You will then see the web page update with +metrics specific to the filter you've applied. + +Once you have applied a filter, you will also see several additional +sections become available with detailed metrics specific to that area +of AMD hardware. These detailed sections mirror the data displayed in +Omniperf's [Grafana +interface](https://amdresearch.github.io/omniperf/analysis.html#grafana-based-gui). + +### Grafana-based GUI + +#### Features +The Omniperf Grafana GUI Analyzer supports the following features to facilitate MI GPU performance profiling and analysis: + +- System and IP-Block Speed-of-Light (SOL) +- Multiple normalization options, including per-cycle, per-wave, per-kernel and per-second. +- Baseline comparisons +- Regex based Dispatch ID filtering +- Roofline Analysis +- Detailed per IP Block performance counters and metrics + - CPC/CPF + - SPI + - SQ + - SQC + - TA/TD + - TCP + - TCC (both aggregated and per-channel perf info) + +##### Speed-of-Light +Speed-of-light panels are provided at both the system and per IP block level to help diagnosis performance bottlenecks. The performance numbers of the workload under testing are compared to the theoretical maximum, (e.g. floating point operations, bandwidth, cache hit rate, etc.), to indicate the available room to further utilize the hardware capability. + +##### Multi Normalization + +Multiple performance number normalizations are provided to allow performance inspection within both HW and SW context. The following normalizations are permitted: +- per cycle +- per wave +- per kernel +- per second + +##### Baseline Comparison +Omniperf enables baseline comparison to allow checking A/B effect. The current release limits the baseline comparison to the same SoC. Cross comparison between SoCs is in development. + +For both the Current Workload and the Baseline Workload, one can independently setup the following filters to allow fine grained comparions: +- Workload Name +- GPU ID filtering (multi selection) +- Kernel Name filtering (multi selection) +- Dispatch ID filtering (Regex filtering) +- Omniperf Panels (multi selection) + +##### Regex based Dispatch ID filtering +This release enables regex based dispatch ID filtering to flexibly choose the kernel invocations. One may refer to [Regex Numeric Range Generator](https://3widgets.com/), to generate typical number ranges. + +For example, if one wants to inspect Dispatch Range from 17 to 48, inclusive, the corresponding regex is : **(1[7-9]|[23]\d|4[0-8])**. The generated express can be copied over for filtering. + +##### Incremental Profiling +Omniperf supports incremental profiling to significantly speed up performance analysis. + +> Refer to [*IP Block profiling*](https://amdresearch.github.io/omniperf/profiling.html#ip-block-profiling) section for this command. + +By default, the entire application is profiled to collect perfmon counter for all IP blocks, giving a system level view of where the workload stands in terms of performance optimization opportunities and bottlenecks. + +After that one may focus on only a few IP blocks, (e.g., L1 Cache or LDS) to closely check the effect of software optimizations, without performing application replay for all other IP Blocks. This saves lots of compute time. In addition, the prior profiling results for other IP blocks are not overwritten. Instead, they can be merged during the import to piece together the system view. + +##### Color Coding +The uniform color coding is applied to most visualizations (bars, table, diagrams etc). Typically, Yellow color means over 50%, while Red color mean over 90% percent, for easy inspection. + +##### Global Variables and Configurations + +![Grafana GUI Global Variables](images/global_variables.png) + +#### Grafana GUI Import +The omniperf database `--import` option imports the raw profiling data to Grafana's backend MongoDB database. This step is only required for Grafana GUI based performance analysis. + +Default username and password for MongoDB (to be used in database mode) are as follows: + + - Username: **temp** + - Password: **temp123** + +Each workload is imported to a separate database with the following naming convention: + + omniperf___ + +e.g., omniperf_asw_vcopy_mi200. + +Below is the sample command to import the *vcopy* profiling data. + +```shell +$ omniperf database --help +ROC Profiler: /usr/bin/rocprof + +usage: + +omniperf database [connection options] + + + +------------------------------------------------------------------------------- + +Examples: + + omniperf database --import -H pavii1 -u temp -t asw -w workloads/vcopy/mi200/ + + omniperf database --remove -H pavii1 -u temp -w omniperf_asw_sample_mi200 + +------------------------------------------------------------------------------- + + + +Help: + -h, --help show this help message and exit + +General Options: + -v, --version show program's version number and exit + -V, --verbose Increase output verbosity + +Interaction Type: + -i, --import Import workload to Omniperf DB + -r, --remove Remove a workload from Omniperf DB + +Connection Options: + -H , --host Name or IP address of the server host. + -P , --port TCP/IP Port. (DEFAULT: 27018) + -u , --username Username for authentication. + -p , --password The user's password. (will be requested later if it's not set) + -t , --team Specify Team prefix. + -w , --workload Specify name of workload (to remove) or path to workload (to import) + -k , --kernelVerbose Specify Kernel Name verbose level 1-5. + Lower the level, shorter the kernel name. (DEFAULT: 2) (DISABLE: 5) +``` + +**omniperf import for vcopy:** +```shell +$ omniperf database --import -H pavii1 -u temp -t asw -w workloads/vcopy/mi200/ +ROC Profiler: /usr/bin/rocprof + +-------- +Import Profiling Results +-------- + +Pulling data from /home/amd/xlu/test/workloads/vcopy/mi200 +The directory exists +Found sysinfo file +KernelName shortening enabled +Kernel name verbose level: 2 +Password: +Password recieved +-- Conversion & Upload in Progress -- + 0%| | 0/11 [00:00 Note: The Memory Chart Analysis support multiple normalizations. Due to the space limit, all transactions, when normalized to per-sec, default to unit of Billion transactions per second. + +![Memory Chart Analysis](images/Memory_chart_analysis.png) + +##### Roofline Analysis +![Roofline Analysis](images/Roofline_analysis.png) +##### Command Processor +![Command Processor](images/Command_processor.png) +##### Shader Processing Input (SPI) +![Shader Processing Input](images/Shader_processing_input.png) +##### Wavefront Launch +![Wavefront Launch](images/Wavefront_launch.png) + +##### Compute Unit - Instruction Mix +###### Instruction Mix +![Instruction Mix](images/Instruction_mix.png) +###### VALU Arithmetic Instruction Mix +![VALU Arithmetic Instruction Mix](images/VALU_arithmetic_instruction_mix.png) +###### MFMA Arithmetic Instruction Mix +![MFMA Arithmetic Instruction Mix](images/MFMA_arithmetic_instruction_mix.png) +###### VMEM Arithmetic Instruction Mix +![VMEM Arithmetic Instruction Mix](images/VMEM_arithmetic_intensity_mix.png) + +##### Compute Unit - Compute Pipeline +###### Speed-of-Light +![Speed-of-Light](images/Comp_pipe_sol.png) +###### Compute Pipeline Stats +![Compute Pipeline Stats](images/Compute_pipeline_stats.png) +###### Arithmetic Operations +![Arithmetic Operations](images/Arithmetic_operations.png) +###### Memory Latencies +![Memory Latencies](images/Memory_latencies.png) + +##### Local Data Share (LDS) +###### Speed-of-Light +![Speed-of-Light](images/LDS_sol.png) +###### LDS Stats +![LDS Stats](images/LDS_stats.png) + +##### Instruction Cache +###### Speed-of-Light +![Speed-of-Light](images/Instruc_cache_sol.png) +###### Instruction Cache Stats +![Instruction Cache Stats](images/Instruction_cache_stats.png) + +##### Scalar L1D Cache +###### Speed-of-Light +![](images/L1D_sol.png) +###### Constant Cache Stats +![Constant Cache Stats](images/Vec_L1D_cache_accesses.png) +###### Constant Cache - L2 Interface +![Constant Cache - L2 Interface](images/Constant_cache_l2_interface.png) + +##### Texture Address and Texture Data +###### Texture Address (TA) +![Texture Address](images/Texture_address.png) +###### Texture Data (TD) +![Texture Data](images/Texture_data.png) + +##### Vector L1D Cache +###### Speed-of-Light +![Speed-of-Light](images/Vec_L1D_cache_sol.png) +###### Vector L1D Cache Accesses +![Vector L1D Cache Accesses](images/Vec_L1D_cache_accesses.png) +###### L1 Cache Stalls +![L1 Cache Stalls](images/L1_cache_stalls.png) +###### L1 - L2 Transactions +![L1 - L2 Transactions](images/L1_l2_transactions.png) +###### L1 - UTCL1 Interface Stats +![L1 - UTCL1 Interface Stats](images/L1_utcl1_transactions.png) + +##### L2 Cache +###### Speed-of-Light +![Speed-of-Light](images/L2_cache_sol.png) +###### L2 Cache Accesses +![L2 Cache Accesses](images/L2_cache_accesses.png) +###### L2 - EA Transactions +![L2 - EA Transactions](images/L2_ea_transactions.png) +###### L2 - EA Stalls +![L2 - EA Stalls](images/L2_ea_stalls.png) + +##### L2 Cache Per Channel Performance +###### L1-L2 Transactions +![L1-L2 Transactions](images/L1_l2_transactions_per_channel.png) +###### L2-EA Transactions +![L2-EA Transactions](images/L2_ea_transactions_per_channel.png) +###### L2-EA Latencies +![L2-EA Latencies](images/L2_ea_latencies_per_channel.png) +###### L2-EA Stalls +![L2-EA Stalls](images/L2_ea_stalls_per_channel.png) +###### L2-EA Write Stalls +![L2-EA Write Stalls](images/L2_ea_write_stalls_per_channel.png) +###### L2-EA Write Starvation +![L2-EA Write Starvation](images/L2_ea_write_starvation_per_channel.png) \ No newline at end of file diff --git a/src/docs/conf.py b/src/docs/conf.py index 286ef7a4cb..2b5d2e62d0 100644 --- a/src/docs/conf.py +++ b/src/docs/conf.py @@ -52,6 +52,8 @@ extensions = [ "myst_parser", ] +myst_heading_anchors = 2 + # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] @@ -111,8 +113,8 @@ html_static_path = ["_static"] htmlhelp_basename = "Omniperfdoc" html_theme_options = { - # "analytics_id": "G-1HLBBRSTT9", # Provided by Google in your dashboard - # "analytics_anonymize_ip": False, + "analytics_id": "G-C5DYLCE9ED", # Provided by Google in your dashboard + "analytics_anonymize_ip": False, "logo_only": False, "display_version": True, "prev_next_buttons_location": "bottom", diff --git a/src/docs/getting_started.md b/src/docs/getting_started.md index a92581ef5f..6e1bf1de08 100644 --- a/src/docs/getting_started.md +++ b/src/docs/getting_started.md @@ -69,7 +69,9 @@ Modes change the fundamental behavior of the Omniperf command line tool. Dependi - **Database**: Our detailed Grafana GUI is built on a MongoDB database. `--import` profiling results to the DB to interact with the workload in Grafana or `--remove` the workload from the DB. - Connection options will need to be specified. See the [*Omniperf Performance Analysis*](performance_analysis.md#omniperf-grafana-gui-import) section for more details on this. + Connection options will need to be specified. See the [*Grafana + Analysis*](https://amdresearch.github.io/omniperf/analysis.html#grafana-gui-import) import section + for more details on this. ```shell $ omniperf database --help diff --git a/src/docs/grafana_analyzer.md b/src/docs/grafana_analyzer.md deleted file mode 100644 index 5bba1ffeaf..0000000000 --- a/src/docs/grafana_analyzer.md +++ /dev/null @@ -1,260 +0,0 @@ -# Omniperf Grafana GUI Analyzer - -```eval_rst -.. toctree:: - :glob: - :maxdepth: 4 -``` - -## Features -The Omniperf Grafana GUI Analyzer supports the following features to facilitate MI GPU performance profiling and analysis: - -- System and IP-Block Speed-of-Light (SOL) -- Multiple normalization options, including per-cycle, per-wave, per-kernel and per-second. -- Baseline comparisons -- Regex based Dispatch ID filtering -- Roofline Analysis -- Detailed per IP Block performance counters and metrics - - CPC/CPF - - SPI - - SQ - - SQC - - TA/TD - - TCP - - TCC (both aggregated and per-channel perf info) - -### Speed-of-Light -Speed-of-light panels are provided at both the system and per IP block level to help diagnosis performance bottlenecks. The performance numbers of the workload under testing are compared to the theoretical maximum, (e.g. floating point operations, bandwidth, cache hit rate, etc.), to indicate the available room to further utilize the hardware capability. - -### Multi Normalization - -Multiple performance number normalizations are provided to allow performance inspection within both HW and SW context. The following normalizations are permitted: -- per cycle -- per wave -- per kernel -- per second - -### Baseline Comparison -Omniperf enables baseline comparison to allow checking A/B effect. The current release limits the baseline comparison to the same SoC. Cross comparison between SoCs is in development. - -For both the Current Workload and the Baseline Workload, one can independently setup the following filters to allow fine grained comparions: -- Workload Name -- GPU ID filtering (multi selection) -- Kernel Name filtering (multi selection) -- Dispatch ID filtering (Regex filtering) -- Omniperf Panels (multi selection) - -### Regex based Dispatch ID filtering -This release enables regex based dispatch ID filtering to flexibly choose the kernel invocations. One may refer to [Regex Numeric Range Generator](https://3widgets.com/), to generate typical number ranges. - -For example, if one wants to inspect Dispatch Range from 17 to 48, inclusive, the corresponding regex is : **(1[7-9]|[23]\d|4[0-8])**. The generated express can be copied over for filtering. - -### Incremental Profiling -Omniperf supports incremental profiling to significantly speed up performance analysis. - -> Refer to [*IP Block profiling*](https://amdresearch.github.io/omniperf/performance_analysis.html#ip-block-profiling) section for this command. - -By default, the entire application is profiled to collect perfmon counter for all IP blocks, giving a system level view of where the workload stands in terms of performance optimization opportunities and bottlenecks. - -After that one may focus on only a few IP blocks, (e.g., L1 Cache or LDS) to closely check the effect of software optimizations, without performing application replay for all other IP Blocks. This saves lots of compute time. In addition, the prior profiling results for other IP blocks are not overwritten. Instead, they can be merged during the import to piece together the system view. - -### Color Coding -The uniform color coding is applied to most visualizations (bars, table, diagrams etc). Typically, Yellow color means over 50%, while Red color mean over 90% percent, for easy inspection. - -### Global Variables and Configurations - -![Grafana GUI Global Variables](images/global_variables.png) - -## Omniperf Panels - -### Overview - -There are currently 18 main panel categories available for analyzing the compute workload performance. Each category contains several panels for close inspection of the system performance. - -- Kernel Statistics - - Kernel time histogram - - Top Ten bottleneck kernels -- System Speed-of-Light - - Speed-of-Light - - System Info table -- Memory Chart Analysis -- Roofline Analysis - - FP32/FP64 - - FP16/INT8 -- Command Processor - - Command Processor - Fetch (CPF) - - Command Processor - Controller (CPC) -- Shader Processing Input (SPI) - - SPI Stats - - SPI Resource Allocations -- Wavefront Launch - - Wavefront Launch Stats - - Wavefront runtime stats - - per-SE Wavefront Scheduling performance -- Wavefront Lifetime - - Wavefront lifetime breakdown - - per-SE wavefront life (average) - - per-SE wavefront life (histogram) -- Wavefront Occupancy - - per-SE wavefront occupancy - - per-CU wavefront occupancy -- Compute Unit - Instruction Mix - - per-wave Instruction mix - - per-wave VALU Arithmetic instruction mix - - per-wave MFMA Arithmetic instruction mix -- Compute Unit - Compute Pipeline - - Speed-of-Light: Compute Pipeline - - Arithmetic OPs count - - Compute pipeline stats - - Memory latencies -- Local Data Share (LDS) - - Speed-of-Light: LDS - - LDS stats -- Instruction Cache - - Speed-of-Light: Instruction Cache - - Instruction Cache Accesses -- Constant Cache - - Speed-of-Light: Constant Cache - - Constant Cache Accesses - - Constant Cache - L2 Interface stats -- Texture Address and Texture Data - - Texture Address (TA) - - Texture Data (TD) -- L1 Cache - - Speed-of-Light: L1 Cache - - L1 Cache Accesses - - L1 Cache Stalls - - L1 - L2 Transactions - - L1 - UTCL1 Interface stats -- L2 Cache - - Speed-of-Light: L2 Cache - - L2 Cache Accesses - - L2 - EA Transactions - - L2 - EA Stalls -- L2 Cache Per Channel Performance - - Per-channel L2 Hit rate - - Per-channel L1-L2 Read requests - - Per-channel L1-L2 Write Requests - - Per-channel L1-L2 Atomic Requests - - Per-channel L2-EA Read requests - - Per-channel L2-EA Write requests - - Per-channel L2-EA Atomic requests - - Per-channel L2-EA Read latency - - Per-channel L2-EA Write latency - - Per-channel L2-EA Atomic latency - - Per-channel L2-EA Read stall (I/O, GMI, HBM) - - Per-channel L2-EA Write stall (I/O, GMI, HBM, Starve) - -Most panels are designed around a specific IP block to thoroughly understand its behavior. Additional panels, including custom panels, could also be added to aid the performance analysis. - -### System Info Panel -![System Info Panel](images/System_info_panel.png) -### Kernel Statistics - -#### Kernel Time Histogram -![Kernel Time Histogram](images/Kernel_time_histogram.png) -#### Top Bottleneck Kernels -![Top Bottleneck Kernels](images/Top_bottleneck_kernels.png) -#### Top Bottleneck Dispatches -![Top Bottleneck Dispatches](images/Top_bottleneck_dispatches.png) -#### Current and Baseline Dispatch IDs (Filtered) -![Current and Baseline Dispatch IDs](images/Current_and_baseline_dispatch_ids.png) - -### System Speed-of-Light -![System Speed-of-Light](images/System_speed_of_light.png) - -### Memory Chart Analysis -> Note: The Memory Chart Analysis support multiple normalizations. Due to the space limit, all transactions, when normalized to per-sec, default to unit of Billion transactions per second. - -![Memory Chart Analysis](images/Memory_chart_analysis.png) - -### Roofline Analysis -![Roofline Analysis](images/Roofline_analysis.png) -### Command Processor -![Command Processor](images/Command_processor.png) -### Shader Processing Input (SPI) -![Shader Processing Input](images/Shader_processing_input.png) -### Wavefront Launch -![Wavefront Launch](images/Wavefront_launch.png) - -### Compute Unit - Instruction Mix -#### Instruction Mix -![Instruction Mix](images/Instruction_mix.png) -#### VALU Arithmetic Instruction Mix -![VALU Arithmetic Instruction Mix](images/VALU_arithmetic_instruction_mix.png) -#### MFMA Arithmetic Instruction Mix -![MFMA Arithmetic Instruction Mix](images/MFMA_arithmetic_instruction_mix.png) -#### VMEM Arithmetic Instruction Mix -![VMEM Arithmetic Instruction Mix](images/VMEM_arithmetic_intensity_mix.png) - -### Compute Unit - Compute Pipeline -#### Speed-of-Light -![Speed-of-Light](images/Comp_pipe_sol.png) -#### Compute Pipeline Stats -![Compute Pipeline Stats](images/Compute_pipeline_stats.png) -#### Arithmetic Operations -![Arithmetic Operations](images/Arithmetic_operations.png) -#### Memory Latencies -![Memory Latencies](images/Memory_latencies.png) - -### Local Data Share (LDS) -#### Speed-of-Light -![Speed-of-Light](images/LDS_sol.png) -#### LDS Stats -![LDS Stats](images/LDS_stats.png) - -### Instruction Cache -#### Speed-of-Light -![Speed-of-Light](images/Instruc_cache_sol.png) -#### Instruction Cache Stats -![Instruction Cache Stats](images/Instruction_cache_stats.png) - -### Scalar L1D Cache -#### Speed-of-Light -![](images/L1D_sol.png) -#### Constant Cache Stats -![Constant Cache Stats](images/Vec_L1D_cache_accesses.png) -#### Constant Cache - L2 Interface -![Constant Cache - L2 Interface](images/Constant_cache_l2_interface.png) - -### Texture Address and Texture Data -#### Texture Address (TA) -![Texture Address](images/Texture_address.png) -#### Texture Data (TD) -![Texture Data](images/Texture_data.png) - -### Vector L1D Cache -#### Speed-of-Light -![Speed-of-Light](images/Vec_L1D_cache_sol.png) -#### Vector L1D Cache Accesses -![Vector L1D Cache Accesses](images/Vec_L1D_cache_accesses.png) -#### L1 Cache Stalls -![L1 Cache Stalls](images/L1_cache_stalls.png) -#### L1 - L2 Transactions -![L1 - L2 Transactions](images/L1_l2_transactions.png) -#### L1 - UTCL1 Interface Stats -![L1 - UTCL1 Interface Stats](images/L1_utcl1_transactions.png) - -### L2 Cache -#### Speed-of-Light -![Speed-of-Light](images/L2_cache_sol.png) -#### L2 Cache Accesses -![L2 Cache Accesses](images/L2_cache_accesses.png) -#### L2 - EA Transactions -![L2 - EA Transactions](images/L2_ea_transactions.png) -#### L2 - EA Stalls -![L2 - EA Stalls](images/L2_ea_stalls.png) - -### L2 Cache Per Channel Performance -#### L1-L2 Transactions -![L1-L2 Transactions](images/L1_l2_transactions_per_channel.png) -#### L2-EA Transactions -![L2-EA Transactions](images/L2_ea_transactions_per_channel.png) -#### L2-EA Latencies -![L2-EA Latencies](images/L2_ea_latencies_per_channel.png) -#### L2-EA Stalls -![L2-EA Stalls](images/L2_ea_stalls_per_channel.png) -#### L2-EA Write Stalls -![L2-EA Write Stalls](images/L2_ea_write_stalls_per_channel.png) -#### L2-EA Write Starvation -![L2-EA Write Starvation](images/L2_ea_write_starvation_per_channel.png) \ No newline at end of file diff --git a/src/docs/high_level_design.md b/src/docs/high_level_design.md index 7f7df061b3..28c09ff129 100644 --- a/src/docs/high_level_design.md +++ b/src/docs/high_level_design.md @@ -1,4 +1,4 @@ -# Omniperf High Level Design +# High Level Design ```eval_rst .. toctree:: diff --git a/src/docs/images/datasource_config.png b/src/docs/images/datasource_config.png new file mode 100644 index 0000000000000000000000000000000000000000..8e22ef7379814678d610ecec9c694f0f0b13b312 GIT binary patch literal 48072 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 u& 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

WWkmPD;o@g{OV*5a9OH@x(dL2$P{9q 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%0AP)tVWJs3+#5UID5rRdNpIngfS7 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 z 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 ET~r0mL9uQ1EXa}gI$}S0u`v>k;*^e6K3T)s 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≀!bAtzgWh>ameUk*_V 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 i|Hs3M|EC8dv3;N_rSLUJFggx=3.7) * CMake (>= 3.19) -* ROCm (>= 5.1) +* ROCm (>= 5.2.0) In addition, Omniperf leverages a number of Python packages that are documented in the top-level `requirements.txt` file. These must be @@ -146,7 +146,7 @@ optional `ROCPROF` environment variable. --- -## Omniperf Server Setup +## Server-side Setup Note: Server-side setup is not required to profile or analyze performance data from the CLI. It is provided as an additional mechanism to import performance @@ -157,10 +157,10 @@ use the provided Docker file to build the Grafana and MongoDB instance. ### Install MongoDB Utils -Omniperf uses [mongoimport](https://www.mongodb.com/docs/database-tools/mongoimport/) to upload data to Grafana's backend database +Omniperf uses [mongoimport](https://www.mongodb.com/docs/database-tools/mongoimport/) to upload data to Grafana's backend database. Install for Ubuntu 20.04 is as follows: ```bash $ wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb -$ sudo apt intall ./mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb +$ sudo apt install ./mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb ``` > Find install for alternative distros [here](https://www.mongodb.com/download-center/database-tools/releases/archive) @@ -177,3 +177,38 @@ $ sudo docker volume create --driver local --opt type=none --opt device=/usr/loc $ sudo docker-compose build $ sudo docker-compose up -d ``` +> Note that TCP ports for Grafana (4000) and MongoDB (27017) in the docker container are mapped to 14000 and 27018, respectively, on the host side. + +### Setup Grafana Instance +Once you've launced your docker container you should be able to reach Grafana at **http://\:14000**. The default login credentials for the first-time Grafana setup are: + +- Username: **admin** +- Password: **admin** + +![Grafana Welcome Page](images/grafana_welcome.png) + +MongoDB Datasource Configuration + +The MongoDB Datasource shall be configured prior to the first-time use. Navigate to Grafana's Configuration page (shown below) to add the **Omniperf Data** connection. + +![Omniperf Datasource Config](images/datasource_config.png) + +Configure the following fields in the datasource: + +- HTTP URL: set to *http://localhost:3333* +- MongoDB URL: set to *mongodb://temp:temp123@\:27018/admin?authSource=admin* +- Database Name: set to *admin* + +After properly configuring these fields click **Save & Test** to make sure your connection is successful. + +> Note to avoid potential DNS issue, one may need to use the actual IP address for the host node in the MongoDB URL. + +![Datasource Settings](images/datasource_settings.png) + +Omniperf Dashboard Import + +From *Create* → *Import*, (as seen below) upload the dashboard file, `/dashboards/Omniperf_v{__VERSION__}_pub.json`, from the Omniperf tarball. + +Edit both the Dashboard Name and the Unique Identifier (UID) to uniquely identify the dashboard he/she will use. Click Import to finish the process. + +![Import Dashboard](images/import_dashboard.png) \ No newline at end of file diff --git a/src/docs/performance_analysis.md b/src/docs/profiling.md similarity index 68% rename from src/docs/performance_analysis.md rename to src/docs/profiling.md index 729ab64284..c0d3fbddda 100644 --- a/src/docs/performance_analysis.md +++ b/src/docs/profiling.md @@ -1,4 +1,4 @@ -# Omniperf Performance Analysis +# Profiling ```eval_rst .. toctree:: @@ -348,90 +348,3 @@ Dispatch Selection: ['0'] IP Blocks: All ... ... ``` - -## Omniperf Grafana GUI Import -The omniperf database `--import` option imports the raw profiling data to Grafana's backend MongoDB database. This step is only required for Grafana GUI based performance analysis. - -Each workload is imported to a separate database with the following naming convention: - - omniperf___ - -e.g., omniperf_asw_vcopy_mi200. - -Below is the sample command to import the *vcopy* profiling data. - -```shell -$ omniperf database --help -ROC Profiler: /usr/bin/rocprof - -usage: - -omniperf database [connection options] - - - -------------------------------------------------------------------------------- - -Examples: - - omniperf database --import -H pavii1 -u amd -t asw -w workloads/vcopy/mi200/ - - omniperf database --remove -H pavii1 -u amd -w omniperf_asw_sample_mi200 - -------------------------------------------------------------------------------- - - - -Help: - -h, --help show this help message and exit - -General Options: - -v, --version show program's version number and exit - -V, --verbose Increase output verbosity - -Interaction Type: - -i, --import Import workload to Omniperf DB - -r, --remove Remove a workload from Omniperf DB - -Connection Options: - -H , --host Name or IP address of the server host. - -P , --port TCP/IP Port. (DEFAULT: 27018) - -u , --username Username for authentication. - -p , --password The user's password. (will be requested later if it's not set) - -t , --team Specify Team prefix. - -w , --workload Specify name of workload (to remove) or path to workload (to import) - -k , --kernelVerbose Specify Kernel Name verbose level 1-5. - Lower the level, shorter the kernel name. (DEFAULT: 2) (DISABLE: 5) -``` - -**omniperf import for vcopy:** -```shell -$ omniperf database --import -H pavii1 -u amd -t asw -w workloads/vcopy/mi200/ -ROC Profiler: /usr/bin/rocprof - --------- -Import Profiling Results --------- - -Pulling data from /home/amd/xlu/test/workloads/vcopy/mi200 -The directory exists -Found sysinfo file -KernelName shortening enabled -Kernel name verbose level: 2 -Password: -Password recieved --- Conversion & Upload in Progress -- - 0%| | 0/11 [00:00 /dev/null && pwd) - -message "Working directory is ${WORK_DIR}" -message "Source directory is ${SOURCE_DIR}" - -message "Changing directory to ${WORK_DIR}" -cd ${WORK_DIR} - -message "Building html documentation" -make html - -if [ -d ${SOURCE_DIR}/docs ]; then - message "Removing stale documentation in ${SOURCE_DIR}/docs/" - rm -rf ${SOURCE_DIR}/docs/* - - message "Adding nojekyll to docs/" - cp -r ${WORK_DIR}/.nojekyll ${SOURCE_DIR}/docs/.nojekyll - - message "Copying source/docs/_build/html/* to docs/" - cp -r ${WORK_DIR}/_build/html/* ${SOURCE_DIR}/docs/ -fi \ No newline at end of file diff --git a/src/omniperf b/src/omniperf index b592be740e..9931b3d7fd 100755 --- a/src/omniperf +++ b/src/omniperf @@ -30,6 +30,7 @@ import glob import pandas as pd from datetime import datetime from pathlib import Path as path +import warnings from parser import parse from utils import specs @@ -37,19 +38,26 @@ from utils.perfagg import perfmon_filter, pmc_filter from utils import remove_workload from utils import csv_converter # Import workload from utils import plot_roofline # standalone roofline -from omniperf_cli.omniperf_cli import omniperf_cli # CLI analysis +from omniperf_analyze.omniperf_analyze import analyze # CLI analysis from common import ( OMNIPERF_HOME, PROG, SOC_LIST, - VER, DISTRO_MAP, ) # Import global variables +from common import getVersion + ################################################ # Helper Functions ################################################ +def run_subprocess(cmd): + subprocess.run( + cmd, + check=True + ) + def resolve_rocprof(): # ROCPROF INFO global rocprof_cmd @@ -70,6 +78,7 @@ def resolve_rocprof(): print("ROC Profiler: ", rocprof_path.stdout.decode("utf-8")) + def get_soc(): mspec = specs.get_machine_specs(0) @@ -109,20 +118,24 @@ def isWorkloadEmpty(my_parser, path): def replace_timestamps(workload_dir): df_stamps = pd.read_csv(workload_dir + "/timestamps.csv") - df_pmc_perf = pd.read_csv(workload_dir + "/pmc_perf.csv") + if "BeginNs" in df_stamps.columns and "EndNs" in df_stamps.columns: + df_pmc_perf = pd.read_csv(workload_dir + "/pmc_perf.csv") - df_pmc_perf["BeginNs"] = df_stamps["BeginNs"] - df_pmc_perf["EndNs"] = df_stamps["EndNs"] - df_pmc_perf.to_csv(workload_dir + "/pmc_perf.csv", index=False) + df_pmc_perf["BeginNs"] = df_stamps["BeginNs"] + df_pmc_perf["EndNs"] = df_stamps["EndNs"] + df_pmc_perf.to_csv(workload_dir + "/pmc_perf.csv", index=False) + else: + warnings.warn("WARNING: Incomplete profiling data detected. Unable to update timestamps.") -def gen_sysinfo(workload_name, workload_dir, ip_blocks, skip_roof): +def gen_sysinfo(workload_name, workload_dir, ip_blocks, app_cmd, skip_roof): # Record system information mspec = specs.get_machine_specs(0) sysinfo = open(workload_dir + "/" + "sysinfo.csv", "w") # write header header = "workload_name," + header += "command," header += "host_name,host_cpu,host_distro,host_kernel,host_rocmver,date," header += "gpu_soc,numSE,numCU,numSIMD,waveSize,maxWavesPerCU,maxWorkgroupSize," header += "L1,L2,sclk,mclk,cur_sclk,cur_mclk,L2Banks,name,numSQC,hbmBW," @@ -137,6 +150,7 @@ def gen_sysinfo(workload_name, workload_dir, ip_blocks, skip_roof): timestamp = now.strftime("%c") + " (" + local_tzname + ")" # host info param = [workload_name] + param += [app_cmd] param += [ mspec.hostname, mspec.cpu, @@ -196,10 +210,12 @@ def mongo_import(args, profileAndImport): csv_converter.convert_folder(connectionInfo, Extractionlvl) print("-- Complete! --") + ################################################ # Roofline Helpers ################################################ + def detect_roofline(): mspec = specs.get_machine_specs(0) rocm_ver = mspec.rocmversion[:1] @@ -213,7 +229,7 @@ def detect_roofline(): rooflineBinary = os.environ["ROOFLINE_BIN"] if os.path.exists(rooflineBinary): print("Detected user-supplied binary") - return {"rocm_ver":"override", "distro":"override", "path":rooflineBinary} + return {"rocm_ver": "override", "distro": "override", "path": rooflineBinary} else: print("ROOFLINE ERROR: user-supplied path to binary not accessible") print("--> ROOFLINE_BIN = %s\n" % target_binary) @@ -231,26 +247,34 @@ def detect_roofline(): print("ROOFLINE ERROR: Cannot find a valid binary for your operating system") sys.exit(1) - target_binary = { "rocm_ver":rocm_ver, "distro":distro } + target_binary = {"rocm_ver": rocm_ver, "distro": distro} return target_binary + def mibench(args): print("No roofline data found. Generating...") - + target_binary = detect_roofline() if target_binary["rocm_ver"] == "override": path_to_binary = target_binary["path"] else: - path_to_binary = str(OMNIPERF_HOME) + "/utils/rooflines/roofline" + "-" + DISTRO_MAP[target_binary["distro"]] + "-" + args.target.lower() + "-rocm" + target_binary["rocm_ver"] + path_to_binary = ( + str(OMNIPERF_HOME) + + "/utils/rooflines/roofline" + + "-" + + DISTRO_MAP[target_binary["distro"]] + + "-" + + args.target.lower() + + "-rocm" + + target_binary["rocm_ver"] + ) # Distro is valid but cant find rocm ver if not os.path.exists(path_to_binary): - print( - "ROOFLINE ERROR: ROCm version not supported." - ) + print("ROOFLINE ERROR: Unable to locate expected binary (%s)." % path_to_binary) sys.exit(1) - subprocess.run( + run_subprocess( [ path_to_binary, "-o", @@ -276,6 +300,22 @@ def characterize_app(path, cmd, verbose): for fname in glob.glob(workload_dir + "/perfmon/*.txt"): print(fname) run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose) + # run again with timestamps + run_subprocess( + [ + rocprof_cmd, + # "-i", fname, + # "-m", perfmon_dir + "/" + "metrics.xml", + "--timestamp", + "on", + "-o", + workload_dir + "/" + "timestamps.csv", + '"' + app_cmd + '"', + ] + ) + # Update pmc_perf.csv timestamps + replace_timestamps(workload_dir) + ################################################ # Profiling Helpers @@ -307,13 +347,12 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): if verbose: print("pmc file:", os.path.basename(fname)) - subprocess.run( + # profile the app + run_subprocess( [ rocprof_cmd, "-i", fname, - "-m", - perfmon_dir + "/" + "metrics.xml", "--timestamp", "on", "-o", @@ -323,12 +362,16 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): ) -def omniperf_profile(args): +def omniperf_profile(args, VER): # Verify valid target if args.target not in SOC_LIST: parse.print_help(sys.stderr) sys.exit(1) + #Verify valid name + if args.name.find(".") != -1 or args.name.find("-") != -1: + raise ValueError("'-' and '.' are not permited in workload name", args.name) + # Basic Info print(PROG, "ver: ", VER) print("Path: ", args.path) @@ -402,7 +445,7 @@ def omniperf_profile(args): for fname in glob.glob(workload_dir + "/perfmon/*.txt"): # Kernel filtering (in-place replacement) if not args.kernel == None: - subprocess.run( + run_subprocess( [ "sed", "-i", @@ -414,7 +457,7 @@ def omniperf_profile(args): # Dispatch filtering (inplace replacement) if not args.dispatch == None: - subprocess.run( + run_subprocess( [ "sed", "-i", @@ -431,7 +474,7 @@ def omniperf_profile(args): # run again with timestamps - subprocess.run( + run_subprocess( [ rocprof_cmd, # "-i", fname, @@ -448,7 +491,7 @@ def omniperf_profile(args): replace_timestamps(workload_dir) # Generate sysinfo - gen_sysinfo(args.name, workload_dir, args.ipblocks, args.no_roof) + gen_sysinfo(args.name, workload_dir, args.ipblocks, args.remaining, args.no_roof) # Add tracing & roofline metrics (mi200 only) if args.target.lower() == "mi200": @@ -458,22 +501,35 @@ def omniperf_profile(args): if target_binary["rocm_ver"] == "override": path_to_binary = target_binary["path"] else: - path_to_binary = str(OMNIPERF_HOME) + "/utils/rooflines/roofline" + "-" + DISTRO_MAP[target_binary["distro"]] + "-" + args.target.lower() + "-rocm" + target_binary["rocm_ver"] - # Distro is valid but cant find rocm ver + path_to_binary = ( + str(OMNIPERF_HOME) + + "/utils/rooflines/roofline" + + "-" + + DISTRO_MAP[target_binary["distro"]] + + "-" + + args.target.lower() + + "-rocm" + + target_binary["rocm_ver"] + ) + # Distro is valid but cant find valid binary if not os.path.exists(path_to_binary): print( - "ROOFLINE ERROR: ROCm version not supported." + "ROOFLINE ERROR: Unable to locate expected binary (%s))." + % path_to_binary ) sys.exit(1) - subprocess.run( + run_subprocess( [ path_to_binary, "-o", workload_dir + "/" + "roofline.csv", + "-d", + str(args.device), ] ) + ################################################ # MAIN ################################################ @@ -491,6 +547,9 @@ def main(): parse(my_parser) args = my_parser.parse_args() + vData = getVersion() + VER = vData["version"] + if args.mode == None: throw_parse_error( my_parser, @@ -566,7 +625,7 @@ def main(): sysinfo_exists = os.path.isfile(sysinfo_path) if not sysinfo_exists: print("sysinfo not found") - gen_sysinfo(args.name, args.path, [], False) + gen_sysinfo(args.name, args.path, [], args.remaining, False) # does app data exist? print("Checking for pmc_perf.csv in ", args.path) @@ -580,7 +639,7 @@ def main(): if not args.remaining: throw_parse_error( my_parser, - "Cannot find existing application data.\nAttempting to generate application data from -c.\n--cmd option is required to generate application data.", + "Cannot find existing application data.\nAttempting to generate application data from -- .\n-- option is required to generate application data.", ) else: characterize_app(args.path, args.remaining, args.verbose) @@ -589,8 +648,8 @@ def main(): # Profile only else: - print("\n--------\nProfile only\n--------\n") - omniperf_profile(args) + print("\n-------------\nProfile only\n-------------\n") + omniperf_profile(args, VER) ############## # DATABASE MODE @@ -651,7 +710,7 @@ def main(): ############## if args.mode == "analyze": if args.list_metrics: - omniperf_cli(args) + analyze(args) else: if args.path: if ".." in str(args.path): @@ -675,7 +734,7 @@ def main(): my_parser, dir[0] ) # Verify workload is valid before analyzing - omniperf_cli(args) + analyze(args) else: throw_parse_error( my_parser, diff --git a/src/omniperf_cli/README.md b/src/omniperf_analyze/README.md similarity index 93% rename from src/omniperf_cli/README.md rename to src/omniperf_analyze/README.md index 2b6b5586b8..9d544a48e7 100644 --- a/src/omniperf_cli/README.md +++ b/src/omniperf_analyze/README.md @@ -1,6 +1,6 @@ # Description -omniperf_cli.py is a post-processing profiling tool with the raw data collected from omniperf. +omniperf_analyze.py is a post-processing profiling tool with the raw data collected from omniperf. ## Features diff --git a/src/omniperf_cli/assets/default.css b/src/omniperf_analyze/assets/default.css similarity index 100% rename from src/omniperf_cli/assets/default.css rename to src/omniperf_analyze/assets/default.css diff --git a/src/omniperf_cli/assets/font-awesome/css/font-awesome.css b/src/omniperf_analyze/assets/font-awesome/css/font-awesome.css similarity index 100% rename from src/omniperf_cli/assets/font-awesome/css/font-awesome.css rename to src/omniperf_analyze/assets/font-awesome/css/font-awesome.css diff --git a/src/omniperf_cli/assets/font-awesome/css/font-awesome.min.css b/src/omniperf_analyze/assets/font-awesome/css/font-awesome.min.css similarity index 100% rename from src/omniperf_cli/assets/font-awesome/css/font-awesome.min.css rename to src/omniperf_analyze/assets/font-awesome/css/font-awesome.min.css diff --git a/src/omniperf_cli/assets/font-awesome/fonts/FontAwesome.otf b/src/omniperf_analyze/assets/font-awesome/fonts/FontAwesome.otf similarity index 100% rename from src/omniperf_cli/assets/font-awesome/fonts/FontAwesome.otf rename to src/omniperf_analyze/assets/font-awesome/fonts/FontAwesome.otf diff --git a/src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.eot b/src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.eot rename to src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.eot diff --git a/src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.svg b/src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.svg rename to src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.svg diff --git a/src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.ttf b/src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.ttf rename to src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.ttf diff --git a/src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.woff b/src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/font-awesome/fonts/fontawesome-webfont.woff rename to src/omniperf_analyze/assets/font-awesome/fonts/fontawesome-webfont.woff diff --git a/src/omniperf_cli/assets/font-awesome/less/bordered-pulled.less b/src/omniperf_analyze/assets/font-awesome/less/bordered-pulled.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/bordered-pulled.less rename to src/omniperf_analyze/assets/font-awesome/less/bordered-pulled.less diff --git a/src/omniperf_cli/assets/font-awesome/less/core.less b/src/omniperf_analyze/assets/font-awesome/less/core.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/core.less rename to src/omniperf_analyze/assets/font-awesome/less/core.less diff --git a/src/omniperf_cli/assets/font-awesome/less/fixed-width.less b/src/omniperf_analyze/assets/font-awesome/less/fixed-width.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/fixed-width.less rename to src/omniperf_analyze/assets/font-awesome/less/fixed-width.less diff --git a/src/omniperf_cli/assets/font-awesome/less/font-awesome.less b/src/omniperf_analyze/assets/font-awesome/less/font-awesome.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/font-awesome.less rename to src/omniperf_analyze/assets/font-awesome/less/font-awesome.less diff --git a/src/omniperf_cli/assets/font-awesome/less/icons.less b/src/omniperf_analyze/assets/font-awesome/less/icons.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/icons.less rename to src/omniperf_analyze/assets/font-awesome/less/icons.less diff --git a/src/omniperf_cli/assets/font-awesome/less/larger.less b/src/omniperf_analyze/assets/font-awesome/less/larger.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/larger.less rename to src/omniperf_analyze/assets/font-awesome/less/larger.less diff --git a/src/omniperf_cli/assets/font-awesome/less/list.less b/src/omniperf_analyze/assets/font-awesome/less/list.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/list.less rename to src/omniperf_analyze/assets/font-awesome/less/list.less diff --git a/src/omniperf_cli/assets/font-awesome/less/mixins.less b/src/omniperf_analyze/assets/font-awesome/less/mixins.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/mixins.less rename to src/omniperf_analyze/assets/font-awesome/less/mixins.less diff --git a/src/omniperf_cli/assets/font-awesome/less/path.less b/src/omniperf_analyze/assets/font-awesome/less/path.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/path.less rename to src/omniperf_analyze/assets/font-awesome/less/path.less diff --git a/src/omniperf_cli/assets/font-awesome/less/rotated-flipped.less b/src/omniperf_analyze/assets/font-awesome/less/rotated-flipped.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/rotated-flipped.less rename to src/omniperf_analyze/assets/font-awesome/less/rotated-flipped.less diff --git a/src/omniperf_cli/assets/font-awesome/less/spinning.less b/src/omniperf_analyze/assets/font-awesome/less/spinning.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/spinning.less rename to src/omniperf_analyze/assets/font-awesome/less/spinning.less diff --git a/src/omniperf_cli/assets/font-awesome/less/stacked.less b/src/omniperf_analyze/assets/font-awesome/less/stacked.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/stacked.less rename to src/omniperf_analyze/assets/font-awesome/less/stacked.less diff --git a/src/omniperf_cli/assets/font-awesome/less/variables.less b/src/omniperf_analyze/assets/font-awesome/less/variables.less similarity index 100% rename from src/omniperf_cli/assets/font-awesome/less/variables.less rename to src/omniperf_analyze/assets/font-awesome/less/variables.less diff --git a/src/omniperf_cli/assets/font-awesome/scss/_bordered-pulled.scss b/src/omniperf_analyze/assets/font-awesome/scss/_bordered-pulled.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_bordered-pulled.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_bordered-pulled.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_core.scss b/src/omniperf_analyze/assets/font-awesome/scss/_core.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_core.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_core.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_fixed-width.scss b/src/omniperf_analyze/assets/font-awesome/scss/_fixed-width.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_fixed-width.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_fixed-width.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_icons.scss b/src/omniperf_analyze/assets/font-awesome/scss/_icons.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_icons.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_icons.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_larger.scss b/src/omniperf_analyze/assets/font-awesome/scss/_larger.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_larger.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_larger.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_list.scss b/src/omniperf_analyze/assets/font-awesome/scss/_list.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_list.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_list.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_mixins.scss b/src/omniperf_analyze/assets/font-awesome/scss/_mixins.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_mixins.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_mixins.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_path.scss b/src/omniperf_analyze/assets/font-awesome/scss/_path.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_path.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_path.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_rotated-flipped.scss b/src/omniperf_analyze/assets/font-awesome/scss/_rotated-flipped.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_rotated-flipped.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_rotated-flipped.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_spinning.scss b/src/omniperf_analyze/assets/font-awesome/scss/_spinning.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_spinning.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_spinning.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_stacked.scss b/src/omniperf_analyze/assets/font-awesome/scss/_stacked.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_stacked.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_stacked.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/_variables.scss b/src/omniperf_analyze/assets/font-awesome/scss/_variables.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/_variables.scss rename to src/omniperf_analyze/assets/font-awesome/scss/_variables.scss diff --git a/src/omniperf_cli/assets/font-awesome/scss/font-awesome.scss b/src/omniperf_analyze/assets/font-awesome/scss/font-awesome.scss similarity index 100% rename from src/omniperf_cli/assets/font-awesome/scss/font-awesome.scss rename to src/omniperf_analyze/assets/font-awesome/scss/font-awesome.scss diff --git a/src/omniperf_cli/assets/fontello/css/animation.css b/src/omniperf_analyze/assets/fontello/css/animation.css similarity index 100% rename from src/omniperf_cli/assets/fontello/css/animation.css rename to src/omniperf_analyze/assets/fontello/css/animation.css diff --git a/src/omniperf_cli/assets/fontello/css/fontello-codes.css b/src/omniperf_analyze/assets/fontello/css/fontello-codes.css similarity index 100% rename from src/omniperf_cli/assets/fontello/css/fontello-codes.css rename to src/omniperf_analyze/assets/fontello/css/fontello-codes.css diff --git a/src/omniperf_cli/assets/fontello/css/fontello-embedded.css b/src/omniperf_analyze/assets/fontello/css/fontello-embedded.css similarity index 100% rename from src/omniperf_cli/assets/fontello/css/fontello-embedded.css rename to src/omniperf_analyze/assets/fontello/css/fontello-embedded.css diff --git a/src/omniperf_cli/assets/fontello/css/fontello-ie7-codes.css b/src/omniperf_analyze/assets/fontello/css/fontello-ie7-codes.css similarity index 100% rename from src/omniperf_cli/assets/fontello/css/fontello-ie7-codes.css rename to src/omniperf_analyze/assets/fontello/css/fontello-ie7-codes.css diff --git a/src/omniperf_cli/assets/fontello/css/fontello-ie7.css b/src/omniperf_analyze/assets/fontello/css/fontello-ie7.css similarity index 100% rename from src/omniperf_cli/assets/fontello/css/fontello-ie7.css rename to src/omniperf_analyze/assets/fontello/css/fontello-ie7.css diff --git a/src/omniperf_cli/assets/fontello/css/fontello.css b/src/omniperf_analyze/assets/fontello/css/fontello.css similarity index 100% rename from src/omniperf_cli/assets/fontello/css/fontello.css rename to src/omniperf_analyze/assets/fontello/css/fontello.css diff --git a/src/omniperf_cli/assets/fontello/font/fontello.eot b/src/omniperf_analyze/assets/fontello/font/fontello.eot similarity index 100% rename from src/omniperf_cli/assets/fontello/font/fontello.eot rename to src/omniperf_analyze/assets/fontello/font/fontello.eot diff --git a/src/omniperf_cli/assets/fontello/font/fontello.svg b/src/omniperf_analyze/assets/fontello/font/fontello.svg similarity index 100% rename from src/omniperf_cli/assets/fontello/font/fontello.svg rename to src/omniperf_analyze/assets/fontello/font/fontello.svg diff --git a/src/omniperf_cli/assets/fontello/font/fontello.ttf b/src/omniperf_analyze/assets/fontello/font/fontello.ttf similarity index 100% rename from src/omniperf_cli/assets/fontello/font/fontello.ttf rename to src/omniperf_analyze/assets/fontello/font/fontello.ttf diff --git a/src/omniperf_cli/assets/fontello/font/fontello.woff b/src/omniperf_analyze/assets/fontello/font/fontello.woff similarity index 100% rename from src/omniperf_cli/assets/fontello/font/fontello.woff rename to src/omniperf_analyze/assets/fontello/font/fontello.woff diff --git a/src/omniperf_cli/assets/fonts.css b/src/omniperf_analyze/assets/fonts.css similarity index 100% rename from src/omniperf_cli/assets/fonts.css rename to src/omniperf_analyze/assets/fonts.css diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff b/src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff rename to src/omniperf_analyze/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Bold-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Bold-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Italic-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Italic-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Light-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Light-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Regular-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Regular-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-Semibold-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-Semibold-webfont.woff diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf diff --git a/src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff b/src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff similarity index 100% rename from src/omniperf_cli/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff rename to src/omniperf_analyze/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff diff --git a/src/omniperf_cli/assets/layout.css b/src/omniperf_analyze/assets/layout.css similarity index 95% rename from src/omniperf_cli/assets/layout.css rename to src/omniperf_analyze/assets/layout.css index 44d0f99630..b723d236a3 100644 --- a/src/omniperf_cli/assets/layout.css +++ b/src/omniperf_analyze/assets/layout.css @@ -593,20 +593,6 @@ button.report:hover { #l2_cache_per_channel a, #l2_cache_per_channel a:visited { color: #fff; } #l2_cache_per_channel a:hover, #l2_cache_per_channel a:focus { color: #11ABB0; } -#l2_cache_per_channel .float-container { - /* border: 3px solid #fff; */ - padding: 20px; -} -#l2_cache_per_channel .float-child { - width: 100%; - float: left; - padding: 20px; - /* border: 2px solid red; */ -} -#l2_cache_per_channel .float-child h3 { - color: #fff; -} - /* ------------------------------------------------------------------ */ /* c. About Section /* ------------------------------------------------------------------ */ diff --git a/src/omniperf_cli/assets/magnific-popup.css b/src/omniperf_analyze/assets/magnific-popup.css similarity index 100% rename from src/omniperf_cli/assets/magnific-popup.css rename to src/omniperf_analyze/assets/magnific-popup.css diff --git a/src/omniperf_cli/assets/media-queries.css b/src/omniperf_analyze/assets/media-queries.css similarity index 100% rename from src/omniperf_cli/assets/media-queries.css rename to src/omniperf_analyze/assets/media-queries.css diff --git a/src/omniperf_cli/configs/gfx906/0000_top_stat.yaml b/src/omniperf_analyze/configs/gfx906/0000_top_stat.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/0000_top_stat.yaml rename to src/omniperf_analyze/configs/gfx906/0000_top_stat.yaml diff --git a/src/omniperf_cli/configs/gfx906/0100_system_info.yaml b/src/omniperf_analyze/configs/gfx906/0100_system_info.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/0100_system_info.yaml rename to src/omniperf_analyze/configs/gfx906/0100_system_info.yaml diff --git a/src/omniperf_cli/configs/gfx906/0200_system-speed-of-light.yaml b/src/omniperf_analyze/configs/gfx906/0200_system-speed-of-light.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/0200_system-speed-of-light.yaml rename to src/omniperf_analyze/configs/gfx906/0200_system-speed-of-light.yaml diff --git a/src/omniperf_cli/configs/gfx906/0500_command-processor.yaml b/src/omniperf_analyze/configs/gfx906/0500_command-processor.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/0500_command-processor.yaml rename to src/omniperf_analyze/configs/gfx906/0500_command-processor.yaml diff --git a/src/omniperf_cli/configs/gfx906/0600_shader-processor-input.yaml b/src/omniperf_analyze/configs/gfx906/0600_shader-processor-input.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/0600_shader-processor-input.yaml rename to src/omniperf_analyze/configs/gfx906/0600_shader-processor-input.yaml diff --git a/src/omniperf_cli/configs/gfx906/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/0700_wavefront-launch.yaml rename to src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml diff --git a/src/omniperf_cli/configs/gfx906/1000_compute-unit-instruction-mix.yaml b/src/omniperf_analyze/configs/gfx906/1000_compute-unit-instruction-mix.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1000_compute-unit-instruction-mix.yaml rename to src/omniperf_analyze/configs/gfx906/1000_compute-unit-instruction-mix.yaml diff --git a/src/omniperf_cli/configs/gfx906/1100_compute-unit-compute-pipeline.yaml b/src/omniperf_analyze/configs/gfx906/1100_compute-unit-compute-pipeline.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1100_compute-unit-compute-pipeline.yaml rename to src/omniperf_analyze/configs/gfx906/1100_compute-unit-compute-pipeline.yaml diff --git a/src/omniperf_cli/configs/gfx906/1200_lds.yaml b/src/omniperf_analyze/configs/gfx906/1200_lds.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1200_lds.yaml rename to src/omniperf_analyze/configs/gfx906/1200_lds.yaml diff --git a/src/omniperf_cli/configs/gfx906/1300_instruction-cache.yaml b/src/omniperf_analyze/configs/gfx906/1300_instruction-cache.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1300_instruction-cache.yaml rename to src/omniperf_analyze/configs/gfx906/1300_instruction-cache.yaml diff --git a/src/omniperf_cli/configs/gfx906/1400_constant-cache.yaml b/src/omniperf_analyze/configs/gfx906/1400_constant-cache.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1400_constant-cache.yaml rename to src/omniperf_analyze/configs/gfx906/1400_constant-cache.yaml diff --git a/src/omniperf_cli/configs/gfx906/1500_TA_and_TD.yaml b/src/omniperf_analyze/configs/gfx906/1500_TA_and_TD.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1500_TA_and_TD.yaml rename to src/omniperf_analyze/configs/gfx906/1500_TA_and_TD.yaml diff --git a/src/omniperf_cli/configs/gfx906/1600_L1_cache.yaml b/src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml similarity index 85% rename from src/omniperf_cli/configs/gfx906/1600_L1_cache.yaml rename to src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml index b2e950f476..adcd9f2ad2 100644 --- a/src/omniperf_cli/configs/gfx906/1600_L1_cache.yaml +++ b/src/omniperf_analyze/configs/gfx906/1600_L1_cache.yaml @@ -25,8 +25,8 @@ Panel Config: != 0) else None)) tips: Cache BW: - value: AVG(((100 * TCP_TOTAL_CACHE_ACCESSES_sum) / ((GRBM_GUI_ACTIVE * $numCU) - * 4))) + value: ((100 * AVG(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs)))) + / ((($sclk / 1000) * 64) * $numCU)) tips: Cache Hit: value: AVG(((100 - ((100 * (((TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum) @@ -130,6 +130,12 @@ Panel Config: / $denom)) unit: (Req + $normUnit) tips: + Cache BW: + avg: AVG(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + min: MIN(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + max: MAX(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + unit: GB/s + tips: Cache Accesses: avg: AVG((TCP_TOTAL_CACHE_ACCESSES_sum / $denom)) min: MIN((TCP_TOTAL_CACHE_ACCESSES_sum / $denom)) @@ -169,7 +175,13 @@ Panel Config: max: MAX((TCP_TOTAL_WRITEBACK_INVALIDATES_sum / $denom)) unit: ( + $normUnit) tips: - L1-TCR Read: + L1-L2 BW: + avg: AVG(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + min: MIN(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + max: MAX(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + unit: (Bytes + $normUnit) + tips: + L1-L2 Read: avg: AVG((TCP_TCC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_READ_REQ_sum / $denom)) @@ -225,81 +237,107 @@ Panel Config: id: 1604 title: L1D - L2 Transactions header: + metric: Metric xfer: Xfer - mean: Mean + coherency: Coherency + avg: Avg min: Min max: Max unit: Unit tips: Tips metric: NC - Read: - mean: None # No perf counter + xfer: Read + coherency: NC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: UC - Read: - mean: None # No perf counter + xfer: Read + coherency: UC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: CC - Read: - mean: None # No perf counter + xfer: Read + coherency: CC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: RW - Read: - mean: None # No perf counter + xfer: Read + coherency: RW + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: RW - Write: - mean: None # No perf counter + xfer: Write + coherency: RW + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: NC + avg: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: - NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) - min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) - max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + CC - Write: + xfer: Write + coherency: CC + avg: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + min: MIN((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + max: MAX((TCP_TCC_CC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Write: - mean: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: UC + avg: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: NC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: UC - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: UC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: CC - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: CC + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) tips: RW - Atomic: - mean: None # No perf counter + xfer: Atomic + coherency: RW + avg: None # No perf counter min: None # No perf counter max: None # No perf counter unit: (Req + $normUnit) diff --git a/src/omniperf_cli/configs/gfx906/1700_L2_cache.yaml b/src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml similarity index 96% rename from src/omniperf_cli/configs/gfx906/1700_L2_cache.yaml rename to src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml index 6133fc88f1..53235ca148 100644 --- a/src/omniperf_cli/configs/gfx906/1700_L2_cache.yaml +++ b/src/omniperf_analyze/configs/gfx906/1700_L2_cache.yaml @@ -294,6 +294,8 @@ Panel Config: title: L2 - EA Interface Stalls header: metric: Metric + type: Type + transaction: Transaction avg: Avg min: Min max: Max @@ -301,42 +303,56 @@ Panel Config: tips: Tips metric: Read - Remote Socket Stall: + type: Remote Socket Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - Peer GCD Stall: + type: Peer GCD Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - HBM Stall: + type: HBM Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Remote Socket Stall: + type: Remote Socket Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Peer GCD Stall: + type: Peer GCD Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - HBM Stall: + type: HBM Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Credit Starvation: + type: Credit Starvation + transaction: Write avg: AVG((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) min: MIN((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) max: MAX((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) diff --git a/src/omniperf_cli/configs/gfx906/1800_L2_cache_per_channel.yaml b/src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml similarity index 86% rename from src/omniperf_cli/configs/gfx906/1800_L2_cache_per_channel.yaml rename to src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml index 37a2954384..d0c59891cc 100644 --- a/src/omniperf_cli/configs/gfx906/1800_L2_cache_per_channel.yaml +++ b/src/omniperf_analyze/configs/gfx906/1800_L2_cache_per_channel.yaml @@ -10,28 +10,28 @@ Panel Config: data source: - metric_table: id: 1801 - title: Channel 0 -15 + title: Channel 0-15 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "0": @@ -41,10 +41,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[0]) / $denom)) read req: AVG((TO_INT(TCC_READ[0]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[0]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[0]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[0]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[0] / TCC_EA_RDREQ[0]) if (TCC_EA_RDREQ[0] != 0) else None)) @@ -69,10 +69,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[1]) / $denom)) read req: AVG((TO_INT(TCC_READ[1]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[1]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[1]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[1]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[1] / TCC_EA_RDREQ[1]) if (TCC_EA_RDREQ[1] != 0) else None)) @@ -97,10 +97,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[2]) / $denom)) read req: AVG((TO_INT(TCC_READ[2]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[2]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[2]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[2]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[2] / TCC_EA_RDREQ[2]) if (TCC_EA_RDREQ[2] != 0) else None)) @@ -125,10 +125,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[3]) / $denom)) read req: AVG((TO_INT(TCC_READ[3]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[3]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[3]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[3]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[3] / TCC_EA_RDREQ[3]) if (TCC_EA_RDREQ[3] != 0) else None)) @@ -153,10 +153,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[4]) / $denom)) read req: AVG((TO_INT(TCC_READ[4]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[4]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[4]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[4]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[4] / TCC_EA_RDREQ[4]) if (TCC_EA_RDREQ[4] != 0) else None)) @@ -181,10 +181,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[5]) / $denom)) read req: AVG((TO_INT(TCC_READ[5]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[5]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[5]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[5]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[5] / TCC_EA_RDREQ[5]) if (TCC_EA_RDREQ[5] != 0) else None)) @@ -209,10 +209,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[6]) / $denom)) read req: AVG((TO_INT(TCC_READ[6]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[6]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[6]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[6]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[6] / TCC_EA_RDREQ[6]) if (TCC_EA_RDREQ[6] != 0) else None)) @@ -237,10 +237,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[7]) / $denom)) read req: AVG((TO_INT(TCC_READ[7]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[7]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[7]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[7]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[7] / TCC_EA_RDREQ[7]) if (TCC_EA_RDREQ[7] != 0) else None)) @@ -265,10 +265,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[8]) / $denom)) read req: AVG((TO_INT(TCC_READ[8]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[8]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[8]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[8]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[8] / TCC_EA_RDREQ[8]) if (TCC_EA_RDREQ[8] != 0) else None)) @@ -293,10 +293,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[9]) / $denom)) read req: AVG((TO_INT(TCC_READ[9]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[9]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[9]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[9]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[9] / TCC_EA_RDREQ[9]) if (TCC_EA_RDREQ[9] != 0) else None)) @@ -321,10 +321,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[10]) / $denom)) read req: AVG((TO_INT(TCC_READ[10]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[10]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[10]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[10]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[10] / TCC_EA_RDREQ[10]) if (TCC_EA_RDREQ[10] != 0) else None)) @@ -349,10 +349,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[11]) / $denom)) read req: AVG((TO_INT(TCC_READ[11]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[11]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[11]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[11]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[11] / TCC_EA_RDREQ[11]) if (TCC_EA_RDREQ[11] != 0) else None)) @@ -377,10 +377,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[12]) / $denom)) read req: AVG((TO_INT(TCC_READ[12]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[12]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[12]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[12]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[12] / TCC_EA_RDREQ[12]) if (TCC_EA_RDREQ[12] != 0) else None)) @@ -405,10 +405,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[13]) / $denom)) read req: AVG((TO_INT(TCC_READ[13]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[13]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[13]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[13]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[13] / TCC_EA_RDREQ[13]) if (TCC_EA_RDREQ[13] != 0) else None)) @@ -433,10 +433,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[14]) / $denom)) read req: AVG((TO_INT(TCC_READ[14]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[14]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[14]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[14]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[14] / TCC_EA_RDREQ[14]) if (TCC_EA_RDREQ[14] != 0) else None)) @@ -461,10 +461,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[15]) / $denom)) read req: AVG((TO_INT(TCC_READ[15]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[15]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[15]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[15]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[15] / TCC_EA_RDREQ[15]) if (TCC_EA_RDREQ[15] != 0) else None)) @@ -485,28 +485,28 @@ Panel Config: - metric_table: id: 1802 - title: Channel 16 -31 + title: Channel 16-31 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "16": @@ -514,10 +514,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -534,10 +534,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -554,10 +554,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -574,10 +574,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -594,10 +594,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -614,10 +614,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -634,10 +634,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -654,10 +654,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -674,10 +674,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -694,10 +694,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -714,10 +714,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -734,10 +734,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -754,10 +754,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -774,10 +774,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -794,10 +794,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter @@ -814,10 +814,10 @@ Panel Config: req: None # No perf counter read req: None # No perf counter write req: None # No perf counter - atomicreq: None # No perf counter + atomic req: None # No perf counter ea read req: None # No perf counter ea write req: None # No perf counter - ea atomicreq: None # No perf counter + ea atomic req: None # No perf counter ea read lat - cycles: None # No perf counter ea write lat - cycles: None # No perf counter ea atomic lat - cycles: None # No perf counter diff --git a/src/omniperf_cli/configs/gfx906/1900_memory_chart.yaml b/src/omniperf_analyze/configs/gfx906/1900_memory_chart.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/1900_memory_chart.yaml rename to src/omniperf_analyze/configs/gfx906/1900_memory_chart.yaml diff --git a/src/omniperf_cli/configs/gfx906/2000_kernels.yaml b/src/omniperf_analyze/configs/gfx906/2000_kernels.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx906/2000_kernels.yaml rename to src/omniperf_analyze/configs/gfx906/2000_kernels.yaml diff --git a/src/omniperf_cli/configs/gfx908/0000_top_stat.yaml b/src/omniperf_analyze/configs/gfx908/0000_top_stat.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/0000_top_stat.yaml rename to src/omniperf_analyze/configs/gfx908/0000_top_stat.yaml diff --git a/src/omniperf_cli/configs/gfx908/0100_system_info.yaml b/src/omniperf_analyze/configs/gfx908/0100_system_info.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/0100_system_info.yaml rename to src/omniperf_analyze/configs/gfx908/0100_system_info.yaml diff --git a/src/omniperf_cli/configs/gfx908/0200_system-speed-of-light.yaml b/src/omniperf_analyze/configs/gfx908/0200_system-speed-of-light.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/0200_system-speed-of-light.yaml rename to src/omniperf_analyze/configs/gfx908/0200_system-speed-of-light.yaml diff --git a/src/omniperf_cli/configs/gfx908/0500_command-processor.yaml b/src/omniperf_analyze/configs/gfx908/0500_command-processor.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/0500_command-processor.yaml rename to src/omniperf_analyze/configs/gfx908/0500_command-processor.yaml diff --git a/src/omniperf_cli/configs/gfx908/0600_shader-processor-input.yaml b/src/omniperf_analyze/configs/gfx908/0600_shader-processor-input.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/0600_shader-processor-input.yaml rename to src/omniperf_analyze/configs/gfx908/0600_shader-processor-input.yaml diff --git a/src/omniperf_cli/configs/gfx908/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/0700_wavefront-launch.yaml rename to src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml diff --git a/src/omniperf_cli/configs/gfx908/1000_compute-unit-instruction-mix.yaml b/src/omniperf_analyze/configs/gfx908/1000_compute-unit-instruction-mix.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1000_compute-unit-instruction-mix.yaml rename to src/omniperf_analyze/configs/gfx908/1000_compute-unit-instruction-mix.yaml diff --git a/src/omniperf_cli/configs/gfx908/1100_compute-unit-compute-pipeline.yaml b/src/omniperf_analyze/configs/gfx908/1100_compute-unit-compute-pipeline.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1100_compute-unit-compute-pipeline.yaml rename to src/omniperf_analyze/configs/gfx908/1100_compute-unit-compute-pipeline.yaml diff --git a/src/omniperf_cli/configs/gfx908/1200_lds.yaml b/src/omniperf_analyze/configs/gfx908/1200_lds.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1200_lds.yaml rename to src/omniperf_analyze/configs/gfx908/1200_lds.yaml diff --git a/src/omniperf_cli/configs/gfx908/1300_instruction-cache.yaml b/src/omniperf_analyze/configs/gfx908/1300_instruction-cache.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1300_instruction-cache.yaml rename to src/omniperf_analyze/configs/gfx908/1300_instruction-cache.yaml diff --git a/src/omniperf_cli/configs/gfx908/1400_constant-cache.yaml b/src/omniperf_analyze/configs/gfx908/1400_constant-cache.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1400_constant-cache.yaml rename to src/omniperf_analyze/configs/gfx908/1400_constant-cache.yaml diff --git a/src/omniperf_cli/configs/gfx908/1500_TA_and_TD.yaml b/src/omniperf_analyze/configs/gfx908/1500_TA_and_TD.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1500_TA_and_TD.yaml rename to src/omniperf_analyze/configs/gfx908/1500_TA_and_TD.yaml diff --git a/src/omniperf_cli/configs/gfx908/1600_L1_cache.yaml b/src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml similarity index 85% rename from src/omniperf_cli/configs/gfx908/1600_L1_cache.yaml rename to src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml index 704ec0b6bb..7e58ea2224 100644 --- a/src/omniperf_cli/configs/gfx908/1600_L1_cache.yaml +++ b/src/omniperf_analyze/configs/gfx908/1600_L1_cache.yaml @@ -25,8 +25,8 @@ Panel Config: != 0) else None)) tips: Cache BW: - value: AVG(((100 * TCP_TOTAL_CACHE_ACCESSES_sum) / ((GRBM_GUI_ACTIVE * $numCU) - * 4))) + value: ((100 * AVG(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs)))) + / ((($sclk / 1000) * 64) * $numCU)) tips: Cache Hit: value: AVG(((100 - ((100 * (((TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum) @@ -129,7 +129,13 @@ Panel Config: max: MAX(((TCP_TOTAL_ATOMIC_WITH_RET_sum + TCP_TOTAL_ATOMIC_WITHOUT_RET_sum) / $denom)) unit: (Req + $normUnit) - tips: + tips: + Cache BW: + avg: AVG(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + min: MIN(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + max: MAX(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + unit: GB/s + tips: Cache Accesses: avg: AVG((TCP_TOTAL_CACHE_ACCESSES_sum / $denom)) min: MIN((TCP_TOTAL_CACHE_ACCESSES_sum / $denom)) @@ -169,7 +175,13 @@ Panel Config: max: MAX((TCP_TOTAL_WRITEBACK_INVALIDATES_sum / $denom)) unit: ( + $normUnit) tips: - L1-TCR Read: + L1-L2 BW: + avg: AVG(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + min: MIN(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + max: MAX(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + unit: (Bytes + $normUnit) + tips: + L1-L2 Read: avg: AVG((TCP_TCC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_READ_REQ_sum / $denom)) @@ -225,81 +237,107 @@ Panel Config: id: 1604 title: L1D - L2 Transactions header: + metric: Metric xfer: Xfer - mean: Mean + coherency: Coherency + avg: Avg min: Min max: Max unit: Unit tips: Tips metric: NC - Read: - mean: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) + xfer: Read + coherency: NC + avg: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Read: - mean: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) + xfer: Read + coherency: UC + avg: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Read: - mean: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) + xfer: Read + coherency: CC + avg: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Read: - mean: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) + xfer: Read + coherency: RW + avg: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Write: - mean: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: RW + avg: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: NC + avg: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Write: - mean: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: UC + avg: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Write: - mean: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: CC + avg: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Atomic: - mean: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: NC + avg: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Atomic: - mean: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: UC + avg: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Atomic: - mean: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: CC + avg: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Atomic: - mean: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: RW + avg: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) diff --git a/src/omniperf_cli/configs/gfx908/1700_L2_cache.yaml b/src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml similarity index 96% rename from src/omniperf_cli/configs/gfx908/1700_L2_cache.yaml rename to src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml index aca8e67037..9e76a39b65 100644 --- a/src/omniperf_cli/configs/gfx908/1700_L2_cache.yaml +++ b/src/omniperf_analyze/configs/gfx908/1700_L2_cache.yaml @@ -294,6 +294,8 @@ Panel Config: title: L2 - EA Interface Stalls header: metric: Metric + type: Type + transaction: Transaction avg: Avg min: Min max: Max @@ -301,42 +303,56 @@ Panel Config: tips: Tips metric: Read - Remote Socket Stall: + type: Remote Socket Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - Peer GCD Stall: + type: Peer GCD Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - HBM Stall: + type: HBM Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Remote Socket Stall: + type: Remote Socket Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Peer GCD Stall: + type: Peer GCD Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - HBM Stall: + type: HBM Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Credit Starvation: + type: Credit Starvation + transaction: Write avg: AVG((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) min: MIN((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) max: MAX((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) diff --git a/src/omniperf_cli/configs/gfx908/1800_L2_cache_per_channel.yaml b/src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml similarity index 89% rename from src/omniperf_cli/configs/gfx908/1800_L2_cache_per_channel.yaml rename to src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml index ad93c728f5..69e646db18 100644 --- a/src/omniperf_cli/configs/gfx908/1800_L2_cache_per_channel.yaml +++ b/src/omniperf_analyze/configs/gfx908/1800_L2_cache_per_channel.yaml @@ -10,28 +10,28 @@ Panel Config: data source: - metric_table: id: 1801 - title: Channel 0 -15 + title: Channel 0-15 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "0": @@ -41,10 +41,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[0]) / $denom)) read req: AVG((TO_INT(TCC_READ[0]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[0]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[0]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[0]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[0] / TCC_EA_RDREQ[0]) if (TCC_EA_RDREQ[0] != 0) else None)) @@ -69,10 +69,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[1]) / $denom)) read req: AVG((TO_INT(TCC_READ[1]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[1]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[1]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[1]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[1] / TCC_EA_RDREQ[1]) if (TCC_EA_RDREQ[1] != 0) else None)) @@ -97,10 +97,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[2]) / $denom)) read req: AVG((TO_INT(TCC_READ[2]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[2]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[2]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[2]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[2] / TCC_EA_RDREQ[2]) if (TCC_EA_RDREQ[2] != 0) else None)) @@ -125,10 +125,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[3]) / $denom)) read req: AVG((TO_INT(TCC_READ[3]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[3]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[3]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[3]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[3] / TCC_EA_RDREQ[3]) if (TCC_EA_RDREQ[3] != 0) else None)) @@ -153,10 +153,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[4]) / $denom)) read req: AVG((TO_INT(TCC_READ[4]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[4]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[4]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[4]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[4] / TCC_EA_RDREQ[4]) if (TCC_EA_RDREQ[4] != 0) else None)) @@ -181,10 +181,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[5]) / $denom)) read req: AVG((TO_INT(TCC_READ[5]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[5]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[5]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[5]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[5] / TCC_EA_RDREQ[5]) if (TCC_EA_RDREQ[5] != 0) else None)) @@ -209,10 +209,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[6]) / $denom)) read req: AVG((TO_INT(TCC_READ[6]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[6]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[6]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[6]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[6] / TCC_EA_RDREQ[6]) if (TCC_EA_RDREQ[6] != 0) else None)) @@ -237,10 +237,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[7]) / $denom)) read req: AVG((TO_INT(TCC_READ[7]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[7]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[7]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[7]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[7] / TCC_EA_RDREQ[7]) if (TCC_EA_RDREQ[7] != 0) else None)) @@ -265,10 +265,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[8]) / $denom)) read req: AVG((TO_INT(TCC_READ[8]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[8]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[8]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[8]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[8] / TCC_EA_RDREQ[8]) if (TCC_EA_RDREQ[8] != 0) else None)) @@ -293,10 +293,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[9]) / $denom)) read req: AVG((TO_INT(TCC_READ[9]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[9]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[9]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[9]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[9] / TCC_EA_RDREQ[9]) if (TCC_EA_RDREQ[9] != 0) else None)) @@ -321,10 +321,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[10]) / $denom)) read req: AVG((TO_INT(TCC_READ[10]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[10]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[10]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[10]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[10] / TCC_EA_RDREQ[10]) if (TCC_EA_RDREQ[10] != 0) else None)) @@ -349,10 +349,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[11]) / $denom)) read req: AVG((TO_INT(TCC_READ[11]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[11]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[11]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[11]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[11] / TCC_EA_RDREQ[11]) if (TCC_EA_RDREQ[11] != 0) else None)) @@ -377,10 +377,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[12]) / $denom)) read req: AVG((TO_INT(TCC_READ[12]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[12]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[12]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[12]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[12] / TCC_EA_RDREQ[12]) if (TCC_EA_RDREQ[12] != 0) else None)) @@ -405,10 +405,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[13]) / $denom)) read req: AVG((TO_INT(TCC_READ[13]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[13]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[13]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[13]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[13] / TCC_EA_RDREQ[13]) if (TCC_EA_RDREQ[13] != 0) else None)) @@ -433,10 +433,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[14]) / $denom)) read req: AVG((TO_INT(TCC_READ[14]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[14]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[14]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[14]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[14] / TCC_EA_RDREQ[14]) if (TCC_EA_RDREQ[14] != 0) else None)) @@ -461,10 +461,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[15]) / $denom)) read req: AVG((TO_INT(TCC_READ[15]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[15]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[15]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[15]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[15] / TCC_EA_RDREQ[15]) if (TCC_EA_RDREQ[15] != 0) else None)) @@ -485,28 +485,28 @@ Panel Config: - metric_table: id: 1802 - title: Channel 16 -31 + title: Channel 16-31 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: "16": @@ -516,10 +516,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[16]) / $denom)) read req: AVG((TO_INT(TCC_READ[16]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[16]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[16]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[16]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[16] / TCC_EA_RDREQ[16]) if (TCC_EA_RDREQ[16] != 0) else None)) @@ -544,10 +544,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[17]) / $denom)) read req: AVG((TO_INT(TCC_READ[17]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[17]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[17]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[17]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[17] / TCC_EA_RDREQ[17]) if (TCC_EA_RDREQ[17] != 0) else None)) @@ -572,10 +572,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[18]) / $denom)) read req: AVG((TO_INT(TCC_READ[18]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[18]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[18]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[18]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[18] / TCC_EA_RDREQ[18]) if (TCC_EA_RDREQ[18] != 0) else None)) @@ -600,10 +600,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[19]) / $denom)) read req: AVG((TO_INT(TCC_READ[19]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[19]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[19]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[19]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[19] / TCC_EA_RDREQ[19]) if (TCC_EA_RDREQ[19] != 0) else None)) @@ -628,10 +628,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[20]) / $denom)) read req: AVG((TO_INT(TCC_READ[20]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[20]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[20]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[20]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[20] / TCC_EA_RDREQ[20]) if (TCC_EA_RDREQ[20] != 0) else None)) @@ -656,10 +656,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[21]) / $denom)) read req: AVG((TO_INT(TCC_READ[21]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[21]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[21]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[21]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[21] / TCC_EA_RDREQ[21]) if (TCC_EA_RDREQ[21] != 0) else None)) @@ -684,10 +684,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[22]) / $denom)) read req: AVG((TO_INT(TCC_READ[22]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[22]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[22]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[22]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[22] / TCC_EA_RDREQ[22]) if (TCC_EA_RDREQ[22] != 0) else None)) @@ -712,10 +712,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[23]) / $denom)) read req: AVG((TO_INT(TCC_READ[23]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[23]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[23]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[23]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[23] / TCC_EA_RDREQ[23]) if (TCC_EA_RDREQ[23] != 0) else None)) @@ -740,10 +740,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[24]) / $denom)) read req: AVG((TO_INT(TCC_READ[24]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[24]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[24]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[24]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[24] / TCC_EA_RDREQ[24]) if (TCC_EA_RDREQ[24] != 0) else None)) @@ -768,10 +768,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[25]) / $denom)) read req: AVG((TO_INT(TCC_READ[25]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[25]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[25]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[25]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[25] / TCC_EA_RDREQ[25]) if (TCC_EA_RDREQ[25] != 0) else None)) @@ -796,10 +796,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[26]) / $denom)) read req: AVG((TO_INT(TCC_READ[26]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[26]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[26]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[26]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[26] / TCC_EA_RDREQ[26]) if (TCC_EA_RDREQ[26] != 0) else None)) @@ -824,10 +824,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[27]) / $denom)) read req: AVG((TO_INT(TCC_READ[27]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[27]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[27]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[27]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[27] / TCC_EA_RDREQ[27]) if (TCC_EA_RDREQ[27] != 0) else None)) @@ -852,10 +852,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[28]) / $denom)) read req: AVG((TO_INT(TCC_READ[28]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[28]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[28]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[28]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[28] / TCC_EA_RDREQ[28]) if (TCC_EA_RDREQ[28] != 0) else None)) @@ -880,10 +880,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[29]) / $denom)) read req: AVG((TO_INT(TCC_READ[29]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[29]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[29]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[29]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[29] / TCC_EA_RDREQ[29]) if (TCC_EA_RDREQ[29] != 0) else None)) @@ -908,10 +908,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[30]) / $denom)) read req: AVG((TO_INT(TCC_READ[30]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[30]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[30]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[30]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[30] / TCC_EA_RDREQ[30]) if (TCC_EA_RDREQ[30] != 0) else None)) @@ -936,10 +936,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[31]) / $denom)) read req: AVG((TO_INT(TCC_READ[31]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[31]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[31]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[31]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[31] / TCC_EA_RDREQ[31]) if (TCC_EA_RDREQ[31] != 0) else None)) diff --git a/src/omniperf_cli/configs/gfx908/1900_memory_chart.yaml b/src/omniperf_analyze/configs/gfx908/1900_memory_chart.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/1900_memory_chart.yaml rename to src/omniperf_analyze/configs/gfx908/1900_memory_chart.yaml diff --git a/src/omniperf_cli/configs/gfx908/2000_kernels.yaml b/src/omniperf_analyze/configs/gfx908/2000_kernels.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx908/2000_kernels.yaml rename to src/omniperf_analyze/configs/gfx908/2000_kernels.yaml diff --git a/src/omniperf_cli/configs/gfx90a/0000_top_stat.yaml b/src/omniperf_analyze/configs/gfx90a/0000_top_stat.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/0000_top_stat.yaml rename to src/omniperf_analyze/configs/gfx90a/0000_top_stat.yaml diff --git a/src/omniperf_cli/configs/gfx90a/0100_system_info.yaml b/src/omniperf_analyze/configs/gfx90a/0100_system_info.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/0100_system_info.yaml rename to src/omniperf_analyze/configs/gfx90a/0100_system_info.yaml diff --git a/src/omniperf_cli/configs/gfx90a/0200_system-speed-of-light.yaml b/src/omniperf_analyze/configs/gfx90a/0200_system-speed-of-light.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/0200_system-speed-of-light.yaml rename to src/omniperf_analyze/configs/gfx90a/0200_system-speed-of-light.yaml diff --git a/src/omniperf_cli/configs/gfx90a/0500_command-processor.yaml b/src/omniperf_analyze/configs/gfx90a/0500_command-processor.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/0500_command-processor.yaml rename to src/omniperf_analyze/configs/gfx90a/0500_command-processor.yaml diff --git a/src/omniperf_cli/configs/gfx90a/0600_shader-processor-input.yaml b/src/omniperf_analyze/configs/gfx90a/0600_shader-processor-input.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/0600_shader-processor-input.yaml rename to src/omniperf_analyze/configs/gfx90a/0600_shader-processor-input.yaml diff --git a/src/omniperf_cli/configs/gfx90a/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/0700_wavefront-launch.yaml rename to src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml diff --git a/src/omniperf_cli/configs/gfx90a/1000_compute-unit-instruction-mix.yaml b/src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml similarity index 94% rename from src/omniperf_cli/configs/gfx90a/1000_compute-unit-instruction-mix.yaml rename to src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml index 3c000b4d7e..503bc702ee 100644 --- a/src/omniperf_cli/configs/gfx90a/1000_compute-unit-instruction-mix.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1000_compute-unit-instruction-mix.yaml @@ -163,17 +163,17 @@ Panel Config: tips: Tips metric: MFMA-I8: - count: AVG((SQ_INSTS_VALU_MFMA_I8 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_I8 / $denom)) tips: MFMA-F16: - count: AVG((SQ_INSTS_VALU_MFMA_F16 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_F16 / $denom)) tips: MFMA-BF16: - count: AVG((SQ_INSTS_VALU_MFMA_BF16 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_BF16 / $denom)) tips: MFMA-F32: - count: AVG((SQ_INSTS_VALU_MFMA_F32 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_F32 / $denom)) tips: MFMA-F64: - count: AVG((SQ_INSTS_VALU_MFMA_F64 / SQ_WAVES)) + count: AVG((SQ_INSTS_VALU_MFMA_F64 / $denom)) tips: diff --git a/src/omniperf_cli/configs/gfx90a/1100_compute-unit-compute-pipeline.yaml b/src/omniperf_analyze/configs/gfx90a/1100_compute-unit-compute-pipeline.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/1100_compute-unit-compute-pipeline.yaml rename to src/omniperf_analyze/configs/gfx90a/1100_compute-unit-compute-pipeline.yaml diff --git a/src/omniperf_cli/configs/gfx90a/1200_lds.yaml b/src/omniperf_analyze/configs/gfx90a/1200_lds.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/1200_lds.yaml rename to src/omniperf_analyze/configs/gfx90a/1200_lds.yaml diff --git a/src/omniperf_cli/configs/gfx90a/1300_instruction-cache.yaml b/src/omniperf_analyze/configs/gfx90a/1300_instruction-cache.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/1300_instruction-cache.yaml rename to src/omniperf_analyze/configs/gfx90a/1300_instruction-cache.yaml diff --git a/src/omniperf_cli/configs/gfx90a/1400_constant-cache.yaml b/src/omniperf_analyze/configs/gfx90a/1400_constant-cache.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/1400_constant-cache.yaml rename to src/omniperf_analyze/configs/gfx90a/1400_constant-cache.yaml diff --git a/src/omniperf_cli/configs/gfx90a/1500_TA_and_TD.yaml b/src/omniperf_analyze/configs/gfx90a/1500_TA_and_TD.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/1500_TA_and_TD.yaml rename to src/omniperf_analyze/configs/gfx90a/1500_TA_and_TD.yaml diff --git a/src/omniperf_cli/configs/gfx90a/1600_L1_cache.yaml b/src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml similarity index 85% rename from src/omniperf_cli/configs/gfx90a/1600_L1_cache.yaml rename to src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml index d056c5883c..275281031d 100644 --- a/src/omniperf_cli/configs/gfx90a/1600_L1_cache.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1600_L1_cache.yaml @@ -25,8 +25,8 @@ Panel Config: != 0) else None)) tips: Cache BW: - value: AVG(((100 * TCP_TOTAL_CACHE_ACCESSES_sum) / ((GRBM_GUI_ACTIVE * $numCU) - * 4))) + value: ((100 * AVG(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs)))) + / ((($sclk / 1000) * 64) * $numCU)) tips: Cache Hit: value: AVG(((100 - ((100 * (((TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum) @@ -129,7 +129,13 @@ Panel Config: max: MAX(((TCP_TOTAL_ATOMIC_WITH_RET_sum + TCP_TOTAL_ATOMIC_WITHOUT_RET_sum) / $denom)) unit: (Req + $normUnit) - tips: + tips: + Cache BW: + avg: AVG(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + min: MIN(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + max: MAX(((TCP_TOTAL_CACHE_ACCESSES_sum * 64) / (EndNs - BeginNs))) + unit: GB/s + tips: Cache Accesses: avg: AVG((TCP_TOTAL_CACHE_ACCESSES_sum / $denom)) min: MIN((TCP_TOTAL_CACHE_ACCESSES_sum / $denom)) @@ -169,7 +175,13 @@ Panel Config: max: MAX((TCP_TOTAL_WRITEBACK_INVALIDATES_sum / $denom)) unit: (Req + $normUnit) tips: - L1-TCR Read: + L1-L2 BW: + avg: AVG(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + min: MIN(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + max: MAX(((64 * (TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) / $denom)) + unit: (Bytes + $normUnit) + tips: + L1-L2 Read: avg: AVG((TCP_TCC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_READ_REQ_sum / $denom)) @@ -225,81 +237,107 @@ Panel Config: id: 1604 title: L1D - L2 Transactions header: + metric: Metric xfer: Xfer - mean: Mean + coherency: Coherency + avg: Avg min: Min max: Max unit: Unit tips: Tips metric: NC - Read: - mean: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) + xfer: Read + coherency: NC + avg: AVG((TCP_TCC_NC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Read: - mean: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) + xfer: Read + coherency: UC + avg: AVG((TCP_TCC_UC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Read: - mean: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) + xfer: Read + coherency: CC + avg: AVG((TCP_TCC_CC_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Read: - mean: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) + xfer: Read + coherency: RW + avg: AVG((TCP_TCC_RW_READ_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_READ_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_READ_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Write: - mean: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: RW + avg: AVG((TCP_TCC_RW_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Write: - mean: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: NC + avg: AVG((TCP_TCC_NC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Write: - mean: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: UC + avg: AVG((TCP_TCC_UC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Write: - mean: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) + xfer: Write + coherency: CC + avg: AVG((TCP_TCC_CC_WRITE_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_WRITE_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_WRITE_REQ_sum / $denom)) unit: (Req + $normUnit) tips: NC - Atomic: - mean: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: NC + avg: AVG((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_NC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: UC - Atomic: - mean: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: UC + avg: AVG((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_UC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: CC - Atomic: - mean: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: CC + avg: AVG((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_CC_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) tips: RW - Atomic: - mean: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) + xfer: Atomic + coherency: RW + avg: AVG((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) min: MIN((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) max: MAX((TCP_TCC_RW_ATOMIC_REQ_sum / $denom)) unit: (Req + $normUnit) diff --git a/src/omniperf_cli/configs/gfx90a/1700_L2_cache.yaml b/src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml similarity index 96% rename from src/omniperf_cli/configs/gfx90a/1700_L2_cache.yaml rename to src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml index d58d4f0822..7be18091af 100644 --- a/src/omniperf_cli/configs/gfx90a/1700_L2_cache.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1700_L2_cache.yaml @@ -294,6 +294,8 @@ Panel Config: title: L2 - Fabric Interface Stalls header: metric: Metric + type: Type + transaction: Transaction avg: Avg min: Min max: Max @@ -301,42 +303,56 @@ Panel Config: tips: Tips metric: Read - Remote Socket Stall: + type: Remote Socket Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - Peer GCD Stall: + type: Peer GCD Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Read - HBM Stall: + type: HBM Stall + transaction: Read avg: AVG((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_RDREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Remote Socket Stall: + type: Remote Socket Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_IO_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Peer GCD Stall: + type: Peer GCD Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_GMI_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - HBM Stall: + type: HBM Stall + transaction: Write avg: AVG((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) min: MIN((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) max: MAX((TCC_EA_WRREQ_DRAM_CREDIT_STALL_sum / $denom)) unit: (Req + $normUnit) tips: Write - Credit Starvation: + type: Credit Starvation + transaction: Write avg: AVG((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) min: MIN((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) max: MAX((TCC_TOO_MANY_EA_WRREQS_STALL_sum / $denom)) diff --git a/src/omniperf_cli/configs/gfx90a/1800_L2_cache_per_channel.yaml b/src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml similarity index 88% rename from src/omniperf_cli/configs/gfx90a/1800_L2_cache_per_channel.yaml rename to src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml index 16b0930e61..4918e3a8d9 100644 --- a/src/omniperf_cli/configs/gfx90a/1800_L2_cache_per_channel.yaml +++ b/src/omniperf_analyze/configs/gfx90a/1800_L2_cache_per_channel.yaml @@ -10,28 +10,28 @@ Panel Config: data source: - metric_table: id: 1801 - title: Channel 0 -15 + title: Channel 0-15 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: '0': @@ -40,10 +40,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[0]) / $denom)) read req: AVG((TO_INT(TCC_READ[0]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[0]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[0]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[0]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[0]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[0]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[0] / TCC_EA_RDREQ[0]) if (TCC_EA_RDREQ[0] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[0] / TCC_EA_WRREQ[0]) if (TCC_EA_WRREQ[0] @@ -64,10 +64,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[1]) / $denom)) read req: AVG((TO_INT(TCC_READ[1]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[1]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[1]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[1]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[1]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[1]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[1] / TCC_EA_RDREQ[1]) if (TCC_EA_RDREQ[1] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[1] / TCC_EA_WRREQ[1]) if (TCC_EA_WRREQ[1] @@ -88,10 +88,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[2]) / $denom)) read req: AVG((TO_INT(TCC_READ[2]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[2]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[2]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[2]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[2]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[2]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[2] / TCC_EA_RDREQ[2]) if (TCC_EA_RDREQ[2] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[2] / TCC_EA_WRREQ[2]) if (TCC_EA_WRREQ[2] @@ -112,10 +112,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[3]) / $denom)) read req: AVG((TO_INT(TCC_READ[3]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[3]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[3]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[3]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[3]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[3]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[3] / TCC_EA_RDREQ[3]) if (TCC_EA_RDREQ[3] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[3] / TCC_EA_WRREQ[3]) if (TCC_EA_WRREQ[3] @@ -136,10 +136,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[4]) / $denom)) read req: AVG((TO_INT(TCC_READ[4]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[4]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[4]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[4]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[4]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[4]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[4] / TCC_EA_RDREQ[4]) if (TCC_EA_RDREQ[4] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[4] / TCC_EA_WRREQ[4]) if (TCC_EA_WRREQ[4] @@ -160,10 +160,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[5]) / $denom)) read req: AVG((TO_INT(TCC_READ[5]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[5]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[5]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[5]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[5]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[5]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[5] / TCC_EA_RDREQ[5]) if (TCC_EA_RDREQ[5] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[5] / TCC_EA_WRREQ[5]) if (TCC_EA_WRREQ[5] @@ -184,10 +184,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[6]) / $denom)) read req: AVG((TO_INT(TCC_READ[6]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[6]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[6]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[6]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[6]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[6]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[6] / TCC_EA_RDREQ[6]) if (TCC_EA_RDREQ[6] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[6] / TCC_EA_WRREQ[6]) if (TCC_EA_WRREQ[6] @@ -208,10 +208,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[7]) / $denom)) read req: AVG((TO_INT(TCC_READ[7]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[7]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[7]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[7]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[7]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[7]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[7] / TCC_EA_RDREQ[7]) if (TCC_EA_RDREQ[7] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[7] / TCC_EA_WRREQ[7]) if (TCC_EA_WRREQ[7] @@ -232,10 +232,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[8]) / $denom)) read req: AVG((TO_INT(TCC_READ[8]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[8]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[8]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[8]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[8]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[8]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[8] / TCC_EA_RDREQ[8]) if (TCC_EA_RDREQ[8] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[8] / TCC_EA_WRREQ[8]) if (TCC_EA_WRREQ[8] @@ -256,10 +256,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[9]) / $denom)) read req: AVG((TO_INT(TCC_READ[9]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[9]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[9]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[9]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[9]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[9]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[9] / TCC_EA_RDREQ[9]) if (TCC_EA_RDREQ[9] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[9] / TCC_EA_WRREQ[9]) if (TCC_EA_WRREQ[9] @@ -280,10 +280,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[10]) / $denom)) read req: AVG((TO_INT(TCC_READ[10]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[10]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[10]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[10]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[10]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[10]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[10] / TCC_EA_RDREQ[10]) if (TCC_EA_RDREQ[10] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[10] / TCC_EA_WRREQ[10]) if (TCC_EA_WRREQ[10] @@ -304,10 +304,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[11]) / $denom)) read req: AVG((TO_INT(TCC_READ[11]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[11]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[11]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[11]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[11]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[11]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[11] / TCC_EA_RDREQ[11]) if (TCC_EA_RDREQ[11] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[11] / TCC_EA_WRREQ[11]) if (TCC_EA_WRREQ[11] @@ -328,10 +328,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[12]) / $denom)) read req: AVG((TO_INT(TCC_READ[12]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[12]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[12]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[12]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[12]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[12]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[12] / TCC_EA_RDREQ[12]) if (TCC_EA_RDREQ[12] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[12] / TCC_EA_WRREQ[12]) if (TCC_EA_WRREQ[12] @@ -352,10 +352,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[13]) / $denom)) read req: AVG((TO_INT(TCC_READ[13]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[13]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[13]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[13]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[13]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[13]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[13] / TCC_EA_RDREQ[13]) if (TCC_EA_RDREQ[13] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[13] / TCC_EA_WRREQ[13]) if (TCC_EA_WRREQ[13] @@ -376,10 +376,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[14]) / $denom)) read req: AVG((TO_INT(TCC_READ[14]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[14]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[14]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[14]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[14]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[14]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[14] / TCC_EA_RDREQ[14]) if (TCC_EA_RDREQ[14] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[14] / TCC_EA_WRREQ[14]) if (TCC_EA_WRREQ[14] @@ -400,10 +400,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[15]) / $denom)) read req: AVG((TO_INT(TCC_READ[15]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[15]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[15]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[15]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[15]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[15]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[15] / TCC_EA_RDREQ[15]) if (TCC_EA_RDREQ[15] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[15] / TCC_EA_WRREQ[15]) if (TCC_EA_WRREQ[15] @@ -420,28 +420,28 @@ Panel Config: tips: - metric_table: id: 1802 - title: Channel 16 -31 + title: Channel 16-31 columnwise: True header: channel: Channel - hit rate: Hit Rate - req: Req - read req: Read Req - write req: Write Req - atomicreq: AtomicReq - ea read req: EA Read Req - ea write req: EA Write Req - ea atomicreq: EA AtomicReq - ea read lat - cycles: EA Read Lat - cycles - ea write lat - cycles: EA Write Lat - cycles - ea atomic lat - cycles: EA Atomic Lat - cycles - ea read stall - io: EA Read Stall - IO - ea read stall - gmi: EA Read Stall - GMI - ea read stall - dram: EA Read Stall - DRAM - ea write stall - io: EA Write Stall - IO - ea write stall - gmi: EA Write Stall - GMI - ea write stall - dram: EA Write Stall - DRAM - ea write stall - starve: EA Write Stall - Starve + hit rate: L2 Cache Hit Rate (%) + req: Requests (Requests) + read req: L1-L2 Read (Requests) + write req: L1-L2 Write (Requests) + atomic req: L1-L2 Atomic (Requests) + ea read req: L2-EA Read (Requests) + ea write req: L2-EA Write (Requests) + ea atomic req: L2-EA Atomic (Requests) + ea read lat - cycles: L2-EA Read Latency (Cycles) + ea write lat - cycles: L2-EA Write Latency (Cycles) + ea atomic lat - cycles: L2-EA Atomic Latency (Cycles) + ea read stall - io: L2-EA Read Stall - IO (Cycles per) + ea read stall - gmi: L2-EA Read Stall - GMI (Cycles per) + ea read stall - dram: L2-EA Read Stall - DRAM (Cycles per) + ea write stall - io: L2-EA Write Stall - IO (Cycles per) + ea write stall - gmi: L2-EA Write Stall - GMI (Cycles per) + ea write stall - dram: L2-EA Write Stall - DRAM (Cycles per) + ea write stall - starve: L2-EA Write Stall - Starve (Cycles per) tips: Tips metric: '16': @@ -450,10 +450,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[16]) / $denom)) read req: AVG((TO_INT(TCC_READ[16]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[16]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[16]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[16]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[16]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[16]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[16] / TCC_EA_RDREQ[16]) if (TCC_EA_RDREQ[16] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[16] / TCC_EA_WRREQ[16]) if (TCC_EA_WRREQ[16] @@ -474,10 +474,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[17]) / $denom)) read req: AVG((TO_INT(TCC_READ[17]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[17]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[17]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[17]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[17]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[17]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[17] / TCC_EA_RDREQ[17]) if (TCC_EA_RDREQ[17] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[17] / TCC_EA_WRREQ[17]) if (TCC_EA_WRREQ[17] @@ -498,10 +498,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[18]) / $denom)) read req: AVG((TO_INT(TCC_READ[18]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[18]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[18]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[18]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[18]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[18]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[18] / TCC_EA_RDREQ[18]) if (TCC_EA_RDREQ[18] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[18] / TCC_EA_WRREQ[18]) if (TCC_EA_WRREQ[18] @@ -522,10 +522,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[19]) / $denom)) read req: AVG((TO_INT(TCC_READ[19]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[19]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[19]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[19]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[19]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[19]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[19] / TCC_EA_RDREQ[19]) if (TCC_EA_RDREQ[19] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[19] / TCC_EA_WRREQ[19]) if (TCC_EA_WRREQ[19] @@ -546,10 +546,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[20]) / $denom)) read req: AVG((TO_INT(TCC_READ[20]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[20]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[20]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[20]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[20]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[20]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[20] / TCC_EA_RDREQ[20]) if (TCC_EA_RDREQ[20] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[20] / TCC_EA_WRREQ[20]) if (TCC_EA_WRREQ[20] @@ -570,10 +570,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[21]) / $denom)) read req: AVG((TO_INT(TCC_READ[21]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[21]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[21]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[21]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[21]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[21]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[21] / TCC_EA_RDREQ[21]) if (TCC_EA_RDREQ[21] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[21] / TCC_EA_WRREQ[21]) if (TCC_EA_WRREQ[21] @@ -594,10 +594,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[22]) / $denom)) read req: AVG((TO_INT(TCC_READ[22]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[22]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[22]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[22]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[22]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[22]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[22] / TCC_EA_RDREQ[22]) if (TCC_EA_RDREQ[22] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[22] / TCC_EA_WRREQ[22]) if (TCC_EA_WRREQ[22] @@ -618,10 +618,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[23]) / $denom)) read req: AVG((TO_INT(TCC_READ[23]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[23]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[23]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[23]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[23]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[23]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[23] / TCC_EA_RDREQ[23]) if (TCC_EA_RDREQ[23] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[23] / TCC_EA_WRREQ[23]) if (TCC_EA_WRREQ[23] @@ -642,10 +642,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[24]) / $denom)) read req: AVG((TO_INT(TCC_READ[24]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[24]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[24]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[24]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[24]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[24]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[24] / TCC_EA_RDREQ[24]) if (TCC_EA_RDREQ[24] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[24] / TCC_EA_WRREQ[24]) if (TCC_EA_WRREQ[24] @@ -666,10 +666,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[25]) / $denom)) read req: AVG((TO_INT(TCC_READ[25]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[25]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[25]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[25]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[25]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[25]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[25] / TCC_EA_RDREQ[25]) if (TCC_EA_RDREQ[25] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[25] / TCC_EA_WRREQ[25]) if (TCC_EA_WRREQ[25] @@ -690,10 +690,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[26]) / $denom)) read req: AVG((TO_INT(TCC_READ[26]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[26]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[26]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[26]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[26]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[26]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[26] / TCC_EA_RDREQ[26]) if (TCC_EA_RDREQ[26] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[26] / TCC_EA_WRREQ[26]) if (TCC_EA_WRREQ[26] @@ -714,10 +714,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[27]) / $denom)) read req: AVG((TO_INT(TCC_READ[27]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[27]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[27]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[27]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[27]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[27]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[27] / TCC_EA_RDREQ[27]) if (TCC_EA_RDREQ[27] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[27] / TCC_EA_WRREQ[27]) if (TCC_EA_WRREQ[27] @@ -738,10 +738,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[28]) / $denom)) read req: AVG((TO_INT(TCC_READ[28]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[28]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[28]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[28]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[28]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[28]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[28] / TCC_EA_RDREQ[28]) if (TCC_EA_RDREQ[28] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[28] / TCC_EA_WRREQ[28]) if (TCC_EA_WRREQ[28] @@ -762,10 +762,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[29]) / $denom)) read req: AVG((TO_INT(TCC_READ[29]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[29]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[29]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[29]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[29]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[29]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[29] / TCC_EA_RDREQ[29]) if (TCC_EA_RDREQ[29] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[29] / TCC_EA_WRREQ[29]) if (TCC_EA_WRREQ[29] @@ -786,10 +786,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[30]) / $denom)) read req: AVG((TO_INT(TCC_READ[30]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[30]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[30]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[30]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[30]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[30]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[30] / TCC_EA_RDREQ[30]) if (TCC_EA_RDREQ[30] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[30] / TCC_EA_WRREQ[30]) if (TCC_EA_WRREQ[30] @@ -810,10 +810,10 @@ Panel Config: req: AVG((TO_INT(TCC_REQ[31]) / $denom)) read req: AVG((TO_INT(TCC_READ[31]) / $denom)) write req: AVG((TO_INT(TCC_WRITE[31]) / $denom)) - atomicreq: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) + atomic req: AVG((TO_INT(TCC_ATOMIC[31]) / $denom)) ea read req: AVG((TO_INT(TCC_EA_RDREQ[31]) / $denom)) ea write req: AVG((TO_INT(TCC_EA_WRREQ[31]) / $denom)) - ea atomicreq: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) + ea atomic req: AVG((TO_INT(TCC_EA_ATOMIC[31]) / $denom)) ea read lat - cycles: AVG(((TCC_EA_RDREQ_LEVEL[31] / TCC_EA_RDREQ[31]) if (TCC_EA_RDREQ[31] != 0) else None)) ea write lat - cycles: AVG(((TCC_EA_WRREQ_LEVEL[31] / TCC_EA_WRREQ[31]) if (TCC_EA_WRREQ[31] diff --git a/src/omniperf_cli/configs/gfx90a/1900_memory_chart.yaml b/src/omniperf_analyze/configs/gfx90a/1900_memory_chart.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/1900_memory_chart.yaml rename to src/omniperf_analyze/configs/gfx90a/1900_memory_chart.yaml diff --git a/src/omniperf_cli/configs/gfx90a/2000_kernels.yaml b/src/omniperf_analyze/configs/gfx90a/2000_kernels.yaml similarity index 100% rename from src/omniperf_cli/configs/gfx90a/2000_kernels.yaml rename to src/omniperf_analyze/configs/gfx90a/2000_kernels.yaml diff --git a/src/omniperf_cli/configs/panel_config_template.yaml b/src/omniperf_analyze/configs/panel_config_template.yaml similarity index 100% rename from src/omniperf_cli/configs/panel_config_template.yaml rename to src/omniperf_analyze/configs/panel_config_template.yaml diff --git a/src/omniperf_cli/convertor/mongodb/README.md b/src/omniperf_analyze/convertor/mongodb/README.md similarity index 76% rename from src/omniperf_cli/convertor/mongodb/README.md rename to src/omniperf_analyze/convertor/mongodb/README.md index 7fedc3f759..755ef3fa68 100644 --- a/src/omniperf_cli/convertor/mongodb/README.md +++ b/src/omniperf_analyze/convertor/mongodb/README.md @@ -1,6 +1,6 @@ # Description -The convert is designed to convert major core metric definitions from Omniperf to omniperf_cli. It depends on the syntax and usage of Grafana and MongoDB query in Omniperf. We are not intending to write a full parser of Grafana/MongoDB. +The convert is designed to convert major core metric definitions from Omniperf to omniperf_analyze. It depends on the syntax and usage of Grafana and MongoDB query in Omniperf. We are not intending to write a full parser of Grafana/MongoDB. Originally, we hope to make it one-stop script, a.k.a, "convert -s 0". However, it seems 2 stages conversion is a good practice. @@ -15,7 +15,7 @@ Originally, we hope to make it one-stop script, a.k.a, "convert -s 0". However, - `./convert -s 2` - `diff ./converted ./converted_bak` to make sure all the changes as your expectation. - Copy all metric tables from ./converted to ../../configs/gfx90a/ manually ONE by ONE. -- Run a basic test to verify the config, i.e., `omniperf_cli.py -d sample/mi200` +- Run a basic test to verify the config, i.e., `omniperf_analyze.py -d sample/mi200` - `diff ../../configs/gfx90a/ ../../configs/gfx908/`, and update the gfx908 configs accordingly. - `diff ../../configs/gfx90a/ ../../configs/gfx906/`, and update the gfx906 configs accordingly. -- Run a basic test to verify the config, i.e., `omniperf_cli.py -d sample/mi50 -d sample/mi100 -d sample/mi200` +- Run a basic test to verify the config, i.e., `omniperf_analyze.py -d sample/mi50 -d sample/mi100 -d sample/mi200` diff --git a/src/omniperf_cli/convertor/mongodb/convert b/src/omniperf_analyze/convertor/mongodb/convert similarity index 100% rename from src/omniperf_cli/convertor/mongodb/convert rename to src/omniperf_analyze/convertor/mongodb/convert diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/00_id_159_SYSTEM-INFO.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/00_id_159_SYSTEM-INFO.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/00_id_159_SYSTEM-INFO.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/00_id_159_SYSTEM-INFO.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/07_id_213_TOP-KERNELS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/07_id_213_TOP-KERNELS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/07_id_213_TOP-KERNELS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/07_id_213_TOP-KERNELS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/08_id_251_TOP-DISPATCHES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/08_id_251_TOP-DISPATCHES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/08_id_251_TOP-DISPATCHES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/08_id_251_TOP-DISPATCHES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/18_id_106_SPI-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/18_id_106_SPI-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/18_id_106_SPI-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/18_id_106_SPI-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/30_id_257_PIPELINE-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/30_id_257_PIPELINE-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/30_id_257_PIPELINE-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/30_id_257_PIPELINE-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/35_id_100_LDS-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/35_id_100_LDS-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/35_id_100_LDS-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/35_id_100_LDS-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/44_id_132_TA.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/44_id_132_TA.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/44_id_132_TA.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/44_id_132_TA.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/45_id_134_TD.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/45_id_134_TD.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/45_id_134_TD.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/45_id_134_TD.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/modified_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/modified_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/modified_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/modified_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/00_id_159_SYSTEM-INFO.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/00_id_159_SYSTEM-INFO.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/00_id_159_SYSTEM-INFO.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/00_id_159_SYSTEM-INFO.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/02_id_110_SPEED-OF-LIGHT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/03_id_175_DISPATCH-IDS-CURRENT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/04_id_215_DISPATCH-IDS-BASELINE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/06_id_157_KERNEL-TIME-HISTOGRAM.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/07_id_213_TOP-KERNELS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/07_id_213_TOP-KERNELS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/07_id_213_TOP-KERNELS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/07_id_213_TOP-KERNELS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/08_id_251_TOP-DISPATCHES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/08_id_251_TOP-DISPATCHES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/08_id_251_TOP-DISPATCHES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/08_id_251_TOP-DISPATCHES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/10_id_285_MEMORY-CHART-NORMALIZATION-NORMUNIT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/12_id_253_EMPIRICAL-ROOFLINE-FP32FP64-MI200.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/13_id_312_EMPIRICAL-ROOFLINE-FP16INT8-MI200.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/15_id_6_COMMAND-PROCESSOR-FETCHER.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/16_id_4_COMMAND-PROCESSOR-COMPUTE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/18_id_106_SPI-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/18_id_106_SPI-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/18_id_106_SPI-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/18_id_106_SPI-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/19_id_104_SPI-RESOURCE-ALLOCATION.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/21_id_10_WAVEFRONT-LAUNCH-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/22_id_34_WAVEFRONT-RUNTIME-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/24_id_12_INSTRUCTION-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/25_id_24_VALU-ARITHMETIC-INSTR-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/26_id_275_VMEM-INSTR-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/27_id_16_MFMA-ARITHMETIC-INSTR-MIX.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/29_id_211_SPEED-OF-LIGHT-COMPUTE-PIPELINE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/30_id_257_PIPELINE-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/30_id_257_PIPELINE-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/30_id_257_PIPELINE-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/30_id_257_PIPELINE-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/31_id_96_ARITHMETIC-OPERATIONS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/32_id_255_MEMORY-LATENCIES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/34_id_205_SPEED-OF-LIGHT-LDS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/35_id_100_LDS-STATS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/35_id_100_LDS-STATS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/35_id_100_LDS-STATS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/35_id_100_LDS-STATS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/37_id_48_SPEED-OF-LIGHT-INSTRUCTION-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/38_id_259_INSTRUCTION-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/40_id_54_SPEED-OF-LIGHT-SCALAR-L1D-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/41_id_261_SCALAR-L1D-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/42_id_52_SCALAR-L1D-CACHE-L2-INTERFACE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/44_id_132_TA.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/44_id_132_TA.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/44_id_132_TA.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/44_id_132_TA.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/45_id_134_TD.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/45_id_134_TD.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/45_id_134_TD.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/45_id_134_TD.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/47_id_165_SPEED-OF-LIGHT-VECTOR-L1D-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/48_id_116_VECTOR-L1D-CACHE-STALLS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/49_id_128_VECTOR-L1D-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/50_id_120_VECTOR-L1D-L2-TRANSACTIONS-REQ-NORMUNIT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/51_id_124_VECTOR-L1D-ADDR-TRANSLATION.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/53_id_64_SPEED-OF-LIGHT-L2-CACHE.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/54_id_62_L2-FABRIC-TRANSACTIONS.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/55_id_58_L2-CACHE-ACCESSES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/56_id_60_L2-FABRIC-INTERFACE-STALLS-CYCLES-NORMUNIT.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/72_id_68_L2-EA-READ-LATENCY-CHANNEL-0-15-CYCLES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/original_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json b/src/omniperf_analyze/convertor/mongodb/original_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/original_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json rename to src/omniperf_analyze/convertor/mongodb/original_query/73_id_70_L2-EA-READ-LATENCY-CHANNEL-16-31-CYCLES.s0_original_query.json diff --git a/src/omniperf_cli/convertor/mongodb/sample.json b/src/omniperf_analyze/convertor/mongodb/sample.json similarity index 100% rename from src/omniperf_cli/convertor/mongodb/sample.json rename to src/omniperf_analyze/convertor/mongodb/sample.json diff --git a/src/omniperf_cli/convertor/sql/1001_TA.config b/src/omniperf_analyze/convertor/sql/1001_TA.config similarity index 100% rename from src/omniperf_cli/convertor/sql/1001_TA.config rename to src/omniperf_analyze/convertor/sql/1001_TA.config diff --git a/src/omniperf_cli/convertor/sql/1002_TD.config b/src/omniperf_analyze/convertor/sql/1002_TD.config similarity index 100% rename from src/omniperf_cli/convertor/sql/1002_TD.config rename to src/omniperf_analyze/convertor/sql/1002_TD.config diff --git a/src/omniperf_cli/convertor/sql/100_System-speed-of-light.config b/src/omniperf_analyze/convertor/sql/100_System-speed-of-light.config similarity index 100% rename from src/omniperf_cli/convertor/sql/100_System-speed-of-light.config rename to src/omniperf_analyze/convertor/sql/100_System-speed-of-light.config diff --git a/src/omniperf_cli/convertor/sql/401_CPF.config b/src/omniperf_analyze/convertor/sql/401_CPF.config similarity index 100% rename from src/omniperf_cli/convertor/sql/401_CPF.config rename to src/omniperf_analyze/convertor/sql/401_CPF.config diff --git a/src/omniperf_cli/convertor/sql/402_CPC.config b/src/omniperf_analyze/convertor/sql/402_CPC.config similarity index 100% rename from src/omniperf_cli/convertor/sql/402_CPC.config rename to src/omniperf_analyze/convertor/sql/402_CPC.config diff --git a/src/omniperf_cli/convertor/sql/501_SPI-Stats.config b/src/omniperf_analyze/convertor/sql/501_SPI-Stats.config similarity index 100% rename from src/omniperf_cli/convertor/sql/501_SPI-Stats.config rename to src/omniperf_analyze/convertor/sql/501_SPI-Stats.config diff --git a/src/omniperf_cli/convertor/sql/502_SPI-Resource-Allocation.config b/src/omniperf_analyze/convertor/sql/502_SPI-Resource-Allocation.config similarity index 100% rename from src/omniperf_cli/convertor/sql/502_SPI-Resource-Allocation.config rename to src/omniperf_analyze/convertor/sql/502_SPI-Resource-Allocation.config diff --git a/src/omniperf_cli/convertor/sql/801_LDS.config b/src/omniperf_analyze/convertor/sql/801_LDS.config similarity index 100% rename from src/omniperf_cli/convertor/sql/801_LDS.config rename to src/omniperf_analyze/convertor/sql/801_LDS.config diff --git a/src/omniperf_cli/convertor/sql/901_L1I_cache.config b/src/omniperf_analyze/convertor/sql/901_L1I_cache.config similarity index 100% rename from src/omniperf_cli/convertor/sql/901_L1I_cache.config rename to src/omniperf_analyze/convertor/sql/901_L1I_cache.config diff --git a/src/omniperf_cli/convertor/sql/902_L1K_cache.config b/src/omniperf_analyze/convertor/sql/902_L1K_cache.config similarity index 100% rename from src/omniperf_cli/convertor/sql/902_L1K_cache.config rename to src/omniperf_analyze/convertor/sql/902_L1K_cache.config diff --git a/src/omniperf_cli/convertor/sql/903_L1K_TC_Interface.config b/src/omniperf_analyze/convertor/sql/903_L1K_TC_Interface.config similarity index 100% rename from src/omniperf_cli/convertor/sql/903_L1K_TC_Interface.config rename to src/omniperf_analyze/convertor/sql/903_L1K_TC_Interface.config diff --git a/src/omniperf_cli/convertor/sql/convertor.py b/src/omniperf_analyze/convertor/sql/convertor.py similarity index 100% rename from src/omniperf_cli/convertor/sql/convertor.py rename to src/omniperf_analyze/convertor/sql/convertor.py diff --git a/src/omniperf_cli/convertor/sql/convertor2.py b/src/omniperf_analyze/convertor/sql/convertor2.py similarity index 100% rename from src/omniperf_cli/convertor/sql/convertor2.py rename to src/omniperf_analyze/convertor/sql/convertor2.py diff --git a/src/omniperf_cli/customized/fft/panel_000_top_stat.yaml b/src/omniperf_analyze/customized/fft/panel_000_top_stat.yaml similarity index 100% rename from src/omniperf_cli/customized/fft/panel_000_top_stat.yaml rename to src/omniperf_analyze/customized/fft/panel_000_top_stat.yaml diff --git a/src/omniperf_cli/customized/fft/panel_100_system-speed-of-light.yaml b/src/omniperf_analyze/customized/fft/panel_100_system-speed-of-light.yaml similarity index 100% rename from src/omniperf_cli/customized/fft/panel_100_system-speed-of-light.yaml rename to src/omniperf_analyze/customized/fft/panel_100_system-speed-of-light.yaml diff --git a/src/omniperf_cli/doc/baseline_comparison.png b/src/omniperf_analyze/doc/baseline_comparison.png similarity index 100% rename from src/omniperf_cli/doc/baseline_comparison.png rename to src/omniperf_analyze/doc/baseline_comparison.png diff --git a/src/omniperf_cli/doc/classes.png b/src/omniperf_analyze/doc/classes.png similarity index 100% rename from src/omniperf_cli/doc/classes.png rename to src/omniperf_analyze/doc/classes.png diff --git a/src/omniperf_cli/doc/main_flow.png b/src/omniperf_analyze/doc/main_flow.png similarity index 100% rename from src/omniperf_cli/doc/main_flow.png rename to src/omniperf_analyze/doc/main_flow.png diff --git a/src/omniperf_cli/omniperf_cli.py b/src/omniperf_analyze/omniperf_analyze.py similarity index 60% rename from src/omniperf_cli/omniperf_cli.py rename to src/omniperf_analyze/omniperf_analyze.py index bf900c9d27..4741a3acfa 100644 --- a/src/omniperf_cli/omniperf_cli.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -24,7 +24,7 @@ """ Quick run: - omniperf_cli.py -d 1st_run_dir -d 2nd_run_dir -b 2 + analyze.py -d 1st_run_dir -d 2nd_run_dir -b 2 Common abbreviations in the code: df - pandas.dataframe @@ -40,32 +40,21 @@ import sys import argparse import os.path from pathlib import Path +from omniperf_analyze.utils import parser, file_io -def omniperf_cli(args): - cur_root = Path(__file__).resolve() - - if args.dependency: - print("pip3 install astunparse numpy tabulate pandas pyyaml") - sys.exit(0) - +def initialize_run(args, normalization_filter=None): import pandas as pd from collections import OrderedDict - from dataclasses import dataclass, field + from omniperf_analyze.utils import schema from tabulate import tabulate - # from utils import schema, parser, file_io, tty, plot - from omniperf_cli.utils import schema, parser, file_io, tty - # Fixme: cur_root.parent.joinpath('soc_params') soc_params_dir = os.path.join(os.path.dirname(__file__), "..", "soc_params") - soc_spec_df = file_io.load_soc_params(soc_params_dir) - # NB: maybe create bak file for the old run before open it - output = open(args.output_file, "w+") if args.output_file else sys.stdout - single_panel_config = file_io.is_single_panel_config(Path(args.config_dir)) + global archConfigs archConfigs = {} for arch in file_io.supported_arch.keys(): ac = schema.ArchConfig() @@ -99,8 +88,13 @@ def omniperf_cli(args): ) sys.exit(0) - for k, v in archConfigs.items(): - parser.build_metric_value_string(v.dfs, v.dfs_type, args.normal_unit) + # Use original normalization or user input from GUI + if not normalization_filter: + for k, v in archConfigs.items(): + parser.build_metric_value_string(v.dfs, v.dfs_type, args.normal_unit) + else: + for k, v in archConfigs.items(): + parser.build_metric_value_string(v.dfs, v.dfs_type, normalization_filter) runs = OrderedDict() @@ -128,6 +122,105 @@ def omniperf_cli(args): w.soc_spec = file_io.get_soc_params(soc_spec_df, arch) runs[d[0]] = w + # Return rather than referencing 'runs' globally (since used outside of file scope) + return runs + + +def run_gui(args, runs): + import dash + from omniperf_analyze.utils import gui + import dash_bootstrap_components as dbc + + app = dash.Dash(__name__, external_stylesheets=[dbc.themes.CYBORG]) + + if len(runs) == 1: + num_results = 10 + file_io.create_df_kernel_top_stats( + args.path[0][0], + runs[args.path[0][0]].filter_gpu_ids, + runs[args.path[0][0]].filter_dispatch_ids, + args.time_unit, + num_results, + ) + runs[args.path[0][0]].raw_pmc = file_io.create_df_pmc( + args.path[0][0], args.verbose + ) # create mega df + parser.load_kernel_top(runs[args.path[0][0]], args.path[0][0]) + + input_filters = { + "kernel": runs[args.path[0][0]].filter_kernel_ids, + "gpu": runs[args.path[0][0]].filter_gpu_ids, + "dispatch": runs[args.path[0][0]].filter_dispatch_ids, + "normalization": args.normal_unit, + } + + gui.build_layout( + app, + runs, + archConfigs["gfx90a"], + input_filters, + args.decimal, + args.time_unit, + args.cols, + str(args.path[0][0]), + args.g, + args.verbose, + args, + ) + app.run_server(debug=False, host="0.0.0.0", port=args.gui) + else: + print("Multiple runs not supported yet") + + +def run_cli(args, runs): + from omniperf_analyze.utils import tty + + # NB: + # If we assume the panel layout for all archs are similar, it doesn't matter + # which archConfig passed into show_all function. + # After decide to how to manage kernels display patterns, we can revisit it. + for d in args.path: + num_results = 10 + file_io.create_df_kernel_top_stats( + d[0], + runs[d[0]].filter_gpu_ids, + runs[d[0]].filter_dispatch_ids, + args.time_unit, + num_results, + ) + runs[d[0]].raw_pmc = file_io.create_df_pmc( + d[0], args.verbose + ) # creates mega dataframe + is_gui = False + parser.load_table_data( + runs[d[0]], d[0], is_gui, args.g, args.verbose + ) # create the loaded table + if args.list_kernels: + tty.show_kernels(runs, archConfigs["gfx90a"], output, args.decimal) + else: + tty.show_all( + runs, + archConfigs["gfx90a"], + output, + args.decimal, + args.time_unit, + args.cols, + args.verbose, + ) + + +def analyze(args): + if args.dependency: + print("pip3 install astunparse numpy tabulate pandas pyyaml") + sys.exit(0) + + # NB: maybe create bak file for the old run before open it + global output + output = open(args.output_file, "w+") if args.output_file else sys.stdout + + # Initalize archConfigs and runs[] + runs = initialize_run(args) + # Filtering if args.gpu_kernel: for d, gk in zip(args.path, args.gpu_kernel): @@ -140,14 +233,12 @@ def omniperf_cli(args): ) sys.exit(2) runs[d[0]].filter_kernel_ids = gk - if args.gpu_id: if len(args.gpu_id) == 1 and len(args.path) != 1: for i in range(len(args.path) - 1): args.gpu_id.extend(args.gpu_id) for d, gi in zip(args.path, args.gpu_id): runs[d[0]].filter_gpu_ids = gi - # NOTE: INVALID DISPATCH IDS ARE NOT CAUGHT HERE. THEY CAUSE AN ERROR IN TABLE GENERATION!!!!!!!!! if args.gpu_dispatch_id: if len(args.gpu_dispatch_id) == 1 and len(args.path) != 1: for i in range(len(args.path) - 1): @@ -155,78 +246,8 @@ def omniperf_cli(args): for d, gd in zip(args.path, args.gpu_dispatch_id): runs[d[0]].filter_dispatch_ids = gd + # Launch CLI analysis or GUI if args.gui: - import dash - from omniperf_cli.utils import gui - import dash_bootstrap_components as dbc - - app = dash.Dash(__name__, external_stylesheets=[dbc.themes.CYBORG]) - - if len(runs) == 1: - num_results = 10 - file_io.create_df_kernel_top_stats( - args.path[0][0], - runs[args.path[0][0]].filter_gpu_ids, - runs[args.path[0][0]].filter_dispatch_ids, - args.time_unit, - num_results, - ) - runs[args.path[0][0]].raw_pmc = file_io.create_df_pmc( - args.path[0][0] - ) # create mega df - is_gui = False - # parser.load_table_data( - # runs[args.path[0][0]], args.path[0][0], is_gui, args.g - # ) # create the loaded table - - input_filters = { - "kernel": runs[args.path[0][0]].filter_kernel_ids, - "gpu": runs[args.path[0][0]].filter_gpu_ids, - "dispatch": runs[args.path[0][0]].filter_dispatch_ids, - } - - gui.build_layout( - app, - runs, - archConfigs["gfx90a"], - input_filters, - args.decimal, - args.time_unit, - args.cols, - str(args.path[0][0]), - args.g, - args.verbose, - ) - app.run_server(debug=False, host="0.0.0.0", port=args.gui) - else: - print("Multiple runs not supported yet") + run_gui(args, runs) else: - # NB: - # If we assume the panel layout for all archs are similar, it doesn't matter - # which archConfig passed into show_all function. - # After decide to how to manage kernels display patterns, we can revisit it. - for d in args.path: - num_results = 10 - file_io.create_df_kernel_top_stats( - d[0], - runs[d[0]].filter_gpu_ids, - runs[d[0]].filter_dispatch_ids, - args.time_unit, - num_results, - ) - runs[d[0]].raw_pmc = file_io.create_df_pmc(d[0]) # creates mega dataframe - is_gui = False - parser.load_table_data( - runs[d[0]], d[0], is_gui, args.g - ) # create the loaded table - if args.list_kernels: - tty.show_kernels(runs, archConfigs["gfx90a"], output, args.decimal) - else: - tty.show_all( - runs, - archConfigs["gfx90a"], - output, - args.decimal, - args.time_unit, - args.cols, - ) + run_cli(args, runs) diff --git a/src/omniperf_cli/tests/unit/ast_parser_tester.py b/src/omniperf_analyze/tests/unit/ast_parser_tester.py similarity index 100% rename from src/omniperf_cli/tests/unit/ast_parser_tester.py rename to src/omniperf_analyze/tests/unit/ast_parser_tester.py diff --git a/src/omniperf_cli/tests/unit/config/100_if_else.yaml b/src/omniperf_analyze/tests/unit/config/100_if_else.yaml similarity index 100% rename from src/omniperf_cli/tests/unit/config/100_if_else.yaml rename to src/omniperf_analyze/tests/unit/config/100_if_else.yaml diff --git a/src/omniperf_cli/tests/unit/config/100_more_cases.yaml b/src/omniperf_analyze/tests/unit/config/100_more_cases.yaml similarity index 100% rename from src/omniperf_cli/tests/unit/config/100_more_cases.yaml rename to src/omniperf_analyze/tests/unit/config/100_more_cases.yaml diff --git a/src/omniperf_cli/tests/unit/config/build-in/00_id_00_build_in_variables.s4_converted_table.yaml b/src/omniperf_analyze/tests/unit/config/build-in/00_id_00_build_in_variables.s4_converted_table.yaml similarity index 100% rename from src/omniperf_cli/tests/unit/config/build-in/00_id_00_build_in_variables.s4_converted_table.yaml rename to src/omniperf_analyze/tests/unit/config/build-in/00_id_00_build_in_variables.s4_converted_table.yaml diff --git a/src/omniperf_cli/tests/unit/config/expr_format_tester.py b/src/omniperf_analyze/tests/unit/config/expr_format_tester.py similarity index 100% rename from src/omniperf_cli/tests/unit/config/expr_format_tester.py rename to src/omniperf_analyze/tests/unit/config/expr_format_tester.py diff --git a/src/omniperf_cli/utils/file_io.py b/src/omniperf_analyze/utils/file_io.py similarity index 98% rename from src/omniperf_cli/utils/file_io.py rename to src/omniperf_analyze/utils/file_io.py index 45cb6708a8..9b57bbf7d4 100644 --- a/src/omniperf_cli/utils/file_io.py +++ b/src/omniperf_analyze/utils/file_io.py @@ -28,7 +28,7 @@ import yaml import collections from collections import OrderedDict from pathlib import Path -from omniperf_cli.utils import schema +from omniperf_analyze.utils import schema # TODO: use pandas chunksize or dask to read really large csv file # from dask import dataframe as dd @@ -180,7 +180,7 @@ def create_df_kernel_top_stats( grouped.to_csv(os.path.join(raw_data_dir, "pmc_kernel_top.csv"), index=False) -def create_df_pmc(raw_data_dir): +def create_df_pmc(raw_data_dir, verbose): """ Load all raw pmc counters and join into one df. """ @@ -200,8 +200,8 @@ def create_df_pmc(raw_data_dir): coll_levels.append(f[:-4]) final_df = pd.concat(dfs, keys=coll_levels, axis=1, copy=False) # TODO: join instead of concat! - - # print("pmc_raw_data final_df ", final_df.info()) + if verbose >= 2: + print("pmc_raw_data final_df ", final_df.info()) return final_df diff --git a/src/omniperf_cli/utils/gui.py b/src/omniperf_analyze/utils/gui.py similarity index 66% rename from src/omniperf_cli/utils/gui.py rename to src/omniperf_analyze/utils/gui.py index cbff21927c..da7c16b07c 100644 --- a/src/omniperf_cli/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -23,23 +23,24 @@ from selectors import EpollSelector import sys import copy -from matplotlib.axis import XAxis import pandas as pd from dash.dash_table import FormatTemplate from dash.dash_table.Format import Format, Scheme, Symbol from dash import html, dash_table from dash.dependencies import Input, Output, State +import dash_bootstrap_components as dbc from dash import dcc import plotly.express as px import colorlover -from omniperf_cli.utils import parser, file_io, schema +from omniperf_analyze.utils import parser, file_io, schema -from omniperf_cli.utils.gui_components.header import get_header -from omniperf_cli.utils.gui_components.roofline import get_roofline -from omniperf_cli.utils.gui_components.memchart import get_memchart +from omniperf_analyze.utils.gui_components.header import get_header +from omniperf_analyze.utils.gui_components.roofline import get_roofline +from omniperf_analyze.utils.gui_components.memchart import get_memchart +from omniperf_analyze.omniperf_analyze import initialize_run pd.set_option( "mode.chained_assignment", None @@ -49,19 +50,18 @@ HIDDEN_SECTIONS = ["Memory Chart Analysis", "Kernels"] HIDDEN_COLUMNS = ["Tips", "coll_level"] IS_DARK = True # default dark theme -# Add any elements you'd like displayed as a bar chart -barchart_elements = [ - 1001, # Instr mix - 1002, # VALU Arith Instr mix - 1101, # Compute pipe SOL - 1201, # LDS SOL - 1301, # Instruc cache SOL - 1401, # SL1D cache SOL - 1601, # VL1D cache SOL - 1701, # L2 cache SOL -] - +# Define different types of bar charts +barchart_elements = { + # Group table ids by chart type + "instr_mix": [1001, 1002], + "multi_bar": [1604, 1704], + "sol": [1101, 1201, 1301, 1401, 1601, 1701], + "l2_cache_per_chan": [1801, 1802], +} +################## +# HELPER FUNCTIONS +################## def filter_df(column, df, filt): filt_df = df if filt != []: @@ -69,6 +69,19 @@ def filter_df(column, df, filt): return filt_df +def multi_bar_chart(table_id, display_df): + if table_id == 1604: + nested_bar = {"NC": {}, "UC": {}, "RW": {}, "CC": {}} + for index, row in display_df.iterrows(): + nested_bar[row["Coherency"]][row["Xfer"]] = row["Avg"] + if table_id == 1704: + nested_bar = {"Read": {}, "Write": {}} + for index, row in display_df.iterrows(): + nested_bar[row["Transaction"]][row["Type"]] = row["Avg"] + + return nested_bar + + def discrete_background_color_bins(df, n_bins=5, columns="all"): bounds = [i * (1.0 / n_bins) for i in range(n_bins + 1)] @@ -127,11 +140,14 @@ def discrete_background_color_bins(df, n_bins=5, columns="all"): return (styles, html.Div(legend, style={"padding": "5px 0 5px 0"})) -def build_bar_chart(display_df, table_config): +#################### +# GRAPHICAL ELEMENTS +#################### +def build_bar_chart(display_df, table_config, norm_filt): d_figs = [] # Insr Mix bar chart - if table_config["id"] == 1001 or table_config["id"] == 1002: + if table_config["id"] in barchart_elements["instr_mix"]: display_df["Count"] = [ x.astype(int) if x != "" else int(0) for x in display_df["Count"] ] @@ -148,8 +164,59 @@ def build_bar_chart(display_df, table_config): ) ) + # Multi bar chart + elif table_config["id"] in barchart_elements["multi_bar"]: + display_df["Avg"] = [ + x.astype(int) if x != "" else int(0) for x in display_df["Avg"] + ] + df_unit = display_df["Unit"][0] + nested_bar = multi_bar_chart(table_config["id"], display_df) + # generate chart for each coherency + for group, metric in nested_bar.items(): + d_figs.append( + px.bar( + title=group, + x=metric.values(), + y=metric.keys(), + labels={"x": df_unit, "y": ""}, + text=metric.values(), + orientation="h", + height=200, + ) + .update_xaxes(showgrid=False, rangemode="nonnegative") + .update_yaxes(showgrid=False) + .update_layout(title_x=0.5) + ) + # L2 Cache per channel + elif table_config["id"] in barchart_elements["l2_cache_per_chan"]: + nested_bar = {} + channels = [] + for (colName, colData) in display_df.items(): + if colName == "Channel": + channels = list(colData.values) + else: + display_df[colName] = [ + x.astype(float) if x != "" and x != None else float(0) + for x in display_df[colName] + ] + nested_bar[colName] = list(display_df[colName]) + for group, metric in nested_bar.items(): + d_figs.append( + px.bar( + title=group[0 : group.rfind("(")], + x=channels, + y=metric, + labels={ + "x": "Channel", + "y": group[group.rfind("(") + 1 : len(group) - 1].replace( + "per", norm_filt + ), + }, + ).update_yaxes(rangemode="nonnegative") + ) + # Speed-of-light bar chart - else: + elif table_config["id"] in barchart_elements["sol"]: display_df["Value"] = [ x.astype(float) if x != "" else float(0) for x in display_df["Value"] ] @@ -192,6 +259,13 @@ def build_bar_chart(display_df, table_config): orientation="h", ).update_xaxes(range=[0, 110]) ) + else: + print( + "ERROR: Table id {}. Cannot determine barchart type.".format( + table_config["id"] + ) + ) + sys.exit(-1) # update layout for each of the charts for fig in d_figs: @@ -302,25 +376,31 @@ def build_layout( path_to_dir, debug, verbose, + args, ): """ Build gui layout """ comparable_columns = parser.build_comparable_columns(time_unit) - base_run, base_data = next(iter(runs.items())) - app.layout = html.Div(style={"backgroundColor": "rgb(50, 50, 50)" if IS_DARK else ""}) filt_kernel_names = [] - kernel_top_df = runs[path_to_dir].dfs[1] - for kernel_id in runs[path_to_dir].filter_kernel_ids: + kernel_top_df = base_data.dfs[1] + for kernel_id in base_data.filter_kernel_ids: filt_kernel_names.append(kernel_top_df.loc[kernel_id, "KernelName"]) app.layout.children = html.Div( children=[ - get_header(runs[path_to_dir].raw_pmc, input_filters, filt_kernel_names), - html.Div(id="container", children=[]), + dbc.Spinner( + children=[ + get_header(base_data.raw_pmc, input_filters, filt_kernel_names), + html.Div(id="container", children=[]), + ], + fullscreen=True, + color="primary", + spinner_style={"width": "6rem", "height": "6rem"}, + ) ] ) @@ -329,47 +409,70 @@ def build_layout( [Input("disp-filt", "value")], [Input("kernel-filt", "value")], [Input("gcd-filt", "value")], + [Input("norm-filt", "value")], [State("container", "children")], ) - def generate_from_filter(disp_filt, kernel_filter, gcd_filter, div_children): - runs[path_to_dir].dfs = copy.deepcopy(archConfigs.dfs) # reset the equations + def generate_from_filter( + disp_filt, kernel_filter, gcd_filter, norm_filt, div_children + ): + if verbose >= 1: + print("normalization is ", norm_filt) + + base_data = initialize_run(args, norm_filt) # Re-initalize everything + panel_configs = copy.deepcopy(archConfigs.panel_configs) # Generate original raw df - runs[path_to_dir].raw_pmc = file_io.create_df_pmc(path_to_dir) - if verbose: + base_data[base_run].raw_pmc = file_io.create_df_pmc(path_to_dir, verbose) + if verbose >= 1: print("disp-filter is ", disp_filt) print("kernel-filter is ", kernel_filter) - print("gpu-filter is ", gcd_filter) - runs[path_to_dir].filter_kernel_ids = kernel_filter - runs[path_to_dir].filter_gpu_ids = gcd_filter - runs[path_to_dir].filter_dispatch_ids = disp_filt + print("gpu-filter is ", gcd_filter, "\n") + base_data[base_run].filter_kernel_ids = kernel_filter + base_data[base_run].filter_gpu_ids = gcd_filter + base_data[base_run].filter_dispatch_ids = disp_filt # Reload the pmc_kernel_top.csv for Top Stats panel num_results = 10 file_io.create_df_kernel_top_stats( path_to_dir, - runs[path_to_dir].filter_gpu_ids, - runs[path_to_dir].filter_dispatch_ids, + base_data[base_run].filter_gpu_ids, + base_data[base_run].filter_dispatch_ids, time_unit, num_results, ) - # Evaluate metrics and table data from the raw df is_gui = True + # Only display basic metrics if no filters are applied + if not (disp_filt or kernel_filter or gcd_filter): + temp = {} + keep = [1, 201, 101, 1901] + for key in base_data[base_run].dfs: + if keep.count(key) != 0: + temp[key] = base_data[base_run].dfs[key] + + base_data[base_run].dfs = temp + temp = {} + keep = [0, 100, 200, 1900] + for key in panel_configs: + if keep.count(key) != 0: + temp[key] = panel_configs[key] + panel_configs = temp + parser.load_table_data( - runs[path_to_dir], path_to_dir, True, debug + base_data[base_run], path_to_dir, True, debug, verbose ) # Note: All the filtering happens in this function + div_children = [] div_children.append( - get_memchart(archConfigs.panel_configs[1900]["data source"], base_data) + get_memchart(panel_configs[1900]["data source"], base_data[base_run]) ) # append roofline section div_children.append( get_roofline( path_to_dir, - parser.apply_filters(runs[path_to_dir], is_gui, debug), + parser.apply_filters(base_data[base_run], is_gui, debug), verbose, ) ) # Iterate over each section as defined in panel configs - for panel_id, panel in archConfigs.panel_configs.items(): + for panel_id, panel in panel_configs.items(): title = str(panel_id // 100) + ". " + panel["title"] section_title = ( panel["title"] @@ -386,7 +489,7 @@ def build_layout( for data_source in panel["data source"]: for t_type, table_config in data_source.items(): content = [] - original_df = base_data.dfs[table_config["id"]] + original_df = base_data[base_run].dfs[table_config["id"]] # The sys info table need to add index back if t_type == "raw_csv_table" and "Info" in original_df.keys(): @@ -401,12 +504,39 @@ def build_layout( # Determine chart type: # a) Barchart - if table_config["id"] in barchart_elements: - d_figs = build_bar_chart(display_df, table_config) - for fig in d_figs: + if table_config["id"] in [ + x for i in barchart_elements.values() for x in i + ]: + d_figs = build_bar_chart(display_df, table_config, norm_filt) + # Smaller formatting if barchart yeilds several graphs + if ( + len(d_figs) > 2 + and not table_config["id"] + in barchart_elements["l2_cache_per_chan"] + ): + temp_obj = [] + for fig in d_figs: + temp_obj.append( + html.Div( + className="float-child", + children=[ + dcc.Graph( + figure=fig, style={"margin": "2%"} + ) + ], + ) + ) content.append( - dcc.Graph(figure=fig, style={"margin": "2%"}) + html.Div( + className="float-container", children=temp_obj + ) ) + # Normal formatting if < 2 graphs + else: + for fig in d_figs: + content.append( + dcc.Graph(figure=fig, style={"margin": "2%"}) + ) # B) Tablechart else: d_figs = build_table_chart( diff --git a/src/omniperf_cli/utils/gui_components/header.py b/src/omniperf_analyze/utils/gui_components/header.py similarity index 97% rename from src/omniperf_cli/utils/gui_components/header.py rename to src/omniperf_analyze/utils/gui_components/header.py index cf5897b308..accae9fa3c 100644 --- a/src/omniperf_cli/utils/gui_components/header.py +++ b/src/omniperf_analyze/utils/gui_components/header.py @@ -20,13 +20,12 @@ # THE SOFTWARE. ################################################################################ -from dash import html, dash_table, dcc +from dash import html, dcc import dash_bootstrap_components as dbc -from matplotlib.style import available -from omniperf_cli.utils import schema +from omniperf_analyze.utils import schema -avail_normalizations = ["per Wave", "per Cycle", "per Sec", "per Kernel"] +avail_normalizations = ["per_wave", "per_cycle", "per_second", "per_kernel"] # List all the unique column values for desired column in df, 'target_col' def list_unique(orig_list, is_numeric): @@ -152,10 +151,10 @@ def get_header(raw_pmc, input_filters, kernel_names): ), dcc.Dropdown( avail_normalizations, - value="per Wave", + id="norm-filt", + value=input_filters["normalization"], clearable=False, style={"width": "150px"}, - disabled=True, # TODO: Turn this off once multi normalization is enabled ), ] ) diff --git a/src/omniperf_cli/utils/gui_components/memchart.py b/src/omniperf_analyze/utils/gui_components/memchart.py similarity index 100% rename from src/omniperf_cli/utils/gui_components/memchart.py rename to src/omniperf_analyze/utils/gui_components/memchart.py diff --git a/src/omniperf_cli/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py similarity index 98% rename from src/omniperf_cli/utils/gui_components/roofline.py rename to src/omniperf_analyze/utils/gui_components/roofline.py index ee68e15762..183bd9dcbb 100644 --- a/src/omniperf_cli/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -20,7 +20,7 @@ # THE SOFTWARE. ################################################################################ -from omniperf_cli.utils import roofline_calc +from omniperf_analyze.utils import roofline_calc import numpy as np from dash import html, dash_table @@ -39,7 +39,7 @@ def to_int(a): def generate_plots(roof_info, ai_data, verbose, fig=None): if fig is None: fig = go.Figure() - line_data = roofline_calc.empirical_roof(roof_info) + line_data = roofline_calc.empirical_roof(roof_info, verbose) ####################### # Plot BW Lines @@ -183,7 +183,7 @@ def get_roofline(path_to_dir, ret_df, verbose): # Generate roofline plots print("Path: ", path_to_dir) ai_data = roofline_calc.plot_application("kernels", ret_df, verbose) - if verbose: + if verbose >= 1: # print AI data for each mem level for i in ai_data: print(i, "->", ai_data[i]) diff --git a/src/omniperf_cli/utils/parser.py b/src/omniperf_analyze/utils/parser.py similarity index 98% rename from src/omniperf_cli/utils/parser.py rename to src/omniperf_analyze/utils/parser.py index de416ac174..ec925cef1a 100644 --- a/src/omniperf_cli/utils/parser.py +++ b/src/omniperf_analyze/utils/parser.py @@ -29,7 +29,7 @@ from matplotlib.pyplot import axis import pandas as pd import numpy as np from tabulate import tabulate -from omniperf_cli.utils import schema +from omniperf_analyze.utils import schema # ------------------------------------------------------------------------------ # Internal global definitions @@ -68,6 +68,7 @@ supported_denom = { "per_wave": "SQ_WAVES", "per_cycle": "GRBM_GUI_ACTIVE", "per_second": "((EndNs - BeginNs) / 1000000000)", + "per_kernel": "1", } # Build-in defined in mongodb variables: @@ -650,7 +651,6 @@ def apply_filters(workload, is_gui, debug): # NB: support ignoring the 1st n dispatched execution by '> n' # The better way may be parsing python slice string for d in workload.filter_dispatch_ids: - print("len of ret_df is ", len(ret_df)) if int(d) > len(ret_df) - 2: # subtract 2 bc of the two header rows print("{} is an invalid dispatch id.".format(d)) sys.exit(1) @@ -674,12 +674,7 @@ def apply_filters(workload, is_gui, debug): return ret_df -def load_table_data(workload, dir, is_gui, debug): - """ - Load data for all "raw_csv_table". - Calculate mertric value for all "metric_table". - """ - +def load_kernel_top(workload, dir): # NB: # - Do pmc_kernel_top.csv loading before eval_metric because we need the kernel names. # - There might be a better way/timing to load raw_csv_table. @@ -698,9 +693,16 @@ def load_table_data(workload, dir, is_gui, debug): # All transposed columns should be marked with a general header, # so tty could detect them and show them correctly in comparison. tmp[id].columns = ["Info"] - workload.dfs.update(tmp) + +def load_table_data(workload, dir, is_gui, debug, verbose): + """ + Load data for all "raw_csv_table". + Calculate mertric value for all "metric_table". + """ + load_kernel_top(workload, dir) + eval_metric( workload.dfs, workload.dfs_type, @@ -715,9 +717,11 @@ def load_table_data(workload, dir, is_gui, debug): out_path = os.path.join(dir, name) try: os.mkdir(out_path) - print("Created a Saved Analysis folder") + if verbose >= 1: + print("Created a Saved Analysis folder") except OSError as error: - print("Saved Analysis folder exists") + if verbose >= 1: + print("Saved Analysis folder exists") for id, df in workload.dfs.items(): if "coll_level" in list(df.columns): df = df.drop(["coll_level", "Tips"], axis=1) diff --git a/src/omniperf_cli/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py similarity index 94% rename from src/omniperf_cli/utils/roofline_calc.py rename to src/omniperf_analyze/utils/roofline_calc.py index 93f6f6670f..df64248358 100644 --- a/src/omniperf_cli/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -20,19 +20,7 @@ # THE SOFTWARE. ################################################################################ -from linecache import cache -import subprocess -from operator import sub -import os import sys -from pathlib import Path - -import numpy -import matplotlib.pyplot as plt -from matplotlib.pyplot import get, text -from math import log, pi, sqrt -import pandas as pd -import pylab from dataclasses import dataclass import csv @@ -100,7 +88,7 @@ def get_color(catagory): # ------------------------------------------------------------------------------------- # Plot BW at each cache level # ------------------------------------------------------------------------------------- -def plot_roof(roof_details, roof_data): +def plot_roof(roof_details, roof_data, verbose): graphPoints = {"hbm": [], "l2": [], "l1": [], "lds": [], "valu": [], "mfma": []} @@ -116,7 +104,8 @@ def plot_roof(roof_details, roof_data): ) for i in range(0, len(cacheHierarchy)): # Plot BW line - # print("Current cache level is ", cacheHierarchy[i]) + if verbose >= 3: + print("Current cache level is ", cacheHierarchy[i]) curr_bw = cacheHierarchy[i] + "Bw" peakBw = float(roof_data[curr_bw][roof_details["device"]]) @@ -142,8 +131,9 @@ def plot_roof(roof_details, roof_data): y2_mfma = peakMFMA # These are the points to use: - # print("x = [{}, {}]".format(x1,x2_mfma)) - # print("y = [{}, {}]".format(y1, y2_mfma)) + if verbose >= 3: + print("x = [{}, {}]".format(x1, x2_mfma)) + print("y = [{}, {}]".format(y1, y2_mfma)) graphPoints[cacheHierarchy[i].lower()].append([x1, x2_mfma]) graphPoints[cacheHierarchy[i].lower()].append([y1, y2_mfma]) @@ -159,7 +149,8 @@ def plot_roof(roof_details, roof_data): if x2 < x0: x0 = x2 - # print("FMA ROOF [{}, {}], [{},{}]".format(x0, XMAX, peakOps, peakOps)) + if verbose >= 3: + print("FMA ROOF [{}, {}], [{},{}]".format(x0, XMAX, peakOps, peakOps)) graphPoints["valu"].append([x0, XMAX]) graphPoints["valu"].append([peakOps, peakOps]) graphPoints["valu"].append(peakOps) @@ -172,7 +163,8 @@ def plot_roof(roof_details, roof_data): if x2_mfma < x0_mfma: x0_mfma = x2_mfma - # print("MFMA ROOF [{}, {}], [{},{}]".format(x0_mfma, XMAX, peakMFMA, peakMFMA)) + if verbose >= 3: + print("MFMA ROOF [{}, {}], [{},{}]".format(x0_mfma, XMAX, peakMFMA, peakMFMA)) graphPoints["mfma"].append([x0_mfma, XMAX]) graphPoints["mfma"].append([peakMFMA, peakMFMA]) graphPoints["mfma"].append(peakMFMA) @@ -239,7 +231,7 @@ def plot_application(sortType, ret_df, verbose): avgDuration / calls, ) ) - if verbose: + if verbose >= 2: print( "Just added {} to AI_Data at index {}. # of calls: {}".format( kernelName, index, calls @@ -299,7 +291,7 @@ def plot_application(sortType, ret_df, verbose): + (row["SQ_INSTS_VALU_MFMA_MOPS_F64"] * 512) ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped total_flops at index {}".format(index)) pass try: @@ -327,7 +319,7 @@ def plot_application(sortType, ret_df, verbose): ) ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped valu_flops at index {}".format(index)) pass @@ -338,7 +330,7 @@ def plot_application(sortType, ret_df, verbose): mfma_flops_f64 += row["SQ_INSTS_VALU_MFMA_MOPS_F64"] * 512 mfma_iops_i8 += row["SQ_INSTS_VALU_MFMA_MOPS_I8"] * 512 except KeyError: - if verbose: + if verbose >= 2: print("Skipped mfma ops at index {}".format(index)) pass @@ -347,14 +339,14 @@ def plot_application(sortType, ret_df, verbose): (row["SQ_LDS_IDX_ACTIVE"] - row["SQ_LDS_BANK_CONFLICT"]) * 4 * L2_BANKS ) # L2_BANKS = 32 (since assuming mi200) except KeyError: - if verbose: + if verbose >= 2: print("Skipped lds_data at index {}".format(index)) pass try: L1cache_data += row["TCP_TOTAL_CACHE_ACCESSES_sum"] * 64 except KeyError: - if verbose: + if verbose >= 2: print("Skipped L1cache_data at index {}".format(index)) pass @@ -366,7 +358,7 @@ def plot_application(sortType, ret_df, verbose): + row["TCP_TCC_READ_REQ_sum"] * 64 ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped L2cache_data at index {}".format(index)) pass try: @@ -377,7 +369,7 @@ def plot_application(sortType, ret_df, verbose): + ((row["TCC_EA_WRREQ_sum"] - row["TCC_EA_WRREQ_64B_sum"]) * 32) ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped hbm_data at index {}".format(index)) pass @@ -474,7 +466,7 @@ def plot_application(sortType, ret_df, verbose): return intensityPoints -def empirical_roof(roof_info): +def empirical_roof(roof_info, verbose): if roof_info["sort"] != "kernels" and roof_info["sort"] != "dispatches": sys.exit("Invalid sort. Must be either 'kernels' or 'dispatches'") @@ -517,7 +509,7 @@ def empirical_roof(roof_info): # ------------------ # Generate Roofline # ------------------ - results = plot_roof(roof_info, roof_data) + results = plot_roof(roof_info, roof_data, verbose) # for key in results: # print(key, "->", results[key]) diff --git a/src/omniperf_cli/utils/schema.py b/src/omniperf_analyze/utils/schema.py similarity index 82% rename from src/omniperf_cli/utils/schema.py rename to src/omniperf_analyze/utils/schema.py index 005afba02b..87394da339 100644 --- a/src/omniperf_cli/utils/schema.py +++ b/src/omniperf_analyze/utils/schema.py @@ -84,24 +84,24 @@ supported_field = [ "Alias", # Special keywords for L2 channel "Channel", - "Hit Rate", - "Req", - "Read Req", - "Write Req", - "AtomicReq", - "EA Read Req", - "EA Write Req", - "EA AtomicReq", - "EA Read Lat - cycles", - "EA Write Lat - cycles", - "EA Atomic Lat - cycles", - "EA Read Stall - IO", - "EA Read Stall - GMI", - "EA Read Stall - DRAM", - "EA Write Stall - IO", - "EA Write Stall - GMI", - "EA Write Stall - DRAM", - "EA Write Stall - Starve", + "L2 Cache Hit Rate (%)", + "Requests (Requests)", + "L1-L2 Read (Requests)", + "L1-L2 Write (Requests)", + "L1-L2 Atomic (Requests)", + "L2-EA Read (Requests)", + "L2-EA Write (Requests)", + "L2-EA Atomic (Requests)", + "L2-EA Read Latency (Cycles)", + "L2-EA Write Latency (Cycles)", + "L2-EA Atomic Latency (Cycles)", + "L2-EA Read Stall - IO (Cycles per)", + "L2-EA Read Stall - GMI (Cycles per)", + "L2-EA Read Stall - DRAM (Cycles per)", + "L2-EA Write Stall - IO (Cycles per)", + "L2-EA Write Stall - GMI (Cycles per)", + "L2-EA Write Stall - DRAM (Cycles per)", + "L2-EA Write Stall - Starve (Cycles per)", ] # The prefix of raw pmc_perf.csv diff --git a/src/omniperf_cli/utils/tty.py b/src/omniperf_analyze/utils/tty.py similarity index 90% rename from src/omniperf_cli/utils/tty.py rename to src/omniperf_analyze/utils/tty.py index e57181ea85..9f6ed2e400 100644 --- a/src/omniperf_cli/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -23,9 +23,10 @@ import pandas as pd from tabulate import tabulate -from omniperf_cli.utils import schema, parser +from omniperf_analyze.utils import schema, parser hidden_columns = ["Tips", "coll_level"] +hidden_sections = [1900, 2000] def string_multiple_lines(source, width, max_rows): @@ -44,19 +45,20 @@ def string_multiple_lines(source, width, max_rows): return "\n".join(lines) -def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols): +def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols, verbose): """ Show all panels with their data in plain text mode. """ comparable_columns = parser.build_comparable_columns(time_unit) for panel_id, panel in archConfigs.panel_configs.items(): - + # Skip panels that don't support baseline comparison + if panel_id in hidden_sections: + continue ss = "" # store content of all data_source from one pannel for data_source in panel["data source"]: for type, table_config in data_source.items(): - # take the 1st run as baseline base_run, base_data = next(iter(runs.items())) base_df = base_data.dfs[table_config["id"]] @@ -102,18 +104,27 @@ def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols): ): if run != base_run: # calc percentage over the baseline + base_df[header] = [ + float(x) if x != "" else float(0) + for x in base_df[header] + ] + cur_df[header] = [ + float(x) if x != "" else float(0) + for x in cur_df[header] + ] t_df = ( pd.concat( [ - base_df[header].astype("double"), - cur_df[header].astype("double"), + base_df[header], + cur_df[header], ], axis=1, ) .pct_change(axis="columns") .iloc[:, 1] ) - # print("---------", header, t_df) + if verbose >= 2: + print("---------", header, t_df) # show value + percentage # TODO: better alignment diff --git a/src/omniperf_cli/perfmon/gfx908_metrics.xml b/src/omniperf_cli/perfmon/gfx908_metrics.xml deleted file mode 100644 index 8db51ecf9c..0000000000 --- a/src/omniperf_cli/perfmon/gfx908_metrics.xml +++ /dev/null @@ -1,5731 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # SDMA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/omniperf_cli/perfmon/gfx90a_metrics.xml b/src/omniperf_cli/perfmon/gfx90a_metrics.xml deleted file mode 100644 index 79354eeb81..0000000000 --- a/src/omniperf_cli/perfmon/gfx90a_metrics.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/omniperf_cli/perfmon/metrics.xml b/src/omniperf_cli/perfmon/metrics.xml deleted file mode 100644 index d4b3355da2..0000000000 --- a/src/omniperf_cli/perfmon/metrics.xml +++ /dev/null @@ -1,13 +0,0 @@ -#include "gfx90a_metrics.xml" - - - - - - - - - - - - diff --git a/src/parser.py b/src/parser.py index 7a2c8b53ff..50878873b2 100644 --- a/src/parser.py +++ b/src/parser.py @@ -28,11 +28,16 @@ from common import ( OMNIPERF_HOME, PROG, SOC_LIST, - VER, ) # Import global variables +from common import getVersion, getVersionDisplay def parse(my_parser): + + # versioning info + vData = getVersion() + versionString = getVersionDisplay(vData["version"], vData["sha"], vData["mode"]) + # ----------------------------------------- # Parse arguments (dependent on mode) # ----------------------------------------- @@ -42,9 +47,7 @@ def parse(my_parser): general_group = my_parser.add_argument_group("General Options") my_parser._positionals.title = "Modes" my_parser._optionals.title = "Help" - general_group.add_argument( - "-v", "--version", action="version", version=PROG + " (" + VER + ")" - ) + general_group.add_argument("-v", "--version", action="version", version=versionString) subparsers = my_parser.add_subparsers( dest="mode", help="Select mode of interaction with the target application:" @@ -78,13 +81,10 @@ def parse(my_parser): profile_group = profile_parser.add_argument_group("Profile Options") roofline_group = profile_parser.add_argument_group("Standalone Roofline Options") + general_group.add_argument("-v", "--version", action="version", version=versionString) general_group.add_argument( - "-v", "--version", action="version", version="%(PROG)s (" + VER + ")" + "-V", "--verbose", help="Increase output verbosity", action="count", default=0 ) - general_group.add_argument( - "-V", "--verbose", help="Increase output verbosity", action="store_true" - ) - profile_group.add_argument( "-n", "--name", @@ -248,8 +248,8 @@ def parse(my_parser): \n\n------------------------------------------------------------------------------- \nExamples: - \n\tomniperf database --import -H pavii1 -u amd -t asw -w workloads/vcopy/mi200/ - \n\tomniperf database --remove -H pavii1 -u amd -w omniperf_asw_sample_mi200 + \n\tomniperf database --import -H pavii1 -u temp -t asw -w workloads/vcopy/mi200/ + \n\tomniperf database --remove -H pavii1 -u temp -w omniperf_asw_sample_mi200 \n-------------------------------------------------------------------------------\n """, prog="tool", @@ -264,11 +264,9 @@ def parse(my_parser): interaction_group = db_parser.add_argument_group("Interaction Type") connection_group = db_parser.add_argument_group("Connection Options") + general_group.add_argument("-v", "--version", action="version", version=versionString) general_group.add_argument( - "-v", "--version", action="version", version="%(PROG)s (" + VER + ")" - ) - general_group.add_argument( - "-V", "--verbose", help="Increase output verbosity", action="store_true" + "-V", "--verbose", help="Increase output verbosity", action="count", default=0 ) interaction_group.add_argument( @@ -364,11 +362,9 @@ def parse(my_parser): general_group = analyze_parser.add_argument_group("General Options") analyze_group = analyze_parser.add_argument_group("Analyze Options") + general_group.add_argument("-v", "--version", action="version", version=versionString) general_group.add_argument( - "-v", "--version", action="version", version="%(PROG)s (" + VER + ")" - ) - general_group.add_argument( - "-V", "--verbose", help="Increase output verbosity", action="store_true" + "-V", "--verbose", help="Increase output verbosity", action="count", default=0 ) analyze_group.add_argument( @@ -435,15 +431,15 @@ def parse(my_parser): dest="normal_unit", metavar="", default="per_wave", - choices=["per_wave", "per_cycle", "per_second"], - help="\t\tSpecify the normalization unit: (DEFAULT: per_wave)\n\t\t per_wave\n\t\t per_cycle\n\t\t per_second", + choices=["per_wave", "per_cycle", "per_second", "per_kernel"], + help="\t\tSpecify the normalization unit: (DEFAULT: per_wave)\n\t\t per_wave\n\t\t per_cycle\n\t\t per_second\n\t\t per_kernel", ) analyze_group.add_argument( "--config-dir", dest="config_dir", metavar="", help="\t\tSpecify the directory of customized configs.", - default=OMNIPERF_HOME.joinpath("omniperf_cli/configs"), + default=OMNIPERF_HOME.joinpath("omniperf_analyze/configs"), ) analyze_group.add_argument( "-t", diff --git a/src/perfmon_pub/gfx900_metrics.xml b/src/perfmon_pub/gfx900_metrics.xml deleted file mode 100644 index 8095a6dfa8..0000000000 --- a/src/perfmon_pub/gfx900_metrics.xml +++ /dev/null @@ -1,5161 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # SDMA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/perfmon_pub/gfx906_metrics.xml b/src/perfmon_pub/gfx906_metrics.xml deleted file mode 100644 index d12d950cf4..0000000000 --- a/src/perfmon_pub/gfx906_metrics.xml +++ /dev/null @@ -1,5248 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # SDMA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/perfmon_pub/gfx908_metrics.xml b/src/perfmon_pub/gfx908_metrics.xml deleted file mode 100644 index 8db51ecf9c..0000000000 --- a/src/perfmon_pub/gfx908_metrics.xml +++ /dev/null @@ -1,5731 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # SDMA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/perfmon_pub/gfx90a_metrics.xml b/src/perfmon_pub/gfx90a_metrics.xml deleted file mode 100644 index eb06f2b14d..0000000000 --- a/src/perfmon_pub/gfx90a_metrics.xml +++ /dev/null @@ -1,5587 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/perfmon_pub/gfx9_metrics.xml b/src/perfmon_pub/gfx9_metrics.xml deleted file mode 100644 index f9767b3750..0000000000 --- a/src/perfmon_pub/gfx9_metrics.xml +++ /dev/null @@ -1,5161 +0,0 @@ - - # CPC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CPF counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GDS counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SPI counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SQ counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SX counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCC counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TCP counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # TD counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GRBM_SE counters - - - - - - - - - - - - - - - - - # SDMA counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATCL2 counters - - - - - - - - - - - - - # MCVML2 counters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ATC counters - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/perfmon_pub/metrics.xml b/src/perfmon_pub/metrics.xml deleted file mode 100644 index cddbad9fb5..0000000000 --- a/src/perfmon_pub/metrics.xml +++ /dev/null @@ -1,771 +0,0 @@ -#include "gfx906_metrics.xml" -#include "gfx908_metrics.xml" -#include "gfx90a_metrics.xml" -#include "gfx900_metrics.xml" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #xlu - TA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #xlu -TD - - - - - - - - - - - - - - - - - - - - - - - #xlu -TCP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - # - # - - - - - # EA1 - - - - - - - - - - # both EA0 and EA1 should be included - - - - - - #xlu - TCC - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #xlu - TCP - - - - - #xlu - TCC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #xlu - TD - - - #xlu - TCP - - - - - - - - # GPUBusy The percentage of time GPU was busy. - - - # Wavefronts Total wavefronts. - - - # VALUInsts The average number of vector ALU instructions executed per work-item (affected by flow control). - - - # SALUInsts The average number of scalar ALU instructions executed per work-item (affected by flow control). - - - # VFetchInsts 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. - - - # SFetchInsts The average number of scalar fetch instructions from the video memory executed per work-item (affected by flow control). - - - # VWriteInsts 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. - - - # FlatVMemInsts 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. - - - # LDSInsts The average number of LDS read or LDS write instructions executed per work item (affected by flow control). Excludes FLAT instructions that read from or write to LDS. - - - # FlatLDSInsts The average number of FLAT instructions that read or write to LDS executed per work item (affected by flow control). - - - # GDSInsts The average number of GDS read or GDS write instructions executed per work item (affected by flow control). - - - # FetchSize The total kilobytes fetched from the video memory. This is measured with all extra fetches and any cache or memory effects taken into account. - - - # WriteSize The total kilobytes written to the video memory. This is measured with all extra fetches and any cache or memory effects taken into account. - - - # MemWrites32B The total number of effective 32B write transactions to the memory - - - # MemUnitStalled The percentage of GPUTime the memory unit is stalled. Try reducing the number or size of fetches and writes if possible. Value range: 0% (optimal) to 100% (bad). - - - # WriteUnitStalled The percentage of GPUTime the Write unit is stalled. Value range: 0% to 100% (bad). - - - # ALUStalledByLDS The percentage of GPUTime ALU units are stalled by the LDS input queue being full or the output queue being not ready. If there are LDS bank conflicts, reduce them. Otherwise, try reducing the number of LDS accesses if possible. Value range: 0% (optimal) to 100% (bad). - - - # LDSBankConflict The percentage of GPUTime LDS is stalled by bank conflicts. Value range: 0% (optimal) to 100% (bad). - - - # High level stats - - - - - # ALU stats - - - - - - - - - - # Memory instr rates - - - - - # Memory subsystem stats - # ICache and ScalCache(DCache) stats - - - - - - # L1/L2 caches stats - - - - - - - # Memory latencies - - - # - # - - # DRAM bandwidth - - - - diff --git a/src/perfmon_pub/mi100/pmc_ta_perf.txt b/src/perfmon_pub/mi100/pmc_ta_perf.txt index 851f22400d..938076de7b 100644 --- a/src/perfmon_pub/mi100/pmc_ta_perf.txt +++ b/src/perfmon_pub/mi100/pmc_ta_perf.txt @@ -1,22 +1,11 @@ pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES -pmc: TA_TA_BUSY_sum TA_SH_FIFO_BUSY_sum -pmc: TA_SH_FIFO_CMD_BUSY_sum TA_SH_FIFO_ADDR_BUSY_sum -pmc: TA_SH_FIFO_DATA_BUSY_sum TA_SH_FIFO_DATA_SFIFO_BUSY_sum -pmc: TA_SH_FIFO_DATA_TFIFO_BUSY_sum TA_SQ_TA_CMD_CYCLES_sum -pmc: TA_SP_TA_ADDR_CYCLES_sum TA_SP_TA_DATA_CYCLES_sum - - -# Starvation -pmc: TA_SH_FIFO_ADDR_STARVED_WHILE_BUSY_CYCLES_sum TA_SH_FIFO_CMD_STARVED_WHILE_BUSY_CYCLES_sum -pmc: TA_SH_FIFO_DATA_STARVED_WHILE_BUSY_CYCLES_sum TA_TA_SH_FIFO_STARVED_sum - - +pmc: TA_TA_BUSY_sum # buffer access pmc: TA_BUFFER_WAVEFRONTS_sum TA_BUFFER_READ_WAVEFRONTS_sum pmc: TA_BUFFER_WRITE_WAVEFRONTS_sum TA_BUFFER_ATOMIC_WAVEFRONTS_sum -pmc: TA_BUFFER_TOTAL_CYCLES_sum TA_BUFFER_COALESCABLE_WAVEFRONTS_sum +pmc: TA_BUFFER_TOTAL_CYCLES_sum pmc: TA_BUFFER_COALESCED_READ_CYCLES_sum TA_BUFFER_COALESCED_WRITE_CYCLES_sum @@ -26,8 +15,7 @@ pmc: TA_ADDR_STALLED_BY_TD_CYCLES_sum TA_DATA_STALLED_BY_TC_CYCLES_sum # flat accesses pmc: TA_FLAT_WAVEFRONTS_sum TA_FLAT_READ_WAVEFRONTS_sum -pmc: TA_FLAT_WRITE_WAVEFRONTS_sum TA_FLAT_ATOMIC_WAVEFRONTS_sum -pmc: TA_FLAT_COALESCEABLE_WAVEFRONTS_sum +pmc: TA_FLAT_WRITE_WAVEFRONTS_sum TA_FLAT_ATOMIC_WAVEFRONTS_sum range: diff --git a/src/perfmon_pub/mi200/pmc_ta_perf.txt b/src/perfmon_pub/mi200/pmc_ta_perf.txt index 851f22400d..45dc9d7bf1 100644 --- a/src/perfmon_pub/mi200/pmc_ta_perf.txt +++ b/src/perfmon_pub/mi200/pmc_ta_perf.txt @@ -1,22 +1,11 @@ pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES -pmc: TA_TA_BUSY_sum TA_SH_FIFO_BUSY_sum -pmc: TA_SH_FIFO_CMD_BUSY_sum TA_SH_FIFO_ADDR_BUSY_sum -pmc: TA_SH_FIFO_DATA_BUSY_sum TA_SH_FIFO_DATA_SFIFO_BUSY_sum -pmc: TA_SH_FIFO_DATA_TFIFO_BUSY_sum TA_SQ_TA_CMD_CYCLES_sum -pmc: TA_SP_TA_ADDR_CYCLES_sum TA_SP_TA_DATA_CYCLES_sum - - -# Starvation -pmc: TA_SH_FIFO_ADDR_STARVED_WHILE_BUSY_CYCLES_sum TA_SH_FIFO_CMD_STARVED_WHILE_BUSY_CYCLES_sum -pmc: TA_SH_FIFO_DATA_STARVED_WHILE_BUSY_CYCLES_sum TA_TA_SH_FIFO_STARVED_sum - - +pmc: TA_TA_BUSY_sum # buffer access pmc: TA_BUFFER_WAVEFRONTS_sum TA_BUFFER_READ_WAVEFRONTS_sum pmc: TA_BUFFER_WRITE_WAVEFRONTS_sum TA_BUFFER_ATOMIC_WAVEFRONTS_sum -pmc: TA_BUFFER_TOTAL_CYCLES_sum TA_BUFFER_COALESCABLE_WAVEFRONTS_sum +pmc: TA_BUFFER_TOTAL_CYCLES_sum pmc: TA_BUFFER_COALESCED_READ_CYCLES_sum TA_BUFFER_COALESCED_WRITE_CYCLES_sum @@ -27,7 +16,6 @@ pmc: TA_ADDR_STALLED_BY_TD_CYCLES_sum TA_DATA_STALLED_BY_TC_CYCLES_sum # flat accesses pmc: TA_FLAT_WAVEFRONTS_sum TA_FLAT_READ_WAVEFRONTS_sum pmc: TA_FLAT_WRITE_WAVEFRONTS_sum TA_FLAT_ATOMIC_WAVEFRONTS_sum -pmc: TA_FLAT_COALESCEABLE_WAVEFRONTS_sum range: diff --git a/src/perfmon_pub/mi50/pmc_ta_perf.txt b/src/perfmon_pub/mi50/pmc_ta_perf.txt index 851f22400d..9c6fa835c4 100644 --- a/src/perfmon_pub/mi50/pmc_ta_perf.txt +++ b/src/perfmon_pub/mi50/pmc_ta_perf.txt @@ -1,22 +1,11 @@ pmc: GRBM_COUNT GRBM_GUI_ACTIVE SQ_CYCLES SQ_BUSY_CYCLES SQ_BUSY_CU_CYCLES SQ_WAVES SQ_WAVE_CYCLES -pmc: TA_TA_BUSY_sum TA_SH_FIFO_BUSY_sum -pmc: TA_SH_FIFO_CMD_BUSY_sum TA_SH_FIFO_ADDR_BUSY_sum -pmc: TA_SH_FIFO_DATA_BUSY_sum TA_SH_FIFO_DATA_SFIFO_BUSY_sum -pmc: TA_SH_FIFO_DATA_TFIFO_BUSY_sum TA_SQ_TA_CMD_CYCLES_sum -pmc: TA_SP_TA_ADDR_CYCLES_sum TA_SP_TA_DATA_CYCLES_sum - - -# Starvation -pmc: TA_SH_FIFO_ADDR_STARVED_WHILE_BUSY_CYCLES_sum TA_SH_FIFO_CMD_STARVED_WHILE_BUSY_CYCLES_sum -pmc: TA_SH_FIFO_DATA_STARVED_WHILE_BUSY_CYCLES_sum TA_TA_SH_FIFO_STARVED_sum - - +pmc: TA_TA_BUSY_sum # buffer access pmc: TA_BUFFER_WAVEFRONTS_sum TA_BUFFER_READ_WAVEFRONTS_sum pmc: TA_BUFFER_WRITE_WAVEFRONTS_sum TA_BUFFER_ATOMIC_WAVEFRONTS_sum -pmc: TA_BUFFER_TOTAL_CYCLES_sum TA_BUFFER_COALESCABLE_WAVEFRONTS_sum +pmc: TA_BUFFER_TOTAL_CYCLES_sum pmc: TA_BUFFER_COALESCED_READ_CYCLES_sum TA_BUFFER_COALESCED_WRITE_CYCLES_sum @@ -26,8 +15,7 @@ pmc: TA_ADDR_STALLED_BY_TD_CYCLES_sum TA_DATA_STALLED_BY_TC_CYCLES_sum # flat accesses pmc: TA_FLAT_WAVEFRONTS_sum TA_FLAT_READ_WAVEFRONTS_sum -pmc: TA_FLAT_WRITE_WAVEFRONTS_sum TA_FLAT_ATOMIC_WAVEFRONTS_sum -pmc: TA_FLAT_COALESCEABLE_WAVEFRONTS_sum +pmc: TA_FLAT_WRITE_WAVEFRONTS_sum TA_FLAT_ATOMIC_WAVEFRONTS_sum range: diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index 2e500ce090..2aca0e9486 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -224,27 +224,27 @@ def convert_folder(connectionInfo, Extractionlvl): df_saved_file = t2.to_csv(newfilepath + file) cmd = ( - 'mongoimport --quiet --uri mongodb://{}:{}@{}:{} --authenticationDatabase "admin" --file {} -d {} -c {} --drop --type csv --headerline' + "mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline" ).format( connectionInfo["username"], connectionInfo["password"], connectionInfo["host"], connectionInfo["port"], - newfilepath + file, connectionInfo["db"], + newfilepath + file, fileName, ) os.system(cmd) else: cmd = ( - 'mongoimport --quiet --uri mongodb://{}:{}@{}:{} --authenticationDatabase "admin" --file {} -d {} -c {} --drop --type csv --headerline' + "mongoimport --quiet --uri mongodb://{}:{}@{}:{}/{}?authSource=admin --file {} -c {} --drop --type csv --headerline" ).format( connectionInfo["username"], connectionInfo["password"], connectionInfo["host"], connectionInfo["port"], - connectionInfo["workload"] + "/" + file, connectionInfo["db"], + connectionInfo["workload"] + "/" + file, fileName, ) os.system(cmd) diff --git a/src/utils/plot_roofline.py b/src/utils/plot_roofline.py index 67247b5c09..f421dc972e 100644 --- a/src/utils/plot_roofline.py +++ b/src/utils/plot_roofline.py @@ -21,16 +21,22 @@ ################################################################################ from linecache import cache -import subprocess -from operator import sub import os import sys from pathlib import Path import numpy import matplotlib -matplotlib.use('Agg') -import matplotlib.pyplot as plt + +try: + + import matplotlib.pyplot as plt +except ImportError: + # other non-interactive options: + # cairo, pdf, pgf, ps, svg, template + matplotlib.use("agg", force=True) + import matplotlib.pyplot as plt + from matplotlib.pyplot import get, text from math import log, pi, sqrt import pandas as pd @@ -296,7 +302,7 @@ def plot_application(inputs, verbose): avgDuration / calls, ) ) - if verbose: + if verbose >= 2: print( "Just added {} to AI_Data at index {}. # of calls: {}".format( kernelName, index, calls @@ -356,7 +362,7 @@ def plot_application(inputs, verbose): + (row["SQ_INSTS_VALU_MFMA_MOPS_F64"] * 512) ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped total_flops at index {}".format(index)) pass try: @@ -384,7 +390,7 @@ def plot_application(inputs, verbose): ) ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped valu_flops at index {}".format(index)) pass @@ -395,7 +401,7 @@ def plot_application(inputs, verbose): mfma_flops_f64 += row["SQ_INSTS_VALU_MFMA_MOPS_F64"] * 512 mfma_iops_i8 += row["SQ_INSTS_VALU_MFMA_MOPS_I8"] * 512 except KeyError: - if verbose: + if verbose >= 2: print("Skipped mfma ops at index {}".format(index)) pass @@ -404,14 +410,14 @@ def plot_application(inputs, verbose): (row["SQ_LDS_IDX_ACTIVE"] - row["SQ_LDS_BANK_CONFLICT"]) * 4 * L2_BANKS ) # L2_BANKS = 32 (since assuming mi200) except KeyError: - if verbose: + if verbose >= 2: print("Skipped lds_data at index {}".format(index)) pass try: L1cache_data += row["TCP_TOTAL_CACHE_ACCESSES_sum"] * 64 except KeyError: - if verbose: + if verbose >= 2: print("Skipped L1cache_data at index {}".format(index)) pass @@ -423,7 +429,7 @@ def plot_application(inputs, verbose): + row["TCP_TCC_READ_REQ_sum"] * 64 ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped L2cache_data at index {}".format(index)) pass try: @@ -434,7 +440,7 @@ def plot_application(inputs, verbose): + ((row["TCC_EA_WRREQ_sum"] - row["TCC_EA_WRREQ_64B_sum"]) * 32) ) except KeyError: - if verbose: + if verbose >= 2: print("Skipped hbm_data at index {}".format(index)) pass @@ -513,8 +519,6 @@ def plot_application(inputs, verbose): print(intensities) - # fig, ax = plt.subplots() - plotted_spots = [] labels = [] for i in intensities: @@ -652,7 +656,12 @@ def empirical_roof(args): dtype = plot_roof(inputs, roof_data) # Also returns chosen dtype plot_application(inputs, args.verbose) - filename = IMGNAME + "_gpu-" + str(inputs["device"]) + "_{}".format(dtype) + ".pdf" + if inputs["device"] == -1: + dev_id = "ALL" + else: + dev_id = str(inputs["device"]) + + filename = IMGNAME + "_gpu-" + dev_id + "_{}".format(dtype) + ".pdf" full_path = os.path.abspath(inputs["path"]) path_to_output = full_path + "/" + filename diff --git a/src/utils/specs.py b/src/utils/specs.py index 2d315eff94..d63b6b4f1f 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -24,6 +24,7 @@ import os import re +import sys import socket import subprocess @@ -174,12 +175,34 @@ def get_machine_specs(devicenum): "version-libs", "version-utils", ] + + rocmFound = False for itr in version_loc: _path = os.path.join(os.getenv("ROCM_PATH", "/opt/rocm"), ".info", itr) if os.path.exists(_path): rocm_ver = path(_path).read_text() + rocmFound = True break + if not rocmFound: + # check if ROCM_VER is supplied externally + ROCM_VER_USER = os.getenv("ROCM_VER") + if ROCM_VER_USER is not None: + print( + "Overriding missing ROCm version detection with ROCM_VER = %s" + % ROCM_VER_USER + ) + rocm_ver = ROCM_VER_USER + else: + _rocm_path = os.getenv("ROCM_PATH", "/opt/rocm") + print("Error: Unable to detect a complete local ROCm installation.") + print( + "\nThe expected %s/.info/ versioning directory is missing. Please" + % _rocm_path + ) + print("ensure you have valid ROCm installation.") + sys.exit(1) + ( gpu_id, L1, diff --git a/tests/generate_test_analyze_workloads.py b/tests/generate_test_analyze_workloads.py index 20801a7f8f..66a0f49751 100644 --- a/tests/generate_test_analyze_workloads.py +++ b/tests/generate_test_analyze_workloads.py @@ -35,7 +35,7 @@ if __name__ == "__main__": test = ( "\n\ndef test_import_" + workload_name - + "_mi100():\n with patch('sys.argv',['omniperf', 'database', '--import', '-H', 'localhost', '-u', 'amd', '-p', 'amd123', '-t', 'asw', '-w', '" + + "_mi100():\n with patch('sys.argv',['omniperf', 'database', '--import', '-H', 'localhost', '-u', 'temp', '-p', 'temp123', '-t', 'asw', '-w', '" + workload + "/mi100']): omniperf.main()" ) @@ -65,7 +65,7 @@ if __name__ == "__main__": test = ( "\n\ndef test_" + workload_name - + "_mi100():\n with patch('sys.argv',['omniperf', 'database', '--import', '-H', 'localhost', '-u', '-p', 'amd123', 'amd', '-t', 'asw', '-w', '" + + "_mi100():\n with patch('sys.argv',['omniperf', 'database', '--import', '-H', 'localhost', '-u', 'temp', '-p', 'temp123', '-t', 'asw', '-w', '" + workload + "/mi100']): omniperf.main()" ) diff --git a/tests/test_import_workloads.py b/tests/test_import_workloads.py index 3283091fb7..5a0f2f11f3 100644 --- a/tests/test_import_workloads.py +++ b/tests/test_import_workloads.py @@ -19,9 +19,9 @@ def test_import_D_str_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -42,8 +42,8 @@ def test_D_str_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -63,9 +63,9 @@ def test_import_dev01p3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -85,9 +85,9 @@ def test_import_SQC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -108,8 +108,8 @@ def test_SQC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -129,9 +129,9 @@ def test_import_Axes2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -152,8 +152,8 @@ def test_Axes2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -173,9 +173,9 @@ def test_import_no_roof_SQ_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -196,8 +196,8 @@ def test_no_roof_SQ_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -217,9 +217,9 @@ def test_import_CPF_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -240,8 +240,8 @@ def test_CPF_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -261,9 +261,9 @@ def test_import_no_roof_LDS_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -284,8 +284,8 @@ def test_no_roof_LDS_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -305,9 +305,9 @@ def test_import_D_str_inv4_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -328,8 +328,8 @@ def test_D_str_inv4_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -350,8 +350,8 @@ def test_roof_only_K_int_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -371,9 +371,9 @@ def test_import_no_roof_SPI_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -394,8 +394,8 @@ def test_no_roof_SPI_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -415,9 +415,9 @@ def test_import_no_roof_K_str_valid_2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -438,8 +438,8 @@ def test_no_roof_K_str_valid_2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -459,9 +459,9 @@ def test_import_no_roof_mixbench1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -482,8 +482,8 @@ def test_no_roof_mixbench1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -503,9 +503,9 @@ def test_import_no_roof_TA_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -526,8 +526,8 @@ def test_no_roof_TA_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -547,9 +547,9 @@ def test_import_no_roof_CPF_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -570,8 +570,8 @@ def test_no_roof_CPF_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -591,9 +591,9 @@ def test_import_no_roof_CPC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -614,8 +614,8 @@ def test_no_roof_CPC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -635,9 +635,9 @@ def test_import_K_str_inv3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -658,8 +658,8 @@ def test_K_str_inv3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -679,9 +679,9 @@ def test_import_LDS_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -702,8 +702,8 @@ def test_LDS_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -723,9 +723,9 @@ def test_import_no_roof_K_str_valid_3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -746,8 +746,8 @@ def test_roof_only_D_int_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -768,8 +768,8 @@ def test_roof_only_K_str_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -790,8 +790,8 @@ def test_roof_only_SQC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -811,9 +811,9 @@ def test_import_no_roof_Axes2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -834,8 +834,8 @@ def test_no_roof_Axes2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -855,9 +855,9 @@ def test_import_HBM_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -878,8 +878,8 @@ def test_HBM_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -900,8 +900,8 @@ def test_roof_only_TA_CPC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -922,8 +922,8 @@ def test_roof_only_D_val_int_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -943,9 +943,9 @@ def test_import_no_roof_L2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -966,8 +966,8 @@ def test_no_roof_L2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -987,9 +987,9 @@ def test_import_L2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1010,8 +1010,8 @@ def test_L2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1031,9 +1031,9 @@ def test_import_no_roof_dev1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1054,8 +1054,8 @@ def test_no_roof_dev1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1076,8 +1076,8 @@ def test_roof_only_K_str_inv3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1098,8 +1098,8 @@ def test_roof_only_K_str_valid_1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1120,8 +1120,8 @@ def test_roof_only_CPC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1141,9 +1141,9 @@ def test_import_no_roof_Axes3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1164,8 +1164,8 @@ def test_no_roof_Axes3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1185,9 +1185,9 @@ def test_import_no_roof_D_str_inv3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1208,8 +1208,8 @@ def test_no_roof_D_str_inv3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1229,9 +1229,9 @@ def test_import_no_roof_D_int_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1252,8 +1252,8 @@ def test_no_roof_D_int_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1273,9 +1273,9 @@ def test_import_TD_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1296,8 +1296,8 @@ def test_TD_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1318,8 +1318,8 @@ def test_roof_only_D_int_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1339,9 +1339,9 @@ def test_import_D_val_int2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1362,8 +1362,8 @@ def test_D_val_int2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1383,9 +1383,9 @@ def test_import_no_roof_mixbench2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1406,8 +1406,8 @@ def test_no_roof_mixbench2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1428,8 +1428,8 @@ def test_roof_only_SPI_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1449,9 +1449,9 @@ def test_import_no_roof_D_val_int2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1472,8 +1472,8 @@ def test_no_roof_D_val_int2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1493,9 +1493,9 @@ def test_import_K_str_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1516,8 +1516,8 @@ def test_K_str_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1538,8 +1538,8 @@ def test_roof_only_TA_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1559,9 +1559,9 @@ def test_import_K_str_valid_3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1581,9 +1581,9 @@ def test_import_SQ_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1604,8 +1604,8 @@ def test_SQ_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1625,9 +1625,9 @@ def test_import_no_roof_D_str_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1648,8 +1648,8 @@ def test_no_roof_D_str_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1669,9 +1669,9 @@ def test_import_no_roof_dev01p3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1692,8 +1692,8 @@ def test_roof_only_D_val_int2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1713,9 +1713,9 @@ def test_import_no_roof_D_str_inv4_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1736,8 +1736,8 @@ def test_no_roof_D_str_inv4_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1758,8 +1758,8 @@ def test_roof_only_CPF_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1779,9 +1779,9 @@ def test_import_mixbench_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1802,8 +1802,8 @@ def test_mixbench_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1824,8 +1824,8 @@ def test_roof_only_D_str_inv4_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1845,9 +1845,9 @@ def test_import_no_roof_kernels_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1868,8 +1868,8 @@ def test_no_roof_kernels_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1890,8 +1890,8 @@ def test_roof_only_TCC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1911,9 +1911,9 @@ def test_import_TA_CPC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -1934,8 +1934,8 @@ def test_TA_CPC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1956,8 +1956,8 @@ def test_roof_only_SQ_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -1977,9 +1977,9 @@ def test_import_K_int_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2000,8 +2000,8 @@ def test_K_int_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2022,8 +2022,8 @@ def test_roof_only_TCP_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2044,8 +2044,8 @@ def test_roof_only_K_str_valid_2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2065,9 +2065,9 @@ def test_import_D_int_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2088,8 +2088,8 @@ def test_D_int_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2110,8 +2110,8 @@ def test_roof_only_Axes3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2131,9 +2131,9 @@ def test_import_dev0_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2154,8 +2154,8 @@ def test_dev0_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2176,8 +2176,8 @@ def test_roof_only_K_str_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2197,9 +2197,9 @@ def test_import_Axes1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2220,8 +2220,8 @@ def test_Axes1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2242,8 +2242,8 @@ def test_roof_only_HBM_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2263,9 +2263,9 @@ def test_import_D_val_int_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2286,8 +2286,8 @@ def test_D_val_int_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2307,9 +2307,9 @@ def test_import_no_roof_TCC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2330,8 +2330,8 @@ def test_no_roof_TCC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2351,9 +2351,9 @@ def test_import_no_roof_SQC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2374,8 +2374,8 @@ def test_no_roof_SQC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2396,8 +2396,8 @@ def test_roof_only_TD_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2417,9 +2417,9 @@ def test_import_no_roof_K_int_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2440,8 +2440,8 @@ def test_no_roof_K_int_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2461,9 +2461,9 @@ def test_import_no_roof_Axes1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2484,8 +2484,8 @@ def test_no_roof_Axes1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2505,9 +2505,9 @@ def test_import_SPI_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2528,8 +2528,8 @@ def test_SPI_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2550,8 +2550,8 @@ def test_roof_only_D_str_inv3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2571,9 +2571,9 @@ def test_import_no_roof_D_val_int_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2594,8 +2594,8 @@ def test_no_roof_D_val_int_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2615,9 +2615,9 @@ def test_import_K_str_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2638,8 +2638,8 @@ def test_K_str_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2659,9 +2659,9 @@ def test_import_CPC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2682,8 +2682,8 @@ def test_CPC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2704,8 +2704,8 @@ def test_roof_only_dispatches_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2726,8 +2726,8 @@ def test_roof_only_mixbench2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2747,9 +2747,9 @@ def test_import_Axes4_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2770,8 +2770,8 @@ def test_Axes4_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2791,9 +2791,9 @@ def test_import_no_roof_TCP_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2814,8 +2814,8 @@ def test_no_roof_TCP_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2836,8 +2836,8 @@ def test_roof_only_LDS_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2857,9 +2857,9 @@ def test_import_invdev_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2880,8 +2880,8 @@ def test_invdev_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2901,9 +2901,9 @@ def test_import_no_roof_dev0_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -2924,8 +2924,8 @@ def test_no_roof_dev0_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2946,8 +2946,8 @@ def test_roof_only_Axes1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2968,8 +2968,8 @@ def test_roof_only_invdev_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -2990,8 +2990,8 @@ def test_roof_only_D_str_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3011,9 +3011,9 @@ def test_import_no_roof_K_str_inv3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3034,8 +3034,8 @@ def test_no_roof_K_str_inv3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3055,9 +3055,9 @@ def test_import_no_roof_K_str_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3078,8 +3078,8 @@ def test_no_roof_K_str_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3099,9 +3099,9 @@ def test_import_D_str_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3122,8 +3122,8 @@ def test_D_str_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3143,9 +3143,9 @@ def test_import_kernels_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3166,8 +3166,8 @@ def test_kernels_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3187,9 +3187,9 @@ def test_import_no_roof_Axes4_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3210,8 +3210,8 @@ def test_no_roof_Axes4_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3231,9 +3231,9 @@ def test_import_CMD_INV_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3253,9 +3253,9 @@ def test_import_K_int_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3276,8 +3276,8 @@ def test_K_int_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3297,9 +3297,9 @@ def test_import_mixbench2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3320,8 +3320,8 @@ def test_mixbench2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3342,8 +3342,8 @@ def test_roof_only_Double_N_flag_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3363,9 +3363,9 @@ def test_import_no_roof_TD_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3386,8 +3386,8 @@ def test_no_roof_TD_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3407,9 +3407,9 @@ def test_import_TCC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3430,8 +3430,8 @@ def test_TCC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3452,8 +3452,8 @@ def test_roof_only_dev0_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3473,9 +3473,9 @@ def test_import_no_roof_D_str_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3496,8 +3496,8 @@ def test_no_roof_D_str_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3518,8 +3518,8 @@ def test_roof_only_L2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3539,9 +3539,9 @@ def test_import_no_roof_TA_CPC_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3562,8 +3562,8 @@ def test_no_roof_TA_CPC_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3583,9 +3583,9 @@ def test_import_no_roof_Double_N_flag_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3606,8 +3606,8 @@ def test_no_roof_Double_N_flag_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3627,9 +3627,9 @@ def test_import_Double_N_flag_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3650,8 +3650,8 @@ def test_Double_N_flag_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3672,8 +3672,8 @@ def test_roof_only_K_int_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3693,9 +3693,9 @@ def test_import_no_roof_K_str_valid_1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3716,8 +3716,8 @@ def test_no_roof_K_str_valid_1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3738,8 +3738,8 @@ def test_roof_only_mixbench1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3759,9 +3759,9 @@ def test_import_dev1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3782,8 +3782,8 @@ def test_dev1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3803,9 +3803,9 @@ def test_import_no_roof_K_str_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3826,8 +3826,8 @@ def test_no_roof_K_str_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3847,9 +3847,9 @@ def test_import_K_str_valid_1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3870,8 +3870,8 @@ def test_K_str_valid_1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3891,9 +3891,9 @@ def test_import_mixbench1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3914,8 +3914,8 @@ def test_mixbench1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3935,9 +3935,9 @@ def test_import_no_roof_CMD_INV_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -3958,8 +3958,8 @@ def test_roof_only_D_str_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -3979,9 +3979,9 @@ def test_import_no_roof_HBM_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4002,8 +4002,8 @@ def test_no_roof_HBM_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4024,8 +4024,8 @@ def test_roof_only_kernels_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4045,9 +4045,9 @@ def test_import_D_int_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4068,8 +4068,8 @@ def test_D_int_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4089,9 +4089,9 @@ def test_import_K_str_valid_2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4112,8 +4112,8 @@ def test_K_str_valid_2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4133,9 +4133,9 @@ def test_import_TCP_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4156,8 +4156,8 @@ def test_TCP_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4177,9 +4177,9 @@ def test_import_Axes3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4200,8 +4200,8 @@ def test_Axes3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4221,9 +4221,9 @@ def test_import_no_roof_invdev_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4244,8 +4244,8 @@ def test_no_roof_invdev_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4265,9 +4265,9 @@ def test_import_no_roof_dispatches_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4288,8 +4288,8 @@ def test_no_roof_dispatches_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4309,9 +4309,9 @@ def test_import_D_str_inv3_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4332,8 +4332,8 @@ def test_D_str_inv3_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4353,9 +4353,9 @@ def test_import_TA_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4376,8 +4376,8 @@ def test_TA_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4397,9 +4397,9 @@ def test_import_no_roof_D_int_inv1_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4420,8 +4420,8 @@ def test_no_roof_D_int_inv1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4441,9 +4441,9 @@ def test_import_dispatches_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4464,8 +4464,8 @@ def test_dispatches_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4486,8 +4486,8 @@ def test_roof_only_dev1_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", @@ -4507,9 +4507,9 @@ def test_import_no_roof_K_int_inv2_mi100(): "-H", "localhost", "-u", - "amd", + "temp", "-p", - "amd123", + "temp123", "-t", "asw", "-w", @@ -4530,8 +4530,8 @@ def test_no_roof_K_int_inv2_mi100(): "localhost", "-u", "-p", - "amd123", - "amd", + "temp123", + "temp", "-t", "asw", "-w", diff --git a/utils/build.sh b/utils/build.sh index 45625a8d3d..e980aff882 100755 --- a/utils/build.sh +++ b/utils/build.sh @@ -5,7 +5,7 @@ pyinstaller src/omniperf.py \ --add-data "src/perfmon_pub/*:perfmon_pub" \ --add-data "src/utils/*:utils" \ --add-data "src/soc_params/*.csv:soc_params" \ - --add-data "src/omniperf_cli/*:omniperf_cli" \ + --add-data "src/omniperf_analyze/*:omniperf_analyze" \ --hidden-import matplotlib.backends.backend_pdf \ ${@} @@ -57,8 +57,8 @@ cp -r ${dash_loc:10}/dash_svg "$distpath"/omniperf/ echo "(build.sh) Fixing flattened directories" #TODO: Copy orig file structure from over to flattened packaged version -rm -rf "$distpath"/omniperf/omniperf_cli/ -cp -r src/omniperf_cli/ "$distpath"/omniperf/ +rm -rf "$distpath"/omniperf/omniperf_analyze/ +cp -r src/omniperf_analyze/ "$distpath"/omniperf/ rm -rf "$distpath"/omniperf/perfmon_pub/ cp -r src/perfmon_pub/ "$distpath"/omniperf/ From f6dad0cd589b192e9a597ee877aadff931d9837b Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 23 Jan 2023 16:08:42 -0600 Subject: [PATCH 50/90] Comply to Python formatting Signed-off-by: coleramos425 --- src/parser.py | 16 ++++++++++++---- src/utils/specs.py | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/parser.py b/src/parser.py index 50878873b2..149c3f8f86 100644 --- a/src/parser.py +++ b/src/parser.py @@ -119,7 +119,9 @@ def parse(my_parser): help="\t\t\tKernel filtering.", ) - result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + result = subprocess.run( + ["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + ) if result.returncode == 0: profile_group.add_argument( "-l", @@ -149,9 +151,15 @@ def parse(my_parser): help="\t\t\tCreate kernel summaries.", ) else: - profile_group.add_argument("--i-feel-lucky", default=False, dest="lucky", help=argparse.SUPPRESS) - profile_group.add_argument("--use-rocscope", default=False, dest="use_rocscope", help=argparse.SUPPRESS) - profile_group.add_argument("--kernel-summaries", default=False, dest="summaries", help=argparse.SUPPRESS) + profile_group.add_argument( + "--i-feel-lucky", default=False, dest="lucky", help=argparse.SUPPRESS + ) + profile_group.add_argument( + "--use-rocscope", default=False, dest="use_rocscope", help=argparse.SUPPRESS + ) + profile_group.add_argument( + "--kernel-summaries", default=False, dest="summaries", help=argparse.SUPPRESS + ) profile_group.add_argument( "-b", diff --git a/src/utils/specs.py b/src/utils/specs.py index d63b6b4f1f..5e567ad895 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -32,7 +32,7 @@ from dataclasses import dataclass from pathlib import Path as path from textwrap import dedent -gpu_list = {"gfx906", "gfx908", "gfx90a","gfx900"} +gpu_list = {"gfx906", "gfx908", "gfx90a", "gfx900"} @dataclass From ee51ba994f8aa50f76c350fccb24f7b1457dc80e Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 24 Jan 2023 09:09:52 -0600 Subject: [PATCH 51/90] Add execution privileges to omniperf bash Signed-off-by: coleramos425 --- src/omniperf | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 src/omniperf diff --git a/src/omniperf b/src/omniperf old mode 100644 new mode 100755 From d86f6bd90f8467eee2279712609b689251bbbe3d Mon Sep 17 00:00:00 2001 From: colramos-amd Date: Wed, 25 Jan 2023 15:19:20 -0600 Subject: [PATCH 52/90] Modify formatting for standalone roofline labels Signed-off-by: colramos-amd --- .../utils/gui_components/roofline.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index c86c8365b8..4442fa27dc 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -55,7 +55,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): text=[ "{} GB/s".format(to_int(line_data["hbm"][2])), ], - textposition="top center" + textposition="top right", ) ) fig.add_trace( @@ -68,7 +68,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): text=[ "{} GB/s".format(to_int(line_data["l2"][2])), ], - textposition="top center" + textposition="top right", ) ) fig.add_trace( @@ -81,7 +81,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): text=[ "{} GB/s".format(to_int(line_data["l1"][2])), ], - textposition="top center" + textposition="top right", ) ) fig.add_trace( @@ -94,7 +94,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): text=[ "{} GB/s".format(to_int(line_data["lds"][2])), ], - textposition="top center" + textposition="top right", ) ) if roof_info["dtype"] != "FP16" and roof_info["dtype"] != "I8": @@ -109,14 +109,14 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): None, "{} GFLOP/s".format(to_int(line_data["valu"][2])), ], - textposition="top center" + textposition="top left", ) ) if roof_info["dtype"] == "FP16": - pos = "bottom center" + pos = "bottom left" else: - pos = "top center" + pos = "top left" fig.add_trace( go.Scatter( x=line_data["mfma"][0], @@ -128,7 +128,7 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): None, "{} GFLOP/s".format(to_int(line_data["mfma"][2])), ], - textposition=pos + textposition=pos, ) ) ####################### @@ -207,7 +207,9 @@ def get_roofline(path_to_dir, ret_df, verbose, dev_id=None, isStandalone=False): dev_id = "ALL" if dev_id == -1 else str(dev_id) fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32.pdf".format(dev_id)) - ml_combo_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id)) + ml_combo_fig.write_image( + path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id) + ) else: return html.Section( id="roofline", From a8d64bf7e9f424562911bdf42c8446c58a203bbb Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Wed, 25 Jan 2023 15:30:04 -0600 Subject: [PATCH 53/90] Modify parameters for calls to rocscope Signed-off-by: coleramos425 --- src/omniperf | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/omniperf b/src/omniperf index 9931b3d7fd..ca15939679 100755 --- a/src/omniperf +++ b/src/omniperf @@ -331,9 +331,11 @@ def run_rocscope(args, fname): "-p", args.path, "-n", args.name, "-t", fname, - "--", args.remaining] + "--"] + for i in args.remaining.split(): + rs_cmd.append(i) print(rs_cmd) - result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = run_subprocess(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: print(result.stderr.decode('ascii')) sys.exit(1) @@ -381,9 +383,9 @@ def omniperf_profile(args, VER): print("Dispatch Selection: ", args.dispatch) if args.ipblocks == None: - print("IP Blocks: All") + print("IP Blocks: All", "\n") else: - print("IP Blocks: ", args.ipblocks) + print("IP Blocks: ", args.ipblocks, "\n") # Set up directories workload_dir = args.path + "/" + args.name + "/" + args.target @@ -408,9 +410,11 @@ def omniperf_profile(args, VER): "top10", "-p", args.path, "-n", args.name, - "--", args.remaining] + "--"] + for i in args.remaining.split(): + rs_cmd.append(i) print(rs_cmd) - result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = run_subprocess(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: print(result.stderr.decode('ascii')) else: @@ -432,9 +436,11 @@ def omniperf_profile(args, VER): "summary", "-p", args.path, "-n", args.name, - "--", args.remaining] + "--"] + for i in args.remaining.split(): + rs_cmd.append(i) print(rs_cmd) - result = subprocess.run(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = run_subprocess(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: print(result.stderr.decode('ascii')) else: From 5d27fe09ca1c52f9f4da968fc6bb11601146df75 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Wed, 25 Jan 2023 16:52:55 -0600 Subject: [PATCH 54/90] Dynamic labeling based on roofline mode Signed-off-by: coleramos425 --- .../utils/gui_components/roofline.py | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 4442fa27dc..c3917064d9 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -35,10 +35,10 @@ def to_int(a): else: return int(a) - -def generate_plots(roof_info, ai_data, verbose, fig=None): +def generate_plots(roof_info, ai_data, isStandalone, verbose, fig=None): if fig is None: fig = go.Figure() + plotMode = "lines+text" if isStandalone else "lines" line_data = roofline_calc.empirical_roof(roof_info, verbose) print("Line data:\n", line_data) @@ -50,10 +50,11 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["hbm"][0], y=line_data["hbm"][1], name="HBM-{}".format(roof_info["dtype"]), - mode="lines+text", + mode=plotMode, hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["hbm"][2])), + None if isStandalone else "{} GB/s".format(to_int(line_data["hbm"][2])) ], textposition="top right", ) @@ -63,10 +64,11 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["l2"][0], y=line_data["l2"][1], name="L2-{}".format(roof_info["dtype"]), - mode="lines+text", + mode=plotMode, hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["l2"][2])), + None if isStandalone else "{} GB/s".format(to_int(line_data["l2"][2])) ], textposition="top right", ) @@ -76,10 +78,11 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["l1"][0], y=line_data["l1"][1], name="L1-{}".format(roof_info["dtype"]), - mode="lines+text", + mode=plotMode, hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["l1"][2])), + None if isStandalone else "{} GB/s".format(to_int(line_data["l1"][2])) ], textposition="top right", ) @@ -89,10 +92,11 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["lds"][0], y=line_data["lds"][1], name="LDS-{}".format(roof_info["dtype"]), - mode="lines+text", + mode=plotMode, hovertemplate="%{text}", text=[ "{} GB/s".format(to_int(line_data["lds"][2])), + None if isStandalone else "{} GB/s".format(to_int(line_data["lds"][2])) ], textposition="top right", ) @@ -103,10 +107,10 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["valu"][0], y=line_data["valu"][1], name="Peak VALU-{}".format(roof_info["dtype"]), - mode="lines+text", + mode=plotMode, hovertemplate="%{text}", text=[ - None, + None if isStandalone else "{} GFLOP/s".format(to_int(line_data["valu"][2])), "{} GFLOP/s".format(to_int(line_data["valu"][2])), ], textposition="top left", @@ -122,10 +126,10 @@ def generate_plots(roof_info, ai_data, verbose, fig=None): x=line_data["mfma"][0], y=line_data["mfma"][1], name="Peak MFMA-{}".format(roof_info["dtype"]), - mode="lines+text", + mode=plotMode, hovertemplate="%{text}", text=[ - None, + None if isStandalone else "{} GFLOP/s".format(to_int(line_data["mfma"][2])), "{} GFLOP/s".format(to_int(line_data["mfma"][2])), ], textposition=pos, @@ -199,9 +203,9 @@ def get_roofline(path_to_dir, ret_df, verbose, dev_id=None, isStandalone=False): print(i, "->", ai_data[i]) print("\n") - fp32_fig = generate_plots(fp32_details, ai_data, verbose) - fp16_fig = generate_plots(fp16_details, ai_data, verbose) - ml_combo_fig = generate_plots(int8_details, ai_data, verbose, fp16_fig) + fp32_fig = generate_plots(fp32_details, ai_data, isStandalone, verbose) + fp16_fig = generate_plots(fp16_details, ai_data, isStandalone, verbose) + ml_combo_fig = generate_plots(int8_details, ai_data, isStandalone, verbose, fp16_fig) if isStandalone: dev_id = "ALL" if dev_id == -1 else str(dev_id) From b6d6c05e7ba4cd00ea62b0537591f2d260564a8a Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Thu, 26 Jan 2023 14:07:10 -0600 Subject: [PATCH 55/90] Re-enable standalone roof options. Everthing working. Signed-off-by: coleramos425 --- src/omniperf | 2 +- src/omniperf_analyze/omniperf_analyze.py | 17 +- .../utils/gui_components/roofline.py | 129 ++-- src/omniperf_analyze/utils/roofline_calc.py | 16 +- src/parser.py | 11 +- src/utils/plot_roofline.py | 672 ------------------ 6 files changed, 86 insertions(+), 761 deletions(-) delete mode 100644 src/utils/plot_roofline.py diff --git a/src/omniperf b/src/omniperf index 3697409386..24e4cc94d5 100755 --- a/src/omniperf +++ b/src/omniperf @@ -649,7 +649,7 @@ def main(): # Setup prerequisits for roofline roof_setup(args, my_parser) # Generate roofline - roofline_only(args.path, args.verbose, args.device) + roofline_only(args.path, args.device, args.sort, args.mem_level, args.verbose) # Profile only else: diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index d15dec4c92..5c090bc121 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -210,10 +210,15 @@ def run_cli(args, runs): ) -def roofline_only(path_to_dir, verbose, dev_id): +def roofline_only(path_to_dir, dev_id, sort_type, mem_level, verbose): import pandas as pd from collections import OrderedDict + # Change vL1D to a interpretable str, if required + if "vL1D" in mem_level: + mem_level.remove("vL1D") + mem_level.append("L1") + app_path = path_to_dir + "/pmc_perf.csv" roofline_exists = os.path.isfile(app_path) if not roofline_exists: @@ -221,7 +226,15 @@ def roofline_only(path_to_dir, verbose, dev_id): sys.exit(0) t_df = OrderedDict() t_df["pmc_perf"] = pd.read_csv(app_path) - get_roofline(path_to_dir, t_df, dev_id, verbose, True) + get_roofline( + path_to_dir, + t_df, + verbose, + dev_id, # [Optional] Specify device id to collect roofline info from + sort_type, # [Optional] Sort AI by top kernels or dispatches + mem_level, # [Optional] Toggle particular level(s) of memory hierarchy + True, # [Optional] Generate a standalone roofline analysis + ) def analyze(args): diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index c3917064d9..89e19af132 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -22,6 +22,7 @@ from omniperf_analyze.utils import roofline_calc +import time import numpy as np from dash import html, dash_table @@ -35,72 +36,40 @@ def to_int(a): else: return int(a) -def generate_plots(roof_info, ai_data, isStandalone, verbose, fig=None): + +def generate_plots(roof_info, ai_data, mem_level, is_standalone, verbose, fig=None): if fig is None: fig = go.Figure() - plotMode = "lines+text" if isStandalone else "lines" - line_data = roofline_calc.empirical_roof(roof_info, verbose) + plotMode = "lines+text" if is_standalone else "lines" + line_data = roofline_calc.empirical_roof(roof_info, mem_level, verbose) print("Line data:\n", line_data) ####################### # Plot BW Lines ####################### - fig.add_trace( - go.Scatter( - x=line_data["hbm"][0], - y=line_data["hbm"][1], - name="HBM-{}".format(roof_info["dtype"]), - mode=plotMode, - hovertemplate="%{text}", - text=[ - "{} GB/s".format(to_int(line_data["hbm"][2])), - None if isStandalone else "{} GB/s".format(to_int(line_data["hbm"][2])) - ], - textposition="top right", + if mem_level == "ALL": + cacheHierarchy = ["HBM", "L2", "L1", "LDS"] + else: + cacheHierarchy = mem_level + + for cacheLevel in cacheHierarchy: + fig.add_trace( + go.Scatter( + x=line_data[cacheLevel.lower()][0], + y=line_data[cacheLevel.lower()][1], + name="{}-{}".format(cacheLevel, roof_info["dtype"]), + mode=plotMode, + hovertemplate="%{text}", + text=[ + "{} GB/s".format(to_int(line_data[cacheLevel.lower()][2])), + None + if is_standalone + else "{} GB/s".format(to_int(line_data[cacheLevel.lower()][2])), + ], + textposition="top right", + ) ) - ) - fig.add_trace( - go.Scatter( - x=line_data["l2"][0], - y=line_data["l2"][1], - name="L2-{}".format(roof_info["dtype"]), - mode=plotMode, - hovertemplate="%{text}", - text=[ - "{} GB/s".format(to_int(line_data["l2"][2])), - None if isStandalone else "{} GB/s".format(to_int(line_data["l2"][2])) - ], - textposition="top right", - ) - ) - fig.add_trace( - go.Scatter( - x=line_data["l1"][0], - y=line_data["l1"][1], - name="L1-{}".format(roof_info["dtype"]), - mode=plotMode, - hovertemplate="%{text}", - text=[ - "{} GB/s".format(to_int(line_data["l1"][2])), - None if isStandalone else "{} GB/s".format(to_int(line_data["l1"][2])) - ], - textposition="top right", - ) - ) - fig.add_trace( - go.Scatter( - x=line_data["lds"][0], - y=line_data["lds"][1], - name="LDS-{}".format(roof_info["dtype"]), - mode=plotMode, - hovertemplate="%{text}", - text=[ - "{} GB/s".format(to_int(line_data["lds"][2])), - None if isStandalone else "{} GB/s".format(to_int(line_data["lds"][2])) - ], - textposition="top right", - ) - ) + if roof_info["dtype"] != "FP16" and roof_info["dtype"] != "I8": fig.add_trace( go.Scatter( @@ -110,7 +79,9 @@ def generate_plots(roof_info, ai_data, isStandalone, verbose, fig=None): mode=plotMode, hovertemplate="%{text}", text=[ - None if isStandalone else "{} GFLOP/s".format(to_int(line_data["valu"][2])), + None + if is_standalone + else "{} GFLOP/s".format(to_int(line_data["valu"][2])), "{} GFLOP/s".format(to_int(line_data["valu"][2])), ], textposition="top left", @@ -129,7 +100,9 @@ def generate_plots(roof_info, ai_data, isStandalone, verbose, fig=None): mode=plotMode, hovertemplate="%{text}", text=[ - None if isStandalone else "{} GFLOP/s".format(to_int(line_data["mfma"][2])), + None + if is_standalone + else "{} GFLOP/s".format(to_int(line_data["mfma"][2])), "{} GFLOP/s".format(to_int(line_data["mfma"][2])), ], textposition=pos, @@ -176,26 +149,33 @@ def generate_plots(roof_info, ai_data, isStandalone, verbose, fig=None): return fig -def get_roofline(path_to_dir, ret_df, verbose, dev_id=None, isStandalone=False): +def get_roofline( + path_to_dir, + ret_df, + verbose, + dev_id=None, + sort_type="kernels", + mem_level="ALL", + is_standalone=False, +): # Roofline settings - # TODO: Make "sort" attribute dynamic so user can select desired sort fp32_details = { "path": path_to_dir, - "sort": "kernels", + "sort": sort_type, "device": 0, "dtype": "FP32", } fp16_details = { "path": path_to_dir, - "sort": "kernels", + "sort": sort_type, "device": 0, "dtype": "FP16", } - int8_details = {"path": path_to_dir, "sort": "kernels", "device": 0, "dtype": "I8"} + int8_details = {"path": path_to_dir, "sort": sort_type, "device": 0, "dtype": "I8"} # Generate roofline plots print("Path: ", path_to_dir) - ai_data = roofline_calc.plot_application("kernels", ret_df, verbose) + ai_data = roofline_calc.plot_application(sort_type, ret_df, verbose) if verbose >= 1: # print AI data for each mem level print("AI at each mem level") @@ -203,17 +183,26 @@ def get_roofline(path_to_dir, ret_df, verbose, dev_id=None, isStandalone=False): print(i, "->", ai_data[i]) print("\n") - fp32_fig = generate_plots(fp32_details, ai_data, isStandalone, verbose) - fp16_fig = generate_plots(fp16_details, ai_data, isStandalone, verbose) - ml_combo_fig = generate_plots(int8_details, ai_data, isStandalone, verbose, fp16_fig) + fp32_fig = generate_plots(fp32_details, ai_data, mem_level, is_standalone, verbose) + fp16_fig = generate_plots(fp16_details, ai_data, mem_level, is_standalone, verbose) + ml_combo_fig = generate_plots( + int8_details, ai_data, mem_level, is_standalone, verbose, fp16_fig + ) - if isStandalone: + if is_standalone: dev_id = "ALL" if dev_id == -1 else str(dev_id) fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32.pdf".format(dev_id)) ml_combo_fig.write_image( path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id) ) + time.sleep(1) + # Re-save to remove loading MathJax pop up + fp32_fig.write_image(path_to_dir + "/empirRoof_gpu-{}_fp32.pdf".format(dev_id)) + ml_combo_fig.write_image( + path_to_dir + "/empirRoof_gpu-{}_fp8_fp16.pdf".format(dev_id) + ) + print("Empirical Roofline PDFs saved!") else: return html.Section( id="roofline", diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index ca8b5022a5..158a2cb28b 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -56,6 +56,7 @@ class AI_Data: mfma_flops_bf16: float mfma_flops_f32: float mfma_flops_f64: float + mfma_iops_i8: float lds_data: float L1cache_data: float L2cache_data: float @@ -88,11 +89,14 @@ def get_color(catagory): # ------------------------------------------------------------------------------------- # Plot BW at each cache level # ------------------------------------------------------------------------------------- -def plot_roof(roof_details, roof_data, verbose): +def plot_roof(roof_details, roof_data, mem_level, verbose): # TODO: This is where filtering by memory level will need to occur for standalone graphPoints = {"hbm": [], "l2": [], "l1": [], "lds": [], "valu": [], "mfma": []} - cacheHierarchy = ["HBM", "L2", "L1", "LDS"] + if mem_level == "ALL": + cacheHierarchy = ["HBM", "L2", "L1", "LDS"] + else: + cacheHierarchy = mem_level x1 = y1 = x2 = y2 = -1 x1_mfma = y1_mfma = x2_mfma = y2_mfma = -1 @@ -223,6 +227,7 @@ def plot_application(sortType, ret_df, verbose): mfma_flops_bf16 / calls, mfma_flops_f32 / calls, mfma_flops_f64 / calls, + mfma_iops_i8 / calls, lds_data / calls, L1cache_data / calls, L2cache_data / calls, @@ -466,10 +471,7 @@ def plot_application(sortType, ret_df, verbose): return intensityPoints -def empirical_roof(roof_info, verbose): - - if roof_info["sort"] != "kernels" and roof_info["sort"] != "dispatches": - sys.exit("Invalid sort. Must be either 'kernels' or 'dispatches'") +def empirical_roof(roof_info, mem_level, verbose): roofPath = roof_info["path"] + "/roofline.csv" # ----------------------------------------------------- @@ -509,7 +511,7 @@ def empirical_roof(roof_info, verbose): # ------------------ # Generate Roofline # ------------------ - results = plot_roof(roof_info, roof_data, verbose) + results = plot_roof(roof_info, roof_data, mem_level, verbose) # for key in results: # print(key, "->", results[key]) diff --git a/src/parser.py b/src/parser.py index 149c3f8f86..5f847d092d 100644 --- a/src/parser.py +++ b/src/parser.py @@ -211,6 +211,7 @@ def parse(my_parser): metavar="", type=str, default="kernels", + choices=["kernels", "dispatches"], help="\t\t\tOverlay top kernels or top dispatches: (DEFAULT: kernels)\n\t\t\t kernels\n\t\t\t dispatches", ) roofline_group.add_argument( @@ -219,19 +220,11 @@ def parse(my_parser): required=False, choices=["HBM", "L2", "vL1D", "LDS"], metavar="", + nargs="+", type=str, default="ALL", help="\t\t\tFilter by memory level: (DEFAULT: ALL)\n\t\t\t HBM\n\t\t\t L2\n\t\t\t vL1D\n\t\t\t LDS", ) - roofline_group.add_argument( - "--axes", - default=None, - type=float, - required=False, - nargs="+", - metavar="", - help="\t\t\tDesired axis values for graph. As follows:\n\t\t\t xmin xmax ymin ymax", - ) roofline_group.add_argument( "--device", metavar="", diff --git a/src/utils/plot_roofline.py b/src/utils/plot_roofline.py deleted file mode 100644 index f421dc972e..0000000000 --- a/src/utils/plot_roofline.py +++ /dev/null @@ -1,672 +0,0 @@ -################################################################################ -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -################################################################################ - -from linecache import cache -import os -import sys -from pathlib import Path - -import numpy -import matplotlib - -try: - - import matplotlib.pyplot as plt -except ImportError: - # other non-interactive options: - # cairo, pdf, pgf, ps, svg, template - matplotlib.use("agg", force=True) - import matplotlib.pyplot as plt - -from matplotlib.pyplot import get, text -from math import log, pi, sqrt -import pandas as pd -import pylab - -from dataclasses import dataclass -import csv - - -################################################ -# Global vars -################################################ - -IMGNAME = "empirRoof" - -L2_BANKS = 32 # default assuming mi200 - -XMIN = 0.01 -XMAX = 1000 - -FONT_SIZE = 16 -FONT_COLOR = "black" -FONT_WEIGHT = "bold" - -SUPPORTED_SOC = ["mi200"] - -################################################ -# Helper funcs -################################################ -@dataclass -class AI_Data: - KernelName: str - numCalls: float - - total_flops: float - valu_flops: float - mfma_flops_f16: float - mfma_flops_bf16: float - mfma_flops_f32: float - mfma_flops_f64: float - lds_data: float - L1cache_data: float - L2cache_data: float - hbm_data: float - - totalDuration: float - avgDuration: float - - -def get_font(): - return { - "size": FONT_SIZE, - "color": FONT_COLOR, - "weight": FONT_WEIGHT, - "family": "serif", - } - - -def get_color(catagory): - if catagory == "curr_ai_l1": - return "green" - elif catagory == "curr_ai_l2": - return "blue" - elif catagory == "curr_ai_hbm": - return "red" - else: - raise RuntimeError("Invalid catagory passed to get_color()") - - -# ------------------------------------------------------------------------------------- -# Plot BW at each cache level -# ------------------------------------------------------------------------------------- -def plot_roof(inputs, roof_data): - cacheHierarchy = [] - if inputs["mem"] == "ALL": - cacheHierarchy += ["HBM", "L2", "L1", "LDS"] - else: - cacheHierarchy.append(inputs["mem"]) - targ_dtype = ( - "FP32" - if float(roof_data["FP32Flops"][0]) > float(roof_data["FP64Flops"][0]) - else "FP64" - ) - print("Dtype: ", targ_dtype) - print(inputs["mem"]) - x1 = y1 = x2 = y2 = -1 - x1_mfma = y1_mfma = x2_mfma = y2_mfma = -1 - target_precision = targ_dtype[2:] - - peakOps = float(roof_data[targ_dtype + "Flops"][0]) - for i in range(0, len(cacheHierarchy)): - # Plot BW line - # print("Current cache level: {}".format(cacheHierarchy[i])) - curr_bw = cacheHierarchy[i] + "Bw" - peakBw = float(roof_data[curr_bw][0]) - - peakMFMA = float(roof_data["MFMAF{}Flops".format(target_precision)][0]) - - x1 = float(XMIN) - y1 = float(XMIN) * peakBw - - x2 = peakOps / peakBw - y2 = peakOps - - plt.plot([x1, x2], [y1, y2], color="magenta") - # print("Mem Points: [{}, {}], [{}, {}]".format(x1, x2, y1, y2)) - - # Plot MFMA lines (NOTE: Assuming MI200 soc) - x1_mfma = peakOps / peakBw - y1_mfma = peakOps - - x2_mfma = peakMFMA / peakBw - y2_mfma = peakMFMA - - plt.plot([x1_mfma, x2_mfma], [y1_mfma, y2_mfma], color="blue") - # print("Extend BW Points: [{}, {}], [{}, {}]".format(x1_mfma, x2_mfma, y1_mfma, y2_mfma)) - - # These are the points to use: - # print("x = [{}, {}]".format(x1,x2_mfma)) - # print("y = [{}, {}]".format(y1, y2_mfma)) - - # Plot BW label - x1log = log(x1) / log(10) - x2log = log(x2) / log(10) - y1log = log(y1) / log(10) - y2log = log(y2) / log(10) - x_text = 10 ** ((x1log + x2log) / 2) - y_text = 10 ** ((y1log + y2log) / 2) - - fig = plt.gcf() - size = fig.get_size_inches() * fig.dpi - fig_x, fig_y = size - - # dx = log(x2) - log(x1) - # dy = log(y2) - log(y1) - # x_min, x_max = plt.xlim() - # y_min, y_max = plt.ylim() - # Dx = dx * fig_x / (log(x_max) - log(x_min)) - # Dy = dy * fig_y / (log(y_max) - log(y_min)) - # #fdiv = 0.7 #TODO: improve accuracy of text angle (tilt) - # angle = (180.0 / pi) * numpy.arctan(Dy / Dx )#/fdiv) - - dx = abs(log(x2) - log(x1)) - dy = abs(log(y2) - log(y1)) - angle = (180.0 / pi) * numpy.arctan(dy / dx) - # If user isn't zooming in, print bw labels normally - if not inputs["axes"]: - text( - x_text, - y_text, - "{} vL1D GB/s".format(int(peakBw)) - if cacheHierarchy[i].upper() == "L1" - else "{} {} GB/s".format(int(peakBw), cacheHierarchy[i].upper()), - rotation=angle, - rotation_mode="anchor", - **get_font(), - ) - else: - # if bw line isn't being cut out then plot bw - print("if {} < {}".format(inputs["axes"][0], 10**x2log)) - if inputs["axes"][0] < 10**x2log: - text( - 10**x2log, - 10**y2log, - "{} {} GB/s".format(int(peakBw), cacheHierarchy[i].upper()), - rotation=angle, - rotation_mode="anchor", - **get_font(), - ) - - # ------------------------------------------------------------------------------------- - # Plot computing roof - # ------------------------------------------------------------------------------------- - # Plot FMA roof - x0 = XMAX - if x2 < x0: - x0 = x2 - - temp_label = "{} VALU GFLOP/sec".format(int(peakOps)) - plt.plot([x0, XMAX], [peakOps, peakOps], color="magenta") - # print("FMA Points: [{}, {}], [{},{}]".format(x0, XMAX, peakOps, peakOps)) - text( - XMAX if not inputs["axes"] else inputs["axes"][1], - peakOps - 4000, # should i keep this fixed at 4000? - temp_label, - horizontalalignment="right", - **get_font(), - ) - - # Plot MFMA roof - if x1_mfma != -1: # assert that mfma has been assigned - x0_mfma = XMAX - if x2_mfma < x0_mfma: - x0_mfma = x2_mfma - - peakMFMA = float(roof_data["MFMAF{}Flops".format(target_precision)][0]) - temp_label = "{} MFMA GFLOP/sec".format(int(peakMFMA)) - plt.plot([x0_mfma, XMAX], [peakMFMA, peakMFMA], color="blue") - # print("MFMA Points: [{}, {}], [{},{}]".format(x0_mfma, XMAX, peakMFMA, peakMFMA)) - text( - XMAX if not inputs["axes"] else inputs["axes"][1], - peakMFMA + 1000, - temp_label, - horizontalalignment="right", - **get_font(), - ) - - return targ_dtype - - -# ------------------------------------------------------------------------------------- -# Overlay application performance -# ------------------------------------------------------------------------------------- -# Calculate relevent metrics for ai calculation -def plot_application(inputs, verbose): - - df = pd.read_csv(inputs["path"] + "/pmc_perf.csv") - # Sort by top kernels or top dispatches? - df = df.sort_values(by=["KernelName"]) - df = df.reset_index(drop=True) - - total_flops = ( - valu_flops - ) = ( - mfma_flops_bf16 - ) = ( - mfma_flops_f16 - ) = ( - mfma_iops_i8 - ) = ( - mfma_flops_f32 - ) = ( - mfma_flops_f64 - ) = ( - lds_data - ) = L1cache_data = L2cache_data = hbm_data = calls = totalDuration = avgDuration = 0.0 - kernelName = "" - - myList = [] - for index, row in df.iterrows(): - # CASE: Top kernels - if inputs["sort"] == "kernels" and ( - (row["KernelName"] != kernelName and kernelName != "") - or index == df.shape[0] - 1 - ): - if df.shape[0] - 1 == index: - calls += 1 - myList.append( - AI_Data( - kernelName, - calls, - total_flops / calls, - valu_flops / calls, - mfma_flops_f16 / calls, - mfma_flops_bf16 / calls, - mfma_flops_f32 / calls, - mfma_flops_f64 / calls, - lds_data / calls, - L1cache_data / calls, - L2cache_data / calls, - hbm_data / calls, - totalDuration, - avgDuration / calls, - ) - ) - if verbose >= 2: - print( - "Just added {} to AI_Data at index {}. # of calls: {}".format( - kernelName, index, calls - ) - ) - total_flops = ( - valu_flops - ) = ( - mfma_flops_bf16 - ) = ( - mfma_flops_f16 - ) = ( - mfma_iops_i8 - ) = ( - mfma_flops_f32 - ) = ( - mfma_flops_f64 - ) = ( - lds_data - ) = ( - L1cache_data - ) = L2cache_data = hbm_data = calls = totalDuration = avgDuration = 0.0 - - kernelName = row["KernelName"] - try: - total_flops += ( - ( - 64 - * ( - row["SQ_INSTS_VALU_ADD_F16"] - + row["SQ_INSTS_VALU_MUL_F16"] - + (2 * row["SQ_INSTS_VALU_FMA_F16"]) - + row["SQ_INSTS_VALU_TRANS_F16"] - ) - ) - + ( - 64 - * ( - row["SQ_INSTS_VALU_ADD_F32"] - + row["SQ_INSTS_VALU_MUL_F32"] - + (2 * row["SQ_INSTS_VALU_FMA_F32"]) - + row["SQ_INSTS_VALU_TRANS_F32"] - ) - ) - + ( - 64 - * ( - row["SQ_INSTS_VALU_ADD_F64"] - + row["SQ_INSTS_VALU_MUL_F64"] - + (2 * row["SQ_INSTS_VALU_FMA_F64"]) - + row["SQ_INSTS_VALU_TRANS_F64"] - ) - ) - + (row["SQ_INSTS_VALU_MFMA_MOPS_F16"] * 512) - + (row["SQ_INSTS_VALU_MFMA_MOPS_BF16"] * 512) - + (row["SQ_INSTS_VALU_MFMA_MOPS_F32"] * 512) - + (row["SQ_INSTS_VALU_MFMA_MOPS_F64"] * 512) - ) - except KeyError: - if verbose >= 2: - print("Skipped total_flops at index {}".format(index)) - pass - try: - valu_flops += ( - 64 - * ( - row["SQ_INSTS_VALU_ADD_F16"] - + row["SQ_INSTS_VALU_MUL_F16"] - + (2 * row["SQ_INSTS_VALU_FMA_F16"]) - + row["SQ_INSTS_VALU_TRANS_F16"] - ) - + 64 - * ( - row["SQ_INSTS_VALU_ADD_F32"] - + row["SQ_INSTS_VALU_MUL_F32"] - + (2 * row["SQ_INSTS_VALU_FMA_F32"]) - + row["SQ_INSTS_VALU_TRANS_F32"] - ) - + 64 - * ( - row["SQ_INSTS_VALU_ADD_F64"] - + row["SQ_INSTS_VALU_MUL_F64"] - + (2 * row["SQ_INSTS_VALU_FMA_F64"]) - + row["SQ_INSTS_VALU_TRANS_F64"] - ) - ) - except KeyError: - if verbose >= 2: - print("Skipped valu_flops at index {}".format(index)) - pass - - try: - mfma_flops_f16 += row["SQ_INSTS_VALU_MFMA_MOPS_F16"] * 512 - mfma_flops_bf16 += row["SQ_INSTS_VALU_MFMA_MOPS_BF16"] * 512 - mfma_flops_f32 += row["SQ_INSTS_VALU_MFMA_MOPS_F32"] * 512 - mfma_flops_f64 += row["SQ_INSTS_VALU_MFMA_MOPS_F64"] * 512 - mfma_iops_i8 += row["SQ_INSTS_VALU_MFMA_MOPS_I8"] * 512 - except KeyError: - if verbose >= 2: - print("Skipped mfma ops at index {}".format(index)) - pass - - try: - lds_data += ( - (row["SQ_LDS_IDX_ACTIVE"] - row["SQ_LDS_BANK_CONFLICT"]) * 4 * L2_BANKS - ) # L2_BANKS = 32 (since assuming mi200) - except KeyError: - if verbose >= 2: - print("Skipped lds_data at index {}".format(index)) - pass - - try: - L1cache_data += row["TCP_TOTAL_CACHE_ACCESSES_sum"] * 64 - except KeyError: - if verbose >= 2: - print("Skipped L1cache_data at index {}".format(index)) - pass - - try: - L2cache_data += ( - row["TCP_TCC_WRITE_REQ_sum"] * 64 - + row["TCP_TCC_ATOMIC_WITH_RET_REQ_sum"] * 64 - + row["TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum"] * 64 - + row["TCP_TCC_READ_REQ_sum"] * 64 - ) - except KeyError: - if verbose >= 2: - print("Skipped L2cache_data at index {}".format(index)) - pass - try: - hbm_data += ( - (row["TCC_EA_RDREQ_32B_sum"] * 32) - + ((row["TCC_EA_RDREQ_sum"] - row["TCC_EA_RDREQ_32B_sum"]) * 64) - + (row["TCC_EA_WRREQ_64B_sum"] * 64) - + ((row["TCC_EA_WRREQ_sum"] - row["TCC_EA_WRREQ_64B_sum"]) * 32) - ) - except KeyError: - if verbose >= 2: - print("Skipped hbm_data at index {}".format(index)) - pass - - totalDuration += row["EndNs"] - row["BeginNs"] - - avgDuration += row["EndNs"] - row["BeginNs"] - - calls += 1 - if inputs["sort"] == "dispatches": - myList.append( - AI_Data( - kernelName, - calls, - total_flops, - valu_flops, - mfma_flops_f16, - mfma_flops_bf16, - mfma_flops_f32, - mfma_flops_f64, - mfma_iops_i8, - lds_data, - L1cache_data, - L2cache_data, - hbm_data, - totalDuration, - avgDuration, - ) - ) - total_flops = ( - valu_flops - ) = ( - mfma_flops_bf16 - ) = ( - mfma_flops_f16 - ) = ( - mfma_iops_i8 - ) = ( - mfma_flops_f32 - ) = ( - mfma_flops_f64 - ) = ( - lds_data - ) = ( - L1cache_data - ) = L2cache_data = hbm_data = calls = totalDuration = avgDuration = 0.0 - - myList.sort(key=lambda x: x.totalDuration, reverse=True) - - print("Top 10 intensities ('{}')...".format(inputs["sort"])) - intensities = {"curr_ai_l1": [], "curr_ai_l2": [], "curr_ai_hbm": []} - curr_perf = [] - i = 0 - # Create list of top 5 intensities - while i <= 9 and i != len(myList): - intensities["curr_ai_l1"].append( - myList[i].total_flops / myList[i].L1cache_data - ) if myList[i].L1cache_data else intensities["curr_ai_l1"].append(0) - # print("cur_ai_L1", myList[i].total_flops/myList[i].L1cache_data) if myList[i].L1cache_data else print("null") - # print() - intensities["curr_ai_l2"].append( - myList[i].total_flops / myList[i].L2cache_data - ) if myList[i].L2cache_data else intensities["curr_ai_l2"].append(0) - # print("cur_ai_L2", myList[i].total_flops/myList[i].L2cache_data) if myList[i].L2cache_data else print("null") - # print() - intensities["curr_ai_hbm"].append( - myList[i].total_flops / myList[i].hbm_data - ) if myList[i].hbm_data else intensities["curr_ai_hbm"].append(0) - # print("cur_ai_hbm", myList[i].total_flops/myList[i].hbm_data) if myList[i].hbm_data else print("null") - # print() - curr_perf.append(myList[i].total_flops / myList[i].avgDuration) if myList[ - i - ].avgDuration else curr_perf.append(0) - # print("cur_perf", myList[i].total_flops/myList[i].avgDuration) if myList[i].avgDuration else print("null") - - i += 1 - - print(intensities) - - plotted_spots = [] - labels = [] - for i in intensities: - values = intensities[i] - color = get_color(i) - x = [] - y = [] - for entryIndx in range(0, len(values)): - x.append(values[entryIndx]) - y.append(curr_perf[entryIndx]) - myScatter = plt.scatter(x, y, c=color, marker="o") - plotted_spots.append(myScatter) - label = i - labels.append(label) - - try: - pylab.legend( - plotted_spots, - labels, - prop={"size": (FONT_SIZE - 2)}, - bbox_to_anchor=(1.04, 1), - loc="upper left", - title="Top {}".format(inputs["sort"]), - title_fontsize=FONT_SIZE, - ) - except Exception as e: - sys.stderr.write(f"{e}\n") - pylab.legend( - plotted_spots, - labels, - prop={"size": (FONT_SIZE - 2)}, - ) - - -def empirical_roof(args): - soc = args.target - inputs = { - "path": str, - "cmd": str, - "sort": str, - "mem": str, - "axes": list, - "device": int, - # "workgroups": int, - # "wsize": int, - # "dataset": int, - # "experiments": int, - # "iter": int - } - - inputs["sort"] = args.sort.lower() - inputs["mem"] = args.mem_level.upper() - - if inputs["sort"] != "kernels" and inputs["sort"] != "dispatches": - sys.exit("Invalid sort. Must be either 'kernels' or 'dispatches'") - if ( - inputs["mem"] != "HBM" - and inputs["mem"] != "VL1D" - and inputs["mem"] != "L2" - and inputs["mem"] != "LDS" - and inputs["mem"] != "ALL" - ): - sys.exit( - "Invalid mem-level. Must be one of these option 'LDS', 'L2', 'vL1D', or 'HBM'" - ) - if inputs["mem"] == "VL1D": - inputs["mem"] = "L1" - - inputs["device"] = int(args.device) - # inputs["workgroups"] = int(args.workgroups) - # inputs["wsize"] = int(args.wsize) - # inputs["dataset"] = int(args.dataset) - # inputs["experiments"] = int(args.experiments) - # inputs["iter"] = int(args.iter) - inputs["path"] = args.path - inputs["cmd"] = args.remaining - inputs["axes"] = args.axes - - # device_list = [int(item) for item in args.device.split(',')] - - if soc not in SUPPORTED_SOC: - sys.exit("SoC not yet supported for Roofline Analysis") - - # Basic Info - print("Path: ", inputs["path"]) - print("Target: ", soc) - print("Memory Level: ", inputs["mem"]) - - roofPath = inputs["path"] + "/roofline.csv" - # ----------------------------------------------------- - # Initialize roofline data dictionary from roofline.csv - # ----------------------------------------------------- - roof_data = ( - {} - ) # TODO: consider changing this to an ordered dict for consistency over py versions - headers = [] - with open(roofPath, "r") as csvfile: - csvReader = csv.reader(csvfile, delimiter=",") - rowCount = 0 - for row in csvReader: - row.pop(0) # remove devID - if rowCount == 0: - headers = row - for i in headers: - roof_data[i] = [] - else: - for i, key in enumerate(headers): - roof_data[key].append(row[i]) - - rowCount += 1 - csvfile.close() - - # Initalize plot - f = plt.figure(figsize=(1600 / 100, 1200 / 100), dpi=100) - f.add_subplot(111) - - _title_font = get_font() - _title_font["size"] += 8 - - plt.title("Empirical Roofline", **_title_font) - plt.xlabel("Arithmetic Intensity (FLOP/Byte)", **get_font()) - plt.ylabel("Performance (GFLOP/sec)", **get_font()) - plt.grid(True, which="major", ls="--", lw=1) - plt.grid(True, which="minor", ls="--", lw=0.5) - plt.yscale("log") - plt.xscale("log") - # Adjust axes if instructed - if inputs["axes"]: - plt.xlim(inputs["axes"][0], inputs["axes"][1]) - plt.ylim(inputs["axes"][2], inputs["axes"][3]) - - # ------------------ - # Generate Roofline - # ------------------ - dtype = plot_roof(inputs, roof_data) # Also returns chosen dtype - plot_application(inputs, args.verbose) - - if inputs["device"] == -1: - dev_id = "ALL" - else: - dev_id = str(inputs["device"]) - - filename = IMGNAME + "_gpu-" + dev_id + "_{}".format(dtype) + ".pdf" - - full_path = os.path.abspath(inputs["path"]) - path_to_output = full_path + "/" + filename - - print('Saving plot: "{}"...'.format(filename)) - plt.savefig(path_to_output, bbox_inches="tight", format="pdf") - print('File saved to: "{}"'.format(path_to_output)) - plt.close() From 2e1de304f5f4abe0d10413d4769ac8d241fdac06 Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Thu, 26 Jan 2023 14:13:14 -0600 Subject: [PATCH 56/90] Add commenting Signed-off-by: coleramos425 --- src/omniperf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/omniperf b/src/omniperf index 24e4cc94d5..d004fd9d31 100755 --- a/src/omniperf +++ b/src/omniperf @@ -37,7 +37,7 @@ from utils import specs from utils.perfagg import perfmon_filter, pmc_filter from utils import remove_workload from utils import csv_converter # Import workload -from omniperf_analyze.omniperf_analyze import roofline_only +from omniperf_analyze.omniperf_analyze import roofline_only # Standalone roofline from omniperf_analyze.omniperf_analyze import analyze # CLI analysis from common import ( From 9dcd3104804069048b590c8cc4921368fd70e95a Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Thu, 26 Jan 2023 17:01:07 -0600 Subject: [PATCH 57/90] Add yum install which to CI action Signed-off-by: coleramos425 --- .github/workflows/rhel-8.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rhel-8.yml b/.github/workflows/rhel-8.yml index b7d0208ef4..5fe6d5aede 100644 --- a/.github/workflows/rhel-8.yml +++ b/.github/workflows/rhel-8.yml @@ -30,6 +30,7 @@ jobs: yum -y install git yum -y install python39 yum -y install cmake3 + yum -y install which - name: Checkout uses: actions/checkout@v3 with: From fa92c8cdf91fbaaabf05cdefbd6726b1f2e2e6ad Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Thu, 26 Jan 2023 17:33:52 -0600 Subject: [PATCH 58/90] Add yum install which to CI action Signed-off-by: coleramos425 --- .github/workflows/rhel-8.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rhel-8.yml b/.github/workflows/rhel-8.yml index b7d0208ef4..5fe6d5aede 100644 --- a/.github/workflows/rhel-8.yml +++ b/.github/workflows/rhel-8.yml @@ -30,6 +30,7 @@ jobs: yum -y install git yum -y install python39 yum -y install cmake3 + yum -y install which - name: Checkout uses: actions/checkout@v3 with: From ab5b34d8994ee19fe52b337fc83e0d4af78e35cc Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 27 Jan 2023 10:35:49 -0600 Subject: [PATCH 59/90] Force args for DB name to string #76 Signed-off-by: coleramos425 --- src/utils/csv_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index 2aca0e9486..50faa5787e 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -142,7 +142,7 @@ def parse(args, profileAndExport): print("Unable to parse SoC or workload name from sysinfo.csv") sys.exit(1) - db = "omniperf_" + args.team + "_" + name + "_" + soc + db = "omniperf_" + str(args.team) + "_" + str(name) + "_" + soc if Extractionlvl >= 5: print("KernelName shortening disabled") From 88987f4c29e84a7d321adbde7c8e4af16847e6b5 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 27 Jan 2023 11:12:53 -0600 Subject: [PATCH 60/90] Add quotes to app cmd in sysinfo #76 Signed-off-by: coleramos425 --- src/omniperf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/omniperf b/src/omniperf index d004fd9d31..946d7af624 100755 --- a/src/omniperf +++ b/src/omniperf @@ -150,7 +150,7 @@ def gen_sysinfo(workload_name, workload_dir, ip_blocks, app_cmd, skip_roof): timestamp = now.strftime("%c") + " (" + local_tzname + ")" # host info param = [workload_name] - param += [app_cmd] + param += ["\"" + app_cmd + "\""] param += [ mspec.hostname, mspec.cpu, From 89f3c2ddf794113e9a4dd187e5587f682927952e Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 27 Jan 2023 11:13:09 -0600 Subject: [PATCH 61/90] Add App Cmd to sysinfo section in Grafana #76 Signed-off-by: coleramos425 --- dashboards/Omniperf_v1.0.7_pub.json | 37 +++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/dashboards/Omniperf_v1.0.7_pub.json b/dashboards/Omniperf_v1.0.7_pub.json index 1a9c07c07b..c4b0899796 100644 --- a/dashboards/Omniperf_v1.0.7_pub.json +++ b/dashboards/Omniperf_v1.0.7_pub.json @@ -25,7 +25,7 @@ "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 42, - "iteration": 1673969861340, + "iteration": 1674838967359, "links": [], "liveNow": false, "panels": [ @@ -58,7 +58,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -98,7 +99,7 @@ "hide": false, "rawQuery": true, "refId": "A", - "target": "${Workload1}.sysinfo.aggregate([\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "target": "${Workload1}.sysinfo.aggregate([\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"command\": 1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"App Command\",\n \"Value\": \"&command\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", "type": "table" }, { @@ -109,7 +110,7 @@ "hide": false, "rawQuery": true, "refId": "B", - "target": "${Workload2}.sysinfo.aggregate([\n {\"$match\": {\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(System Info)\"}}\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", + "target": "${Workload2}.sysinfo.aggregate([\n {\"$match\": {\n \"$expr\":{\"$regexMatch\": {\"input\":\"${select}\",\"regex\":\"(System Info)\"}}\n }},\n\n {\"$project\": {\n \"_id\": 0,\n \"date\":1,\n \"command\": 1,\n \"host_name\": 1,\n \"host_cpu\": 1,\n \"host_distro\": 1,\n \"host_kernel\": 1,\n \"host_rocmver\": 1,\n \"gpu_soc\": 1,\n \"name\": 1,\n \"numSE\": 1,\n \"numSQC\": 1,\n \"numCU\": 1,\n \"numSIMD\": 1,\n \"waveSize\": 1,\n \"maxWavesPerCU\": 1,\n \"maxWorkgroupSize\":1,\n \"L1\":1,\n \"L2\":1,\n \"L2Banks\": 1,\n \"sclk\":1,\n \"mclk\":1,\n \"cur_sclk\": 1,\n \"cur_mclk\":1,\n \"hbmBW\":1\n }},\n {\"$set\": {\n \"array\": [\n {\n \"Metric\":\"Date\",\n \"Value\": \"&date\"\n },\n {\n \"Metric\":\"App Command\",\n \"Value\": \"&command\"\n },\n {\n \"Metric\":\"Host Name\",\n \"Value\": \"&host_name\"\n },\n {\n \"Metric\":\"Host CPU\",\n \"Value\": \"&host_cpu\"\n },\n {\n \"Metric\":\"Host Distro\",\n \"Value\": \"&host_distro\"\n },\n {\n \"Metric\":\"Host Kernel\",\n \"Value\": \"&host_kernel\"\n },\n {\n \"Metric\":\"ROCm Version\",\n \"Value\": \"&host_rocmver\"\n },\n {\n \"Metric\":\"GFX SoC\",\n \"Value\": \"&name\"\n },\n {\n \"Metric\":\"GFX ID\",\n \"Value\": \"&gpu_soc\"\n },\n {\n \"Metric\":\"Total SEs\",\n \"Value\":\"&numSE\"\n },\n {\n \"Metric\":\"Total SQCs\",\n \"Value\":\"&numSQC\"\n },\n {\n\n \"Metric\":\"Total CUs\",\n \"Value\":\"&numCU\"\n },\n {\n \"Metric\":\"SIMDs/CU\",\n \"Value\": \"&numSIMD\"\n },\n {\n \"Metric\":\"Max Wavefronts Occupancy Per CU\",\n \"Value\":\"&maxWavesPerCU\"\n },\n {\n \"Metric\":\"Max Workgroup Size\",\n \"Value\":\"&maxWorkgroupSize\"\n },\n {\n \"Metric\":\"L1Cache per CU (KB)\",\n \"Value\":\"&L1\"\n },\n {\n \"Metric\":\"L2Cache (KB)\",\n \"Value\":\"&L2\"\n },\n {\n \"Metric\":\"L2Cache Channels\",\n \"Value\":\"&L2Banks\"\n },\n {\n \"Metric\":\"Sys Clock (Max) - MHz\",\n \"Value\":\"&sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Max) - MHz\",\n \"Value\":\"&mclk\"\n },\n {\n \"Metric\":\"Sys Clock (Cur) - MHz\",\n \"Value\":\"&cur_sclk\"\n \n },\n {\n \"Metric\":\"Memory Clock (Cur) - MHz\",\n \"Value\":\"&cur_mclk\"\n },\n {\n \"Metric\":\"HBM Bandwidth - GB/s\",\n \"Value\":\"&hbmBW\"\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", "type": "table" } ], @@ -190,8 +191,7 @@ "mode": "absolute", "steps": [ { - "color": "text", - "value": null + "color": "text" } ] }, @@ -214,8 +214,7 @@ "mode": "absolute", "steps": [ { - "color": "transparent", - "value": null + "color": "transparent" }, { "color": "orange", @@ -414,8 +413,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -500,8 +498,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -12735,9 +12732,9 @@ }, { "current": { - "selected": false, - "text": "omniperf_gfxWL_test_gemm_BF16_profile10k_mi200", - "value": "omniperf_gfxWL_test_gemm_BF16_profile10k_mi200" + "selected": true, + "text": "omniperf_asw_mix_mi200", + "value": "omniperf_asw_mix_mi200" }, "definition": "workload_names.names.aggregate([\n {\"$group\": {\n \"_id\": \"&name\"\n }}\n]);", "hide": 0, @@ -12756,8 +12753,8 @@ { "current": { "selected": false, - "text": "148579", - "value": "148579" + "text": "433323", + "value": "433323" }, "definition": "$Workload1.pmc_perf.aggregate([\n{\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n\n {\"$group\": {\n \"_id\": null,\n \"myAvg\": {\n \"$avg\": { \"$multiply\": [{ \"$divide\": [{ \"$subtract\": [\"&EndNs\", \"&BeginNs\"] }, 1000] }, $sclk] }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": { \"$round\": [\"&myAvg\", 0] }\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"&array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"&array\"\n }}\n]);", "hide": 2, @@ -12776,8 +12773,8 @@ { "current": { "selected": false, - "text": "63", - "value": "63" + "text": "103", + "value": "103" }, "definition": "$Workload1.pmc_perf.aggregate([\n {\"$match\": {\n \"Index\": { \"$in\": [${DispatchIDFilter:raw}] },\n \"gpu-id\": { \"$in\": [${gpuFilter:raw}] },\n \"KernelName\": { \"$in\": ${KernelNameFilter:json}}\n }},\n {\"$group\": {\n \"_id\": null,\n \"theAvg\": {\n \"$avg\": {\n \"$cond\":[\n {\"$ne\": [\"&GRBM_GUI_ACTIVE\", 0]},\n {\"$divide\": [{ \"$multiply\": [4, \"&SQ_BUSY_CU_CYCLES\"] }, \"&GRBM_GUI_ACTIVE\"]},\n \"\"\n ]\n }\n }\n }},\n {\"$set\": {\n \"array\": [\n {\n \"_id\": {\"$toInt\": { \"$min\": [{ \"$add\": [{ \"$multiply\": [{ \"$divide\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] },8] }, { \"$min\": [{ \"$mod\": [{ \"$round\": [\"$theAvg\", 0] }, $maxWavesPerCU] }, 8] }] }, $numCU] }}\n }\n ]\n }},\n {\"$unwind\": {\n \"path\": \"$array\"\n }},\n {\"$replaceRoot\": {\n \"newRoot\": \"$array\"\n }}\n]);", "hide": 2, @@ -13323,6 +13320,6 @@ "timezone": "", "title": "Omniperf_v1.0.7_pub", "uid": "MIPerf_v1_0_06302022112", - "version": 1, + "version": 2, "weekStart": "" } \ No newline at end of file From 31475c631fd532aa51d14d0ccc623f7e1a4b8754 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 27 Jan 2023 11:55:57 -0600 Subject: [PATCH 62/90] Add example of SSH tunneling to docs #52 Signed-off-by: coleramos425 --- src/docs/analysis.md | 4 +++- src/docs/faq.md | 23 +++++++++++++++++++++++ src/docs/images/tunnel_demo1.png | Bin 0 -> 23263 bytes src/docs/images/tunnel_demo2.png | Bin 0 -> 11986 bytes src/docs/images/tunnel_demo3.png | Bin 0 -> 29322 bytes 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/docs/images/tunnel_demo1.png create mode 100644 src/docs/images/tunnel_demo2.png create mode 100644 src/docs/images/tunnel_demo3.png diff --git a/src/docs/analysis.md b/src/docs/analysis.md index f355ba7c67..3e95e5f1a5 100644 --- a/src/docs/analysis.md +++ b/src/docs/analysis.md @@ -317,10 +317,12 @@ allowing users to view results from within a web browser. Note that the standalone GUI analyzer publishes a web interface on port 8050 by default. On production HPC systems where profiling jobs run -under the auspices of a resource manager, additional ssh tunneling +under the auspices of a resource manager, additional SSH tunneling between the desired web browser host (e.g. login node or remote workstation) and compute host may be required. Alternatively, users may find it more convenient to download profiled workloads to perform analysis on their local system. + +See [FAQ](https://amdresearch.github.io/omniperf/faq.html) for more details on SSH tunneling. ``` #### Usage diff --git a/src/docs/faq.md b/src/docs/faq.md index 3ec5fa97c0..6a996cc277 100644 --- a/src/docs/faq.md +++ b/src/docs/faq.md @@ -30,3 +30,26 @@ Workaround: $ export LC_ALL=C.UTF-8 $ export LANG=C.UTF-8 ``` + +**3. How can I SSH Tunnel in MobaXterm?** + +1. Open MobaXterm +2. In the top ribbon, select `Tunneling` +![Tunnel Button](images/tunnel_demo1.png) +This pop up will appear +![Pop up](images/tunnel_demo2.png) +3. Press `New SSH tunnel` +![Pop up](images/tunnel_demo3.png) +4. Configure tunnel accordingly + + Local clients + - Forwarded Port: [PORT] + + Remote Server + - Remote Server: localhost + - Remote Port: [PORT] + + SSH Server + - SSH server: Name of the server one is connecting to + - SSH login: Username to login to the server + - SSH port: 22 \ No newline at end of file diff --git a/src/docs/images/tunnel_demo1.png b/src/docs/images/tunnel_demo1.png new file mode 100644 index 0000000000000000000000000000000000000000..bda64883c4441085f9f36138e348f5b9a30ee715 GIT binary patch literal 23263 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 CskHY1 literal 0 HcmV?d00001 diff --git a/src/docs/images/tunnel_demo2.png b/src/docs/images/tunnel_demo2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2d2585214b84a21a64853c6ec1a3c30efc490f GIT binary patch literal 11986 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 literal 0 HcmV?d00001 From ad05c01966e206907b7fabe64e660c4dfd11f518 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 31 Jan 2023 15:37:54 -0600 Subject: [PATCH 63/90] Remove reference to deprecated --axis option Signed-off-by: coleramos425 --- src/omniperf | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/omniperf b/src/omniperf index 946d7af624..b0a6a3af9d 100755 --- a/src/omniperf +++ b/src/omniperf @@ -217,19 +217,6 @@ def mongo_import(args, profileAndImport): def roof_setup(args, my_parser): if args.path == os.getcwd() + "/workloads": args.path += "/" + args.name + "/" + str(get_soc()) - # Verify valid axes parameters - if args.axes: - if len(args.axes) != 4: - throw_parse_error( - my_parser, - "Invalid argument for --axes.\nMust contain four values formatted as: --axes xmin xmax ymin ymax", - ) - - if args.axes[0] > args.axes[1] or args.axes[2] > args.axes[3]: - throw_parse_error( - my_parser, - "Invalid argument for --axes.\nBreaks required conditions: (xmax > xmin && ymax > ymin)", - ) # We need to make a directory for a new roofline if not os.path.isdir(args.path): From 57a289ad1b6dca7196eddcaddc7d4ea262f4ecec Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Thu, 2 Feb 2023 15:02:56 -0600 Subject: [PATCH 64/90] Add multi-normalization to wavefront launch #81 Signed-off-by: coleramos425 --- .../configs/gfx906/0700_wavefront-launch.yaml | 32 +++++++++---------- .../configs/gfx908/0700_wavefront-launch.yaml | 32 +++++++++---------- .../configs/gfx90a/0700_wavefront-launch.yaml | 32 +++++++++---------- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml index 15bb646ce9..89e4ce7c14 100644 --- a/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml +++ b/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml @@ -104,28 +104,28 @@ Panel Config: unit: Instr/wavefront tips: Wave Cycles: - avg: AVG(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - min: MIN(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - max: MAX(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAVE_CYCLES) / $denom)) + min: MIN(((4 * SQ_WAVE_CYCLES) / $denom)) + max: MAX(((4 * SQ_WAVE_CYCLES) / $denom)) + unit: Cycles/$normUnit tips: Dependency Wait Cycles: - avg: AVG(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAIT_ANY) / $denom)) + min: MIN(((4 * SQ_WAIT_ANY) / $denom)) + max: MAX(((4 * SQ_WAIT_ANY) / $denom)) + unit: Cycles/$normUnit tips: Issue Wait Cycles: - avg: AVG(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAIT_INST_ANY) / $denom)) + min: MIN(((4 * SQ_WAIT_INST_ANY) / $denom)) + max: MAX(((4 * SQ_WAIT_INST_ANY) / $denom)) + unit: Cycles/$normUnit tips: Active Cycles: - avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + min: MIN(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + max: MAX(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + unit: Cycles/$normUnit tips: Wavefront Occupancy: avg: AVG((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE)) diff --git a/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml index 15bb646ce9..89e4ce7c14 100644 --- a/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml +++ b/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml @@ -104,28 +104,28 @@ Panel Config: unit: Instr/wavefront tips: Wave Cycles: - avg: AVG(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - min: MIN(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - max: MAX(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAVE_CYCLES) / $denom)) + min: MIN(((4 * SQ_WAVE_CYCLES) / $denom)) + max: MAX(((4 * SQ_WAVE_CYCLES) / $denom)) + unit: Cycles/$normUnit tips: Dependency Wait Cycles: - avg: AVG(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAIT_ANY) / $denom)) + min: MIN(((4 * SQ_WAIT_ANY) / $denom)) + max: MAX(((4 * SQ_WAIT_ANY) / $denom)) + unit: Cycles/$normUnit tips: Issue Wait Cycles: - avg: AVG(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAIT_INST_ANY) / $denom)) + min: MIN(((4 * SQ_WAIT_INST_ANY) / $denom)) + max: MAX(((4 * SQ_WAIT_INST_ANY) / $denom)) + unit: Cycles/$normUnit tips: Active Cycles: - avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + min: MIN(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + max: MAX(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + unit: Cycles/$normUnit tips: Wavefront Occupancy: avg: AVG((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE)) diff --git a/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml index 2f20f8e3cc..b5a86adeed 100644 --- a/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml +++ b/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml @@ -104,28 +104,28 @@ Panel Config: unit: Instr/wavefront tips: Wave Cycles: - avg: AVG(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - min: MIN(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - max: MAX(((4 * SQ_WAVE_CYCLES) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAVE_CYCLES) / $denom)) + min: MIN(((4 * SQ_WAVE_CYCLES) / $denom)) + max: MAX(((4 * SQ_WAVE_CYCLES) / $denom)) + unit: Cycles/$normUnit tips: Dependency Wait Cycles: - avg: AVG(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_WAIT_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAIT_ANY) / $denom)) + min: MIN(((4 * SQ_WAIT_ANY) / $denom)) + max: MAX(((4 * SQ_WAIT_ANY) / $denom)) + unit: Cycles/$normUnit tips: Issue Wait Cycles: - avg: AVG(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_WAIT_INST_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_WAIT_INST_ANY) / $denom)) + min: MIN(((4 * SQ_WAIT_INST_ANY) / $denom)) + max: MAX(((4 * SQ_WAIT_INST_ANY) / $denom)) + unit: Cycles/$normUnit tips: Active Cycles: - avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - min: MIN(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - max: MAX(((4 * SQ_ACTIVE_INST_ANY) / SQ_WAVES)) - unit: Cycles/wave + avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + min: MIN(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + max: MAX(((4 * SQ_ACTIVE_INST_ANY) / $denom)) + unit: Cycles/$normUnit tips: Wavefront Occupancy: avg: AVG((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE)) From d9dad05cdb0cec08415c132e37fac482a3fd851e Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 7 Feb 2023 14:30:03 -0600 Subject: [PATCH 65/90] Describe --list-metrics option in help menu #83 Signed-off-by: coleramos425 --- src/parser.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/parser.py b/src/parser.py index 5f847d092d..4a77e390b1 100644 --- a/src/parser.py +++ b/src/parser.py @@ -386,7 +386,9 @@ def parse(my_parser): help="\t\tSpecify the output file.", ) analyze_group.add_argument( - "--list-kernels", action="store_true", help="\t\tList kernels." + "--list-kernels", + action="store_true", + help="\t\tList kernels. Top 10 kernels sorted by duration (descending order).", ) analyze_group.add_argument( "--list-metrics", From 48df0d6db4aceb4850d4c5e352612fb05fa64ad0 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 7 Feb 2023 14:45:22 -0600 Subject: [PATCH 66/90] Upgrade python formatting module Signed-off-by: coleramos425 --- src/docs/conf.py | 1 + src/omniperf_analyze/convertor/sql/convertor.py | 1 - src/omniperf_analyze/convertor/sql/convertor2.py | 1 - src/omniperf_analyze/utils/file_io.py | 1 - src/omniperf_analyze/utils/gui.py | 4 ++-- src/omniperf_analyze/utils/gui_components/header.py | 1 + src/omniperf_analyze/utils/parser.py | 3 --- src/omniperf_analyze/utils/roofline_calc.py | 3 +-- src/omniperf_analyze/utils/schema.py | 1 - src/omniperf_analyze/utils/tty.py | 2 -- src/parser.py | 1 - src/utils/csv_converter.py | 2 -- src/utils/gfx_perfmon_builder.py | 8 -------- src/utils/perfagg.py | 5 ----- src/utils/remove_workload.py | 1 + src/utils/specs.py | 3 --- 16 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/docs/conf.py b/src/docs/conf.py index 2b5d2e62d0..48d4c5596f 100644 --- a/src/docs/conf.py +++ b/src/docs/conf.py @@ -141,6 +141,7 @@ for pref in preferences: from recommonmark.transform import AutoStructify + # app setup hook def setup(app): app.add_config_value( diff --git a/src/omniperf_analyze/convertor/sql/convertor.py b/src/omniperf_analyze/convertor/sql/convertor.py index fefab1b615..dba816948a 100644 --- a/src/omniperf_analyze/convertor/sql/convertor.py +++ b/src/omniperf_analyze/convertor/sql/convertor.py @@ -26,7 +26,6 @@ import re import sys if __name__ == "__main__": - with open(sys.argv[1], "r") as file: s = file.read() diff --git a/src/omniperf_analyze/convertor/sql/convertor2.py b/src/omniperf_analyze/convertor/sql/convertor2.py index 5247dcde16..df4e2e5135 100644 --- a/src/omniperf_analyze/convertor/sql/convertor2.py +++ b/src/omniperf_analyze/convertor/sql/convertor2.py @@ -26,7 +26,6 @@ import re import sys if __name__ == "__main__": - with open(sys.argv[1], "r") as file: s = file.read() diff --git a/src/omniperf_analyze/utils/file_io.py b/src/omniperf_analyze/utils/file_io.py index 9b57bbf7d4..04539feb44 100644 --- a/src/omniperf_analyze/utils/file_io.py +++ b/src/omniperf_analyze/utils/file_io.py @@ -217,7 +217,6 @@ def collect_wave_occu_per_cu(in_dir, out_dir, numSE): for i in range(numSE): p = Path(in_dir, "wave_occu_se" + str(i) + ".csv") if p.exists(): - tmp_df = pd.read_csv(p) SE_idx = "SE" + str(tmp_df.loc[0, "SE"]) tmp_df.rename( diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index da7c16b07c..98bc38ebcc 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -59,6 +59,7 @@ barchart_elements = { "l2_cache_per_chan": [1801, 1802], } + ################## # HELPER FUNCTIONS ################## @@ -83,7 +84,6 @@ def multi_bar_chart(table_id, display_df): def discrete_background_color_bins(df, n_bins=5, columns="all"): - bounds = [i * (1.0 / n_bins) for i in range(n_bins + 1)] if columns == "all": if "id" in df: @@ -191,7 +191,7 @@ def build_bar_chart(display_df, table_config, norm_filt): elif table_config["id"] in barchart_elements["l2_cache_per_chan"]: nested_bar = {} channels = [] - for (colName, colData) in display_df.items(): + for colName, colData in display_df.items(): if colName == "Channel": channels = list(colData.values) else: diff --git a/src/omniperf_analyze/utils/gui_components/header.py b/src/omniperf_analyze/utils/gui_components/header.py index accae9fa3c..ddf665d799 100644 --- a/src/omniperf_analyze/utils/gui_components/header.py +++ b/src/omniperf_analyze/utils/gui_components/header.py @@ -27,6 +27,7 @@ from omniperf_analyze.utils import schema avail_normalizations = ["per_wave", "per_cycle", "per_second", "per_kernel"] + # List all the unique column values for desired column in df, 'target_col' def list_unique(orig_list, is_numeric): list_set = set(orig_list) diff --git a/src/omniperf_analyze/utils/parser.py b/src/omniperf_analyze/utils/parser.py index ec925cef1a..f4f91f4f5a 100644 --- a/src/omniperf_analyze/utils/parser.py +++ b/src/omniperf_analyze/utils/parser.py @@ -346,7 +346,6 @@ def build_dfs(archConfigs, filter_metrics): i = 0 for key, entries in data_cofig["metric"].items(): - data_source_idx = ( str(data_cofig["id"] // 100) + "." @@ -365,7 +364,6 @@ def build_dfs(archConfigs, filter_metrics): # the whole IP block in filter (str(panel_id // 100) in filter_metrics) ): - values.append(metric_idx) values.append(key) for k, v in entries.items(): @@ -401,7 +399,6 @@ def build_dfs(archConfigs, filter_metrics): or (data_source_idx == "0") # no filter or (data_source_idx in filter_metrics) ): - if ( "columnwise" in data_cofig and data_cofig["columnwise"] == True diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index 158a2cb28b..7a324c3efd 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -42,6 +42,7 @@ FONT_WEIGHT = "bold" SUPPORTED_SOC = ["mi200"] + ################################################ # Helper funcs ################################################ @@ -181,7 +182,6 @@ def plot_roof(roof_details, roof_data, mem_level, verbose): # ------------------------------------------------------------------------------------- # Calculate relevent metrics for ai calculation def plot_application(sortType, ret_df, verbose): - df = ret_df["pmc_perf"] # Sort by top kernels or top dispatches? df = df.sort_values(by=["KernelName"]) @@ -472,7 +472,6 @@ def plot_application(sortType, ret_df, verbose): def empirical_roof(roof_info, mem_level, verbose): - roofPath = roof_info["path"] + "/roofline.csv" # ----------------------------------------------------- # Initialize roofline data dictionary from roofline.csv diff --git a/src/omniperf_analyze/utils/schema.py b/src/omniperf_analyze/utils/schema.py index 87394da339..3d77eee0ac 100644 --- a/src/omniperf_analyze/utils/schema.py +++ b/src/omniperf_analyze/utils/schema.py @@ -33,7 +33,6 @@ from collections import OrderedDict @dataclass class ArchConfig: - # [id: panel_config] pairs panel_configs: OrderedDict = field(default=dict) diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index 9f6ed2e400..1afe8e08e8 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -74,11 +74,9 @@ def show_all(runs, archConfigs, output, decimal, time_unit, selected_cols, verbo ) or (type == "raw_csv_table") ): - if header in hidden_columns: pass elif header not in comparable_columns: - if ( type == "raw_csv_table" and table_config["source"] == "pmc_kernel_top.csv" diff --git a/src/parser.py b/src/parser.py index 4a77e390b1..a48a84906e 100644 --- a/src/parser.py +++ b/src/parser.py @@ -33,7 +33,6 @@ from common import getVersion, getVersionDisplay def parse(my_parser): - # versioning info vData = getVersion() versionString = getVersionDisplay(vData["version"], vData["sha"], vData["mode"]) diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index 50faa5787e..b1e536c12f 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -37,7 +37,6 @@ MAX_SERVER_SEL_DELAY = 5000 # 5 sec connection timeout def kernel_name_shortener(df, cache, level): - if level >= 5: return df @@ -50,7 +49,6 @@ def kernel_name_shortener(df, cache, level): if columnName == "KernelName" or columnName == "Name": # loop through all indices for index in df.index: - original_name = df.loc[index, columnName] if original_name in cache: continue diff --git a/src/utils/gfx_perfmon_builder.py b/src/utils/gfx_perfmon_builder.py index 68bcebe7a3..566449c3d5 100755 --- a/src/utils/gfx_perfmon_builder.py +++ b/src/utils/gfx_perfmon_builder.py @@ -163,7 +163,6 @@ class mainWindow(QMainWindow): self.exportPMCCounters(fileName) def exportPMCCounters(self, fileName): - f = open(fileName, "w") total_IP_blocks = len(list(self.perfmon_config.keys())) @@ -188,7 +187,6 @@ class mainWindow(QMainWindow): return def pmc_metric_selected(self, metric_name, col): - # check if the metric already exists metric_selected = False @@ -314,7 +312,6 @@ class mainWindow(QMainWindow): self.table.setItem(row, col, QTableWidgetItem(metric_name)) def pmc_select(self, item): - metric_name = item.data() if ( not metric_name in self.nodes_dict @@ -334,13 +331,11 @@ class mainWindow(QMainWindow): # Function to save populate treeview with a dictionary def importData(self, xmlparsed, root=None): - self.model.setRowCount(0) if root is None: root = self.model.invisibleRootItem() for x in xmlparsed.getiterator(): - # Add SoC node to Root if x.tag in self.soc_arch_list: parent = root @@ -349,10 +344,8 @@ class mainWindow(QMainWindow): # check all metrics in an SoC family if x.tag == "metric" and x.getparent().tag in self.soc_arch_list: - # New IP block (e.g., SQ), detected, create a new hierarchy for the block if not x.attrib["block"] in self.block_list: - self.block_list.append(x.attrib["block"]) parent = self.nodes_dict[x.getparent().tag] # the SoC node parent.appendRow( @@ -386,7 +379,6 @@ class mainWindow(QMainWindow): if __name__ == "__main__": - app = QApplication(sys.argv) app.setStyle("Fusion") diff --git a/src/utils/perfagg.py b/src/utils/perfagg.py index 07cd4a59bf..f40f242699 100755 --- a/src/utils/perfagg.py +++ b/src/utils/perfagg.py @@ -85,7 +85,6 @@ perfmon_config = { def perfmon_coalesce(pmc_files_list, workload_dir, soc): - workload_perfmon_dir = workload_dir + "/perfmon" # match pattern for pmc counters @@ -110,7 +109,6 @@ def perfmon_coalesce(pmc_files_list, workload_dir, soc): # Extract all PMC counters and store in separate buckets for fname in pmc_files_list: - lines = open(fname, "r").read().splitlines() for line in lines: @@ -183,7 +181,6 @@ def perfmon_coalesce(pmc_files_list, workload_dir, soc): def perfmon_emit(pmc_list, workload_dir, soc): - workload_perfmon_dir = workload_dir + "/perfmon" # Calculate the minimum number of iteration to save the pmc counters @@ -246,7 +243,6 @@ def perfmon_emit(pmc_list, workload_dir, soc): def perfmon_filter(workload_dir, perfmon_dir, args): - workload_perfmon_dir = workload_dir + "/perfmon" soc = args.target @@ -288,7 +284,6 @@ def perfmon_filter(workload_dir, perfmon_dir, args): def pmc_filter(workload_dir, perfmon_dir, soc): - workload_perfmon_dir = workload_dir + "/perfmon" if not os.path.isdir(workload_perfmon_dir): diff --git a/src/utils/remove_workload.py b/src/utils/remove_workload.py index 3d21186a0a..11cb5df256 100755 --- a/src/utils/remove_workload.py +++ b/src/utils/remove_workload.py @@ -26,6 +26,7 @@ import argparse import getpass from pymongo import MongoClient + # Verify target directory and setup connection def remove_workload(args): # parser = argparse.ArgumentParser(description='Remove a workload from an Omniperf Instance') diff --git a/src/utils/specs.py b/src/utils/specs.py index 5e567ad895..4c95194406 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -84,7 +84,6 @@ class MachineSpecs: def gpuinfo(): - rocminfo = run(["rocminfo"]).split("\n") for idx1, linetext in enumerate(rocminfo): @@ -97,7 +96,6 @@ def gpuinfo(): L1, L2 = "", "" for idx2, linetext in enumerate(rocminfo[idx1 + 1 :]): - key = search(r"^\s*L1:\s+ ([a-zA-Z0-9]+)\s*", linetext) if key != None: L1 = key @@ -159,7 +157,6 @@ def search(pattern, string): def get_machine_specs(devicenum): - cpuinfo = path("/proc/cpuinfo").read_text() meminfo = path("/proc/meminfo").read_text() version = path("/proc/version").read_text() From 8334aaa03c940c8e68bdd285afee2d9b1de73db9 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 10 Feb 2023 16:38:55 -0600 Subject: [PATCH 67/90] Change filtering option names in analyze mode for consistency Signed-off-by: coleramos425 --- src/parser.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/parser.py b/src/parser.py index a48a84906e..d384be8797 100644 --- a/src/parser.py +++ b/src/parser.py @@ -397,35 +397,36 @@ def parse(my_parser): ) analyze_group.add_argument( "-b", - "--filter-metrics", + "--metric", + dest="filter_metrics", metavar="", nargs="+", - help="\t\tSpecify IP block/metric Ids from --list-metrics.", + help="\t\tSpecify IP block/metric id(s) from --list-metrics for filtering.", ) analyze_group.add_argument( "-k", - "--filter-kernels", + "--kernel", metavar="", type=int, dest="gpu_kernel", nargs="+", action="append", - help="\t\tSpecify kernel id from --list-kernels.", + help="\t\tSpecify kernel id(s) from --list-kernels for filtering.", ) analyze_group.add_argument( - "--filter-dispatch-ids", + "--dispatch", dest="gpu_dispatch_id", metavar="", nargs="+", action="append", - help="\t\tSpecify dispatch IDs.", + help="\t\tSpecify dispatch id(s) for filtering.", ) analyze_group.add_argument( - "--filter-gpu-ids", + "--gpu-id", dest="gpu_id", metavar="", nargs="+", - help="\t\tSpecify GPU IDs.", + help="\t\tSpecify GPU id(s) for filtering.", ) analyze_group.add_argument( "-n", From 2c03fd09de2594ee09699840e7bac6e21798d65d Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Fri, 10 Feb 2023 16:39:25 -0600 Subject: [PATCH 68/90] Update docs for new filter option names in analyze mode Signed-off-by: coleramos425 --- src/docs/analysis.md | 2 +- src/docs/getting_started.md | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/docs/analysis.md b/src/docs/analysis.md index 3e95e5f1a5..ba471ff273 100644 --- a/src/docs/analysis.md +++ b/src/docs/analysis.md @@ -171,7 +171,7 @@ $ omniperf analyze -p workloads/vcopy/mi200/ --list-metrics gfx90a ├─────────┼─────────────────────────────┤ ... ``` - 2. Choose your own customized subset of metrics with `-b` (a.k.a. `--filter-metrics`), or build your own config following [config_template](https://github.com/AMDResearch/omniperf/blob/main/src/omniperf_analyze/configs/panel_config_template.yaml). Below we'll inspect block 2 (a.k.a. System Speed-of-Light). + 2. Choose your own customized subset of metrics with `-b` (a.k.a. `--metric`), or build your own config following [config_template](https://github.com/AMDResearch/omniperf/blob/main/src/omniperf_analyze/configs/panel_config_template.yaml). Below we'll inspect block 2 (a.k.a. System Speed-of-Light). ```shell $ omniperf analyze -p workloads/vcopy/mi200/ -b 2 -------- diff --git a/src/docs/getting_started.md b/src/docs/getting_started.md index 6e1bf1de08..c75bda9abe 100644 --- a/src/docs/getting_started.md +++ b/src/docs/getting_started.md @@ -82,7 +82,8 @@ Modes change the fundamental behavior of the Omniperf command line tool. Dependi Operation | Mode | Required Arguments :--|:--|:-- Profile a workload | profile | `--name`, `-- ` -Standalone roofline analysis | profile | `--name`, `--only-roof`, `-- ` +Standalone roofline analysis | profile | `--name`, `--roof-only`, `-- ` Import a workload to database | database | `--import`, `--host`, `--username`, `--workload`, `--team` Remove a workload from database | database | `--remove`, `--host`, `--username`, `--workload`, `--team` -Interact with profiling results from CLI | analyze | `--path`, `--gui` \ No newline at end of file +Launch standalone GUI from CLI | analyze | `--path`, `--gui` +Interact with profiling results from CLI | analyze | `--path` \ No newline at end of file From a073f2bffdef11b99db9a07b540f9a01d2d376b0 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 09:19:51 -0600 Subject: [PATCH 69/90] updating copyright year in top-level license file Signed-off-by: Karl W. Schulz --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 5477049050..057656b358 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Advanced Micro Devices, Inc. All Rights Reserved. +Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From c8fc8e80267460a932e2879536a6fc1c4df77f78 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 09:26:12 -0600 Subject: [PATCH 70/90] adding license delimiters to headers Signed-off-by: Karl W. Schulz --- cmake/Dockerfile | 4 ++-- cmake/rocm_install.sh | 6 +++--- src/common.py | 4 ++-- src/omniperf | 4 ++-- src/omniperf_analyze/convertor/mongodb/convert | 4 ++-- src/omniperf_analyze/convertor/sql/convertor.py | 4 ++-- src/omniperf_analyze/omniperf_analyze.py | 4 ++-- src/omniperf_analyze/tests/unit/ast_parser_tester.py | 4 ++-- src/omniperf_analyze/utils/file_io.py | 4 ++-- src/omniperf_analyze/utils/gui.py | 4 ++-- src/omniperf_analyze/utils/gui_components/header.py | 4 ++-- src/omniperf_analyze/utils/gui_components/memchart.py | 4 ++-- src/omniperf_analyze/utils/gui_components/roofline.py | 4 ++-- src/omniperf_analyze/utils/parser.py | 4 ++-- src/omniperf_analyze/utils/roofline_calc.py | 4 ++-- src/omniperf_analyze/utils/schema.py | 4 ++-- src/omniperf_analyze/utils/tty.py | 4 ++-- src/parser.py | 4 ++-- src/utils/csv_converter.py | 4 ++-- src/utils/gfx_perfmon_builder.py | 4 ++-- src/utils/perfagg.py | 4 ++-- src/utils/remove_workload.py | 4 ++-- src/utils/resources.py | 4 ++-- src/utils/specs.py | 4 ++-- 24 files changed, 49 insertions(+), 49 deletions(-) diff --git a/cmake/Dockerfile b/cmake/Dockerfile index f95e18d4d0..d216fd23ab 100644 --- a/cmake/Dockerfile +++ b/cmake/Dockerfile @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el FROM ubuntu:20.04 diff --git a/cmake/rocm_install.sh b/cmake/rocm_install.sh index 8ac34caad5..c550c3e2fa 100755 --- a/cmake/rocm_install.sh +++ b/cmake/rocm_install.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el declare -a rocm_versions=("4.3.1" "4.5.2" "5.0.2" "5.1.3" "5.2.3") wget https://repo.radeon.com/amdgpu-install/22.10/ubuntu/focal/amdgpu-install_22.10.50100-1_all.deb @@ -29,4 +29,4 @@ for rocm_version in ${rocm_versions[@]}; do echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/$rocm_version ubuntu main" | tee /etc/apt/sources.list.d/rocm.list apt update amdgpu-install -y --usecase=rocm --rocmrelease=$rocm_version --no-dkms -done \ No newline at end of file +done diff --git a/src/common.py b/src/common.py index 8268608b4a..30ed28c5f2 100644 --- a/src/common.py +++ b/src/common.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import os import sys diff --git a/src/omniperf b/src/omniperf index b0a6a3af9d..d27f295a20 100755 --- a/src/omniperf +++ b/src/omniperf @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import sys import os diff --git a/src/omniperf_analyze/convertor/mongodb/convert b/src/omniperf_analyze/convertor/mongodb/convert index a5676dc317..6b63033d19 100755 --- a/src/omniperf_analyze/convertor/mongodb/convert +++ b/src/omniperf_analyze/convertor/mongodb/convert @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -################################################################################ +##############################################################################bl # Copyright (C) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import ast import astunparse diff --git a/src/omniperf_analyze/convertor/sql/convertor.py b/src/omniperf_analyze/convertor/sql/convertor.py index dba816948a..28de3b4fc4 100644 --- a/src/omniperf_analyze/convertor/sql/convertor.py +++ b/src/omniperf_analyze/convertor/sql/convertor.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -################################################################################ +##############################################################################bl # Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import re import sys diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index 5c090bc121..5a1bcba62f 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el """ Quick run: diff --git a/src/omniperf_analyze/tests/unit/ast_parser_tester.py b/src/omniperf_analyze/tests/unit/ast_parser_tester.py index a04832e48a..573590b543 100644 --- a/src/omniperf_analyze/tests/unit/ast_parser_tester.py +++ b/src/omniperf_analyze/tests/unit/ast_parser_tester.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import ast import astunparse diff --git a/src/omniperf_analyze/utils/file_io.py b/src/omniperf_analyze/utils/file_io.py index 04539feb44..ad447b05c2 100644 --- a/src/omniperf_analyze/utils/file_io.py +++ b/src/omniperf_analyze/utils/file_io.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import os import pandas as pd diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index 98bc38ebcc..31e8ed61a4 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el from selectors import EpollSelector import sys diff --git a/src/omniperf_analyze/utils/gui_components/header.py b/src/omniperf_analyze/utils/gui_components/header.py index ddf665d799..70fb5bcf6b 100644 --- a/src/omniperf_analyze/utils/gui_components/header.py +++ b/src/omniperf_analyze/utils/gui_components/header.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el from dash import html, dcc import dash_bootstrap_components as dbc diff --git a/src/omniperf_analyze/utils/gui_components/memchart.py b/src/omniperf_analyze/utils/gui_components/memchart.py index 8616ca9e30..2a09b21600 100644 --- a/src/omniperf_analyze/utils/gui_components/memchart.py +++ b/src/omniperf_analyze/utils/gui_components/memchart.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import sys diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 89e19af132..8c74ca0b85 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el from omniperf_analyze.utils import roofline_calc diff --git a/src/omniperf_analyze/utils/parser.py b/src/omniperf_analyze/utils/parser.py index f4f91f4f5a..5c94e5b4e0 100644 --- a/src/omniperf_analyze/utils/parser.py +++ b/src/omniperf_analyze/utils/parser.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import ast import sys diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index 7a324c3efd..12f1a63c68 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import sys diff --git a/src/omniperf_analyze/utils/schema.py b/src/omniperf_analyze/utils/schema.py index 3d77eee0ac..65a2fa8413 100644 --- a/src/omniperf_analyze/utils/schema.py +++ b/src/omniperf_analyze/utils/schema.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el # # Define all common data storage classes, diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index 1afe8e08e8..ade1a9b37b 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import pandas as pd from tabulate import tabulate diff --git a/src/parser.py b/src/parser.py index d384be8797..bce1f705f3 100644 --- a/src/parser.py +++ b/src/parser.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import os import argparse diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index b1e536c12f..191550b0ff 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import argparse import collections diff --git a/src/utils/gfx_perfmon_builder.py b/src/utils/gfx_perfmon_builder.py index 566449c3d5..8a9623a702 100755 --- a/src/utils/gfx_perfmon_builder.py +++ b/src/utils/gfx_perfmon_builder.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el from PyQt5.QtWidgets import ( QMainWindow, diff --git a/src/utils/perfagg.py b/src/utils/perfagg.py index f40f242699..c2cdc7fdf1 100755 --- a/src/utils/perfagg.py +++ b/src/utils/perfagg.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import sys, os, pathlib, shutil, subprocess, argparse, glob, re import numpy as np diff --git a/src/utils/remove_workload.py b/src/utils/remove_workload.py index 11cb5df256..6627b64051 100755 --- a/src/utils/remove_workload.py +++ b/src/utils/remove_workload.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import argparse import getpass diff --git a/src/utils/resources.py b/src/utils/resources.py index fce329d13d..5408a90ab7 100644 --- a/src/utils/resources.py +++ b/src/utils/resources.py @@ -1,4 +1,4 @@ -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,7 +18,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import pathlib import sys diff --git a/src/utils/specs.py b/src/utils/specs.py index 4c95194406..b385c9d053 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -1,6 +1,6 @@ """Get host/gpu specs.""" -################################################################################ +##############################################################################bl # Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -20,7 +20,7 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -################################################################################ +##############################################################################el import os import re From 273c1aad33e4d00fe6d9eb5958085fa4e091dd54 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 13 Feb 2023 10:46:28 -0600 Subject: [PATCH 71/90] Fix units in wavefront table #81 Signed-off-by: coleramos425 --- .../configs/gfx906/0700_wavefront-launch.yaml | 8 ++++---- .../configs/gfx908/0700_wavefront-launch.yaml | 8 ++++---- .../configs/gfx90a/0700_wavefront-launch.yaml | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml index 89e4ce7c14..c0592783e6 100644 --- a/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml +++ b/src/omniperf_analyze/configs/gfx906/0700_wavefront-launch.yaml @@ -107,25 +107,25 @@ Panel Config: avg: AVG(((4 * SQ_WAVE_CYCLES) / $denom)) min: MIN(((4 * SQ_WAVE_CYCLES) / $denom)) max: MAX(((4 * SQ_WAVE_CYCLES) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Dependency Wait Cycles: avg: AVG(((4 * SQ_WAIT_ANY) / $denom)) min: MIN(((4 * SQ_WAIT_ANY) / $denom)) max: MAX(((4 * SQ_WAIT_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Issue Wait Cycles: avg: AVG(((4 * SQ_WAIT_INST_ANY) / $denom)) min: MIN(((4 * SQ_WAIT_INST_ANY) / $denom)) max: MAX(((4 * SQ_WAIT_INST_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Active Cycles: avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / $denom)) min: MIN(((4 * SQ_ACTIVE_INST_ANY) / $denom)) max: MAX(((4 * SQ_ACTIVE_INST_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Wavefront Occupancy: avg: AVG((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE)) diff --git a/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml index 89e4ce7c14..c0592783e6 100644 --- a/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml +++ b/src/omniperf_analyze/configs/gfx908/0700_wavefront-launch.yaml @@ -107,25 +107,25 @@ Panel Config: avg: AVG(((4 * SQ_WAVE_CYCLES) / $denom)) min: MIN(((4 * SQ_WAVE_CYCLES) / $denom)) max: MAX(((4 * SQ_WAVE_CYCLES) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Dependency Wait Cycles: avg: AVG(((4 * SQ_WAIT_ANY) / $denom)) min: MIN(((4 * SQ_WAIT_ANY) / $denom)) max: MAX(((4 * SQ_WAIT_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Issue Wait Cycles: avg: AVG(((4 * SQ_WAIT_INST_ANY) / $denom)) min: MIN(((4 * SQ_WAIT_INST_ANY) / $denom)) max: MAX(((4 * SQ_WAIT_INST_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Active Cycles: avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / $denom)) min: MIN(((4 * SQ_ACTIVE_INST_ANY) / $denom)) max: MAX(((4 * SQ_ACTIVE_INST_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Wavefront Occupancy: avg: AVG((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE)) diff --git a/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml b/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml index b5a86adeed..fa53bbff74 100644 --- a/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml +++ b/src/omniperf_analyze/configs/gfx90a/0700_wavefront-launch.yaml @@ -107,25 +107,25 @@ Panel Config: avg: AVG(((4 * SQ_WAVE_CYCLES) / $denom)) min: MIN(((4 * SQ_WAVE_CYCLES) / $denom)) max: MAX(((4 * SQ_WAVE_CYCLES) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Dependency Wait Cycles: avg: AVG(((4 * SQ_WAIT_ANY) / $denom)) min: MIN(((4 * SQ_WAIT_ANY) / $denom)) max: MAX(((4 * SQ_WAIT_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Issue Wait Cycles: avg: AVG(((4 * SQ_WAIT_INST_ANY) / $denom)) min: MIN(((4 * SQ_WAIT_INST_ANY) / $denom)) max: MAX(((4 * SQ_WAIT_INST_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Active Cycles: avg: AVG(((4 * SQ_ACTIVE_INST_ANY) / $denom)) min: MIN(((4 * SQ_ACTIVE_INST_ANY) / $denom)) max: MAX(((4 * SQ_ACTIVE_INST_ANY) / $denom)) - unit: Cycles/$normUnit + unit: (Cycles + $normUnit) tips: Wavefront Occupancy: avg: AVG((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE)) From e6caaef5ecd0f25024bddfa4a09e8a736757ff6f Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 13:34:24 -0600 Subject: [PATCH 72/90] adding a "license" target in build system to update headers in relevant source code files Signed-off-by: Karl W. Schulz --- CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ff2df00a4a..724d37f0d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,6 +292,18 @@ install( # set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "omniperf") set(CPACK_RESOURCE_FILE_LICENSE # "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +# License header update(s) +add_custom_target( + license + COMMAND + ${PROJECT_SOURCE_DIR}/utils/update_license.py --source ${PROJECT_SOURCE_DIR}/src + --license ${PROJECT_SOURCE_DIR}/LICENSE --extension '.py' + COMMAND + ${PROJECT_SOURCE_DIR}/utils/update_license.py --source ${PROJECT_SOURCE_DIR} + --license ${PROJECT_SOURCE_DIR}/LICENSE --file + "src/omniperf,cmake/Dockerfile,cmake/rocm_install.sh,docker/docker-entrypoint.sh,src/omniperf_analyze/convertor/mongodb/convert" + ) + # Source tarball set(CPACK_SOURCE_GENERATOR "TGZ") set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${FULL_VERSION_STRING}) From 005de9e506ef5eb4bb2122730cc441c6511073e9 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 13:38:32 -0600 Subject: [PATCH 73/90] adding a license header utility: looks for specific delimiter and replaces contents inside the delimiter with provided license file Signed-off-by: Karl W. Schulz --- utils/update_license.py | 133 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100755 utils/update_license.py diff --git a/utils/update_license.py b/utils/update_license.py new file mode 100755 index 0000000000..db87d7cb30 --- /dev/null +++ b/utils/update_license.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +# ------------------------------------------------------------------------------- +# Support script for license header management. +# ------------------------------------------------------------------------------- + +import argparse +import logging +import glob +import os +import sys +import re +import filecmp +import shutil + +begDelim='######bl$' +endDelim='######el$' +maxHeaderLines=200 + + +def cacheLicenseFile(infile,comment='#'): + if not os.path.isfile(infile): + logging.error("Unable to access license file - >%s" % infile) + sys.exit(1) + + license = "" + with open(infile, 'r') as file_in: + for line in file_in: + license += comment + ' ' + line + return(license) + + +parser = argparse.ArgumentParser() +parser.add_argument('--license', required=True,help='License File') +parser.add_argument('--source', required=True,help='Source directory') +parser.add_argument("--dryrun", help="enable dryrun mode", action="store_true") + +group = parser.add_mutually_exclusive_group(required=True) +group.add_argument('--extension',help='file extension to parse') +group.add_argument('--files', help='specific file(s) to parse') + +logging.basicConfig(format='%(levelname)s: %(message)s',level=logging.INFO) + +args = parser.parse_args() + +srcDir = args.source +fileExtension = None +specificFiles = None +if args.extension: + fileExtension = args.extension +if args.files: + specificFiles = args.files.split(",") + +print("") +logging.info("Source directory = %s" % srcDir) +if fileExtension: + logging.info("File extension = %s" % fileExtension) +if specificFiles: + logging.info("Specific files = %s" % specificFiles) + +# cache license file +license = cacheLicenseFile(args.license) + +# Scan files in provided source directory... +for filename in glob.iglob(srcDir + '/**', recursive=True): + # skip directories + if os.path.isdir(filename): + continue + + # File matching options: + + # (1) filter non-matching extensions + if fileExtension: + if not filename.endswith(fileExtension): + continue + + # or, (2) filter for specific filename + if specificFiles: + found = False + for file in specificFiles: + fullPath = os.path.join(srcDir,file) + if fullPath == filename: + found = True + break + if not found: + continue + + logging.debug("Examining %s for license..." % filename) + + # Update license header contents if delimiters are found + with open(filename, 'r') as file_in: + baseName = os.path.basename(filename) + dirName = os.path.dirname(filename) + tmpFile = dirName + "/." + baseName + ".tmp" + + file_out = open(tmpFile,'w') + + for line in file_in: + + if re.search(begDelim,line): + logging.debug("Found beginning delimiter") + file_out.write(line) + file_out.write(license) + + foundEnd = False + + for i in range(maxHeaderLines): + line = file_in.readline() + if re.search(endDelim,line): + logging.debug("Found ending delimiter") + file_out.write(line) + foundEnd = True + break + if not foundEnd: + logging.error("Unable to find end of delimited header") + sys.exit(1) + + else: + file_out.write(line) + + file_out.close() + + + # Check if file changed and update + if not filecmp.cmp(filename,tmpFile,shallow=False): + logging.info("%s changed" % filename) + shutil.copystat(filename,tmpFile) + if not args.dryrun: + os.rename(tmpFile,filename) + else: + os.unlink(tmpFile) + + + From e79391aabe6c2ad555899dcd21ebcf475054da28 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 13:45:21 -0600 Subject: [PATCH 74/90] ran dos2unix Signed-off-by: Karl W. Schulz --- src/utils/gfx_perfmon_builder.py | 788 +++++++++++++++---------------- 1 file changed, 394 insertions(+), 394 deletions(-) diff --git a/src/utils/gfx_perfmon_builder.py b/src/utils/gfx_perfmon_builder.py index 8a9623a702..ac26df682d 100755 --- a/src/utils/gfx_perfmon_builder.py +++ b/src/utils/gfx_perfmon_builder.py @@ -1,394 +1,394 @@ -##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -##############################################################################el - -from PyQt5.QtWidgets import ( - QMainWindow, - QApplication, - QTreeView, - QTableWidget, - QTableWidgetItem, -) -from PyQt5.QtWidgets import ( - QHBoxLayout, - QWidget, - QAction, - QFileDialog, - QAbstractItemView, - qApp, -) -from PyQt5.QtGui import QStandardItemModel, QStandardItem -from lxml import html -import sys - - -# class view(QWidget): -class mainWindow(QMainWindow): - def __init__(self): - super(QMainWindow, self).__init__() - - ############################################################################### - # SOC Parameters - ############################################################################## - - # Per IP block max number of simulutaneous counters - # GFX IP Blocks - self.perfmon_config = { - "SQ": 8, - "TA": 2, - "TD": 2, - "TCP": 4, - "TCC": 4, - "CPC": 2, - "CPF": 2, - "SPI": 2, - "GRBM": 2, - "GDS": 4, - } - - # GFX Architectures - self.soc_arch_list = ["gfx906", "gfx908", "gfx90a"] - - ############################################################################### - # Window layout Design - ############################################################################## - - self.block_list = [] - self.nodes_dict = {} # list of QStandardItem - - self.tree = QTreeView(self) - self.table = QTableWidget() - - # Tree setup - self.tree.header().setDefaultSectionSize(180) - self.model = QStandardItemModel() - self.model.setHorizontalHeaderLabels(["Metric", "Block", "Event", "Definition"]) - - self.tree.setModel(self.model) - # self.importData(data) - self.tree.setEditTriggers(QAbstractItemView.NoEditTriggers) - - # Set up click processing - self.tree.clicked.connect(self.pmc_select) - # self.tree.expandAll() - - # Table setup - tableHeader = list(self.perfmon_config.keys()) - self.table.setColumnCount(len(tableHeader)) - self.table.setHorizontalHeaderLabels(tableHeader) - self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) - self.table.showGrid() - - self.setWindowTitle("GFX Perfmon Builder") - # layout: lhs: metrics; rhs: selected perfmon - layout = QHBoxLayout(self) - layout.addWidget(self.tree) - layout.addWidget(self.table) - - widget = QWidget() - widget.setLayout(layout) - self.setCentralWidget(widget) - - # Add Status - self.statusBar() - - ############################################################################### - # Window Menu Design - ############################################################################## - - # Setup file menu - menuBar = self.menuBar() - menuBar.setNativeMenuBar(False) - - openAction = QAction("&Open", self) - openAction.setShortcut("Ctrl+O") - openAction.setStatusTip("Open GFX Metrics file") - openAction.triggered.connect(self.openGFXDialog) - - saveAction = QAction("&Save", self) - saveAction.setShortcut("Ctrl+S") - saveAction.setStatusTip("Save to PMC file") - saveAction.triggered.connect(self.exportGFXDialog) - - exitAction = QAction("&Exit", self) - exitAction.setShortcut("Ctrl+Q") - exitAction.setStatusTip("Exit") - exitAction.triggered.connect(self.close) - - # Create new action - fileMenu = menuBar.addMenu("&File") - fileMenu.addActions([openAction, saveAction]) - fileMenu.addSeparator() - fileMenu.addActions([exitAction]) - - def openGFXDialog(self): - options = QFileDialog.Options() - options |= QFileDialog.DontUseNativeDialog - fileName, _ = QFileDialog.getOpenFileName( - self, "Open GFX Metrics", "", "XML Files (*.xml)", "XML(*.xml)" - ) - - # Parse the xml - if fileName: - xmlparsed = html.parse(fileName) - self.importData(xmlparsed) - - def exportGFXDialog(self): - options = QFileDialog.Options() - options |= QFileDialog.DontUseNativeDialog - fileName, _ = QFileDialog.getSaveFileName( - self, "Export PMC Counters", "", "Text File (*.txt)", "Text File(*.txt)" - ) - - # Parse the xml - if fileName: - self.exportPMCCounters(fileName) - - def exportPMCCounters(self, fileName): - f = open(fileName, "w") - - total_IP_blocks = len(list(self.perfmon_config.keys())) - for row in range(self.table.rowCount()): - pmc_str = "pmc: " - for col in range(total_IP_blocks): - cell = self.table.item(row, col) - - if cell: - pmc_str = pmc_str + " ".join(cell.text().split("\n")) + " " - - f.write(pmc_str + "\n") - - # Add standard lines - f.write("\n\n") - f.write("gpu: \n") - f.write("dispatch: \n") - f.write("kernel: \n") - - f.close() - - return - - def pmc_metric_selected(self, metric_name, col): - # check if the metric already exists - metric_selected = False - - for row in range(self.table.rowCount()): - entry = self.table.item(row, col) - if entry: - pmc_list = entry.text().split(sep="\n") - if metric_name in pmc_list: - metric_selected = True - break - - return metric_selected - - def pmc_remove_metric(self, metric_name, IP_block): - # Remove the metric to pmc table, if it is selected - - # Map SQC to SQ, since they share the same Perfmon block - if IP_block == "SQC": - IP_block = "SQ" - - # not action if it is for a ghost IP! - if not IP_block in list(self.perfmon_config.keys()): - return - - # This is the column we need to add/remove perfmon counters - col = list(self.perfmon_config.keys()).index(IP_block) - - if not self.pmc_metric_selected(metric_name, col): - return - - pmc_list = [] - for row in range(self.table.rowCount()): - entry = self.table.item(row, col) - - if entry: - pmc_list = pmc_list + entry.text().split(sep="\n") - # clear the cell, we will re-allocate the pmc - - self.table.takeItem(row, col) - - # allowed PMC counters per batch - max_pmc_num = self.perfmon_config[IP_block] - - # remote this metric and re-segment the list and refill all rows in this column - pmc_list.remove(metric_name) - - # We are empty now, do nothing - if len(pmc_list) == 0: - return - - for row in range((len(pmc_list) + max_pmc_num - 1) // max_pmc_num): - start_index = row * max_pmc_num - pmc_str = "\n".join(pmc_list[start_index : start_index + max_pmc_num]) - self.table.setItem(row, col, QTableWidgetItem(pmc_str)) - - # Remove last row, if empty - last_row = self.table.rowCount() - 1 - empty_row = True - total_cols = len(list(self.perfmon_config.keys())) - for cindex in range(total_cols): - x = self.table.item(last_row, cindex) - - if x and x.text(): - empty_row = False - break - - if empty_row: - self.table.removeRow(last_row) - - def pmc_add_metric(self, metric_name, IP_block): - # Add the metric to pmc table, if not there yet - - # Map SQC to SQ, since they share the same Perfmon block - if IP_block == "SQC": - IP_block = "SQ" - - if not IP_block in list(self.perfmon_config.keys()): - return - - # This is the column we need to add/remove perfmon counters - col = list(self.perfmon_config.keys()).index(IP_block) - - # check if the metric already exists - if self.pmc_metric_selected(metric_name, col): - return - - # metric is not bucket yet, add it! - if self.table.rowCount() == 0: - # starting from scratch! - self.table.insertRow(0) - self.table.setItem(0, col, QTableWidgetItem(metric_name)) - return - - # find the row to insert - for row in range(self.table.rowCount()): - entry = self.table.item(row, col) - if not entry: - # print("search insert pos, row:", row, ", cell empty") - break - - if len(entry.text().split(sep="\n")) < self.perfmon_config[IP_block]: - # print("found") - break - - entry = self.table.item(row, col) - if not entry: - # put it into the empty cell - self.table.setItem(row, col, QTableWidgetItem(metric_name)) - return - - pmc_list = entry.text().split(sep="\n") - - if len(pmc_list) < self.perfmon_config[IP_block]: - # we still have hit per-IP HW counters limit, add it to the last row - pmc_list.append(metric_name) - pmc_str = "\n".join(pmc_list) - self.table.setItem(row, col, QTableWidgetItem(pmc_str)) - self.table.resizeRowsToContents() - else: - # Start a new row - row = row + 1 - self.table.insertRow(row) - self.table.setItem(row, col, QTableWidgetItem(metric_name)) - - def pmc_select(self, item): - metric_name = item.data() - if ( - not metric_name in self.nodes_dict - or not self.nodes_dict[metric_name].isCheckable() - ): - return - - # only proper metrics check/uncheck is processed here. - IP_block = item.data().split(sep="_")[0] - - if self.nodes_dict[metric_name].checkState() == 0: - # unselect the metric in the table if it is currently selected - self.pmc_remove_metric(metric_name, IP_block) - - elif self.nodes_dict[metric_name].checkState() == 2: - self.pmc_add_metric(metric_name, IP_block) - - # Function to save populate treeview with a dictionary - def importData(self, xmlparsed, root=None): - self.model.setRowCount(0) - if root is None: - root = self.model.invisibleRootItem() - - for x in xmlparsed.getiterator(): - # Add SoC node to Root - if x.tag in self.soc_arch_list: - parent = root - parent.appendRow([QStandardItem(x.tag)]) - self.nodes_dict[x.tag] = parent.child(parent.rowCount() - 1) - - # check all metrics in an SoC family - if x.tag == "metric" and x.getparent().tag in self.soc_arch_list: - # New IP block (e.g., SQ), detected, create a new hierarchy for the block - if not x.attrib["block"] in self.block_list: - self.block_list.append(x.attrib["block"]) - parent = self.nodes_dict[x.getparent().tag] # the SoC node - parent.appendRow( - [ - QStandardItem(x.attrib["block"]), - QStandardItem(""), - QStandardItem(""), - QStandardItem(""), - ] - ) - - # record the tree node for the block - self.nodes_dict[x.attrib["block"]] = parent.child( - parent.rowCount() - 1 - ) - - # Add metric node to the Block node - parent = self.nodes_dict[x.attrib["block"]] - metric_name = QStandardItem(x.attrib["name"]) - metric_name.setCheckable(True) - parent.appendRow( - [ - metric_name, - QStandardItem(x.attrib["block"]), - QStandardItem(x.attrib["event"]), - QStandardItem(x.attrib["descr"]), - ] - ) - - self.nodes_dict[x.attrib["name"]] = parent.child(parent.rowCount() - 1) - - -if __name__ == "__main__": - app = QApplication(sys.argv) - app.setStyle("Fusion") - - # populate the view with GFX metrics.xml - window = mainWindow() - - # show the view - window.setGeometry(300, 100, 600, 300) - # view.setWindowTitle('GFX Perfmon Counters') - window.show() - - # start the application - sys.exit(app.exec_()) +##############################################################################bl +# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +##############################################################################el + +from PyQt5.QtWidgets import ( + QMainWindow, + QApplication, + QTreeView, + QTableWidget, + QTableWidgetItem, +) +from PyQt5.QtWidgets import ( + QHBoxLayout, + QWidget, + QAction, + QFileDialog, + QAbstractItemView, + qApp, +) +from PyQt5.QtGui import QStandardItemModel, QStandardItem +from lxml import html +import sys + + +# class view(QWidget): +class mainWindow(QMainWindow): + def __init__(self): + super(QMainWindow, self).__init__() + + ############################################################################### + # SOC Parameters + ############################################################################## + + # Per IP block max number of simulutaneous counters + # GFX IP Blocks + self.perfmon_config = { + "SQ": 8, + "TA": 2, + "TD": 2, + "TCP": 4, + "TCC": 4, + "CPC": 2, + "CPF": 2, + "SPI": 2, + "GRBM": 2, + "GDS": 4, + } + + # GFX Architectures + self.soc_arch_list = ["gfx906", "gfx908", "gfx90a"] + + ############################################################################### + # Window layout Design + ############################################################################## + + self.block_list = [] + self.nodes_dict = {} # list of QStandardItem + + self.tree = QTreeView(self) + self.table = QTableWidget() + + # Tree setup + self.tree.header().setDefaultSectionSize(180) + self.model = QStandardItemModel() + self.model.setHorizontalHeaderLabels(["Metric", "Block", "Event", "Definition"]) + + self.tree.setModel(self.model) + # self.importData(data) + self.tree.setEditTriggers(QAbstractItemView.NoEditTriggers) + + # Set up click processing + self.tree.clicked.connect(self.pmc_select) + # self.tree.expandAll() + + # Table setup + tableHeader = list(self.perfmon_config.keys()) + self.table.setColumnCount(len(tableHeader)) + self.table.setHorizontalHeaderLabels(tableHeader) + self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.table.showGrid() + + self.setWindowTitle("GFX Perfmon Builder") + # layout: lhs: metrics; rhs: selected perfmon + layout = QHBoxLayout(self) + layout.addWidget(self.tree) + layout.addWidget(self.table) + + widget = QWidget() + widget.setLayout(layout) + self.setCentralWidget(widget) + + # Add Status + self.statusBar() + + ############################################################################### + # Window Menu Design + ############################################################################## + + # Setup file menu + menuBar = self.menuBar() + menuBar.setNativeMenuBar(False) + + openAction = QAction("&Open", self) + openAction.setShortcut("Ctrl+O") + openAction.setStatusTip("Open GFX Metrics file") + openAction.triggered.connect(self.openGFXDialog) + + saveAction = QAction("&Save", self) + saveAction.setShortcut("Ctrl+S") + saveAction.setStatusTip("Save to PMC file") + saveAction.triggered.connect(self.exportGFXDialog) + + exitAction = QAction("&Exit", self) + exitAction.setShortcut("Ctrl+Q") + exitAction.setStatusTip("Exit") + exitAction.triggered.connect(self.close) + + # Create new action + fileMenu = menuBar.addMenu("&File") + fileMenu.addActions([openAction, saveAction]) + fileMenu.addSeparator() + fileMenu.addActions([exitAction]) + + def openGFXDialog(self): + options = QFileDialog.Options() + options |= QFileDialog.DontUseNativeDialog + fileName, _ = QFileDialog.getOpenFileName( + self, "Open GFX Metrics", "", "XML Files (*.xml)", "XML(*.xml)" + ) + + # Parse the xml + if fileName: + xmlparsed = html.parse(fileName) + self.importData(xmlparsed) + + def exportGFXDialog(self): + options = QFileDialog.Options() + options |= QFileDialog.DontUseNativeDialog + fileName, _ = QFileDialog.getSaveFileName( + self, "Export PMC Counters", "", "Text File (*.txt)", "Text File(*.txt)" + ) + + # Parse the xml + if fileName: + self.exportPMCCounters(fileName) + + def exportPMCCounters(self, fileName): + f = open(fileName, "w") + + total_IP_blocks = len(list(self.perfmon_config.keys())) + for row in range(self.table.rowCount()): + pmc_str = "pmc: " + for col in range(total_IP_blocks): + cell = self.table.item(row, col) + + if cell: + pmc_str = pmc_str + " ".join(cell.text().split("\n")) + " " + + f.write(pmc_str + "\n") + + # Add standard lines + f.write("\n\n") + f.write("gpu: \n") + f.write("dispatch: \n") + f.write("kernel: \n") + + f.close() + + return + + def pmc_metric_selected(self, metric_name, col): + # check if the metric already exists + metric_selected = False + + for row in range(self.table.rowCount()): + entry = self.table.item(row, col) + if entry: + pmc_list = entry.text().split(sep="\n") + if metric_name in pmc_list: + metric_selected = True + break + + return metric_selected + + def pmc_remove_metric(self, metric_name, IP_block): + # Remove the metric to pmc table, if it is selected + + # Map SQC to SQ, since they share the same Perfmon block + if IP_block == "SQC": + IP_block = "SQ" + + # not action if it is for a ghost IP! + if not IP_block in list(self.perfmon_config.keys()): + return + + # This is the column we need to add/remove perfmon counters + col = list(self.perfmon_config.keys()).index(IP_block) + + if not self.pmc_metric_selected(metric_name, col): + return + + pmc_list = [] + for row in range(self.table.rowCount()): + entry = self.table.item(row, col) + + if entry: + pmc_list = pmc_list + entry.text().split(sep="\n") + # clear the cell, we will re-allocate the pmc + + self.table.takeItem(row, col) + + # allowed PMC counters per batch + max_pmc_num = self.perfmon_config[IP_block] + + # remote this metric and re-segment the list and refill all rows in this column + pmc_list.remove(metric_name) + + # We are empty now, do nothing + if len(pmc_list) == 0: + return + + for row in range((len(pmc_list) + max_pmc_num - 1) // max_pmc_num): + start_index = row * max_pmc_num + pmc_str = "\n".join(pmc_list[start_index : start_index + max_pmc_num]) + self.table.setItem(row, col, QTableWidgetItem(pmc_str)) + + # Remove last row, if empty + last_row = self.table.rowCount() - 1 + empty_row = True + total_cols = len(list(self.perfmon_config.keys())) + for cindex in range(total_cols): + x = self.table.item(last_row, cindex) + + if x and x.text(): + empty_row = False + break + + if empty_row: + self.table.removeRow(last_row) + + def pmc_add_metric(self, metric_name, IP_block): + # Add the metric to pmc table, if not there yet + + # Map SQC to SQ, since they share the same Perfmon block + if IP_block == "SQC": + IP_block = "SQ" + + if not IP_block in list(self.perfmon_config.keys()): + return + + # This is the column we need to add/remove perfmon counters + col = list(self.perfmon_config.keys()).index(IP_block) + + # check if the metric already exists + if self.pmc_metric_selected(metric_name, col): + return + + # metric is not bucket yet, add it! + if self.table.rowCount() == 0: + # starting from scratch! + self.table.insertRow(0) + self.table.setItem(0, col, QTableWidgetItem(metric_name)) + return + + # find the row to insert + for row in range(self.table.rowCount()): + entry = self.table.item(row, col) + if not entry: + # print("search insert pos, row:", row, ", cell empty") + break + + if len(entry.text().split(sep="\n")) < self.perfmon_config[IP_block]: + # print("found") + break + + entry = self.table.item(row, col) + if not entry: + # put it into the empty cell + self.table.setItem(row, col, QTableWidgetItem(metric_name)) + return + + pmc_list = entry.text().split(sep="\n") + + if len(pmc_list) < self.perfmon_config[IP_block]: + # we still have hit per-IP HW counters limit, add it to the last row + pmc_list.append(metric_name) + pmc_str = "\n".join(pmc_list) + self.table.setItem(row, col, QTableWidgetItem(pmc_str)) + self.table.resizeRowsToContents() + else: + # Start a new row + row = row + 1 + self.table.insertRow(row) + self.table.setItem(row, col, QTableWidgetItem(metric_name)) + + def pmc_select(self, item): + metric_name = item.data() + if ( + not metric_name in self.nodes_dict + or not self.nodes_dict[metric_name].isCheckable() + ): + return + + # only proper metrics check/uncheck is processed here. + IP_block = item.data().split(sep="_")[0] + + if self.nodes_dict[metric_name].checkState() == 0: + # unselect the metric in the table if it is currently selected + self.pmc_remove_metric(metric_name, IP_block) + + elif self.nodes_dict[metric_name].checkState() == 2: + self.pmc_add_metric(metric_name, IP_block) + + # Function to save populate treeview with a dictionary + def importData(self, xmlparsed, root=None): + self.model.setRowCount(0) + if root is None: + root = self.model.invisibleRootItem() + + for x in xmlparsed.getiterator(): + # Add SoC node to Root + if x.tag in self.soc_arch_list: + parent = root + parent.appendRow([QStandardItem(x.tag)]) + self.nodes_dict[x.tag] = parent.child(parent.rowCount() - 1) + + # check all metrics in an SoC family + if x.tag == "metric" and x.getparent().tag in self.soc_arch_list: + # New IP block (e.g., SQ), detected, create a new hierarchy for the block + if not x.attrib["block"] in self.block_list: + self.block_list.append(x.attrib["block"]) + parent = self.nodes_dict[x.getparent().tag] # the SoC node + parent.appendRow( + [ + QStandardItem(x.attrib["block"]), + QStandardItem(""), + QStandardItem(""), + QStandardItem(""), + ] + ) + + # record the tree node for the block + self.nodes_dict[x.attrib["block"]] = parent.child( + parent.rowCount() - 1 + ) + + # Add metric node to the Block node + parent = self.nodes_dict[x.attrib["block"]] + metric_name = QStandardItem(x.attrib["name"]) + metric_name.setCheckable(True) + parent.appendRow( + [ + metric_name, + QStandardItem(x.attrib["block"]), + QStandardItem(x.attrib["event"]), + QStandardItem(x.attrib["descr"]), + ] + ) + + self.nodes_dict[x.attrib["name"]] = parent.child(parent.rowCount() - 1) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + app.setStyle("Fusion") + + # populate the view with GFX metrics.xml + window = mainWindow() + + # show the view + window.setGeometry(300, 100, 600, 300) + # view.setWindowTitle('GFX Perfmon Counters') + window.show() + + # start the application + sys.exit(app.exec_()) From 3d7a7a6f324a1af64b860cbc9efe1bf8a79a72f6 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 13:47:11 -0600 Subject: [PATCH 75/90] updating copyright header for 2023 using newly-added "make license" target Signed-off-by: Karl W. Schulz --- cmake/Dockerfile | 20 +++++++++------- cmake/rocm_install.sh | 20 +++++++++------- docker/docker-entrypoint.sh | 24 ++++++++++--------- src/common.py | 20 +++++++++------- src/omniperf | 20 +++++++++------- .../convertor/mongodb/convert | 20 +++++++++------- .../convertor/sql/convertor.py | 20 +++++++++------- src/omniperf_analyze/omniperf_analyze.py | 20 +++++++++------- .../tests/unit/ast_parser_tester.py | 20 +++++++++------- src/omniperf_analyze/utils/file_io.py | 20 +++++++++------- src/omniperf_analyze/utils/gui.py | 20 +++++++++------- .../utils/gui_components/header.py | 20 +++++++++------- .../utils/gui_components/memchart.py | 20 +++++++++------- .../utils/gui_components/roofline.py | 20 +++++++++------- src/omniperf_analyze/utils/parser.py | 20 +++++++++------- src/omniperf_analyze/utils/roofline_calc.py | 20 +++++++++------- src/omniperf_analyze/utils/schema.py | 20 +++++++++------- src/omniperf_analyze/utils/tty.py | 20 +++++++++------- src/parser.py | 20 +++++++++------- src/utils/csv_converter.py | 20 +++++++++------- src/utils/gfx_perfmon_builder.py | 20 +++++++++------- src/utils/perfagg.py | 20 +++++++++------- src/utils/remove_workload.py | 20 +++++++++------- src/utils/resources.py | 20 +++++++++------- src/utils/specs.py | 20 +++++++++------- 25 files changed, 277 insertions(+), 227 deletions(-) diff --git a/cmake/Dockerfile b/cmake/Dockerfile index d216fd23ab..8a92eef25f 100644 --- a/cmake/Dockerfile +++ b/cmake/Dockerfile @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el FROM ubuntu:20.04 diff --git a/cmake/rocm_install.sh b/cmake/rocm_install.sh index c550c3e2fa..2b053f6a44 100755 --- a/cmake/rocm_install.sh +++ b/cmake/rocm_install.sh @@ -1,25 +1,27 @@ #!/usr/bin/env bash ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el declare -a rocm_versions=("4.3.1" "4.5.2" "5.0.2" "5.1.3" "5.2.3") diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 52b3e3914a..4ab480fe10 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -1,26 +1,28 @@ #!/bin/bash -################################################################################ -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +##############################################################################bl +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -################################################################################ +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +##############################################################################el pushd /var/lib/grafana/plugins/omniperfData_plugin npm run server & diff --git a/src/common.py b/src/common.py index 30ed28c5f2..69859a9509 100644 --- a/src/common.py +++ b/src/common.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import os diff --git a/src/omniperf b/src/omniperf index d27f295a20..76c97d0f00 100755 --- a/src/omniperf +++ b/src/omniperf @@ -1,25 +1,27 @@ #!/usr/bin/env python3 ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import sys diff --git a/src/omniperf_analyze/convertor/mongodb/convert b/src/omniperf_analyze/convertor/mongodb/convert index 6b63033d19..49e013761b 100755 --- a/src/omniperf_analyze/convertor/mongodb/convert +++ b/src/omniperf_analyze/convertor/mongodb/convert @@ -1,25 +1,27 @@ #!/usr/bin/env python3 ##############################################################################bl -# Copyright (C) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import ast diff --git a/src/omniperf_analyze/convertor/sql/convertor.py b/src/omniperf_analyze/convertor/sql/convertor.py index 28de3b4fc4..20aaa76142 100644 --- a/src/omniperf_analyze/convertor/sql/convertor.py +++ b/src/omniperf_analyze/convertor/sql/convertor.py @@ -1,25 +1,27 @@ #!/usr/bin/env python3 ##############################################################################bl -# Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import re diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index 5a1bcba62f..aa9936193c 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -1,25 +1,27 @@ #!/usr/bin/env python3 ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el """ diff --git a/src/omniperf_analyze/tests/unit/ast_parser_tester.py b/src/omniperf_analyze/tests/unit/ast_parser_tester.py index 573590b543..c8fa49bc39 100644 --- a/src/omniperf_analyze/tests/unit/ast_parser_tester.py +++ b/src/omniperf_analyze/tests/unit/ast_parser_tester.py @@ -1,25 +1,27 @@ #!/usr/bin/env python3 ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import ast diff --git a/src/omniperf_analyze/utils/file_io.py b/src/omniperf_analyze/utils/file_io.py index ad447b05c2..1d2de6318e 100644 --- a/src/omniperf_analyze/utils/file_io.py +++ b/src/omniperf_analyze/utils/file_io.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import os diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index 31e8ed61a4..a9aadc8df5 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el from selectors import EpollSelector diff --git a/src/omniperf_analyze/utils/gui_components/header.py b/src/omniperf_analyze/utils/gui_components/header.py index 70fb5bcf6b..7fc8ddaed6 100644 --- a/src/omniperf_analyze/utils/gui_components/header.py +++ b/src/omniperf_analyze/utils/gui_components/header.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el from dash import html, dcc diff --git a/src/omniperf_analyze/utils/gui_components/memchart.py b/src/omniperf_analyze/utils/gui_components/memchart.py index 2a09b21600..69a0594ffa 100644 --- a/src/omniperf_analyze/utils/gui_components/memchart.py +++ b/src/omniperf_analyze/utils/gui_components/memchart.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import sys diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 8c74ca0b85..0d5ea113c5 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el from omniperf_analyze.utils import roofline_calc diff --git a/src/omniperf_analyze/utils/parser.py b/src/omniperf_analyze/utils/parser.py index 5c94e5b4e0..ba92bc34f8 100644 --- a/src/omniperf_analyze/utils/parser.py +++ b/src/omniperf_analyze/utils/parser.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import ast diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index 12f1a63c68..f9aa28b3db 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import sys diff --git a/src/omniperf_analyze/utils/schema.py b/src/omniperf_analyze/utils/schema.py index 65a2fa8413..e0da44034f 100644 --- a/src/omniperf_analyze/utils/schema.py +++ b/src/omniperf_analyze/utils/schema.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el # diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index ade1a9b37b..310c2c10b3 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import pandas as pd diff --git a/src/parser.py b/src/parser.py index bce1f705f3..fbc1c34e85 100644 --- a/src/parser.py +++ b/src/parser.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import os diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index 191550b0ff..3d8a381a5c 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import argparse diff --git a/src/utils/gfx_perfmon_builder.py b/src/utils/gfx_perfmon_builder.py index ac26df682d..c298e57561 100755 --- a/src/utils/gfx_perfmon_builder.py +++ b/src/utils/gfx_perfmon_builder.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el from PyQt5.QtWidgets import ( diff --git a/src/utils/perfagg.py b/src/utils/perfagg.py index c2cdc7fdf1..5bc9d6be32 100755 --- a/src/utils/perfagg.py +++ b/src/utils/perfagg.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import sys, os, pathlib, shutil, subprocess, argparse, glob, re diff --git a/src/utils/remove_workload.py b/src/utils/remove_workload.py index 6627b64051..d389106e10 100755 --- a/src/utils/remove_workload.py +++ b/src/utils/remove_workload.py @@ -1,25 +1,27 @@ #!/usr/bin/env python3 ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import argparse diff --git a/src/utils/resources.py b/src/utils/resources.py index 5408a90ab7..23b684c2fb 100644 --- a/src/utils/resources.py +++ b/src/utils/resources.py @@ -1,23 +1,25 @@ ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import pathlib diff --git a/src/utils/specs.py b/src/utils/specs.py index b385c9d053..5f32a977f6 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -1,25 +1,27 @@ """Get host/gpu specs.""" ##############################################################################bl -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. ##############################################################################el import os From 70662311281233a7d11fc10c4b70a0092e0fed06 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 14:28:25 -0600 Subject: [PATCH 76/90] placate the formatter Signed-off-by: Karl W. Schulz --- utils/update_license.py | 60 +++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/utils/update_license.py b/utils/update_license.py index db87d7cb30..9594823b83 100755 --- a/utils/update_license.py +++ b/utils/update_license.py @@ -12,33 +12,33 @@ import re import filecmp import shutil -begDelim='######bl$' -endDelim='######el$' -maxHeaderLines=200 +begDelim = "######bl$" +endDelim = "######el$" +maxHeaderLines = 200 -def cacheLicenseFile(infile,comment='#'): +def cacheLicenseFile(infile, comment="#"): if not os.path.isfile(infile): logging.error("Unable to access license file - >%s" % infile) sys.exit(1) license = "" - with open(infile, 'r') as file_in: + with open(infile, "r") as file_in: for line in file_in: - license += comment + ' ' + line - return(license) + license += comment + " " + line + return license parser = argparse.ArgumentParser() -parser.add_argument('--license', required=True,help='License File') -parser.add_argument('--source', required=True,help='Source directory') +parser.add_argument("--license", required=True, help="License File") +parser.add_argument("--source", required=True, help="Source directory") parser.add_argument("--dryrun", help="enable dryrun mode", action="store_true") group = parser.add_mutually_exclusive_group(required=True) -group.add_argument('--extension',help='file extension to parse') -group.add_argument('--files', help='specific file(s) to parse') +group.add_argument("--extension", help="file extension to parse") +group.add_argument("--files", help="specific file(s) to parse") -logging.basicConfig(format='%(levelname)s: %(message)s',level=logging.INFO) +logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.INFO) args = parser.parse_args() @@ -61,13 +61,13 @@ if specificFiles: license = cacheLicenseFile(args.license) # Scan files in provided source directory... -for filename in glob.iglob(srcDir + '/**', recursive=True): - # skip directories +for filename in glob.iglob(srcDir + "/**", recursive=True): + # skip directories if os.path.isdir(filename): - continue + continue # File matching options: - + # (1) filter non-matching extensions if fileExtension: if not filename.endswith(fileExtension): @@ -77,26 +77,26 @@ for filename in glob.iglob(srcDir + '/**', recursive=True): if specificFiles: found = False for file in specificFiles: - fullPath = os.path.join(srcDir,file) + fullPath = os.path.join(srcDir, file) if fullPath == filename: found = True break if not found: continue - + logging.debug("Examining %s for license..." % filename) # Update license header contents if delimiters are found - with open(filename, 'r') as file_in: + with open(filename, "r") as file_in: baseName = os.path.basename(filename) - dirName = os.path.dirname(filename) - tmpFile = dirName + "/." + baseName + ".tmp" + dirName = os.path.dirname(filename) + tmpFile = dirName + "/." + baseName + ".tmp" + + file_out = open(tmpFile, "w") - file_out = open(tmpFile,'w') - for line in file_in: - if re.search(begDelim,line): + if re.search(begDelim, line): logging.debug("Found beginning delimiter") file_out.write(line) file_out.write(license) @@ -105,7 +105,7 @@ for filename in glob.iglob(srcDir + '/**', recursive=True): for i in range(maxHeaderLines): line = file_in.readline() - if re.search(endDelim,line): + if re.search(endDelim, line): logging.debug("Found ending delimiter") file_out.write(line) foundEnd = True @@ -119,15 +119,11 @@ for filename in glob.iglob(srcDir + '/**', recursive=True): file_out.close() - # Check if file changed and update - if not filecmp.cmp(filename,tmpFile,shallow=False): + if not filecmp.cmp(filename, tmpFile, shallow=False): logging.info("%s changed" % filename) - shutil.copystat(filename,tmpFile) + shutil.copystat(filename, tmpFile) if not args.dryrun: - os.rename(tmpFile,filename) + os.rename(tmpFile, filename) else: os.unlink(tmpFile) - - - From 980fb08c9257efb6f9a33731faded75e6d169275 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 14:48:56 -0600 Subject: [PATCH 77/90] Update license header tool to not include a space after comment if rest of line is blank. Needed to make python formatting check happy. Signed-off-by: Karl W. Schulz --- utils/update_license.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utils/update_license.py b/utils/update_license.py index 9594823b83..4342508c4e 100755 --- a/utils/update_license.py +++ b/utils/update_license.py @@ -25,7 +25,10 @@ def cacheLicenseFile(infile, comment="#"): license = "" with open(infile, "r") as file_in: for line in file_in: - license += comment + " " + line + license += comment + if line.strip() != "": + license += " " + license += line return license From 574ebcf75548d7ea6ce39874443311a26622710f Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 14:50:24 -0600 Subject: [PATCH 78/90] apply "make license" update Signed-off-by: Karl W. Schulz --- cmake/Dockerfile | 8 +- cmake/rocm_install.sh | 8 +- docker/docker-entrypoint.sh | 8 +- src/common.py | 8 +- src/omniperf | 116 +++++++++++------- .../convertor/mongodb/convert | 8 +- .../convertor/sql/convertor.py | 8 +- src/omniperf_analyze/omniperf_analyze.py | 8 +- .../tests/unit/ast_parser_tester.py | 8 +- src/omniperf_analyze/utils/file_io.py | 8 +- src/omniperf_analyze/utils/gui.py | 8 +- .../utils/gui_components/header.py | 8 +- .../utils/gui_components/memchart.py | 8 +- .../utils/gui_components/roofline.py | 8 +- src/omniperf_analyze/utils/parser.py | 8 +- src/omniperf_analyze/utils/roofline_calc.py | 8 +- src/omniperf_analyze/utils/schema.py | 8 +- src/omniperf_analyze/utils/tty.py | 8 +- src/parser.py | 8 +- src/utils/csv_converter.py | 8 +- src/utils/gfx_perfmon_builder.py | 8 +- src/utils/perfagg.py | 8 +- src/utils/remove_workload.py | 8 +- src/utils/resources.py | 8 +- src/utils/specs.py | 8 +- 25 files changed, 168 insertions(+), 140 deletions(-) diff --git a/cmake/Dockerfile b/cmake/Dockerfile index 8a92eef25f..766be0894f 100644 --- a/cmake/Dockerfile +++ b/cmake/Dockerfile @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/cmake/rocm_install.sh b/cmake/rocm_install.sh index 2b053f6a44..57d2331779 100755 --- a/cmake/rocm_install.sh +++ b/cmake/rocm_install.sh @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 4ab480fe10..6a2923f6f3 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/common.py b/src/common.py index 69859a9509..70cdcd8239 100644 --- a/src/common.py +++ b/src/common.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf b/src/omniperf index 76c97d0f00..554e59a6e2 100755 --- a/src/omniperf +++ b/src/omniperf @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -39,7 +39,7 @@ from utils import specs from utils.perfagg import perfmon_filter, pmc_filter from utils import remove_workload from utils import csv_converter # Import workload -from omniperf_analyze.omniperf_analyze import roofline_only # Standalone roofline +from omniperf_analyze.omniperf_analyze import roofline_only # Standalone roofline from omniperf_analyze.omniperf_analyze import analyze # CLI analysis from common import ( @@ -55,10 +55,8 @@ from common import getVersion # Helper Functions ################################################ def run_subprocess(cmd): - subprocess.run( - cmd, - check=True - ) + subprocess.run(cmd, check=True) + def resolve_rocprof(): # ROCPROF INFO @@ -127,7 +125,9 @@ def replace_timestamps(workload_dir): df_pmc_perf["EndNs"] = df_stamps["EndNs"] df_pmc_perf.to_csv(workload_dir + "/pmc_perf.csv", index=False) else: - warnings.warn("WARNING: Incomplete profiling data detected. Unable to update timestamps.") + warnings.warn( + "WARNING: Incomplete profiling data detected. Unable to update timestamps." + ) def gen_sysinfo(workload_name, workload_dir, ip_blocks, app_cmd, skip_roof): @@ -152,7 +152,7 @@ def gen_sysinfo(workload_name, workload_dir, ip_blocks, app_cmd, skip_roof): timestamp = now.strftime("%c") + " (" + local_tzname + ")" # host info param = [workload_name] - param += ["\"" + app_cmd + "\""] + param += ['"' + app_cmd + '"'] param += [ mspec.hostname, mspec.cpu, @@ -259,6 +259,7 @@ def roof_setup(args, my_parser): else: characterize_app(args.path, args.remaining, args.verbose) + def detect_roofline(): mspec = specs.get_machine_specs(0) rocm_ver = mspec.rocmversion[:1] @@ -293,6 +294,7 @@ def detect_roofline(): target_binary = {"rocm_ver": rocm_ver, "distro": distro} return target_binary + def mibench(args): print("No roofline data found. Generating...") @@ -326,6 +328,7 @@ def mibench(args): ] ) + def characterize_app(path, cmd, verbose): target = get_soc() workload_dir = path @@ -357,27 +360,38 @@ def characterize_app(path, cmd, verbose): # Update pmc_perf.csv timestamps replace_timestamps(workload_dir) + ################################################ # Profiling Helpers ################################################ + def run_rocscope(args, fname): # profile the app if args.use_rocscope == True: - result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + result = subprocess.run( + ["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + ) if result.returncode == 0: - rs_cmd = [result.stdout.decode('ascii').strip(), - "metrics", - "-p", args.path, - "-n", args.name, - "-t", fname, - "--"] + rs_cmd = [ + result.stdout.decode("ascii").strip(), + "metrics", + "-p", + args.path, + "-n", + args.name, + "-t", + fname, + "--", + ] for i in args.remaining.split(): rs_cmd.append(i) print(rs_cmd) - result = run_subprocess(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = run_subprocess( + rs_cmd + ) # , stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: - print(result.stderr.decode('ascii')) + print(result.stderr.decode("ascii")) sys.exit(1) @@ -410,7 +424,7 @@ def omniperf_profile(args, VER): parse.print_help(sys.stderr) sys.exit(1) - #Verify valid name + # Verify valid name if args.name.find(".") != -1 or args.name.find("-") != -1: raise ValueError("'-' and '.' are not permited in workload name", args.name) @@ -430,59 +444,75 @@ def omniperf_profile(args, VER): # Set up directories workload_dir = args.path + "/" + args.name + "/" + args.target perfmon_dir = str(OMNIPERF_HOME) + "/perfmon_pub" - + # Perfmon filtering perfmon_filter(workload_dir, perfmon_dir, args) if not args.lucky == None and args.lucky == True: print("You're feeling lucky - only profiling top N kernels") - #look for whether workload_dir exists - create if not + # look for whether workload_dir exists - create if not try: - os.makedirs(workload_dir, exist_ok = True) + os.makedirs(workload_dir, exist_ok=True) except Exception as e: print("Unable to create workload directory: ", workload_dir) print(e) sys.exit(1) - result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + result = subprocess.run( + ["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + ) if result.returncode == 0: - rs_cmd = [result.stdout.decode('ascii').strip(), - "top10", - "-p", args.path, - "-n", args.name, - "--"] + rs_cmd = [ + result.stdout.decode("ascii").strip(), + "top10", + "-p", + args.path, + "-n", + args.name, + "--", + ] for i in args.remaining.split(): rs_cmd.append(i) print(rs_cmd) - result = run_subprocess(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = run_subprocess( + rs_cmd + ) # , stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: - print(result.stderr.decode('ascii')) + print(result.stderr.decode("ascii")) else: print("rocscope must be in the PATH") sys.exit(1) elif not args.summaries == None and args.summaries == True: print("creating kernel summaries") - #look for whether workload_dir exists - create if not + # look for whether workload_dir exists - create if not try: - os.makedirs(workload_dir, exist_ok = True) + os.makedirs(workload_dir, exist_ok=True) except Exception as e: print("Unable to create workload directory: ", workload_dir) print(e) sys.exit(1) - result = subprocess.run(["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + result = subprocess.run( + ["which", "rocscope"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + ) if result.returncode == 0: - rs_cmd = [result.stdout.decode('ascii').strip(), - "summary", - "-p", args.path, - "-n", args.name, - "--"] + rs_cmd = [ + result.stdout.decode("ascii").strip(), + "summary", + "-p", + args.path, + "-n", + args.name, + "--", + ] for i in args.remaining.split(): rs_cmd.append(i) print(rs_cmd) - result = run_subprocess(rs_cmd) #, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = run_subprocess( + rs_cmd + ) # , stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: - print(result.stderr.decode('ascii')) + print(result.stderr.decode("ascii")) else: print("rocscope must be in the PATH") sys.exit(1) @@ -516,8 +546,6 @@ def omniperf_profile(args, VER): run_rocscope(args, fname) else: run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose) - - # run again with timestamps run_subprocess( diff --git a/src/omniperf_analyze/convertor/mongodb/convert b/src/omniperf_analyze/convertor/mongodb/convert index 49e013761b..dc8a33e920 100755 --- a/src/omniperf_analyze/convertor/mongodb/convert +++ b/src/omniperf_analyze/convertor/mongodb/convert @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/convertor/sql/convertor.py b/src/omniperf_analyze/convertor/sql/convertor.py index 20aaa76142..c6b36b5f97 100644 --- a/src/omniperf_analyze/convertor/sql/convertor.py +++ b/src/omniperf_analyze/convertor/sql/convertor.py @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/omniperf_analyze.py b/src/omniperf_analyze/omniperf_analyze.py index aa9936193c..368e5c50c5 100644 --- a/src/omniperf_analyze/omniperf_analyze.py +++ b/src/omniperf_analyze/omniperf_analyze.py @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/tests/unit/ast_parser_tester.py b/src/omniperf_analyze/tests/unit/ast_parser_tester.py index c8fa49bc39..f728743c2d 100644 --- a/src/omniperf_analyze/tests/unit/ast_parser_tester.py +++ b/src/omniperf_analyze/tests/unit/ast_parser_tester.py @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/file_io.py b/src/omniperf_analyze/utils/file_io.py index 1d2de6318e..05219dbcca 100644 --- a/src/omniperf_analyze/utils/file_io.py +++ b/src/omniperf_analyze/utils/file_io.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/gui.py b/src/omniperf_analyze/utils/gui.py index a9aadc8df5..eb083bfe9d 100644 --- a/src/omniperf_analyze/utils/gui.py +++ b/src/omniperf_analyze/utils/gui.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/gui_components/header.py b/src/omniperf_analyze/utils/gui_components/header.py index 7fc8ddaed6..3dcf34be69 100644 --- a/src/omniperf_analyze/utils/gui_components/header.py +++ b/src/omniperf_analyze/utils/gui_components/header.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/gui_components/memchart.py b/src/omniperf_analyze/utils/gui_components/memchart.py index 69a0594ffa..f8af87d547 100644 --- a/src/omniperf_analyze/utils/gui_components/memchart.py +++ b/src/omniperf_analyze/utils/gui_components/memchart.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/gui_components/roofline.py b/src/omniperf_analyze/utils/gui_components/roofline.py index 0d5ea113c5..8fb6e36a74 100644 --- a/src/omniperf_analyze/utils/gui_components/roofline.py +++ b/src/omniperf_analyze/utils/gui_components/roofline.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/parser.py b/src/omniperf_analyze/utils/parser.py index ba92bc34f8..7d6dcab493 100644 --- a/src/omniperf_analyze/utils/parser.py +++ b/src/omniperf_analyze/utils/parser.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/roofline_calc.py b/src/omniperf_analyze/utils/roofline_calc.py index f9aa28b3db..987b6694de 100644 --- a/src/omniperf_analyze/utils/roofline_calc.py +++ b/src/omniperf_analyze/utils/roofline_calc.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/schema.py b/src/omniperf_analyze/utils/schema.py index e0da44034f..13d930916d 100644 --- a/src/omniperf_analyze/utils/schema.py +++ b/src/omniperf_analyze/utils/schema.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/omniperf_analyze/utils/tty.py b/src/omniperf_analyze/utils/tty.py index 310c2c10b3..0900fd689f 100644 --- a/src/omniperf_analyze/utils/tty.py +++ b/src/omniperf_analyze/utils/tty.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/parser.py b/src/parser.py index fbc1c34e85..b305b60187 100644 --- a/src/parser.py +++ b/src/parser.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/utils/csv_converter.py b/src/utils/csv_converter.py index 3d8a381a5c..b178439aca 100644 --- a/src/utils/csv_converter.py +++ b/src/utils/csv_converter.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/utils/gfx_perfmon_builder.py b/src/utils/gfx_perfmon_builder.py index c298e57561..c5a77908ac 100755 --- a/src/utils/gfx_perfmon_builder.py +++ b/src/utils/gfx_perfmon_builder.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/utils/perfagg.py b/src/utils/perfagg.py index 5bc9d6be32..0606b4dc4b 100755 --- a/src/utils/perfagg.py +++ b/src/utils/perfagg.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/utils/remove_workload.py b/src/utils/remove_workload.py index d389106e10..02ba864f59 100755 --- a/src/utils/remove_workload.py +++ b/src/utils/remove_workload.py @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/utils/resources.py b/src/utils/resources.py index 23b684c2fb..4986394811 100644 --- a/src/utils/resources.py +++ b/src/utils/resources.py @@ -1,18 +1,18 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/src/utils/specs.py b/src/utils/specs.py index 5f32a977f6..a040fcbf68 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -2,19 +2,19 @@ ##############################################################################bl # MIT License -# +# # Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE From 0125c2179bd9270241c1a596d8041391d7e4b8a2 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 14:55:26 -0600 Subject: [PATCH 79/90] another formatting change Signed-off-by: Karl W. Schulz --- utils/update_license.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/utils/update_license.py b/utils/update_license.py index 4342508c4e..353c4a7eba 100755 --- a/utils/update_license.py +++ b/utils/update_license.py @@ -96,9 +96,7 @@ for filename in glob.iglob(srcDir + "/**", recursive=True): tmpFile = dirName + "/." + baseName + ".tmp" file_out = open(tmpFile, "w") - for line in file_in: - if re.search(begDelim, line): logging.debug("Found beginning delimiter") file_out.write(line) From 302373ba8971611b95d222ae2f1cbaa0593f40e1 Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Mon, 13 Feb 2023 15:30:10 -0600 Subject: [PATCH 80/90] remove unused file Signed-off-by: Karl W. Schulz --- cmake/miperf.sh.in | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 cmake/miperf.sh.in diff --git a/cmake/miperf.sh.in b/cmake/miperf.sh.in deleted file mode 100644 index bf600808dc..0000000000 --- a/cmake/miperf.sh.in +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -################################################################################ -# Copyright (c) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -################################################################################ - -set -e - -SCRIPT_DIR=$(realpath $(dirname ${BASH_SOURCE[0]})) - -OMNIPERF_DIR=$(realpath ${SCRIPT_DIR}/@OMNIPERF_RELATIVE_PATH@) - -if [ ! -f ${OMNIPERF_DIR}/omniperf ]; then - echo -e "Error! Expected omniperf installation in ${OMNIPERF_DIR}" - exit 1 -fi - -eval ${OMNIPERF_DIR}/omniperf "${@}" From 93b1b15291f51f46dd958dffd9766d43d2d356a1 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Mon, 13 Feb 2023 16:44:43 -0600 Subject: [PATCH 81/90] Change CI tests to reflect renaming of analyze options Signed-off-by: coleramos425 --- tests/test_analyze_commands.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_analyze_commands.py b/tests/test_analyze_commands.py index 051365e60e..e79cdfef9b 100644 --- a/tests/test_analyze_commands.py +++ b/tests/test_analyze_commands.py @@ -145,7 +145,7 @@ def test_filter_dispatch_ids_mi100(): "analyze", "--path", "tests/workloads/mixbench/mi100", - "--filter-dispatch-ids", + "--dispatch", "0", ], ): @@ -162,7 +162,7 @@ def test_filter_dispatch_ids_inv_mi100(): "analyze", "--path", "tests/workloads/mixbench/mi100", - "--filter-dispatch-ids", + "--dispatch", "99", ], ): @@ -179,7 +179,7 @@ def test_filter_gpu_ids_mi100(): "analyze", "--path", "tests/workloads/mixbench/mi100", - "--filter-gpu-ids", + "--gpu-id", "0", ], ): @@ -196,7 +196,7 @@ def test_filter_gpu_ids_inv_mi100(): "analyze", "--path", "tests/workloads/mixbench/mi100", - "--filter-gpu-ids", + "--gpu-id", "99", ], ): @@ -490,7 +490,7 @@ def test_filter_dispatch_ids_mi200(): "analyze", "--path", "tests/workloads/mixbench/mi200", - "--filter-dispatch-ids", + "--dispatch", "0", ], ): @@ -507,7 +507,7 @@ def test_filter_dispatch_ids_inv_mi200(): "analyze", "--path", "tests/workloads/mixbench/mi200", - "--filter-dispatch-ids", + "--dispatch", "99", ], ): @@ -524,7 +524,7 @@ def test_filter_gpu_ids_mi200(): "analyze", "--path", "tests/workloads/mixbench/mi200", - "--filter-gpu-ids", + "--gpu-id", "0", ], ): @@ -541,7 +541,7 @@ def test_filter_gpu_ids_inv_mi200(): "analyze", "--path", "tests/workloads/mixbench/mi200", - "--filter-gpu-ids", + "--gpu-id", "99", ], ): From 6f498686c38cf5456d7712199c46ac657125b697 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 14 Feb 2023 09:54:29 -0600 Subject: [PATCH 82/90] Tested out the new make license on convertor2.py Signed-off-by: coleramos425 --- .../convertor/sql/convertor2.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/omniperf_analyze/convertor/sql/convertor2.py b/src/omniperf_analyze/convertor/sql/convertor2.py index df4e2e5135..cc2b89e6d7 100644 --- a/src/omniperf_analyze/convertor/sql/convertor2.py +++ b/src/omniperf_analyze/convertor/sql/convertor2.py @@ -1,7 +1,9 @@ #!/usr/bin/env python3 -################################################################################ -# Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. +################################################################################bl +# MIT License +# +# Copyright (c) 2021 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -10,17 +12,17 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -################################################################################ +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +################################################################################el import re import sys From 1d82bc67b08e50050d19fe3bcee75b22189feba0 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 14 Feb 2023 15:20:37 -0600 Subject: [PATCH 83/90] Resolve incorrect dataframe size in analyze mode (#84) Signed-off-by: coleramos425 --- src/omniperf_analyze/utils/parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/omniperf_analyze/utils/parser.py b/src/omniperf_analyze/utils/parser.py index 7d6dcab493..cddf4960a2 100644 --- a/src/omniperf_analyze/utils/parser.py +++ b/src/omniperf_analyze/utils/parser.py @@ -650,7 +650,7 @@ def apply_filters(workload, is_gui, debug): # NB: support ignoring the 1st n dispatched execution by '> n' # The better way may be parsing python slice string for d in workload.filter_dispatch_ids: - if int(d) > len(ret_df) - 2: # subtract 2 bc of the two header rows + if int(d) >= len(ret_df): # subtract 2 bc of the two header rows print("{} is an invalid dispatch id.".format(d)) sys.exit(1) if ">" in workload.filter_dispatch_ids[0]: From acfba464ed5e5cd2a49d8ad256827298d2cb14df Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Wed, 15 Feb 2023 14:44:29 -0600 Subject: [PATCH 84/90] Custom metrics for mi100 Signed-off-by: Cole Ramos --- src/omniperf | 49 +- src/perfmon_pub/gfx908_metrics.xml | 737 +++++++++++++++++++++++++++++ src/perfmon_pub/metrics.xml | 163 +++++++ 3 files changed, 933 insertions(+), 16 deletions(-) create mode 100644 src/perfmon_pub/gfx908_metrics.xml create mode 100644 src/perfmon_pub/metrics.xml diff --git a/src/omniperf b/src/omniperf index 554e59a6e2..0c957b29ed 100755 --- a/src/omniperf +++ b/src/omniperf @@ -343,7 +343,7 @@ def characterize_app(path, cmd, verbose): # Workload profiling for fname in glob.glob(workload_dir + "/perfmon/*.txt"): print(fname) - run_prof(fname, workload_dir, perfmon_dir, app_cmd, verbose) + run_prof(fname, workload_dir, perfmon_dir, app_cmd, target, verbose) # run again with timestamps run_subprocess( [ @@ -395,7 +395,7 @@ def run_rocscope(args, fname): sys.exit(1) -def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): +def run_prof(fname, workload_dir, perfmon_dir, cmd, target, verbose): global rocprof_cmd fbase = os.path.splitext(os.path.basename(fname))[0] @@ -403,19 +403,36 @@ def run_prof(fname, workload_dir, perfmon_dir, cmd, verbose): if verbose: print("pmc file:", os.path.basename(fname)) - # profile the app - run_subprocess( - [ - rocprof_cmd, - "-i", - fname, - "--timestamp", - "on", - "-o", - workload_dir + "/" + fbase + ".csv", - '"' + cmd + '"', - ] - ) + # profile the app (run w/ custom config files for mi100) + if target == "mi100": + print("RUNNING WITH CUSTOM METRICS") + run_subprocess( + [ + rocprof_cmd, + "-i", + fname, + "-m", + perfmon_dir + "/" + "metrics.xml", + "--timestamp", + "on", + "-o", + workload_dir + "/" + fbase + ".csv", + '"' + cmd + '"', + ] + ) + else: + run_subprocess( + [ + rocprof_cmd, + "-i", + fname, + "--timestamp", + "on", + "-o", + workload_dir + "/" + fbase + ".csv", + '"' + cmd + '"', + ] + ) def omniperf_profile(args, VER): @@ -545,7 +562,7 @@ def omniperf_profile(args, VER): if args.use_rocscope == True: run_rocscope(args, fname) else: - run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.verbose) + run_prof(fname, workload_dir, perfmon_dir, args.remaining, args.target, args.verbose) # run again with timestamps run_subprocess( diff --git a/src/perfmon_pub/gfx908_metrics.xml b/src/perfmon_pub/gfx908_metrics.xml new file mode 100644 index 0000000000..c38a8f8118 --- /dev/null +++ b/src/perfmon_pub/gfx908_metrics.xml @@ -0,0 +1,737 @@ + + # CPC counters + + + + + + + + + + + + + + + + + + + # GRBM counters + + + + + + + + + + + # SPI counters + + + + + + + + + + + + + + + + + + + # SQ counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TA counters + + + + + + + + + + + + + + + + + # TCA counters + + + # TCC counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TCP counters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # TD counters + + + + + + + + diff --git a/src/perfmon_pub/metrics.xml b/src/perfmon_pub/metrics.xml new file mode 100644 index 0000000000..e66531affe --- /dev/null +++ b/src/perfmon_pub/metrics.xml @@ -0,0 +1,163 @@ +#include "gfx908_metrics.xml" + + + + + + + + + + + + + + + + + + + + + + + + + #xlu - TA + + + + + + + + + + + + + + + + + + + + + + + + #xlu -TD + + + + + + + + + #xlu -TCP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #xlu - TCP + + + + + #xlu - TCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f77173a2f1c1761829f91295e76d838c24be6685 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 21 Feb 2023 09:47:45 -0600 Subject: [PATCH 85/90] Catch exceptions from rocm-smi (#85) Signed-off-by: coleramos425 --- src/utils/specs.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/utils/specs.py b/src/utils/specs.py index a040fcbf68..1bd8b0b5ed 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -216,6 +216,10 @@ def get_machine_specs(devicenum): ) = gpuinfo() rocm_smi = run(["rocm-smi"]) + if search(r"ERROR(\S*)", rocm_smi) != None: + print("ERROR: No GPU detected. Unable to load rocm-smi") + sys.exit(1) + device = rf"^\s*{devicenum}(.*)" hostname = socket.gethostname() From c4eaa1d45b7a27f0a5c8bbd09cf0b3c1f9825ab7 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 21 Feb 2023 12:40:41 -0600 Subject: [PATCH 86/90] Specify returncode for rocm-smi error (#85) Signed-off-by: coleramos425 --- src/utils/specs.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/utils/specs.py b/src/utils/specs.py index 1bd8b0b5ed..2ba8484730 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -148,6 +148,9 @@ def gpuinfo(): def run(cmd): p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if cmd[0] == 'rocm-smi' and p.returncode == 8: + print("ERROR: No GPU detected. Unable to load rocm-smi") + sys.exit(1) return p.stdout.decode("ascii") @@ -216,10 +219,6 @@ def get_machine_specs(devicenum): ) = gpuinfo() rocm_smi = run(["rocm-smi"]) - if search(r"ERROR(\S*)", rocm_smi) != None: - print("ERROR: No GPU detected. Unable to load rocm-smi") - sys.exit(1) - device = rf"^\s*{devicenum}(.*)" hostname = socket.gethostname() From 7c9d317527a84d5638616569b86ae4c4097b84a8 Mon Sep 17 00:00:00 2001 From: coleramos425 Date: Tue, 21 Feb 2023 13:02:43 -0600 Subject: [PATCH 87/90] Comply to Python formatting Signed-off-by: coleramos425 --- src/utils/specs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/specs.py b/src/utils/specs.py index 2ba8484730..6ea7178c81 100644 --- a/src/utils/specs.py +++ b/src/utils/specs.py @@ -148,7 +148,7 @@ def gpuinfo(): def run(cmd): p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - if cmd[0] == 'rocm-smi' and p.returncode == 8: + if cmd[0] == "rocm-smi" and p.returncode == 8: print("ERROR: No GPU detected. Unable to load rocm-smi") sys.exit(1) return p.stdout.decode("ascii") From 4b1a41bbc05d1026dc0bf4e588a351754bd07b5b Mon Sep 17 00:00:00 2001 From: "Karl W. Schulz" Date: Tue, 21 Feb 2023 14:44:03 -0600 Subject: [PATCH 88/90] Updating changelog with example v1.0.7 change --- CHANGES | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES b/CHANGES index 0d3f2025a1..0c1e9550d8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +Version 1.0.7 (21 Feb 2023) + + * Improve error message when no GPU(s) detected (#85) + Version 1.0.6 (21 Dec 2022) * CI update: documentation now published via github action (#22) From 8108a13b7f7200ccf44313d41b8345d582369aa0 Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Tue, 21 Feb 2023 15:46:35 -0600 Subject: [PATCH 89/90] Add v1.07 issues to changelog --- CHANGES | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 0c1e9550d8..df7d31d386 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,16 @@ Version 1.0.7 (21 Feb 2023) - * Improve error message when no GPU(s) detected (#85) - + * update documentation (#52, #64) + * improved detection of invalid command line arguments (#58, #76) + * enhancements to standalone roofline (#61) + * enable Omniperf on systems with X-server (#62) + * raise minimum version requirement for rocm (#64) + * enable baseline comparison in CLI analysis (#65) + * add multi-normalization to new metrics (#68, #81) + * support alternative profilers (#70) + * add MI100 configs to override rocprofiler's incomplete default (#75) + * improve error message when no GPU(s) detected (#85) + Version 1.0.6 (21 Dec 2022) * CI update: documentation now published via github action (#22) From 04e3f5277f3bfe6f082d6f05e1be14f1c6bd19c7 Mon Sep 17 00:00:00 2001 From: Cole Ramos Date: Tue, 21 Feb 2023 15:53:35 -0600 Subject: [PATCH 90/90] Update CHANGES --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index df7d31d386..f38ea5f1a1 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ Version 1.0.7 (21 Feb 2023) * support alternative profilers (#70) * add MI100 configs to override rocprofiler's incomplete default (#75) * improve error message when no GPU(s) detected (#85) + * separate CI tests by Linux distro and add status badges Version 1.0.6 (21 Dec 2022)

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 _ZQQn$0*59VUO2%a9mUz(HA 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⪙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 kgQfyhG~oOG2Si_@% literal 0 HcmV?d00001 diff --git a/src/docs/images/import_dashboard.png b/src/docs/images/import_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..29be7ea5848e403f6bf260d9454c9ee3bdc53408 GIT binary patch literal 58539 zcmcG#2T;>p(>RKXA|gdW5m1VXG!c>B0!WkI2^|&b(t8Qv0To3Am0m)V8UjcOJs=`Q zT4)IpdMAVc0-=Z8fIjd0-MQb)|IXaGzZpkz>YhEjd$zvQ(@~?n#CnN>f`V54iLwC& z1tlj1#o6YI7sxHOmm7bQ|2yMtp!S%ewC^UC{Daa#QCpFMqCA%7=-GMlZ)%SxX5JJO zbgd`<&UCmJzM!C(S5Q}0Gzzd@B~phNqYxxgGZ#aS)MtgWulSS~0~sjKlwV}Z%?f*> zUzFEXlBI&leCnQX*!-O1T2R?^O^$K@dq+O!OT7B`!?P|vLUw9}G2}m_Je%?4;+f-M ze5I~rN`d#)HzPwGe(Q)GSuZq?ONrG3s2`%ZUZvJDAt7WXSL6hE3JML)zykWyzZf3c zT@MS$w?0qI*E#QS`Lu1kr|T}o?^yAK?Zf1#1H*`@)Zx3o)K88?K_O9WK(7#83RJw+ zTITBa^aCet)FrR>)2?s5h1=&Cgs(xkV!al$^m1~XBTdiM6`I;7D4+I+HOFIs54C9tK^SdL%nRH&ofJ>oe4bP5X|`>^ z#|eplUVU)_Ry|mVvO?tK;$@QwM?p9h2iV?4h10Qm;zw7*ei19j(z$-ZdTOF0hun9yir&~Vm#sX(T;nlbxv|KnI5YMnPm%iK=_t3C zd8}a%|B0-jvl?_zPlCjcr*QtrVpTL_g@p*re1^Y#BVr)6thpXnuxC`UNw`%|%Su!iC5IM@rV_?? zO@FZc{+W}-6h=2RDP}9(PsUP& zv8jA4_S&O#sQne%^U*m{qxXBB*Fu?w$r8S~_KuR8&*{o`a)L%6hwKtX+}7j*7(YGe|yEOkLtQu+zp zJ;@J}6zb#bmdyDh7Fg;W(7JiB+KKAf&f%o^_plblF}I2>NW~s)E2S7>u?eXcQ3pgM zqXeIPNlWS$ZeHKZlIb?vN&pr-aRGD`M3(*H=2{tFyZiV2;ZtWBAUR!jPUpV+sDZui z9Rx_`r>_<9A-6SwgxSUJda&o4Ak&G=YRl?#mnRo+Z#2PpqrTF~8N%p{z>3kFx!&2+ zl`KhQ(s_6$95VyVjmoEtC?GlIppb1g4W^{Z{4yDDm0h7)m@Z@KiX(J&Z72dr_)!Dg zUUXZpFNOO3GA34zz{6TGhCsYC`{{Di?fSD6$_2bmel~^&E%DA@>z^71DM}|MiadE( zI|IkMyCG%XKJ*R$wNmo;_?%AnnB&!_cQ#e{j%H=W2+LUhijkL?4;0L2H zDSIL^62edW^`@F|h?Fed(Ma1(+~FMa zwW>wE-%*cGWg?V;R__!*ie`R4itpWY_bxZ)20wpbVJmg#igyhqHg-$Eyj3d2PTK*d z-pOk85EqhLV&;G*l&JF-bjTOJpk=;w<_{*jRNtLru=a&oqU8Lo2V5eCAn`6S>4F6v z_C^(luYY%1C3#!LK0^<LEH7$zsC4url&RPHw>ZwiuU(Y8VUg^ z?L6{<;=OB2_SzvI7fZ_=lU_V*eY5|({f@uQpd9T3T*jMxjEcz|fUZ2TXgc~D2RG*_ z63DWQUg1WpPkrvs)(56aQe&@pok{LA5hbMou7DS66sO!0R-xaBRA-vbxW~c|)aPdo zK@F8HZ@-sp63=d&3jg!2WUW%(rO+>Ew=4Rd;9{kcIrBKCY|_SB$%ft+{g>`uoS{~@ zDQ7Xs*Y*)E6I5zhimmhALQ~4PoI3?YqCTwZ%x@BHQx<7`CKJY`YeA=`bKa>hO5*^$ zZauC*L(_^SO~Oa9lpia5^*oLl`Az)SbI~(7{0> zhtGz}zem6FQJmb~-$HddOwX@0?eD`<8)zkA{7~bZ@x!Pxi<-3+KX?DUbj<;J`IiGx z*SgdBPRBDvUuEFcLoDBr*?amb^7UBjJ=&A@uOG4)SgeXm#A5tbL3>j#6^KY-L;{n+pf(D21huJ@Ye~n-f=S zTkUGDj`R#|H%AZ9fKzi*rq&V;E9BCklVavVq`KzK7{MQfb8=U9^bYE5HO3o&zo|P2 zU#`0xeJni)bRPo20)pwf>rkmL3e0ZhahyOt{|^PF9xqnIeEaho0Kgz_GE{SDD%i?h zo2B52uFhb+NZRe(CwJ|L_Lv%&TB)v^T;z@XgRJ|C(-u*le@S$oK*q+-~SB zNEEA18+42T7$KIV5Jw(>Hnu^=Dvv>>6^R#bRii@;Vxms46E;iM zWtaw43Nj(V>%V)#{*ehyK})rcLh7bz6>5zLIt~w+16|dq-JMkI`QElWPmYQ3%H_ND zraS(4%~9o(s;h99ZMT5K<$cYSp8AsE5tbf)tF>`EAg8|Rw9u+HS_9n(_QKF*VsDQ}#)IIZfNwxoHjX>bVa^XAeW)0P^Uh?72sr<9y- zo)h)HBbq`w{gue$7WM~x;4*r%x~?&f(W*M6+xF!jnSJ*O)6kXps7^K1SR>8@*Q4lg zDml+aQ~VHwS^GrSPvEGpp2|3GYS!&_iH98rJ>t{y^kSX>IF?QJiDYgrO`k_ed(aP- z9xDfUA)Z#@rr|8>|5)XIy>;KTf@cK7y}kZ=UkiuT)bZ+no_ooa=+LH5D+Y!8-QT>d z!QtW^K2+N3S~Bcfi`vUnXOSE^io z5*TY$V`0%00(`gQ@zdDr-~?AEvbE-`(mQJN-^51__lv(@;M$}CB>SehX7PrjJf@9$ zgZwL0<&Q+*h+@P6U9g#Z$aX&a&-=u$KpT)GQe+jrc&*nmWtD}_4R!_$DPRGITE~u$ zOq#2K<&I~4+M2}8U5kV4r79P-5t~lxQSva8S!#!eFa$dZmnnKMx>T|zybvmJ0!l6F zN?2`MiD^0Pm*U%_aQd-o*Yc4Mx9dH$)ZKnw8!|hmsy*xihCr7hcTKjQ@a%a=nN2nC zr{}M4Mjsq3CUg)EYC2v3+b??Y9b~ky?%Noa_%;^uth*OM`}q4_25FWZ?S`L~A4zHc zkctQ?bFjE%GHgZf{Owx{s|Pq(N|^2hhR$#b%1f6YS2-t$bUqy&2+z@yT)fS4ue@9-@cP0vX%Cl~T&|$!M-2y|>%w)Q>%e;W(IhHW z2FpcD9O}Se?=k9WNkD(79Z5+aDmOKuXYSC~z8va&ujZm_AiCIE5%VKdO-FjPg|A zQS5V3crsGc(A2QK3E3Hy{{>+YipjaarExW6V+3$IqtutSPKTaKLYD@(}&LA)pDH2)}fntKNnUk?i2-h3u=S z?)tK^!p&?r#(y%!&x%?bVjfwHs5}oy0(djBg`iVQK7y#UaxgwuZ=ngnj}KUWO0Y~hDYY}@3}+2)2cjMgYbY= zt@^%KKDY7#CB=Mq319tQnijyvcFl@vioUyEW4aoW=8(^(`~-0*x+mX`jU`F7geKY? zAW4H;$QZrM#Rm>_;5yGzAqt9bglGy%4<+ZkZ1C4dmf#!t*L5y+^+QUG$GXz(ZL9MCKtV+xk86{5}lEsv(3^zWlpoT}gA6Je`uPX&}l|*8(9l?d_ z%IEWL9w@R&z=qK091=X$tl%6EHIytOCA|+?XnjCrf+%%3A)3gmjOp1fD=Hn5N+X%* zk}+wek$Jz%-+YBcmG3pAd1BR&d%pMY7KRf@qIr~^Iej8A2N@$*Fzua zzHd6NX-ePn*CsCUbKBJpXN~B={TCmUvn?Nx9|22bmkO%XAH~vytvm7g@HcCWOH>~d zFD!Nr7m)SQB$`DVf0o0qUp;8qcGzB9fNaQuVjx^-Nyhe!J@o0gm7zM0XPL--uO*)U z2J8Z+AVJ2`d8j(y@?M!Aw|2p9=$FyVTflBE`XU#i^CjWzhRZddt3!%nnbz_?@JecoRt!7LAss8%YlD^>8&tu` zmhRWgn%vqR*G=pJSs}EuOUfWyRr6K{YjdXD@EiG|R;*?nPr0R+UJP`Q5_g##2E39p zz+XQ>J~b`YqIFVB^ZG>h$JH|CyzmE7DT>olZg~t14(^AUy z@RZ$FFDo~XOy@}cF(UR0?jrGbQ+-$GT$8)Vw(bgWO4{AVeB`A?=!mScu+@b^e=6Kf z`$;5vYsNcs5d`Y>qp?25csJ^7(Tx~q_UuOau8G^p_`j|NZ+#x~uA4igCoJ5nk#iFm z^zA&bw9jQnVv|NFSVk3H-m zYFY?l{Jj*UVR8-S^88T%i$;TE1)BpLj8x2fk$?EY8bV-kQkQq^_(XH*opb3uU)bfn zwg~fsok(*RQfFCyhHi{eLE)v8E#r&LhT5SNM|mqX+i=U9fb({+CBO z?k1~m458NzfL0f_^`hxk8YBg_JdSH)?m5`oh77|W>9v+z9)`Qxt;LBEFy)bjy&nfw zM*0(^GTq9GulKr`A69948rtHuDp_gKm9bR@du?-=->uIC=6uqeEm-P#aYr|;0A?Je zRXZ(G^eikagRzltTN2;T;1K3gyKj~0WrilIr2bKtExVg&fA_wRW>(oqV5b%9!L|~b zplLX`<|=&j zmm#DUD~gGfA$|MqRV_lGWCje{bMV)oY91(Xp~rm&$+22BWWu7YH8#!ihyi+2KOUGo z?#^c2dMZ-axNCOc8s$8w1z&$SGOvV74G5P?ISgvU6eyYP^3CP=_9x`V??I&Fy#(cu zPmP|4p-Qm^W0~~8w6}(sgP+YMxR3dURIvhZy)zfr5%JkWJK`dbknUZ5qd_u#RotJ_ zOju>@zox#(0J=ymv5TI8kFE>tyeI{&QJJMI<#LF`H~QAkiU)oU5o3|niC~N5eTKE! z*5`8mFz?&zFL9&jnSGiAJ!aQQ)k93oF|^>j_S404xY`m6iFI6BJ_Ze7t_oT7ekn)K z0t63#y1#xc^AP%R*WGP(g_p?sGhwdI$Ay&S&gYjFs1Ox;%d4qlFy5pn{87y6U`DPB z)_#AtWI=aK^Mouvlsz3+)=7U-p?Q6{@R@^|yX3tMJ*dsM!YRcG*v-ttgZL#5{p4vfcN(>B?+2AlU!vq0*e>>5nbhea>by)l{3t$UBR%iW=OMCcHe#VNC z6cpZoG(8+rz}KS^1X{a#dO{7oliY_F5o*3aAvy8!UCwShDDo8$iWe~8maf&M{B8zX zCw&!c0_aa_z^q)SCt}mV7D-I?;2zx?GX5I6?X+~07+AR@-wZ|;`g*r72kEItj@7+>^$ZcdLmW3UH3qkTV=qtzBmTgNCzrcPBR>@ zf01wOjvpn7G*kr@EOFv$M7HXDhxae3z9{P$F7qrziudjlRyDOs`0Fd2E4^Hjge#B? zgd(7NfkZ%T%XmcEeCeo(_7_}{`Mxj4nGPK+Z<;b{HUt>h6l8-h)mDCf$y$wjW)*jt zd!2W>`)PSQGD`nb(#~?Xzr9Ny+~#oC6-9rIb$Klr1GNl|M0b$lkp#i<%@pMC z1V(ex?~i#$Jby;89E91BoOcv4O3~I$_hiIk5Tr`+!>& zO&#KVt+G^CTF~CL3PXU+{B^^C?ilDbGewpVL2@97DV*=syR^4Izoj`dOR!cV^S4`l zXAGiZ_KpYTQy2MegLbl-wzO^h$B*CJyxz>n>9poEx!0C4RSq5i1UGe><5z#{Xybx3 z3}D^TQv=-c%Wo6dd{8e-?hE?g@ZZ)zb`?`n*8O=-?>D7WN595WNw zBi~o99meK|DxH6Av=hzKAoOeQ3c;LjIPOJBPgkK%bIvDxCy=HAfS#~b`e7fpX~6a2vE(Z}o=C|;enyi?C`^$4c3WZ=t5W!MbvUl+Ac z-%?i^3Vi=VMhCq6p*ofInjjT!m$Yxgy0v|g7VnvKTP|;GE5Q%`m1TcULu{$oOYD$_ zLq*C)3efH7JBnLhD*g0bn{GYaLj9jUT~uvrSD!^-OQx2>z2c!rT?;jH#q3Z1(tP_r z^;C-%h^%~rl-c~lC}iXAn<2T$aZ0z%t9DlM#r}M~eJ>q6SF%2r;4HbS%+X;MT(v`9 zbxB&Ne_kG%Z1DJLH}KrqUgbE(VZ5X;KRb1)6Ki6)4)vLE$GuCTWR-Esyy|6~&f%7{ zrRRyA-=;t|*ItA(2$lR4@I`JocQY2VMO?}t*3_3st=zWkDBYFV%rnGPK7$Z{cCSvXG4{#6HW|P&TSZxg z7lenq?M9E$1p(Te>g5V9F|Jh#!%;V^y%<{ zN^)#?Za$MKCE}}2K`N~O)+P597Np_OgGa{WL$l4pho0SV!n7iH@>-6&>I3CZzUxL> z6EgFYl^X9Cd-@v;NjVbN%~(pKjE85}Ci_CTnG6iG7egTOcFe9qtNYGgy51^@xa+l*jw*!=gZ>_RNGjUjd`WR*|(< z(JU6SNb-$2>wSxi!>A|<%4vt0EB;p9OlHngQ%^pbkhaTvclIz7`3VR7&i%q;Aqev# z9TkCAP)OR;qq7#fw`!^v3=raGHK^&BmnjLCbQ;bqfJm&YIpSBEQsz@v4yHZij+d2I z<|`|PwGZQ8m_NF|#3BUkT%I(8rVpm6bWFV3Z1ib2eZ<7} z07uP9!N8K|;ObH><$v z7(K~Rj7O1`$oSTMCKL4}f2PA@?Xf&YbX}odLrUmk@Ri3f@2zA);|^jh=p5y;G#OV+ zSI%7ghJ3t2daNriYzhiJrXd7x@3NxNT}Jt9Lzwk+`77=RHP!d*Ot<869Ws3u**0Zp z5e@nLrdyzzhh<2X1C32l9e)dL-{oBz0(RNyt8k?Dlq2pPY>ai|ha|0As^CyHDD!iV zgK7zg!*&NT^-xYMDE$Dn+dFV`xND*#;hEjzh8WhOGwAw*qa!Xk05tMBzctMbCgazv zR-!M5JqTMFWpt=jWTKnk>^`P^iqhioaMrFQEyvSEmLlOVy$-bapXa5C6V7JBR`q2*YZTaJ@Qg~DxqzB0-Xb#t0yM!7(E}z1AdJ{tdrmdto<{ch|IB_Ag|6&2E6b;y{voXB+Wsr_3@t1A&K{e z`dZcuEyww}t-Oj9Gvyt7;#yY^JDTiu&38-o=k43gxOt>1mz*nOQdekE(kr8+hu!q( zIbD)^YcFvrC7XiV3Q+ubs@dudZl9E%<1&J_MnOFXWPtL7CkxLC!|*ZOKTF z(*1U~VX=oJWGy($k?c$g^$R-mg4C9L!uT&2iu;@Bt8M}WArclABH*da!NC*`XY86` z*V~s1DP>J!HiOb_z1t8W`GW0v&{j!euTSr>Uy_bZQT}ywJ;uLQ zQ@Dmy_=W8`Ay!4_Th`mp)%Vfa0%EB4-H^7>Lb!^YO&Y*xwdN28s_awuM#?%x!g`L* zh$vlCsov>HEU40sf-Ff<&G=8+aaiCt(febG9W|Vq&x2u;L?1}Zu}|9b9s;gk10I2N zCizzq2Chz(F<3Diu*Dt~UV_VxWRrajDI?Ep`@|V;$vb9LT0W8Uww8galw8ty zM^Ysn6iy3S&tsRLBjhLQYkH5B#Vgi1ynB0?xeVyc4@L2`Z3|<2D|~_nk#L*E(L(z~ z_dIDX2e_~s1oDiYTExcYr>=SuGXLUknbTqJ;|(~xz%{Le1??C2s1a!=pkgiMhVK?_ zvk(1;TjBJIF8<$rJWvLX4^&aDRo}t>+T10XS-VM+PGr8LpkVtO)>ZgM4h)=r|09~{ zs&Lv87WRem)R{_g8b3T~``-eE|BFBI|CQ76|LdSyFMT-9%JHXvdu?jg2N#FF7JJc(tG66}4p5%TZM;X@746uSbe+Z^=|U zEkGA^G^YQCRmqXz`xFE4ZqWV(_6m`I-oCa0UFpAifF8sVpy!K2dmH2$ z7XyD0@nbcZe=dl`KGRUEavYHMmhI2u`g=Zd?h$)fz;;q|*JVKR;N^Uy28M^x^7 z7u+|pc^kPoE;EKK4=w(ApoLUsw zSGs7WidXK&)Zh@rcZ={G zFVotIKM`&TaS|nG$l3GUMWHjklV((Zsm8;5!-9?B*l3hmcJEH|DdH)*GHlK=yaS*f zgp5V-7HusVq;s7v?r~>Jlj6IC9s@p-;??eZ*7&f~=IO<0@}BES0_Kt}5wn}**!z~c z?w<*B0?ft@lg19U%39M|>*we(t;Hr~{awc0_?eubgPJe+b{=iLxryCLF9TxhU(bK} z;5Ge{dXZBcd@Jd2KXZ{$^x>I{Ll<6Av)?~jd4C)Hd27Jtn7@+to$fI~w>e~R2xvyd zIli{l_Xn*t*PB7-TiJXbHnzMiwOXs}plOxZdwQ1sm=16XRagb%JoF}@h2=r{duE}P zqkV7Z;jix=^S}Oe=JnUF8$H|O$(*mLO^nK{Th+_s1q$K{bmr@{JkL`B2VZ9zK*|Sw zgB=S8hlKv-R*jn*Jo90`7=$ZFAGSEn(Dh zy8CG=!?R>gLPxj$OJEmG$r&t^Oj<=38l>NdSxVg>*O3Q5 zP>GDa%P*X?!+!SK{}>uTkyBei#TB(>{9*OKM7(qDGFU`0(tj$rn_ax+;?N(KVjJ?c zI7?ocU5oGmFHex1kN+PA zO*}gD)@z|lO6d>os{SMXfK5)y9~bHAhJFux@|%i2jpk778SXdxH7h}!FO1#EcW-xB z1(sR+zB!$$;3P053?*j|N$h(MNz6&y`8PiVvT0CvpOoTxI*J0!UnVd)NT1QSCI6>^ zRIaJ;t5jME$am%sT8@evt)^$949|YY{<~?QZXlH|j(+4cl1M>uY?~Ce5qiG$DE8`U zB$eXZR9A3w=nUWCH2&`t-TmT4fgAbw$R0mV-m`xf#*wosFU#yG{JoKBn+1H9(#~n9 zi{e{smsMz;ZOlg{JV|Ee@`R;jX_p4TcaTNE>Iw?ljR&kpTT$H(a{f_h1JxXIL>1m# zRc}Zy9i9&;i4L|Ax&G1w$^#!31BK*dIB{fGvQ72BiuIE|O)CjwGYdpAKdkVptrNQ? zYF0TJtR5jP-grIaVR-m8b3|Pb37rbSa}(%%2Q`g#8=oMUdas!Lm|OY3X=d#rDQ?$e-<3mp^!U64cG{X&JFX0_SBt8QzCdRw^Wy|kwj*Y|Yym?&O zH$^f;Ptc%H+BJp;?D=GPj)&A2J@ZBOkDe3QqzBx{bVr|QU{L<*JiKntv!FMZl)95t zFr1gcctQ=vdDaqgzq_;$!$S*q%?F1PG8VCq%vb{4Q+1t>Q!ft`yY~$zH}!gpW;wa< z3VCn0zg^UM?iOwgKGH%QDA%~OP?2+T>ThKZc9+E%81nELI@){)cCT($35?moqG#_o}Rw zjMXQLkokb3>~ld-lHnaO-)D_WTM$KKl-&GbBl>HQ*tBeDx*n?_%9nCK{n~@yD&rUT#}LG>|usz6`H6 z`R$yFD9(aSzm`Y=fYmgO!t|SIG&e4^6X=z5eQD78`x*;rP`n^sX+pJm<8r)dRmL*L z(vK@s}WkJO{y zuX^U`=$etaq(yX$6zR=lrG0O**edYLZY3bV6p(M4d+L zIo%iJ^4Kf*U-h#;^sOqk? z?z*GH-SIy@Q#)ms5~&KoB(9YSu^QL4p%lv|%2OHN3AH?^?MvaJGTdp2RtAUkunWbg zmo=@`Ot-v?Q)m4>_N>qJ=V>6GTzp|te;aC?G={H=F@5tmSZBCO7$S?mmdovg`wm{Q znJPn}1Bw(!GFC=NNh_0$P##9G-|KrM`^Pa?FaLQCwl5cCS{DCuio4eEJ6g=d_|}`I z+$nn30)9pG@;*FOdL{2==E}i zUUh}Q?0A9_5h1D;wmdFgtL6~6suFG+^_ID#(EnEDlA9|;SZfX>j|wCyw;gB4JuY!# zI~G@9^rGYma{dlW8g4O~>a3VpWEH_{6H1+E^LdJ1rLqvtoq1q;0U6 zTQbUXfLYB`1^Z*#CJ_IIL+g-!q#oDyGma;nYfp1!Fll>*D$N%ynsei7o_It%7RBdX z#pxC^xi`m4@C&EMb|g8ktb1MHsCc4VQ|vAKd&+)4Z%6u`>>4G(Fg0C zRysguuSS!0L>UW>xIkIz`6h0rj6I_R;vG3uy^ituv40|cAaWHZG?QttUmTlVA0xK7}#@d`+H0pTSVB)oAFU^-WUaRK#U+s?!X|`3rwC zvODt|-^nGHJxy*Z4QhV%N4uPsU(kLR=>j1aSfu>1BByy4W^KyQLwoPPO;-Cz0kDX zN+yO?UH1&h6eDQn^dBqMuD}wr{6LBo^mc!>P{haEvyNY2e^}iC=A&X%{GjHr@lU?{ zw-WAd;KLqp#7`$Aoq2bN&H3OSvmpLyotSNVP6`I*we7v>Uqr zeOr#3OP2Aph2ki$u>eI?K#VNb`I86sEmoGB6Gqzi`_q3MzaVg9Gag+*)Wlt>;&oN;h`G2PDy|X&|eQSZHDeTXPvtJsEf}SM> zeLY^nj$!|d37rc$-%8fR{WU6~>00NrApSAzl^Qh>EEnR2x%J{%kc=RGwESQ4FK zVcepyhPx@2#$MaVpXdDP0^mCop6{vMHZ>93AG=vjO`I$ra<1k=?eOA^XZ#CVdai0yBmJ=M>UkCP znr=wIma5RH*1{sG-Kk{|qERxaN9@oU)N{B_pTsIki$1oafzNy#GcU~!iUp}7itjp& zhUa0xlN!(=LnSr%Ru4M{$Y^~tkIpx@6?fgaWi!AEx(btU`EvSxg{3i^d27*|AeCAz zX^o9C*ey^iDvb;2y+oWUo)bN8TM`XjG15*uNKd>~^*Q1TYBdyjlikfV`FHL;EeMR- z_PD6T$;9A52edQpoq9B>OgxT&YrsD{4{yd-T?F}LNgI9YD@`wSu!g{#3{{=S2k*Kd zXnp;`!PigD{7w5LH+Ol1%H8pIwvWKNyh1Yv>uRpF0b`yFmE$nDw-3fIysYD3?gvb7 z>RUFbM`<4FM`{nZZ0OKzZm-2eRU8`E>-1Qz%OJGPzw#Tqr7WWth<)Hn*0v{oTF3sC1SvI@RHH)IC?V_g18ren)5ihb>to)(x&C0N!^SUEp zPCIx1d#abC!@KaAMv+-KzP8UC(O<2LMG4!Ax^=xIlr5zgU5#`gYO=wuMOL%s?H1?^ zCr>ry{#@4`DF&yMdiu+VoN|YoIr$`ZMKlCVIOI{U#0ztIv-SILM@F-F;aDk!i94UG zp2d!(P8%c~a67_UFz8q6LscvNEU(eH+(}|E)afmJ&5V)I7vykS1oln4_-}2+RV-!! z;K1v?)R(usF{32yf1EDIZX%^6Xi;4rxn-L;)?}L|ViNMN7c-&stut!D&q2uTP4-*r&vH`!TY>b(2Kw~X>(??$Dz+L5 zOeUT+f7qVvnbS~6USTHtLn|X~(l((J$ThMrOoQy(>^3-iyQXT@`i9KpTA4ZGu>er8 zCi4CJzb=S)TGs48^7#M2?WdqpoLSl>KOaKo^X(z{@11yo8%uqeL;K!*e&&9Y3wxJN zRbL8;2W0=`r3z4oxZu$WP4F+aFy70R(Pq_m-B1+Dud^UANEZf`RD$ap@LMcy8<`tSt?&X+qf1z`=ISQ6B`1Qtw(#E zz82$Ef1?Z!s>$w9!=%26^zx&?=749i2i-PBZWBQ}9*QO<*4YWgi88irb6&%jvAeet;+O4O2$!H0YR_(MqRj^`WoXHe4CiGjjs8b@oLZu z*_}#Qn)E6GTSc@Zy{~FUXvQ}Gex3319%QshOJFwEh15KS`cCOk!C{0r6ecc~N1_Dx zWN2B5iE*hMNf>~%B9d59nPZg^zbz6B-{@W1Mr+jYaM72Fw-RQPJ5c4N{w*)sgn~5Z zrYvD18S#U5XBp@vOpXey2tA@a=>qZ4SRuB!qLi8C4p62*4$s{C?c%=-PQ$>tK zRYoryaV`pztAH2@dsf1O?>-#ZAIpL&`4q9A1jVM?>Vh1MG#%OvDi*KF4K%p$QE^1K ztPFFSN>@J-k|jk=294RYL|*g_+0zZOMc-~~k~Rlfpg#+ArWjF-eB}!w6p?G%#@uX@ zYE{^L7pvP@H#W88rg~ENBzjeGaA2lMN9Pu%qSL(3a_E(Y^WJoK(9*&qUb9oOPMl4; z%J3|qb@lUQGWFvpOsW9~B_6DNbV$AIH>J?Yayr@Eln zsjvSlnIme>Hj||*6D8**zQw@a0ROK!^vI#NSIPti)OWmSGfRIx6ZBmi6ApU*IU#Vz z{x&lrPox(dXVxfB?D6Y`h?;m?>f+!_>_)B7jG&uqt;J%&o07c~cI}NUM}a{LktRWF z%pdHKeo|(?ZL|hx+`&9DvH0GnWq~RY$HAV9UIPt_PK$LrtbYE{1(g5DDB=Jaxxc+b z!tX`t#V*}*dBL$>KcQhs`X~Qrw*%v(ySvuPe6akOS#I*tV+^VM9wbOlXmZZTc!OV= zb2hvA!JxOlRZrqT5~fK~t!#p$NN{LvgeL6(mwj)H(3?Yv+Y7>>q=brXv(GY2&V>Sr zp``3M`|TR^?;PoTK{SnSV~(H>v@G&i(hyYaHrykR$n(`n9hgJDht0{B)J8^POO9MT zOw&QyhdM*Rk>QVxr9kU{(pE==V}mY#UQQ@vM09*%PyKP^z3*caKiN3!j(lq@ov1V-(+>n1|0hv$TlL$D+cBb06TqoD|# zA3Dxfb!@EDXrya(*OTwJg<;-P_*Eh0!kKSL+s}m@g4n~;XwjYaSo7W2@bQ{4-+Pj( zx4<$gWpb+%B1s3wf%(=U4^=S@za}GJTOb8iG6sV1A7;#UY-rhs=XzmtljJHhs#uqa zU|YiX%%+X>h*lfZR@?3Gq{CksV)B_n`z>9sEDpioV4k+O`my)mvC#Za zQl%rxh^@$3s1q_aZ_+XWVebs0UcZWq>V3YVy;b^9&yFu|BKGd^*_Sh!y6mRSYKh zCT>0HUjnn{Fy}Xx*5pSIy#>2f?R?97V+CH+LbleSf`~tP#D1FZTEwY3FWX!f_-S5B zE+UgV6JyP|y)AbI-DEWuIYQdbB_*L1jwSadfU~T_jRQ{ua4LI zjIO*^Dg4Bf{j~H3;g*aQz1YV-SSGM)g&9j7wS};54h71TFkbVW8Vc%6$>SaLM-=m9 zuosN<686`hvC7LUVp{}JyHZn}CxL`N*kZV8^z#5*Klt9%_AYkgY-aOvgYRPa&-wj)bxS+`eAe;%$ruegozOCBS(;_a9RSnaP{6 z7xjpVjl{tCyBo2-n$@^y_=Mj%ZOZR?T)nWS;8>H8nH1~%*(B`N{uYx2iKax;!(s^= zh}iK0y9jC8&&=4ON$Yy3`i$S7JvBy^+Y2LkPV}&EwB#VV*WPh*kv#(psvl^l&Q|Q4 zjFJhyZxMWUr1*tvxyZOwLmnH%?8vp3853w8x13J*eJpJS+0R zSoDKOh9(-I`*`x|b;taoip?Dxv14pYY7?piY8B~F5_4+xhN_Ye4MKF39y3f#I;nB7 zjdRk*vQsq)DDl+rPun}$HlMiycp3IJ2!N!wBxoG6zoMou0DnQ%z$z#VTzx9 z&4k+Am(Le5K^nu$9b^stQLyKP!O*ILrD5wkHjpBJ>sz1_t4nDX-n(g^Y2Yv%UY)PB z$=AhL>DiluxDAN~_m+@!Su zoX_5yem6}sR`emyYVy_hUQ+JGMT<>1PdWRN5e%1qxVVr6HFcdywg;-|&InX!z*V)l zPUNL1$=5-qGojY|pTD;mOTNt+v>IvM%2kRH_J&?}#6cu~rOhF8V<~ z6H3m(=9hO=Tt}OInS!{jPc4@lis8!W`8CLbL1>9FC$q5#xmzGmJL*Ax7ArDpmeOD> zqyYVM2ePn^v0pCK(b_asTdxwZe&@RpE}p-SKa-Y?K-C_3_QZj)8@AzqJ+Ck0ErNu- zo|KdhV&DJ8*;~go_5Oe3m?(l6AOZpwC8Yu)tpXw;9WqLk9u1>IMMOzK8b;?RiP0ma zBqp%|8zV%CjWLNaV8ri$@6Y%1`F?-*?|%I5`%hNqI@dW|=kC2n9_`F5ck`+Z!`^S4ua;4b%FYl!8<$3zLn3v4pRaPCQ_GK&+$Hddcq7^ zYDgqEm3Uc485k!*%mo9-imWRifhmnd!uq7Kh%|P`q#}BLYV)Z}aQ6m=Ru_1=X`;mb$=^3@wJdmncZuCyKQ4%iw)!SH_t7g*uwhh z{NmX?Ygq*9M|{cF_T`Ot$bi*tbDld+&Xp#SettE~>p3+|2O&S9OU*wI_7ZALoL-q{ zG<%_Rc4kp2a)A-^WO{3U8;tPaJ*Y%_?D@fe9=+o zv6b^`pKMt@Wwe{b_Sa7@#9J!%5DV#Ya|7cJHix#j2NxOg?sh*=V%x5ivWN39uo~VW zibnX`QH2KvAe3oA-(S+aGmC@@v(p8AcrC%MgFWKA<>&Az;9oBT=mi6`P2MI z*1-R39FJtE}`@8(Ri#&N$%>O|O1Wf%!z-G{w{s8hNsej9t)=u9rC{6ffC8OsF*ML^kdj<>VrzXTk|ff$>%&@6?FuT(Rhy05RhA2i~XrfE5=N1EP# z06+w+zGzc_Q$>2PjZW@YJ~)xOJQGqo@bOT}MY!AV`}{9f z>SPjl?vZyeW7l_-Kw4H)^2^|}GEH|qoA&bPtNdBOlXrfy=G24Fo$t>32SSCn9Ei+ z-=-7nADg7{Op=b!G8(OC`~1hWAGx&F(uMFZy~KFkwVTR(FCiq~oOeUZBYozv6IA{L zovgS;0({WuG76{icWgi^RlCH)moS5*OXr&%AA7erStNO^lh5h4w+Sd?8PPJ<92vWW z3=O(nZn9<5W;fMS+GDFk^y1-w-_WdT(%dv&3R#|OMv17y>88uglU^z~F&O%)sd)c> zz!)ZMH}GsPu*8`XYwh65b5y)sxDHHP8U+|@twy!zub43w5%o81Vo#FI`Dv%E&cU+Z z#)746v!}Luic(gWo(!bie~P=6_Nm^!jF)Giw`A}hSXEQsHQ$nsn6Irnzc``^B?pS> zUOp}E#p7H2p&wm*Kr}+K-%2|IciyCi9j4}}@#&pEha9fUC4Egs8Y^{pOca}KeV=kV zd0e1+K{4{+IWLMqbr_xJ3aaTY{qf<1*h;xbQLw0{C(hhoNg>rRey|%1z`;`5c~CYz zPaaGP_*=0^QIJBS4n+|4E-w{wlMloZC~7vh;%Qx>RP>w*Q`J-(%k$tp8ib4PDlo}^ z0(C}Cp7(DtvuJj*cz1cKHF$eR$wF0ht1Ou2{ehTw5C5kbkBT`zP|=X@­vwkSy4 zC#g#l3hNb-D?)DOs-YT}hO*MFs@SqKYD@3rk@S`eV-CUMNI!gl<8yZ&cFKV&f<$ky zlP<|d{;BvpRZ8QQwX;D(_93r7sQv+tJK)F+4c$c58EITPynZwJKWl*{>5lh_Q_YXh zd~t#qCABJ8BtN|qpeFxgKlmVR?}o;?D_b7mO{1bnCM#9pT#n%~@}|R;T5F<8^-dd1 z`v8>6F{aqV{E8gQXlDfD?L2v@GVWy|SC&>W%cNz}E5zgIi^LM~@1Po(Y-^u?0r z-~S1TTR{99y)LHBxS{Rj1@-GUB$_j3`UeH)9CL?D`iv`&@4L>==sou%fh531XYW4* z#3ih1e1hO)(ZQEygJr3(RgvhvVZ`n%$mXx+$Y5p+IF+m4x_rO?NWC6>_I47|F~!21 zXCUtLA4jhC{`EzXp!nbCSWj}P_Q`QWYklL{ixjM}^ui1cBVv3h0Euqk9b5S<0jpPA zIPr`z_0{>Ow)*;Fo$O6fd$zPh+_!w|wtPe_ z%;e9GUAka46?-9nR;44(>F#4%-G;W>_rd(9EV=^Jo_Mnt=i)+#;~O@(5j$-lj^=B5 z4`gWz{VpdS>SMMwFT>lCc^j?1m>Db&iqb{dmaPDQde_7N##vRz5>v!F$7|m@n%>O3B6EcC8~*J_ zN0Q9CeUs+2tkF?DRe`yLf6nIn=d({}YLEYKf}#G8i?zB_hsB`*o*?-J1wi$OLpyl| z==OvvYoE5rDQ5^(-zS92;u16Z(S6Z1iG9gOB;cENpp2XpXD{`V^ENsG0@joRd!aOW zP1nQVqnWEX>Zm2+0W44S*5U8boVrEx*5sS*MqT&l-SJW(XSwXGobDxZt@#*$u;4$L zYXWgZZT4G#!r3_H`j0O1qhmlXQqcIJSl6_;<=`A*O{tQ1pzkOa=*5Y9_LOteVOKBW zS0~jwgEU6tjMvOf}gQpVne7z ziya?Q8QW@&7fdbSKt@+Y?&>X~X-VDodbJC|M+qkiDo5Ot0e2nLZ2GPh8K|1eBU79! zJkuErHe@vk_1bcs{3%9#h@EOF1IbcIxXe2DX$kb3#8St}x&GJgMRToFu#}X{ErdMZ zYDD}mK|klna7_I-L25`%8bX1AR^tb_C9mhOOQVTnK7OI+hSccg`z{5^vFAg6fZwGz z^FCQ2>x%u{HrzmC%L!z8*`j1)9Gw%|9EtngZ*%gXP$-DK#D)jqG(ZUpJQ%*o&HsYI zc+<=J<517NV3gL`Fm`$MxdQKbKkHooXeYjHQ(lG^vK3@px=`g z*jc+5a4>%X@lu3pi1^drjY)QL%pv52c_tjPiecG6gc{wsb6#DQ-<{dsfPsq``axen zS|Ma)uGzqCDG5EWE_81eJt=fn)lf*u%Of_z-4E^&qgfyJo~SBgLk^b7aU&aIPq(Q~ zx4dvBx(!E|nu8b4^4A#%WN6wnFt^Bn`6D3*(&~Gs>4yZ=(oS|juTxGHa{+>+bf&{g z_XCLNCI0uHI|O68c4JdZn0nIRg2vwH!!SIrMH6^mI=n?qppf@d!>ljn8Q z^067>G%?GYaj#sQ-STY+^JTTXEE>CZn(<-h&hA`KgdoWK$Ni?)?w2V0)mIy4$cq9F z^Bri71I8B8U6oh`9E>KcU*gQ;Kgal_fIE(V)>H^*Wi-K9B1DF{AFUrM>BFCs^6dTNY2gk+GX#cCE*CacCosl3kk z^}QuJrw1mYQ_zxyfhIr()g^B>`bLhCu=*f_Ly#*|OMT|;%n2**J!(Frkbqyr66^Q$G($jt}URi+~uJ{ltfO>n8=^5j}Wzj_Vh z^+>Lw+8U`U=2*X>hmqb^>7MDOx$_ihY-D}mmPr4?!v+4{WD$u^&QYTR>lA#1z*7!t z(jG!V1?}c)ZP;NC^LgAUc{uen$F%?HMT^cBU(0WR5bUT?jvA^?MQ$>eFZD4e`g$ygOQFX(oMDg@6{# z)Pv}jVY=4VN1rMtdX!{HGuiY{@X)c>s3Ap!CszEn9p+0}W)z`}c>e_+VV? znSW)^<`Fi3Xyp}{A7Uko#4M?xW(Q2h;kjsi{T|=3F%puIc5h~$>CdGLLdMnToR-~q zQ68vtkOp89`O2QTar&D2*^k1|#)-TehhL&;9pKI6KBP|{pZGA|!Sm-XP*XMUZGxr$ zT;OUMyZruPY?9Ia_KkrpAMn(p%)b~0;UYJ{s+_Ss`>_n#D5)^qUf$dT4+~KVkA(h? z@WF%}{VG+TKQv@WeEb?fH30bk?NfYz z#}g^!!hOBH9eP9aY-sk!{G%fR(aP~}f==ap4P(pw=f|T6JTz}x>phlYaWG-vwKoJc zEv-}fMLMYcf%B8g{}er&#fR)H%Ywkw^5;IN6_#Hi6?4R9yJ|PU@3i?<{(ry>rVldO zOI{*IO|pdbOI{2eJ*Qm|ciU*aV8*P8qG?RPyndzm2F$6xwL)Bo`gG~}iMEYQ?~6QFdt3IGa<4?z?tD1=vWYrntYQBjt^c0DRi3Sv*W_Yt zDd8QBC0?dS^8;9xD3>lwi5M}}?u2Md3d)FXX^o56GM(nWe)K*c`>}J6w$A;7nK=3X zjajv5;WI2t!^u0VK6(g^FFdTl8|>KIy+AKs)IpsrGpyONWPI@NMd82R1q&>-YZd{7 zcEdjv_rIi2fg;CZ*w^*x*CF&BCz&rj&zv<0Yw)NSSr2F3-~XxP#P`?o@o0iCp60zB z(qi!k@0x?&@U(ej&%cKA{lj$2yBPM%FF!^?^Nt)fV@dWbc^8i`LmC>Z0zK77Tle#> zuy>7>Bx+t zam_^g$CK9(qbQa0nfbvyV03ljXcsGEnr-9`_S*Bnrh3t%1t3HL&{N&}>C7W~t>7$0 z`fOCw@cO7{#8eVotE!99<tfIY10!L(O$4HoYI;7^em{hfPQfj(*jBGhc}GyuM>k{@>ypFnemZHU3} zy_xR@E!ki6*qT^3S|Z&p3D&1Y?>n;J0qhq$yL;lzK5-&7)>@r4FMseCPPFTeXY}Ysj0zjbQ{wQzZ`kRNonac- z`NVb)@R97#Ipj&H`oHFW7XwiDfdi4ncpZ&X~>Hh?ZSyg>{l2~_D32Gqar?F$}kmX07U7Rkl)gvSDu4&GS z>wQ#mx48D4|9rCe5& zWFs~?kLG`k;jm=|h|hLv11q^(YY&vLk51w%&FD(u4y$qsk0s&W_ChV>&V@g? zyg*bibm2=I4C@+ac9me9-I|y0$PW9N=TSehEMzlcNCtxtmp_4)Rn9~p=OE)7#mdy` zf(pG*O%MVfIht&LB&?Ml zm&zPybOOftUefc?x`L@Ow3tmL_r}m$ycXc}h%!#GuSm^Ld!)M zy-M+*H;8&9%eZVNHSNc)g1N`Lk$J%F1?ekk;3DW@M2agTS2gKugdZNb`y7X!O_O2PY+1 zJ&6MJw=fe}_mCtq%eOBV4cBf6_4R+s7~;-&a>7g5N7YJiNouGnu-LDlR^{9S;xn@^ z^MmwPbIn#uuGjfHDVtr2)a#5JJmXZBH3buJ%^B^wrtq<^0ROCEkW+Gwet|e#f7^!d z(G&NU&BKvt0g{&)F2l6IvuQv+^qe_oVxHf2$IX)uhDY?ZJOd8eO9&FU(e1%+!=9d{ zQ@u4JbG*-WwXsDdR}Dt*h$xK$@SggCWp={E5k`1eR61R>nVc`*7DfR+gs-m`FQCeu zPESg?w`%ZL;&{~)rt?mFEv$>b@6(W9ck0`uY`m7o=%4uyV5&Mn+CTR$N;3BM1C)^c zgW-;;%`;DmVcAIQO8ODImA{vayx`SGPVpy*k8KsD^_S97L}$wEQLH$TK@_KG^anS>X@Z0 z$l#6iY$IJ>@Z@-}uMLI|Ug1`@Bz;iII(3IdsT#6EN330I)Ng3c_3DZqNm>;ptNTq$ zF${m`$Pas?RvL;Za%~Av`7+IwbH15DQP|%+oDn2YG+}soT4Ft79$T&|^)MI0Z3e-{`>4pVh`?IRFeBV@dJK1)NE8pp%e zR?|Z8#wAq6oLF@!6h!Zu0vDV5KCE0s$yl&m8^5>d6Al$K5^0g?*TrONUBS1y78~9I zA!N_iTrwxjqyX#NJvPdB^#O0^O5d^Sgz)H*gU+4P!M?Dvv$koI1t_Z_nnSqb4f}aO z|J&&+Fe1yZ(WseUtcvi&2bxQx7$kE#1PYe&SZr8YE_Nu4h|TUXOQqp;a8UuM#*jEm z$Br>HCExDxF6${}F+<9}tp41xHT81T*z#z^>Sg##n^@tHRG%G~!hi?S{Gm~K*Ojt> z;J zqZXxR2<9fK(#WDQ`mti98k_9U*qFK(A5%q5m|qh=>KA&7{(IJVf9(l1^CK#>>Q{p^ z2-n?hXQG_A88oHak}-Sx=A*wx6Dgmlz=Ke`dVkkj7fjeT5+~S(ZfjQsuBW~F>#WVZ z0F+ykKN9e8M)V!>;4wA|*3$^{?o3?%t^CDL25lHwiqhXqdO9E{-6dGfbSKtq?`0^= z^IE30253gH*smBSbwS!-uCn^<;iH>oJBRKme|4PRpE>@iC;xwXm{0vhdYyg$ z7hKqk$PIg(^ZO5STW?kf!!O#3B?Q`%FJ18R_|ZBW!2G4oXjNX)?%2hg{f^M0)!$sz z6w41^4DQ1l&W~MI*eUi)jDq<%!9AgFJTwx)s*b3GF(8!2h7sb(RHARpD0SIMUr20g zqJX?EWmD}*86baM7d}BV*>mPmT@M;=^RET<2im^Mx(DlhcbO+BzJNngHLT1D_$ ztgf<6E*@1xoR-a8JSWe0qfEjboI{ZCrU+hUkV)24S<< zFcl4x(pT`|zf+lm221U|7||jaeS_iVoQ9d?K24DA%*TBgWKBAtfnOz&_?ojYKiy4Qm{TZ=nLoY_sJdW3 zb+Sw-E9^+Mss0uX)uoPD7mS-xOf})Tz>-5c=gyvlPUN_{BV__ z0F~MlH)RE&mUQ}eoldd0=q*o9Xw<5ILYF6nhbC<21{9G8OU9su`7m>lr;({$56@a< zMr^iO&YO9A7N$tf8`zVwa#Zv0UUItgT(2DTQJ4#xU0%b@cdsb-qO^P?=hU21?7FEjn_Kg`yHCc^ zwVzQ1q|gSE{R`zQ>19^o=s~@c{n080^P@Z3_Fnvz=c>&$R#nz5P0H0me{QVA8Io7p z@9(bvCVyqDiBH+9H6-uw3P4@?3;j>=-%@Cvh(u-VMw?Nwp&()eRVi-;Kgnm(OKllB z##{95KB-L>)MEP~KPWMij_hau(%7b9xOzVoC&e;}ZN&_`}1QLs2?w!~Ep7J7^2VBIUpJ`OBq; z|3fC9;nnp$mY-8z3m%Oe8%26PwBwvF7uf^z*sWV6rbvY8aT92Xzt_)#Dqhy0xxB0! za)LR%>xw~24a-B}Hb3Dz#pB?SfaII70K(#8JAX>;h>9rcF-DD0(EsDU=ni4Ep>fi) zwEk+2pS?6e2Cih@8CZnaH1|{=n)AzzEXONUy?HWP*L|04&z`3RKJZwr-sDz^gcaDf zVJk3J+!KURHpFIhp7k*`;ck<-xt(gZ@Vd}nOo^?`Z~{4u)` zfR`L!FQAp?^lv;JXczTprTF?lILj6q z-`ir1N8sP6EE3e62cwc1>py2FkULHbY`>C_?*0~o`(|@SWoF;+Blcq`p+UKvSMTWz z1es)y9l+5leZtuK=9K(j!PA6dBpRP2Zl4job7M2DMz@*rfsr5s*;nGi1r)f;_Cs)P z#FXE0M6>Ea!dtEm{gySjJ0Kl5B$FV~ctc2y^FY+MFd&{Dwt>K?bM;*H@)FjkCVW=lnFw}|`Y7aj3bDaj7I1fD zEW62=CoGfFR3VLon0=@oVUuptJBp%q44G^1IXpwVLY|b^+`nD)WbdkJ|7r>A#59ZD zSo*93w%66!o0Nel(9hB4(3gT@t76vo68CUsGXbC(=~1bt>o=XR<+%?^opVoL4~nKX zi~MdfHo%j(gxt&gXc;(g%5Y8Lq3KeuaEjTVo^9u+ZKT~@QqC?3w>+#Co}Sf}{K-tvtc)pfkH7#h7_R_-RlA}mf2*Q3;K$OUgtlW1tRj9USh z2f$@{1TV4s#CzNw$pQQw*B<2EZ0gITpS+SYZ-I`^_Nii~l0EAcO6ebuoge)60e@i2 zB`(5MuH-qi&8=E}zZ6Gh)C#bPdiBYn$bgld$);4)N&lT*X=wwc2T|yhw`uUS$~4Zy zGFdigdF>Vq#5A-a--LQ5H!{{w&K%fk0p#g%rmAtT%CO$>9F)cl-MxKo`gwMQ*XRW_behTd}s2*Cq z%w@FDo03eS(_Uy(fM~**O3hzJLCPLL&lxrbDxfC3LT|C(k%BZnaGoj*sQs-Bg*CDx)9y(}0&hH&BGZ z1LnTG;}B+swY74J%O#_IzKd_Yw4=>YEKt+swRKffe9D8@(O~d8*pp=PN~?0jG-r1&gAHfaugiMP38Hl`l$-ZWGp) zy5fyV6AV?quEa24dwH! z9))&?uRY!Dhp3S;<8F2$KD3?;l%5+tYVlXu@|q6x#Yo}XQZHd>j->Ljd~eZjF?hLe z7!4>r!QZ!LeXsWdVai)E*m%c`m#|+is`$zHf$e(KrQI8uXGp8pNLqxe(Ml<>Q%c%# zl&$l?b}9y1WMBMZ07=|AlP&(fhey!njDj%T>Y&JIfL^;-pcAPwyqH25w@S1Zr#SH{ zmf9O3byc5~J(gS_T$=96`vrF=M<yI?QfT2$i#- z1e~}~o*eYBbkG=|Hfk^M^UA@+DuJgGY!^3F!e zQcX`QiYenL`c2_z)ZhrSUh!Mar@c~R0&*UkZBk?MY5iJS@q7n0IIZ$%5GwA{m?YKL zHkv%=)fgLGLLb0u!`WdHtl2yo>zrU`EUe^L+)zRvPW9jnLTy%s-JpY`ZZ{ zD@$LvhoAfg>^Ns$JmD#Qb)GY&bQ`P71ZoLDUspS}87PmGqOBsMYI0QNzT`TF|BQFo zOJY3hW!;nSUX>(B`8kEE0LA<^n=G|5u(sMXA+T}Dmj22W+QDZ++yp`_t$A)eDP8wn zsy^?qHpz>lmVnt#RwL;_Z}%bwYSTk6+h|}(ahK83osdunK&olc0fA$8 z-v%EF%53^|VQnY5nvR7W#*_uT1_&O{X?4-Jv?5gzXF(U<^PQN$T>dJ_+TMlgV9s@c zv&l`BX}tCdU<1ip3h?#l4%c}L=WXw5seZ=p!urUA4%uuL%pTj_xtHJyTEla;S1f*i zC{dr&E~o=*FfeHw(ZR3;%uaWdzVtdR&-C2)9^W!uVasQ~O9EWF_Oi`#<2hiNiz{;7 zQVqciB9YD1*xzh%_rT`<*xM=^ND*CvgO_|;+NDpwUJ534G zTH8?qA+QU&$LdW|GwCK&*?`#AuFl)_rSwYAzWUf37aDkN%Hz8}ej%R|;SZh>@x3oL7L-_P_*2a(fnHTWBIh&v1G<6o-ArWyQ9m}LJ{ z=lvAsI`%ShE7(h(7Pjv=s0eKI`Iu9lF^t#mPg^x{hT;Cz{BIpViW>ADvd$UHXg$uJ zdHsy*UIn{MlZPUK__M4T#|tue#}%t&z4uYzY|FJ!IAb&G)MOe~S{}Po>f~xhyn6EE z-unXE>2?RI1;m_rUL=UyMRI^r;A!z98I%Y&fsyAXRPNnLCNR6?zu0{Q4_6-<>>LqC z3FpD{TU(@TEPuJP=;2|?J4UR1;aIrsJdIajQ9^-c=2+IC4Z^TvG~)&Oq-d800sBBBUg2 zv+!kN9Jux?&Fd#zxtQC!WTkxXDZ*2$f0&Z9nLO^839Q-XRtC1b#ZP6v(eNcb?w4Im+Zk_EeFI(Q7Se-Stc)4t;XZ@3Duz!`gopWvLg~bbaW_4MqRPX6wl# zTgteG>N9Q|#`EP_mrdhi`yYg*@QY-<=2wkZvq0hGx>H^fL*XJyJu_+dP}fajjN}*# zpaqaYe8^NxX_>zzM+lCmURU$s*$~}gsw~VawU^1#(WhCZPHl&uJNoqSroeU+6DLG7 zfnZu(R+ItF{`G{mi_Ke=?wV;1H}?6`S+%^~{rmMDQgBw7Ug_g0%Bx_hurrlWHXXoY zGYC>+$&f#4Q2Y3nSc#!5bi78#Jm5ixFN?7D&v+M9?fpwiKdBLt3-ZKlex(>{ph1K5 z_wV!ty^aej;l9gHZ$!z{BHb@?PIR$SY{$Ibf1rpH`39p9oIk~!hgqmPo46Tc z$1SGiAJ4|nk$vQrZODaHj6OZ0O(P8%ANK6OuH0!+CM0(Ad(N|`AY_%|?IrXDL=l-b zYneV}?fN+iH9Epd@dRJ{;&i+5;edvo15T>G(8t_?nF;cna@b zkZWXdA|5EdL(NZIz}7lLK2$!CvOCU@->0@|m;d~X$n>R4e6PV0_*Tsuu<6(Dec@5s z9*C>(6;YEGD$xb9S(-zHuYZgc2`!w$?TunmBpM)G49>~$Grro67XQ|7uJoydN&4ZUI1Xe=`51W!~)bax&dMI32951U5WjF4VSb?>f zzV^T0>R0V#7^_zre45d1b0o!P(YecBv86r8P!6RhTPLK$P~tdR*P$W^Lx8K-NXT;Z3RDpr24 zO!?K9a(e&3kor_GjcE6ML+6V7Y)0wHa=xS0jIQ?K23Xdw*<6jMK>I z8{05;1_E}1e$lHc@5Dy8f3%ftm+VGUTQSp%s&-PpyFu4~FCV)-*xJ}ioPI#V@`x5$q?_StgcVF_`Zx7}uhkCo_Vw<-KsvUxple}ghi8Fc;TJxJk3nhKt`Coi~dSSI$;KMRW z%YCraZ`ccZDt+N+Q@2Rj=-W9~y5eOWd_`#pV>{Ej zMlhTuWQ7+Df+w)qPy5YJ;q46D3SSDH1JtM^|U+^l}iHr6}>{a zV)%Vhi+Z|a20Gy>T(vsgOgVmB)d{5O$7SD6YRYLN5x6K1tfj5n*sWUCEnL-L3$vA?AIcx!tMu+On9+}Edqm5L814{ zOj8GARI$y^D%95aad-H4D%ekP1_{d`mBQLr)~-2cBnU&XGUgeA64J&^dwda=gl&2-!G~+oxEm7< zS+8#0CQv$w6)7$LwUb^Rf0_zP++R#rPyFfpE{OEVN2yis+os%1^J_NDq37n@^r3~C z!8DsEGu;Ov5(Kcx>__ys0e1{L-(s>1tb8B-jM}td;i9Qjz_SRX-p<~9SZd||3O@hr zl=zC(W{1=!hE=NCzii$SDIJ`m`>xr{k*#;5nN&h>6U?%7>`L-lygBj$R;59>3N}^m z-D$ewkseOw)EsG0P-zgXjUoy@2~G|1USQdl`>yn9YMWY%Pcm-sU;B*yz5Wxs+j-nk z?#9BjGGVHE(=~&} z&qJ5{H-KPZs~QH21o5`B9nu4FC4ZE!w;u({9xK*PD?bY201(C*&E{zpk@#}4$!t7@ z3OzlhGTgMZe%!oZ!onO2YZUkEO7zd+tVg55jB5ucE36i?*r2e*vP6rSvCW=YH| zO=dUCTVdN&=d~jq*lyYbsRM5apASU%*Vf%uzi{D7tF{rP`x@M#BVV# z@%Wr`5v?fBnAom9SC!UE1`OHZ)dW>t*}H{~y45~WAuYFVk-ek1 zll&tbdtIEr%kSq*{w_sN5jA+Z!bp3oYeO0U5AueP288rBM{4?>pl@c-*r}nt$S&O{ zOq_8{8@~JYLz!I0tk_7ul>do~%~%?(D?i~gT;_M~RU#TrH8r?I1Ww86e46e@SIz;> z04CkN3|ZJQobjF8c6rTrbeIbWro6I$p2_1llJiabnoxk4r7mzgkM8Lhkk-M?OusH3 zzO24<=Cb0SK<17_FQdzKe@@@_Pu{#qfBEyDz4tb*TBnW@W!_ZIjy>f&=QdRoJ6r5# z1qA(E&OG8`01@)2h52YUp&-Ba96vSc5b~A5oY8pAVv^f z_bUaGMaC{MDP6o~qQVlW3h7cEBW7i(YKrVC{}uPtB_HmLe*DC|dor&kREvz)_MEvc zC};vi?P5lR&6)}UPtwHOv!Vk)cyf!q1t#QU^fZ_;Rp+AY3dxZ%)$_&!N076Gt>3?50}O$i7-sUe}x zf97)T-4S({_LD3cP?@Zd@GF);=sfT;QPeI2O{N_Pj$FOxk}vC_3xo6nI7H z5d)2rWuW7Un|`V1d3t90B2tIx=hax}!&$7ysYTC4M584J;$r^@@gJMC?T;>J3B--C z0?lmbFK-6YN(9IrNWNY4eU54pvmZVY29-AK+brPE9(csS^`kwx zs4k_@41U2>u13k+QBCVrELKIt@t*x;E1pf2}a|(~Ul$$4p1*RR_uI(X_-j3|F zQTwHkir#&4Z0PbVQ4T;(b65gMyqGbzYCp-dcJB7p19dxZY}DPQe4(>65-s0Cg2uqQ z`(>w$UdJ9|Dl&tn+}U{2bfuZ480B|4&f7K`9kiWga7{yZ5y~+-kzD0{hp#X#&b6rI zIHQ?>IMulvPu4V$nv=*Fz3om+Tj{2k7MfGesJ?%0pJ~P|tSTBEQ2XDgBdM^(`Ia$R zC-hvu762bXraDtKj9O0RU<)fmX@NYPfB7pvCBJz~>0{2n9bDvQAy>5|#B4FF-b-tq z-=^XW+~=I?OQFq-GPcp|_3^QM!vDj83%D+hJmCa(48gUGhPy!}Hu#a7*(PnKHTpb@IdEPoG#X?0Kgpn5=JbtN`lle^4~AFZL2z z%s0ONUDiMLDY1-!<>hk5#jn#@=_WOif#1M}Ay>uEA%DCL(G_#H`N&4Ons4Tq!(_jS z1I@Qa&%(^NKVE6#C^p@UZSFT;Bx(PcVrVcaIAoT%O(BF|3FRBT5`Mo*)h}aeGCp`Z z6`%2IKsKke(32e(*Ax52!18i>_6srgffmVT2R+-f<34riq)TNd)~A2$?(y8vVT||# z<;8B-IS@N)o~#4|oy9^bW8-L3%tBfpG}9^rxhc8OoHi#{rv#fdEimpz529-Ed2hYO zv~54fTi@3ZSP(!{Fa!+Z7ymoCe=&3~=F-XbbHyOTPE5hh7+Vr5#2YDoSIG_gmva-C zXe3bw6=BWpNGpVSrE`ayGOg?%7ejcM$4bjJN}>o-E~E>I!n*pUiFI>mhn3-Vy6U|- z)OzRAF+)W`*J#@IhjJa9JZL*MTO^Pq}ISc}Bqro*P)1c)aJ>tvzWY ziuR2ar3Fmdc*;u-WnHClQgsO_)}NGfI+(oth#<4GY(BqV;-gSy_@KwPsooI@GXEJ? zKUTw=h>?A$j!UEDOdKGJAftCI!;w_MRG{11dg~{eF?+2$ZCbL1X&#Yw;4|Q3s(?L@ z{^5t{PRbhnVq9%Gc$4TjQ%|YfH~uBVzKsw$_t49ynYOZG!CjK%%{yQ%e}HZY7;GM2 z$PN4sr@ZZGK4|~ROc|6R4y@PL=Rc#|qRCX>f}ecv{HE>Xtp<;k1XlmM>M2EI3s(8t z2@!Ya-qOiU;_b)9)J5%)TzU9Xwvg9U|HKHfq-qSVsXNlvtQq|8eI0}LDx2_X< z8mUmq1zInG_#>27zJ9>(KjKn)_~q6Ld%m(1TDwaQ8Q4{-q4O+2U@p~2uzqH*TIqqF z2j0_hs!5xw0g_k67$V|INH@9%qrz-n`2YGu0`-y1hKMIF`@&VRkdFO@gA*Zx#)h&# z)7FVnHj!RbBSV{4D>t(Vi{q;9(9(6k2a52O?Z^-C;!MQ!L%Ri&uoX=43+|Ji0S`K* zxWJZA-tv~xPk`%Bzqy8PMmJPGK35VDZOmL=?Lbj8U_c!V$=RF9nT7Y)Cp9X5VtzG> zIG{m!&G%%d_ca&jAc?CH)SY`OpF(BYLe(c$_}677!HDMnWW!>7f&@{ay7PqAQv}+t zNPy`$K87rbpX#VrzDc#UZ8=Z(eBaEqsubeitj_ynOLZ!RHv%W_ZG`1r$N&_X!f}I56moCh14TI;MPLe_YyY! zBCEJ|VPj-BkEr#^!e7>_KR`Qa@2s}Rhzqwc#UW@c8r_(yOA$O6{N=+%JkX%kDcNgW z$4~`+mR({I}!_ESR(C^%N0W)fF&h3io9+EblTpaC9({$OvM;14qrgMd+2k z({=3g>pwwToGhzwY++nrn&Ng5SzIsT`#`@(1=-?Up;jXxR0#+XzAA7YTuBb0TW{{C zPW~oy{^3f*1GtN)xBwq{+{qNoFDTzx&vlF@Z=n3xnOn6w=K+gD5B=@xKWCqLxW2n+ zos!(m(ncF(pB=@}4%yxU4VYDT3QyHJ_R>4{4SyJM5~>Om9Hz z(WMuB1bW_wypaDMD3k4&FGtOi1?>%ZfvP0UdTS*`ukvHXNmcO}u;XhIUP#K`sRR&HfFIGo6-KAd1 z$*3)PEqfiz1SSQ;r~6*R*F8?5?6uwp)Wu~obAcB6)Tgf$aA{cc6{_krD}lb$1}xgu z&U}Uhj-^PE4KRZfpr6mNo{EXVC39yy>R%87x2G0T2Cz=1>V&|0=~{KWf02SNQRG8T z(2?k8MFh;cYW?!VG_L7 zf38Wd1&FY$HW@&SZ1@y6Cm`^ zLJNc%LI~xH&-=dLnKN_FkIZBy$(?)ez3#R5y4G6PMG2(^yb|2re_iRsnod1}F3!YK zq<;Q3qAbw8O!*nIjxec`Rc*LIq3i0HZVOMfUJ=?)({xXhr#v38ykFBL!3ml!;K-M& z9VH3#TpNV7i9X!^OMhPQrUfBsR)x+1Zax@0hN4v71#{S~_7qG7Or*BdCRm@o>jM%~%5{|Y?w|O2clNOSwx>t6O9CWRpvu3Q;uhvU#!CvfSs?H}Tmd7unGYA6V z!D**`=$G%cb}`|fZp!qlj$;C|mkJH~uM$h#e2h5=p8TlwalghJsjEYaj(J*xe&X#i?C5(o>Fsf=GO(0E&xh~GDL7)9iqBU1n>T>9 z5W+wi++RwdbnNTBq7l|Cva10FzAZLU>MtRxHOQ1yqIQjbB;@|8&%9?Y#{qf$r!K!_ zKxV3Erv2Z{8ikW*`(TuVy7-?1?~-@bFTPTU-`;J?i6g)84z`_odE?yHP9DvjrUhr zriJ(X|JorQl$Xh!zeeuZAlWF|PyCdRq?80B4YsvR*`Eo{{Kpc}OgZ1C?IN=a)|abg zVG3B7e<-6j>e$JwgidhuQNMnf^Y9klS-s^Ja{UB+)x)S%ch}y*soyfvM%m|$kH?Z}xtFSrhxA!x*h`Hl-2M;Rfbr}ZDnkY$sc;Yhr643>6g?jWH84hz@^zZjaI}-KyCBKWj z*S+&5cs$BiKH$>9sm{~0;4A?sc7LE>@A{kCVyuqlYL+=5%mER-EA7W)B4$*rce+9E zxj3)F=`8VLMA{x~^X;*->TsFd+$zWaPx|hDMVJ30d>#t3{+mZr?3)Td?%kkH+@Z4@ zgg!Mfr+V%JU_bmr1@DHh9L(zcguO|QtXd-fJ(u*)Ii*kUvCLiFXJY`hqN|vJ{M)WqD^FF<&TGI5 zJKB2SvvW+!_m7OqDi{AyyR~WPc<@5(+m8<(wp^l7emR7Z0^>iwy{dLG_2U8| zKsLPZRD_u2kFRT!%a&T5Y12_V=|Y_=&2`Rnh3VO0>akOvUEo*Db}m{Q`Svq4Hnt;U zIxWZaM)f;}rwdqFJ;g)ao`>K>F8l4XstpHig=ohqw*^Y(9cKqJy==YK zSJ~Lnqk5XIpIw5bx5i4gD_&lH^P?Xg2yhV<8FwIF01Cu~H_ZC0&24)q7;O2+wXPF{ zRskksWPM&4Og~N;_{l3Nv&AqGbES`Pt3;T-F)43$z{}#s^oD%qwXy7m_=k||N{5Qy3W%i={7)XGlR6mMtV0XrapC9!#W_M%j zaK-JlDefB$Wr7rLSp$Nssv@^UROBAdl(9vM<337ge9h~3W93B&oNr%y<%}9_5b+{# zPFH!4-QiCm`}g-Ev@B!Km^MpCWYu|;^m=Bi(93S+T$~;7dd~*&detooCdJ0N5cv7PY+MQ z^4P6}TYqV4+jtm@k^m!M0$+j6=64f?o=nz6Ka#@=NrdWE7gz$lHsJ>iozi4wQHkq! zY1-HSv^e#6MZU;!uSsXF{OCF5`HlTn9!CS37d?0HvbxQZxFZH`uNfRo9)DU;o6Veg zuW{Xd^E+dYT0?6-mbM^ukV{d&=;@$=R9F9W5yy&;^C7!tT+wTF5<~yVVPSnx%~%!W z@wAkw-CMbUyf4Pghp@)LZ$&?kI{m(TyG+74+;#^Lz70494SUt#-wX|H~xt4t~_SPpBuw2Kx&r&*Z*Pq~4t&rlwWG;jpOgYV;6@L{U(GIsK((=pC3LdZe;XTl)4uA53 zYSi?MB3+sp!KTnZsw!1>gzlh2W)-z|K`zA~UKVnjqmVm@4-Fkf$G=PCLpzdmd1g$A z97s3e=I|#eds-l`Dag6ac%{2;Q>ijpP^hV3a77(e;!e08(%Ja~ZTTta*~VDOLa z{8lQHdF&))H)&yGw)+N~W0HhW>|kLk$wGw>0)62Ou_51`8kwlu49^-10Ui~fIH@dKn zH0<4o_QC-876VQ@VP91<%$!mBD(CfwaTSG7lq-ISb3Kd2|otNp&XZ1 zbbSFe>)QxKAjL=!|wwlUx$=7)s?WZ9gICRcm`K+Kc=4kG!tMU_n@KLuDNbk-tE0jli9wC{s3wudgV%8gy5{< zk`ka^R!OxYP}A8~g~{lZn|Dk#8?C`2I?z|_u{C0A!S#yN)UT$O3r!=5gnnkvsd{3W z4(k_|(p@NzAVGK4Zg|mg>u4q~M`F71nbjzzTqEF@avfA=EW32*`t?4Wm<&F&AtSm7 zY?&&KB!nboiOU;7HmxS7K_QFRA@B-FX6DO+Dq6S zmIO(()LZ@r8|vH7uj(yrkdcRjS`8Qnil~lR=lF;C0;Pk-ildM zl_S#<)ABVwV@}aB7CnTgk>I3~fphWoiLA`M#Onvd-{;JNh`4BIRuWkbsGDBw>ECyE zWGt^*ijxgTV!bel&=WIHaZEB@=APWp z)qPfnSgU5b18I`b=zdbD*3$5t6DGoJo@BO+prEa=y4yJwnj5@;xyDdi`?NSYWkbWv$t}^DO zoh=!iE(8pP8{l@6jgE)oD1Bx3DIHexxe3p_!-Eb^e>-1IWqJUF$AO@X5tNKt#@)X> zKl8b|<$L^rzXVOFPeH*~Jhez2?M5lnt(pv!uBRLI?d_}SLv%8I{W?E}RckayJ?K6CEkvCTU!^7CHL}1AMt&i6&qtVj!-OgB;uwqfbg*0B z^JBWkA)M$nT@~pC9ZVlpD(guF~-`S5u=J}z;j zv+)?Tph3;>>*#DF)3V3m+!Cy4TdBfX^rOdBCmX499xwJfRUd47kd%cG;w&Y)`tp!s?zO!~FN0FEyqu4=TBh{!GieT7$ zNSlSEakp>aKhV=RE91yWPwoPplFa=^{i&MFaEBSzJWoh`|Gh#)!Xwcp1|2O;|{&)Mj@x<;Zy7wPG(xtfb9heCGSNgO-uPfZA7@+fmj zG(TO*e5hqjp!iNR_-9r1f|f%0N?={@eG2#Y zfaQ0r0brjdesl@d?zczicMc+qp2gDAk2N=caOwzL*V`puuX?{FPrlHWmva|l@7XNL zE$8ijS;^1dH9}VIY?U4_O_*G10Sbr1rwgoG9k-w77z`(O+G3_XDs7`c96s`j1=awZ zba0xz*YfkMax+lrMVUrri*8fdCg@sD+M8vWc$Wxwf}nFC>Dp`_J)dn$J#=Exu`lc{ms2`Zeo5AQ99U~{ zO)a_sU^uK1B&H+4ENvm>x$mMH1B+KmEw{8zbzgORq6h?9RBrJ&_l)rb?)_y~4v z(sZ8qCeeFZ81^39YyW-KMlzy0to=(V{{{593nvDY(+d5$i0B_<&FDrJOwdM& zMQ6YRNc?%TSc-hX%qS`WHyuQSffQHjwoCWof@!i#)g+c>l%^|pUu)8B;boMR4iPeh zhQnPk@POSV71+Ez1U+b2FTfGuIjAlmLsd6;)wOgx=9l>P* z=dL+tvP47vZhpOpIYy@B1$JOg#7G5~o$WVt(Y=Y&fK5zng~~51YeG_L!4D8`rFRhs zsl^Pi=-cBfkgCdGNE3CVh(KZ;NG~f+`V*%xIf#+YXfN^)8soVK9@O&BG&tb_>yt)y z5GAXp{h&10UQw(3BXYzbO2vaZX{5L5t%KTfRhsCy?(wXU-bmPDAKm)r1tj)H{J@zI;1Ejoh`obQM{9wL=%=BGMqh}#{oZb9 zlTJ;}k{HhzXyUW*?UMjwF4knQmfM`P(~RSF^_$UT#c)3*f5I-N&zqq{%T2d2H;`9m z(_2JG+BUdUeOi_uV^lEVX9pLYI4(nLjx9U*!Mr23Sx6|U^}|s=QjpFs_qDtJ?TIkj zzUG#7rY!*%_qj^TN%zWm@yu;XVf=WEwga!0$H@iZUPt0TSYBcN-eunm0Gd3|9Y;qW z$tL|a9;Gph?omkJ&aDBbseGYxO(90>j;58zsH0LTdPb4J<4o(*tSW%(K!sE+jdUTA z5T7X3m8{W#DQHmV#7$`Mi}?=Q?zB9Regs5wb~~&Avy}8rc=0v z@Z@D*dS-?ciNgi}=jx{= z)^pSC_dmlJe05up)~TOl_-T8gjJj0EsR<|ZN`l$xuJ0mOwmKl7S^X0oLnadJDOKVw#6sP2j$AFytzC0mG{wXKycbk zyuA8Oj?}7;a&nVVU043P3kfEQ%5!;Ob>DHkL(VkJOLau-4Cnfu-7B_u3<Ej9>MUF5FA2cROl-^C*ZLu`J`ji$U{A&aM8Ky)8@GqJ>jO~xMwW-> z`$EJ-$1VBs7jjpom=*J`Sv|IuW<{PDJNBp@9%l|n;aMpstt!D$tlgoiuZC8ipm>k& z>zHIa;+1sqcxbP|+G#WiP#WomF5K?Jar17`0*9|jDqXJQ>L<}hZpanyM%q!H379DT zLH$WD#$jNg8{6NVexKJkM$556$Od56UGJ-BmM8}<`( zlkQ2hPNWnocW-Xfjr$u*w6T6>avP#8MIH13zq+I_z2aLyQjQMr3K%wHQozb2SgykS zy;yl$oZp|bvo8F)JHy&(?(ZIqcu9aq)(U@sYWiVfQR8Sri>4zRxUiukPbS6voMh^> z2R)r7R{G^lx+sA!!ylVPnG&}-G*@_E3e8^ZtQDePPUIfU<6ot@MMZ0Fu^%JW3#}s|I$Kns=HOxCzs$_OPJ)j)n zgTv}N*DRf%pN1TSmdZczYL*6y1f6_mOK~!bAC=j$mVDHqd%&xUsYDkQ3wyNEuN=&;doXki0l&b zc4kpgO|0H#4vW>Qv$#Ze5Z%bu+Rv_!%DrC&FSNto=|&bZED$|4 z*~oJ3UtAd7khsJkO!GPo3d$qGp^tS)<^`uu`f?03BDY!e5=u+KF)D`%QWrueG9)6g8-L-GDp(q59!fTK+@h8cdv}c33gQ*G<)`7Z_za-0-fg!q zVMw36FJIe5WK{G_qm%TVOjr?da9j=rv2QHOaOpP8iT0nNFJ97vEShGYGa>fF$Y_{A zB02+oPZeNQRwqmt!v=D$0nh?4xWMfJJZ>gxL5blSpb7c za^!s{=RyTAMtlWD@3+v6!3|Eb+tw6${y7}fTKPs6J@ahl69=E_yW-KUhDjwNwC&=W zi1PQlJm~chu)Jq-`17Id2(2=Z0_6;3l33liUyO3Xy4Ap^Q%A?M7K|UdCvaiJP0Ged zM)Kg8$*jqhV;yjgrq|iy(}i`Ls^uoxM3&vBLR;deC?b@H|5rr&q&<2r@b2roBfio$ zvS+{qyR9tRuy#&|uAf4|v}3o& zrmk28w6v0p?5I1`<+w9px;x|2iJc%g&$`@9YP4j8M?joZ@Ea=~v}FOIPG?qDZ>q*B z^DhrU*<&iV+tWrykh`o)V=_DF`7VbsxsI9Tpt%F)=+|W2S&oxYLIWyL7ZjR45l1Vc zpjZ|P<301G93Fg8~0=NFC*1 zd_w!?a1GJo4Qxr0n3mT|qbB^Jvv)6O8g6uc_)ebd+rUUAk456UH0TWW`avsu_IQt+ z&H*+wjquOuFV%~|*H}yOhX!wfQdMIi5K3^e+8~sjAf=w#aMNXn*D;fgDUke+dcX3> znYxtG;qks7K6Vmt_E@nAVaxaXj^il^pupGuC$<>Ol$Laf*s}N>P4^aj7~!FOI{hy+Q-l5$GSz1>&bK zHp?lvo;}8HIsmk?)GQd~tx>;q)EsQ0`39T-gE>(|wM=AQpe9qeSb{lvYSP`ugfuwF zDel-9!mpe{-G$lGk>9nhiOH4v{%0L1cB#jvWw5xKx+Pm9#?xmAs%Q%4QBZBMVEryC2uc^S%|A4J3<#*zB65Uq4R2uVj)Ac3f*NiLxv1#e? zrJ)Il-eE4x;8?e`%m}ckgl^K7wCj-WzzBqAwmG}OW$2@%M{{${dT&F4H4kc1sa$6S zV&4%clDX0eDAMsU364JMctH* zy%`+&9(RcxWLx-D=`!R?24B>QbZubVl@6aO|5pQy#yn#+W{I6@1$^t$81GH7(^*}p zo}Og_tLlO-vzk@?6v}L=&&y`NGpUCP~RScL2*-ob)noZMuDMEfA7#)oq zlPr(wE2akI;2ukMuC!8vLW!QIO>9g;!00zBcB-Ex6c436UED6nkM2}j@|^u#)RX4u zEGn&MyJWmyITBcG0CWuSC=#D4yM~mXoD63*GgnHzXAJ-$1#XZl-CI656@M8XTVmeq zTz8)SgI&q0RZ5%f)KzD>pSM?~dQih^?KVlktF*PCmR1rEAs5b5;*B`x>_QuGF2-n^D8+uAuXD2n4o5%qA z>9+f=8&WM2eDbwuVj7~NOH}XMTWN1~dt}^)!cMS8-?#3C052Ig2aL(`n^YJqoCd7g zelXG;yKm*Ni}QsRSzh6dXvqZ4jiNWp$1d4asLPB$$8tg%)7*vYztYFVCGJ;_)@jWO zO9$oW_Igx``ZqKvQooTp_R&ntrAa&Kv32~T%&{i@0?DqS4M{`@3~e+msC55Yoiw45 zv)8NKP@~=xgQ!jRmRC)iLAJ`0u<)al<*&3Xo(K6GgcT-nD;>E&l8De)-iPV8a|p+} zq>`y3T4F_5gmHHG7VLRVo8!M29jV0FVAC~K=ZF-@yx=TQA)Mj42UcL$% zL*H1M*brN>Of^!DrvB}ZZ$iC5Dbc!A1f^eW{7|6$Po7{wT>^&gpl@BdMCrJ{QIe;M?p zF5a@$UdIF~-wXhMlkt*|9tZt~J_LkcT<)d?j{^cP1$^VGT z?MJQaMQSs1>WYKB$%;g&q0AeP&0j;xog4Ja@Sf?zeF3&_`C0R?A)EGZbxFtXrw}PW z{9X5$>cVH`{|hdA!X0vY>}^8~7~Zx2RV9AjMd65j`2>81ARKL*YL&|TOVP|w;k_#t zhxEkM__Ar*B(lrSYgCm^l+G>_*u0@e*{AgWuN$1Ed~%`T-bBg$m`yY2ra?0N=TvHf zG#$EDM$yhS!-e!UuV5-cPIFQQmSM*WAc$KP6aWr&M0Tx8VpzK1HFP!#MkSr+jjd{4 zL*J)u>^HF^G2pDR#S?%8s|=xR5qIceX%=(8nR`}p-H6kK3GY}_?o*H?aH7RI!1VtK zG2`9Is^=wgRn7keV^e3FDY(C~-6@Bkd4VCfuwLr9XS!c-nR@SerEboXstu?&^tk4wkkcEG0(HP1mbLG!7yRD2>E3jQUF}B$e zk#uJMsam@EC{}kOiA9e)R=Cqn|5>No!{DNo<_eIw6ak%lr|%H*PZW@JoZKh0DRNC^ zd~KTB{&mP-?3;GXYU*@Bhu_E{No;=E!vNeWy_R*iA^KX4o$ZHjk3${Xk`aOQ>l!M0 zQ%)*Z8l28o2mpG|3!|SHx@; z%d8wrKgB|ddX&XhXPw&;I{ypo`g%f6k0SGxUU939tp(xt?pl)|@x6h*rm$##S*Ep8 zk44v*f57gZmra3}ngv226~n@fxg;w}=7_5HBP9v*;SSoMDYh6D7q(xy z%pRr#242X1HUsi0;F^`w4;AD`(YOqtLc(0^RP{2#=fw5alk4FB1Fw)HlN}+O0ebCp z=%ZpG6<3363E!Oou}uZD&O138CgpcjFe2m>D3)ZkF=UYdnG;i6kVzu1IF)|q<^f5V z;*90QEnppHSZz|ob;4@hp#59tBI$#Hq1tbf7}}T{Dvgbyk^AFzODm7TS!Op2Y@+pC zwqzLtwEl~W3GHu|@%8Du`IL`zYKr0*f1vG0-T`-kIf4pFrSTHux@=qJ9=BxX0b?ut zqGaR3n};g1S8Uc+o`B6icD*o6yZ0dAS-3{mXx9+|P+cn^9YQz2SzQ$oApWKk|mbNSMxlWM-9cn`MWsnC@sy7zt8iVxCG z@a%budfqZFcDPkGPSf<#9K25YIIho)-tzqIxd_qMLj!(K#YG;P9S&bEz}XoI<=zbK`FLZ;1BtW~duq6*E{V3n_P&-nOpFDq-j*t2>{ z5;N6;WQ=Uo?p9&OHVXuNARi=3>@;3>&bx+w^UL#C^l958KgLBat2)ZU8mlx1we+N+AwmwI50@mn&sZB?NO4;a6* zUzRemj2S!Mt>2r1)(xAjHrbz@52c@N(M2j? z;OZ2&(Z7lb)Pzgmb$yk>#93};^2>bY%MNk*7+8c;{kGez8A{?<-#iruPV2n-ALO(wD_2)Eh zi1pHn{gjtsrCukHmc&liKs4KP{;{398)=TwD=qyEVP1?jM zdeWgk#j0V)wv5aRJfpNzicW53tzaO&(N(i_txid{&x?x~(;{)m-zT;g#>61Gc!OmE zt49<3nFa?+J?wBzqa=VAVJeSZaYFrA(^YQ@uEwW|>n)Mr8oTS;F0oOTLm(Dd3HS>v zaRy~a-bl66%s^n3;>D6MtoInP{^0)yU|QW)zI^}3e5tOZ&H5i3e_Ucsc*qv?y*l#7 zQ^R%QX?oDJz%*fz4|+)NI`^8?kSzma2Ne_QEtxL4dz}>gY~Qh>r=O;^)yd%-1jL}; z8++`_1QY&Co1P&^5s+US<9$mE2u^Zlm1yyuBwl(vP~#d_AiXn8-yDS(;0dwy?8NQ#qUvFE7GItW~OHike zcf`ziPwC}>LUNp1ckEf)^v+t`x17;tj5W}4heWN+X60a?V?%ylK}}92SrxSg_49*M zI~9lg>m8)A7j~)fqN1fL#&f>o>m3W*?!zWkRW{Pp>Jx)d-hA-UN`f*bZOnf#OWl5NeC@)H#^_$0{wZ#58L2t@|EgQ?%<6tBG9IN7hnPdVrU$k zY>%>WW7>_L-Z)-%;YU16{|a7)Oe^gB z5A~Lia$8#e`4i-gOeI#=r8m-gSLqOf`7o!@Tv{GJv?r5+|_mKD6% zKiI9Jo%oAoSRrXWEo(QAa@5g2zLcz1ke}_rmWZer$6K-lmXhZl#MLQS!;hjK5Rk3t zlER`^fopvg3meYHHY_##@6y~s8K9tyntv_jvvL&8!;??c_Qq3cI0*+7yesjH}MutI<(lwHxxl$IE+tBeTsI+kiSK$4NR(57X*fYx(zO_(ky?10!G!lOsrtO`qpcA0P`X1aYC7@xXXlB@ z2Q%#1Is*#&QiA86XDjLh(uY=P;&n&T=+FO+w;D~ek5?v+R&<<13GIInn%*OcxdB^G<6EUWBok}7NSQ;@?no;*{96DFo=$ayp546wKNO*#x9`gmZOn0pama+ zG$Wz2W4raoNo9~$^iSeoEM^^vby*u$YDVoG|SNa@HQp=OA9KZ!ip-yu#>_uzk z0rcrAwcI@luC_7ajtDIugr`;D{uQz6NlJV?F}|7Tcic1m+G8#vnilRCHbaZg@ z<|t`;DNINGl{m6}^S_|c3*A~*=byi{!jHAFoug;;!{su$C^^etIOm@ul@o`1@Zs(dprxXqY zC>tf+N-5&Ho>*s4L)<)^o2`qGAnrXketrFm{zw}C!%YT#^k^zR!Skf+LLkzm%04!! z!Q<~8m^^J2jMjs)ag52s(q)vSQ;5X?+WU3D=hH)r7ryu-6;y{a^9FgS+;Fwmm^`t! zR^={ySt*+pa2y@o{;lNU_0XkM<}&3v^DoEvz3S^hVzZfXkx8e5^%g(X?RLFM5xl$^ z%}st>(!qo6S#odiGNOsB`z^8ae`y+a#>}^8x8xel=9}b(?pOL;|H6Z*H*WIdEZTD| z$RaNR@iQyC;H551<69R&f0QrgjzIYRTirDSUdOSM&J5EG8r~~aE*MiGAv2(*W&Xcn zLG!KJAW%tU4X6NVOd(s#PhH%r1|9F$nn3d;~%RzES>xuuV0yFYNc!t zYxSKT;+CtENjJ|rou>vT$~gXBit73F?Q*KmbWix+?R)^KUS+oJ>N(bE8owpJ_MZCg zCw}&U!)`{~pP6KazhC}%{kgJ|*lsM%ZtM&((~kM`uaZZOl$-Or%EI1S`l|Oo(zjEP z?^ho3F@NqNbpp6+Z%uHvVK!PY*w)g&^F>8P`Ixe6ITC57DIYMk?t$xez$mJZQDd07 zZa2)|TXzD&FF)i9cDNc`^H06Wzdv$yvmK-QoE`Xw3-njGh%)a!l=JANAxDmF^giMY zBzQ*V$A8mbW<-#){oCvwQ~E553t<;4oiTwClL(Cze6EydHhCj`!rz36J~g0VA_PXQRx1I47{biy(TxIRi2pp6=k;)F3(p+FXKcja})Kv`R75F+=S=)|WVS zbp}ms^-7J0V~-OmPeIqS>dhqD>w1}Y4ww+B&7!`0$!6(?Fa-6OQnOcQ)NEkXXL&)UI!!_(*P(5#7#Qd^&nGn2uSp-quK_y~yIVJYbj zJtFYsb@Z{p1BB8UCbYgI-+UE@oigEh^8{koH+D^@rMDhD4s@1>thX=(!_({i^%{@2 zr`{RmX;61=K<>phvda~0%kGprZqS_Vo5%$z^>kNuvsi>nDaP_dAT-cT!J<|udmU3B zPn_U+E?KFg$2bK}+*i@Hh$Sd`6yL@k&r4uN+a|rM;ybk($CJg+gE7$EYz)f;FA5N^2O*ulFRd6W)&VJQ@xxu8!MQEi`bLuUtZ(yD z;{MRZ2Ul+!J^y)|Esz|H$r}|AA9@C?89e&IcG`B=?*Ix+BxG_|u4sKej>#@b?Z$67 z8By$&l7&@!Gb)j1Whq-obM6~*MUizp3F~4XwSBFsUtCHAv|CQUTI6RtaMy3+=1rU_ z&<$g_q`l!pd^!x;?u+vp><_)C9ghej_IVBvfF42l+b0I4jVeQHcBy#3@Ku4+07%L5 z>P9nCL?4q%xGQHqj<_!W;On_VTB(qgP45Y%Sg}wYb=PkZiV`Do0KaP1y#OM-4H}mO zKxmM3uIbG2eB4t{Uj;b!AB(5U^YA<|zVN@UN~=kvPVMB6?pAZ~6S!say5ljHb^4t5zSJD)doGJ65e^xFxBZt%*bDtr*<%NA*}ZQt4Br`HH5lGa9l)Mwz0N3eo=Wzb zy}4rlskxzZ+GQ=3ea5x?YhZ^9q5gDJ@bvb3%1oZ9gnM?{gv9R zK&LQvz)fiY%1SLr53-BJ3J|K`2X%1gpl6tXz92l^X+XYATjKFN+!`qp{%0UDO~wZ1 z+`Oc5+M7W)AV}$+4lUiZ8bF;9jLN4nt?19*rmOa0@CIwrn2d)VaI+BI3LJYHbISM4 zM2$C-C<`qRr-IwDPl2Dx!C{-iFtZiD?@B!j&&WVXqF=D~d`F{EZEv;i8lR>CCIfec zoA)JW580vAB|J}SU%vXQrk29=gNGKs?({$MQx7U}OKPZg)+#Ic176D)82HAu(k|8= zDG?l5BX1x$*o2@j96gEtvg5T|Cr%M_dfS`Cz{D0h`|k71*f)Y7xj8tu*toff@q9Ny z#bIWWuBz)li!$|hQ6$n;vPr2}kI=&4f0#~@w#j{4fhk(%ijM)yzwLFwMDW^sm7iM z88sci2QLNsf0V+9T--WY29}VP9OZUU5`n(IR@L{Fuu%)IsG;w8!z#Oc-I&zNVa zqB#sDK<0p|PWkZ&L~3_yfuDu%f|UMi8s52aWD~Y$zu(oj3ior;{q^TG(GMMjYZ{zL z$Q}^mnVEQeAhHiFjms|XZc~#_3WTLKTnv>*Z0rV0OR>G0V-L>tw~;Fjqq~8JTrw_F z;M;zIIYp!?Usu+dz1c3sRRhl&}Jk5&y4{i=}MFYKXxM;?e5i;DP3}33PX8d zej6}fxSFw8f5}*=csPfmBa}?**>!e&QgsQml)kW28mNmAqSu7-oStI5(`I@t0FDl; zwjHNuB!!X4J3#hL5w)87?0ue5W`!o;%?Zf9M^G-KV2K3JPT_VT^9&ZMoeJlMXcEQx zgFPYTXWKFWv23`5d-m@2Sqn0mCcg!fAphaF&*>0`^*4-XsFh5yo(c$V4#O7*)0EA3L|`*O?@w82Vgb{r!gq^he7j4^-0t!$X5nw$2DM_ztP$NZNbLfL(C=4E7#^F z)vz<;SWWDhTSMmBJAwxUg5YS6p~#G~MbmTu$FjyvM7lv=4=7 zsj?kG&e|CZus)o9O!HILKdY>HY_R#q z&$N&?X(EUp<)doU=cMM0(w7nLXN5}C4KAZ1$|CH|N<~@jfjg~jgoe<+1GS|jtR&y` zf3@Ft`TSU#3>i!%M|oHHI0W$DOzVg9YxL5^)|>DXaQ4B8nnUWbb+eaG5O$#&`|#l2 zck!8sSJut1xF@fERs!F67Th#VI7>%j&FuW$3A*opTI22-S%k{Z#(R~x#5gqR^HrBT znGulcPW9UDfK5{T&pq~p3Fj-fH|_-2a}jtp?l_$V=_pgV@u~pSf7xAHQV7{TI+`6s=J|3OB zv9HB#aNP<00E+9EApAB{z4s%oDD{k6IYZzX*1P{Hzum1{51y$G$_6DLXFVNijR@9h z#`ZF12nagvERZJcHgpcNvi#Pf?4*6mo8==eD;#{w_MJo?Sot zE?KSNM9&6)iQ)D;m&;x|L_qhH6` z{XUYvm~T?X_;H0Ig$$&ZFQ}yPj-^4yeoiO-*so*oc$#)ZO3#RT$F1{aY^Sgrac77Rk@6xhyyLg}^b zMo^2hf^(>jmq1Ruu(HKPb`s-v8g&P^GTn4yib8j&nA}4_Iq*#Gr{Oqaya}=U&h}ax z$U1nqO;pJBclWX((=2zcz+h9>C4xGsUJ)(#^^eWG-dm0LIi9Qj0|zwBo4`jO#CDEF zZKiC#CH1-1e6h)$LK3GFCga}%J{-a=by&?w`Rm| zA<2ZD;9C@eLn^8P`U_V@Tj9+os~$Zv_i~V6SvWd7Sm);1e30DHgeMwDioT*0Z<~u0YpRw8AOH6P)Ln>4&#&~sEO_zra&gk<-{gqX4SE}P$QK?fa(q7GGxXRx1g(c|O1_Hy2 z0|Y2t3h>cSU@p7rL3L_dS_Sn5qrcQjX(1G4$05}E^lF-{Kr1jmplK<?~Yslpwt5nPDN}!0_YeQa93xC%X<$ z&2l!o6=WYQnBpB$EQFf#~S!IU6^);9`s4=0OHFb?sN0k-EUjMyZCcX&d8}MyCpmX8KAjP#J4{ulUkDBe9u>s1^kVAnoWnIV+}EhD6oq;r)7rr$nbp}$db)bh zbbHX3bhF`0rTiE;<;zhNbm zg`sblT?bq#Oz8+?5X*geyo;G)HE^nhUXxSlWB2xb5&5J-(LUrp#T=aeW$|f;E!IH# z{HKG{w0=7SKe79f%#^5rmG2BCa7MibiFD`#+p;&eWm`ebRi|3@>>`O9%s$6Zkf7>}9n=hJ;_p)Ft=Ynx&jmt=^)A&Fk#%-n>fm7g+1DF*{H{(wU z==*LCDg^Ei6ayEN>;IK_v1+ID^`C0F$^V|6@tYCe14clv!ZD2?#pJ+X(#mV0a#GOK z#i1uPHD@P*l!r_kK3U!tPzxsU>x?N@%`h6VB_T`!uPO`Yp(^Bi>DRAU`nT`?*Eg{m z(Jxd-4v^dwv>;cG{14a{fNZI%mNJ*-$0%IY9Q7wCcMC0PV(At}$!y0u>e{u6)#Y_- z6`|>pBLHl8h@+5rz;n~Wge6B-Vc#V}g_CDPRpQa~n_8L3@Ufi_1V?<1sNXWjTp4l| z6bl#j!F>7h-vOpCubY@Io!>zJybiI(NXOegxGwqG-(2?%m?1IXAF<%J$>pd%UCs=QMRZK*Wy#HX!u}Cgko24i;GJGRTZR6WRC)3c?$$*YSQY z{O3CgfAmE^LS_n5{5Oc}Z!1!N6D|J#FsjSs+~rm*lN{y0bwUFO0MGOheg%o)P^F&t zEb|#V);5cG#VIb9XY+9Drc2!&FFgWJc2FC_a5z+TrmmhI?T}m@iv>sVhj(c~l17SU zAFWP*;F<^}ouzI5AMB1X;lK##^< z-W^HT80l2YV&NiKoY=M=+S3DFg*Ux7uaWc3eUa4dSrq~r$I@tr5RR}*5^jXJZ;EuY z_Ej2d%+e1bIdQ@;X-bR0(T@qfQ!Aq)f$&?`Djv~1FqI(KT^5kQjJlXGQ<2sJ@i2|?9vsBp)it)cfW__<;zwUqTpZh^UJA4xVJ5|Y32Ah$BkJih# zy>%ErlSLU(QNV~=DOM%eseUus_ zKwr;WB=Qqqs4ZsIsFwoZyZXQf%DoeQ%6qaaA=8;A?)XQirK0>TD7a@N-m~p(XrcLv z>yNg=dXLER6IFDfJ2{ad=?H83+^0@`HhbS#b4SHTU4(ab(4GBc($8iaM3lsspRdov zj;jf11w7WhDN^trf9_a2Cz{}uOOoEv_H!Af2)6HC3=;Q!ai~bC;?BK^^neHal-*~= z(8eB}?}3MP4XfLE5aJ3Zq(Vmo0E zki;u29(uu_*%Q4A@XDD1h}SrBG4K>8+;)f5)eLr@`HoKzwXG-KS1mIHJD3fS?&o7a zRut}g)Lavd@y)j}@OLlQC7G65gmz+_O9!X=^ky$2tM@~r-W7++r)}-NMA@dWscu>y(N#4&Wgn4$>BW^@rnwTaxtV-+ z`Q?j&m8377Tg5nBj)nmnZhOPgLQ_=P(F0%R^76T1($CS%M!RgB^;AbQeo`?joSxN_ zd&d4nk)e-Rlg5b>H#(c3e1j%zg1b9ocGFujy9ysZGQXQ{!K^?pBBt$}pSl(l3`iDw z2vy`b+1T~aaTn-no?v*dn94kRVMcfwJTkbUbk_QDh|e25hk@HX<*GE*xG=d~q`zb6 z+DsXVr>hsm3tSXn90t1bsQ&Hv1K~u^t-0CUh104w9Rw`vE zmFZ8VX|_$JU0A1rz>xPQCWoY_mqmx9OA`kztlw7IT2?8()DN9|6a8Lp2Uz!)cvRm; ztJ!U3h8=m?O~;e_)yNpwaGuile$FOzmXFLAI8p@cYOa2tuW_JN`ZkmQ;X|W){&2&9 z8Fh{%EQ;x{czmh-w#Lq9er-|NVIdhT__*<6Cj#&r=MiK_FU(9fD&=@vc8i^xtJ7_4 z_xuy4=meS(#muv)qmd%W8>s0pmNjbB6&f)K!Xj;I5hJYV0()2ZL~_pO=Af3)x}(`u zqC#f1x7&<-Sd?~@9g)kUEP09(`C2Tt)2inT2H=IYeNOg6To-AK^RfztkxAD*SE;t%*&cx0ivHi-(1o}}+} zfU%{sYaU?|`jt%hyj+}g_(fHLTjfdvEb5xJ5FO_ztgp05;aZsnC66X-?K9hR8Q8M{ z=qlGi>y1s@>kP2oX8Cxx)ao_p`Rg|awff0}R`bWat=_tezb%;rR0$K?a0Q9M0)ImQm4sWwG8rq$PQFz=rJ7xs3J8r zHOy_TGWVppWH1)l8qNL**I<^$1ADAa<;{1HLz&JthW2Lh(~@IiYVop1{n$O9k(hwN zs{BQe!-Gu;e3fQE`w|37)iBbL{eI&(ub%zEU-H%APlE;OQzG+y5?L1jJ+%Ht-Uj{0 z;lXO5e~2O8+I~6bMOxlkU2!PR4+>?IjtA??=FH?l+49lw^WvQKyS(pq1{X~_@`eM_ zAAi@duZUs3I;-MKehc0%T)4pcwD;8bCWXdGZ_kjS(1mz~W+49r9KODR-vkH#$R}U@ z?|)J6-{Yr0OOi310k`}=jS*L^|Ii8kY)sIfP4M4n0>vB&`uwfQFq^8*)wG4Zt&>g7 IvGdpd0Yn>6hyVZp literal 0 HcmV?d00001 diff --git a/src/docs/images/standalone_gui.png b/src/docs/images/standalone_gui.png new file mode 100644 index 0000000000000000000000000000000000000000..a8abd81694cdcb6ae241fdd27b772effb07936be GIT binary patch literal 259271 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