From 34bd26c68ef8710418c7375917a5dd4a48bb6209 Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Wed, 24 Jan 2024 20:43:47 -0600 Subject: [PATCH 1/7] Fix metric type error output + re-align with ROCm SMI metrics Changes: * [CLI] Provide fix for "/opt/rocm/bin/amd-smi metric TypeError: '>' not supported between instances of 'str' and 'i" --> Python API was updated, CLI needed to reflect these changes * [API] Updated amdsmi.h's with ROCm SMI --> Incorrectly added mem_bandwidth_acc & mem_max_bandwidth --> Realigned wrapper with updates * [Test] Added metrics not shown in gpu_metrics_read.cc Change-Id: Ia3a172377fd5a582254dd5a46d81dbec7e763cd9 Signed-off-by: Charis Poag --- amdsmi_cli/amdsmi_commands.py | 8 +- include/amd_smi/amdsmi.h | 6 - py-interface/README.md | 2 - py-interface/amdsmi_interface.py | 11 +- py-interface/amdsmi_wrapper.py | 3 - src/amd_smi/amd_smi.cc | 4 - .../functional/gpu_metrics_read.cc | 163 +++++++++++------- 7 files changed, 109 insertions(+), 88 deletions(-) diff --git a/amdsmi_cli/amdsmi_commands.py b/amdsmi_cli/amdsmi_commands.py index 91df9ad5a1..6f032de3ce 100644 --- a/amdsmi_cli/amdsmi_commands.py +++ b/amdsmi_cli/amdsmi_commands.py @@ -1121,8 +1121,8 @@ class AMDSMICommands(): # Put the metrics table in the debug logs try: - gpu_metric_debug_output = amdsmi_interface.amdsmi_get_gpu_metrics_info(args.gpu) - gpu_metric_str = json.dumps(gpu_metric_debug_output, indent=4) + gpu_metric_debug_info = amdsmi_interface.amdsmi_get_gpu_metrics_info(args.gpu) + gpu_metric_str = json.dumps(gpu_metric_debug_info, indent=4) logging.debug("GPU Metrics table for %s | %s", gpu_id, gpu_metric_str) except amdsmi_exception.AmdSmiLibraryException as e: logging.debug("Unabled to load GPU Metrics table for %s | %s", gpu_id, e.err_info) @@ -1152,10 +1152,6 @@ class AMDSMICommands(): engine_usage['jpeg_activity'] = gpu_metric_info.pop('jpeg_activity') for key, value in engine_usage.items(): - if not isinstance(value, list) and value > 100: - engine_usage[key] = "N/A" - elif isinstance(value, list): - engine_usage[key] = ["N/A" if v > 100 else v for v in value] if self.logger.is_human_readable_format(): unit = '%' diff --git a/include/amd_smi/amdsmi.h b/include/amd_smi/amdsmi.h index 87d86dbd9b..3d06afedba 100644 --- a/include/amd_smi/amdsmi.h +++ b/include/amd_smi/amdsmi.h @@ -1385,12 +1385,6 @@ typedef struct { // JPEG activity % per AID uint16_t jpeg_activity[AMDSMI_MAX_NUM_JPEG]; - // Memory Bandwidth Usage Accumulated (GB/sec) - uint64_t mem_bandwidth_acc; - - // Memory Bandwidth Maximum (GB/sec) - uint32_t mem_max_bandwidth; - // PCIE NAK sent accumulated count uint32_t pcie_nak_sent_count_acc; diff --git a/py-interface/README.md b/py-interface/README.md index 8dd4f0fa5c..ffc67ef43d 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -2136,8 +2136,6 @@ Output: Dictionary with fields `current_socclks` | List of current soc clock frequencies | MHz `current_vclk0s` | List of current v0 clock frequencies | MHz `current_dclk0s` | List of current d0 clock frequencies | MHz -`mem_bandwidth_acc` | Memory bandwidth usage accumulated | GB/s -`mem_max_bandwidth` | Maximum memory bandwidth usage accumulated | GB/s `pcie_nak_sent_count_acc` | PCIe NAC sent count accumulated | `pcie_nak_rcvd_count_acc` | PCIe NAC received count accumulated | `jpeg_activity` | List of JPEG engine activity | % diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 53c4745bf5..3d3a91be51 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -3290,8 +3290,6 @@ def amdsmi_get_gpu_metrics_info( "current_socclks": list(gpu_metrics.current_socclks), "current_vclk0s": list(gpu_metrics.current_vclk0s), "current_dclk0s": list(gpu_metrics.current_dclk0s), - "mem_bandwidth_acc": gpu_metrics.mem_bandwidth_acc, - "mem_max_bandwidth": gpu_metrics.mem_max_bandwidth, "pcie_nak_sent_count_acc": gpu_metrics.pcie_nak_sent_count_acc, "pcie_nak_rcvd_count_acc": gpu_metrics.pcie_nak_rcvd_count_acc, "jpeg_activity": list(gpu_metrics.jpeg_activity), @@ -3313,8 +3311,7 @@ def amdsmi_get_gpu_metrics_info( if gpu_metrics_output[value] == 0xFFFF: gpu_metrics_output[value] = "N/A" - uint_32_values = ['gfx_activity_acc', 'mem_activity_acc', 'mem_max_bandwidth', - 'pcie_nak_sent_count_acc', 'pcie_nak_rcvd_count_acc'] + uint_32_values = ['gfx_activity_acc','mem_activity_acc', 'pcie_nak_sent_count_acc', 'pcie_nak_rcvd_count_acc'] for value in uint_32_values: if gpu_metrics_output[value] == 0xFFFFFFFF: @@ -3323,7 +3320,7 @@ def amdsmi_get_gpu_metrics_info( uint_64_values = ['energy_accumulator', 'system_clock_counter', 'firmware_timestamp', 'pcie_bandwidth_acc', 'pcie_bandwidth_inst', 'pcie_l0_to_recov_count_acc', 'pcie_replay_count_acc', - 'pcie_replay_rover_count_acc', 'mem_bandwidth_acc'] + 'pcie_replay_rover_count_acc'] for value in uint_64_values: if gpu_metrics_output[value] == 0xFFFFFFFFFFFFFFFF: @@ -3345,7 +3342,7 @@ def amdsmi_get_gpu_metrics_info( gpu_metrics_output['indep_throttle_status'] = bool(gpu_metrics_output['indep_throttle_status']) for idx, activity in enumerate(gpu_metrics_output['vcn_activity']): - if activity == 0xFFFF: + if activity == 0xFFFF or activity > 100: gpu_metrics_output['vcn_activity'][idx] = "N/A" if gpu_metrics_output['gfxclk_lock_status'] == 0xFFFFFFFF: @@ -3378,7 +3375,7 @@ def amdsmi_get_gpu_metrics_info( gpu_metrics_output['current_dclk0s'][idx] = "N/A" for idx, activity in enumerate(gpu_metrics_output['jpeg_activity']): - if activity == 0xFFFF: + if activity == 0xFFFF or activity > 100: gpu_metrics_output['jpeg_activity'][idx] = "N/A" return gpu_metrics_output diff --git a/py-interface/amdsmi_wrapper.py b/py-interface/amdsmi_wrapper.py index 3b722fc238..4641a19c06 100644 --- a/py-interface/amdsmi_wrapper.py +++ b/py-interface/amdsmi_wrapper.py @@ -1620,11 +1620,8 @@ struct_amdsmi_gpu_metrics_t._fields_ = [ ('current_vclk0s', ctypes.c_uint16 * 4), ('current_dclk0s', ctypes.c_uint16 * 4), ('jpeg_activity', ctypes.c_uint16 * 32), - ('mem_bandwidth_acc', ctypes.c_uint64), - ('mem_max_bandwidth', ctypes.c_uint32), ('pcie_nak_sent_count_acc', ctypes.c_uint32), ('pcie_nak_rcvd_count_acc', ctypes.c_uint32), - ('PADDING_4', ctypes.c_ubyte * 4), ] amdsmi_gpu_metrics_t = struct_amdsmi_gpu_metrics_t diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index 0acec358c0..bb01bfeafe 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -1140,10 +1140,6 @@ amdsmi_status_t amdsmi_get_gpu_metrics_info( (sizeof(pgpu_metrics->jpeg_activity) / sizeof(pgpu_metrics->jpeg_activity[0])), std::numeric_limits::max()); - pgpu_metrics->mem_bandwidth_acc = - static_cast(std::numeric_limits::max()); - pgpu_metrics->mem_max_bandwidth = - static_cast(std::numeric_limits::max()); pgpu_metrics->pcie_nak_sent_count_acc = static_cast(std::numeric_limits::max()); pgpu_metrics->pcie_nak_rcvd_count_acc = diff --git a/tests/amd_smi_test/functional/gpu_metrics_read.cc b/tests/amd_smi_test/functional/gpu_metrics_read.cc index 33af655534..7306581a85 100644 --- a/tests/amd_smi_test/functional/gpu_metrics_read.cc +++ b/tests/amd_smi_test/functional/gpu_metrics_read.cc @@ -135,65 +135,77 @@ void TestGpuMetricsRead::Run(void) { << smu.firmware_timestamp << '\n'; std::cout << "\n"; std::cout << "TEMPERATURES (C):\n"; - std::cout << std::dec << "temperature_edge=" - << smu.temperature_edge << '\n'; - std::cout << std::dec << "temperature_hotspot=" - << smu.temperature_hotspot << '\n'; - std::cout << std::dec << "temperature_mem=" - << smu.temperature_mem << '\n'; - std::cout << std::dec << "temperature_vrgfx=" - << smu.temperature_vrgfx << '\n'; - std::cout << std::dec << "temperature_vrsoc=" - << smu.temperature_vrsoc << '\n'; - std::cout << std::dec << "temperature_vrmem=" - << smu.temperature_vrmem << '\n'; + std::cout << std::dec << "temperature_edge= " + << static_cast(smu.temperature_edge) << '\n'; + std::cout << std::dec << "temperature_hotspot= " + << static_cast(smu.temperature_hotspot) << '\n'; + std::cout << std::dec << "temperature_mem= " + << static_cast(smu.temperature_mem) << '\n'; + std::cout << std::dec << "temperature_vrgfx= " + << static_cast(smu.temperature_vrgfx) << '\n'; + std::cout << std::dec << "temperature_vrsoc= " + << static_cast(smu.temperature_vrsoc) << '\n'; + std::cout << std::dec << "temperature_vrmem= " + << static_cast(smu.temperature_vrmem) << '\n'; for (int i = 0; i < AMDSMI_NUM_HBM_INSTANCES; ++i) { - std::cout << "temperature_hbm[" << i << "]=" << std::dec << - smu.temperature_hbm[i] << '\n'; + std::cout << "temperature_hbm[" << i << "]= " << std::dec + << static_cast(smu.temperature_hbm[i]) << '\n'; } std::cout << "\n"; std::cout << "UTILIZATION (%):\n"; std::cout << std::dec << "average_gfx_activity=" - << smu.average_gfx_activity << '\n'; + << static_cast(smu.average_gfx_activity) << '\n'; std::cout << std::dec << "average_umc_activity=" - << smu.average_umc_activity << '\n'; + << static_cast(smu.average_umc_activity) << '\n'; std::cout << std::dec << "average_mm_activity=" - << smu.average_mm_activity << '\n'; - std::cout << std::dec << "jpeg_activity= ["; + << static_cast(smu.average_mm_activity) << '\n'; + std::cout << std::dec << "vcn_activity= ["; uint16_t size = static_cast( + sizeof(smu.vcn_activity)/sizeof(smu.vcn_activity[0])); + for (uint16_t i= 0; i < size; i++) { + if (i+1 < size) { + std::cout << std::dec << static_cast(smu.vcn_activity[i]) << ", "; + } else { + std::cout << std::dec << static_cast(smu.vcn_activity[i]); + } + } + std::cout << std::dec << "]\n"; + std::cout << "\n"; + std::cout << std::dec << "jpeg_activity= ["; + size = static_cast( sizeof(smu.jpeg_activity)/sizeof(smu.jpeg_activity[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.jpeg_activity[i] << ", "; + std::cout << std::dec << static_cast(smu.jpeg_activity[i]) << ", "; } else { - std::cout << std::dec << smu.jpeg_activity[i]; + std::cout << std::dec << static_cast(smu.jpeg_activity[i]); } } std::cout << std::dec << "]\n"; std::cout << "\n"; std::cout << "POWER (W)/ENERGY (15.259uJ per 1ns):\n"; std::cout << std::dec << "average_socket_power=" - << smu.average_socket_power << '\n'; + << static_cast(smu.average_socket_power) << '\n'; std::cout << std::dec << "current_socket_power=" - << smu.current_socket_power << '\n'; + << static_cast(smu.current_socket_power) << '\n'; std::cout << std::dec << "energy_accumulator=" - << smu.energy_accumulator << '\n'; + << static_cast(smu.energy_accumulator) << '\n'; std::cout << "\n"; std::cout << "AVG CLOCKS (MHz):\n"; std::cout << std::dec << "average_gfxclk_frequency=" - << smu.average_gfxclk_frequency << '\n'; + << static_cast(smu.average_gfxclk_frequency) << '\n'; std::cout << std::dec << "average_gfxclk_frequency=" - << smu.average_gfxclk_frequency << '\n'; + << static_cast(smu.average_gfxclk_frequency) << '\n'; std::cout << std::dec << "average_uclk_frequency=" - << smu.average_uclk_frequency << '\n'; + << static_cast(smu.average_uclk_frequency) << '\n'; std::cout << std::dec << "average_vclk0_frequency=" - << smu.average_vclk0_frequency << '\n'; + << static_cast(smu.average_vclk0_frequency) << '\n'; std::cout << std::dec << "average_dclk0_frequency=" - << smu.average_dclk0_frequency << '\n'; + << static_cast(smu.average_dclk0_frequency) << '\n'; std::cout << std::dec << "average_vclk1_frequency=" - << smu.average_vclk1_frequency << '\n'; + << static_cast(smu.average_vclk1_frequency) << '\n'; std::cout << std::dec << "average_dclk1_frequency=" - << smu.average_dclk1_frequency << '\n'; + << static_cast(smu.average_dclk1_frequency) << '\n'; std::cout << "\n"; std::cout << "CURRENT CLOCKS (MHz):\n"; std::cout << std::dec << "current_gfxclk=" @@ -203,9 +215,9 @@ void TestGpuMetricsRead::Run(void) { sizeof(smu.current_gfxclks)/sizeof(smu.current_gfxclks[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.current_gfxclks[i] << ", "; + std::cout << std::dec << static_cast(smu.current_gfxclks[i]) << ", "; } else { - std::cout << std::dec << smu.current_gfxclks[i]; + std::cout << std::dec << static_cast(smu.current_gfxclks[i]); } } std::cout << std::dec << "]\n"; @@ -216,24 +228,24 @@ void TestGpuMetricsRead::Run(void) { sizeof(smu.current_socclks)/sizeof(smu.current_socclks[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.current_socclks[i] << ", "; + std::cout << std::dec << static_cast(smu.current_socclks[i]) << ", "; } else { - std::cout << std::dec << smu.current_socclks[i]; + std::cout << std::dec << static_cast(smu.current_socclks[i]); } } std::cout << std::dec << "]\n"; std::cout << std::dec << "current_uclk=" - << smu.current_uclk << '\n'; + << static_cast(smu.current_uclk) << '\n'; std::cout << std::dec << "current_vclk0=" - << smu.current_vclk0 << '\n'; + << static_cast(smu.current_vclk0) << '\n'; std::cout << std::dec << "current_vclk0s= ["; size = static_cast( sizeof(smu.current_vclk0s)/sizeof(smu.current_vclk0s[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.current_vclk0s[i] << ", "; + std::cout << std::dec << static_cast(smu.current_vclk0s[i]) << ", "; } else { - std::cout << std::dec << smu.current_vclk0s[i]; + std::cout << std::dec << static_cast(smu.current_vclk0s[i]); } } std::cout << std::dec << "]\n"; @@ -244,24 +256,24 @@ void TestGpuMetricsRead::Run(void) { sizeof(smu.current_dclk0s)/sizeof(smu.current_dclk0s[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.current_dclk0s[i] << ", "; + std::cout << std::dec << static_cast(smu.current_dclk0s[i]) << ", "; } else { - std::cout << std::dec << smu.current_dclk0s[i]; + std::cout << std::dec << static_cast(smu.current_dclk0s[i]); } } std::cout << std::dec << "]\n"; std::cout << std::dec << "current_vclk1=" - << smu.current_vclk1 << '\n'; + << static_cast(smu.current_vclk1) << '\n'; std::cout << std::dec << "current_dclk1=" - << smu.current_dclk1 << '\n'; + << static_cast(smu.current_dclk1) << '\n'; std::cout << "\n"; std::cout << "TROTTLE STATUS:\n"; std::cout << std::dec << "throttle_status=" - << smu.throttle_status << '\n'; + << static_cast(smu.throttle_status) << '\n'; std::cout << "\n"; std::cout << "FAN SPEED:\n"; std::cout << std::dec << "current_fan_speed=" - << smu.current_fan_speed << '\n'; + << static_cast(smu.current_fan_speed) << '\n'; std::cout << "\n"; std::cout << "LINK WIDTH (number of lanes) /SPEED (0.1 GT/s):\n"; std::cout << "pcie_link_width=" @@ -276,9 +288,9 @@ void TestGpuMetricsRead::Run(void) { std::cout << "\n"; std::cout << "Utilization Accumulated(%):\n"; std::cout << "gfx_activity_acc=" - << std::dec << smu.gfx_activity_acc << '\n'; + << std::dec << static_cast(smu.gfx_activity_acc) << '\n'; std::cout << "mem_activity_acc=" - << std::dec << smu.mem_activity_acc << '\n'; + << std::dec << static_cast(smu.mem_activity_acc) << '\n'; std::cout << "\n"; std::cout << "XGMI ACCUMULATED DATA TRANSFER SIZE (KB):\n"; @@ -287,9 +299,9 @@ void TestGpuMetricsRead::Run(void) { sizeof(smu.xgmi_read_data_acc)/sizeof(smu.xgmi_read_data_acc[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.xgmi_read_data_acc[i] << ", "; + std::cout << std::dec << static_cast(smu.xgmi_read_data_acc[i]) << ", "; } else { - std::cout << std::dec << smu.xgmi_read_data_acc[i]; + std::cout << std::dec << static_cast(smu.xgmi_read_data_acc[i]); } } std::cout << std::dec << "]\n"; @@ -298,31 +310,62 @@ void TestGpuMetricsRead::Run(void) { sizeof(smu.xgmi_write_data_acc)/sizeof(smu.xgmi_write_data_acc[0])); for (uint16_t i= 0; i < size; i++) { if (i+1 < size) { - std::cout << std::dec << smu.xgmi_write_data_acc[i] << ", "; + std::cout << std::dec << static_cast(smu.xgmi_write_data_acc[i]) << ", "; } else { - std::cout << std::dec << smu.xgmi_write_data_acc[i]; + std::cout << std::dec << static_cast(smu.xgmi_write_data_acc[i]); } } std::cout << std::dec << "]\n"; - std::cout << "mem_bandwidth_acc=" << std::dec - << smu.mem_bandwidth_acc << "\n"; - std::cout << "mem_max_bandwidth=" << std::dec - << smu.mem_max_bandwidth << "\n"; - std::cout << "pcie_nak_sent_count_acc=" << std::dec - << smu.pcie_nak_sent_count_acc << "\n"; - std::cout << "pcie_nak_rcvd_count_acc=" << std::dec - << smu.pcie_nak_rcvd_count_acc << "\n"; + + // Voltage (mV) + std::cout << "voltage_soc = " + << std::dec << static_cast(smu.voltage_soc) << "\n"; + std::cout << "voltage_soc = " + << std::dec << static_cast(smu.voltage_gfx) << "\n"; + std::cout << "voltage_mem = " + << std::dec << static_cast(smu.voltage_mem) << "\n"; + + std::cout << "indep_throttle_status = " + << std::dec << static_cast(smu.indep_throttle_status) << "\n"; + + // Clock Lock Status. Each bit corresponds to clock instance + std::cout << "gfxclk_lock_status (in hex) = " + << std::hex << static_cast(smu.gfxclk_lock_status) << std::dec <<"\n"; + + // Bandwidth (GB/sec) + std::cout << "pcie_bandwidth_acc=" << std::dec + << static_cast(smu.pcie_bandwidth_acc) << "\n"; + std::cout << "pcie_bandwidth_inst=" << std::dec + << static_cast(smu.pcie_bandwidth_inst) << "\n"; + + // Counts + std::cout << "pcie_l0_to_recov_count_acc= " << std::dec + << static_cast(smu.pcie_l0_to_recov_count_acc) << "\n"; + std::cout << "pcie_replay_count_acc= " << std::dec + << static_cast(smu.pcie_replay_count_acc) << "\n"; + std::cout << "pcie_replay_rover_count_acc= " << std::dec + << static_cast(smu.pcie_replay_rover_count_acc) << "\n"; + std::cout << "pcie_nak_rcvd_count_acc= " << std::dec + << static_cast(smu.pcie_nak_rcvd_count_acc) << "\n"; + std::cout << "pcie_replay_rover_count_acc= " << std::dec + << static_cast(smu.pcie_replay_rover_count_acc) << "\n"; } } // Verify api support checking functionality is working err = amdsmi_get_gpu_metrics_info(processor_handles_[i], nullptr); - DISPLAY_AMDSMI_ERR(err); + if (err !=AMDSMI_STATUS_INVAL) { + DISPLAY_AMDSMI_ERR(err); + } + amdsmi_status_code_to_string(err, &status_string); + std::cout << "\t\t** amdsmi_get_gpu_metrics_info(nullptr check): " << status_string << "\n"; ASSERT_EQ(err, AMDSMI_STATUS_INVAL); } +/** + * START OF INDIVIDUAL METRIC CALLS + */ - auto val_ui16 = uint16_t(0); auto val_ui32 = uint32_t(0); auto val_ui64 = uint64_t(0); From 0550c9352c66ee478fd394e5077d896e8117dcae Mon Sep 17 00:00:00 2001 From: Maisam Arif Date: Wed, 24 Jan 2024 21:18:35 -0600 Subject: [PATCH 2/7] Updated engine_activity api Signed-off-by: Maisam Arif Change-Id: I3f62e093fdc0254015c0837dca59763551d3659c --- py-interface/README.md | 2 +- py-interface/amdsmi_interface.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/py-interface/README.md b/py-interface/README.md index ffc67ef43d..f34bb24683 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -598,7 +598,7 @@ Input parameters: * `processor_handle` device which to query -Output: Dictionary with fields +Output: Dictionary of activites to their respective usage percentage or 'N/A' if not supported Field | Description ---|--- diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 3d3a91be51..9eb3a9722c 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -1697,12 +1697,18 @@ def amdsmi_get_gpu_activity( ) ) - return { + activity_dict = { "gfx_activity": engine_usage.gfx_activity, "umc_activity": engine_usage.umc_activity, "mm_activity": engine_usage.mm_activity, } + for key, value in activity_dict.items(): + if value == 0xFFFF: + activity_dict[key] = "N/A" + + return activity_dict + def amdsmi_get_clock_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, From 3aabb927b4f502b1fee2607bffee21e62490fa55 Mon Sep 17 00:00:00 2001 From: Deepak Mewar Date: Thu, 25 Jan 2024 02:00:15 -0500 Subject: [PATCH 3/7] amdsmi README updated for python interface Change-Id: I92c1e8eb646488a9cdc32d0933f27e5db8c172ef --- py-interface/README.md | 72 +++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/py-interface/README.md b/py-interface/README.md index f34bb24683..ff04d9cdbd 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -5126,7 +5126,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5151,7 +5151,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5178,7 +5178,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5203,7 +5203,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5230,7 +5230,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5255,7 +5255,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5282,7 +5282,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5309,7 +5309,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpucore_handles() if len(processor_handles) == 0: print("No CPU cores on machine") else: @@ -5334,7 +5334,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5359,7 +5359,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5384,7 +5384,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5409,7 +5409,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5434,7 +5434,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5458,7 +5458,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5482,7 +5482,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpucore_handles() if len(processor_handles) == 0: print("No CPU cores on machine") else: @@ -5507,7 +5507,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5532,7 +5532,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpucore_handles() if len(processor_handles) == 0: print("No CPU cores on machine") else: @@ -5556,7 +5556,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5580,7 +5580,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5607,7 +5607,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5632,7 +5632,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5658,7 +5658,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5685,7 +5685,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5713,7 +5713,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5737,7 +5737,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5761,7 +5761,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5785,7 +5785,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5809,7 +5809,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5833,7 +5833,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5859,7 +5859,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5883,7 +5883,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5907,7 +5907,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5932,7 +5932,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5957,7 +5957,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -5982,7 +5982,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: @@ -6013,7 +6013,7 @@ Example: ```python try: - processor_handles = amdsmi_get_processor_handles() + processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: From 55734d2d7a2bd602d60a73a270209da002f18a9a Mon Sep 17 00:00:00 2001 From: "Oliveira, Daniel" Date: Tue, 16 Jan 2024 12:49:51 -0600 Subject: [PATCH 4/7] fix: [rocm/amd_smi_lib] header cleanup Remove non-unified headers Cleans up individual gpu metric APIs which will be implemented according to 'unified-headers' standards Code changes related to the following: * '_get_gpu_metrics_' APIs * Functional tests Change-Id: I2dd2ecde11c1d77e343e0ae0e10aeb9120ae9b99 Signed-off-by: Oliveira, Daniel --- include/amd_smi/amdsmi.h | 1050 ----------------- src/amd_smi/amd_smi.cc | 582 --------- .../functional/gpu_metrics_read.cc | 694 ----------- 3 files changed, 2326 deletions(-) diff --git a/include/amd_smi/amdsmi.h b/include/amd_smi/amdsmi.h index 3d06afedba..06a927730d 100644 --- a/include/amd_smi/amdsmi.h +++ b/include/amd_smi/amdsmi.h @@ -4416,1056 +4416,6 @@ amdsmi_get_gpu_total_ecc_count(amdsmi_processor_handle processor_handle, amdsmi_ /** @} End eccinfo */ -/*****************************************************************************/ -/** @defgroup metricfunctions GPU Metric Functions - * These functions are used to get granular information about all counters - * available in GPU Metrics. - * @{ - */ - -/** - * Metric multi-valued counter types - */ -typedef uint16_t gpu_metric_temp_hbm_t[AMDSMI_NUM_HBM_INSTANCES]; -typedef uint16_t gpu_metric_vcn_activity_t[AMDSMI_MAX_NUM_VCN]; -typedef uint64_t gpu_metric_xgmi_read_data_acc_t[AMDSMI_MAX_NUM_XGMI_LINKS]; -typedef uint64_t gpu_metric_xgmi_write_data_acc_t[AMDSMI_MAX_NUM_XGMI_LINKS]; -typedef uint16_t gpu_metric_curr_gfxclk_t[AMDSMI_MAX_NUM_GFX_CLKS]; -typedef uint16_t gpu_metric_curr_socclk_t[AMDSMI_MAX_NUM_CLKS]; -typedef uint16_t gpu_metric_curr_vclk0_t[AMDSMI_MAX_NUM_CLKS]; -typedef uint16_t gpu_metric_curr_dclk0_t[AMDSMI_MAX_NUM_CLKS]; - - -/****** - * Metric single-valued counter types - */ - -/** - * @brief Get the 'temp_hotspot' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_hotspot' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] hotspot_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_hotspot(amdsmi_processor_handle processor_handle, uint16_t* hotspot_value); - -/** - * @brief Get the 'temp_mem' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_mem' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] mem_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_mem(amdsmi_processor_handle processor_handle, uint16_t* mem_value); - -/** - * @brief Get the 'temp_vrsoc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_vrsoc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] vrsoc_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrsoc(amdsmi_processor_handle processor_handle, uint16_t* vrsoc_value); - -/** - * @brief Get the 'curr_socket_power' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'socket_power' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] socket_power_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_socket_power(amdsmi_processor_handle processor_handle, uint16_t* socket_power_value); - -/** - * @brief Get the 'avg_gfx_activity' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'gfx_activity' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] gfx_activity_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_gfx_activity(amdsmi_processor_handle processor_handle, uint16_t* gfx_activity_value); - -/** - * @brief Get the 'avg_umc_activity' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'umc_activity' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] umc_activity_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_umc_activity(amdsmi_processor_handle processor_handle, uint16_t* umc_activity_value); - -/** - * @brief Get the 'energy_acc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'energy_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] energy_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_energy_acc(amdsmi_processor_handle processor_handle, uint64_t* energy_acc_value); - -/** - * @brief Get the 'system_clock_counter' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'system_clock_counter' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] system_clock_counter_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_system_clock_counter(amdsmi_processor_handle processor_handle, uint64_t* system_clock_counter_value); - -/** - * @brief Get the 'firmware_timestamp' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'firmware_timestamp' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] firmware_timestamp_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_firmware_timestamp(amdsmi_processor_handle processor_handle, uint64_t* firmware_timestamp_value); - -/** - * @brief Get the 'throttle_status' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint32_t in which - * the 'throttle_status' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] throttle_status_value a pointer to uint32_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_throttle_status(amdsmi_processor_handle processor_handle, uint32_t* throttle_status_value); - -/** - * @brief Get the 'pcie_link_width' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'pcie_link_width' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_link_width_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_link_width(amdsmi_processor_handle processor_handle, uint16_t* pcie_link_width_value); - -/** - * @brief Get the 'pcie_link_speed' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'pcie_link_speed' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_link_speed_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_link_speed(amdsmi_processor_handle processor_handle, uint16_t* pcie_link_speed_value); - -/** - * @brief Get the 'xgmi_link_width' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'xgmi_link_width' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] xgmi_link_width_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_link_width(amdsmi_processor_handle processor_handle, uint16_t* xgmi_link_width_value); - -/** - * @brief Get the 'xgmi_link_speed' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'xgmi_link_speed' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] xgmi_link_speed_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_link_speed(amdsmi_processor_handle processor_handle, uint16_t* xgmi_link_speed_value); - -/** - * @brief Get the 'gfxclk_lock_status' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint32_t in which - * the 'gfxclk_lock_status' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] gfxclk_lock_status_value a pointer to uint32_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_gfxclk_lock_status(amdsmi_processor_handle processor_handle, uint32_t* gfxclk_lock_status_value); - -/** - * @brief Get the 'gfx_activity_acc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint32_t in which - * the 'gfx_activity_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] gfx_activity_acc_value a pointer to uint32_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_gfx_activity_acc(amdsmi_processor_handle processor_handle, uint32_t* gfx_activity_acc_value); - -/** - * @brief Get the 'mem_activity_acc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint32_t in which - * the 'mem_activity_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] mem_activity_acc_value a pointer to uint32_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_mem_activity_acc(amdsmi_processor_handle processor_handle, uint32_t* mem_activity_acc_value); - -/** - * @brief Get the 'pcie_bandwidth_acc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'pcie_bandwidth_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_bandwidth_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_bandwidth_acc(amdsmi_processor_handle processor_handle, uint64_t* pcie_bandwidth_acc_value); - -/** - * @brief Get the 'pcie_bandwidth_inst' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'pcie_bandwidth_inst' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_bandwidth_inst_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_bandwidth_inst(amdsmi_processor_handle processor_handle, uint64_t* pcie_bandwidth_inst_value); - -/** - * @brief Get the 'pcie_l0_recov_count_acc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'pcie_l0_recov_count_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_count_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc(amdsmi_processor_handle processor_handle, uint64_t* pcie_count_acc_value); - -/** - * @brief Get the 'pcie_replay_count_acc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'pcie_replay_count_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_count_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_replay_count_acc(amdsmi_processor_handle processor_handle, uint64_t* pcie_count_acc_value); - -/** - * @brief Get the 'pcie_replay_rover_count_acc' (Rollover count) from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'pcie_replay_rover_count_acc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] pcie_count_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc(amdsmi_processor_handle processor_handle, uint64_t* pcie_count_acc_value); - -/** - * @brief Get the 'curr_uclk' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_uclk' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] uclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_uclk(amdsmi_processor_handle processor_handle, uint16_t* uclk_value); - - -/****** - * Metric multi-valued counter types - */ - -/** - * @brief Get the 'temp_hbm' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_hbm' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] temp_hbm_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding a 4 (AMDSMI_NUM_HBM_INSTANCES) - * element array (gpu_metric_temp_hbm_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_hbm(amdsmi_processor_handle processor_handle, gpu_metric_temp_hbm_t* temp_hbm_value); - -/** - * @brief Get the 'vcn_activity' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'vcn_activity' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] vcn_activity_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding a 4 (AMDSMI_MAX_NUM_VCN) - * element array (gpu_metric_vcn_activity_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_vcn_activity(amdsmi_processor_handle processor_handle, gpu_metric_vcn_activity_t* vcn_activity_value); - -/** - * @brief Get the 'xgmi_read_data' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'xgmi_read_data' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] xgmi_read_data_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding an 8 (AMDSMI_MAX_NUM_XGMI_LINKS) - * element array (gpu_metric_xgmi_read_data_acc_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_read_data(amdsmi_processor_handle processor_handle, gpu_metric_xgmi_read_data_acc_t* xgmi_read_data_acc_value); - -/** - * @brief Get the 'xgmi_write_data' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'xgmi_write_data' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] xgmi_write_data_acc_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding an 8 (AMDSMI_MAX_NUM_XGMI_LINKS) - * element array (gpu_metric_xgmi_write_data_acc_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_write_data(amdsmi_processor_handle processor_handle, gpu_metric_xgmi_write_data_acc_t* xgmi_write_data_acc_value); - -/** - * @brief Get the 'curr_gfxclk' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'curr_gfxclk' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] current_gfxclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding an 8 (AMDSMI_MAX_NUM_GFX_CLKS) - * element array (gpu_metric_curr_gfxclk_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_gfxclk(amdsmi_processor_handle processor_handle, gpu_metric_curr_gfxclk_t* current_gfxclk_value); - -/** - * @brief Get the 'curr_socclk' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_socclk' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] current_socclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding a 4 (AMDSMI_MAX_NUM_CLKS) - * element array (gpu_metric_curr_socclk_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_socclk(amdsmi_processor_handle processor_handle, gpu_metric_curr_socclk_t* current_socclk_value); - -/** - * @brief Get the 'curr_vclk0' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_vclk0' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] current_vclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding a 4 (AMDSMI_MAX_NUM_CLKS) - * element array (gpu_metric_curr_vclk0_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_vclk0(amdsmi_processor_handle processor_handle, gpu_metric_curr_vclk0_t* current_vclk_value); - -/** - * @brief Get the 'curr_dclk0' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_dclk0' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] current_dclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - This is a multi-valued counter holding a 4 (AMDSMI_MAX_NUM_CLKS) - * element array (gpu_metric_curr_dclk0_t) - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_dclk0(amdsmi_processor_handle processor_handle, gpu_metric_curr_dclk0_t* current_dclk_value); - -/** - * @brief Get the 'temp_edge' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_edge' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] edge_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_edge(amdsmi_processor_handle processor_handle, uint16_t* edge_value); - -/** - * @brief Get the 'temp_vrgfx' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_vrgfx' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] vrgfx_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrgfx(amdsmi_processor_handle processor_handle, uint16_t* vrgfx_value); - -/** - * @brief Get the 'temp_vrmem' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'temp_vrmem' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] vrmem_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrmem(amdsmi_processor_handle processor_handle, uint16_t* vrmem_value); - -/** - * @brief Get the 'avg_mm_activity' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_mm_activity' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] mm_activity_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_mm_activity(amdsmi_processor_handle processor_handle, uint16_t* mm_activity_value); - -/** - * @brief Get the 'curr_vclk1' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_vclk1' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] current_vclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_vclk1(amdsmi_processor_handle processor_handle, uint16_t* current_vclk_value); - -/** - * @brief Get the 'curr_dclk1' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_dclk1' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] current_dclk_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_dclk1(amdsmi_processor_handle processor_handle, uint16_t* current_dclk_value); - -/** - * @brief Get the 'indep_throttle_status' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint64_t in which - * the 'indep_throttle_status' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] throttle_status_value a pointer to uint64_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_indep_throttle_status(amdsmi_processor_handle processor_handle, uint64_t* throttle_status_value); - -/** - * @brief Get the 'avg_socket_power' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_socket_power' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] socket_power_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_socket_power(amdsmi_processor_handle processor_handle, uint16_t* socket_power_value); - -/** - * @brief Get the 'curr_fan_speed' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'curr_fan_speed' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] fan_speed_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_fan_speed(amdsmi_processor_handle processor_handle, uint16_t* fan_speed_value); - -/** - * @brief Get the 'avg_gfx_clock_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_gfx_clock_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_gfx_clock_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'avg_soc_clock_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_soc_clock_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_soc_clock_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'avg_uclock_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_uclock_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_uclock_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'avg_vclock0_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_vclock0_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_vclock0_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'avg_dclock0_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_dclock0_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_dclock0_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'avg_vclock1_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_vclock1_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_vclock1_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'avg_dclock1_frequency' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'avg_dclock1_frequency' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] clock_frequency_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_dclock1_frequency(amdsmi_processor_handle processor_handle, uint16_t* clock_frequency_value); - -/** - * @brief Get the 'volt_soc' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'volt_soc' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] voltage_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_volt_soc(amdsmi_processor_handle processor_handle, uint16_t* voltage_value); - -/** - * @brief Get the 'volt_gfx' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'volt_gfx' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] voltage_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_volt_gfx(amdsmi_processor_handle processor_handle, uint16_t* voltage_value); - -/** - * @brief Get the 'volt_mem' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'volt_mem' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] voltage_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_volt_mem(amdsmi_processor_handle processor_handle, uint16_t* voltage_value); - -/** - * @brief Get the 'metrics_header_info' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a amd_metrics_table_header_t in which - * the 'metrics_header_info' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] header_value a pointer to amd_metrics_table_header_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_header_info(amdsmi_processor_handle processor_handle, amd_metrics_table_header_t* header_value); - -/** - * @brief Get the 'xcd_counter' from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle and a pointer to a uint16_t in which - * the 'xcd_counter' will stored - * - * @param[in] processor_handle Device which to query - * - * @param[inout] xcd_counter_value a pointer to uint16_t to which the device gpu - * metric unit will be stored - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * ::AMDSMI_STATUS_NOT_SUPPORTED is returned in case the metric unit - * does not exist for the given device - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_xcd_counter(amdsmi_processor_handle processor_handle, uint16_t* xcd_counter_value); - -/** - * @brief Get the log from the GPU metrics associated with the device - * - * @details Given a processor handle @p processor_handle it will log all the gpu metric info - * related to the device. The 'logging' feature must be on. - * - * @param[in] processor_handle Device which to query - * - * @retval ::AMDSMI_STATUS_SUCCESS is returned upon successful call. - * - */ -amdsmi_status_t -amdsmi_get_gpu_metrics_log(amdsmi_processor_handle processor_handle); - -/** @} End metricfunctions */ - - #ifdef ENABLE_ESMI_LIB /*---------------------------------------------------------------------------*/ /** @defgroup energyinfo Energy information (RAPL MSR) */ diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index bb01bfeafe..532e485da8 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -2119,588 +2119,6 @@ amdsmi_status_t amdsmi_get_processor_handle_from_bdf(amdsmi_bdf_t bdf, return AMDSMI_STATUS_API_FAILED; } -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_hotspot(amdsmi_processor_handle processor_handle, - uint16_t *hotspot_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_hotspot_get, processor_handle, - hotspot_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_mem(amdsmi_processor_handle processor_handle, - uint16_t *mem_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_mem_get, processor_handle, - mem_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrsoc(amdsmi_processor_handle processor_handle, - uint16_t *vrsoc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_vrsoc_get, processor_handle, - vrsoc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_socket_power(amdsmi_processor_handle processor_handle, - uint16_t *socket_power_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_socket_power_get, processor_handle, - socket_power_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_gfx_activity(amdsmi_processor_handle processor_handle, - uint16_t *gfx_activity_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_gfx_activity_get, processor_handle, - gfx_activity_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_umc_activity(amdsmi_processor_handle processor_handle, - uint16_t *umc_activity_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_umc_activity_get, processor_handle, - umc_activity_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_energy_acc(amdsmi_processor_handle processor_handle, - uint64_t *energy_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_energy_acc_get, processor_handle, - energy_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_system_clock_counter(amdsmi_processor_handle processor_handle, - uint64_t *system_clock_counter_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_system_clock_counter_get, processor_handle, - system_clock_counter_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_firmware_timestamp(amdsmi_processor_handle processor_handle, - uint64_t *firmware_timestamp_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_firmware_timestamp_get, processor_handle, - firmware_timestamp_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_throttle_status(amdsmi_processor_handle processor_handle, - uint32_t *throttle_status_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_throttle_status_get, processor_handle, - throttle_status_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_link_width(amdsmi_processor_handle processor_handle, - uint16_t *pcie_link_width_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_link_width_get, processor_handle, - pcie_link_width_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_link_speed(amdsmi_processor_handle processor_handle, - uint16_t *pcie_link_speed_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_link_speed_get, processor_handle, - pcie_link_speed_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_link_width(amdsmi_processor_handle processor_handle, - uint16_t *xgmi_link_width_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_xgmi_link_width_get, processor_handle, - xgmi_link_width_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_link_speed(amdsmi_processor_handle processor_handle, - uint16_t *xgmi_link_speed_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_xgmi_link_speed_get, processor_handle, - xgmi_link_speed_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_gfxclk_lock_status(amdsmi_processor_handle processor_handle, - uint32_t *gfxclk_lock_status_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_gfxclk_lock_status_get, processor_handle, - gfxclk_lock_status_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_gfx_activity_acc(amdsmi_processor_handle processor_handle, - uint32_t *gfx_activity_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_gfx_activity_acc_get, processor_handle, - gfx_activity_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_mem_activity_acc(amdsmi_processor_handle processor_handle, - uint32_t *mem_activity_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_mem_activity_acc_get, processor_handle, - mem_activity_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_bandwidth_acc(amdsmi_processor_handle processor_handle, - uint64_t *pcie_bandwidth_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_bandwidth_acc_get, processor_handle, - pcie_bandwidth_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_bandwidth_inst(amdsmi_processor_handle processor_handle, - uint64_t *pcie_bandwidth_inst_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_bandwidth_inst_get, processor_handle, - pcie_bandwidth_inst_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc(amdsmi_processor_handle processor_handle, - uint64_t *pcie_count_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_l0_recov_count_acc_get, processor_handle, - pcie_count_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_replay_count_acc(amdsmi_processor_handle processor_handle, - uint64_t *pcie_count_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_replay_count_acc_get, processor_handle, - pcie_count_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc(amdsmi_processor_handle processor_handle, - uint64_t *pcie_count_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_pcie_replay_rover_count_acc_get, processor_handle, - pcie_count_acc_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_uclk(amdsmi_processor_handle processor_handle, - uint16_t *uclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_uclk_get, processor_handle, - uclk_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_hbm(amdsmi_processor_handle processor_handle, - gpu_metric_temp_hbm_t *temp_hbm_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_hbm_get, processor_handle, - reinterpret_cast(temp_hbm_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_vcn_activity(amdsmi_processor_handle processor_handle, - gpu_metric_vcn_activity_t *vcn_activity_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_vcn_activity_get, processor_handle, - reinterpret_cast(vcn_activity_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_read_data(amdsmi_processor_handle processor_handle, - gpu_metric_xgmi_read_data_acc_t *xgmi_read_data_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_xgmi_read_data_get, processor_handle, - reinterpret_cast(xgmi_read_data_acc_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_write_data(amdsmi_processor_handle processor_handle, - gpu_metric_xgmi_write_data_acc_t *xgmi_write_data_acc_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_xgmi_write_data_get, processor_handle, - reinterpret_cast(xgmi_write_data_acc_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_gfxclk(amdsmi_processor_handle processor_handle, - gpu_metric_curr_gfxclk_t *curr_gfxclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_gfxclk_get, processor_handle, - reinterpret_cast(curr_gfxclk_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_socclk(amdsmi_processor_handle processor_handle, - gpu_metric_curr_socclk_t *current_socclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_socclk_get, processor_handle, - reinterpret_cast(current_socclk_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_vclk0(amdsmi_processor_handle processor_handle, - gpu_metric_curr_vclk0_t *current_vclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_vclk0_get, processor_handle, - reinterpret_cast(current_vclk_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_dclk0(amdsmi_processor_handle processor_handle, - gpu_metric_curr_dclk0_t *current_dclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_dclk0_get, processor_handle, - reinterpret_cast(current_dclk_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_edge(amdsmi_processor_handle processor_handle, - uint16_t *edge_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_edge_get, processor_handle, - edge_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrgfx(amdsmi_processor_handle processor_handle, - uint16_t *vrgfx_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_vrgfx_get, processor_handle, - vrgfx_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrmem(amdsmi_processor_handle processor_handle, - uint16_t *vrmem_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_temp_vrmem_get, processor_handle, - vrmem_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_mm_activity(amdsmi_processor_handle processor_handle, - uint16_t *mm_activity_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_mm_activity_get, processor_handle, - mm_activity_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_vclk1(amdsmi_processor_handle processor_handle, - uint16_t *current_vclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_vclk1_get, processor_handle, - current_vclk_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_dclk1(amdsmi_processor_handle processor_handle, - uint16_t *current_dclk_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_dclk1_get, processor_handle, - current_dclk_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_indep_throttle_status(amdsmi_processor_handle processor_handle, - uint64_t *throttle_status_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_indep_throttle_status_get, processor_handle, - throttle_status_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_socket_power(amdsmi_processor_handle processor_handle, - uint16_t *socket_power_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_socket_power_get, processor_handle, - socket_power_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_curr_fan_speed(amdsmi_processor_handle processor_handle, - uint16_t *fan_speed_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_curr_fan_speed_get, processor_handle, - fan_speed_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_gfx_clock_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_gfx_clock_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_soc_clock_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_soc_clock_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_uclock_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_uclock_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_vclock0_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_vclock0_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_dclock0_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_dclock0_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_vclock1_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_vclock1_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_avg_dclock1_frequency(amdsmi_processor_handle processor_handle, - uint16_t *clock_frequency_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_avg_dclock1_frequency_get, processor_handle, - clock_frequency_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_volt_soc(amdsmi_processor_handle processor_handle, - uint16_t *voltage_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_volt_soc_get, processor_handle, - voltage_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_volt_gfx(amdsmi_processor_handle processor_handle, - uint16_t *voltage_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_volt_gfx_get, processor_handle, - voltage_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_volt_mem(amdsmi_processor_handle processor_handle, - uint16_t *voltage_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_volt_mem_get, processor_handle, - voltage_value); -} - - -amdsmi_status_t -amdsmi_get_gpu_metrics_header_info(amdsmi_processor_handle processor_handle, - amd_metrics_table_header_t *header_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_header_info_get, processor_handle, - reinterpret_cast(header_value)); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_xcd_counter(amdsmi_processor_handle processor_handle, - uint16_t *xcd_counter_value) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_xcd_counter_get, processor_handle, - xcd_counter_value); -} - -amdsmi_status_t -amdsmi_get_gpu_metrics_log(amdsmi_processor_handle processor_handle) -{ - AMDSMI_CHECK_INIT(); - // nullptr api supported - - return rsmi_wrapper(rsmi_dev_metrics_log_get, processor_handle); -} - #ifdef ENABLE_ESMI_LIB static amdsmi_status_t amdsmi_errno_to_esmi_status(amdsmi_status_t status) diff --git a/tests/amd_smi_test/functional/gpu_metrics_read.cc b/tests/amd_smi_test/functional/gpu_metrics_read.cc index 7306581a85..031897da9f 100644 --- a/tests/amd_smi_test/functional/gpu_metrics_read.cc +++ b/tests/amd_smi_test/functional/gpu_metrics_read.cc @@ -361,698 +361,4 @@ void TestGpuMetricsRead::Run(void) { std::cout << "\t\t** amdsmi_get_gpu_metrics_info(nullptr check): " << status_string << "\n"; ASSERT_EQ(err, AMDSMI_STATUS_INVAL); } - -/** - * START OF INDIVIDUAL METRIC CALLS - */ - - auto val_ui16 = uint16_t(0); - auto val_ui32 = uint32_t(0); - auto val_ui64 = uint64_t(0); - auto status_code(amdsmi_status_t::AMDSMI_STATUS_SUCCESS); - for (uint32_t i = 0; i < num_monitor_devs(); ++i) { - PrintDeviceHeader(processor_handles_[i]); - std::cout << "Device #" << std::to_string(i) << "\n"; - - auto temp_edge_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_temp_edge(processor_handles_[i], &temp_edge_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_edge(): " << status_string << "\n"; - } - - auto temp_hotspot_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_temp_hotspot(processor_handles_[i], &temp_hotspot_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_hotspot(): " << status_string << "\n"; - } - - auto temp_mem_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_temp_mem(processor_handles_[i], &temp_mem_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_mem(): " << status_string << "\n"; - } - - auto temp_vrgfx_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_temp_vrgfx(processor_handles_[i], &temp_vrgfx_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_vrgfx(): " << status_string << "\n"; - } - - auto temp_vrsoc_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_temp_vrsoc(processor_handles_[i], &temp_vrsoc_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_vrsoc(): " << status_string << "\n"; - } - - auto temp_vrmem_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_temp_vrmem(processor_handles_[i], &temp_vrmem_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_vrmem(): " << status_string << "\n"; - } - - gpu_metric_temp_hbm_t temp_hbm_values; - status_code = amdsmi_get_gpu_metrics_temp_hbm(processor_handles_[i], &temp_hbm_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_hbm(): " << status_string << "\n"; - } - - auto temp_curr_socket_power_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_curr_socket_power(processor_handles_[i], &temp_curr_socket_power_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_socket_power(): " << status_string << "\n"; - } - - auto temp_energy_accum_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_energy_acc(processor_handles_[i], &temp_energy_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_energy_acc(): " << status_string << "\n"; - } - - auto temp_avg_socket_power_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_socket_power(processor_handles_[i], &temp_avg_socket_power_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_temp_edge(): " << status_string << "\n"; - } - - auto temp_avg_gfx_activity_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_gfx_activity(processor_handles_[i], &temp_avg_gfx_activity_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_gfx_activity(): " << status_string << "\n"; - } - - auto temp_avg_umc_activity_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_umc_activity(processor_handles_[i], &temp_avg_umc_activity_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_umc_activity(): " << status_string << "\n"; - } - - auto temp_avg_mm_activity_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_mm_activity(processor_handles_[i], &temp_avg_mm_activity_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_mm_activity(): " << status_string << "\n"; - } - - gpu_metric_vcn_activity_t temp_vcn_values; - status_code = amdsmi_get_gpu_metrics_vcn_activity(processor_handles_[i], &temp_vcn_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_vcn_activity(): " << status_string << "\n"; - } - - auto temp_mem_activity_accum_value = val_ui32; - status_code = amdsmi_get_gpu_metrics_mem_activity_acc(processor_handles_[i], &temp_mem_activity_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_mem_activity_acc(): " << status_string << "\n"; - } - - auto temp_gfx_activity_accum_value = val_ui32; - status_code = amdsmi_get_gpu_metrics_gfx_activity_acc(processor_handles_[i], &temp_gfx_activity_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_gfx_activity_acc(): " << status_string << "\n"; - } - - auto temp_avg_gfx_clock_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_gfx_clock_frequency(processor_handles_[i], &temp_avg_gfx_clock_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_gfx_clock_frequency(): " << status_string << "\n"; - } - - auto temp_avg_soc_clock_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_soc_clock_frequency(processor_handles_[i], &temp_avg_soc_clock_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_soc_clock_frequency(): " << status_string << "\n"; - } - - auto temp_avg_uclock_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_uclock_frequency(processor_handles_[i], &temp_avg_uclock_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_uclock_frequency(): " << status_string << "\n"; - } - - auto temp_avg_vclock0_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_vclock0_frequency(processor_handles_[i], &temp_avg_vclock0_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_vclock0_frequency(): " << status_string << "\n"; - } - - auto temp_avg_dclock0_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_dclock0_frequency(processor_handles_[i], &temp_avg_dclock0_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_dclock0_frequency(): " << status_string << "\n"; - } - - auto temp_avg_vclock1_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_vclock1_frequency(processor_handles_[i], &temp_avg_vclock1_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_vclock1_frequency(): " << status_string << "\n"; - } - - auto temp_avg_dclock1_freq_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_avg_dclock1_frequency(processor_handles_[i], &temp_avg_dclock1_freq_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_avg_dclock1_frequency(): " << status_string << "\n"; - } - - auto temp_curr_vclk1_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_curr_vclk1(processor_handles_[i], &temp_curr_vclk1_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_vclk1(): " << status_string << "\n"; - } - - auto temp_curr_dclk1_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_curr_dclk1(processor_handles_[i], &temp_curr_dclk1_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_dclk1(): " << status_string << "\n"; - } - - auto temp_curr_uclk_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_curr_uclk(processor_handles_[i], &temp_curr_uclk_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_uclk(): " << status_string << "\n"; - } - - gpu_metric_curr_dclk0_t temp_curr_dclk0_values; - status_code = amdsmi_get_gpu_metrics_curr_dclk0(processor_handles_[i], &temp_curr_dclk0_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_dclk0(): " << status_string << "\n"; - } - - gpu_metric_curr_gfxclk_t temp_curr_gfxclk_values; - status_code = amdsmi_get_gpu_metrics_curr_gfxclk(processor_handles_[i], &temp_curr_gfxclk_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_gfxclk(): " << status_string << "\n"; - } - - gpu_metric_curr_socclk_t temp_curr_socclk_values; - status_code = amdsmi_get_gpu_metrics_curr_socclk(processor_handles_[i], &temp_curr_socclk_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_socclk(): " << status_string << "\n"; - } - - gpu_metric_curr_vclk0_t temp_curr_vclk0_values; - status_code = amdsmi_get_gpu_metrics_curr_vclk0(processor_handles_[i], &temp_curr_vclk0_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_vclk0(): " << status_string << "\n"; - } - - auto temp_indep_throttle_status_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_indep_throttle_status(processor_handles_[i], &temp_indep_throttle_status_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_indep_throttle_status(): " << status_string << "\n"; - } - - auto temp_throttle_status_value = val_ui32; - status_code = amdsmi_get_gpu_metrics_throttle_status(processor_handles_[i], &temp_throttle_status_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_throttle_status(): " << status_string << "\n"; - } - - auto temp_gfxclk_lock_status_value = val_ui32; - status_code = amdsmi_get_gpu_metrics_gfxclk_lock_status(processor_handles_[i], &temp_gfxclk_lock_status_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_gfxclk_lock_status(): " << status_string << "\n"; - } - - auto temp_curr_fan_speed_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_curr_fan_speed(processor_handles_[i], &temp_curr_fan_speed_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_curr_fan_speed(): " << status_string << "\n"; - } - - auto temp_pcie_link_width_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_pcie_link_width(processor_handles_[i], &temp_pcie_link_width_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_link_width(): " << status_string << "\n"; - } - - auto temp_pcie_link_speed_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_pcie_link_speed(processor_handles_[i], &temp_pcie_link_speed_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_link_speed(): " << status_string << "\n"; - } - - auto temp_pcie_bandwidth_accum_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_pcie_bandwidth_acc(processor_handles_[i], &temp_pcie_bandwidth_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_bandwidth_acc(): " << status_string << "\n"; - } - - auto temp_pcie_bandwidth_inst_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_pcie_bandwidth_inst(processor_handles_[i], &temp_pcie_bandwidth_inst_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_bandwidth_inst(): " << status_string << "\n"; - } - - auto temp_pcie_l0_recov_count_accum_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc(processor_handles_[i], &temp_pcie_l0_recov_count_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc(): " << status_string << "\n"; - } - - auto temp_pcie_replay_count_accum_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_pcie_replay_count_acc(processor_handles_[i], &temp_pcie_replay_count_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_replay_count_acc(): " << status_string << "\n"; - } - - auto temp_pcie_replay_rover_count_accum_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc(processor_handles_[i], &temp_pcie_replay_rover_count_accum_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc(): " << status_string << "\n"; - } - - auto temp_xgmi_link_width_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_xgmi_link_width(processor_handles_[i], &temp_xgmi_link_width_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_xgmi_link_width(): " << status_string << "\n"; - } - - auto temp_xgmi_link_speed_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_xgmi_link_speed(processor_handles_[i], &temp_xgmi_link_speed_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_xgmi_link_speed(): " << status_string << "\n"; - } - - gpu_metric_xgmi_read_data_acc_t temp_xgmi_read_values; - status_code = amdsmi_get_gpu_metrics_xgmi_read_data(processor_handles_[i], &temp_xgmi_read_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_xgmi_read_data(): " << status_string << "\n"; - } - - gpu_metric_xgmi_write_data_acc_t temp_xgmi_write_values; - status_code = amdsmi_get_gpu_metrics_xgmi_write_data(processor_handles_[i], &temp_xgmi_write_values); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_xgmi_write_data(): " << status_string << "\n"; - } - - auto temp_voltage_soc_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_volt_soc(processor_handles_[i], &temp_voltage_soc_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_volt_soc(): " << status_string << "\n"; - } - - auto temp_voltage_gfx_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_volt_gfx(processor_handles_[i], &temp_voltage_gfx_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_volt_gfx(): " << status_string << "\n"; - } - - auto temp_voltage_mem_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_volt_mem(processor_handles_[i], &temp_voltage_mem_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_volt_mem(): " << status_string << "\n"; - } - - auto temp_system_clock_counter_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_system_clock_counter(processor_handles_[i], &temp_system_clock_counter_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_system_clock_counter(): " << status_string << "\n"; - } - - auto temp_firmware_timestamp_value = val_ui64; - status_code = amdsmi_get_gpu_metrics_firmware_timestamp(processor_handles_[i], &temp_firmware_timestamp_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_firmware_timestamp(): " << status_string << "\n"; - } - - auto temp_xcd_counter_value = val_ui16; - status_code = amdsmi_get_gpu_metrics_xcd_counter(processor_handles_[i], &temp_xcd_counter_value); - if (status_code != AMDSMI_STATUS_NOT_SUPPORTED) { - CHK_ERR_ASRT(status_code); - } else { - const char *status_string; - amdsmi_status_code_to_string(status_code, &status_string); - std::cout << "\t\t** amdsmi_get_gpu_metrics_xcd_counter(): " << status_string << "\n"; - } - - IF_VERB(STANDARD) { - std::cout << "\n"; - std::cout << "\t[Temperature]" << "\n"; - std::cout << "\t -> temp_edge(): " << std::dec << temp_edge_value << "\n"; - std::cout << "\t -> temp_hotspot(): " << std::dec << temp_hotspot_value << "\n"; - std::cout << "\t -> temp_mem(): " << std::dec << temp_mem_value << "\n"; - std::cout << "\t -> temp_vrgfx(): " << std::dec << temp_vrgfx_value << "\n"; - std::cout << "\t -> temp_vrsoc(): " << std::dec << temp_vrsoc_value << "\n"; - std::cout << "\t -> temp_vrmem(): " << std::dec << temp_vrmem_value << "\n"; - std::cout << "\t -> temp_hbm(temp_hbm_values): ["; - uint16_t size = static_cast( - sizeof(temp_hbm_values) / sizeof(temp_hbm_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_hbm_values[i] << ", "; - } else { - std::cout << std::dec << temp_hbm_values[i]; - } - } - std::cout << std::dec << "]\n"; - - std::cout << "\n"; - std::cout << "\t[Power/Energy]" << "\n"; - std::cout << "\t -> current_socket_power(): " << std::dec << temp_curr_socket_power_value << "\n"; - std::cout << "\t -> energy_accum(): " << std::dec << temp_energy_accum_value << "\n"; - std::cout << "\t -> average_socket_power(): " << std::dec << temp_avg_socket_power_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Utilization]" << "\n"; - std::cout << "\t -> average_gfx_activity(): " << std::dec << temp_avg_gfx_activity_value << "\n"; - std::cout << "\t -> average_umc_activity(): " << std::dec << temp_avg_umc_activity_value << "\n"; - std::cout << "\t -> average_mm_activity(): " << std::dec << temp_avg_mm_activity_value << "\n"; - std::cout << "\t -> vcn_activity(temp_vcn_values): ["; - size = static_cast( - sizeof(temp_vcn_values) / sizeof(temp_vcn_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_vcn_values[i] << ", "; - } else { - std::cout << std::dec << temp_vcn_values[i]; - } - } - std::cout << std::dec << "]\n"; - std::cout << "\t -> mem_activity_accum(): " << std::dec << temp_mem_activity_accum_value << "\n"; - std::cout << "\t -> gfx_activity_accum(): " << std::dec << temp_gfx_activity_accum_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Average Clock]" << "\n"; - std::cout << "\t -> average_gfx_clock_frequency(): " << std::dec << temp_avg_gfx_clock_freq_value << "\n"; - std::cout << "\t -> average_soc_clock_frequency(): " << std::dec << temp_avg_soc_clock_freq_value << "\n"; - std::cout << "\t -> average_uclock_frequency(): " << std::dec << temp_avg_uclock_freq_value << "\n"; - std::cout << "\t -> average_vclock0_frequency(): " << std::dec << std::dec << temp_avg_vclock0_freq_value << "\n"; - std::cout << "\t -> average_dclock0_frequency(): " << std::dec << temp_avg_dclock0_freq_value << "\n"; - std::cout << "\t -> average_vclock1_frequency(): " << std::dec << temp_avg_vclock1_freq_value << "\n"; - std::cout << "\t -> average_dclock1_frequency(): " << std::dec << temp_avg_dclock1_freq_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Current Clock]" << "\n"; - std::cout << "\t -> current_vclock1(): " << std::dec << temp_curr_vclk1_value << "\n"; - std::cout << "\t -> current_dclock1(): " << std::dec << temp_curr_dclk1_value << "\n"; - std::cout << "\t -> current_uclock(): " << std::dec << temp_curr_uclk_value << "\n"; - std::cout << "\t -> current_dclk0(temp_curr_dclk0_values): ["; - size = static_cast( - sizeof(temp_curr_dclk0_values) / sizeof(temp_curr_dclk0_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_curr_dclk0_values[i] << ", "; - } else { - std::cout << std::dec << temp_curr_dclk0_values[i]; - } - } - std::cout << std::dec << "]\n"; - std::cout << "\t -> current_gfxclk(temp_curr_gfxclk_values): ["; - size = static_cast( - sizeof(temp_curr_gfxclk_values) / sizeof(temp_curr_gfxclk_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_curr_gfxclk_values[i] << ", "; - } else { - std::cout << std::dec << temp_curr_gfxclk_values[i]; - } - } - std::cout << std::dec << "]\n"; - std::cout << "\t -> current_soc_clock(temp_curr_socclk_values): ["; - size = static_cast( - sizeof(temp_curr_socclk_values) / sizeof(temp_curr_socclk_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_curr_socclk_values[i] << ", "; - } else { - std::cout << std::dec << temp_curr_socclk_values[i]; - } - } - std::cout << std::dec << "]\n"; - std::cout << "\t -> current_vclk0(temp_curr_vclk0_values): ["; - size = static_cast( - sizeof(temp_curr_vclk0_values) / sizeof(temp_curr_vclk0_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_curr_vclk0_values[i] << ", "; - } else { - std::cout << std::dec << temp_curr_vclk0_values[i]; - } - } - std::cout << std::dec << "]\n"; - - std::cout << "\n"; - std::cout << "\t[Throttle]" << "\n"; - std::cout << "\t -> indep_throttle_status(): " << std::dec << temp_indep_throttle_status_value << "\n"; - std::cout << "\t -> throttle_status(): " << std::dec << temp_throttle_status_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Gfx Clock Lock]" << "\n"; - std::cout << "\t -> gfxclk_lock_status(): " << std::dec << temp_gfxclk_lock_status_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Current Fan Speed]" << "\n"; - std::cout << "\t -> current_fan_speed(): " << std::dec << temp_curr_fan_speed_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Link/Bandwidth/Speed]" << "\n"; - std::cout << "\t -> pcie_link_width(): " << std::dec << temp_pcie_link_width_value << "\n"; - std::cout << "\t -> pcie_link_speed(): " << std::dec << temp_pcie_link_speed_value << "\n"; - std::cout << "\t -> pcie_bandwidth_accum(): " << std::dec << std::dec << temp_pcie_bandwidth_accum_value << "\n"; - std::cout << "\t -> pcie_bandwidth_inst(): " << std::dec << temp_pcie_bandwidth_inst_value << "\n"; - std::cout << "\t -> pcie_l0_recov_count_accum(): " << std::dec << std::dec << temp_pcie_l0_recov_count_accum_value << "\n"; - std::cout << "\t -> pcie_replay_count_accum(): " << std::dec << temp_pcie_replay_count_accum_value << "\n"; - std::cout << "\t -> pcie_replay_rollover_count_accum(): " << std::dec << temp_pcie_replay_rover_count_accum_value << "\n"; - std::cout << "\t -> xgmi_link_width(): " << std::dec << temp_xgmi_link_width_value << "\n"; - std::cout << "\t -> xgmi_link_speed(): " << std::dec << std::dec << temp_xgmi_link_speed_value << "\n"; - std::cout << "\t -> xgmi_read_data(temp_xgmi_read_values): "; - size = static_cast( - sizeof(temp_xgmi_read_values) / sizeof(temp_xgmi_read_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_xgmi_read_values[i] << ", "; - } else { - std::cout << std::dec << temp_xgmi_read_values[i]; - } - } - std::cout << std::dec << "]\n"; - std::cout << "\t -> xgmi_write_data(temp_xgmi_write_values): ["; - size = static_cast( - sizeof(temp_xgmi_write_values) / sizeof(temp_xgmi_write_values[0])); - for (uint16_t i = 0; i < size; i++) { - if (i + 1 < size) { - std::cout << std::dec << temp_xgmi_write_values[i] << ", "; - } else { - std::cout << std::dec << temp_xgmi_write_values[i]; - } - } - std::cout << std::dec << "]\n"; - - std::cout << "\n"; - std::cout << "\t[Voltage]" << "\n"; - std::cout << "\t -> voltage_soc(): " << std::dec << temp_voltage_soc_value << "\n"; - std::cout << "\t -> voltage_gfx(): " << std::dec << temp_voltage_gfx_value << "\n"; - std::cout << "\t -> voltage_mem(): " << std::dec << temp_voltage_mem_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[Timestamp]" << "\n"; - std::cout << "\t -> system_clock_counter(): " << std::dec << temp_system_clock_counter_value << "\n"; - std::cout << "\t -> firmware_timestamp(): " << std::dec << temp_firmware_timestamp_value << "\n"; - - std::cout << "\n"; - std::cout << "\t[XCD Counter]" << "\n"; - std::cout << "\t -> xcd_counter(): " << std::dec << temp_xcd_counter_value << "\n"; - std::cout << "\n\n"; - } - } - } From fe94be55dc138f07af99bd97813bf015c17d9846 Mon Sep 17 00:00:00 2001 From: "Galantsev, Dmitrii" Date: Mon, 29 Jan 2024 17:30:26 -0600 Subject: [PATCH 5/7] Update wrapper Change-Id: Ic3ff273851bde9a8986719a668a3135fe7dd715f Signed-off-by: Galantsev, Dmitrii --- py-interface/amdsmi_wrapper.py | 247 ++------------------------------- 1 file changed, 12 insertions(+), 235 deletions(-) diff --git a/py-interface/amdsmi_wrapper.py b/py-interface/amdsmi_wrapper.py index 4641a19c06..7e54a9a190 100644 --- a/py-interface/amdsmi_wrapper.py +++ b/py-interface/amdsmi_wrapper.py @@ -1012,16 +1012,6 @@ amdsmi_process_handle_t = ctypes.c_uint32 class struct_amdsmi_proc_info_t(Structure): pass -class struct_engine_usage_(Structure): - pass - -struct_engine_usage_._pack_ = 1 # source:False -struct_engine_usage_._fields_ = [ - ('gfx', ctypes.c_uint64), - ('enc', ctypes.c_uint64), - ('reserved', ctypes.c_uint32 * 12), -] - class struct_memory_usage_(Structure): pass @@ -1033,6 +1023,16 @@ struct_memory_usage_._fields_ = [ ('reserved', ctypes.c_uint32 * 10), ] +class struct_engine_usage_(Structure): + pass + +struct_engine_usage_._pack_ = 1 # source:False +struct_engine_usage_._fields_ = [ + ('gfx', ctypes.c_uint64), + ('enc', ctypes.c_uint64), + ('reserved', ctypes.c_uint32 * 12), +] + struct_amdsmi_proc_info_t._pack_ = 1 # source:False struct_amdsmi_proc_info_t._fields_ = [ ('name', ctypes.c_char * 32), @@ -2179,173 +2179,6 @@ amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_ amdsmi_get_gpu_total_ecc_count = _libraries['libamd_smi.so'].amdsmi_get_gpu_total_ecc_count amdsmi_get_gpu_total_ecc_count.restype = amdsmi_status_t amdsmi_get_gpu_total_ecc_count.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_error_count_t)] -gpu_metric_temp_hbm_t = ctypes.c_uint16 * 4 -gpu_metric_vcn_activity_t = ctypes.c_uint16 * 4 -gpu_metric_xgmi_read_data_acc_t = ctypes.c_uint64 * 8 -gpu_metric_xgmi_write_data_acc_t = ctypes.c_uint64 * 8 -gpu_metric_curr_gfxclk_t = ctypes.c_uint16 * 8 -gpu_metric_curr_socclk_t = ctypes.c_uint16 * 4 -gpu_metric_curr_vclk0_t = ctypes.c_uint16 * 4 -gpu_metric_curr_dclk0_t = ctypes.c_uint16 * 4 -amdsmi_get_gpu_metrics_temp_hotspot = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_hotspot -amdsmi_get_gpu_metrics_temp_hotspot.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_hotspot.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_temp_mem = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_mem -amdsmi_get_gpu_metrics_temp_mem.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_mem.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_temp_vrsoc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_vrsoc -amdsmi_get_gpu_metrics_temp_vrsoc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrsoc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_curr_socket_power = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_socket_power -amdsmi_get_gpu_metrics_curr_socket_power.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_socket_power.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_gfx_activity = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_gfx_activity -amdsmi_get_gpu_metrics_avg_gfx_activity.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_gfx_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_umc_activity = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_umc_activity -amdsmi_get_gpu_metrics_avg_umc_activity.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_umc_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_energy_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_energy_acc -amdsmi_get_gpu_metrics_energy_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_energy_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_system_clock_counter = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_system_clock_counter -amdsmi_get_gpu_metrics_system_clock_counter.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_system_clock_counter.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_firmware_timestamp = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_firmware_timestamp -amdsmi_get_gpu_metrics_firmware_timestamp.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_firmware_timestamp.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_throttle_status = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_throttle_status -amdsmi_get_gpu_metrics_throttle_status.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_throttle_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_gpu_metrics_pcie_link_width = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_link_width -amdsmi_get_gpu_metrics_pcie_link_width.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_link_width.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_pcie_link_speed = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_link_speed -amdsmi_get_gpu_metrics_pcie_link_speed.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_link_speed.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_xgmi_link_width = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_xgmi_link_width -amdsmi_get_gpu_metrics_xgmi_link_width.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_link_width.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_xgmi_link_speed = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_xgmi_link_speed -amdsmi_get_gpu_metrics_xgmi_link_speed.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_link_speed.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_gfxclk_lock_status = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_gfxclk_lock_status -amdsmi_get_gpu_metrics_gfxclk_lock_status.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_gfxclk_lock_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_gpu_metrics_gfx_activity_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_gfx_activity_acc -amdsmi_get_gpu_metrics_gfx_activity_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_gfx_activity_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_gpu_metrics_mem_activity_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_mem_activity_acc -amdsmi_get_gpu_metrics_mem_activity_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_mem_activity_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_gpu_metrics_pcie_bandwidth_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_bandwidth_acc -amdsmi_get_gpu_metrics_pcie_bandwidth_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_bandwidth_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_pcie_bandwidth_inst = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_bandwidth_inst -amdsmi_get_gpu_metrics_pcie_bandwidth_inst.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_bandwidth_inst.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc -amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_pcie_replay_count_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_replay_count_acc -amdsmi_get_gpu_metrics_pcie_replay_count_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_replay_count_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc -amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_curr_uclk = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_uclk -amdsmi_get_gpu_metrics_curr_uclk.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_uclk.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_temp_hbm = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_hbm -amdsmi_get_gpu_metrics_temp_hbm.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_hbm.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16 * 4)] -amdsmi_get_gpu_metrics_vcn_activity = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_vcn_activity -amdsmi_get_gpu_metrics_vcn_activity.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_vcn_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16 * 4)] -amdsmi_get_gpu_metrics_xgmi_read_data = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_xgmi_read_data -amdsmi_get_gpu_metrics_xgmi_read_data.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_read_data.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64 * 8)] -amdsmi_get_gpu_metrics_xgmi_write_data = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_xgmi_write_data -amdsmi_get_gpu_metrics_xgmi_write_data.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_xgmi_write_data.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64 * 8)] -amdsmi_get_gpu_metrics_curr_gfxclk = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_gfxclk -amdsmi_get_gpu_metrics_curr_gfxclk.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_gfxclk.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16 * 8)] -amdsmi_get_gpu_metrics_curr_socclk = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_socclk -amdsmi_get_gpu_metrics_curr_socclk.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_socclk.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16 * 4)] -amdsmi_get_gpu_metrics_curr_vclk0 = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_vclk0 -amdsmi_get_gpu_metrics_curr_vclk0.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_vclk0.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16 * 4)] -amdsmi_get_gpu_metrics_curr_dclk0 = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_dclk0 -amdsmi_get_gpu_metrics_curr_dclk0.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_dclk0.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16 * 4)] -amdsmi_get_gpu_metrics_temp_edge = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_edge -amdsmi_get_gpu_metrics_temp_edge.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_edge.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_temp_vrgfx = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_vrgfx -amdsmi_get_gpu_metrics_temp_vrgfx.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrgfx.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_temp_vrmem = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_temp_vrmem -amdsmi_get_gpu_metrics_temp_vrmem.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_temp_vrmem.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_mm_activity = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_mm_activity -amdsmi_get_gpu_metrics_avg_mm_activity.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_mm_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_curr_vclk1 = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_vclk1 -amdsmi_get_gpu_metrics_curr_vclk1.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_vclk1.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_curr_dclk1 = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_dclk1 -amdsmi_get_gpu_metrics_curr_dclk1.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_dclk1.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_indep_throttle_status = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_indep_throttle_status -amdsmi_get_gpu_metrics_indep_throttle_status.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_indep_throttle_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_gpu_metrics_avg_socket_power = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_socket_power -amdsmi_get_gpu_metrics_avg_socket_power.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_socket_power.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_curr_fan_speed = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_curr_fan_speed -amdsmi_get_gpu_metrics_curr_fan_speed.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_curr_fan_speed.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_gfx_clock_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_gfx_clock_frequency -amdsmi_get_gpu_metrics_avg_gfx_clock_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_gfx_clock_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_soc_clock_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_soc_clock_frequency -amdsmi_get_gpu_metrics_avg_soc_clock_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_soc_clock_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_uclock_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_uclock_frequency -amdsmi_get_gpu_metrics_avg_uclock_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_uclock_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_vclock0_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_vclock0_frequency -amdsmi_get_gpu_metrics_avg_vclock0_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_vclock0_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_dclock0_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_dclock0_frequency -amdsmi_get_gpu_metrics_avg_dclock0_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_dclock0_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_vclock1_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_vclock1_frequency -amdsmi_get_gpu_metrics_avg_vclock1_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_vclock1_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_avg_dclock1_frequency = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_avg_dclock1_frequency -amdsmi_get_gpu_metrics_avg_dclock1_frequency.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_avg_dclock1_frequency.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_volt_soc = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_volt_soc -amdsmi_get_gpu_metrics_volt_soc.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_volt_soc.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_volt_gfx = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_volt_gfx -amdsmi_get_gpu_metrics_volt_gfx.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_volt_gfx.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_volt_mem = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_volt_mem -amdsmi_get_gpu_metrics_volt_mem.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_volt_mem.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_header_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_header_info -amdsmi_get_gpu_metrics_header_info.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_header_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amd_metrics_table_header_t)] -amdsmi_get_gpu_metrics_xcd_counter = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_xcd_counter -amdsmi_get_gpu_metrics_xcd_counter.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_xcd_counter.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_metrics_log = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_log -amdsmi_get_gpu_metrics_log.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_log.argtypes = [amdsmi_processor_handle] amdsmi_get_cpu_core_energy = _libraries['libamd_smi.so'].amdsmi_get_cpu_core_energy amdsmi_get_cpu_core_energy.restype = amdsmi_status_t amdsmi_get_cpu_core_energy.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] @@ -2687,59 +2520,7 @@ __all__ = \ 'amdsmi_get_gpu_id', 'amdsmi_get_gpu_memory_partition', 'amdsmi_get_gpu_memory_reserved_pages', 'amdsmi_get_gpu_memory_total', 'amdsmi_get_gpu_memory_usage', - 'amdsmi_get_gpu_metrics_avg_dclock0_frequency', - 'amdsmi_get_gpu_metrics_avg_dclock1_frequency', - 'amdsmi_get_gpu_metrics_avg_gfx_activity', - 'amdsmi_get_gpu_metrics_avg_gfx_clock_frequency', - 'amdsmi_get_gpu_metrics_avg_mm_activity', - 'amdsmi_get_gpu_metrics_avg_soc_clock_frequency', - 'amdsmi_get_gpu_metrics_avg_socket_power', - 'amdsmi_get_gpu_metrics_avg_uclock_frequency', - 'amdsmi_get_gpu_metrics_avg_umc_activity', - 'amdsmi_get_gpu_metrics_avg_vclock0_frequency', - 'amdsmi_get_gpu_metrics_avg_vclock1_frequency', - 'amdsmi_get_gpu_metrics_curr_dclk0', - 'amdsmi_get_gpu_metrics_curr_dclk1', - 'amdsmi_get_gpu_metrics_curr_fan_speed', - 'amdsmi_get_gpu_metrics_curr_gfxclk', - 'amdsmi_get_gpu_metrics_curr_socclk', - 'amdsmi_get_gpu_metrics_curr_socket_power', - 'amdsmi_get_gpu_metrics_curr_uclk', - 'amdsmi_get_gpu_metrics_curr_vclk0', - 'amdsmi_get_gpu_metrics_curr_vclk1', - 'amdsmi_get_gpu_metrics_energy_acc', - 'amdsmi_get_gpu_metrics_firmware_timestamp', - 'amdsmi_get_gpu_metrics_gfx_activity_acc', - 'amdsmi_get_gpu_metrics_gfxclk_lock_status', - 'amdsmi_get_gpu_metrics_header_info', - 'amdsmi_get_gpu_metrics_indep_throttle_status', - 'amdsmi_get_gpu_metrics_info', 'amdsmi_get_gpu_metrics_log', - 'amdsmi_get_gpu_metrics_mem_activity_acc', - 'amdsmi_get_gpu_metrics_pcie_bandwidth_acc', - 'amdsmi_get_gpu_metrics_pcie_bandwidth_inst', - 'amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc', - 'amdsmi_get_gpu_metrics_pcie_link_speed', - 'amdsmi_get_gpu_metrics_pcie_link_width', - 'amdsmi_get_gpu_metrics_pcie_replay_count_acc', - 'amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc', - 'amdsmi_get_gpu_metrics_system_clock_counter', - 'amdsmi_get_gpu_metrics_temp_edge', - 'amdsmi_get_gpu_metrics_temp_hbm', - 'amdsmi_get_gpu_metrics_temp_hotspot', - 'amdsmi_get_gpu_metrics_temp_mem', - 'amdsmi_get_gpu_metrics_temp_vrgfx', - 'amdsmi_get_gpu_metrics_temp_vrmem', - 'amdsmi_get_gpu_metrics_temp_vrsoc', - 'amdsmi_get_gpu_metrics_throttle_status', - 'amdsmi_get_gpu_metrics_vcn_activity', - 'amdsmi_get_gpu_metrics_volt_gfx', - 'amdsmi_get_gpu_metrics_volt_mem', - 'amdsmi_get_gpu_metrics_volt_soc', - 'amdsmi_get_gpu_metrics_xcd_counter', - 'amdsmi_get_gpu_metrics_xgmi_link_speed', - 'amdsmi_get_gpu_metrics_xgmi_link_width', - 'amdsmi_get_gpu_metrics_xgmi_read_data', - 'amdsmi_get_gpu_metrics_xgmi_write_data', + 'amdsmi_get_gpu_metrics_info', 'amdsmi_get_gpu_od_volt_curve_regions', 'amdsmi_get_gpu_od_volt_info', 'amdsmi_get_gpu_overdrive_level', 'amdsmi_get_gpu_pci_bandwidth', @@ -2823,11 +2604,7 @@ __all__ = \ 'amdsmi_voltage_type_t', 'amdsmi_vram_info_t', 'amdsmi_vram_type_t', 'amdsmi_vram_usage_t', 'amdsmi_vram_vendor_type_t', 'amdsmi_xgmi_info_t', - 'amdsmi_xgmi_status_t', 'gpu_metric_curr_dclk0_t', - 'gpu_metric_curr_gfxclk_t', 'gpu_metric_curr_socclk_t', - 'gpu_metric_curr_vclk0_t', 'gpu_metric_temp_hbm_t', - 'gpu_metric_vcn_activity_t', 'gpu_metric_xgmi_read_data_acc_t', - 'gpu_metric_xgmi_write_data_acc_t', 'processor_type_t', 'size_t', + 'amdsmi_xgmi_status_t', 'processor_type_t', 'size_t', 'struct__links', 'struct_amd_metrics_table_header_t', 'struct_amdsmi_asic_info_t', 'struct_amdsmi_board_info_t', 'struct_amdsmi_clk_info_t', 'struct_amdsmi_counter_value_t', From b125f3ee8ffea8d030b8d6f45e011dbd5eeb190d Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Tue, 30 Jan 2024 11:12:00 -0600 Subject: [PATCH 6/7] UMC ECC count return not supported The current code assume err_count sysfs only have 2 lines, which is changed for umc_err_count by adding extra line for defer errors. The code is changed to relax such check. Change-Id: I7129bfcf9ef47346bca3c5a9535bc8c16c670f88 --- rocm_smi/src/rocm_smi.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocm_smi/src/rocm_smi.cc b/rocm_smi/src/rocm_smi.cc index f9845a9dfc..6326abdee9 100755 --- a/rocm_smi/src/rocm_smi.cc +++ b/rocm_smi/src/rocm_smi.cc @@ -736,7 +736,7 @@ rsmi_dev_ecc_count_get(uint32_t dv_ind, rsmi_gpu_block_t block, DEVICE_MUTEX ret = GetDevValueVec(type, dv_ind, &val_vec); - if (val_vec.size() != 2 ) ret = RSMI_STATUS_FILE_ERROR; + if (val_vec.size() < 2 ) ret = RSMI_STATUS_FILE_ERROR; if (ret == RSMI_STATUS_FILE_ERROR || val_vec.size() != 2) { ss << __PRETTY_FUNCTION__ << " | ======= end =======" From 1e708aaad9dee6e29fb1d3d31eba721716bc4357 Mon Sep 17 00:00:00 2001 From: khashaik Date: Mon, 29 Jan 2024 05:38:50 -0500 Subject: [PATCH 7/7] amdsmi_cli: Update the smu fw version data output Change-Id: I8b28f7b5cf32530f5e6b3af4c342d7b6c150012b --- amdsmi_cli/amdsmi_commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amdsmi_cli/amdsmi_commands.py b/amdsmi_cli/amdsmi_commands.py index 6f032de3ce..12f604a863 100644 --- a/amdsmi_cli/amdsmi_commands.py +++ b/amdsmi_cli/amdsmi_commands.py @@ -204,7 +204,7 @@ class AMDSMICommands(): try: smu = amdsmi_interface.amdsmi_get_cpu_smu_fw_version(args.cpu) static_dict["smu"] = {"FW_VERSION" : f"{ smu['smu_fw_major_ver_num']}" - f":{smu['smu_fw_minor_ver_num']}:{smu['smu_fw_debug_ver_num']}"} + f".{smu['smu_fw_minor_ver_num']}.{smu['smu_fw_debug_ver_num']}"} except amdsmi_exception.AmdSmiLibraryException as e: static_dict["smu"] = "N/A" logging.debug("Failed to get SMU FW for cpu %s | %s", cpu_id, e.get_error_info())