From 7479fcf5bf9e007c0cd5e5a04d41dc809e466411 Mon Sep 17 00:00:00 2001 From: Parth Raut Date: Mon, 23 Sep 2024 01:08:16 -0400 Subject: [PATCH] Add py-interface for version 1.0.0+rocm-5.7.1 --- py-interface/Dockerfile | 43 - py-interface/LICENSE | 2 +- py-interface/README.md | 2724 +-------------- py-interface/amdsmi/__init__.py | 100 +- py-interface/amdsmi/amdsmi_exception.py | 104 +- py-interface/amdsmi/amdsmi_interface.py | 4029 ++++++----------------- py-interface/amdsmi/amdsmi_wrapper.py | 1898 ++++------- py-interface/pyproject.toml | 10 +- py-interface/setup.cfg | 25 - 9 files changed, 1751 insertions(+), 7184 deletions(-) delete mode 100644 py-interface/Dockerfile delete mode 100644 py-interface/setup.cfg diff --git a/py-interface/Dockerfile b/py-interface/Dockerfile deleted file mode 100644 index 5218f76..0000000 --- a/py-interface/Dockerfile +++ /dev/null @@ -1,43 +0,0 @@ -FROM ubuntu:latest - -# do not prompt in apt -# https://github.com/moby/moby/issues/4032#issuecomment-163689851 -ARG DEBIAN_FRONTEND=noninteractive -ARG DEBCONF_NONINTERACTIVE_SEEN=true - -# set timezone -ENV TZ="America/Chicago" -RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone - -RUN apt update --yes \ - && apt install --yes \ - build-essential \ - cmake \ - gnupg \ - libdrm-dev \ - libpython3-dev \ - lsb-release \ - pkg-config \ - pkg-config \ - python3-pip \ - software-properties-common \ - wget \ - && apt clean \ - && rm -rf /var/cache/apt/ /var/lib/apt/lists/* - -WORKDIR /var/tmp -RUN TEMPDIR=$(mktemp -d) \ - && cd $TEMPDIR \ - && wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh \ - && ./llvm.sh 16 \ - && update-alternatives --install /usr/bin/clang clang $(which clang-16) 91 --slave /usr/bin/clang++ clang++ $(which clang++-16) \ - && python3 -m pip install --no-cache-dir clang==16.0.1 ctypeslib2==2.3.4 -U \ - && rm -rf $TEMPDIR - -WORKDIR /src -CMD cp -r /src /tmp/src \ - && cd /tmp/src \ - && rm -rf build .cache \ - && cmake -B build -DBUILD_WRAPPER=ON \ - && make -C build -j $(nproc) \ - && cp /tmp/src/py-interface/amdsmi_wrapper.py /src/py-interface/amdsmi_wrapper.py diff --git a/py-interface/LICENSE b/py-interface/LICENSE index 2bec038..49bfb6b 100644 --- a/py-interface/LICENSE +++ b/py-interface/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2019-2023 Advanced Micro Devices, Inc. +Copyright (c) 2019-2022 Advanced Micro Devices, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/py-interface/README.md b/py-interface/README.md index b5727e6..bfdb136 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -7,7 +7,7 @@ Dear AMD: Please contact Jae-Won Chung to take over the rep ## Requirements -* python 3.6+ 64-bit +* python 3.6 64-bit * driver must be loaded for amdsmi_init() to pass ## Overview @@ -65,7 +65,7 @@ try: print("No GPUs on machine") except AmdSmiException as e: print("Error code: {}".format(e.err_code)) - if e.err_code == amdsmi_wrapper.AMDSMI_STATUS_RETRY: + if e.err_code == AmdSmiRetCode.STATUS_RETRY: print("Error info: {}".format(e.err_info)) ``` @@ -307,23 +307,17 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_get_gpu_driver_info +### amdsmi_get_gpu_driver_version -Description: Returns the info of the driver +Description: Returns the version string of the driver Input parameters: * `processor_handle` dev for which to query -Output: Dictionary with fields - -Field | Content ----|--- -`driver_name` | driver name -`driver_version` | driver_version -`driver_date` | driver_date +Output: Driver version string that is handling the device -Exceptions that can be thrown by `amdsmi_get_gpu_driver_info` function: +Exceptions that can be thrown by `amdsmi_get_gpu_driver_version` function: * `AmdSmiParameterException` * `AmdSmiLibraryException` @@ -333,7 +327,7 @@ Example: ```python try: device = amdsmi_get_processor_handles()[0] - print("Driver info: ", amdsmi_get_gpu_driver_info(device)) + print("Driver version: ", amdsmi_get_gpu_driver_version(device)) except AmdSmiException as e: print(e) ``` @@ -352,11 +346,9 @@ Field | Content ---|--- `market_name` | market name `vendor_id` | vendor id -`vendor_name` | vendor name `device_id` | device id `rev_id` | revision id `asic_serial` | asic serial -`xgmi_physical_id` | xgmi physical id Exceptions that can be thrown by `amdsmi_get_gpu_asic_info` function: @@ -376,11 +368,9 @@ try: asic_info = amdsmi_get_gpu_asic_info(device) print(asic_info['market_name']) print(hex(asic_info['vendor_id'])) - print(asic_info['vendor_name']) print(hex(asic_info['device_id'])) print(hex(asic_info['rev_id'])) print(asic_info['asic_serial']) - print(asic_info['xgmi_physical_id']) except AmdSmiException as e: print(e) ``` @@ -429,93 +419,6 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_get_gpu_vram_info - -Description: Returns dictionary of vram information for the given GPU. - -Input parameters: - -* `processor_handle` device which to query - -Output: Dictionary with fields - -Field | Description ----|--- -`vram_type` | vram type -`vram_vendor` | vram vendor -`vram_size_mb` | vram size in mb - -Exceptions that can be thrown by `amdsmi_get_gpu_vram_info` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - vram_info = amdsmi_get_gpu_vram_info(device) - print(vram_info['vram_type']) - print(vram_info['vram_vendor']) - print(vram_info['vram_size_mb']) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_cache_info - -Description: Returns dictionary of cache information for the given GPU. - -Input parameters: - -* `processor_handle` device which to query - -Output: Dictionary of Dictionaries containing cache information - -Field | Description ----|--- -`cache #` | upt 10 caches will be available -`cache_size` | size of cache in KB -`cache_level` | level of cache -`data_cache` | True if data cache is enabled, false otherwise -`instruction_cache` | True if instruction cache is enabled, false otherwise -`cpu_cache` | True if cpu cache is enabled, false otherwise -`simd_cache` | True if simd cache is enabled, false otherwise - -Exceptions that can be thrown by `amdsmi_get_gpu_cache_info` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - cache_info = amdsmi_get_gpu_cache_info(device) - for cache_index, cache_values in cache_info.items(): - print(cache_index) - print(cache_values['cache_size']) - print(cache_values['cache_level']) - print(cache_values['data_cache']) - print(cache_values['instruction_cache']) - print(cache_values['cpu_cache']) - print(cache_values['simd_cache']) -except AmdSmiException as e: - print(e) -``` - ### amdsmi_get_gpu_vbios_info Description: Returns the static information for the VBIOS on the device. @@ -589,7 +492,6 @@ try: firmware_list = amdsmi_get_fw_info(device)['fw_list'] for firmware_block in firmware_list: print(firmware_block['fw_name']) - # String formated hex or decimal value ie: 21.00.00.AC or 130 print(firmware_block['fw_version']) except AmdSmiException as e: print(e) @@ -1012,10 +914,8 @@ Output: Dictionary with fields correctable and uncorrectable Field | Description ---|--- -`model_number` | Board serial number +`serial_number` | Board serial number `product_serial` | Product serial -`fru_id` | FRU ID -`manufacturer_name` | Manufacturer name `product_name` | Product name Exceptions that can be thrown by `amdsmi_get_gpu_board_info` function: @@ -1030,55 +930,13 @@ Example: try: device = amdsmi_get_processor_handle_from_bdf("0000:23.00.0") board_info = amdsmi_get_gpu_board_info(device) - print(board_info["model_number"]) + print(board_info["serial_number"]) print(board_info["product_serial"]) - print(board_info["fru_id"]) - print(board_info["manufacturer_name"]) print(board_info["product_name"]) except AmdSmiException as e: print(e) ``` -### amdsmi_get_gpu_ras_feature_info - -Description: Returns RAS version and schema information -It is not supported on virtual machine guest - -Input parameters: - -* `processor_handle` device which to query - -Output: List containing dictionaries with fields - -Field | Description ----|--- -`eeprom_version` | eeprom version -`parity_schema` | parity schema -`single_bit_schema` | single bit schema -`double_bit_schema` | double bit schema -`poison_schema` | poison schema - -Exceptions that can be thrown by `amdsmi_get_gpu_ras_feature_info` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - ras_info = amdsmi_get_gpu_ras_feature_info(device) - print(ras_info) -except AmdSmiException as e: - print(e) -``` - ### amdsmi_get_gpu_ras_block_features_enabled Description: Returns status of each RAS block for the given GPU. @@ -1354,7 +1212,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1399,7 +1257,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1436,7 +1294,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1468,7 +1326,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1499,7 +1357,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1537,7 +1395,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1569,7 +1427,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1641,7 +1499,7 @@ Example: ```python try: - devices = amdsmi_get_processor_handles() + devices = gpuvsmi_get_devices() if len(devices) == 0: print("No GPUs on machine") else: @@ -1788,37 +1646,6 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_is_gpu_power_management_enabled - -Description: Returns is power management enabled - -Input parameters: - -* `processor_handle` GPU device which to query - -Output: Bool true if power management enabled else false - -Exceptions that can be thrown by `amdsmi_is_gpu_power_management_enabled` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for processor in devices: - is_power_management_enabled = amdsmi_is_gpu_power_management_enabled(processor) - print(is_power_management_enabled) -except AmdSmiException as e: - print(e) -``` - ### amdsmi_get_temp_metric Description: Get the temperature metric value for the specified metric, from the @@ -2156,29 +1983,8 @@ Field | Description `pcie_link_speed` | pcie link speed `padding` | padding `gfx_activity_acc` | gfx activity acc -`mem_activity_acc` | mem activity acc -`temperature_hbm` | list of hbm temperatures -`firmware_timestamp` | timestamp from PMFW -`voltage_soc` | soc voltage -`voltage_gfx` | gfx voltage -`voltage_mem` | mem voltage -`indep_throttle_status` | asic independent throttle status -`current_socket_power` | current socket power -`vcn_activity` | list of encoding and decoding engine utilizations -`gfxclk_lock_status` | gfx clock lock status -`xgmi_link_width` | XGMI bus width -`xgmi_link_speed` | XGMI bitrate (in Gbps) -`pcie_bandwidth_acc` | PCIE accumulated bandwidth (GB/sec) -`pcie_bandwidth_inst` | PCIE instantaneous bandwidth (GB/sec) -`pcie_l0_to_recov_count_acc` | PCIE L0 to recovery state transition accumulated count -`pcie_replay_count_acc` | PCIE replay accumulated count -`pcie_replay_rover_count_acc` | PCIE replay rollover accumulated count -`xgmi_read_data_acc` | XGMI accumulated read data transfer size(KiloBytes) -`xgmi_write_data_acc` | XGMI accumulated write data transfer size(KiloBytes) -`current_gfxclks` | list of current gfx clock frequencies -`current_socclks` | list of current soc clock frequencies -`current_vclk0s` | list of current v0 clock frequencies -`current_dclk0s` | list of current d0 clock frequencies +`mem_actvity_acc` | mem activity acc +`temperature_hbm` | hbm temperature Exceptions that can be thrown by `amdsmi_get_gpu_metrics_info` function: @@ -3200,7 +3006,7 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_get_minmax_bandwidth_between_processors +### amdsmi_get_minmax_bandwith_between_processors Description: Retreive minimal and maximal io link bandwidth between 2 GPUs. @@ -3216,7 +3022,7 @@ Field | Description `min_bandwidth` | minimal bandwidth for the connection `max_bandwidth` | maximal bandwidth for the connection -Exceptions that can be thrown by `amdsmi_get_minmax_bandwidth_between_processors` function: +Exceptions that can be thrown by `amdsmi_get_minmax_bandwith_between_processors` function: * `AmdSmiLibraryException` * `AmdSmiRetryException` @@ -3232,9 +3038,9 @@ try: else: processor_handle_src = devices[0] processor_handle_dest = devices[1] - bandwidth = amdsmi_get_minmax_bandwidth_between_processors(processor_handle_src, processor_handle_dest) - print(bandwidth['min_bandwidth']) - print(bandwidth['max_bandwidth']) + bandwith = amdsmi_get_minmax_bandwith_between_processors(processor_handle_src, processor_handle_dest) + print(bandwith['min_bandwidth']) + print(bandwith['max_bandwidth']) except AmdSmiException as e: print(e) ``` @@ -3311,210 +3117,24 @@ except AmdSmiException as e: print(e) ``` -### amdsmi_get_gpu_compute_partition - -Description: Get the compute partition from the given GPU - -Input parameters: - -* `processor_handle` the device handle - -Output: String of the partition type - -Exceptions that can be thrown by `amdsmi_get_gpu_compute_partition` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - compute_partition_type = amdsmi_get_gpu_compute_partition(device) - print(compute_partition_type) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_gpu_compute_partition - -Description: Set the compute partition to the given GPU - -Input parameters: - -* `processor_handle` the device handle -* `compute_partition` the type of compute_partition to set - -Output: String of the partition type - -Exceptions that can be thrown by `amdsmi_set_gpu_compute_partition` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - compute_partition = AmdSmiComputePartitionType.SPX - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - amdsmi_set_gpu_compute_partition(device, compute_partition) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_reset_gpu_compute_partition - -Description: Reset the compute partitioning on the given GPU - -Input parameters: - -* `processor_handle` the device handle - -Output: String of the partition type - -Exceptions that can be thrown by `amdsmi_reset_gpu_compute_partition` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - amdsmi_reset_gpu_compute_partition(device) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_memory_partition - -Description: Get the memory partition from the given GPU - -Input parameters: - -* `processor_handle` the device handle - -Output: String of the partition type - -Exceptions that can be thrown by `amdsmi_get_gpu_memory_partition` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - memory_partition_type = amdsmi_get_gpu_memory_partition(device) - print(memory_partition_type) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_gpu_memory_partition +### amdsmi_get_xgmi_info -Description: Set the memory partition to the given GPU +Description: Returns XGMI information for the GPU. Input parameters: -* `processor_handle` the device handle -* `memory_partition` the type of memory_partition to set - -Output: String of the partition type - -Exceptions that can be thrown by `amdsmi_set_gpu_memory_partition` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - memory_partition = AmdSmiMemoryPartitionType.NPS1 - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - amdsmi_set_gpu_memory_partition(device, memory_partition) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_reset_gpu_memory_partition - -Description: Reset the memory partitioning on the given GPU - -Input parameters: +* `processor_handle` device handle -* `processor_handle` the device handle +Output: Dictionary with fields: -Output: String of the partition type +Field | Description +---|--- +`xgmi_lanes` | xgmi lanes +`xgmi_hive_id` | xgmi hive id +`xgmi_node_id` | xgmi node id +`index` | index -Exceptions that can be thrown by `amdsmi_reset_gpu_memory_partition` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on machine") - else: - for device in devices: - amdsmi_reset_gpu_memory_partition(device) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_xgmi_info - -Description: Returns XGMI information for the GPU. - -Input parameters: - -* `processor_handle` device handle - -Output: Dictionary with fields: - -Field | Description ----|--- -`xgmi_lanes` | xgmi lanes -`xgmi_hive_id` | xgmi hive id -`xgmi_node_id` | xgmi node id -`index` | index - -Exceptions that can be thrown by `amdsmi_get_xgmi_info` function: +Exceptions that can be thrown by `amdsmi_get_xgmi_info` function: * `AmdSmiLibraryException` * `AmdSmiRetryException` @@ -3537,2277 +3157,3 @@ try: except AmdSmiException as e: print(e) ``` - -## GPU Metrics APIs - -### amdsmi_get_gpu_metrics_temp_hotspot - -Description: Get the hotspot temperature in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: hotspot temperature in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_hotspot` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - hotspot_temp = amdsmi_get_gpu_metrics_temp_hotspot(device) - print(hotspot_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_temp_mem - -Description: Get the memory temperature in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: memory temperature in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_mem` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - mem_temp = amdsmi_get_gpu_metrics_temp_mem(device) - print(mem_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_temp_vrsoc - -Description: Get the VRSOC temperature in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: VRSOC temperature in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_vrsoc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - vrsoc_temp = amdsmi_get_gpu_metrics_temp_vrsoc(device) - print(vrsoc_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_socket_power - -Description: Get the current socket power in Watts - -Input parameters: - -* `processor_handle` device which to query - -Output: current socket power in Watts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_socket_power` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_socket_power = amdsmi_get_gpu_metrics_curr_socket_power(device) - print(curr_socket_power) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_gfx_activity - -Description: Get the average GFX activity in percent - -Input parameters: - -* `processor_handle` device which to query - -Output: average GFX activity in percent - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_gfx_activity` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_gfx_activity = amdsmi_get_gpu_metrics_avg_gfx_activity(device) - print(avg_gfx_activity) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_umc_activity - -Description: Get the average UMC activity in percent - -Input parameters: - -* `processor_handle` device which to query - -Output: average UMC activity in percent - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_umc_activity` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_umc_activity = amdsmi_get_gpu_metrics_avg_umc_activity(device) - print(avg_umc_activity) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_energy_acc - -Description: Get the average energy accumulator in millijoules (check unit) - -Input parameters: - -* `processor_handle` device which to query - -Output: average energy accumulator in millijoules (check unit) - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_energy_acc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_energy_acc = amdsmi_get_gpu_metrics_avg_energy_acc(device) - print(avg_energy_acc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_system_clock_counter - -Description: Get the system clock counter - -Input parameters: - -* `processor_handle` device which to query - -Output: system clock counter - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_system_clock_counter` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - system_clock_counter = amdsmi_get_gpu_metrics_system_clock_counter(device) - print(system_clock_counter) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_firmware_timestamp - -Description: Get the firmware timestamp - -Input parameters: - -* `processor_handle` device which to query - -Output: firmware timestamp - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_firmware_timestamp` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - - firmware_timestamp = amdsmi_get_gpu_metrics_firmware_timestamp(device) - print(firmware_timestamp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_throttle_status - -Description: Get the throttle status - -Input parameters: - -* `processor_handle` device which to query - -Output: True if throttled, False if it's not throttled - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_throttle_status` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - throttle_status = amdsmi_get_gpu_metrics_throttle_status(device) - print(throttle_status) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_link_width - -Description: Get the pcie link width - -Input parameters: - -* `processor_handle` device which to query - -Output: pcie link width - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_link_width` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_link_width = amdsmi_get_gpu_metrics_pcie_link_width(device) - print(pcie_link_width) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_link_speed - -Description: Get the pcie link speed - -Input parameters: - -* `processor_handle` device which to query - -Output: pcie link speed - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_link_speed` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_link_speed = amdsmi_get_gpu_metrics_pcie_link_speed(device) - print(pcie_link_speed) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_xgmi_link_width - -Description: Get the xgmi link width - -Input parameters: - -* `processor_handle` device which to query - -Output: xgmi link width - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_xgmi_link_width` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - xgmi_link_width = amdsmi_get_gpu_metrics_xgmi_link_width(device) - print(xgmi_link_width) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_xgmi_link_speed - -Description: Get the xgmi link speed - -Input parameters: - -* `processor_handle` device which to query - -Output: xgmi link speed - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_xgmi_link_speed` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - xgmi_link_speed = amdsmi_get_gpu_metrics_xgmi_link_speed(device) - print(xgmi_link_speed) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_gfxclk_lock_status - -Description: Get the lock status of the gfx clock - -Input parameters: - -* `processor_handle` device which to query - -Output: True if gfx clock is locked, False if it's not locked, raise if not supported - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_gfxclk_lock_status` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - lock_status = amdsmi_get_gpu_metrics_gfxclk_lock_status(device) - print(lock_status) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_gfx_activity_acc - -Description: Get accumulated gfx activity - -Input parameters: - -* `processor_handle` device which to query - -Output: accumulated gfx activity - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_gfx_activity_acc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - gfx_activity_acc = amdsmi_get_gpu_metrics_gfx_activity_acc(device) - print(gfx_activity_acc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_mem_activity_acc - -Description: Get accumulated memory activity - -Input parameters: - -* `processor_handle` device which to query - -Output: accumulated mem activity - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_mem_activity_acc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - mem_activity_acc = amdsmi_get_gpu_metrics_mem_activity_acc(device) - print(mem_activity_acc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_bandwidth_acc - -Description: Get accumulated pcie bandwidth activity - -Input parameters: - -* `processor_handle` device which to query - -Output: accumulated pcie bandwidth activity - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_bandwidth_acc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_bandwidth_acc = amdsmi_get_gpu_metrics_pcie_bandwidth_acc(device) - print(pcie_bandwidth_acc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_bandwidth_inst - -Description: Get instantaneous pcie bandwidth activity - -Input parameters: - -* `processor_handle` device which to query - -Output: instantaneous pcie bandwidth activity - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_bandwidth_inst` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_bandwidth_inst = amdsmi_get_gpu_metrics_pcie_bandwidth_inst(device) - print(pcie_bandwidth_inst) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_l0_recov_count - -Description: Get count of pcie l0 recovery count errors - -Input parameters: - -* `processor_handle` device which to query - -Output: number of l0 recovery count errors - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_l0_recov_count` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_l0_recov_count = amdsmi_get_gpu_metrics_pcie_l0_recov_count(device) - print(pcie_l0_recov_count) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_replay_count_acc - -Description: Get accumulated pcie replay counts - -Input parameters: - -* `processor_handle` device which to query - -Output: accumulated pcie replay counts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_replay_count_acc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_replay_count_acc = amdsmi_get_gpu_metrics_pcie_replay_count_acc(device) - print(pcie_replay_count_acc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc - -Description: Get accumulated pcie replay rollover counts - -Input parameters: - -* `processor_handle` device which to query - -Output: accumulated pcie replay rollover counts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - pcie_replay_rover_count_acc = amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc(device) - print(pcie_replay_rover_count_acc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_uclk - -Description: Get the current u clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current u clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_uclk` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_uclk = amdsmi_get_gpu_metrics_curr_uclk(device) - print(curr_uclk) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_temp_hbm - -Description: Get the HBM temperatures in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: list of HBM temperatures in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_hbm` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - hbm_temp = amdsmi_get_gpu_metrics_temp_hbm(device) - print(hbm_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_vcn_activity - -Description: Get the activity for each vcn encoding engine - -Input parameters: - -* `processor_handle` device which to query - -Output: list of vcn activities - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_vcn_activity` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - vcn_activity = amdsmi_get_gpu_metrics_vcn_activity(device) - print(vcn_activity) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_xgmi_read_data - -Description: Get the accumulated read xgmi data for each xgmi link - -Input parameters: - -* `processor_handle` device which to query - -Output: list of accumulated read xgmi data - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_xgmi_read_data` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - xgmi_read_data = amdsmi_get_gpu_metrics_xgmi_read_data(device) - print(xgmi_read_data) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_xgmi_write_data - -Description: Get the accumulated written xgmi data for each xgmi link - -Input parameters: - -* `processor_handle` device which to query - -Output: list of accumulated written xgmi data - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_xgmi_write_data` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - xgmi_write_data = amdsmi_get_gpu_metrics_xgmi_write_data(device) - print(xgmi_write_data) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_gfxclk - -Description: Get the current gfx clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current gfx clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_gfxclk` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_gfxclk = amdsmi_get_gpu_metrics_curr_gfxclk(device) - print(curr_gfxclk) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_socclk - -Description: Get the current soc clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current soc clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_socclk` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_socclk = amdsmi_get_gpu_metrics_curr_socclk(device) - print(curr_socclk) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_vclk0 - -Description: Get the current v0 clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current v0 clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_vclk0` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_vclk0 = amdsmi_get_gpu_metrics_curr_vclk0(device) - print(curr_vclk0) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_dclk0 - -Description: Get the current d0 clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current d0 clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_dclk0` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_dclk0 = amdsmi_get_gpu_metrics_curr_dclk0(device) - print(curr_dclk0) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_temp_edge - -Description: Get the edge temperature in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: edge temperature in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_edge` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - edge_temp = amdsmi_get_gpu_metrics_temp_edge(device) - print(edge_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_temp_vr_gfx - -Description: Get the VR GFX temperature in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: VR GFX temperature in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_vr_gfx` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - vr_gfx_temp = amdsmi_get_gpu_metrics_temp_vr_gfx(device) - print(vr_gfx_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_temp_vr_mem - -Description: Get the VR MEM temperature in degrees Celsius - -Input parameters: - -* `processor_handle` device which to query - -Output: VR MEM temperature in degrees Celsius - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_temp_vr_mem` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - vr_mem_temp = amdsmi_get_gpu_metrics_temp_vr_mem(device) - print(vr_mem_temp) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_mm_activity - -Description: Get the average MM activity in percent - -Input parameters: - -* `processor_handle` device which to query - -Output: average MM activity in percent - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_mm_activity` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_mm_activity = amdsmi_get_gpu_metrics_avg_mm_activity(device) - print(avg_mm_activity) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_vclk1 - -Description: Get the current v1 clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current v1 clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_vclk1` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_vclk1 = amdsmi_get_gpu_metrics_curr_vclk1(device) - print(curr_vclk1) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_dclk1 - -Description: Get the current d1 clock frequency - -Input parameters: - -* `processor_handle` device which to query - -Output: Current d1 clock frequency - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_dclk1` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_dclk1 = amdsmi_get_gpu_metrics_curr_dclk1(device) - print(curr_dclk1) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_indep_throttle_status - -Description: Get the independent throttle status - -Input parameters: - -* `processor_handle` device which to query - -Output: True if throttled, False if it's not throttled - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_indep_throttle_status` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - throttle_status = amdsmi_get_gpu_metrics_indep_throttle_status(device) - print(throttle_status) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_socket_power - -Description: Get the average socket power in Watts - -Input parameters: - -* `processor_handle` device which to query - -Output: average socket power in Watts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_socket_power` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_socket_power = amdsmi_get_gpu_metrics_avg_socket_power(device) - print(avg_socket_power) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_curr_fan_speed - -Description: Get the current fan speed in percent - -Input parameters: - -* `processor_handle` device which to query - -Output: current fan speed in percent - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_curr_fan_speed` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - curr_fan_speed = amdsmi_get_gpu_metrics_curr_fan_speed(device) - print(curr_fan_speed) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_gfx_clock_frequency - -Description: Get the average gfx clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average gfx clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_gfx_clock_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_gfx_clock_frequency = amdsmi_get_gpu_metrics_avg_gfx_clock_frequency(device) - print(avg_gfx_clock_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_soc_clock_frequency - -Description: Get the average soc clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average soc clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_soc_clock_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_soc_clock_frequency = amdsmi_get_gpu_metrics_avg_soc_clock_frequency(device) - print(avg_soc_clock_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_uclock_frequency - -Description: Get the average u clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average u clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_uclock_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_uclock_frequency = amdsmi_get_gpu_metrics_avg_uclock_frequency(device) - print(avg_uclock_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_vclock0_frequency - -Description: Get the average v0 clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average v0 clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_vclock0_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_vclock0_frequency = amdsmi_get_gpu_metrics_avg_vclock0_frequency(device) - print(avg_vclock0_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_dclock0_frequency - -Description: Get the average d0 clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average d0 clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_dclock0_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_dclock0_frequency = amdsmi_get_gpu_metrics_avg_dclock0_frequency(device) - print(avg_dclock0_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_vclock1_frequency - -Description: Get the average v1 clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average v1 clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_vclock1_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_vclock1_frequency = amdsmi_get_gpu_metrics_avg_vclock1_frequency(device) - print(avg_vclock1_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_avg_dclock1_frequency - -Description: Get the average d1 clock frequency in MHz - -Input parameters: - -* `processor_handle` device which to query - -Output: average d1 clock frequency in MHz - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_avg_dclock1_frequency` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - avg_dclock1_frequency = amdsmi_get_gpu_metrics_avg_dclock1_frequency(device) - print(avg_dclock1_frequency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_volt_soc - -Description: Get the soc voltage in millivolts - -Input parameters: - -* `processor_handle` device which to query - -Output: soc voltage in millivolts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_volt_soc` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - volt_soc = amdsmi_get_gpu_metrics_volt_soc(device) - print(volt_soc) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_volt_gfx - -Description: Get the gfx voltage in millivolts - -Input parameters: - -* `processor_handle` device which to query - -Output: gfx voltage in millivolts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_volt_gfx` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - volt_gfx = amdsmi_get_gpu_metrics_volt_gfx(device) - print(volt_gfx) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_volt_mem - -Description: Get the mem voltage in millivolts - -Input parameters: - -* `processor_handle` device which to query - -Output: mem voltage in millivolts - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_volt_mem` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - volt_mem = amdsmi_get_gpu_metrics_volt_mem(device) - print(volt_mem) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_gpu_metrics_header_info - -Description: Get the gpu metrics structure header info - -Input parameters: - -* `processor_handle` device which to query - -Output: dictionary of gpu metrics header information - -Exceptions that can be thrown by `amdsmi_get_gpu_metrics_header_info` function: - -* `AmdSmiLibraryException` -* `AmdSmiRetryException` -* `AmdSmiParameterException` - -Example: - -```python -try: - devices = amdsmi_get_processor_handles() - if len(devices) == 0: - print("No GPUs on the machine") - else: - for device in devices: - header_info = amdsmi_get_gpu_metrics_header_info(device) - print(header_info) -except AmdSmiException as e: - print(e) -``` - -## CPU APIs - -### amdsmi_get_cpusocket_handles - -**Note: CURRENTLY HARDCODED TO RETURN DUMMY DATA** -Description: Returns list of cpusocket handle objects on current machine - -Input parameters: `None` - -Output: List of cpusocket handle objects - -Exceptions that can be thrown by `amdsmi_get_cpusocket_handles` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - sockets = amdsmi_get_cpusocket_handles() - print('Socket numbers: {}'.format(len(sockets))) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpusocket_info - -**Note: CURRENTLY HARDCODED TO RETURN EMPTY VALUES** -Description: Return cpu socket index - -Input parameters: -`socket_handle` cpu socket handle - -Output: Socket index - -Exceptions that can be thrown by `amdsmi_get_cpusocket_info` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - print(amdsmi_get_cpusocket_info(socket)) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpucore_handles - -Description: Returns list of CPU core handle objects on current machine - -Input parameters: `None` - -Output: List of CPU core handle objects - -Exceptions that can be thrown by `amdsmi_get_cpucore_handles` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - core_handles = amdsmi_get_cpucore_handles() - if len(core_handles) == 0: - print("No CPU cores on machine") - else: - for core in core_handles: - print(amdsmi_get_cpucore_info(core)) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_hsmp_proto_ver - -Description: Get the hsmp protocol version. - -Output: amdsmi hsmp protocol version - -Exceptions that can be thrown by `amdsmi_get_cpu_hsmp_proto_ver` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - version = amdsmi_get_cpu_hsmp_proto_ver(socket) - print(version) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_smu_fw_version - -Description: Get the SMU Firmware version. - -Output: amdsmi SMU Firmware version - -Exceptions that can be thrown by `amdsmi_get_cpu_smu_fw_version` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - version = amdsmi_get_cpu_smu_fw_version(socket) - print(version['debug']) - print(version['minor']) - print(version['major']) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_prochot_status - -Description: Get the CPU's prochot status. - -Output: amdsmi cpu prochot status - -Exceptions that can be thrown by `amdsmi_get_cpu_prochot_status` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - prochot = amdsmi_get_cpu_prochot_status(socket) - print(prochot) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_fclk_mclk - -Description: Get the Data fabric clock and Memory clock in MHz. - -Output: amdsmi data fabric clock and memory clock - -Exceptions that can be thrown by `amdsmi_get_cpu_fclk_mclk` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - clk = amdsmi_get_cpu_fclk_mclk(socket) - for fclk, mclk in clk.items(): - print(fclk) - print(mclk) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_cclk_limit - -Description: Get the core clock in MHz. - -Output: amdsmi core clock - -Exceptions that can be thrown by `amdsmi_get_cpu_cclk_limit` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - cclk_limit = amdsmi_get_cpu_cclk_limit(socket) - print(cclk_limit) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_current_active_freq_limit - -Description: Get current active frequency limit of the socket. - -Output: amdsmi frequency value in MHz and frequency source name - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_current_active_freq_limit` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - freq_limit = amdsmi_get_cpu_socket_current_active_freq_limit(socket) - for freq, src in freq_limit.items(): - print(freq) - print(src) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_freq_range - -Description: Get socket frequency range - -Output: amdsmi maximum frequency and minimum frequency - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_freq_range` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - freq_range = amdsmi_get_cpu_socket_freq_range(socket) - for fmax, fmin in freq_range.items(): - print(fmax) - print(fmin) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_core_current_freq_limit - -Description: Get socket frequency limit of the core - -Output: amdsmi frequency - -Exceptions that can be thrown by `amdsmi_get_cpu_core_current_freq_limit` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - core_handles = amdsmi_get_cpucore_handles() - if len(core_handles) == 0: - print("No CPU cores on machine") - else: - for core in core_handles: - freq_limit = amdsmi_get_cpu_core_current_freq_limit(core) - print(freq_limit) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_power - -Description: Get the socket power. - -Output: amdsmi socket power - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_power` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - sock_power = amdsmi_get_cpu_socket_power(socket) - print(sock_power) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_power_cap - -Description: Get the socket power cap. - -Output: amdsmi socket power cap - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_power_cap` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - sock_power = amdsmi_get_cpu_socket_power_cap(socket) - print(sock_power) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_power_cap_max - -Description: Get the socket power cap max. - -Output: amdsmi socket power cap max - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_power_cap_max` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - sock_power = amdsmi_get_cpu_socket_power_cap_max(socket) - print(sock_power) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_pwr_svi_telemetry_all_rails - -Description: Get the SVI based power telemetry for all rails. - -Output: amdsmi svi based power value - -Exceptions that can be thrown by `amdsmi_get_cpu_pwr_svi_telemetry_all_rails` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - power = amdsmi_get_cpu_pwr_svi_telemetry_all_rails(socket) - print(power) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_cpu_socket_power_cap - -Description: Set the power cap value for a given socket. - -Input: socket index, amdsmi socket power cap value - -Exceptions that can be thrown by `amdsmi_set_cpu_socket_power_cap` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - power = amdsmi_set_cpu_socket_power_cap(socket, 0, 1000) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_cpu_pwr_efficiency_mode - -Description: Set the power efficiency profile policy. - -Input: socket index, mode(0, 1, or 2) - -Exceptions that can be thrown by `amdsmi_set_cpu_pwr_efficiency_mode` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - policy = amdsmi_set_cpu_pwr_efficiency_mode(socket, 0, 0) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_core_boostlimit - -Description: Get boost limit of the cpu core - -Output: amdsmi frequency - -Exceptions that can be thrown by `amdsmi_get_cpu_core_boostlimit` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - core_handles = amdsmi_get_cpucore_handles() - if len(core_handles) == 0: - print("No CPU cores on machine") - else: - for core in core_handles: - boost_limit = amdsmi_get_cpu_core_boostlimit(core) - print(boost_limit) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_c0_residency - -Description: Get the cpu socket C0 residency. - -Output: amdsmi C0 residency value - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_c0_residency` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - c0_residency = amdsmi_get_cpu_socket_c0_residency(socket) - print(c0_residency) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_cpu_core_boostlimit - -Description: Set the cpu core boost limit. - -Output: amdsmi boostlimit value - -Exceptions that can be thrown by `amdsmi_set_cpu_core_boostlimit` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - core_handles = amdsmi_get_cpucore_handles() - if len(core_handles) == 0: - print("No CPU cores on machine") - else: - for core in core_handles: - boost_limit = amdsmi_set_cpu_core_boostlimit(core, 1000) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_cpu_socket_boostlimit - -Description: Set the cpu socket boost limit. - -Input: amdsmi boostlimit value - -Exceptions that can be thrown by `amdsmi_set_cpu_socket_boostlimit` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - boost_limit = amdsmi_set_cpu_socket_boostlimit(socket, 1000) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_ddr_bw - -Description: Get the CPU DDR Bandwidth. - -Output: amdsmi ddr bandwidth data - -Exceptions that can be thrown by `amdsmi_get_cpu_ddr_bw` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - ddr_bw = amdsmi_get_cpu_ddr_bw(socket) - print(ddr_bw['max_bw']) - print(ddr_bw['utilized_bw']) - print(ddr_bw['utilized_pct']) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_socket_temperature - -Description: Get the socket temperature. - -Output: amdsmi temperature value - -Exceptions that can be thrown by `amdsmi_get_cpu_socket_temperature` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - ptmon = amdsmi_get_cpu_socket_temperature(socket) - print(ptmon) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_dimm_temp_range_and_refresh_rate - -Description: Get DIMM temperature range and refresh rate. - -Output: amdsmi dimm metric data - -Exceptions that can be thrown by `amdsmi_get_cpu_dimm_temp_range_and_refresh_rate` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - dimm = amdsmi_get_cpu_dimm_temp_range_and_refresh_rate(socket) - print(dimm['range']) - print(dimm['ref_rate']) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_dimm_power_consumption - -Description: amdsmi_get_cpu_dimm_power_consumption. - -Output: amdsmi dimm power consumption value - -Exceptions that can be thrown by `amdsmi_get_cpu_dimm_power_consumption` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - dimm = amdsmi_get_cpu_dimm_power_consumption(socket) - print(dimm['power']) - print(dimm['update_rate']) - print(dimm['dimm_addr']) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_get_cpu_dimm_thermal_sensor - -Description: Get DIMM thermal sensor value. - -Output: amdsmi dimm temperature data - -Exceptions that can be thrown by `amdsmi_get_cpu_dimm_thermal_sensor` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - dimm = amdsmi_get_cpu_dimm_thermal_sensor(socket) - print(dimm['sensor']) - print(dimm['update_rate']) - print(dimm['dimm_addr']) - print(dimm['temp']) -except AmdSmiException as e: - print(e) -``` - -### amdsmi_set_cpu_xgmi_width - -Description: Set xgmi width. - -Input: amdsmi xgmi width - -Exceptions that can be thrown by `amdsmi_set_cpu_xgmi_width` function: - -* `AmdSmiLibraryException` - -Example: - -```python -try: - socket_handles = amdsmi_get_cpusocket_handles() - if len(socket_handles) == 0: - print("No CPU sockets on machine") - else: - for socket in socket_handles: - xgmi_width = amdsmi_set_cpu_xgmi_width(socket, 0, 100) -except AmdSmiException as e: - print(e) -``` diff --git a/py-interface/amdsmi/__init__.py b/py-interface/amdsmi/__init__.py index 4d98d7f..16a73ac 100644 --- a/py-interface/amdsmi/__init__.py +++ b/py-interface/amdsmi/__init__.py @@ -23,58 +23,22 @@ from .amdsmi_interface import amdsmi_init from .amdsmi_interface import amdsmi_shut_down -# Device Discovery +# Device Descovery from .amdsmi_interface import amdsmi_get_processor_type from .amdsmi_interface import amdsmi_get_processor_handles from .amdsmi_interface import amdsmi_get_socket_handles from .amdsmi_interface import amdsmi_get_socket_info -# ESMI Dependent Functions -try: - from .amdsmi_interface import amdsmi_get_cpusocket_handles - from .amdsmi_interface import amdsmi_get_cpusocket_info - from .amdsmi_interface import amdsmi_get_cpucore_handles - from .amdsmi_interface import amdsmi_get_cpu_hsmp_proto_ver - from .amdsmi_interface import amdsmi_get_cpu_smu_fw_version - from .amdsmi_interface import amdsmi_get_cpu_core_energy - from .amdsmi_interface import amdsmi_get_cpu_socket_energy - from .amdsmi_interface import amdsmi_get_cpu_prochot_status - from .amdsmi_interface import amdsmi_get_cpu_fclk_mclk - from .amdsmi_interface import amdsmi_get_cpu_cclk_limit - from .amdsmi_interface import amdsmi_get_cpu_socket_current_active_freq_limit - from .amdsmi_interface import amdsmi_get_cpu_socket_freq_range - from .amdsmi_interface import amdsmi_get_cpu_core_current_freq_limit - from .amdsmi_interface import amdsmi_get_cpu_socket_power - from .amdsmi_interface import amdsmi_get_cpu_socket_power_cap - from .amdsmi_interface import amdsmi_get_cpu_socket_power_cap_max - from .amdsmi_interface import amdsmi_get_cpu_pwr_svi_telemetry_all_rails - from .amdsmi_interface import amdsmi_set_cpu_socket_power_cap - from .amdsmi_interface import amdsmi_set_cpu_pwr_efficiency_mode - from .amdsmi_interface import amdsmi_get_cpu_core_boostlimit - from .amdsmi_interface import amdsmi_get_cpu_socket_c0_residency - from .amdsmi_interface import amdsmi_set_cpu_core_boostlimit - from .amdsmi_interface import amdsmi_set_cpu_socket_boostlimit - from .amdsmi_interface import amdsmi_get_cpu_ddr_bw - from .amdsmi_interface import amdsmi_get_cpu_socket_temperature - from .amdsmi_interface import amdsmi_get_cpu_dimm_temp_range_and_refresh_rate - from .amdsmi_interface import amdsmi_get_cpu_dimm_power_consumption - from .amdsmi_interface import amdsmi_get_cpu_dimm_thermal_sensor - from .amdsmi_interface import amdsmi_set_cpu_xgmi_width -except AttributeError: - pass - from .amdsmi_interface import amdsmi_get_gpu_device_bdf from .amdsmi_interface import amdsmi_get_gpu_device_uuid from .amdsmi_interface import amdsmi_get_processor_handle_from_bdf # # SW Version Information -from .amdsmi_interface import amdsmi_get_gpu_driver_info +from .amdsmi_interface import amdsmi_get_gpu_driver_version # # ASIC and Bus Static Information from .amdsmi_interface import amdsmi_get_gpu_asic_info from .amdsmi_interface import amdsmi_get_power_cap_info -from .amdsmi_interface import amdsmi_get_gpu_vram_info -from .amdsmi_interface import amdsmi_get_gpu_cache_info # # Microcode and VBIOS Information from .amdsmi_interface import amdsmi_get_gpu_vbios_info @@ -101,7 +65,6 @@ from .amdsmi_interface import amdsmi_get_gpu_board_info # # Ras Information -from .amdsmi_interface import amdsmi_get_gpu_ras_feature_info from .amdsmi_interface import amdsmi_get_gpu_ras_block_features_enabled # # Unsupported Functions In Virtual Environment @@ -130,12 +93,13 @@ # # Clock, Power and Performance Query from .amdsmi_interface import amdsmi_get_utilization_count from .amdsmi_interface import amdsmi_get_gpu_perf_level +from .amdsmi_interface import amdsmi_set_gpu_perf_determinism_mode from .amdsmi_interface import amdsmi_get_gpu_overdrive_level from .amdsmi_interface import amdsmi_get_clk_freq from .amdsmi_interface import amdsmi_get_gpu_od_volt_info from .amdsmi_interface import amdsmi_get_gpu_metrics_info from .amdsmi_interface import amdsmi_get_gpu_od_volt_curve_regions -from .amdsmi_interface import amdsmi_is_gpu_power_management_enabled +from .amdsmi_interface import amdsmi_get_gpu_power_profile_presets # # Performance Counters from .amdsmi_interface import amdsmi_gpu_counter_group_supported @@ -189,64 +153,11 @@ # # Hardware topology query from .amdsmi_interface import amdsmi_topo_get_numa_node_number from .amdsmi_interface import amdsmi_topo_get_link_weight -from .amdsmi_interface import amdsmi_get_minmax_bandwidth_between_processors +from .amdsmi_interface import amdsmi_get_minmax_bandwith_between_processors from .amdsmi_interface import amdsmi_topo_get_link_type from .amdsmi_interface import amdsmi_is_P2P_accessible from .amdsmi_interface import amdsmi_get_xgmi_info -# # Individual GPU Metrics Functions -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_hotspot -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_mem -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_vrsoc -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_socket_power -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_gfx_activity -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_umc_activity -from .amdsmi_interface import amdsmi_get_gpu_metrics_energy_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_system_clock_counter -from .amdsmi_interface import amdsmi_get_gpu_metrics_firmware_timestamp -from .amdsmi_interface import amdsmi_get_gpu_metrics_throttle_status -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_link_width -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_link_speed -from .amdsmi_interface import amdsmi_get_gpu_metrics_xgmi_link_width -from .amdsmi_interface import amdsmi_get_gpu_metrics_xgmi_link_speed -from .amdsmi_interface import amdsmi_get_gpu_metrics_gfxclk_lock_status -from .amdsmi_interface import amdsmi_get_gpu_metrics_gfx_activity_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_mem_activity_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_bandwidth_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_bandwidth_inst -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_replay_count_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_uclk -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_hbm -from .amdsmi_interface import amdsmi_get_gpu_metrics_vcn_activity -from .amdsmi_interface import amdsmi_get_gpu_metrics_xgmi_read_data -from .amdsmi_interface import amdsmi_get_gpu_metrics_xgmi_write_data -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_gfxclk -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_socclk -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_vclk0 -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_dclk0 -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_edge -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_vrgfx -from .amdsmi_interface import amdsmi_get_gpu_metrics_temp_vrmem -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_mm_activity -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_vclk1 -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_dclk1 -from .amdsmi_interface import amdsmi_get_gpu_metrics_indep_throttle_status -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_socket_power -from .amdsmi_interface import amdsmi_get_gpu_metrics_curr_fan_speed -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_gfx_clock_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_soc_clock_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_uclock_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_vclock0_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_dclock0_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_vclock1_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_avg_dclock1_frequency -from .amdsmi_interface import amdsmi_get_gpu_metrics_volt_soc -from .amdsmi_interface import amdsmi_get_gpu_metrics_volt_gfx -from .amdsmi_interface import amdsmi_get_gpu_metrics_volt_mem -from .amdsmi_interface import amdsmi_get_gpu_metrics_header_info - # # Enums from .amdsmi_interface import AmdSmiInitFlags from .amdsmi_interface import AmdSmiContainerTypes @@ -282,3 +193,4 @@ from .amdsmi_exception import AmdSmiBdfFormatException from .amdsmi_exception import AmdSmiTimeoutException from .amdsmi_exception import AmdSmiException +from .amdsmi_exception import AmdSmiRetCode diff --git a/py-interface/amdsmi/amdsmi_exception.py b/py-interface/amdsmi/amdsmi_exception.py index 3098311..046659e 100644 --- a/py-interface/amdsmi/amdsmi_exception.py +++ b/py-interface/amdsmi/amdsmi_exception.py @@ -22,9 +22,40 @@ from enum import IntEnum from . import amdsmi_wrapper +class AmdSmiRetCode(IntEnum): + SUCCESS = amdsmi_wrapper.AMDSMI_STATUS_SUCCESS + STATUS_INVAL = amdsmi_wrapper.AMDSMI_STATUS_INVAL + STATUS_NOT_SUPPORTED = amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED + STATUS_FILE_ERROR = amdsmi_wrapper.AMDSMI_STATUS_FILE_ERROR + STATUS_NO_PERM = amdsmi_wrapper.AMDSMI_STATUS_NO_PERM + STATUS_OUT_OF_RESOURCES = amdsmi_wrapper.AMDSMI_STATUS_OUT_OF_RESOURCES + STATUS_INTERNAL_EXCEPTION = amdsmi_wrapper.AMDSMI_STATUS_INTERNAL_EXCEPTION + STATUS_INPUT_OUT_OF_BOUNDS = amdsmi_wrapper.AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS + STATUS_INIT_ERROR = amdsmi_wrapper.AMDSMI_STATUS_INIT_ERROR + STATUS_NOT_YET_IMPLEMENTED = amdsmi_wrapper.AMDSMI_STATUS_NOT_YET_IMPLEMENTED + STATUS_NOT_FOUND = amdsmi_wrapper.AMDSMI_STATUS_NOT_FOUND + STATUS_INSUFFICIENT_SIZE = amdsmi_wrapper.AMDSMI_STATUS_INSUFFICIENT_SIZE + STATUS_INTERRUPT = amdsmi_wrapper.AMDSMI_STATUS_INTERRUPT + STATUS_UNEXPECTED_SIZE = amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_SIZE + STATUS_NO_DATA = amdsmi_wrapper.AMDSMI_STATUS_NO_DATA + STATUS_UNEXPECTED_DATA = amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_DATA + STATUS_BUSY = amdsmi_wrapper.AMDSMI_STATUS_BUSY + STATUS_REFCOUNT_OVERFLOW = amdsmi_wrapper.AMDSMI_STATUS_REFCOUNT_OVERFLOW + STATUS_FAIL_LOAD_MODULE = amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_MODULE + STATUS_FAIL_LOAD_SYMBOL = amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_SYMBOL + STATUS_DRM_ERROR = amdsmi_wrapper.AMDSMI_STATUS_DRM_ERROR + STATUS_IO = amdsmi_wrapper.AMDSMI_STATUS_IO + STATUS_API_FAILED = amdsmi_wrapper.AMDSMI_STATUS_API_FAILED + STATUS_TIMEOUT = amdsmi_wrapper.AMDSMI_STATUS_TIMEOUT + STATUS_NO_SLOT = amdsmi_wrapper.AMDSMI_STATUS_NO_SLOT + STATUS_RETRY = amdsmi_wrapper.AMDSMI_STATUS_RETRY + STATUS_NOT_INIT = amdsmi_wrapper.AMDSMI_STATUS_NOT_INIT + UNKNOWN_ERROR = amdsmi_wrapper.AMDSMI_STATUS_UNKNOWN_ERROR + class AmdSmiException(Exception): """Base smi exception class""" + pass @@ -36,7 +67,7 @@ def __init__(self, err_code): self.set_err_info() def __str__(self): - return "Error code:\n\t{err_code} | {err_info}".format( + return "An error occured with code: {err_code}({err_info})".format( err_code=self.err_code, err_info=self.err_info ) @@ -46,49 +77,34 @@ def get_error_info(self): def get_error_code(self): return self.err_code - # Translate error codes to error strings def set_err_info(self): switch = { - amdsmi_wrapper.AMDSMI_STATUS_INVAL : "AMDSMI_STATUS_INVAL - Invalid parameters", - amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED : "AMDSMI_STATUS_NOT_SUPPORTED - Feature not supported", - amdsmi_wrapper.AMDSMI_STATUS_NOT_YET_IMPLEMENTED : "AMDSMI_STATUS_NOT_YET_IMPLEMENTED - Feature not yet implemented", - amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_MODULE : "AMDSMI_STATUS_FAIL_LOAD_MODULE - Fail to load lib", - amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_SYMBOL : "AMDSMI_STATUS_FAIL_LOAD_SYMBOL - Fail to load symbol", - amdsmi_wrapper.AMDSMI_STATUS_DRM_ERROR : "AMDSMI_STATUS_DRM_ERROR - Error when called libdrm", - amdsmi_wrapper.AMDSMI_STATUS_API_FAILED : "AMDSMI_STATUS_API_FAILED - API call failed", - amdsmi_wrapper.AMDSMI_STATUS_TIMEOUT : "AMDSMI_STATUS_TIMEOUT - Timeout in API call", - amdsmi_wrapper.AMDSMI_STATUS_RETRY : "AMDSMI_STATUS_RETRY - Retry operation", - amdsmi_wrapper.AMDSMI_STATUS_NO_PERM : "AMDSMI_STATUS_NO_PERM - Permission Denied", - amdsmi_wrapper.AMDSMI_STATUS_INTERRUPT : "AMDSMI_STATUS_INTERRUPT - Interrupt ocurred during execution", - amdsmi_wrapper.AMDSMI_STATUS_IO : "AMDSMI_STATUS_IO - I/O Error", - amdsmi_wrapper.AMDSMI_STATUS_ADDRESS_FAULT : "AMDSMI_STATUS_ADDRESS_FAULT - Bad address", - amdsmi_wrapper.AMDSMI_STATUS_FILE_ERROR : "AMDSMI_STATUS_FILE_ERROR - Error opening file", - amdsmi_wrapper.AMDSMI_STATUS_OUT_OF_RESOURCES : "AMDSMI_STATUS_OUT_OF_RESOURCES - Not enough memory", - amdsmi_wrapper.AMDSMI_STATUS_INTERNAL_EXCEPTION : "AMDSMI_STATUS_INTERNAL_EXCEPTION - Internal error", - amdsmi_wrapper.AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS : "AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS - Out of bounds", - amdsmi_wrapper.AMDSMI_STATUS_INIT_ERROR : "AMDSMI_STATUS_INIT_ERROR - Initialization error", - amdsmi_wrapper.AMDSMI_STATUS_REFCOUNT_OVERFLOW : "AMDSMI_STATUS_REFCOUNT_OVERFLOW - Internal reference counter exceeded INT32_MAX", - amdsmi_wrapper.AMDSMI_STATUS_BUSY : "AMDSMI_STATUS_BUSY - Device busy", - amdsmi_wrapper.AMDSMI_STATUS_NOT_FOUND : "AMDSMI_STATUS_NOT_FOUND - Device Not found", - amdsmi_wrapper.AMDSMI_STATUS_NOT_INIT : "AMDSMI_STATUS_NOT_INIT - Device not initialized", - amdsmi_wrapper.AMDSMI_STATUS_NO_SLOT : "AMDSMI_STATUS_NO_SLOT - No more free slot", - amdsmi_wrapper.AMDSMI_STATUS_DRIVER_NOT_LOADED : "AMDSMI_STATUS_DRIVER_NOT_LOADED - Driver not loaded", - amdsmi_wrapper.AMDSMI_STATUS_NO_DATA : "AMDSMI_STATUS_NO_DATA - No data was found for given input", - amdsmi_wrapper.AMDSMI_STATUS_INSUFFICIENT_SIZE : "AMDSMI_STATUS_INSUFFICIENT_SIZE - Insufficient size for operation", - amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_SIZE : "AMDSMI_STATUS_UNEXPECTED_SIZE - unexpected size of data was read", - amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_DATA : "AMDSMI_STATUS_UNEXPECTED_DATA - The data read or provided was unexpected", - amdsmi_wrapper.AMDSMI_STATUS_NON_AMD_CPU : "AMDSMI_STATUS_NON_AMD_CPU - System has non-AMD CPU", - amdsmi_wrapper.AMDSMI_NO_ENERGY_DRV : "AMD_SMI_NO_ENERGY_DRV - Energy driver not found", - amdsmi_wrapper.AMDSMI_NO_MSR_DRV : "AMDSMI_NO_MSR_DRV - MSR driver not found", - amdsmi_wrapper.AMDSMI_NO_HSMP_DRV : "AMD_SMI_NO_HSMP_DRV - HSMP driver not found", - amdsmi_wrapper.AMDSMI_NO_HSMP_SUP : "AMD_SMI_NO_HSMP_SUP - HSMP not supported", - amdsmi_wrapper.AMDSMI_NO_HSMP_MSG_SUP : "AMD_SMI_NO_HSMP_MSG_SUP - HSMP message/feature not supported", - amdsmi_wrapper.AMDSMI_HSMP_TIMEOUT : "AMD_SMI_HSMP_TIMEOUT - HSMP message timeout", - amdsmi_wrapper.AMDSMI_NO_DRV : "AMDSMI_NO_DRV - No Energy and HSMP driver present", - amdsmi_wrapper.AMDSMI_FILE_NOT_FOUND : "AMDSMI_FILE_NOT_FOUND - File or directory not found", - amdsmi_wrapper.AMDSMI_ARG_PTR_NULL : "AMDSMI_ARG_PTR_NULL - Parsed argument is invalid", - amdsmi_wrapper.AMDSMI_STATUS_MAP_ERROR : "AMDSMI_STATUS_MAP_ERROR - The internal library error did not map to a status code", - amdsmi_wrapper.AMDSMI_STATUS_UNKNOWN_ERROR : "AMDSMI_STATUS_UNKNOWN_ERROR - An unknown error occurred" + AmdSmiRetCode.STATUS_INVAL: "AMDSMI_STATUS_INVAL - Invalid parameters", + AmdSmiRetCode.STATUS_NOT_SUPPORTED: "AMDSMI_STATUS_NOT_SUPPORTED - Feature not supported", + AmdSmiRetCode.STATUS_FILE_ERROR: "AMDSMI_STATUS_FILE_ERROR - Error opening file", + AmdSmiRetCode.STATUS_OUT_OF_RESOURCES: "AMDSMI_STATUS_OUT_OF_RESOURCES - Not enough memory", + AmdSmiRetCode.STATUS_INTERNAL_EXCEPTION: "AMDSMI_STATUS_INTERNAL_EXCEPTION - Internal error", + AmdSmiRetCode.STATUS_NO_PERM: "AMDSMI_STATUS_NO_PERM - Permission Denied", + AmdSmiRetCode.STATUS_INPUT_OUT_OF_BOUNDS: "AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS - Out of bounds", + AmdSmiRetCode.STATUS_INIT_ERROR: "AMDSMI_STATUS_INIT_ERROR - Initialization error", + AmdSmiRetCode.STATUS_BUSY: "AMDSMI_STATUS_BUSY - Device busy", + AmdSmiRetCode.STATUS_NOT_FOUND: "AMDSMI_STATUS_NOT_FOUND - Device Not found", + AmdSmiRetCode.STATUS_IO: "AMDSMI_STATUS_IO - I/O Error", + AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED: "AMDSMI_STATUS_NOT_YET_IMPLEMENTED - Feature not yet implemented", + AmdSmiRetCode.STATUS_INSUFFICIENT_SIZE: "AMDSMI_STATUS_INSUFFICIENT_SIZE - Insufficient size for operation", + AmdSmiRetCode.STATUS_INTERRUPT: "AMDSMI_STATUS_INTERRUPT - Interrupt ocurred during execution", + AmdSmiRetCode.STATUS_UNEXPECTED_SIZE: "AMDSMI_STATUS_UNEXPECTED_SIZE - unexpected size of data was read", + AmdSmiRetCode.STATUS_NO_DATA: "AMDSMI_STATUS_NO_DATA - No data was found for given input", + AmdSmiRetCode.STATUS_UNEXPECTED_DATA: "AMDSMI_STATUS_UNEXPECTED_DATA - The data read or provided was unexpected", + AmdSmiRetCode.STATUS_REFCOUNT_OVERFLOW: "AMDSMI_STATUS_REFCOUNT_OVERFLOW - Internal reference counter exceeded INT32_MAX", + AmdSmiRetCode.STATUS_FAIL_LOAD_MODULE: "AMDSMI_STATUS_FAIL_LOAD_MODULE - Fail to load lib", + AmdSmiRetCode.STATUS_FAIL_LOAD_SYMBOL: "AMDSMI_STATUS_FAIL_LOAD_SYMBOL - Fail to load symbol", + AmdSmiRetCode.STATUS_DRM_ERROR: "AMDSMI_STATUS_DRM_ERROR - Error when called libdrm", + AmdSmiRetCode.STATUS_API_FAILED: "AMDSMI_STATUS_API_FAILED - API call failed", + AmdSmiRetCode.STATUS_TIMEOUT: "AMDSMI_STATUS_TIMEOUT - Timeout in API call", + AmdSmiRetCode.STATUS_NO_SLOT: "AMDSMI_STATUS_NO_SLOT - No more free slot", + AmdSmiRetCode.STATUS_RETRY: "AMDSMI_STATUS_RETRY - Retry operation", + AmdSmiRetCode.STATUS_NOT_INIT: "AMDSMI_STATUS_NOT_INIT - Device not initialized", } self.err_info = switch.get(self.err_code, "AMDSMI_STATUS_UNKNOWN_ERROR - An unknown error occurred") @@ -96,12 +112,12 @@ def set_err_info(self): class AmdSmiRetryException(AmdSmiLibraryException): def __init__(self): - super().__init__(amdsmi_wrapper.AMDSMI_STATUS_RETRY) + super().__init__(AmdSmiRetCode.RETRY) class AmdSmiTimeoutException(AmdSmiLibraryException): def __init__(self): - super().__init__(amdsmi_wrapper.AMDSMI_STATUS_TIMEOUT) + super().__init__(AmdSmiRetCode.TIMEOUT) class AmdSmiParameterException(AmdSmiException): diff --git a/py-interface/amdsmi/amdsmi_interface.py b/py-interface/amdsmi/amdsmi_interface.py index 924c782..3bf2f0b 100644 --- a/py-interface/amdsmi/amdsmi_interface.py +++ b/py-interface/amdsmi/amdsmi_interface.py @@ -30,14 +30,6 @@ MAX_NUM_PROCESSES = 1024 -# gpu metrics macros defined in amdsmi.h -AMDSMI_NUM_HBM_INSTANCES = 4 -AMDSMI_MAX_NUM_VCN = 4 -AMDSMI_MAX_NUM_CLKS = 4 -AMDSMI_MAX_NUM_XGMI_LINKS = 8 -AMDSMI_MAX_NUM_GFX_CLKS = 8 - - class AmdSmiInitFlags(IntEnum): INIT_ALL_PROCESSORS = amdsmi_wrapper.AMDSMI_INIT_ALL_PROCESSORS INIT_AMD_CPUS = amdsmi_wrapper.AMDSMI_INIT_AMD_CPUS @@ -138,10 +130,10 @@ class AmdSmiFwBlock(IntEnum): FW_ID_RLC_SAVE_RESTORE_LIST = amdsmi_wrapper.FW_ID_RLC_SAVE_RESTORE_LIST FW_ID_ASD = amdsmi_wrapper.FW_ID_ASD FW_ID_TA_RAS = amdsmi_wrapper.FW_ID_TA_RAS - FW_ID_TA_XGMI = amdsmi_wrapper.FW_ID_TA_XGMI + FW_ID_XGMI = amdsmi_wrapper.FW_ID_XGMI FW_ID_RLC_SRLG = amdsmi_wrapper.FW_ID_RLC_SRLG FW_ID_RLC_SRLS = amdsmi_wrapper.FW_ID_RLC_SRLS - FW_ID_PM = amdsmi_wrapper.FW_ID_PM + FW_ID_SMC = amdsmi_wrapper.FW_ID_SMC FW_ID_DMCU = amdsmi_wrapper.FW_ID_DMCU @@ -161,7 +153,6 @@ class AmdSmiClkType(IntEnum): class AmdSmiTemperatureType(IntEnum): EDGE = amdsmi_wrapper.TEMPERATURE_TYPE_EDGE - HOTSPOT = amdsmi_wrapper.TEMPERATURE_TYPE_HOTSPOT JUNCTION = amdsmi_wrapper.TEMPERATURE_TYPE_JUNCTION VRAM = amdsmi_wrapper.TEMPERATURE_TYPE_VRAM HBM_0 = amdsmi_wrapper.TEMPERATURE_TYPE_HBM_0 @@ -252,23 +243,6 @@ class AmdSmiVoltageType(IntEnum): INVALID = amdsmi_wrapper.AMDSMI_VOLT_TYPE_INVALID -class AmdSmiComputePartitionType(IntEnum): - CPX = amdsmi_wrapper.COMPUTE_PARTITION_CPX - SPX = amdsmi_wrapper.COMPUTE_PARTITION_SPX - DPX = amdsmi_wrapper.COMPUTE_PARTITION_DPX - TPX = amdsmi_wrapper.COMPUTE_PARTITION_TPX - QPX = amdsmi_wrapper.COMPUTE_PARTITION_QPX - INVALID = amdsmi_wrapper.COMPUTE_PARTITION_INVALID - - -class AmdSmiMemoryPartitionType(IntEnum): - NPS1 = amdsmi_wrapper.MEMORY_PARTITION_NPS1 - NPS2 = amdsmi_wrapper.MEMORY_PARTITION_NPS2 - NPS4 = amdsmi_wrapper.MEMORY_PARTITION_NPS4 - NPS8 = amdsmi_wrapper.MEMORY_PARTITION_NPS8 - UNKNOWN = amdsmi_wrapper.MEMORY_PARTITION_UNKNOWN - - class AmdSmiPowerProfilePresetMasks(IntEnum): CUSTOM_MASK = amdsmi_wrapper.AMDSMI_PWR_PROF_PRST_CUSTOM_MASK VIDEO_MASK = amdsmi_wrapper.AMDSMI_PWR_PROF_PRST_VIDEO_MASK @@ -346,7 +320,6 @@ class AmdSmiUtilizationCounterType(IntEnum): COARSE_GRAIN_GFX_ACTIVITY = amdsmi_wrapper.AMDSMI_COARSE_GRAIN_GFX_ACTIVITY COARSE_GRAIN_MEM_ACTIVITY = amdsmi_wrapper.AMDSMI_COARSE_GRAIN_MEM_ACTIVITY - class AmdSmiProcessorType(IntEnum): UNKNOWN = amdsmi_wrapper.UNKNOWN AMD_GPU = amdsmi_wrapper.AMD_GPU @@ -357,8 +330,7 @@ class AmdSmiProcessorType(IntEnum): class AmdSmiEventReader: def __init__( - self, processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - event_types: List[AmdSmiEvtNotificationType] + self, processor_handle: amdsmi_wrapper.amdsmi_processor_handle, *event_types ): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( @@ -385,7 +357,8 @@ def __init__( processor_handle, ctypes.c_uint64(mask))) def read(self, timestamp, num_elem=10): - self.event_info = (amdsmi_wrapper.amdsmi_evt_notification_data_t * num_elem)() + self.event_info = ( + amdsmi_wrapper.amdsmi_evt_notification_data_t * num_elem)() _check_res( amdsmi_wrapper.amdsmi_get_gpu_event_notification( ctypes.c_int(timestamp), @@ -394,14 +367,17 @@ def read(self, timestamp, num_elem=10): ) ) - ret = [] + ret = list() for i in range(0, num_elem): - unique_event_values = set(event.value for event in AmdSmiEvtNotificationType) - if self.event_info[i].event in unique_event_values: + if self.event_info[i].event in set( + event.value for event in AmdSmiEvtNotificationType + ): ret.append( { "processor_handle": self.event_info[i].processor_handle, - "event": AmdSmiEvtNotificationType(self.event_info[i].event).name, + "event": AmdSmiEvtNotificationType( + self.event_info[i].event + ).name, "message": self.event_info[i].message.decode("utf-8"), } ) @@ -445,7 +421,7 @@ def _format_bad_page_info(bad_page_info, bad_page_count: ctypes.c_uint32) -> Lis amdsmi_wrapper.amdsmi_retired_page_record_t) ) - table_records = [] + table_records = list() for i in range(bad_page_count.value): table_records.append( { @@ -469,10 +445,10 @@ def _format_bdf(amdsmi_bdf: amdsmi_wrapper.amdsmi_bdf_t) -> str: Returns: `str`: String containing BDF data in a readable format. """ - domain = hex(amdsmi_bdf.fields.domain_number)[2:].zfill(4) - bus = hex(amdsmi_bdf.fields.bus_number)[2:].zfill(2) - device = hex(amdsmi_bdf.fields.device_number)[2:].zfill(2) - function = hex(amdsmi_bdf.fields.function_number)[2:] + domain = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.domain_number)[2:].zfill(4) + bus = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.bus_number)[2:].zfill(2) + device = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.device_number)[2:].zfill(2) + function = hex(amdsmi_bdf.c__UA_amdsmi_bdf_t_0.function_number)[2:] return domain + ":" + bus + ":" + device + "." + function @@ -519,10 +495,10 @@ def _make_amdsmi_bdf_from_list(bdf): if len(bdf) != 4: return None amdsmi_bdf = amdsmi_wrapper.amdsmi_bdf_t() - amdsmi_bdf.fields.function_number = bdf[3] - amdsmi_bdf.fields.device_number = bdf[2] - amdsmi_bdf.fields.bus_number = bdf[1] - amdsmi_bdf.fields.domain_number = bdf[0] + amdsmi_bdf.c__UA_amdsmi_bdf_t_0.function_number = bdf[3] + amdsmi_bdf.c__UA_amdsmi_bdf_t_0.device_number = bdf[2] + amdsmi_bdf.c__UA_amdsmi_bdf_t_0.bus_number = bdf[1] + amdsmi_bdf.c__UA_amdsmi_bdf_t_0.domain_number = bdf[0] return amdsmi_bdf @@ -555,34 +531,6 @@ def amdsmi_get_socket_handles() -> List[amdsmi_wrapper.amdsmi_socket_handle]: return sockets -def amdsmi_get_cpusocket_handles() -> List[amdsmi_wrapper.amdsmi_cpusocket_handle]: - """ - Function that gets cpu socket handles. Wraps the same named function call. - - Parameters: - `None`. - - Returns: - `List`: List containing all of the found cpu socket handles. - """ - socket_count = ctypes.c_uint32(0) - null_ptr = ctypes.POINTER(amdsmi_wrapper.amdsmi_cpusocket_handle)() - _check_res( - amdsmi_wrapper.amdsmi_get_cpusocket_handles( - ctypes.byref(socket_count), null_ptr) - ) - socket_handles = (amdsmi_wrapper.amdsmi_cpusocket_handle * - socket_count.value)() - _check_res( - amdsmi_wrapper.amdsmi_get_cpusocket_handles( - ctypes.byref(socket_count), socket_handles) - ) - sockets = [ - amdsmi_wrapper.amdsmi_cpusocket_handle(socket_handles[sock_idx]) - for sock_idx in range(socket_count.value) - ] - - return sockets def amdsmi_get_socket_info(socket_handle): if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_socket_handle): @@ -597,19 +545,6 @@ def amdsmi_get_socket_info(socket_handle): return socket_info.value.decode() -def amdsmi_get_cpusocket_info(socket_handle): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle) - - socket_id = ctypes.c_uint32() - _check_res( - amdsmi_wrapper.amdsmi_get_cpusocket_info( - socket_handle, socket_id) - ) - - return socket_id - def amdsmi_get_processor_handles() -> List[amdsmi_wrapper.amdsmi_processor_handle]: socket_handles = amdsmi_get_socket_handles() devices = [] @@ -641,587 +576,450 @@ def amdsmi_get_processor_handles() -> List[amdsmi_wrapper.amdsmi_processor_handl return devices -def amdsmi_get_cpucore_handles() -> List[amdsmi_wrapper.amdsmi_processor_handle]: - socket_handles = amdsmi_get_cpusocket_handles() - processors = [] - for socket in socket_handles: - processor_count = ctypes.c_uint32() - null_ptr = ctypes.POINTER(amdsmi_wrapper.amdsmi_processor_handle)() - _check_res( - amdsmi_wrapper.amdsmi_get_cpucore_handles( - socket, - ctypes.byref(processor_count), - null_ptr, - ) - ) - processor_handles = ( - amdsmi_wrapper.amdsmi_processor_handle * processor_count.value)() - _check_res( - amdsmi_wrapper.amdsmi_get_cpucore_handles( - socket, - ctypes.byref(processor_count), - processor_handles, - ) - ) - processors.extend( - [ - amdsmi_wrapper.amdsmi_processor_handle(processor_handles[dev_idx]) - for dev_idx in range(processor_count.value) - ] - ) - return processors +def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS): + if not isinstance(flag, AmdSmiInitFlags): + raise AmdSmiParameterException(flag, AmdSmiInitFlags) + _check_res(amdsmi_wrapper.amdsmi_init(flag)) -def amdsmi_get_cpu_hsmp_proto_ver( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - proto_ver = ctypes.c_uint32() - _check_res( - amdsmi_wrapper.amdsmi_get_cpu_hsmp_proto_ver( - socket_handle, ctypes.byref(proto_ver) - ) - ) +def amdsmi_shut_down(): + _check_res(amdsmi_wrapper.amdsmi_shut_down()) - return proto_ver.value -def amdsmi_get_cpu_smu_fw_version(socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_processor_type( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> ctypes.c_uint32: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - smu_fw = amdsmi_wrapper.amdsmi_smu_fw_version_t() - - _check_res(amdsmi_wrapper.amdsmi_get_cpu_smu_fw_version(socket_handle, smu_fw)) + dev_type = amdsmi_wrapper.processor_type_t() + _check_res( + amdsmi_wrapper.amdsmi_get_processor_type( + processor_handle, ctypes.byref(dev_type)) + ) return { - "smu_fw_debug_ver_num": smu_fw.debug, - "smu_fw_minor_ver_num": smu_fw.minor, - "smu_fw_major_ver_num": smu_fw.major + "processor_type": AmdSmiProcessorType(dev_type.value).name } -def amdsmi_get_cpu_core_energy( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, core_idx: int -) -> int: + +def amdsmi_get_gpu_device_bdf(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(core_idx, int): - raise AmdSmiParameterException(core_idx, int) - penergy = ctypes.c_uint64() + bdf_info = amdsmi_wrapper.amdsmi_bdf_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_core_energy( - processor_handle, core_idx, ctypes.byref(penergy) - ) + amdsmi_wrapper.amdsmi_get_gpu_device_bdf( + processor_handle, ctypes.byref(bdf_info)) ) - return penergy.value + return _format_bdf(bdf_info) + -def amdsmi_get_cpu_socket_energy( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_gpu_asic_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - penergy = ctypes.c_uint64() + asic_info = amdsmi_wrapper.amdsmi_asic_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_energy( - socket_handle, sock_idx, ctypes.byref(penergy) - ) + amdsmi_wrapper.amdsmi_get_gpu_asic_info( + processor_handle, ctypes.byref(asic_info)) ) - return penergy.value + return { + "market_name": asic_info.market_name.decode("utf-8"), + "vendor_id": asic_info.vendor_id, + "subvendor_id": asic_info.subvendor_id, + "device_id": asic_info.device_id, + "rev_id": asic_info.rev_id, + "asic_serial": asic_info.asic_serial.decode("utf-8"), + } + -def amdsmi_get_cpu_prochot_status( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_power_cap_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - prochot = ctypes.c_uint32() + power_info = amdsmi_wrapper.amdsmi_power_cap_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_energy( - socket_handle, sock_idx, ctypes.byref(prochot) + amdsmi_wrapper.amdsmi_get_power_cap_info( + processor_handle, ctypes.c_uint32(0), ctypes.byref(power_info) ) ) - return prochot.value + return {"power_cap": power_info.power_cap, + "default_power_cap": power_info.default_power_cap, + "dpm_cap": power_info.dpm_cap, + "min_power_cap": power_info.min_power_cap, + "max_power_cap": power_info.max_power_cap} + -def amdsmi_get_cpu_fclk_mclk( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_gpu_vbios_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - fclk = ctypes.c_uint32() - mclk = ctypes.c_uint32() + vbios_info = amdsmi_wrapper.amdsmi_vbios_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_fclk_mclk( - socket_handle, sock_idx, ctypes.byref(fclk), ctypes.byref(mclk) - ) + amdsmi_wrapper.amdsmi_get_gpu_vbios_info( + processor_handle, ctypes.byref(vbios_info)) ) return { - "fclk": fclk.value, - "mclk": mclk.value + "name": vbios_info.name.decode("utf-8"), + "build_date": vbios_info.build_date.decode("utf-8"), + "part_number": vbios_info.part_number.decode("utf-8"), + "version": vbios_info.version.decode("utf-8"), } -def amdsmi_get_cpu_cclk_limit( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - - cclk = ctypes.c_uint32() - _check_res( - amdsmi_wrapper.amdsmi_get_cpu_cclk_limit( - socket_handle, sock_idx, ctypes.byref(cclk) - ) - ) - - return cclk.value -def amdsmi_get_cpu_socket_current_active_freq_limit( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_gpu_activity( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - freq = ctypes.c_uint16() - src_type = ctypes.pointer(ctypes.pointer(ctypes.c_char())) + engine_usage = amdsmi_wrapper.amdsmi_engine_usage_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_current_active_freq_limit( - socket_handle, sock_idx, ctypes.byref(freq), src_type + amdsmi_wrapper.amdsmi_get_gpu_activity( + processor_handle, ctypes.byref(engine_usage) ) ) - return freq.value + return { + "gfx_activity": engine_usage.gfx_activity, + "umc_activity": engine_usage.umc_activity, + "mm_activity": engine_usage.mm_activity, + } + -def amdsmi_get_cpu_socket_freq_range( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_clock_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, + clock_type: AmdSmiClkType, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) + if not isinstance(clock_type, AmdSmiClkType): + raise AmdSmiParameterException(clock_type, AmdSmiClkType) - freq_max = ctypes.c_uint16() - freq_min = ctypes.c_uint16() + clock_measure = amdsmi_wrapper.amdsmi_clk_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_freq_range( - socket_handle, sock_idx, ctypes.byref(freq_max), ctypes.byref(freq_min) + amdsmi_wrapper.amdsmi_get_clock_info( + processor_handle, + clock_type, + ctypes.byref(clock_measure), ) ) return { - "max_socket_freq": freq_max.value, - "min_socket_freq": freq_min.value + "cur_clk": clock_measure.cur_clk, + "max_clk": clock_measure.max_clk, + "min_clk": clock_measure.min_clk, } -def amdsmi_get_cpu_core_current_freq_limit( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, core_idx: int -) -> int: + +def amdsmi_get_gpu_bad_page_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Union[list, str]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(core_idx, int): - raise AmdSmiParameterException(core_idx, int) - freq = ctypes.c_uint32() + num_pages = ctypes.c_uint32() + retired_page_record = ctypes.POINTER( + amdsmi_wrapper.amdsmi_retired_page_record_t)() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_core_current_freq_limit( - processor_handle, core_idx, ctypes.byref(freq) + amdsmi_wrapper.amdsmi_get_gpu_bad_page_info( + processor_handle, ctypes.byref(num_pages), retired_page_record ) ) + table_records = _format_bad_page_info(retired_page_record, num_pages) + if num_pages.value == 0: + return "No bad pages found." + else: + table_records = _format_bad_page_info(retired_page_record, num_pages) - return freq.value + return table_records -def amdsmi_get_cpu_socket_power( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): + +def amdsmi_get_gpu_total_ecc_count( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - ppower = ctypes.c_uint32() + error_count = amdsmi_wrapper.amdsmi_error_count_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_power( - socket_handle, sock_idx, ctypes.byref(ppower) + amdsmi_wrapper.amdsmi_get_gpu_total_ecc_count( + processor_handle, ctypes.byref(error_count) ) ) - return ppower.value + return { + "correctable_count": error_count.correctable_count, + "uncorrectable_count": error_count.uncorrectable_count, + } + -def amdsmi_get_cpu_socket_power_cap( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_gpu_board_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - pcap = ctypes.c_uint32() + board_info = amdsmi_wrapper.amdsmi_board_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_power_cap( - socket_handle, sock_idx, ctypes.byref(pcap) - ) + amdsmi_wrapper.amdsmi_get_gpu_board_info( + processor_handle, ctypes.byref(board_info)) ) - return pcap.value + return { + "serial_number": board_info.serial_number, + "model_number": board_info.model_number.decode("utf-8"), + "product_serial": board_info.product_serial.decode("utf-8"), + "product_name": board_info.product_name.decode("utf-8"), + "manufacturer_name" : board_info.product_name.decode("utf-8") + } -def amdsmi_get_cpu_socket_power_cap_max( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): + +def amdsmi_get_gpu_ras_block_features_enabled( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - pmax = ctypes.c_uint32() - _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_power_cap_max( - socket_handle, sock_idx, ctypes.byref(pmax) + ras_state = amdsmi_wrapper.amdsmi_ras_err_state_t() + ras_states = [] + for gpu_block in AmdSmiGpuBlock: + if gpu_block.name == "RESERVED" or gpu_block.name == "INVALID": + continue + if gpu_block.name == "LAST": + gpu_block.name = "FUSE" + _check_res( + amdsmi_wrapper.amdsmi_get_gpu_ras_block_features_enabled( + processor_handle, + amdsmi_wrapper.amdsmi_gpu_block_t(gpu_block.value), + ctypes.byref(ras_state), + ) + ) + ras_states.append( + { + "block": gpu_block.name, + "status": AmdSmiRasErrState(ras_state.value).name, + } ) - ) - return pmax.value + return ras_states -def amdsmi_get_cpu_pwr_svi_telemetry_all_rails( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): + +def amdsmi_get_gpu_process_list( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> List[amdsmi_wrapper.amdsmi_process_handle_t]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - power = ctypes.c_uint32() + max_processes = ctypes.c_uint32(MAX_NUM_PROCESSES) + + process_list = (amdsmi_wrapper.amdsmi_process_handle_t * + max_processes.value)() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_pwr_svi_telemetry_all_rails( - socket_handle, sock_idx, ctypes.byref(power) + amdsmi_wrapper.amdsmi_get_gpu_process_list( + processor_handle, ctypes.byref(max_processes), process_list ) ) - return power.value + return [amdsmi_wrapper.amdsmi_process_handle_t(process_list[x])\ + for x in range(0, max_processes.value)] -def amdsmi_set_cpu_socket_power_cap( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int, power_cap: int -): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): + +def amdsmi_get_gpu_process_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, + process: amdsmi_wrapper.amdsmi_process_handle_t, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - if not isinstance(power_cap, int): - raise AmdSmiParameterException(power_cap, int) - sock_idx = ctypes.c_uint32(sock_idx) - power_cap = ctypes.c_uint32(power_cap) - - _check_res( - amdsmi_wrapper.amdsmi_set_cpu_socket_power_cap( - processor_handle, sock_idx, power_cap) - ) -def amdsmi_set_cpu_pwr_efficiency_mode( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int, mode: int -): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): + if not isinstance(process, amdsmi_wrapper.amdsmi_process_handle_t): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - if not isinstance(mode, int): - raise AmdSmiParameterException(mode, int) - sock_idx = ctypes.c_uint8(sock_idx) - mode = ctypes.c_uint8(mode) + process, amdsmi_wrapper.amdsmi_process_handle_t) + info = amdsmi_wrapper.amdsmi_proc_info_t() _check_res( - amdsmi_wrapper.amdsmi_set_cpu_pwr_efficiency_mode( - socket_handle, sock_idx, mode) + amdsmi_wrapper.amdsmi_get_gpu_process_info( + processor_handle, process, ctypes.byref(info) + ) ) -def amdsmi_get_cpu_core_boostlimit( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, core_idx: int -) -> int: + return { + "name": info.name.decode("utf-8"), + "pid": info.pid, + "mem": info.mem, + "engine_usage": { + "gfx": info.engine_usage.gfx, + "enc": info.engine_usage.enc + }, + "memory_usage": { + "gtt_mem": info.memory_usage.gtt_mem, + "cpu_mem": info.memory_usage.cpu_mem, + "vram_mem": info.memory_usage.vram_mem, + }, + } + + +def amdsmi_get_gpu_device_uuid(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(core_idx, int): - raise AmdSmiParameterException(core_idx, int) - - boostlimit = ctypes.c_uint32() - _check_res( - amdsmi_wrapper.amdsmi_get_cpu_core_boostlimit( - processor_handle, core_idx, ctypes.byref(boostlimit) - ) - ) - return boostlimit.value + uuid = ctypes.create_string_buffer(_AMDSMI_GPU_UUID_SIZE) -def amdsmi_get_cpu_socket_c0_residency( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) + uuid_length = ctypes.c_uint32() + uuid_length.value = _AMDSMI_GPU_UUID_SIZE - c0_residency = ctypes.c_uint32() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_c0_residency( - socket_handle, sock_idx, ctypes.byref(c0_residency) + amdsmi_wrapper.amdsmi_get_gpu_device_uuid( + processor_handle, ctypes.byref(uuid_length), uuid ) ) - return c0_residency.value + return uuid.value.decode("utf-8") + -def amdsmi_set_cpu_core_boostlimit( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, core_idx: int, boostlimit: int -): +def amdsmi_get_gpu_driver_version( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> str: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(core_idx, int): - raise AmdSmiParameterException(core_idx, int) - if not isinstance(boostlimit, int): - raise AmdSmiParameterException(boostlimit, int) - core_idx = ctypes.c_uint32(core_idx) - boostlimit = ctypes.c_uint32(boostlimit) - _check_res( - amdsmi_wrapper.amdsmi_set_cpu_core_boostlimit( - processor_handle, core_idx, boostlimit) - ) + length = ctypes.c_int() + length.value = _AMDSMI_MAX_DRIVER_VERSION_LENGTH -def amdsmi_set_cpu_socket_boostlimit( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int, boostlimit: int -): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - if not isinstance(boostlimit, int): - raise AmdSmiParameterException(boostlimit, int) - sock_idx = ctypes.c_uint32(sock_idx) - boostlimit = ctypes.c_uint32(boostlimit) + version = ctypes.create_string_buffer(_AMDSMI_MAX_DRIVER_VERSION_LENGTH) _check_res( - amdsmi_wrapper.amdsmi_set_cpu_socket_boostlimit( - socket_handle, sock_idx, boostlimit) - ) - -def amdsmi_get_cpu_ddr_bw(socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + amdsmi_wrapper.amdsmi_get_gpu_driver_version( + processor_handle, ctypes.byref(length), version ) + ) - ddr_bw = amdsmi_wrapper.amdsmi_ddr_bw_metrics_t() - - _check_res(amdsmi_wrapper.amdsmi_get_cpu_ddr_bw(socket_handle, ddr_bw)) + return version.value.decode("utf-8") - return { - "ddr_bw_max_bw": ddr_bw.max_bw, - "ddr_bw_utilized_bw": ddr_bw.utilized_bw, - "ddr_bw_utilized_pct": ddr_bw.utilized_pct - } -def amdsmi_get_cpu_socket_temperature( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, sock_idx: int -) -> int: - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_power_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - ptmon = ctypes.c_uint32() + power_measure = amdsmi_wrapper.amdsmi_power_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_cpu_socket_temperature( - socket_handle, sock_idx, ctypes.byref(ptmon) + amdsmi_wrapper.amdsmi_get_power_info( + processor_handle, ctypes.byref(power_measure) ) ) - return ptmon.value - -def amdsmi_get_cpu_dimm_temp_range_and_refresh_rate( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, - sock_idx: int, dimm_addr: int): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - if not isinstance(dimm_addr, int): - raise AmdSmiParameterException(dimm_addr, int) - - dimm = amdsmi_wrapper.amdsmi_temp_range_refresh_rate_t() - - _check_res(amdsmi_wrapper.amdsmi_get_cpu_dimm_temp_range_and_refresh_rate(socket_handle, dimm)) - return { - "dimm_temperature_range": dimm.range, - "dimm_refresh_rate": dimm.ref_rate + "average_socket_power": power_measure.average_socket_power, + "gfx_voltage": power_measure.gfx_voltage, + 'soc_voltage': power_measure.soc_voltage, + 'mem_voltage': power_measure.mem_voltage, + "power_limit" : power_measure.power_limit, } -def amdsmi_get_cpu_dimm_power_consumption( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, - sock_idx: int, dimm_addr: int): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - if not isinstance(dimm_addr, int): - raise AmdSmiParameterException(dimm_addr, int) - - dimm = amdsmi_wrapper.amdsmi_dimm_power_t() - - _check_res(amdsmi_wrapper.amdsmi_get_cpu_dimm_power_consumption(socket_handle, dimm)) - - return { - "dimm_power_consumed": dimm.power, - "dimm_power_update_rate": dimm.update_rate, - "dimm_dimm_addr": dimm.dimm_addr - } -def amdsmi_get_cpu_dimm_thermal_sensor( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, - sock_idx: int, dimm_addr: int): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): +def amdsmi_get_fw_info( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle +) -> List[Dict[str, Any]]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(sock_idx, int): - raise AmdSmiParameterException(sock_idx, int) - if not isinstance(dimm_addr, int): - raise AmdSmiParameterException(dimm_addr, int) - - dimm_thermal = amdsmi_wrapper.amdsmi_dimm_thermal_t() - - _check_res(amdsmi_wrapper.amdsmi_get_cpu_dimm_thermal_sensor(socket_handle, dimm_thermal)) - + processor_handle, amdsmi_wrapper.amdsmi_processor_handle) + fw_info = amdsmi_wrapper.amdsmi_fw_info_t() + _check_res(amdsmi_wrapper.amdsmi_get_fw_info( + processor_handle, ctypes.byref(fw_info))) + firmwares = list() + for i in range(0, fw_info.num_fw_info): + firmwares.append({ + 'fw_name': AmdSmiFwBlock(fw_info.fw_info_list[i].fw_id), + 'fw_version': fw_info.fw_info_list[i].fw_version, + }) return { - "dimm_thermal_sensor_value": dimm_thermal.sensor, - "dimm_thermal_update_rate": dimm_thermal.update_rate, - "dimm_thermal_dimm_addr": dimm_thermal.dimm_addr, - "dimm_thermal_temperature": dimm_thermal.temp + 'fw_list': firmwares } -def amdsmi_set_cpu_xgmi_width( - socket_handle: amdsmi_wrapper.amdsmi_cpusocket_handle, min_width: int, max_width: int -): - if not isinstance(socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle): - raise AmdSmiParameterException( - socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle - ) - if not isinstance(min_width, int): - raise AmdSmiParameterException(min_width, int) - if not isinstance(max_width, int): - raise AmdSmiParameterException(max_width, int) - - min_width = ctypes.c_uint8(min_width) - max_width = ctypes.c_uint8(max_width) - - _check_res( - amdsmi_wrapper.amdsmi_set_cpu_xgmi_width( - socket_handle, min_width, max_width) - ) - -def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS): - if not isinstance(flag, AmdSmiInitFlags): - raise AmdSmiParameterException(flag, AmdSmiInitFlags) - _check_res(amdsmi_wrapper.amdsmi_init(flag)) - - -def amdsmi_shut_down(): - _check_res(amdsmi_wrapper.amdsmi_shut_down()) - -def amdsmi_get_processor_type( +def amdsmi_get_gpu_vram_usage( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> ctypes.c_uint32: +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - dev_type = amdsmi_wrapper.processor_type_t() + vram_info = amdsmi_wrapper.amdsmi_vram_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_processor_type( - processor_handle, ctypes.byref(dev_type)) + amdsmi_wrapper.amdsmi_get_gpu_vram_usage( + processor_handle, ctypes.byref(vram_info)) ) - return { - "processor_type": AmdSmiProcessorType(dev_type.value).name - } + return {"vram_total": vram_info.vram_total, "vram_used": vram_info.vram_used} -def amdsmi_get_gpu_device_bdf(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str: +def amdsmi_get_pcie_link_status( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - bdf_info = amdsmi_wrapper.amdsmi_bdf_t() + pcie_info = amdsmi_wrapper.amdsmi_pcie_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_device_bdf( - processor_handle, ctypes.byref(bdf_info)) + amdsmi_wrapper.amdsmi_get_pcie_link_status( + processor_handle, ctypes.byref(pcie_info) + ) ) - return _format_bdf(bdf_info) - + return {"pcie_speed": pcie_info.pcie_speed, + "pcie_lanes": pcie_info.pcie_lanes, + "pcie_interface_version": pcie_info.pcie_interface_version} -def amdsmi_get_gpu_asic_info( +def amdsmi_get_pcie_link_caps( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, ) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): @@ -1229,3080 +1027,1407 @@ def amdsmi_get_gpu_asic_info( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - asic_info = amdsmi_wrapper.amdsmi_asic_info_t() + pcie_info = amdsmi_wrapper.amdsmi_pcie_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_asic_info( - processor_handle, ctypes.byref(asic_info)) + amdsmi_wrapper.amdsmi_get_pcie_link_caps( + processor_handle, ctypes.byref(pcie_info)) ) - return { - "market_name": asic_info.market_name.decode("utf-8"), - "vendor_id": asic_info.vendor_id, - "vendor_name": asic_info.vendor_name.decode("utf-8"), - "subvendor_id": asic_info.subvendor_id, - "device_id": asic_info.device_id, - "rev_id": asic_info.rev_id, - "asic_serial": asic_info.asic_serial.decode("utf-8"), - "xgmi_physical_id": asic_info.xgmi_physical_id - } + return {"max_pcie_speed": pcie_info.pcie_speed, + "max_pcie_lanes": pcie_info.pcie_lanes, + "pcie_interface_version": pcie_info.pcie_interface_version} -def amdsmi_get_power_cap_info( +def amdsmi_get_processor_handle_from_bdf(bdf): + bdf = _parse_bdf(bdf) + if bdf is None: + raise AmdSmiBdfFormatException(bdf) + amdsmi_bdf = _make_amdsmi_bdf_from_list(bdf) + processor_handle = amdsmi_wrapper.amdsmi_processor_handle() + _check_res(amdsmi_wrapper.amdsmi_get_processor_handle_from_bdf( + amdsmi_bdf, ctypes.byref(processor_handle))) + return processor_handle + + +def amdsmi_get_gpu_vendor_name( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: +) -> str: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - power_info = amdsmi_wrapper.amdsmi_power_cap_info_t() + length = ctypes.c_uint64() + length.value = _AMDSMI_STRING_LENGTH + + vendor_name = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) + _check_res( - amdsmi_wrapper.amdsmi_get_power_cap_info( - processor_handle, ctypes.c_uint32(0), ctypes.byref(power_info) - ) + amdsmi_wrapper.amdsmi_get_gpu_vendor_name( + processor_handle, vendor_name, length) ) - return {"power_cap": power_info.power_cap, - "default_power_cap": power_info.default_power_cap, - "dpm_cap": power_info.dpm_cap, - "min_power_cap": power_info.min_power_cap, - "max_power_cap": power_info.max_power_cap} + return vendor_name.value.decode("utf-8") -def amdsmi_get_gpu_vram_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: +def amdsmi_get_gpu_id(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + id = ctypes.c_uint16() - vram_info = amdsmi_wrapper.amdsmi_vram_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_vram_info( - processor_handle, ctypes.byref(vram_info)) - ) + _check_res(amdsmi_wrapper.amdsmi_get_gpu_id( + processor_handle, ctypes.byref(id))) - return { - "vram_type": vram_info.vram_type, - "vram_vendor": vram_info.vram_vendor, - "vram_size_mb": vram_info.vram_size_mb, - } + return id.value -def amdsmi_get_gpu_cache_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Dict[str, Any]]: +def amdsmi_get_gpu_vram_vendor(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - cache_info = amdsmi_wrapper.amdsmi_gpu_cache_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_cache_info( - processor_handle, ctypes.byref(cache_info)) - ) + length = ctypes.c_uint32() + length.value = _AMDSMI_STRING_LENGTH - cache_info_dict = {} - for cache_index in range(cache_info.num_cache_types): - cache_size = cache_info.cache[cache_index].cache_size_kb - cache_level = cache_info.cache[cache_index].cache_level - cache_flags = cache_info.cache[cache_index].flags - data_cache = bool(cache_flags & amdsmi_wrapper.CACHE_FLAGS_DATA_CACHE) - inst_cache = bool(cache_flags & amdsmi_wrapper.CACHE_FLAGS_INST_CACHE) - cpu_cache = bool(cache_flags & amdsmi_wrapper.CACHE_FLAGS_CPU_CACHE) - simd_cache = bool(cache_flags & amdsmi_wrapper.CACHE_FLAGS_SIMD_CACHE) - cache_info_dict[f"cache {cache_index}"] = {"cache_size": cache_size, - "cache_level": cache_level, - "data_cache": data_cache, - "instruction_cache": inst_cache, - "cpu_cache": cpu_cache, - "simd_cache": simd_cache} + vram_vendor = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - if cache_info_dict == {}: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NO_DATA) + _check_res( + amdsmi_wrapper.amdsmi_get_gpu_vram_vendor( + processor_handle, vram_vendor, length) + ) - return cache_info_dict + return vram_vendor.value.decode("utf-8") -def amdsmi_get_gpu_vbios_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: +def amdsmi_get_gpu_subsystem_id(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + id = ctypes.c_uint16() - vbios_info = amdsmi_wrapper.amdsmi_vbios_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_vbios_info( - processor_handle, ctypes.byref(vbios_info)) + amdsmi_wrapper.amdsmi_get_gpu_subsystem_id( + processor_handle, ctypes.byref(id)) ) - return { - "name": vbios_info.name.decode("utf-8"), - "build_date": vbios_info.build_date.decode("utf-8"), - "part_number": vbios_info.part_number.decode("utf-8"), - "version": vbios_info.version.decode("utf-8"), - } + return id.value -def amdsmi_get_gpu_activity( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: +def amdsmi_get_gpu_subsystem_name(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - engine_usage = amdsmi_wrapper.amdsmi_engine_usage_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_activity( - processor_handle, ctypes.byref(engine_usage) - ) - ) - - return { - "gfx_activity": engine_usage.gfx_activity, - "umc_activity": engine_usage.umc_activity, - "mm_activity": engine_usage.mm_activity, - } - - -def amdsmi_get_clock_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - clock_type: AmdSmiClkType, -) -> Dict[str, int]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(clock_type, AmdSmiClkType): - raise AmdSmiParameterException(clock_type, AmdSmiClkType) - - clock_measure = amdsmi_wrapper.amdsmi_clk_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_clock_info( - processor_handle, - clock_type, - ctypes.byref(clock_measure), - ) - ) - - return { - "cur_clk": clock_measure.cur_clk, - "max_clk": clock_measure.max_clk, - "min_clk": clock_measure.min_clk, - "sleep_clk" : clock_measure.sleep_clk, - } - - -def amdsmi_get_gpu_bad_page_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Union[list, str]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - num_pages = ctypes.c_uint32() - retired_page_record = ctypes.POINTER( - amdsmi_wrapper.amdsmi_retired_page_record_t)() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_bad_page_info( - processor_handle, ctypes.byref(num_pages), retired_page_record - ) - ) - table_records = _format_bad_page_info(retired_page_record, num_pages) - if num_pages.value == 0: - return "No bad pages found." - else: - table_records = _format_bad_page_info(retired_page_record, num_pages) - - return table_records - - -def amdsmi_get_gpu_total_ecc_count( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - error_count = amdsmi_wrapper.amdsmi_error_count_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_total_ecc_count( - processor_handle, ctypes.byref(error_count) - ) - ) - - return { - "correctable_count": error_count.correctable_count, - "uncorrectable_count": error_count.uncorrectable_count, - } - - -def amdsmi_get_gpu_board_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - board_info = amdsmi_wrapper.amdsmi_board_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_board_info( - processor_handle, ctypes.byref(board_info)) - ) - - return { - "model_number": board_info.model_number.decode("utf-8").strip(), - "product_serial": board_info.product_serial.decode("utf-8").strip(), - "fru_id": board_info.fru_id.decode("utf-8").strip(), - "manufacturer_name" : board_info.manufacturer_name.decode("utf-8").strip(), - "product_name": board_info.product_name.decode("utf-8").strip() - } - - -def amdsmi_get_gpu_ras_feature_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - ras_feature = amdsmi_wrapper.amdsmi_ras_feature_t() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_ras_feature_info( - processor_handle, ctypes.byref(ras_feature) - ) - ) - - return { - "eeprom_version": hex(ras_feature.ras_eeprom_version), - "parity_schema" : bool(ras_feature.ecc_correction_schema_flag & 1), - "single_bit_schema" : bool(ras_feature.ecc_correction_schema_flag & 2), - "double_bit_schema" : bool(ras_feature.ecc_correction_schema_flag & 4), - "poison_schema" : bool(ras_feature.ecc_correction_schema_flag & 8) - } - - -def amdsmi_get_gpu_ras_block_features_enabled( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[Dict[str, Any]]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - ras_state = amdsmi_wrapper.amdsmi_ras_err_state_t() - ras_states = [] - for gpu_block in AmdSmiGpuBlock: - if gpu_block.name == "RESERVED" or gpu_block.name == "INVALID": - continue - if gpu_block.name == "LAST": - gpu_block.name = "FUSE" - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_ras_block_features_enabled( - processor_handle, - amdsmi_wrapper.amdsmi_gpu_block_t(gpu_block.value), - ctypes.byref(ras_state), - ) - ) - ras_states.append( - { - "block": gpu_block.name, - "status": AmdSmiRasErrState(ras_state.value).name, - } - ) - - return ras_states - - -def amdsmi_get_gpu_process_list( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[amdsmi_wrapper.amdsmi_process_handle_t]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - max_processes = ctypes.c_uint32(MAX_NUM_PROCESSES) - - process_list = (amdsmi_wrapper.amdsmi_process_handle_t * - max_processes.value)() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_process_list( - processor_handle, ctypes.byref(max_processes), process_list - ) - ) - - return [amdsmi_wrapper.amdsmi_process_handle_t(process_list[x])\ - for x in range(0, max_processes.value)] - - -def amdsmi_get_gpu_process_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - process: amdsmi_wrapper.amdsmi_process_handle_t, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(process, amdsmi_wrapper.amdsmi_process_handle_t): - raise AmdSmiParameterException( - process, amdsmi_wrapper.amdsmi_process_handle_t) - - info = amdsmi_wrapper.amdsmi_proc_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_process_info( - processor_handle, process, ctypes.byref(info) - ) - ) - - return { - "name": info.name.decode("utf-8"), - "pid": info.pid, - "mem": info.mem, - "engine_usage": { - "gfx": info.engine_usage.gfx, - "enc": info.engine_usage.enc - }, - "memory_usage": { - "gtt_mem": info.memory_usage.gtt_mem, - "cpu_mem": info.memory_usage.cpu_mem, - "vram_mem": info.memory_usage.vram_mem, - }, - } - - -def amdsmi_get_gpu_device_uuid(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - uuid = ctypes.create_string_buffer(_AMDSMI_GPU_UUID_SIZE) - - uuid_length = ctypes.c_uint32() - uuid_length.value = _AMDSMI_GPU_UUID_SIZE - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_device_uuid( - processor_handle, ctypes.byref(uuid_length), uuid - ) - ) - - return uuid.value.decode("utf-8") - - -def amdsmi_get_gpu_driver_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - length = ctypes.c_int() - length.value = _AMDSMI_MAX_DRIVER_VERSION_LENGTH - - version = ctypes.create_string_buffer(_AMDSMI_MAX_DRIVER_VERSION_LENGTH) - - info = amdsmi_wrapper.amdsmi_driver_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_driver_info( - processor_handle, ctypes.byref(info) - ) - ) - - return { - "driver_name": info.driver_name.decode("utf-8"), - "driver_version": info.driver_version.decode("utf-8"), - "driver_date": info.driver_date.decode("utf-8") - } - - -def amdsmi_get_power_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, ctypes.c_uint32]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - power_measure = amdsmi_wrapper.amdsmi_power_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_power_info( - processor_handle, ctypes.byref(power_measure) - ) - ) - - return { - "current_socket_power": power_measure.current_socket_power, - "average_socket_power": power_measure.average_socket_power, - "gfx_voltage": power_measure.gfx_voltage, - "soc_voltage": power_measure.soc_voltage, - "mem_voltage": power_measure.mem_voltage, - "power_limit" : power_measure.power_limit, - } - - -def amdsmi_is_gpu_power_management_enabled( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle - ) -> bool: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException(processor_handle, amdsmi_wrapper.amdsmi_processor_handle) - - is_power_management_enabled = ctypes.c_bool() - _check_res( - amdsmi_wrapper.amdsmi_is_gpu_power_management_enabled( - processor_handle, ctypes.byref(is_power_management_enabled) - ) - ) - - return is_power_management_enabled.value - - -def amdsmi_get_fw_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle -) -> List[Dict[str, Any]]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle) - fw_info = amdsmi_wrapper.amdsmi_fw_info_t() - _check_res(amdsmi_wrapper.amdsmi_get_fw_info( - processor_handle, ctypes.byref(fw_info))) - - hex_format_fw = [AmdSmiFwBlock.FW_ID_PSP_SOSDRV, - AmdSmiFwBlock.FW_ID_TA_RAS, - AmdSmiFwBlock.FW_ID_TA_XGMI, - AmdSmiFwBlock.FW_ID_UVD, - AmdSmiFwBlock.FW_ID_VCE, - AmdSmiFwBlock.FW_ID_VCN] - - dec_format_fw = [AmdSmiFwBlock.FW_ID_PM] - - firmwares = [] - for i in range(0, fw_info.num_fw_info): - fw_name = AmdSmiFwBlock(fw_info.fw_info_list[i].fw_id) - fw_version = fw_info.fw_info_list[i].fw_version - - if fw_name in hex_format_fw: - fw_version_string = ".".join(re.findall('..?', hex(fw_version)[2:])) - elif fw_name in dec_format_fw: - # Convert every two hex digits to decimal and join them with a dot - dec_version_string = '' - for ver1,ver2 in zip(hex(fw_version)[2::2], hex(fw_version)[3::2]): - dec_version_string += str(int(f"0x{ver1}{ver2}", 0)) + "." - fw_version_string = dec_version_string.strip('.') - else: - fw_version_string = str(fw_version) - - firmwares.append({ - 'fw_name': fw_name, - 'fw_version': fw_version_string.upper(), - }) - return { - 'fw_list': firmwares - } - - -def amdsmi_get_gpu_vram_usage( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - vram_info = amdsmi_wrapper.amdsmi_vram_usage_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_vram_usage( - processor_handle, ctypes.byref(vram_info)) - ) - - return {"vram_total": vram_info.vram_total, "vram_used": vram_info.vram_used} - - -def amdsmi_get_pcie_link_status( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - pcie_info = amdsmi_wrapper.amdsmi_pcie_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_pcie_link_status( - processor_handle, ctypes.byref(pcie_info) - ) - ) - - return {"pcie_speed": pcie_info.pcie_speed, - "pcie_lanes": pcie_info.pcie_lanes, - "pcie_interface_version": pcie_info.pcie_interface_version, - "pcie_slot_type": pcie_info.pcie_slot_type} - -def amdsmi_get_pcie_link_caps( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - pcie_info = amdsmi_wrapper.amdsmi_pcie_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_pcie_link_caps( - processor_handle, ctypes.byref(pcie_info)) - ) - - return {"max_pcie_speed": pcie_info.pcie_speed, - "max_pcie_lanes": pcie_info.pcie_lanes, - "pcie_interface_version": pcie_info.pcie_interface_version, - "pcie_slot_type": pcie_info.pcie_slot_type} - - -def amdsmi_get_processor_handle_from_bdf(bdf): - bdf = _parse_bdf(bdf) - if bdf is None: - raise AmdSmiBdfFormatException(bdf) - amdsmi_bdf = _make_amdsmi_bdf_from_list(bdf) - processor_handle = amdsmi_wrapper.amdsmi_processor_handle() - _check_res(amdsmi_wrapper.amdsmi_get_processor_handle_from_bdf( - amdsmi_bdf, ctypes.byref(processor_handle))) - return processor_handle - - -def amdsmi_get_gpu_vendor_name( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> str: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - length = ctypes.c_uint64() - length.value = _AMDSMI_STRING_LENGTH - - vendor_name = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_vendor_name( - processor_handle, vendor_name, length) - ) - - return vendor_name.value.decode("utf-8") - - -def amdsmi_get_gpu_id(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - id = ctypes.c_uint16() - - _check_res(amdsmi_wrapper.amdsmi_get_gpu_id( - processor_handle, ctypes.byref(id))) - - return id.value - - -def amdsmi_get_gpu_vram_vendor(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - length = ctypes.c_uint32() - length.value = _AMDSMI_STRING_LENGTH - - vram_vendor = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_vram_vendor( - processor_handle, vram_vendor, length) - ) - - return vram_vendor.value.decode("utf-8") - - -def amdsmi_get_gpu_subsystem_id(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - id = ctypes.c_uint16() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_subsystem_id( - processor_handle, ctypes.byref(id)) - ) - - return id.value - - -def amdsmi_get_gpu_subsystem_name(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - length = ctypes.c_uint64() - length.value = _AMDSMI_STRING_LENGTH - - name = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_subsystem_name( - processor_handle, name, length) - ) - - return name.value.decode("utf-8") - - -def amdsmi_get_lib_version(): - version = amdsmi_wrapper.amdsmi_version_t() - - _check_res(amdsmi_wrapper.amdsmi_get_lib_version(ctypes.byref(version))) - - return { - "year": version.year, - "major": version.major, - "minor": version.minor, - "release": version.release, - "build": version.build.contents.value.decode("utf-8") - } - - -def amdsmi_topo_get_numa_node_number( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - numa_node_number = ctypes.c_uint32() - - _check_res( - amdsmi_wrapper.amdsmi_topo_get_numa_node_number( - processor_handle, ctypes.byref(numa_node_number) - ) - ) - - return numa_node_number.value - - -def amdsmi_topo_get_link_weight( - processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, - processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, -): - if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle - ) - - weight = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_topo_get_link_weight( - processor_handle_src, processor_handle_dst, ctypes.byref(weight) - ) - ) - - return weight.value - - -def amdsmi_get_minmax_bandwidth_between_processors( - processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, - processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, -): - if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle - ) - - min_bandwidth = ctypes.c_uint64() - max_bandwidth = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_get_minmax_bandwidth_between_processors( - processor_handle_src, - processor_handle_dst, - ctypes.byref(min_bandwidth), - ctypes.byref(max_bandwidth), - ) - ) - - return {"min_bandwidth": min_bandwidth.value, "max_bandwidth": max_bandwidth.value} - - -def amdsmi_topo_get_link_type( - processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, - processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, -): - if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle - ) - - hops = ctypes.c_uint64() - #type = AmdSmiIoLinkType() - type = ctypes.c_uint32() - - _check_res( - amdsmi_wrapper.amdsmi_topo_get_link_type( - #processor_handle_src, processor_handle_dst, ctypes.byref(hops), type - processor_handle_src, processor_handle_dst, ctypes.byref( - hops), ctypes.byref(type) - ) - ) - - return {"hops": hops.value, "type": type.value} - - -def amdsmi_is_P2P_accessible( - processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, - processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, -): - if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle - ) - - accessible = ctypes.c_bool() - - _check_res( - amdsmi_wrapper.amdsmi_is_P2P_accessible( - processor_handle_src, processor_handle_dst, ctypes.byref(accessible) - ) - ) - - return accessible.value - - -def amdsmi_get_gpu_compute_partition(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - length = ctypes.c_uint32() - length.value = _AMDSMI_STRING_LENGTH - - compute_partition = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_compute_partition( - processor_handle, compute_partition, length - ) - ) - - return compute_partition.value.decode("utf-8") - - -def amdsmi_set_gpu_compute_partition(processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - compute_partition: AmdSmiComputePartitionType): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(compute_partition, AmdSmiComputePartitionType): - raise AmdSmiParameterException(compute_partition, AmdSmiComputePartitionType) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_compute_partition( - processor_handle, compute_partition - ) - ) - - -def amdsmi_reset_gpu_compute_partition(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - _check_res(amdsmi_wrapper.amdsmi_reset_gpu_compute_partition(processor_handle)) - - -def amdsmi_get_gpu_memory_partition(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - length = ctypes.c_uint32() - length.value = _AMDSMI_STRING_LENGTH - - memory_partition = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_memory_partition( - processor_handle, memory_partition, length - ) - ) - - return memory_partition.value.decode("utf-8") - - -def amdsmi_set_gpu_memory_partition(processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - memory_partition: AmdSmiMemoryPartitionType): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(memory_partition, AmdSmiMemoryPartitionType): - raise AmdSmiParameterException(memory_partition, AmdSmiMemoryPartitionType) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_memory_partition( - processor_handle, memory_partition - ) - ) - - -def amdsmi_reset_gpu_memory_partition(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - _check_res(amdsmi_wrapper.amdsmi_reset_gpu_memory_partition(processor_handle)) - - -def amdsmi_get_xgmi_info(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - xgmi_info = amdsmi_wrapper.amdsmi_xgmi_info_t() - - _check_res(amdsmi_wrapper.amdsmi_get_xgmi_info(processor_handle, xgmi_info)) - - return { - "xgmi_lanes": xgmi_info.xgmi_lanes, - "xgmi_hive_id": xgmi_info.xgmi_hive_id, - "xgmi_node_id": xgmi_info.xgmi_node_id, - "index": xgmi_info.index, - } - - -def amdsmi_gpu_counter_group_supported( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - event_group: AmdSmiEventGroup, -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(event_group, AmdSmiEventGroup): - raise AmdSmiParameterException(event_group, AmdSmiEventGroup) - - _check_res( - amdsmi_wrapper.amdsmi_gpu_counter_group_supported( - processor_handle, event_group) - ) - - -def amdsmi_gpu_create_counter( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - event_type: AmdSmiEventType, -) -> amdsmi_wrapper.amdsmi_event_handle_t: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(event_type, AmdSmiEventType): - raise AmdSmiParameterException(event_type, AmdSmiEventType) - - event_handle = amdsmi_wrapper.amdsmi_event_handle_t() - _check_res( - amdsmi_wrapper.amdsmi_gpu_create_counter( - processor_handle, event_type, ctypes.byref(event_handle) - ) - ) - - return event_handle - - -def amdsmi_gpu_destroy_counter(event_handle: amdsmi_wrapper.amdsmi_event_handle_t): - if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t): - raise AmdSmiParameterException( - event_handle, amdsmi_wrapper.amdsmi_event_handle_t - ) - _check_res(amdsmi_wrapper.amdsmi_gpu_destroy_counter(event_handle)) - - -def amdsmi_gpu_control_counter( - event_handle: amdsmi_wrapper.amdsmi_event_handle_t, - counter_command: AmdSmiCounterCommand, -): - if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t): - raise AmdSmiParameterException( - event_handle, amdsmi_wrapper.amdsmi_event_handle_t - ) - if not isinstance(counter_command, AmdSmiCounterCommand): - raise AmdSmiParameterException(counter_command, AmdSmiCounterCommand) - command_args = ctypes.c_void_p() - - _check_res( - amdsmi_wrapper.amdsmi_gpu_control_counter( - event_handle, counter_command, command_args - ) - ) - - -def amdsmi_gpu_read_counter( - event_handle: amdsmi_wrapper.amdsmi_event_handle_t, -) -> Dict[str, Any]: - if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t): - raise AmdSmiParameterException( - event_handle, amdsmi_wrapper.amdsmi_event_handle_t - ) - - counter_value = amdsmi_wrapper.amdsmi_counter_value_t() - - _check_res( - amdsmi_wrapper.amdsmi_gpu_read_counter( - event_handle, ctypes.byref(counter_value)) - ) - - return { - "value": counter_value.value, - "time_enabled": counter_value.time_enabled, - "time_running": counter_value.time_running, - } - - -def amdsmi_get_gpu_available_counters( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - event_group: AmdSmiEventGroup, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(event_group, AmdSmiEventGroup): - raise AmdSmiParameterException(event_group, AmdSmiEventGroup) - available = ctypes.c_uint32() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_available_counters( - processor_handle, event_group, ctypes.byref(available) - ) - ) - - return available.value - - -def amdsmi_set_gpu_perf_level( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - perf_level: AmdSmiDevPerfLevel, -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(perf_level, AmdSmiDevPerfLevel): - raise AmdSmiParameterException(perf_level, AmdSmiDevPerfLevel) - - _check_res(amdsmi_wrapper.amdsmi_set_gpu_perf_level( - processor_handle, perf_level)) - - -def amdsmi_reset_gpu(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - _check_res(amdsmi_wrapper.amdsmi_reset_gpu(processor_handle)) - - -def amdsmi_set_gpu_fan_speed( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int, fan_speed: int -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) - if not isinstance(fan_speed, int): - raise AmdSmiParameterException(fan_speed, int) - sensor_idx = ctypes.c_uint32(sensor_idx) - fan_speed = ctypes.c_uint64(fan_speed) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_fan_speed( - processor_handle, sensor_idx, fan_speed) - ) - - -def amdsmi_reset_gpu_fan( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) - sensor_idx = ctypes.c_uint32(sensor_idx) - - _check_res(amdsmi_wrapper.amdsmi_reset_gpu_fan(processor_handle, sensor_idx)) - - -def amdsmi_set_clk_freq( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - clk_type: AmdSmiClkType, - freq_bitmask: int, -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(clk_type, AmdSmiClkType): - raise AmdSmiParameterException(clk_type, AmdSmiParameterException) - if not isinstance(freq_bitmask, int): - raise AmdSmiParameterException(freq_bitmask, int) - freq_bitmask = ctypes.c_uint64(freq_bitmask) - _check_res( - amdsmi_wrapper.amdsmi_set_clk_freq( - processor_handle, clk_type, freq_bitmask - ) - ) - - -def amdsmi_set_gpu_overdrive_level( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, overdrive_value: int -): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(overdrive_value, int): - raise AmdSmiParameterException(overdrive_value, int) - overdrive_value = ctypes.c_uint32(overdrive_value) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_overdrive_level( - processor_handle, overdrive_value) - ) - - -def amdsmi_get_gpu_bdf_id(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - bdfid = ctypes.c_uint64() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_bdf_id( - processor_handle, ctypes.byref(bdfid)) - ) - - return bdfid.value - -def amdsmi_set_gpu_pci_bandwidth( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, bitmask: int -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(bitmask, int): - raise AmdSmiParameterException(bitmask, int) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_pci_bandwidth( - processor_handle, ctypes.c_uint64(bitmask) - ) - ) - - -def _format_transfer_rate(transfer_rate): - return { - 'num_supported': transfer_rate.num_supported, - 'current': transfer_rate.current, - 'frequency': list(transfer_rate.frequency) - } - - -def amdsmi_get_gpu_pci_bandwidth(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - bandwidth = amdsmi_wrapper.amdsmi_pcie_bandwidth_t() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_pci_bandwidth( - processor_handle, ctypes.byref(bandwidth)) - ) - - transfer_rate = _format_transfer_rate(bandwidth.transfer_rate) - - return { - 'transfer_rate': transfer_rate, - 'lanes': list(bandwidth.lanes) - } - - -def amdsmi_get_gpu_pci_throughput(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - sent = ctypes.c_uint64() - received = ctypes.c_uint64() - max_pkt_sz = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_pci_throughput(processor_handle, ctypes.byref( - sent), ctypes.byref(received), ctypes.byref(max_pkt_sz)) - ) - - return { - 'sent': sent.value, - 'received': received.value, - 'max_pkt_sz': max_pkt_sz.value - } - - -def amdsmi_get_gpu_pci_replay_counter(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - counter = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_pci_replay_counter( - processor_handle, ctypes.byref(counter)) - ) - - return counter.value - - -def amdsmi_get_gpu_topo_numa_affinity(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - numa_node = ctypes.c_int32() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_topo_numa_affinity( - processor_handle, ctypes.byref(numa_node)) - ) - - return numa_node.value - - -def amdsmi_set_power_cap( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_ind: int, cap: int -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(sensor_ind, int): - raise AmdSmiParameterException(sensor_ind, int) - - if not isinstance(cap, int): - raise AmdSmiParameterException(cap, int) - - _check_res( - amdsmi_wrapper.amdsmi_set_power_cap( - processor_handle, ctypes.c_uint32(sensor_ind), ctypes.c_uint64(cap) - ) - ) - - -def amdsmi_set_gpu_power_profile( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - reserved: int, - profile: AmdSmiPowerProfilePresetMasks, -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(reserved, int): - raise AmdSmiParameterException(reserved, int) - - if not isinstance(profile, AmdSmiPowerProfilePresetMasks): - raise AmdSmiParameterException(profile, AmdSmiPowerProfilePresetMasks) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_power_profile( - processor_handle, ctypes.c_uint32(reserved), profile - ) - ) - - -def amdsmi_get_energy_count(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - power = ctypes.c_uint64() - counter_resolution = ctypes.c_float() - timestamp = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_get_energy_count(processor_handle, ctypes.byref( - power), ctypes.byref(counter_resolution), ctypes.byref(timestamp)) - ) - - return { - 'power': power.value, - 'counter_resolution': counter_resolution.value, - 'timestamp': timestamp.value, - } - - -def amdsmi_set_gpu_clk_range( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - min_clk_value: int, - max_clk_value: int, - clk_type: AmdSmiClkType, -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(min_clk_value, int): - raise AmdSmiParameterException(min_clk_value, int) - - if not isinstance(max_clk_value, int): - raise AmdSmiParameterException(min_clk_value, int) - - if not isinstance(clk_type, AmdSmiClkType): - raise AmdSmiParameterException(clk_type, AmdSmiClkType) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_clk_range( - processor_handle, - ctypes.c_uint64(min_clk_value), - ctypes.c_uint64(max_clk_value), - clk_type, - ) - ) - - -def amdsmi_get_gpu_memory_total(processor_handle: amdsmi_wrapper.amdsmi_processor_handle, mem_type: AmdSmiMemoryType): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(mem_type, AmdSmiMemoryType): - raise AmdSmiParameterException( - mem_type, AmdSmiMemoryType - ) - - total = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_memory_total( - processor_handle, mem_type, ctypes.byref(total)) - ) - - return total.value - - -def amdsmi_set_gpu_od_clk_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - level: AmdSmiFreqInd, - value: int, - clk_type: AmdSmiClkType, -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(level, AmdSmiFreqInd): - raise AmdSmiParameterException(level, AmdSmiFreqInd) - - if not isinstance(value, int): - raise AmdSmiParameterException(value, int) - - if not isinstance(clk_type, AmdSmiClkType): - raise AmdSmiParameterException(clk_type, AmdSmiClkType) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_od_clk_info( - processor_handle, level, ctypes.c_uint64(value), clk_type - ) - ) - - -def amdsmi_get_gpu_memory_usage(processor_handle: amdsmi_wrapper.amdsmi_processor_handle, mem_type: AmdSmiMemoryType): - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(mem_type, AmdSmiMemoryType): - raise AmdSmiParameterException( - mem_type, AmdSmiMemoryType - ) - - used = ctypes.c_uint64() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_memory_usage( - processor_handle, mem_type, ctypes.byref(used)) - ) - - return used.value - - -def amdsmi_set_gpu_od_volt_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - vpoint: int, - clk_value: int, - volt_value: int, -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(vpoint, int): - raise AmdSmiParameterException(vpoint, int) - - if not isinstance(clk_value, int): - raise AmdSmiParameterException(clk_value, int) - - if not isinstance(volt_value, int): - raise AmdSmiParameterException(volt_value, int) - - _check_res( - amdsmi_wrapper.amdsmi_set_gpu_od_volt_info( - processor_handle, - ctypes.c_uint32(vpoint), - ctypes.c_uint64(clk_value), - ctypes.c_uint64(volt_value), - ) - ) - - - -def amdsmi_get_gpu_fan_rpms( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) - fan_speed = ctypes.c_int64() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_fan_rpms( - processor_handle, sensor_idx, ctypes.byref(fan_speed) - ) - ) - - return fan_speed.value - - -def amdsmi_get_gpu_fan_speed( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) - fan_speed = ctypes.c_int64() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_fan_speed( - processor_handle, sensor_idx, ctypes.byref(fan_speed) - ) - ) - - return fan_speed.value - - -def amdsmi_get_gpu_fan_speed_max( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) - fan_speed = ctypes.c_uint64() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_fan_speed_max( - processor_handle, sensor_idx, ctypes.byref(fan_speed) - ) - ) - - return fan_speed.value - - -def amdsmi_get_temp_metric( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - sensor_type: AmdSmiTemperatureType, - metric: AmdSmiTemperatureMetric, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_type, AmdSmiTemperatureType): - raise AmdSmiParameterException(sensor_type, AmdSmiTemperatureType) - if not isinstance(metric, AmdSmiTemperatureMetric): - raise AmdSmiParameterException(metric, AmdSmiTemperatureMetric) - - temp_value = ctypes.c_int64() - _check_res( - amdsmi_wrapper.amdsmi_get_temp_metric( - processor_handle, sensor_type, metric, ctypes.byref(temp_value) - ) - ) - - return temp_value.value - - -def amdsmi_get_gpu_volt_metric( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - sensor_type: AmdSmiVoltageType, - metric: AmdSmiVoltageMetric, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_type, AmdSmiVoltageType): - raise AmdSmiParameterException(sensor_type, AmdSmiVoltageType) - if not isinstance(metric, AmdSmiVoltageMetric): - raise AmdSmiParameterException(metric, AmdSmiVoltageMetric) - - voltage = ctypes.c_int64() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_volt_metric( - processor_handle, sensor_type, metric, ctypes.byref(voltage) - ) - ) - - return voltage.value - - - -def amdsmi_get_utilization_count( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - *counter_types: Tuple[AmdSmiUtilizationCounterType] -) -> List[Dict[str, Any]]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not len(counter_types): - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_INVAL) - counters = [] - for counter_type in counter_types: - if not isinstance(counter_type, AmdSmiUtilizationCounterType): - raise AmdSmiParameterException( - counter_type, AmdSmiUtilizationCounterType) - counter = amdsmi_wrapper.amdsmi_utilization_counter_t() - counter.type = counter_type - counters.append(counter) - - count = ctypes.c_uint32(len(counters)) - timestamp = ctypes.c_uint64() - util_counter_list = (amdsmi_wrapper.amdsmi_utilization_counter_t * len(counters))( - *counters - ) - - _check_res( - amdsmi_wrapper.amdsmi_get_utilization_count( - processor_handle, util_counter_list, count, ctypes.byref(timestamp) - ) - ) - if count.value != len(counters): - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_API_FAILED) - - result = [{"timestamp": timestamp.value}] - for idx in range(count.value): - counter_type = amdsmi_wrapper.AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues[ - util_counter_list[idx].type - ] - if counter_type == "AMDSMI_UTILIZATION_COUNTER_LAST": - counter_type = "AMDSMI_COARSE_GRAIN_MEM_ACTIVITY" - result.append( - {"type": counter_type, "value": util_counter_list[idx].value}) - - return result - - -def amdsmi_get_gpu_perf_level( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> str: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - perf = amdsmi_wrapper.amdsmi_dev_perf_level_t() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_perf_level( - processor_handle, ctypes.byref(perf)) - ) - - result = amdsmi_wrapper.amdsmi_dev_perf_level_t__enumvalues[perf.value] - if result == "AMDSMI_DEV_PERF_LEVEL_FIRST": - result = "AMDSMI_DEV_PERF_LEVEL_AUTO" - if result == "AMDSMI_DEV_PERF_LEVEL_LAST": - result = "AMDSMI_DEV_PERF_LEVEL_DETERMINISM" - - return result - - -def amdsmi_set_gpu_perf_determinism_mode( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, clkvalue: int -) -> None: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(clkvalue, int): - raise AmdSmiParameterException(clkvalue, int) - - _check_res(amdsmi_wrapper.amdsmi_set_gpu_perf_determinism_mode( - processor_handle, clkvalue)) - - -def amdsmi_get_gpu_overdrive_level( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - od_level = ctypes.c_uint32() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_overdrive_level( - processor_handle, ctypes.byref(od_level) - ) - ) - - return od_level.value - - -def amdsmi_get_clk_freq( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, clk_type: AmdSmiClkType -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(clk_type, AmdSmiClkType): - raise AmdSmiParameterException(clk_type, AmdSmiClkType) - - freq = amdsmi_wrapper.amdsmi_frequencies_t() - _check_res( - amdsmi_wrapper.amdsmi_get_clk_freq( - processor_handle, clk_type, ctypes.byref(freq) - ) - ) - - return { - "num_supported": freq.num_supported, - "current": freq.current, - "frequency": list(freq.frequency)[: freq.num_supported - 1], - } - - -def amdsmi_get_gpu_od_volt_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - freq_data = amdsmi_wrapper.amdsmi_od_volt_freq_data_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_od_volt_info( - processor_handle, ctypes.byref(freq_data) - ) - ) - - return { - "curr_sclk_range": { - "lower_bound": freq_data.curr_sclk_range.lower_bound, - "upper_bound": freq_data.curr_sclk_range.upper_bound, - }, - "curr_mclk_range": { - "lower_bound": freq_data.curr_mclk_range.lower_bound, - "upper_bound": freq_data.curr_mclk_range.upper_bound, - }, - "sclk_freq_limits": { - "lower_bound": freq_data.sclk_freq_limits.lower_bound, - "upper_bound": freq_data.sclk_freq_limits.upper_bound, - }, - "mclk_freq_limits": { - "lower_bound": freq_data.mclk_freq_limits.lower_bound, - "upper_bound": freq_data.mclk_freq_limits.upper_bound, - }, - "curve.vc_points": list(freq_data.curve.vc_points), - "num_regions": freq_data.num_regions, - } - - -def amdsmi_get_gpu_metrics_info( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - gpu_metrics = amdsmi_wrapper.amdsmi_gpu_metrics_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_info( - processor_handle, ctypes.byref(gpu_metrics) - ) - ) - - return { - "temperature_edge": gpu_metrics.temperature_edge, - "temperature_hotspot": gpu_metrics.temperature_hotspot, - "temperature_mem": gpu_metrics.temperature_mem, - "temperature_vrgfx": gpu_metrics.temperature_vrgfx, - "temperature_vrsoc": gpu_metrics.temperature_vrsoc, - "temperature_vrmem": gpu_metrics.temperature_vrmem, - "average_gfx_activity": gpu_metrics.average_gfx_activity, - "average_umc_activity": gpu_metrics.average_umc_activity, - "average_mm_activity": gpu_metrics.average_mm_activity, - "average_socket_power": gpu_metrics.average_socket_power, - "energy_accumulator": gpu_metrics.energy_accumulator, - "system_clock_counter": gpu_metrics.system_clock_counter, - "average_gfxclk_frequency": gpu_metrics.average_gfxclk_frequency, - "average_socclk_frequency": gpu_metrics.average_socclk_frequency, - "average_uclk_frequency": gpu_metrics.average_uclk_frequency, - "average_vclk0_frequency": gpu_metrics.average_vclk0_frequency, - "average_dclk0_frequency": gpu_metrics.average_dclk0_frequency, - "average_vclk1_frequency": gpu_metrics.average_vclk1_frequency, - "average_dclk1_frequency": gpu_metrics.average_dclk1_frequency, - "current_gfxclk": gpu_metrics.current_gfxclk, - "current_socclk": gpu_metrics.current_socclk, - "current_uclk": gpu_metrics.current_uclk, - "current_vclk0": gpu_metrics.current_vclk0, - "current_dclk0": gpu_metrics.current_dclk0, - "current_vclk1": gpu_metrics.current_vclk1, - "current_dclk1": gpu_metrics.current_dclk1, - "throttle_status": gpu_metrics.throttle_status, - "current_fan_speed": gpu_metrics.current_fan_speed, - "pcie_link_width": gpu_metrics.pcie_link_width, - "pcie_link_speed": gpu_metrics.pcie_link_speed, - "gfx_activity_acc": gpu_metrics.gfx_activity_acc, - "mem_activity_acc": gpu_metrics.mem_activity_acc, - "temperature_hbm": list(gpu_metrics.temperature_hbm), - "firmware_timestamp": gpu_metrics.firmware_timestamp, - "voltage_soc": gpu_metrics.voltage_soc, - "voltage_gfx": gpu_metrics.voltage_gfx, - "voltage_mem": gpu_metrics.voltage_mem, - "indep_throttle_status": gpu_metrics.indep_throttle_status, - "current_socket_power": gpu_metrics.current_socket_power, - "vcn_activity": list(gpu_metrics.vcn_activity), - "gfxclk_lock_status": gpu_metrics.gfxclk_lock_status, - "xgmi_link_width": gpu_metrics.xgmi_link_width, - "xgmi_link_speed": gpu_metrics.xgmi_link_speed, - "pcie_bandwidth_acc": gpu_metrics.pcie_bandwidth_acc, - "pcie_bandwidth_inst": gpu_metrics.pcie_bandwidth_inst, - "pcie_l0_to_recov_count_acc": gpu_metrics.pcie_l0_to_recov_count_acc, - "pcie_replay_count_acc": gpu_metrics.pcie_replay_count_acc, - "pcie_replay_rover_count_acc": gpu_metrics.pcie_replay_rover_count_acc, - "xgmi_read_data_acc": list(gpu_metrics.xgmi_read_data_acc), - "xgmi_write_data_acc": list(gpu_metrics.xgmi_write_data_acc), - "current_gfxclks": list(gpu_metrics.current_gfxclks), - "current_socclks": list(gpu_metrics.current_socclks), - "current_vclk0s": list(gpu_metrics.current_vclk0s), - "current_dclk0s": list(gpu_metrics.current_dclk0s), - } - - -def amdsmi_get_gpu_od_volt_curve_regions( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, num_regions: int -) -> List[Dict[str, Any]]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(num_regions, int): - raise AmdSmiParameterException(num_regions, int) - - region_count = ctypes.c_uint32(num_regions) - buffer = (amdsmi_wrapper.amdsmi_freq_volt_region_t * num_regions)() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_od_volt_curve_regions( - processor_handle, ctypes.byref(region_count), buffer - ) - ) - - result = [] - - for idx in range(region_count.value): - result.extend( - [ - { - "freq_range": { - "lower_bound": buffer[idx].freq_range.lower_bound, - "upper_bound": buffer[idx].freq_range.upper_bound, - }, - "volt_range": { - "lower_bound": buffer[idx].volt_range.lower_bound, - "upper_bound": buffer[idx].volt_range.upper_bound, - }, - } - ] - ) - - return result - + length = ctypes.c_uint64() + length.value = _AMDSMI_STRING_LENGTH -def amdsmi_get_gpu_power_profile_presets( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int -) -> Dict[str, Any]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - if not isinstance(sensor_idx, int): - raise AmdSmiParameterException(sensor_idx, int) + name = ctypes.create_string_buffer(_AMDSMI_STRING_LENGTH) - status = amdsmi_wrapper.amdsmi_power_profile_status_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_power_profile_presets( - processor_handle, sensor_idx, ctypes.byref(status) - ) + amdsmi_wrapper.amdsmi_get_gpu_subsystem_name( + processor_handle, name, length) ) - return { - "available_profiles": status.available_profiles, - "current": status.current, - "num_profiles": status.num_profiles, - } - - -def amdsmi_get_gpu_ecc_count( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, block: AmdSmiGpuBlock -) -> Dict[str, int]: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - if not isinstance(block, AmdSmiGpuBlock): - raise AmdSmiParameterException(block, AmdSmiGpuBlock) + return name.value.decode("utf-8") - ec = amdsmi_wrapper.amdsmi_error_count_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_ecc_count( - processor_handle, block, ctypes.byref(ec)) - ) + +def amdsmi_get_lib_version(): + version = amdsmi_wrapper.amdsmi_version_t() + + _check_res(amdsmi_wrapper.amdsmi_get_lib_version(ctypes.byref(version))) return { - "correctable_count": ec.correctable_count, - "uncorrectable_count": ec.uncorrectable_count, + "year": version.year, + "major": version.major, + "minor": version.minor, + "release": version.release, + "build": version.build.contents.value.decode("utf-8") } -def amdsmi_get_gpu_ecc_enabled( +def amdsmi_topo_get_numa_node_number( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - blocks = ctypes.c_uint64(0) + numa_node_number = ctypes.c_uint32() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_ecc_enabled( - processor_handle, ctypes.byref(blocks)) + amdsmi_wrapper.amdsmi_topo_get_numa_node_number( + processor_handle, ctypes.byref(numa_node_number) + ) ) - return blocks.value + return numa_node_number.value -def amdsmi_get_gpu_ecc_status( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, block: AmdSmiGpuBlock -) -> AmdSmiRasErrState: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): +def amdsmi_topo_get_link_weight( + processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, + processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, +): + if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(block, AmdSmiGpuBlock): - raise AmdSmiParameterException(block, AmdSmiGpuBlock) + if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle + ) + + weight = ctypes.c_uint64() - state = amdsmi_wrapper.amdsmi_ras_err_state_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_ecc_status( - processor_handle, block, ctypes.byref(state) + amdsmi_wrapper.amdsmi_topo_get_link_weight( + processor_handle_src, processor_handle_dst, ctypes.byref(weight) ) ) - return AmdSmiRasErrState(state.value) - - -def amdsmi_status_code_to_string(status: amdsmi_wrapper.amdsmi_status_t) -> str: - if not isinstance(status, amdsmi_wrapper.amdsmi_status_t): - raise AmdSmiParameterException(status, amdsmi_wrapper.amdsmi_status_t) - - status_string_p_p = ctypes.pointer(ctypes.pointer(ctypes.c_char())) + return weight.value - _check_res(amdsmi_wrapper.amdsmi_status_code_to_string( - status, status_string_p_p)) - return amdsmi_wrapper.string_cast(status_string_p_p.contents) +def amdsmi_get_minmax_bandwith_between_processors( + processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, + processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, +): + if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle + ) + if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle + ) -def amdsmi_get_gpu_compute_process_info() -> List[Dict[str, int]]: - num_items = ctypes.c_uint32(0) - nullptr = ctypes.POINTER(amdsmi_wrapper.amdsmi_process_info_t)() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_compute_process_info( - nullptr, ctypes.byref(num_items)) - ) + min_bandwidth = ctypes.c_uint64() + max_bandwidth = ctypes.c_uint64() - procs = (amdsmi_wrapper.amdsmi_process_info_t * num_items.value)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_compute_process_info( - procs, ctypes.byref(num_items)) + amdsmi_wrapper.amdsmi_get_minmax_bandwith_between_processors( + processor_handle_src, + processor_handle_dst, + ctypes.byref(min_bandwidth), + ctypes.byref(max_bandwidth), + ) ) - return [ - { - "process_id": proc.process_id, - "pasid": proc.pasid, - "vram_usage": proc.vram_usage, - "sdma_usage": proc.sdma_usage, - "cu_occupancy": proc.cu_occupancy, - } - for proc in procs - ] - + return {"min_bandwidth": min_bandwidth.value, "max_bandwidth": max_bandwidth.value} -def amdsmi_get_gpu_compute_process_info_by_pid(pid: int) -> Dict[str, int]: - if not isinstance(pid, int): - raise AmdSmiParameterException(pid, int) - proc = amdsmi_wrapper.amdsmi_process_info_t() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_compute_process_info_by_pid( - ctypes.c_uint32(pid), ctypes.byref(proc) +def amdsmi_topo_get_link_type( + processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, + processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, +): + if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle ) - ) - - return { - "process_id": proc.process_id, - "pasid": proc.pasid, - "vram_usage": proc.vram_usage, - "sdma_usage": proc.sdma_usage, - "cu_occupancy": proc.cu_occupancy, - } + if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle + ) -def amdsmi_get_gpu_compute_process_gpus(pid: int) -> List[int]: - if not isinstance(pid, int): - raise AmdSmiParameterException(pid, int) + hops = ctypes.c_uint64() + #type = AmdSmiIoLinkType() + type = ctypes.c_uint32() - num_devices = ctypes.c_uint32(0) - nullptr = ctypes.POINTER(ctypes.c_uint32)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_compute_process_gpus( - pid, nullptr, ctypes.byref(num_devices) + amdsmi_wrapper.amdsmi_topo_get_link_type( + #processor_handle_src, processor_handle_dst, ctypes.byref(hops), type + processor_handle_src, processor_handle_dst, ctypes.byref( + hops), ctypes.byref(type) ) ) - dv_indices = (ctypes.c_uint32 * num_devices.value)() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_compute_process_gpus( - pid, dv_indices, ctypes.byref(num_devices) - ) - ) + return {"hops": hops.value, "type": type.value} - return [dv_index.value for dv_index in dv_indices] +def amdsmi_is_P2P_accessible( + processor_handle_src: amdsmi_wrapper.amdsmi_processor_handle, + processor_handle_dst: amdsmi_wrapper.amdsmi_processor_handle, +): + if not isinstance(processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle_src, amdsmi_wrapper.amdsmi_processor_handle + ) -def amdsmi_gpu_xgmi_error_status( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> AmdSmiXgmiStatus: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): + if not isinstance(processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle_dst, amdsmi_wrapper.amdsmi_processor_handle ) - status = amdsmi_wrapper.amdsmi_xgmi_status_t() + accessible = ctypes.c_bool() + _check_res( - amdsmi_wrapper.amdsmi_gpu_xgmi_error_status( - processor_handle, ctypes.byref(status)) + amdsmi_wrapper.amdsmi_is_P2P_accessible( + processor_handle_src, processor_handle_dst, ctypes.byref(accessible) + ) ) - return AmdSmiXgmiStatus(status.value).value + return accessible.value -def amdsmi_reset_gpu_xgmi_error( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> None: +def amdsmi_get_xgmi_info(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - _check_res(amdsmi_wrapper.amdsmi_reset_gpu_xgmi_error(processor_handle)) + xgmi_info = amdsmi_wrapper.amdsmi_xgmi_info_t() + _check_res(amdsmi_wrapper.amdsmi_get_xgmi_info(processor_handle, xgmi_info)) -def amdsmi_get_gpu_memory_reserved_pages( + return { + "xgmi_lanes": xgmi_info.xgmi_lanes, + "xgmi_hive_id": xgmi_info.xgmi_hive_id, + "xgmi_node_id": xgmi_info.xgmi_node_id, + "index": xgmi_info.index, + } + + +def amdsmi_gpu_counter_group_supported( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Union[list, str]: + event_group: AmdSmiEventGroup, +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(event_group, AmdSmiEventGroup): + raise AmdSmiParameterException(event_group, AmdSmiEventGroup) - num_pages = ctypes.c_uint32() - retired_page_record = ctypes.POINTER( - amdsmi_wrapper.amdsmi_retired_page_record_t)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_memory_reserved_pages( - processor_handle, ctypes.byref(num_pages), retired_page_record - ) + amdsmi_wrapper.amdsmi_gpu_counter_group_supported( + processor_handle, event_group) ) - table_records = _format_bad_page_info(retired_page_record, num_pages) - if num_pages.value == 0: - return "No bad pages found." - else: - table_records = _format_bad_page_info(retired_page_record, num_pages) - - return table_records - -### Individual GPU Metrics Functions -def amdsmi_get_gpu_metrics_temp_hotspot( +def amdsmi_gpu_create_counter( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: + event_type: AmdSmiEventType, +) -> amdsmi_wrapper.amdsmi_event_handle_t: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(event_type, AmdSmiEventType): + raise AmdSmiParameterException(event_type, AmdSmiEventType) - hotspot_value = ctypes.c_int16() + event_handle = amdsmi_wrapper.amdsmi_event_handle_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_hotspot( - processor_handle, ctypes.byref(hotspot_value) + amdsmi_wrapper.amdsmi_gpu_create_counter( + processor_handle, event_type, ctypes.byref(event_handle) ) ) - if hotspot_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return hotspot_value.value + return event_handle -def amdsmi_get_gpu_metrics_temp_mem( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): +def amdsmi_gpu_destroy_counter(event_handle: amdsmi_wrapper.amdsmi_event_handle_t): + if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - mem_value = ctypes.c_int16() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_mem( - processor_handle, ctypes.byref(mem_value) + event_handle, amdsmi_wrapper.amdsmi_event_handle_t ) - ) - - if mem_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return mem_value.value + _check_res(amdsmi_wrapper.amdsmi_gpu_destroy_counter(event_handle)) -def amdsmi_get_gpu_metrics_temp_vrsoc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): +def amdsmi_gpu_control_counter( + event_handle: amdsmi_wrapper.amdsmi_event_handle_t, + counter_command: AmdSmiCounterCommand, +): + if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + event_handle, amdsmi_wrapper.amdsmi_event_handle_t ) + if not isinstance(counter_command, AmdSmiCounterCommand): + raise AmdSmiParameterException(counter_command, AmdSmiCounterCommand) + command_args = ctypes.c_void_p() - vrsoc_value = ctypes.c_int16() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_vrsoc( - processor_handle, ctypes.byref(vrsoc_value) + amdsmi_wrapper.amdsmi_gpu_control_counter( + event_handle, counter_command, command_args ) - ) - - if vrsoc_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return vrsoc_value.value + ) -def amdsmi_get_gpu_metrics_curr_socket_power( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): +def amdsmi_gpu_read_counter( + event_handle: amdsmi_wrapper.amdsmi_event_handle_t, +) -> Dict[str, Any]: + if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + event_handle, amdsmi_wrapper.amdsmi_event_handle_t ) - socket_power_value = ctypes.c_uint16() + counter_value = amdsmi_wrapper.amdsmi_counter_value_t() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_socket_power( - processor_handle, ctypes.byref(socket_power_value) - ) + amdsmi_wrapper.amdsmi_gpu_read_counter( + event_handle, ctypes.byref(counter_value)) ) - if socket_power_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return socket_power_value.value + return { + "value": counter_value.value, + "time_enabled": counter_value.time_enabled, + "time_running": counter_value.time_running, + } -def amdsmi_get_gpu_metrics_avg_gfx_activity( +def amdsmi_get_gpu_available_counters( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, + event_group: AmdSmiEventGroup, ) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(event_group, AmdSmiEventGroup): + raise AmdSmiParameterException(event_group, AmdSmiEventGroup) + available = ctypes.c_uint32() - gfx_activity_value = ctypes.c_uint16() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_gfx_activity( - processor_handle, ctypes.byref(gfx_activity_value) + amdsmi_wrapper.amdsmi_get_gpu_available_counters( + processor_handle, event_group, ctypes.byref(available) ) ) - if gfx_activity_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return gfx_activity_value.value + return available.value -def amdsmi_get_gpu_metrics_avg_umc_activity( +def amdsmi_set_gpu_perf_level( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: + perf_level: AmdSmiDevPerfLevel, +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(perf_level, AmdSmiDevPerfLevel): + raise AmdSmiParameterException(perf_level, AmdSmiDevPerfLevel) - umc_activity_value = ctypes.c_uint16() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_umc_activity( - processor_handle, ctypes.byref(umc_activity_value) - ) - ) - - if umc_activity_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return umc_activity_value.value + _check_res(amdsmi_wrapper.amdsmi_set_gpu_perf_level( + processor_handle, perf_level)) -def amdsmi_get_gpu_metrics_energy_acc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_power_profile_presets( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) + + sensor_idx = ctypes.c_uint32(sensor_idx) + status = amdsmi_wrapper.amdsmi_power_profile_status_t() - energy_acc_value = ctypes.c_uint64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_energy_acc( - processor_handle, ctypes.byref(energy_acc_value) + amdsmi_wrapper.amdsmi_get_gpu_power_profile_presets( + processor_handle, sensor_idx, ctypes.byref(status) ) ) - if energy_acc_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return energy_acc_value.value + return { + "available_profiles": status.available_profiles, + "current": status.current, + "num_profiles": status.num_profiles, + } -def amdsmi_get_gpu_metrics_system_clock_counter( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_reset_gpu(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - system_clock_counter_value = ctypes.c_uint64() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_system_clock_counter( - processor_handle, ctypes.byref(system_clock_counter_value) - ) - ) - - if system_clock_counter_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return system_clock_counter_value.value + _check_res(amdsmi_wrapper.amdsmi_reset_gpu(processor_handle)) -def amdsmi_get_gpu_metrics_firmware_timestamp( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_set_gpu_perf_determinism_mode( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, clock_value: int +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(clock_value, int): + raise AmdSmiParameterException(clock_value, int) + clock_value = ctypes.c_uint64(clock_value) - firmware_timestamp_value = ctypes.c_uint64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_firmware_timestamp( - processor_handle, ctypes.byref(firmware_timestamp_value) - ) + amdsmi_wrapper.amdsmi_set_gpu_perf_determinism_mode( + processor_handle, clock_value) ) - if firmware_timestamp_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return firmware_timestamp_value.value - -def amdsmi_get_gpu_metrics_throttle_status( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> bool: +def amdsmi_set_gpu_fan_speed( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int, fan_speed: int +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) + if not isinstance(fan_speed, int): + raise AmdSmiParameterException(fan_speed, int) + sensor_idx = ctypes.c_uint32(sensor_idx) + fan_speed = ctypes.c_uint64(fan_speed) - throttle_status_value = ctypes.c_uint32() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_throttle_status( - processor_handle, ctypes.byref(throttle_status_value) - ) + amdsmi_wrapper.amdsmi_set_gpu_fan_speed( + processor_handle, sensor_idx, fan_speed) ) - if throttle_status_value.value == 0xFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return bool(throttle_status_value.value) - -def amdsmi_get_gpu_metrics_pcie_link_width( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_reset_gpu_fan( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) + sensor_idx = ctypes.c_uint32(sensor_idx) - pcie_link_width_value = ctypes.c_uint16() - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_link_width( - processor_handle, ctypes.byref(pcie_link_width_value) - ) - ) - - if pcie_link_width_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return pcie_link_width_value.value + _check_res(amdsmi_wrapper.amdsmi_reset_gpu_fan(processor_handle, sensor_idx)) -def amdsmi_get_gpu_metrics_pcie_link_speed( +def amdsmi_set_clk_freq( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: + clk_type: AmdSmiClkType, + freq_bitmask: int, +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - - pcie_link_speed_value = ctypes.c_uint16() + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiParameterException) + if not isinstance(freq_bitmask, int): + raise AmdSmiParameterException(freq_bitmask, int) + freq_bitmask = ctypes.c_uint64(freq_bitmask) _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_link_speed( - processor_handle, ctypes.byref(pcie_link_speed_value) + amdsmi_wrapper.amdsmi_set_clk_freq( + processor_handle, clk_type, freq_bitmask ) ) - if pcie_link_speed_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return pcie_link_speed_value.value - -def amdsmi_get_gpu_metrics_xgmi_link_width( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_set_gpu_overdrive_level( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, overdrive_value: int +): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(overdrive_value, int): + raise AmdSmiParameterException(overdrive_value, int) + overdrive_value = ctypes.c_uint32(overdrive_value) - xgmi_link_width_value = ctypes.c_uint16() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_xgmi_link_width( - processor_handle, ctypes.byref(xgmi_link_width_value) - ) + amdsmi_wrapper.amdsmi_set_gpu_overdrive_level( + processor_handle, overdrive_value) ) - if xgmi_link_width_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - return xgmi_link_width_value.value - - -def amdsmi_get_gpu_metrics_xgmi_link_speed( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_bdf_id(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - xgmi_link_speed_value = ctypes.c_uint16() + bdfid = ctypes.c_uint64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_xgmi_link_speed( - processor_handle, ctypes.byref(xgmi_link_speed_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_bdf_id( + processor_handle, ctypes.byref(bdfid)) ) - if xgmi_link_speed_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return xgmi_link_speed_value.value - + return bdfid.value -def amdsmi_get_gpu_metrics_gfxclk_lock_status( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> bool: +def amdsmi_set_gpu_pci_bandwidth( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, bitmask: int +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - gfxclk_lock_status_value = ctypes.c_uint32() + if not isinstance(bitmask, int): + raise AmdSmiParameterException(bitmask, int) + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_gfxclk_lock_status( - processor_handle, ctypes.byref(gfxclk_lock_status_value) + amdsmi_wrapper.amdsmi_set_gpu_pci_bandwidth( + processor_handle, ctypes.c_uint64(bitmask) ) ) - if gfxclk_lock_status_value.value == 0xFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - return bool(gfxclk_lock_status_value.value) +def _format_transfer_rate(transfer_rate): + return { + 'num_supported': transfer_rate.num_supported, + 'current': transfer_rate.current, + 'frequency': list(transfer_rate.frequency) + } -def amdsmi_get_gpu_metrics_gfx_activity_acc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_pci_bandwidth(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - gfx_activity_acc_value = ctypes.c_uint32() + bandwidth = amdsmi_wrapper.amdsmi_pcie_bandwidth_t() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_gfx_activity_acc( - processor_handle, ctypes.byref(gfx_activity_acc_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_pci_bandwidth( + processor_handle, ctypes.byref(bandwidth)) ) - if gfx_activity_acc_value.value == 0xFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + transfer_rate = _format_transfer_rate(bandwidth.transfer_rate) - return gfx_activity_acc_value.value + return { + 'transfer_rate': transfer_rate, + 'lanes': list(bandwidth.lanes) + } -def amdsmi_get_gpu_metrics_mem_activity_acc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_pci_throughput(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - mem_activity_acc_value = ctypes.c_uint32() + sent = ctypes.c_uint64() + received = ctypes.c_uint64() + max_pkt_sz = ctypes.c_uint64() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_mem_activity_acc( - processor_handle, ctypes.byref(mem_activity_acc_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_pci_throughput(processor_handle, ctypes.byref( + sent), ctypes.byref(received), ctypes.byref(max_pkt_sz)) ) - if mem_activity_acc_value.value == 0xFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return mem_activity_acc_value.value + return { + 'sent': sent.value, + 'received': received.value, + 'max_pkt_sz': max_pkt_sz.value + } -def amdsmi_get_gpu_metrics_pcie_bandwidth_acc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_pci_replay_counter(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - pcie_bandwidth_acc_value = ctypes.c_uint64() + counter = ctypes.c_uint64() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_bandwidth_acc( - processor_handle, ctypes.byref(pcie_bandwidth_acc_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_pci_replay_counter( + processor_handle, ctypes.byref(counter)) ) - if pcie_bandwidth_acc_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return pcie_bandwidth_acc_value.value + return counter.value -def amdsmi_get_gpu_metrics_pcie_bandwidth_inst( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_topo_numa_affinity(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - pcie_bandwidth_inst_value = ctypes.c_uint64() + numa_node = ctypes.c_uint32() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_bandwidth_inst( - processor_handle, ctypes.byref(pcie_bandwidth_inst_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_topo_numa_affinity( + processor_handle, ctypes.byref(numa_node)) ) - if pcie_bandwidth_inst_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return pcie_bandwidth_inst_value.value + return numa_node.value -def amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_set_power_cap( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_ind: int, cap: int +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - pcie_count_acc_value = ctypes.c_uint64() + if not isinstance(sensor_ind, int): + raise AmdSmiParameterException(sensor_ind, int) + + if not isinstance(cap, int): + raise AmdSmiParameterException(cap, int) + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_l0_recov_count_acc( - processor_handle, ctypes.byref(pcie_count_acc_value) + amdsmi_wrapper.amdsmi_set_power_cap( + processor_handle, ctypes.c_uint32(sensor_ind), ctypes.c_uint64(cap) ) ) - if pcie_count_acc_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - return pcie_count_acc_value.value - - -def amdsmi_get_gpu_metrics_pcie_replay_count_acc( +def amdsmi_set_gpu_power_profile( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: + reserved: int, + profile: AmdSmiPowerProfilePresetMasks, +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - pcie_count_acc_value = ctypes.c_uint64() + if not isinstance(reserved, int): + raise AmdSmiParameterException(reserved, int) + + if not isinstance(profile, AmdSmiPowerProfilePresetMasks): + raise AmdSmiParameterException(profile, AmdSmiPowerProfilePresetMasks) + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_replay_count_acc( - processor_handle, ctypes.byref(pcie_count_acc_value) + amdsmi_wrapper.amdsmi_set_gpu_power_profile( + processor_handle, ctypes.c_uint32(reserved), profile ) ) - if pcie_count_acc_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return pcie_count_acc_value.value - -def amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_energy_count(processor_handle: amdsmi_wrapper.amdsmi_processor_handle): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - pcie_count_acc_value = ctypes.c_uint64() + power = ctypes.c_uint64() + counter_resolution = ctypes.c_float() + timestamp = ctypes.c_uint64() + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_pcie_replay_rover_count_acc( - processor_handle, ctypes.byref(pcie_count_acc_value) - ) + amdsmi_wrapper.amdsmi_get_energy_count(processor_handle, ctypes.byref( + power), ctypes.byref(counter_resolution), ctypes.byref(timestamp)) ) - if pcie_count_acc_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return pcie_count_acc_value.value + return { + 'power': power.value, + 'counter_resolution': counter_resolution.value, + 'timestamp': timestamp.value, + } -def amdsmi_get_gpu_metrics_curr_uclk( +def amdsmi_set_gpu_clk_range( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: + min_clk_value: int, + max_clk_value: int, + clk_type: AmdSmiClkType, +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - uclk_value = ctypes.c_uint16() + if not isinstance(min_clk_value, int): + raise AmdSmiParameterException(min_clk_value, int) + + if not isinstance(max_clk_value, int): + raise AmdSmiParameterException(min_clk_value, int) + + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiClkType) + _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_uclk( - processor_handle, ctypes.byref(uclk_value) + amdsmi_wrapper.amdsmi_set_gpu_clk_range( + processor_handle, + ctypes.c_uint64(min_clk_value), + ctypes.c_uint64(max_clk_value), + clk_type, ) ) - if uclk_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return uclk_value.value - -def amdsmi_get_gpu_metrics_temp_hbm( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: +def amdsmi_get_gpu_memory_total(processor_handle: amdsmi_wrapper.amdsmi_processor_handle, mem_type: AmdSmiMemoryType): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle + ) + + if not isinstance(mem_type, AmdSmiMemoryType): + raise AmdSmiParameterException( + mem_type, AmdSmiMemoryType ) - temp_hbm_value = (ctypes.c_uint16 * AMDSMI_NUM_HBM_INSTANCES)() + total = ctypes.c_uint64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_hbm( - processor_handle, temp_hbm_value - ) + amdsmi_wrapper.amdsmi_get_gpu_memory_total( + processor_handle, mem_type, ctypes.byref(total)) ) - return [temp_hbm.value for temp_hbm in temp_hbm_value] + return total.value -def amdsmi_get_gpu_metrics_vcn_activity( +def amdsmi_set_gpu_od_clk_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: + level: AmdSmiFreqInd, + value: int, + clk_type: AmdSmiClkType, +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - vcn_activity_value = (ctypes.c_uint16 * AMDSMI_MAX_NUM_VCN)() + if not isinstance(level, AmdSmiFreqInd): + raise AmdSmiParameterException(level, AmdSmiFreqInd) + + if not isinstance(value, int): + raise AmdSmiParameterException(value, int) + + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiClkType) _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_vcn_activity( - processor_handle, vcn_activity_value + amdsmi_wrapper.amdsmi_set_gpu_od_clk_info( + processor_handle, level, ctypes.c_uint64(value), clk_type ) ) - return [vcn_activity.value for vcn_activity in vcn_activity_value] - -def amdsmi_get_gpu_metrics_xgmi_read_data( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: +def amdsmi_get_gpu_memory_usage(processor_handle: amdsmi_wrapper.amdsmi_processor_handle, mem_type: AmdSmiMemoryType): if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle + ) + + if not isinstance(mem_type, AmdSmiMemoryType): + raise AmdSmiParameterException( + mem_type, AmdSmiMemoryType ) - xgmi_write_data_acc_value = (ctypes.c_uint64 * AMDSMI_MAX_NUM_XGMI_LINKS)() + used = ctypes.c_uint64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_xgmi_read_data( - processor_handle, xgmi_write_data_acc_value - ) + amdsmi_wrapper.amdsmi_get_gpu_memory_usage( + processor_handle, mem_type, ctypes.byref(used)) ) - return [xgmi_read_data_acc.value for xgmi_read_data_acc in xgmi_write_data_acc_value] + return used.value -def amdsmi_get_gpu_metrics_xgmi_write_data( +def amdsmi_set_gpu_od_volt_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: + vpoint: int, + clk_value: int, + volt_value: int, +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - xgmi_write_data_acc_value = (ctypes.c_uint64 * AMDSMI_MAX_NUM_XGMI_LINKS)() + if not isinstance(vpoint, int): + raise AmdSmiParameterException(vpoint, int) + + if not isinstance(clk_value, int): + raise AmdSmiParameterException(clk_value, int) + + if not isinstance(volt_value, int): + raise AmdSmiParameterException(volt_value, int) _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_xgmi_write_data( - processor_handle, xgmi_write_data_acc_value + amdsmi_wrapper.amdsmi_set_gpu_od_volt_info( + processor_handle, + ctypes.c_uint32(vpoint), + ctypes.c_uint64(clk_value), + ctypes.c_uint64(volt_value), ) ) - return [xgmi_write_data_acc.value for xgmi_write_data_acc in xgmi_write_data_acc_value] -def amdsmi_get_gpu_metrics_curr_gfxclk( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: +def amdsmi_get_gpu_fan_rpms( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int +) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - - current_gfxclk_value = (ctypes.c_uint16 * AMDSMI_MAX_NUM_GFX_CLKS)() - + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) + fan_speed = ctypes.c_int64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_gfxclk( - processor_handle, current_gfxclk_value + amdsmi_wrapper.amdsmi_get_gpu_fan_rpms( + processor_handle, sensor_idx, ctypes.byref(fan_speed) ) ) - return [curr_gfxclk.value for curr_gfxclk in current_gfxclk_value] + return fan_speed.value -def amdsmi_get_gpu_metrics_curr_socclk( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: +def amdsmi_get_gpu_fan_speed( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int +) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - - current_socclk_value = (ctypes.c_uint16 * AMDSMI_MAX_NUM_CLKS)() - + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) + fan_speed = ctypes.c_int64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_socclk( - processor_handle, current_socclk_value + amdsmi_wrapper.amdsmi_get_gpu_fan_speed( + processor_handle, sensor_idx, ctypes.byref(fan_speed) ) ) - return [curr_socclk.value for curr_socclk in current_socclk_value] + return fan_speed.value -def amdsmi_get_gpu_metrics_curr_vclk0( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: +def amdsmi_get_gpu_fan_speed_max( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int +) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - - current_vclk_value = (ctypes.c_uint16 * AMDSMI_MAX_NUM_CLKS)() - + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) + fan_speed = ctypes.c_uint64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_vclk0( - processor_handle, current_vclk_value + amdsmi_wrapper.amdsmi_get_gpu_fan_speed_max( + processor_handle, sensor_idx, ctypes.byref(fan_speed) ) ) - return [curr_vclk0.value for curr_vclk0 in current_vclk_value] + return fan_speed.value -def amdsmi_get_gpu_metrics_curr_dclk0( +def amdsmi_get_temp_metric( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[int]: + sensor_type: AmdSmiTemperatureType, + metric: AmdSmiTemperatureMetric, +) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(sensor_type, AmdSmiTemperatureType): + raise AmdSmiParameterException(sensor_type, AmdSmiTemperatureType) + if not isinstance(metric, AmdSmiTemperatureMetric): + raise AmdSmiParameterException(metric, AmdSmiTemperatureMetric) - current_dclk_value = (ctypes.c_uint16 * AMDSMI_MAX_NUM_CLKS)() - + temp_value = ctypes.c_int64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_dclk0( - processor_handle, current_dclk_value + amdsmi_wrapper.amdsmi_get_temp_metric( + processor_handle, sensor_type, metric, ctypes.byref(temp_value) ) ) - return [curr_dclk0.value for curr_dclk0 in current_dclk_value] + return temp_value.value -def amdsmi_get_gpu_metrics_temp_edge( +def amdsmi_get_gpu_volt_metric( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, + sensor_type: AmdSmiVoltageType, + metric: AmdSmiVoltageMetric, ) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(sensor_type, AmdSmiVoltageType): + raise AmdSmiParameterException(sensor_type, AmdSmiVoltageType) + if not isinstance(metric, AmdSmiVoltageMetric): + raise AmdSmiParameterException(metric, AmdSmiVoltageMetric) - edge_value = ctypes.c_int16() - + voltage = ctypes.c_int64() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_edge( - processor_handle, ctypes.byref(edge_value) + amdsmi_wrapper.amdsmi_get_gpu_volt_metric( + processor_handle, sensor_type, metric, ctypes.byref(voltage) ) ) - if edge_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + return voltage.value - return edge_value.value -def amdsmi_get_gpu_metrics_temp_vrgfx( +def amdsmi_get_utilization_count( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: + *counter_types: Tuple[AmdSmiUtilizationCounterType] +) -> List[Dict[str, Any]]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not len(counter_types): + raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_INVAL) + counters = [] + for counter_type in counter_types: + if not isinstance(counter_type, AmdSmiUtilizationCounterType): + raise AmdSmiParameterException( + counter_type, AmdSmiUtilizationCounterType) + counter = amdsmi_wrapper.amdsmi_utilization_counter_t() + counter.type = counter_type + counters.append(counter) - vrgfx_value = ctypes.c_int16() + count = ctypes.c_uint32(len(counters)) + timestamp = ctypes.c_uint64() + util_counter_list = (amdsmi_wrapper.amdsmi_utilization_counter_t * len(counters))( + *counters + ) _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_vrgfx( - processor_handle, ctypes.byref(vrgfx_value) + amdsmi_wrapper.amdsmi_get_utilization_count( + processor_handle, util_counter_list, count, ctypes.byref(timestamp) ) ) + if count.value != len(counters): + raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_API_FAILED) - if vrgfx_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + result = [{"timestamp": timestamp.value}] + for idx in range(count.value): + counter_type = amdsmi_wrapper.c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues[ + util_counter_list[idx].type + ] + if counter_type == "AMDSMI_UTILIZATION_COUNTER_LAST": + counter_type = "AMDSMI_COARSE_GRAIN_MEM_ACTIVITY" + result.append( + {"type": counter_type, "value": util_counter_list[idx].value}) - return vrgfx_value.value + return result -def amdsmi_get_gpu_metrics_temp_vrmem( +def amdsmi_get_gpu_perf_level( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +) -> str: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - vrmem_value = ctypes.c_int16() + perf = amdsmi_wrapper.amdsmi_dev_perf_level_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_temp_vrmem( - processor_handle, ctypes.byref(vrmem_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_perf_level( + processor_handle, ctypes.byref(perf)) ) - if vrmem_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + result = amdsmi_wrapper.c__EA_amdsmi_dev_perf_level_t__enumvalues[perf.value] + if result == "AMDSMI_DEV_PERF_LEVEL_FIRST": + result = "AMDSMI_DEV_PERF_LEVEL_AUTO" + if result == "AMDSMI_DEV_PERF_LEVEL_LAST": + result = "AMDSMI_DEV_PERF_LEVEL_DETERMINISM" - return vrmem_value.value + return result -def amdsmi_get_gpu_metrics_avg_mm_activity( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_set_gpu_perf_determinism_mode( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, clkvalue: int +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - mm_activity_value = ctypes.c_uint16() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_mm_activity( - processor_handle, ctypes.byref(mm_activity_value) + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - ) - - if mm_activity_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + if not isinstance(clkvalue, int): + raise AmdSmiParameterException(clkvalue, int) - return mm_activity_value.value + _check_res(amdsmi_wrapper.amdsmi_set_gpu_perf_determinism_mode( + processor_handle, clkvalue)) -def amdsmi_get_gpu_metrics_curr_vclk1( +def amdsmi_get_gpu_overdrive_level( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, ) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - current_vclk_value = ctypes.c_uint16() - + od_level = ctypes.c_uint32() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_vclk1( - processor_handle, ctypes.byref(current_vclk_value) + amdsmi_wrapper.amdsmi_get_gpu_overdrive_level( + processor_handle, ctypes.byref(od_level) ) ) - if current_vclk_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return current_vclk_value.value + return od_level.value -def amdsmi_get_gpu_metrics_curr_dclk1( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_clk_freq( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, clk_type: AmdSmiClkType +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(clk_type, AmdSmiClkType): + raise AmdSmiParameterException(clk_type, AmdSmiClkType) - current_dclk_value = ctypes.c_uint16() - + freq = amdsmi_wrapper.amdsmi_frequencies_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_dclk1( - processor_handle, ctypes.byref(current_dclk_value) + amdsmi_wrapper.amdsmi_get_clk_freq( + processor_handle, clk_type, ctypes.byref(freq) ) ) - if current_dclk_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return current_dclk_value.value + return { + "num_supported": freq.num_supported, + "current": freq.current, + "frequency": list(freq.frequency)[: freq.num_supported - 1], + } -def amdsmi_get_gpu_metrics_indep_throttle_status( +def amdsmi_get_gpu_od_volt_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> bool: +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - throttle_status_value = ctypes.c_uint64() - + freq_data = amdsmi_wrapper.amdsmi_od_volt_freq_data_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_indep_throttle_status( - processor_handle, ctypes.byref(throttle_status_value) + amdsmi_wrapper.amdsmi_get_gpu_od_volt_info( + processor_handle, ctypes.byref(freq_data) ) ) - if throttle_status_value.value == 0xFFFFFFFFFFFFFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return bool(throttle_status_value.value) + return { + "curr_sclk_range": { + "lower_bound": freq_data.curr_sclk_range.lower_bound, + "upper_bound": freq_data.curr_sclk_range.upper_bound, + }, + "curr_mclk_range": { + "lower_bound": freq_data.curr_mclk_range.lower_bound, + "upper_bound": freq_data.curr_mclk_range.upper_bound, + }, + "sclk_freq_limits": { + "lower_bound": freq_data.sclk_freq_limits.lower_bound, + "upper_bound": freq_data.sclk_freq_limits.upper_bound, + }, + "mclk_freq_limits": { + "lower_bound": freq_data.mclk_freq_limits.lower_bound, + "upper_bound": freq_data.mclk_freq_limits.upper_bound, + }, + "curve.vc_points": list(freq_data.curve.vc_points), + "num_regions": freq_data.num_regions, + } -def amdsmi_get_gpu_metrics_avg_socket_power( +def amdsmi_get_gpu_metrics_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - socket_power_value = ctypes.c_uint16() - + gpu_metrics = amdsmi_wrapper.amdsmi_gpu_metrics_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_socket_power( - processor_handle, ctypes.byref(socket_power_value) + amdsmi_wrapper.amdsmi_get_gpu_metrics_info( + processor_handle, ctypes.byref(gpu_metrics) ) ) - if socket_power_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return socket_power_value.value + return { + "temperature_edge": gpu_metrics.temperature_edge, + "temperature_hotspot": gpu_metrics.temperature_hotspot, + "temperature_mem": gpu_metrics.temperature_mem, + "temperature_vrgfx": gpu_metrics.temperature_vrgfx, + "temperature_vrsoc": gpu_metrics.temperature_vrsoc, + "temperature_vrmem": gpu_metrics.temperature_vrmem, + "average_gfx_activity": gpu_metrics.average_gfx_activity, + "average_umc_activity": gpu_metrics.average_umc_activity, + "average_mm_activity": gpu_metrics.average_mm_activity, + "average_socket_power": gpu_metrics.average_socket_power, + "energy_accumulator": gpu_metrics.energy_accumulator, + "system_clock_counter": gpu_metrics.system_clock_counter, + "average_gfxclk_frequency": gpu_metrics.average_gfxclk_frequency, + "average_socclk_frequency": gpu_metrics.average_socclk_frequency, + "average_uclk_frequency": gpu_metrics.average_uclk_frequency, + "average_vclk0_frequency": gpu_metrics.average_vclk0_frequency, + "average_dclk0_frequency": gpu_metrics.average_dclk0_frequency, + "average_vclk1_frequency": gpu_metrics.average_vclk1_frequency, + "average_dclk1_frequency": gpu_metrics.average_dclk1_frequency, + "current_gfxclk": gpu_metrics.current_gfxclk, + "current_socclk": gpu_metrics.current_socclk, + "current_uclk": gpu_metrics.current_uclk, + "current_vclk0": gpu_metrics.current_vclk0, + "current_dclk0": gpu_metrics.current_dclk0, + "current_vclk1": gpu_metrics.current_vclk1, + "current_dclk1": gpu_metrics.current_dclk1, + "throttle_status": gpu_metrics.throttle_status, + "current_fan_speed": gpu_metrics.current_fan_speed, + "pcie_link_width": gpu_metrics.pcie_link_width, + "pcie_link_speed": gpu_metrics.pcie_link_speed, + "padding": gpu_metrics.padding, + "gfx_activity_acc": gpu_metrics.gfx_activity_acc, + "mem_actvity_acc": gpu_metrics.mem_actvity_acc, + "temperature_hbm": list(gpu_metrics.temperature_hbm), + } -def amdsmi_get_gpu_metrics_curr_fan_speed( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_od_volt_curve_regions( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, num_regions: int +) -> List[Dict[str, Any]]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(num_regions, int): + raise AmdSmiParameterException(num_regions, int) - fan_speed_value = ctypes.c_uint16() - + region_count = ctypes.c_uint32(num_regions) + buffer = (amdsmi_wrapper.amdsmi_freq_volt_region_t * num_regions)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_curr_fan_speed( - processor_handle, ctypes.byref(fan_speed_value) + amdsmi_wrapper.amdsmi_get_gpu_od_volt_curve_regions( + processor_handle, ctypes.byref(region_count), buffer ) ) - if fan_speed_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return fan_speed_value.value - - -def amdsmi_get_gpu_metrics_avg_gfx_clock_frequency( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - - clock_frequency_value = ctypes.c_uint16() + result = [] - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_gfx_clock_frequency( - processor_handle, ctypes.byref(clock_frequency_value) + for idx in range(region_count.value): + result.extend( + [ + { + "freq_range": { + "lower_bound": buffer[idx].freq_range.lower_bound, + "upper_bound": buffer[idx].freq_range.upper_bound, + }, + "volt_range": { + "lower_bound": buffer[idx].volt_range.lower_bound, + "upper_bound": buffer[idx].volt_range.upper_bound, + }, + } + ] ) - ) - - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - return clock_frequency_value.value + return result -def amdsmi_get_gpu_metrics_avg_soc_clock_frequency( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_power_profile_presets( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, sensor_idx: int +) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + if not isinstance(sensor_idx, int): + raise AmdSmiParameterException(sensor_idx, int) - clock_frequency_value = ctypes.c_uint16() - + status = amdsmi_wrapper.amdsmi_power_profile_status_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_soc_clock_frequency( - processor_handle, ctypes.byref(clock_frequency_value) + amdsmi_wrapper.amdsmi_get_gpu_power_profile_presets( + processor_handle, sensor_idx, ctypes.byref(status) ) ) - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return clock_frequency_value.value + return { + "available_profiles": status.available_profiles, + "current": status.current, + "num_profiles": status.num_profiles, + } -def amdsmi_get_gpu_metrics_avg_uclock_frequency( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_ecc_count( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, block: AmdSmiGpuBlock +) -> Dict[str, int]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - clock_frequency_value = ctypes.c_uint16() + if not isinstance(block, AmdSmiGpuBlock): + raise AmdSmiParameterException(block, AmdSmiGpuBlock) + ec = amdsmi_wrapper.amdsmi_error_count_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_uclock_frequency( - processor_handle, ctypes.byref(clock_frequency_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_ecc_count( + processor_handle, block, ctypes.byref(ec)) ) - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return clock_frequency_value.value + return { + "correctable_count": ec.correctable_count, + "uncorrectable_count": ec.uncorrectable_count, + } -def amdsmi_get_gpu_metrics_avg_vclock0_frequency( +def amdsmi_get_gpu_ecc_enabled( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, ) -> int: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - clock_frequency_value = ctypes.c_uint16() - + blocks = ctypes.c_uint64(0) _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_vclock0_frequency( - processor_handle, ctypes.byref(clock_frequency_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_ecc_enabled( + processor_handle, ctypes.byref(blocks)) ) - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return clock_frequency_value.value + return blocks.value -def amdsmi_get_gpu_metrics_avg_dclock0_frequency( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +def amdsmi_get_gpu_ecc_status( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, block: AmdSmiGpuBlock +) -> AmdSmiRasErrState: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - clock_frequency_value = ctypes.c_uint16() + if not isinstance(block, AmdSmiGpuBlock): + raise AmdSmiParameterException(block, AmdSmiGpuBlock) + state = amdsmi_wrapper.amdsmi_ras_err_state_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_dclock0_frequency( - processor_handle, ctypes.byref(clock_frequency_value) + amdsmi_wrapper.amdsmi_get_gpu_ecc_status( + processor_handle, block, ctypes.byref(state) ) ) - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + return AmdSmiRasErrState(state.value) - return clock_frequency_value.value +def amdsmi_status_code_to_string(status: amdsmi_wrapper.amdsmi_status_t) -> str: + if not isinstance(status, amdsmi_wrapper.amdsmi_status_t): + raise AmdSmiParameterException(status, amdsmi_wrapper.amdsmi_status_t) -def amdsmi_get_gpu_metrics_avg_vclock1_frequency( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) + status_string_p_p = ctypes.pointer(ctypes.pointer(ctypes.c_char())) + + _check_res(amdsmi_wrapper.amdsmi_status_code_to_string( + status, status_string_p_p)) + + return amdsmi_wrapper.string_cast(status_string_p_p.contents) - clock_frequency_value = ctypes.c_uint16() +def amdsmi_get_gpu_compute_process_info() -> List[Dict[str, int]]: + num_items = ctypes.c_uint32(0) + nullptr = ctypes.POINTER(amdsmi_wrapper.amdsmi_process_info_t)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_vclock1_frequency( - processor_handle, ctypes.byref(clock_frequency_value) - ) + amdsmi_wrapper.amdsmi_get_gpu_compute_process_info( + nullptr, ctypes.byref(num_items)) ) - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return clock_frequency_value.value + procs = (amdsmi_wrapper.amdsmi_process_info_t * num_items.value)() + _check_res( + amdsmi_wrapper.amdsmi_get_gpu_compute_process_info( + procs, ctypes.byref(num_items)) + ) + return [ + { + "process_id": proc.process_id, + "pasid": proc.pasid, + "vram_usage": proc.vram_usage, + "sdma_usage": proc.sdma_usage, + "cu_occupancy": proc.cu_occupancy, + } + for proc in procs + ] -def amdsmi_get_gpu_metrics_avg_dclock1_frequency( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle - ) - clock_frequency_value = ctypes.c_uint16() +def amdsmi_get_gpu_compute_process_info_by_pid(pid: int) -> Dict[str, int]: + if not isinstance(pid, int): + raise AmdSmiParameterException(pid, int) + proc = amdsmi_wrapper.amdsmi_process_info_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_avg_dclock1_frequency( - processor_handle, ctypes.byref(clock_frequency_value) + amdsmi_wrapper.amdsmi_get_gpu_compute_process_info_by_pid( + ctypes.c_uint32(pid), ctypes.byref(proc) ) ) - if clock_frequency_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) + return { + "process_id": proc.process_id, + "pasid": proc.pasid, + "vram_usage": proc.vram_usage, + "sdma_usage": proc.sdma_usage, + "cu_occupancy": proc.cu_occupancy, + } - return clock_frequency_value.value +def amdsmi_get_gpu_compute_process_gpus(pid: int) -> List[int]: + if not isinstance(pid, int): + raise AmdSmiParameterException(pid, int) -def amdsmi_get_gpu_metrics_volt_soc( - processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: - if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): - raise AmdSmiParameterException( - processor_handle, amdsmi_wrapper.amdsmi_processor_handle + num_devices = ctypes.c_uint32(0) + nullptr = ctypes.POINTER(ctypes.c_uint32)() + _check_res( + amdsmi_wrapper.amdsmi_get_gpu_compute_process_gpus( + pid, nullptr, ctypes.byref(num_devices) ) + ) - voltage_value = ctypes.c_uint16() - + dv_indices = (ctypes.c_uint32 * num_devices.value)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_volt_soc( - processor_handle, ctypes.byref(voltage_value) + amdsmi_wrapper.amdsmi_get_gpu_compute_process_gpus( + pid, dv_indices, ctypes.byref(num_devices) ) ) - if voltage_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return voltage_value.value + return [dv_index.value for dv_index in dv_indices] -def amdsmi_get_gpu_metrics_volt_gfx( +def amdsmi_gpu_xgmi_error_status( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +) -> AmdSmiXgmiStatus: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - voltage_value = ctypes.c_uint16() - + status = amdsmi_wrapper.amdsmi_xgmi_status_t() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_volt_gfx( - processor_handle, ctypes.byref(voltage_value) - ) + amdsmi_wrapper.amdsmi_gpu_xgmi_error_status( + processor_handle, ctypes.byref(status)) ) - return [volt_gfx.value for volt_gfx in voltage_value] + return AmdSmiXgmiStatus(status.value) -def amdsmi_get_gpu_metrics_volt_mem( +def amdsmi_reset_gpu_xgmi_error( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> int: +) -> None: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - voltage_value = ctypes.c_uint16() - - _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_volt_mem( - processor_handle, ctypes.byref(voltage_value) - ) - ) - - if voltage_value.value == 0xFFFF: - raise AmdSmiLibraryException(amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED) - - return voltage_value.value + _check_res(amdsmi_wrapper.amdsmi_reset_gpu_xgmi_error(processor_handle)) -def amdsmi_get_gpu_metrics_header_info( +def amdsmi_get_gpu_memory_reserved_pages( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, int]: +) -> Union[list, str]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - header_info = amdsmi_wrapper.amd_metrics_table_header_t() + num_pages = ctypes.c_uint32() + retired_page_record = ctypes.POINTER( + amdsmi_wrapper.amdsmi_retired_page_record_t)() _check_res( - amdsmi_wrapper.amdsmi_get_gpu_metrics_header_info( - ctypes.byref(header_info) + amdsmi_wrapper.amdsmi_get_gpu_memory_reserved_pages( + processor_handle, ctypes.byref(num_pages), retired_page_record ) ) - return { - "structure_size": header_info.structure_size.value, - "format_revision": header_info.format_revision.value, - "content_revision": header_info.content_revision.value - } + table_records = _format_bad_page_info(retired_page_record, num_pages) + if num_pages.value == 0: + return "No bad pages found." + else: + table_records = _format_bad_page_info(retired_page_record, num_pages) + + return table_records diff --git a/py-interface/amdsmi/amdsmi_wrapper.py b/py-interface/amdsmi/amdsmi_wrapper.py index 79125f3..5243dfd 100644 --- a/py-interface/amdsmi/amdsmi_wrapper.py +++ b/py-interface/amdsmi/amdsmi_wrapper.py @@ -23,7 +23,7 @@ import os # -*- coding: utf-8 -*- # -# TARGET arch is: ['-I/usr/lib/llvm-16/lib/clang/16/include', '-DENABLE_ESMI_LIB'] +# TARGET arch is: ['-I/usr/lib/llvm-14/lib/clang/14.0.0/include'] # WORD_SIZE is: 8 # POINTER_SIZE is: 8 # LONGDOUBLE_SIZE is: 16 @@ -168,24 +168,28 @@ def char_pointer_cast(string, encoding='utf-8'): _libraries = {} from pathlib import Path +libamd_smi_cpack = Path("@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/libamd_smi.so") +libamd_smi_optrocm = Path("/opt/rocm/lib/libamd_smi.so") libamd_smi_parent_dir = Path(__file__).resolve().parent / "libamd_smi.so" libamd_smi_cwd = Path(os.environ["ROCM_PATH"]) / "lib" / "libamd_smi.so" -try: - if libamd_smi_parent_dir.is_file(): - # try to fall back to parent directory - _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_parent_dir) - else: - # lastly - search in current working directory - _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cwd) -except OSError as error: - print(error) - print("Unable to find amdsmi library try installing amd-smi-lib from your package manager") +if libamd_smi_cpack.is_file(): + # try to find library in install directory provided by CMake + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cpack) +elif libamd_smi_optrocm.is_file(): + # try /opt/rocm/lib as a fallback + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_optrocm) +elif libamd_smi_parent_dir.is_file(): + # try to fall back to parent directory + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_parent_dir) +else: + # lastly - search in current working directory + _libraries['libamd_smi.so'] = ctypes.CDLL(libamd_smi_cwd) -# values for enumeration 'amdsmi_init_flags_t' -amdsmi_init_flags_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_init_flags_t' +c__EA_amdsmi_init_flags_t__enumvalues = { 0: 'AMDSMI_INIT_ALL_PROCESSORS', 1: 'AMDSMI_INIT_AMD_CPUS', 2: 'AMDSMI_INIT_AMD_GPUS', @@ -197,10 +201,12 @@ def char_pointer_cast(string, encoding='utf-8'): AMDSMI_INIT_AMD_GPUS = 2 AMDSMI_INIT_NON_AMD_CPUS = 4 AMDSMI_INIT_NON_AMD_GPUS = 8 -amdsmi_init_flags_t = ctypes.c_uint32 # enum +c__EA_amdsmi_init_flags_t = ctypes.c_uint32 # enum +amdsmi_init_flags_t = c__EA_amdsmi_init_flags_t +amdsmi_init_flags_t__enumvalues = c__EA_amdsmi_init_flags_t__enumvalues -# values for enumeration 'amdsmi_mm_ip_t' -amdsmi_mm_ip_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_mm_ip_t' +c__EA_amdsmi_mm_ip_t__enumvalues = { 0: 'AMDSMI_MM_UVD', 1: 'AMDSMI_MM_VCE', 2: 'AMDSMI_MM_VCN', @@ -210,41 +216,42 @@ def char_pointer_cast(string, encoding='utf-8'): AMDSMI_MM_VCE = 1 AMDSMI_MM_VCN = 2 AMDSMI_MM__MAX = 3 -amdsmi_mm_ip_t = ctypes.c_uint32 # enum +c__EA_amdsmi_mm_ip_t = ctypes.c_uint32 # enum +amdsmi_mm_ip_t = c__EA_amdsmi_mm_ip_t +amdsmi_mm_ip_t__enumvalues = c__EA_amdsmi_mm_ip_t__enumvalues -# values for enumeration 'amdsmi_container_types_t' -amdsmi_container_types_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_container_types_t' +c__EA_amdsmi_container_types_t__enumvalues = { 0: 'CONTAINER_LXC', 1: 'CONTAINER_DOCKER', } CONTAINER_LXC = 0 CONTAINER_DOCKER = 1 -amdsmi_container_types_t = ctypes.c_uint32 # enum +c__EA_amdsmi_container_types_t = ctypes.c_uint32 # enum +amdsmi_container_types_t = c__EA_amdsmi_container_types_t +amdsmi_container_types_t__enumvalues = c__EA_amdsmi_container_types_t__enumvalues amdsmi_processor_handle = ctypes.POINTER(None) amdsmi_socket_handle = ctypes.POINTER(None) -amdsmi_cpusocket_handle = ctypes.POINTER(None) -# values for enumeration 'processor_type_t' -processor_type_t__enumvalues = { +# values for enumeration 'c__EA_processor_type_t' +c__EA_processor_type_t__enumvalues = { 0: 'UNKNOWN', 1: 'AMD_GPU', 2: 'AMD_CPU', 3: 'NON_AMD_GPU', 4: 'NON_AMD_CPU', - 5: 'AMD_CPU_CORE', - 6: 'AMD_APU', } UNKNOWN = 0 AMD_GPU = 1 AMD_CPU = 2 NON_AMD_GPU = 3 NON_AMD_CPU = 4 -AMD_CPU_CORE = 5 -AMD_APU = 6 -processor_type_t = ctypes.c_uint32 # enum +c__EA_processor_type_t = ctypes.c_uint32 # enum +processor_type_t = c__EA_processor_type_t +processor_type_t__enumvalues = c__EA_processor_type_t__enumvalues -# values for enumeration 'amdsmi_status_t' -amdsmi_status_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_status_t' +c__EA_amdsmi_status_t__enumvalues = { 0: 'AMDSMI_STATUS_SUCCESS', 1: 'AMDSMI_STATUS_INVAL', 2: 'AMDSMI_STATUS_NOT_SUPPORTED', @@ -269,23 +276,10 @@ def char_pointer_cast(string, encoding='utf-8'): 31: 'AMDSMI_STATUS_NOT_FOUND', 32: 'AMDSMI_STATUS_NOT_INIT', 33: 'AMDSMI_STATUS_NO_SLOT', - 34: 'AMDSMI_STATUS_DRIVER_NOT_LOADED', 40: 'AMDSMI_STATUS_NO_DATA', 41: 'AMDSMI_STATUS_INSUFFICIENT_SIZE', 42: 'AMDSMI_STATUS_UNEXPECTED_SIZE', 43: 'AMDSMI_STATUS_UNEXPECTED_DATA', - 44: 'AMDSMI_STATUS_NON_AMD_CPU', - 45: 'AMDSMI_NO_ENERGY_DRV', - 46: 'AMDSMI_NO_MSR_DRV', - 47: 'AMDSMI_NO_HSMP_DRV', - 48: 'AMDSMI_NO_HSMP_SUP', - 49: 'AMDSMI_NO_HSMP_MSG_SUP', - 50: 'AMDSMI_HSMP_TIMEOUT', - 51: 'AMDSMI_NO_DRV', - 52: 'AMDSMI_FILE_NOT_FOUND', - 53: 'AMDSMI_ARG_PTR_NULL', - 54: 'AMDSMI_STATUS_AMDGPU_RESTART_ERR', - 55: 'AMDSMI_STATUS_SETTING_UNAVAILABLE', 4294967294: 'AMDSMI_STATUS_MAP_ERROR', 4294967295: 'AMDSMI_STATUS_UNKNOWN_ERROR', } @@ -313,29 +307,18 @@ def char_pointer_cast(string, encoding='utf-8'): AMDSMI_STATUS_NOT_FOUND = 31 AMDSMI_STATUS_NOT_INIT = 32 AMDSMI_STATUS_NO_SLOT = 33 -AMDSMI_STATUS_DRIVER_NOT_LOADED = 34 AMDSMI_STATUS_NO_DATA = 40 AMDSMI_STATUS_INSUFFICIENT_SIZE = 41 AMDSMI_STATUS_UNEXPECTED_SIZE = 42 AMDSMI_STATUS_UNEXPECTED_DATA = 43 -AMDSMI_STATUS_NON_AMD_CPU = 44 -AMDSMI_NO_ENERGY_DRV = 45 -AMDSMI_NO_MSR_DRV = 46 -AMDSMI_NO_HSMP_DRV = 47 -AMDSMI_NO_HSMP_SUP = 48 -AMDSMI_NO_HSMP_MSG_SUP = 49 -AMDSMI_HSMP_TIMEOUT = 50 -AMDSMI_NO_DRV = 51 -AMDSMI_FILE_NOT_FOUND = 52 -AMDSMI_ARG_PTR_NULL = 53 -AMDSMI_STATUS_AMDGPU_RESTART_ERR = 54 -AMDSMI_STATUS_SETTING_UNAVAILABLE = 55 AMDSMI_STATUS_MAP_ERROR = 4294967294 AMDSMI_STATUS_UNKNOWN_ERROR = 4294967295 -amdsmi_status_t = ctypes.c_uint32 # enum +c__EA_amdsmi_status_t = ctypes.c_uint32 # enum +amdsmi_status_t = c__EA_amdsmi_status_t +amdsmi_status_t__enumvalues = c__EA_amdsmi_status_t__enumvalues -# values for enumeration 'amdsmi_clk_type_t' -amdsmi_clk_type_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_clk_type_t' +c__EA_amdsmi_clk_type_t__enumvalues = { 0: 'CLK_TYPE_SYS', 0: 'CLK_TYPE_FIRST', 0: 'CLK_TYPE_GFX', @@ -363,45 +346,14 @@ def char_pointer_cast(string, encoding='utf-8'): CLK_TYPE_DCLK0 = 8 CLK_TYPE_DCLK1 = 9 CLK_TYPE__MAX = 9 -amdsmi_clk_type_t = ctypes.c_uint32 # enum - -# values for enumeration 'amdsmi_compute_partition_type_t' -amdsmi_compute_partition_type_t__enumvalues = { - 0: 'COMPUTE_PARTITION_INVALID', - 1: 'COMPUTE_PARTITION_CPX', - 2: 'COMPUTE_PARTITION_SPX', - 3: 'COMPUTE_PARTITION_DPX', - 4: 'COMPUTE_PARTITION_TPX', - 5: 'COMPUTE_PARTITION_QPX', -} -COMPUTE_PARTITION_INVALID = 0 -COMPUTE_PARTITION_CPX = 1 -COMPUTE_PARTITION_SPX = 2 -COMPUTE_PARTITION_DPX = 3 -COMPUTE_PARTITION_TPX = 4 -COMPUTE_PARTITION_QPX = 5 -amdsmi_compute_partition_type_t = ctypes.c_uint32 # enum - -# values for enumeration 'amdsmi_memory_partition_type_t' -amdsmi_memory_partition_type_t__enumvalues = { - 0: 'MEMORY_PARTITION_UNKNOWN', - 1: 'MEMORY_PARTITION_NPS1', - 2: 'MEMORY_PARTITION_NPS2', - 3: 'MEMORY_PARTITION_NPS4', - 4: 'MEMORY_PARTITION_NPS8', -} -MEMORY_PARTITION_UNKNOWN = 0 -MEMORY_PARTITION_NPS1 = 1 -MEMORY_PARTITION_NPS2 = 2 -MEMORY_PARTITION_NPS4 = 3 -MEMORY_PARTITION_NPS8 = 4 -amdsmi_memory_partition_type_t = ctypes.c_uint32 # enum - -# values for enumeration 'amdsmi_temperature_type_t' -amdsmi_temperature_type_t__enumvalues = { +c__EA_amdsmi_clk_type_t = ctypes.c_uint32 # enum +amdsmi_clk_type_t = c__EA_amdsmi_clk_type_t +amdsmi_clk_type_t__enumvalues = c__EA_amdsmi_clk_type_t__enumvalues + +# values for enumeration 'c__EA_amdsmi_temperature_type_t' +c__EA_amdsmi_temperature_type_t__enumvalues = { 0: 'TEMPERATURE_TYPE_EDGE', 0: 'TEMPERATURE_TYPE_FIRST', - 1: 'TEMPERATURE_TYPE_HOTSPOT', 1: 'TEMPERATURE_TYPE_JUNCTION', 2: 'TEMPERATURE_TYPE_VRAM', 3: 'TEMPERATURE_TYPE_HBM_0', @@ -413,7 +365,6 @@ def char_pointer_cast(string, encoding='utf-8'): } TEMPERATURE_TYPE_EDGE = 0 TEMPERATURE_TYPE_FIRST = 0 -TEMPERATURE_TYPE_HOTSPOT = 1 TEMPERATURE_TYPE_JUNCTION = 1 TEMPERATURE_TYPE_VRAM = 2 TEMPERATURE_TYPE_HBM_0 = 3 @@ -422,10 +373,12 @@ def char_pointer_cast(string, encoding='utf-8'): TEMPERATURE_TYPE_HBM_3 = 6 TEMPERATURE_TYPE_PLX = 7 TEMPERATURE_TYPE__MAX = 7 -amdsmi_temperature_type_t = ctypes.c_uint32 # enum +c__EA_amdsmi_temperature_type_t = ctypes.c_uint32 # enum +amdsmi_temperature_type_t = c__EA_amdsmi_temperature_type_t +amdsmi_temperature_type_t__enumvalues = c__EA_amdsmi_temperature_type_t__enumvalues -# values for enumeration 'amdsmi_fw_block_t' -amdsmi_fw_block_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_fw_block_t' +c__EA_amdsmi_fw_block_t__enumvalues = { 1: 'FW_ID_SMU', 1: 'FW_ID_FIRST', 2: 'FW_ID_CP_CE', @@ -473,39 +426,38 @@ def char_pointer_cast(string, encoding='utf-8'): 44: 'FW_ID_SDMA_TH0', 45: 'FW_ID_SDMA_TH1', 46: 'FW_ID_CP_MES', - 47: 'FW_ID_MES_KIQ', - 48: 'FW_ID_MES_STACK', - 49: 'FW_ID_MES_THREAD1', - 50: 'FW_ID_MES_THREAD1_STACK', - 51: 'FW_ID_RLX6', - 52: 'FW_ID_RLX6_DRAM_BOOT', - 53: 'FW_ID_RS64_ME', - 54: 'FW_ID_RS64_ME_P0_DATA', - 55: 'FW_ID_RS64_ME_P1_DATA', - 56: 'FW_ID_RS64_PFP', - 57: 'FW_ID_RS64_PFP_P0_DATA', - 58: 'FW_ID_RS64_PFP_P1_DATA', - 59: 'FW_ID_RS64_MEC', - 60: 'FW_ID_RS64_MEC_P0_DATA', - 61: 'FW_ID_RS64_MEC_P1_DATA', - 62: 'FW_ID_RS64_MEC_P2_DATA', - 63: 'FW_ID_RS64_MEC_P3_DATA', - 64: 'FW_ID_PPTABLE', - 65: 'FW_ID_PSP_SOC', - 66: 'FW_ID_PSP_DBG', - 67: 'FW_ID_PSP_INTF', - 68: 'FW_ID_RLX6_CORE1', - 69: 'FW_ID_RLX6_DRAM_BOOT_CORE1', - 70: 'FW_ID_RLCV_LX7', - 71: 'FW_ID_RLC_SAVE_RESTORE_LIST', - 72: 'FW_ID_ASD', - 73: 'FW_ID_TA_RAS', - 74: 'FW_ID_TA_XGMI', - 75: 'FW_ID_RLC_SRLG', - 76: 'FW_ID_RLC_SRLS', - 77: 'FW_ID_PM', - 78: 'FW_ID_DMCU', - 79: 'FW_ID__MAX', + 47: 'FW_ID_MES_STACK', + 48: 'FW_ID_MES_THREAD1', + 49: 'FW_ID_MES_THREAD1_STACK', + 50: 'FW_ID_RLX6', + 51: 'FW_ID_RLX6_DRAM_BOOT', + 52: 'FW_ID_RS64_ME', + 53: 'FW_ID_RS64_ME_P0_DATA', + 54: 'FW_ID_RS64_ME_P1_DATA', + 55: 'FW_ID_RS64_PFP', + 56: 'FW_ID_RS64_PFP_P0_DATA', + 57: 'FW_ID_RS64_PFP_P1_DATA', + 58: 'FW_ID_RS64_MEC', + 59: 'FW_ID_RS64_MEC_P0_DATA', + 60: 'FW_ID_RS64_MEC_P1_DATA', + 61: 'FW_ID_RS64_MEC_P2_DATA', + 62: 'FW_ID_RS64_MEC_P3_DATA', + 63: 'FW_ID_PPTABLE', + 64: 'FW_ID_PSP_SOC', + 65: 'FW_ID_PSP_DBG', + 66: 'FW_ID_PSP_INTF', + 67: 'FW_ID_RLX6_CORE1', + 68: 'FW_ID_RLX6_DRAM_BOOT_CORE1', + 69: 'FW_ID_RLCV_LX7', + 70: 'FW_ID_RLC_SAVE_RESTORE_LIST', + 71: 'FW_ID_ASD', + 72: 'FW_ID_TA_RAS', + 73: 'FW_ID_XGMI', + 74: 'FW_ID_RLC_SRLG', + 75: 'FW_ID_RLC_SRLS', + 76: 'FW_ID_SMC', + 77: 'FW_ID_DMCU', + 78: 'FW_ID__MAX', } FW_ID_SMU = 1 FW_ID_FIRST = 1 @@ -554,120 +506,57 @@ def char_pointer_cast(string, encoding='utf-8'): FW_ID_SDMA_TH0 = 44 FW_ID_SDMA_TH1 = 45 FW_ID_CP_MES = 46 -FW_ID_MES_KIQ = 47 -FW_ID_MES_STACK = 48 -FW_ID_MES_THREAD1 = 49 -FW_ID_MES_THREAD1_STACK = 50 -FW_ID_RLX6 = 51 -FW_ID_RLX6_DRAM_BOOT = 52 -FW_ID_RS64_ME = 53 -FW_ID_RS64_ME_P0_DATA = 54 -FW_ID_RS64_ME_P1_DATA = 55 -FW_ID_RS64_PFP = 56 -FW_ID_RS64_PFP_P0_DATA = 57 -FW_ID_RS64_PFP_P1_DATA = 58 -FW_ID_RS64_MEC = 59 -FW_ID_RS64_MEC_P0_DATA = 60 -FW_ID_RS64_MEC_P1_DATA = 61 -FW_ID_RS64_MEC_P2_DATA = 62 -FW_ID_RS64_MEC_P3_DATA = 63 -FW_ID_PPTABLE = 64 -FW_ID_PSP_SOC = 65 -FW_ID_PSP_DBG = 66 -FW_ID_PSP_INTF = 67 -FW_ID_RLX6_CORE1 = 68 -FW_ID_RLX6_DRAM_BOOT_CORE1 = 69 -FW_ID_RLCV_LX7 = 70 -FW_ID_RLC_SAVE_RESTORE_LIST = 71 -FW_ID_ASD = 72 -FW_ID_TA_RAS = 73 -FW_ID_TA_XGMI = 74 -FW_ID_RLC_SRLG = 75 -FW_ID_RLC_SRLS = 76 -FW_ID_PM = 77 -FW_ID_DMCU = 78 -FW_ID__MAX = 79 -amdsmi_fw_block_t = ctypes.c_uint32 # enum - -# values for enumeration 'amdsmi_vram_type_t' -amdsmi_vram_type_t__enumvalues = { - 0: 'VRAM_TYPE_UNKNOWN', - 1: 'VRAM_TYPE_GDDR1', - 2: 'VRAM_TYPE_DDR2', - 3: 'VRAM_TYPE_GDDR3', - 4: 'VRAM_TYPE_GDDR4', - 5: 'VRAM_TYPE_GDDR5', - 6: 'VRAM_TYPE_HBM', - 7: 'VRAM_TYPE_DDR3', - 8: 'VRAM_TYPE_DDR4', - 9: 'VRAM_TYPE_GDDR6', - 9: 'VRAM_TYPE__MAX', -} -VRAM_TYPE_UNKNOWN = 0 -VRAM_TYPE_GDDR1 = 1 -VRAM_TYPE_DDR2 = 2 -VRAM_TYPE_GDDR3 = 3 -VRAM_TYPE_GDDR4 = 4 -VRAM_TYPE_GDDR5 = 5 -VRAM_TYPE_HBM = 6 -VRAM_TYPE_DDR3 = 7 -VRAM_TYPE_DDR4 = 8 -VRAM_TYPE_GDDR6 = 9 -VRAM_TYPE__MAX = 9 -amdsmi_vram_type_t = ctypes.c_uint32 # enum - -# values for enumeration 'amdsmi_vram_vendor_type_t' -amdsmi_vram_vendor_type_t__enumvalues = { - 0: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER0', - 1: 'AMDSMI_VRAM_VENDOR__SAMSUNG', - 2: 'AMDSMI_VRAM_VENDOR__INFINEON', - 3: 'AMDSMI_VRAM_VENDOR__ELPIDA', - 4: 'AMDSMI_VRAM_VENDOR__ETRON', - 5: 'AMDSMI_VRAM_VENDOR__NANYA', - 6: 'AMDSMI_VRAM_VENDOR__HYNIX', - 7: 'AMDSMI_VRAM_VENDOR__MOSEL', - 8: 'AMDSMI_VRAM_VENDOR__WINBOND', - 9: 'AMDSMI_VRAM_VENDOR__ESMT', - 10: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER1', - 11: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER2', - 12: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER3', - 13: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER4', - 14: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER5', - 15: 'AMDSMI_VRAM_VENDOR__MICRON', -} -AMDSMI_VRAM_VENDOR__PLACEHOLDER0 = 0 -AMDSMI_VRAM_VENDOR__SAMSUNG = 1 -AMDSMI_VRAM_VENDOR__INFINEON = 2 -AMDSMI_VRAM_VENDOR__ELPIDA = 3 -AMDSMI_VRAM_VENDOR__ETRON = 4 -AMDSMI_VRAM_VENDOR__NANYA = 5 -AMDSMI_VRAM_VENDOR__HYNIX = 6 -AMDSMI_VRAM_VENDOR__MOSEL = 7 -AMDSMI_VRAM_VENDOR__WINBOND = 8 -AMDSMI_VRAM_VENDOR__ESMT = 9 -AMDSMI_VRAM_VENDOR__PLACEHOLDER1 = 10 -AMDSMI_VRAM_VENDOR__PLACEHOLDER2 = 11 -AMDSMI_VRAM_VENDOR__PLACEHOLDER3 = 12 -AMDSMI_VRAM_VENDOR__PLACEHOLDER4 = 13 -AMDSMI_VRAM_VENDOR__PLACEHOLDER5 = 14 -AMDSMI_VRAM_VENDOR__MICRON = 15 -amdsmi_vram_vendor_type_t = ctypes.c_uint32 # enum -class struct_amdsmi_range_t(Structure): +FW_ID_MES_STACK = 47 +FW_ID_MES_THREAD1 = 48 +FW_ID_MES_THREAD1_STACK = 49 +FW_ID_RLX6 = 50 +FW_ID_RLX6_DRAM_BOOT = 51 +FW_ID_RS64_ME = 52 +FW_ID_RS64_ME_P0_DATA = 53 +FW_ID_RS64_ME_P1_DATA = 54 +FW_ID_RS64_PFP = 55 +FW_ID_RS64_PFP_P0_DATA = 56 +FW_ID_RS64_PFP_P1_DATA = 57 +FW_ID_RS64_MEC = 58 +FW_ID_RS64_MEC_P0_DATA = 59 +FW_ID_RS64_MEC_P1_DATA = 60 +FW_ID_RS64_MEC_P2_DATA = 61 +FW_ID_RS64_MEC_P3_DATA = 62 +FW_ID_PPTABLE = 63 +FW_ID_PSP_SOC = 64 +FW_ID_PSP_DBG = 65 +FW_ID_PSP_INTF = 66 +FW_ID_RLX6_CORE1 = 67 +FW_ID_RLX6_DRAM_BOOT_CORE1 = 68 +FW_ID_RLCV_LX7 = 69 +FW_ID_RLC_SAVE_RESTORE_LIST = 70 +FW_ID_ASD = 71 +FW_ID_TA_RAS = 72 +FW_ID_XGMI = 73 +FW_ID_RLC_SRLG = 74 +FW_ID_RLC_SRLS = 75 +FW_ID_SMC = 76 +FW_ID_DMCU = 77 +FW_ID__MAX = 78 +c__EA_amdsmi_fw_block_t = ctypes.c_uint32 # enum +amdsmi_fw_block_t = c__EA_amdsmi_fw_block_t +amdsmi_fw_block_t__enumvalues = c__EA_amdsmi_fw_block_t__enumvalues +class struct_c__SA_amdsmi_range_t(Structure): pass -struct_amdsmi_range_t._pack_ = 1 # source:False -struct_amdsmi_range_t._fields_ = [ +struct_c__SA_amdsmi_range_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_range_t._fields_ = [ ('lower_bound', ctypes.c_uint64), ('upper_bound', ctypes.c_uint64), ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_range_t = struct_amdsmi_range_t -class struct_amdsmi_xgmi_info_t(Structure): +amdsmi_range_t = struct_c__SA_amdsmi_range_t +class struct_c__SA_amdsmi_xgmi_info_t(Structure): pass -struct_amdsmi_xgmi_info_t._pack_ = 1 # source:False -struct_amdsmi_xgmi_info_t._fields_ = [ +struct_c__SA_amdsmi_xgmi_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_xgmi_info_t._fields_ = [ ('xgmi_lanes', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), ('xgmi_hive_id', ctypes.c_uint64), @@ -676,55 +565,55 @@ class struct_amdsmi_xgmi_info_t(Structure): ('reserved', ctypes.c_uint32 * 9), ] -amdsmi_xgmi_info_t = struct_amdsmi_xgmi_info_t -class struct_amdsmi_vram_usage_t(Structure): +amdsmi_xgmi_info_t = struct_c__SA_amdsmi_xgmi_info_t +class struct_c__SA_amdsmi_vram_info_t(Structure): pass -struct_amdsmi_vram_usage_t._pack_ = 1 # source:False -struct_amdsmi_vram_usage_t._fields_ = [ +struct_c__SA_amdsmi_vram_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_vram_info_t._fields_ = [ ('vram_total', ctypes.c_uint32), ('vram_used', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 2), ] -amdsmi_vram_usage_t = struct_amdsmi_vram_usage_t -class struct_amdsmi_frequency_range_t(Structure): +amdsmi_vram_info_t = struct_c__SA_amdsmi_vram_info_t +class struct_c__SA_amdsmi_frequency_range_t(Structure): pass -struct_amdsmi_frequency_range_t._pack_ = 1 # source:False -struct_amdsmi_frequency_range_t._fields_ = [ +struct_c__SA_amdsmi_frequency_range_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_frequency_range_t._fields_ = [ ('supported_freq_range', amdsmi_range_t), ('current_freq_range', amdsmi_range_t), ('reserved', ctypes.c_uint32 * 8), ] -amdsmi_frequency_range_t = struct_amdsmi_frequency_range_t -class union_amdsmi_bdf_t(Union): +amdsmi_frequency_range_t = struct_c__SA_amdsmi_frequency_range_t +class union_c__UA_amdsmi_bdf_t(Union): pass -class struct_fields_(Structure): +class struct_c__UA_amdsmi_bdf_t_0(Structure): pass -struct_fields_._pack_ = 1 # source:False -struct_fields_._fields_ = [ +struct_c__UA_amdsmi_bdf_t_0._pack_ = 1 # source:False +struct_c__UA_amdsmi_bdf_t_0._fields_ = [ ('function_number', ctypes.c_uint64, 3), ('device_number', ctypes.c_uint64, 5), ('bus_number', ctypes.c_uint64, 8), ('domain_number', ctypes.c_uint64, 48), ] -union_amdsmi_bdf_t._pack_ = 1 # source:False -union_amdsmi_bdf_t._fields_ = [ - ('fields', struct_fields_), +union_c__UA_amdsmi_bdf_t._pack_ = 1 # source:False +union_c__UA_amdsmi_bdf_t._fields_ = [ + ('c__UA_amdsmi_bdf_t_0', struct_c__UA_amdsmi_bdf_t_0), ('as_uint', ctypes.c_uint64), ] -amdsmi_bdf_t = union_amdsmi_bdf_t -class struct_amdsmi_power_cap_info_t(Structure): +amdsmi_bdf_t = union_c__UA_amdsmi_bdf_t +class struct_c__SA_amdsmi_power_cap_info_t(Structure): pass -struct_amdsmi_power_cap_info_t._pack_ = 1 # source:False -struct_amdsmi_power_cap_info_t._fields_ = [ +struct_c__SA_amdsmi_power_cap_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_power_cap_info_t._fields_ = [ ('power_cap', ctypes.c_uint64), ('default_power_cap', ctypes.c_uint64), ('dpm_cap', ctypes.c_uint64), @@ -733,12 +622,12 @@ class struct_amdsmi_power_cap_info_t(Structure): ('reserved', ctypes.c_uint64 * 3), ] -amdsmi_power_cap_info_t = struct_amdsmi_power_cap_info_t -class struct_amdsmi_vbios_info_t(Structure): +amdsmi_power_cap_info_t = struct_c__SA_amdsmi_power_cap_info_t +class struct_c__SA_amdsmi_vbios_info_t(Structure): pass -struct_amdsmi_vbios_info_t._pack_ = 1 # source:False -struct_amdsmi_vbios_info_t._fields_ = [ +struct_c__SA_amdsmi_vbios_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_vbios_info_t._fields_ = [ ('name', ctypes.c_char * 64), ('build_date', ctypes.c_char * 32), ('part_number', ctypes.c_char * 64), @@ -746,127 +635,67 @@ class struct_amdsmi_vbios_info_t(Structure): ('reserved', ctypes.c_uint32 * 16), ] -amdsmi_vbios_info_t = struct_amdsmi_vbios_info_t - -# values for enumeration 'amdsmi_cache_flags_type_t' -amdsmi_cache_flags_type_t__enumvalues = { - 1: 'CACHE_FLAGS_ENABLED', - 2: 'CACHE_FLAGS_DATA_CACHE', - 4: 'CACHE_FLAGS_INST_CACHE', - 8: 'CACHE_FLAGS_CPU_CACHE', - 16: 'CACHE_FLAGS_SIMD_CACHE', -} -CACHE_FLAGS_ENABLED = 1 -CACHE_FLAGS_DATA_CACHE = 2 -CACHE_FLAGS_INST_CACHE = 4 -CACHE_FLAGS_CPU_CACHE = 8 -CACHE_FLAGS_SIMD_CACHE = 16 -amdsmi_cache_flags_type_t = ctypes.c_uint32 # enum -class struct_amdsmi_gpu_cache_info_t(Structure): +amdsmi_vbios_info_t = struct_c__SA_amdsmi_vbios_info_t +class struct_c__SA_amdsmi_fw_info_t(Structure): pass -class struct_cache_(Structure): +class struct_c__SA_amdsmi_fw_info_t_0(Structure): pass -struct_cache_._pack_ = 1 # source:False -struct_cache_._fields_ = [ - ('cache_size_kb', ctypes.c_uint32), - ('cache_level', ctypes.c_uint32), - ('flags', ctypes.c_uint32), - ('reserved', ctypes.c_uint32 * 3), -] - -struct_amdsmi_gpu_cache_info_t._pack_ = 1 # source:False -struct_amdsmi_gpu_cache_info_t._fields_ = [ - ('num_cache_types', ctypes.c_uint32), - ('cache', struct_cache_ * 10), - ('reserved', ctypes.c_uint32 * 15), -] - -amdsmi_gpu_cache_info_t = struct_amdsmi_gpu_cache_info_t -class struct_amdsmi_fw_info_t(Structure): - pass - -class struct_fw_info_list_(Structure): - pass - -struct_fw_info_list_._pack_ = 1 # source:False -struct_fw_info_list_._fields_ = [ +struct_c__SA_amdsmi_fw_info_t_0._pack_ = 1 # source:False +struct_c__SA_amdsmi_fw_info_t_0._fields_ = [ ('fw_id', amdsmi_fw_block_t), ('PADDING_0', ctypes.c_ubyte * 4), ('fw_version', ctypes.c_uint64), ('reserved', ctypes.c_uint64 * 2), ] -struct_amdsmi_fw_info_t._pack_ = 1 # source:False -struct_amdsmi_fw_info_t._fields_ = [ +struct_c__SA_amdsmi_fw_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_fw_info_t._fields_ = [ ('num_fw_info', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), - ('fw_info_list', struct_fw_info_list_ * 79), + ('fw_info_list', struct_c__SA_amdsmi_fw_info_t_0 * 78), ('reserved', ctypes.c_uint32 * 7), ('PADDING_1', ctypes.c_ubyte * 4), ] -amdsmi_fw_info_t = struct_amdsmi_fw_info_t -class struct_amdsmi_asic_info_t(Structure): +amdsmi_fw_info_t = struct_c__SA_amdsmi_fw_info_t +class struct_c__SA_amdsmi_asic_info_t(Structure): pass -struct_amdsmi_asic_info_t._pack_ = 1 # source:False -struct_amdsmi_asic_info_t._fields_ = [ +struct_c__SA_amdsmi_asic_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_asic_info_t._fields_ = [ ('market_name', ctypes.c_char * 64), ('vendor_id', ctypes.c_uint32), - ('vendor_name', ctypes.c_char * 64), ('subvendor_id', ctypes.c_uint32), ('device_id', ctypes.c_uint64), ('rev_id', ctypes.c_uint32), ('asic_serial', ctypes.c_char * 32), - ('xgmi_physical_id', ctypes.c_uint16), - ('reserved', ctypes.c_uint16 * 37), -] - -amdsmi_asic_info_t = struct_amdsmi_asic_info_t -class struct_amdsmi_vram_info_t(Structure): - pass - -struct_amdsmi_vram_info_t._pack_ = 1 # source:False -struct_amdsmi_vram_info_t._fields_ = [ - ('vram_type', amdsmi_vram_type_t), - ('vram_vendor', amdsmi_vram_vendor_type_t), - ('vram_size_mb', ctypes.c_uint64), -] - -amdsmi_vram_info_t = struct_amdsmi_vram_info_t -class struct_amdsmi_driver_info_t(Structure): - pass - -struct_amdsmi_driver_info_t._pack_ = 1 # source:False -struct_amdsmi_driver_info_t._fields_ = [ - ('driver_name', ctypes.c_char * 64), - ('driver_version', ctypes.c_char * 64), - ('driver_date', ctypes.c_char * 64), + ('reserved', ctypes.c_uint32 * 3), ] -amdsmi_driver_info_t = struct_amdsmi_driver_info_t -class struct_amdsmi_board_info_t(Structure): +amdsmi_asic_info_t = struct_c__SA_amdsmi_asic_info_t +class struct_c__SA_amdsmi_board_info_t(Structure): pass -struct_amdsmi_board_info_t._pack_ = 1 # source:False -struct_amdsmi_board_info_t._fields_ = [ +struct_c__SA_amdsmi_board_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_board_info_t._fields_ = [ + ('serial_number', ctypes.c_uint64), ('is_master', ctypes.c_bool), ('model_number', ctypes.c_char * 32), ('product_serial', ctypes.c_char * 32), ('fru_id', ctypes.c_char * 32), - ('manufacturer_name', ctypes.c_char * 32), ('product_name', ctypes.c_char * 128), + ('manufacturer_name', ctypes.c_char * 32), + ('PADDING_0', ctypes.c_ubyte * 7), ] -amdsmi_board_info_t = struct_amdsmi_board_info_t -class struct_amdsmi_power_info_t(Structure): +amdsmi_board_info_t = struct_c__SA_amdsmi_board_info_t +class struct_c__SA_amdsmi_power_info_t(Structure): pass -struct_amdsmi_power_info_t._pack_ = 1 # source:False -struct_amdsmi_power_info_t._fields_ = [ - ('current_socket_power', ctypes.c_uint32), +struct_c__SA_amdsmi_power_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_power_info_t._fields_ = [ ('average_socket_power', ctypes.c_uint32), ('gfx_voltage', ctypes.c_uint32), ('soc_voltage', ctypes.c_uint32), @@ -875,73 +704,72 @@ class struct_amdsmi_power_info_t(Structure): ('reserved', ctypes.c_uint32 * 11), ] -amdsmi_power_info_t = struct_amdsmi_power_info_t -class struct_amdsmi_clk_info_t(Structure): +amdsmi_power_info_t = struct_c__SA_amdsmi_power_info_t +class struct_c__SA_amdsmi_clk_info_t(Structure): pass -struct_amdsmi_clk_info_t._pack_ = 1 # source:False -struct_amdsmi_clk_info_t._fields_ = [ +struct_c__SA_amdsmi_clk_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_clk_info_t._fields_ = [ ('cur_clk', ctypes.c_uint32), ('min_clk', ctypes.c_uint32), ('max_clk', ctypes.c_uint32), - ('sleep_clk', ctypes.c_uint32), - ('reserved', ctypes.c_uint32 * 4), + ('reserved', ctypes.c_uint32 * 5), ] -amdsmi_clk_info_t = struct_amdsmi_clk_info_t -class struct_amdsmi_engine_usage_t(Structure): +amdsmi_clk_info_t = struct_c__SA_amdsmi_clk_info_t +class struct_c__SA_amdsmi_engine_usage_t(Structure): pass -struct_amdsmi_engine_usage_t._pack_ = 1 # source:False -struct_amdsmi_engine_usage_t._fields_ = [ +struct_c__SA_amdsmi_engine_usage_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_engine_usage_t._fields_ = [ ('gfx_activity', ctypes.c_uint32), ('umc_activity', ctypes.c_uint32), ('mm_activity', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 13), ] -amdsmi_engine_usage_t = struct_amdsmi_engine_usage_t +amdsmi_engine_usage_t = struct_c__SA_amdsmi_engine_usage_t amdsmi_process_handle_t = ctypes.c_uint32 -class struct_amdsmi_proc_info_t(Structure): +class struct_c__SA_amdsmi_proc_info_t(Structure): pass -class struct_memory_usage_(Structure): +class struct_c__SA_amdsmi_proc_info_t_0(Structure): pass -struct_memory_usage_._pack_ = 1 # source:False -struct_memory_usage_._fields_ = [ - ('gtt_mem', ctypes.c_uint64), - ('cpu_mem', ctypes.c_uint64), - ('vram_mem', ctypes.c_uint64), - ('reserved', ctypes.c_uint32 * 10), +struct_c__SA_amdsmi_proc_info_t_0._pack_ = 1 # source:False +struct_c__SA_amdsmi_proc_info_t_0._fields_ = [ + ('gfx', ctypes.c_uint64), + ('enc', ctypes.c_uint64), + ('reserved', ctypes.c_uint32 * 12), ] -class struct_engine_usage_(Structure): +class struct_c__SA_amdsmi_proc_info_t_1(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_c__SA_amdsmi_proc_info_t_1._pack_ = 1 # source:False +struct_c__SA_amdsmi_proc_info_t_1._fields_ = [ + ('gtt_mem', ctypes.c_uint64), + ('cpu_mem', ctypes.c_uint64), + ('vram_mem', ctypes.c_uint64), + ('reserved', ctypes.c_uint32 * 10), ] -struct_amdsmi_proc_info_t._pack_ = 1 # source:False -struct_amdsmi_proc_info_t._fields_ = [ +struct_c__SA_amdsmi_proc_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_proc_info_t._fields_ = [ ('name', ctypes.c_char * 32), ('pid', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ('mem', ctypes.c_uint64), - ('engine_usage', struct_engine_usage_), - ('memory_usage', struct_memory_usage_), + ('engine_usage', struct_c__SA_amdsmi_proc_info_t_0), + ('memory_usage', struct_c__SA_amdsmi_proc_info_t_1), ('container_name', ctypes.c_char * 32), ('reserved', ctypes.c_uint32 * 4), ] -amdsmi_proc_info_t = struct_amdsmi_proc_info_t +amdsmi_proc_info_t = struct_c__SA_amdsmi_proc_info_t -# values for enumeration 'amdsmi_dev_perf_level_t' -amdsmi_dev_perf_level_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_dev_perf_level_t' +c__EA_amdsmi_dev_perf_level_t__enumvalues = { 0: 'AMDSMI_DEV_PERF_LEVEL_AUTO', 0: 'AMDSMI_DEV_PERF_LEVEL_FIRST', 1: 'AMDSMI_DEV_PERF_LEVEL_LOW', @@ -967,11 +795,13 @@ class struct_engine_usage_(Structure): AMDSMI_DEV_PERF_LEVEL_DETERMINISM = 8 AMDSMI_DEV_PERF_LEVEL_LAST = 8 AMDSMI_DEV_PERF_LEVEL_UNKNOWN = 256 -amdsmi_dev_perf_level_t = ctypes.c_uint32 # enum +c__EA_amdsmi_dev_perf_level_t = ctypes.c_uint32 # enum +amdsmi_dev_perf_level_t = c__EA_amdsmi_dev_perf_level_t +amdsmi_dev_perf_level_t__enumvalues = c__EA_amdsmi_dev_perf_level_t__enumvalues amdsmi_event_handle_t = ctypes.c_uint64 -# values for enumeration 'amdsmi_event_group_t' -amdsmi_event_group_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_event_group_t' +c__EA_amdsmi_event_group_t__enumvalues = { 0: 'AMDSMI_EVNT_GRP_XGMI', 10: 'AMDSMI_EVNT_GRP_XGMI_DATA_OUT', 4294967295: 'AMDSMI_EVNT_GRP_INVALID', @@ -979,10 +809,12 @@ class struct_engine_usage_(Structure): AMDSMI_EVNT_GRP_XGMI = 0 AMDSMI_EVNT_GRP_XGMI_DATA_OUT = 10 AMDSMI_EVNT_GRP_INVALID = 4294967295 -amdsmi_event_group_t = ctypes.c_uint32 # enum +c__EA_amdsmi_event_group_t = ctypes.c_uint32 # enum +amdsmi_event_group_t = c__EA_amdsmi_event_group_t +amdsmi_event_group_t__enumvalues = c__EA_amdsmi_event_group_t__enumvalues -# values for enumeration 'amdsmi_event_type_t' -amdsmi_event_type_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_event_type_t' +c__EA_amdsmi_event_type_t__enumvalues = { 0: 'AMDSMI_EVNT_FIRST', 0: 'AMDSMI_EVNT_XGMI_FIRST', 0: 'AMDSMI_EVNT_XGMI_0_NOP_TX', @@ -1024,30 +856,34 @@ class struct_engine_usage_(Structure): AMDSMI_EVNT_XGMI_DATA_OUT_5 = 15 AMDSMI_EVNT_XGMI_DATA_OUT_LAST = 15 AMDSMI_EVNT_LAST = 15 -amdsmi_event_type_t = ctypes.c_uint32 # enum +c__EA_amdsmi_event_type_t = ctypes.c_uint32 # enum +amdsmi_event_type_t = c__EA_amdsmi_event_type_t +amdsmi_event_type_t__enumvalues = c__EA_amdsmi_event_type_t__enumvalues -# values for enumeration 'amdsmi_counter_command_t' -amdsmi_counter_command_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_counter_command_t' +c__EA_amdsmi_counter_command_t__enumvalues = { 0: 'AMDSMI_CNTR_CMD_START', 1: 'AMDSMI_CNTR_CMD_STOP', } AMDSMI_CNTR_CMD_START = 0 AMDSMI_CNTR_CMD_STOP = 1 -amdsmi_counter_command_t = ctypes.c_uint32 # enum -class struct_amdsmi_counter_value_t(Structure): +c__EA_amdsmi_counter_command_t = ctypes.c_uint32 # enum +amdsmi_counter_command_t = c__EA_amdsmi_counter_command_t +amdsmi_counter_command_t__enumvalues = c__EA_amdsmi_counter_command_t__enumvalues +class struct_c__SA_amdsmi_counter_value_t(Structure): pass -struct_amdsmi_counter_value_t._pack_ = 1 # source:False -struct_amdsmi_counter_value_t._fields_ = [ +struct_c__SA_amdsmi_counter_value_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_counter_value_t._fields_ = [ ('value', ctypes.c_uint64), ('time_enabled', ctypes.c_uint64), ('time_running', ctypes.c_uint64), ] -amdsmi_counter_value_t = struct_amdsmi_counter_value_t +amdsmi_counter_value_t = struct_c__SA_amdsmi_counter_value_t -# values for enumeration 'amdsmi_evt_notification_type_t' -amdsmi_evt_notification_type_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_evt_notification_type_t' +c__EA_amdsmi_evt_notification_type_t__enumvalues = { 1: 'AMDSMI_EVT_NOTIF_VMFAULT', 1: 'AMDSMI_EVT_NOTIF_FIRST', 2: 'AMDSMI_EVT_NOTIF_THERMAL_THROTTLE', @@ -1061,22 +897,24 @@ class struct_amdsmi_counter_value_t(Structure): AMDSMI_EVT_NOTIF_GPU_PRE_RESET = 3 AMDSMI_EVT_NOTIF_GPU_POST_RESET = 4 AMDSMI_EVT_NOTIF_LAST = 4 -amdsmi_evt_notification_type_t = ctypes.c_uint32 # enum -class struct_amdsmi_evt_notification_data_t(Structure): +c__EA_amdsmi_evt_notification_type_t = ctypes.c_uint32 # enum +amdsmi_evt_notification_type_t = c__EA_amdsmi_evt_notification_type_t +amdsmi_evt_notification_type_t__enumvalues = c__EA_amdsmi_evt_notification_type_t__enumvalues +class struct_c__SA_amdsmi_evt_notification_data_t(Structure): pass -struct_amdsmi_evt_notification_data_t._pack_ = 1 # source:False -struct_amdsmi_evt_notification_data_t._fields_ = [ +struct_c__SA_amdsmi_evt_notification_data_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_evt_notification_data_t._fields_ = [ ('processor_handle', ctypes.POINTER(None)), ('event', amdsmi_evt_notification_type_t), ('message', ctypes.c_char * 64), ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_evt_notification_data_t = struct_amdsmi_evt_notification_data_t +amdsmi_evt_notification_data_t = struct_c__SA_amdsmi_evt_notification_data_t -# values for enumeration 'amdsmi_temperature_metric_t' -amdsmi_temperature_metric_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_temperature_metric_t' +c__EA_amdsmi_temperature_metric_t__enumvalues = { 0: 'AMDSMI_TEMP_CURRENT', 0: 'AMDSMI_TEMP_FIRST', 1: 'AMDSMI_TEMP_MAX', @@ -1110,10 +948,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_TEMP_LOWEST = 12 AMDSMI_TEMP_HIGHEST = 13 AMDSMI_TEMP_LAST = 13 -amdsmi_temperature_metric_t = ctypes.c_uint32 # enum +c__EA_amdsmi_temperature_metric_t = ctypes.c_uint32 # enum +amdsmi_temperature_metric_t = c__EA_amdsmi_temperature_metric_t +amdsmi_temperature_metric_t__enumvalues = c__EA_amdsmi_temperature_metric_t__enumvalues -# values for enumeration 'amdsmi_voltage_metric_t' -amdsmi_voltage_metric_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_voltage_metric_t' +c__EA_amdsmi_voltage_metric_t__enumvalues = { 0: 'AMDSMI_VOLT_CURRENT', 0: 'AMDSMI_VOLT_FIRST', 1: 'AMDSMI_VOLT_MAX', @@ -1135,10 +975,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_VOLT_LOWEST = 6 AMDSMI_VOLT_HIGHEST = 7 AMDSMI_VOLT_LAST = 7 -amdsmi_voltage_metric_t = ctypes.c_uint32 # enum +c__EA_amdsmi_voltage_metric_t = ctypes.c_uint32 # enum +amdsmi_voltage_metric_t = c__EA_amdsmi_voltage_metric_t +amdsmi_voltage_metric_t__enumvalues = c__EA_amdsmi_voltage_metric_t__enumvalues -# values for enumeration 'amdsmi_voltage_type_t' -amdsmi_voltage_type_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_voltage_type_t' +c__EA_amdsmi_voltage_type_t__enumvalues = { 0: 'AMDSMI_VOLT_TYPE_FIRST', 0: 'AMDSMI_VOLT_TYPE_VDDGFX', 0: 'AMDSMI_VOLT_TYPE_LAST', @@ -1148,10 +990,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_VOLT_TYPE_VDDGFX = 0 AMDSMI_VOLT_TYPE_LAST = 0 AMDSMI_VOLT_TYPE_INVALID = 4294967295 -amdsmi_voltage_type_t = ctypes.c_uint32 # enum +c__EA_amdsmi_voltage_type_t = ctypes.c_uint32 # enum +amdsmi_voltage_type_t = c__EA_amdsmi_voltage_type_t +amdsmi_voltage_type_t__enumvalues = c__EA_amdsmi_voltage_type_t__enumvalues -# values for enumeration 'amdsmi_power_profile_preset_masks_t' -amdsmi_power_profile_preset_masks_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_power_profile_preset_masks_t' +c__EA_amdsmi_power_profile_preset_masks_t__enumvalues = { 1: 'AMDSMI_PWR_PROF_PRST_CUSTOM_MASK', 2: 'AMDSMI_PWR_PROF_PRST_VIDEO_MASK', 4: 'AMDSMI_PWR_PROF_PRST_POWER_SAVING_MASK', @@ -1171,10 +1015,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_PWR_PROF_PRST_BOOTUP_DEFAULT = 64 AMDSMI_PWR_PROF_PRST_LAST = 64 AMDSMI_PWR_PROF_PRST_INVALID = 18446744073709551615 -amdsmi_power_profile_preset_masks_t = ctypes.c_uint64 # enum +c__EA_amdsmi_power_profile_preset_masks_t = ctypes.c_uint64 # enum +amdsmi_power_profile_preset_masks_t = c__EA_amdsmi_power_profile_preset_masks_t +amdsmi_power_profile_preset_masks_t__enumvalues = c__EA_amdsmi_power_profile_preset_masks_t__enumvalues -# values for enumeration 'amdsmi_gpu_block_t' -amdsmi_gpu_block_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_gpu_block_t' +c__EA_amdsmi_gpu_block_t__enumvalues = { 0: 'AMDSMI_GPU_BLOCK_INVALID', 1: 'AMDSMI_GPU_BLOCK_FIRST', 1: 'AMDSMI_GPU_BLOCK_UMC', @@ -1212,10 +1058,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_GPU_BLOCK_FUSE = 8192 AMDSMI_GPU_BLOCK_LAST = 8192 AMDSMI_GPU_BLOCK_RESERVED = 9223372036854775808 -amdsmi_gpu_block_t = ctypes.c_uint64 # enum +c__EA_amdsmi_gpu_block_t = ctypes.c_uint64 # enum +amdsmi_gpu_block_t = c__EA_amdsmi_gpu_block_t +amdsmi_gpu_block_t__enumvalues = c__EA_amdsmi_gpu_block_t__enumvalues -# values for enumeration 'amdsmi_ras_err_state_t' -amdsmi_ras_err_state_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_ras_err_state_t' +c__EA_amdsmi_ras_err_state_t__enumvalues = { 0: 'AMDSMI_RAS_ERR_STATE_NONE', 1: 'AMDSMI_RAS_ERR_STATE_DISABLED', 2: 'AMDSMI_RAS_ERR_STATE_PARITY', @@ -1235,10 +1083,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_RAS_ERR_STATE_ENABLED = 6 AMDSMI_RAS_ERR_STATE_LAST = 6 AMDSMI_RAS_ERR_STATE_INVALID = 4294967295 -amdsmi_ras_err_state_t = ctypes.c_uint32 # enum +c__EA_amdsmi_ras_err_state_t = ctypes.c_uint32 # enum +amdsmi_ras_err_state_t = c__EA_amdsmi_ras_err_state_t +amdsmi_ras_err_state_t__enumvalues = c__EA_amdsmi_ras_err_state_t__enumvalues -# values for enumeration 'amdsmi_memory_type_t' -amdsmi_memory_type_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_memory_type_t' +c__EA_amdsmi_memory_type_t__enumvalues = { 0: 'AMDSMI_MEM_TYPE_FIRST', 0: 'AMDSMI_MEM_TYPE_VRAM', 1: 'AMDSMI_MEM_TYPE_VIS_VRAM', @@ -1250,10 +1100,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_MEM_TYPE_VIS_VRAM = 1 AMDSMI_MEM_TYPE_GTT = 2 AMDSMI_MEM_TYPE_LAST = 2 -amdsmi_memory_type_t = ctypes.c_uint32 # enum +c__EA_amdsmi_memory_type_t = ctypes.c_uint32 # enum +amdsmi_memory_type_t = c__EA_amdsmi_memory_type_t +amdsmi_memory_type_t__enumvalues = c__EA_amdsmi_memory_type_t__enumvalues -# values for enumeration 'amdsmi_freq_ind_t' -amdsmi_freq_ind_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_freq_ind_t' +c__EA_amdsmi_freq_ind_t__enumvalues = { 0: 'AMDSMI_FREQ_IND_MIN', 1: 'AMDSMI_FREQ_IND_MAX', 4294967295: 'AMDSMI_FREQ_IND_INVALID', @@ -1261,10 +1113,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_FREQ_IND_MIN = 0 AMDSMI_FREQ_IND_MAX = 1 AMDSMI_FREQ_IND_INVALID = 4294967295 -amdsmi_freq_ind_t = ctypes.c_uint32 # enum +c__EA_amdsmi_freq_ind_t = ctypes.c_uint32 # enum +amdsmi_freq_ind_t = c__EA_amdsmi_freq_ind_t +amdsmi_freq_ind_t__enumvalues = c__EA_amdsmi_freq_ind_t__enumvalues -# values for enumeration 'amdsmi_xgmi_status_t' -amdsmi_xgmi_status_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_xgmi_status_t' +c__EA_amdsmi_xgmi_status_t__enumvalues = { 0: 'AMDSMI_XGMI_STATUS_NO_ERRORS', 1: 'AMDSMI_XGMI_STATUS_ERROR', 2: 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS', @@ -1272,11 +1126,13 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_XGMI_STATUS_NO_ERRORS = 0 AMDSMI_XGMI_STATUS_ERROR = 1 AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS = 2 -amdsmi_xgmi_status_t = ctypes.c_uint32 # enum +c__EA_amdsmi_xgmi_status_t = ctypes.c_uint32 # enum +amdsmi_xgmi_status_t = c__EA_amdsmi_xgmi_status_t +amdsmi_xgmi_status_t__enumvalues = c__EA_amdsmi_xgmi_status_t__enumvalues amdsmi_bit_field_t = ctypes.c_uint64 -# values for enumeration 'amdsmi_memory_page_status_t' -amdsmi_memory_page_status_t__enumvalues = { +# values for enumeration 'c__EA_amdsmi_memory_page_status_t' +c__EA_amdsmi_memory_page_status_t__enumvalues = { 0: 'AMDSMI_MEM_PAGE_STATUS_RESERVED', 1: 'AMDSMI_MEM_PAGE_STATUS_PENDING', 2: 'AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE', @@ -1284,10 +1140,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_MEM_PAGE_STATUS_RESERVED = 0 AMDSMI_MEM_PAGE_STATUS_PENDING = 1 AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE = 2 -amdsmi_memory_page_status_t = ctypes.c_uint32 # enum +c__EA_amdsmi_memory_page_status_t = ctypes.c_uint32 # enum +amdsmi_memory_page_status_t = c__EA_amdsmi_memory_page_status_t +amdsmi_memory_page_status_t__enumvalues = c__EA_amdsmi_memory_page_status_t__enumvalues -# values for enumeration 'amdsmi_io_link_type_t' -amdsmi_io_link_type_t__enumvalues = { +# values for enumeration 'c__EA_AMDSMI_IO_LINK_TYPE' +c__EA_AMDSMI_IO_LINK_TYPE__enumvalues = { 0: 'AMDSMI_IOLINK_TYPE_UNDEFINED', 1: 'AMDSMI_IOLINK_TYPE_PCIEXPRESS', 2: 'AMDSMI_IOLINK_TYPE_XGMI', @@ -1299,10 +1157,12 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_IOLINK_TYPE_XGMI = 2 AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES = 3 AMDSMI_IOLINK_TYPE_SIZE = 4294967295 -amdsmi_io_link_type_t = ctypes.c_uint32 # enum +c__EA_AMDSMI_IO_LINK_TYPE = ctypes.c_uint32 # enum +AMDSMI_IO_LINK_TYPE = c__EA_AMDSMI_IO_LINK_TYPE +AMDSMI_IO_LINK_TYPE__enumvalues = c__EA_AMDSMI_IO_LINK_TYPE__enumvalues -# values for enumeration 'amdsmi_utilization_counter_type_t' -amdsmi_utilization_counter_type_t__enumvalues = { +# values for enumeration 'c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE' +c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues = { 0: 'AMDSMI_UTILIZATION_COUNTER_FIRST', 0: 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', 1: 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', @@ -1312,121 +1172,109 @@ class struct_amdsmi_evt_notification_data_t(Structure): AMDSMI_COARSE_GRAIN_GFX_ACTIVITY = 0 AMDSMI_COARSE_GRAIN_MEM_ACTIVITY = 1 AMDSMI_UTILIZATION_COUNTER_LAST = 1 -amdsmi_utilization_counter_type_t = ctypes.c_uint32 # enum - -# values for enumeration 'amdsmi_power_type_t' -amdsmi_power_type_t__enumvalues = { - 0: 'AMDSMI_AVERAGE_POWER', - 1: 'AMDSMI_CURRENT_POWER', - 4294967295: 'AMDSMI_INVALID_POWER', -} -AMDSMI_AVERAGE_POWER = 0 -AMDSMI_CURRENT_POWER = 1 -AMDSMI_INVALID_POWER = 4294967295 -amdsmi_power_type_t = ctypes.c_uint32 # enum -class struct_amdsmi_utilization_counter_t(Structure): +c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE = ctypes.c_uint32 # enum +AMDSMI_UTILIZATION_COUNTER_TYPE = c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE +AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues = c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues +class struct_c__SA_amdsmi_utilization_counter_t(Structure): pass -struct_amdsmi_utilization_counter_t._pack_ = 1 # source:False -struct_amdsmi_utilization_counter_t._fields_ = [ - ('type', amdsmi_utilization_counter_type_t), +struct_c__SA_amdsmi_utilization_counter_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_utilization_counter_t._fields_ = [ + ('type', AMDSMI_UTILIZATION_COUNTER_TYPE), ('PADDING_0', ctypes.c_ubyte * 4), ('value', ctypes.c_uint64), ] -amdsmi_utilization_counter_t = struct_amdsmi_utilization_counter_t -class struct_amdsmi_retired_page_record_t(Structure): +amdsmi_utilization_counter_t = struct_c__SA_amdsmi_utilization_counter_t +class struct_c__SA_amdsmi_retired_page_record_t(Structure): pass -struct_amdsmi_retired_page_record_t._pack_ = 1 # source:False -struct_amdsmi_retired_page_record_t._fields_ = [ +struct_c__SA_amdsmi_retired_page_record_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_retired_page_record_t._fields_ = [ ('page_address', ctypes.c_uint64), ('page_size', ctypes.c_uint64), ('status', amdsmi_memory_page_status_t), ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_retired_page_record_t = struct_amdsmi_retired_page_record_t -class struct_amdsmi_power_profile_status_t(Structure): +amdsmi_retired_page_record_t = struct_c__SA_amdsmi_retired_page_record_t +class struct_c__SA_amdsmi_power_profile_status_t(Structure): pass -struct_amdsmi_power_profile_status_t._pack_ = 1 # source:False -struct_amdsmi_power_profile_status_t._fields_ = [ +struct_c__SA_amdsmi_power_profile_status_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_power_profile_status_t._fields_ = [ ('available_profiles', ctypes.c_uint64), ('current', amdsmi_power_profile_preset_masks_t), ('num_profiles', ctypes.c_uint32), ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_power_profile_status_t = struct_amdsmi_power_profile_status_t -class struct_amdsmi_frequencies_t(Structure): +amdsmi_power_profile_status_t = struct_c__SA_amdsmi_power_profile_status_t +class struct_c__SA_amdsmi_frequencies_t(Structure): pass -struct_amdsmi_frequencies_t._pack_ = 1 # source:False -struct_amdsmi_frequencies_t._fields_ = [ - ('has_deep_sleep', ctypes.c_bool), - ('PADDING_0', ctypes.c_ubyte * 3), +struct_c__SA_amdsmi_frequencies_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_frequencies_t._fields_ = [ ('num_supported', ctypes.c_uint32), ('current', ctypes.c_uint32), - ('PADDING_1', ctypes.c_ubyte * 4), - ('frequency', ctypes.c_uint64 * 33), + ('frequency', ctypes.c_uint64 * 32), ] -amdsmi_frequencies_t = struct_amdsmi_frequencies_t -class struct_amdsmi_pcie_bandwidth_t(Structure): +amdsmi_frequencies_t = struct_c__SA_amdsmi_frequencies_t +class struct_c__SA_amdsmi_pcie_bandwidth_t(Structure): pass -struct_amdsmi_pcie_bandwidth_t._pack_ = 1 # source:False -struct_amdsmi_pcie_bandwidth_t._fields_ = [ +struct_c__SA_amdsmi_pcie_bandwidth_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_pcie_bandwidth_t._fields_ = [ ('transfer_rate', amdsmi_frequencies_t), - ('lanes', ctypes.c_uint32 * 33), - ('PADDING_0', ctypes.c_ubyte * 4), + ('lanes', ctypes.c_uint32 * 32), ] -amdsmi_pcie_bandwidth_t = struct_amdsmi_pcie_bandwidth_t -class struct_amdsmi_version_t(Structure): +amdsmi_pcie_bandwidth_t = struct_c__SA_amdsmi_pcie_bandwidth_t +class struct_c__SA_amdsmi_version_t(Structure): pass -struct_amdsmi_version_t._pack_ = 1 # source:False -struct_amdsmi_version_t._fields_ = [ +struct_c__SA_amdsmi_version_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_version_t._fields_ = [ ('year', ctypes.c_uint32), ('major', ctypes.c_uint32), ('minor', ctypes.c_uint32), ('release', ctypes.c_uint32), ('build', ctypes.POINTER(ctypes.c_char)), + ('reserved', ctypes.c_ubyte * 4), ] -amdsmi_version_t = struct_amdsmi_version_t -class struct_amdsmi_od_vddc_point_t(Structure): +amdsmi_version_t = struct_c__SA_amdsmi_version_t +class struct_c__SA_amdsmi_od_vddc_point_t(Structure): pass -struct_amdsmi_od_vddc_point_t._pack_ = 1 # source:False -struct_amdsmi_od_vddc_point_t._fields_ = [ +struct_c__SA_amdsmi_od_vddc_point_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_od_vddc_point_t._fields_ = [ ('frequency', ctypes.c_uint64), ('voltage', ctypes.c_uint64), ] -amdsmi_od_vddc_point_t = struct_amdsmi_od_vddc_point_t -class struct_amdsmi_freq_volt_region_t(Structure): +amdsmi_od_vddc_point_t = struct_c__SA_amdsmi_od_vddc_point_t +class struct_c__SA_amdsmi_freq_volt_region_t(Structure): _pack_ = 1 # source:False _fields_ = [ ('freq_range', amdsmi_range_t), ('volt_range', amdsmi_range_t), ] -amdsmi_freq_volt_region_t = struct_amdsmi_freq_volt_region_t -class struct_amdsmi_od_volt_curve_t(Structure): +amdsmi_freq_volt_region_t = struct_c__SA_amdsmi_freq_volt_region_t +class struct_c__SA_amdsmi_od_volt_curve_t(Structure): _pack_ = 1 # source:False _fields_ = [ - ('vc_points', struct_amdsmi_od_vddc_point_t * 3), + ('vc_points', struct_c__SA_amdsmi_od_vddc_point_t * 3), ] -amdsmi_od_volt_curve_t = struct_amdsmi_od_volt_curve_t -class struct_amdsmi_od_volt_freq_data_t(Structure): +amdsmi_od_volt_curve_t = struct_c__SA_amdsmi_od_volt_curve_t +class struct_c__SA_amdsmi_od_volt_freq_data_t(Structure): pass -struct_amdsmi_od_volt_freq_data_t._pack_ = 1 # source:False -struct_amdsmi_od_volt_freq_data_t._fields_ = [ +struct_c__SA_amdsmi_od_volt_freq_data_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_od_volt_freq_data_t._fields_ = [ ('curr_sclk_range', amdsmi_range_t), ('curr_mclk_range', amdsmi_range_t), ('sclk_freq_limits', amdsmi_range_t), @@ -1436,23 +1284,23 @@ class struct_amdsmi_od_volt_freq_data_t(Structure): ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_od_volt_freq_data_t = struct_amdsmi_od_volt_freq_data_t -class struct_amd_metrics_table_header_t(Structure): +amdsmi_od_volt_freq_data_t = struct_c__SA_amdsmi_od_volt_freq_data_t +class struct_c__SA_amd_metrics_table_header_t(Structure): pass -struct_amd_metrics_table_header_t._pack_ = 1 # source:False -struct_amd_metrics_table_header_t._fields_ = [ +struct_c__SA_amd_metrics_table_header_t._pack_ = 1 # source:False +struct_c__SA_amd_metrics_table_header_t._fields_ = [ ('structure_size', ctypes.c_uint16), ('format_revision', ctypes.c_ubyte), ('content_revision', ctypes.c_ubyte), ] -amd_metrics_table_header_t = struct_amd_metrics_table_header_t -class struct_amdsmi_gpu_metrics_t(Structure): +amd_metrics_table_header_t = struct_c__SA_amd_metrics_table_header_t +class struct_c__SA_amdsmi_gpu_metrics_t(Structure): pass -struct_amdsmi_gpu_metrics_t._pack_ = 1 # source:False -struct_amdsmi_gpu_metrics_t._fields_ = [ +struct_c__SA_amdsmi_gpu_metrics_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_gpu_metrics_t._fields_ = [ ('common_header', amd_metrics_table_header_t), ('temperature_edge', ctypes.c_uint16), ('temperature_hotspot', ctypes.c_uint16), @@ -1484,115 +1332,42 @@ class struct_amdsmi_gpu_metrics_t(Structure): ('current_fan_speed', ctypes.c_uint16), ('pcie_link_width', ctypes.c_uint16), ('pcie_link_speed', ctypes.c_uint16), - ('PADDING_0', ctypes.c_ubyte * 2), + ('padding', ctypes.c_uint16), ('gfx_activity_acc', ctypes.c_uint32), - ('mem_activity_acc', ctypes.c_uint32), + ('mem_actvity_acc', ctypes.c_uint32), ('temperature_hbm', ctypes.c_uint16 * 4), - ('firmware_timestamp', ctypes.c_uint64), - ('voltage_soc', ctypes.c_uint16), - ('voltage_gfx', ctypes.c_uint16), - ('voltage_mem', ctypes.c_uint16), - ('PADDING_1', ctypes.c_ubyte * 2), - ('indep_throttle_status', ctypes.c_uint64), - ('current_socket_power', ctypes.c_uint16), - ('vcn_activity', ctypes.c_uint16 * 4), - ('PADDING_2', ctypes.c_ubyte * 2), - ('gfxclk_lock_status', ctypes.c_uint32), - ('xgmi_link_width', ctypes.c_uint16), - ('xgmi_link_speed', ctypes.c_uint16), - ('PADDING_3', ctypes.c_ubyte * 4), - ('pcie_bandwidth_acc', ctypes.c_uint64), - ('pcie_bandwidth_inst', ctypes.c_uint64), - ('pcie_l0_to_recov_count_acc', ctypes.c_uint64), - ('pcie_replay_count_acc', ctypes.c_uint64), - ('pcie_replay_rover_count_acc', ctypes.c_uint64), - ('xgmi_read_data_acc', ctypes.c_uint64 * 8), - ('xgmi_write_data_acc', ctypes.c_uint64 * 8), - ('current_gfxclks', ctypes.c_uint16 * 8), - ('current_socclks', ctypes.c_uint16 * 4), - ('current_vclk0s', ctypes.c_uint16 * 4), - ('current_dclk0s', ctypes.c_uint16 * 4), ] -amdsmi_gpu_metrics_t = struct_amdsmi_gpu_metrics_t -class struct_amdsmi_name_value_t(Structure): +amdsmi_gpu_metrics_t = struct_c__SA_amdsmi_gpu_metrics_t +class struct_c__SA_amdsmi_error_count_t(Structure): pass -struct_amdsmi_name_value_t._pack_ = 1 # source:False -struct_amdsmi_name_value_t._fields_ = [ - ('name', ctypes.c_char * 64), - ('value', ctypes.c_uint64), -] - -amdsmi_name_value_t = struct_amdsmi_name_value_t - -# values for enumeration 'amdsmi_reg_type_t' -amdsmi_reg_type_t__enumvalues = { - 0: 'AMDSMI_REG_XGMI', - 1: 'AMDSMI_REG_WAFL', - 2: 'AMDSMI_REG_PCIE', - 3: 'AMDSMI_REG_USR', - 4: 'AMDSMI_REG_USR1', -} -AMDSMI_REG_XGMI = 0 -AMDSMI_REG_WAFL = 1 -AMDSMI_REG_PCIE = 2 -AMDSMI_REG_USR = 3 -AMDSMI_REG_USR1 = 4 -amdsmi_reg_type_t = ctypes.c_uint32 # enum -class struct_amdsmi_ras_feature_t(Structure): - pass - -struct_amdsmi_ras_feature_t._pack_ = 1 # source:False -struct_amdsmi_ras_feature_t._fields_ = [ - ('ras_eeprom_version', ctypes.c_uint32), - ('ecc_correction_schema_flag', ctypes.c_uint32), -] - -amdsmi_ras_feature_t = struct_amdsmi_ras_feature_t -class struct_amdsmi_error_count_t(Structure): - pass - -struct_amdsmi_error_count_t._pack_ = 1 # source:False -struct_amdsmi_error_count_t._fields_ = [ +struct_c__SA_amdsmi_error_count_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_error_count_t._fields_ = [ ('correctable_count', ctypes.c_uint64), ('uncorrectable_count', ctypes.c_uint64), ('reserved', ctypes.c_uint64 * 2), ] -amdsmi_error_count_t = struct_amdsmi_error_count_t - -# values for enumeration 'amdsmi_pcie_slot_type_t' -amdsmi_pcie_slot_type_t__enumvalues = { - 0: 'AMDSMI_SLOT_TYPE__PCIE', - 1: 'AMDSMI_SLOT_TYPE__CEM', - 2: 'AMDSMI_SLOT_TYPE__OAM', - 3: 'AMDSMI_SLOT_TYPE__RESERVED', -} -AMDSMI_SLOT_TYPE__PCIE = 0 -AMDSMI_SLOT_TYPE__CEM = 1 -AMDSMI_SLOT_TYPE__OAM = 2 -AMDSMI_SLOT_TYPE__RESERVED = 3 -amdsmi_pcie_slot_type_t = ctypes.c_uint32 # enum -class struct_amdsmi_pcie_info_t(Structure): +amdsmi_error_count_t = struct_c__SA_amdsmi_error_count_t +class struct_c__SA_amdsmi_pcie_info_t(Structure): pass -struct_amdsmi_pcie_info_t._pack_ = 1 # source:False -struct_amdsmi_pcie_info_t._fields_ = [ +struct_c__SA_amdsmi_pcie_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_pcie_info_t._fields_ = [ ('pcie_lanes', ctypes.c_uint16), ('PADDING_0', ctypes.c_ubyte * 2), ('pcie_speed', ctypes.c_uint32), ('pcie_interface_version', ctypes.c_uint32), - ('pcie_slot_type', amdsmi_pcie_slot_type_t), - ('reserved', ctypes.c_uint32 * 4), + ('reserved', ctypes.c_uint32 * 5), ] -amdsmi_pcie_info_t = struct_amdsmi_pcie_info_t -class struct_amdsmi_process_info_t(Structure): +amdsmi_pcie_info_t = struct_c__SA_amdsmi_pcie_info_t +class struct_c__SA_amdsmi_process_info_t(Structure): pass -struct_amdsmi_process_info_t._pack_ = 1 # source:False -struct_amdsmi_process_info_t._fields_ = [ +struct_c__SA_amdsmi_process_info_t._pack_ = 1 # source:False +struct_c__SA_amdsmi_process_info_t._fields_ = [ ('process_id', ctypes.c_uint32), ('pasid', ctypes.c_uint32), ('vram_usage', ctypes.c_uint64), @@ -1601,102 +1376,7 @@ class struct_amdsmi_process_info_t(Structure): ('PADDING_0', ctypes.c_ubyte * 4), ] -amdsmi_process_info_t = struct_amdsmi_process_info_t -class struct_amdsmi_smu_fw_version_t(Structure): - pass - -struct_amdsmi_smu_fw_version_t._pack_ = 1 # source:False -struct_amdsmi_smu_fw_version_t._fields_ = [ - ('debug', ctypes.c_ubyte), - ('minor', ctypes.c_ubyte), - ('major', ctypes.c_ubyte), - ('unused', ctypes.c_ubyte), -] - -amdsmi_smu_fw_version_t = struct_amdsmi_smu_fw_version_t -class struct_amdsmi_ddr_bw_metrics_t(Structure): - pass - -struct_amdsmi_ddr_bw_metrics_t._pack_ = 1 # source:False -struct_amdsmi_ddr_bw_metrics_t._fields_ = [ - ('max_bw', ctypes.c_uint32), - ('utilized_bw', ctypes.c_uint32), - ('utilized_pct', ctypes.c_uint32), -] - -amdsmi_ddr_bw_metrics_t = struct_amdsmi_ddr_bw_metrics_t -class struct_amdsmi_temp_range_refresh_rate_t(Structure): - pass - -struct_amdsmi_temp_range_refresh_rate_t._pack_ = 1 # source:False -struct_amdsmi_temp_range_refresh_rate_t._fields_ = [ - ('range', ctypes.c_ubyte, 3), - ('ref_rate', ctypes.c_ubyte, 1), - ('PADDING_0', ctypes.c_uint8, 4), -] - -amdsmi_temp_range_refresh_rate_t = struct_amdsmi_temp_range_refresh_rate_t -class struct_amdsmi_dimm_power_t(Structure): - pass - -struct_amdsmi_dimm_power_t._pack_ = 1 # source:False -struct_amdsmi_dimm_power_t._fields_ = [ - ('power', ctypes.c_uint16, 15), - ('PADDING_0', ctypes.c_uint8, 1), - ('update_rate', ctypes.c_uint16, 9), - ('PADDING_1', ctypes.c_uint8, 7), - ('dimm_addr', ctypes.c_uint16, 8), - ('PADDING_2', ctypes.c_uint8, 8), -] - -amdsmi_dimm_power_t = struct_amdsmi_dimm_power_t -class struct_amdsmi_dimm_thermal_t(Structure): - pass - -struct_amdsmi_dimm_thermal_t._pack_ = 1 # source:False -struct_amdsmi_dimm_thermal_t._fields_ = [ - ('sensor', ctypes.c_uint16, 11), - ('PADDING_0', ctypes.c_uint8, 5), - ('update_rate', ctypes.c_uint16, 9), - ('PADDING_1', ctypes.c_uint8, 7), - ('dimm_addr', ctypes.c_uint16, 8), - ('PADDING_2', ctypes.c_uint32, 24), - ('temp', ctypes.c_float), -] - -amdsmi_dimm_thermal_t = struct_amdsmi_dimm_thermal_t - -# values for enumeration 'amdsmi_io_bw_encoding_t' -amdsmi_io_bw_encoding_t__enumvalues = { - 1: 'AGG_BW0', - 2: 'RD_BW0', - 4: 'WR_BW0', -} -AGG_BW0 = 1 -RD_BW0 = 2 -WR_BW0 = 4 -amdsmi_io_bw_encoding_t = ctypes.c_uint32 # enum -class struct_amdsmi_link_id_bw_type_t(Structure): - pass - -struct_amdsmi_link_id_bw_type_t._pack_ = 1 # source:False -struct_amdsmi_link_id_bw_type_t._fields_ = [ - ('bw_type', amdsmi_io_bw_encoding_t), - ('PADDING_0', ctypes.c_ubyte * 4), - ('link_name', ctypes.POINTER(ctypes.c_char)), -] - -amdsmi_link_id_bw_type_t = struct_amdsmi_link_id_bw_type_t -class struct_amdsmi_dpm_level_t(Structure): - pass - -struct_amdsmi_dpm_level_t._pack_ = 1 # source:False -struct_amdsmi_dpm_level_t._fields_ = [ - ('max_dpm_level', ctypes.c_ubyte), - ('min_dpm_level', ctypes.c_ubyte), -] - -amdsmi_dpm_level_t = struct_amdsmi_dpm_level_t +amdsmi_process_info_t = struct_c__SA_amdsmi_process_info_t uint64_t = ctypes.c_uint64 amdsmi_init = _libraries['libamd_smi.so'].amdsmi_init amdsmi_init.restype = amdsmi_status_t @@ -1707,41 +1387,26 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_get_socket_handles = _libraries['libamd_smi.so'].amdsmi_get_socket_handles amdsmi_get_socket_handles.restype = amdsmi_status_t amdsmi_get_socket_handles.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] -amdsmi_get_cpusocket_handles = _libraries['libamd_smi.so'].amdsmi_get_cpusocket_handles -amdsmi_get_cpusocket_handles.restype = amdsmi_status_t -amdsmi_get_cpusocket_handles.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] size_t = ctypes.c_uint64 amdsmi_get_socket_info = _libraries['libamd_smi.so'].amdsmi_get_socket_info amdsmi_get_socket_info.restype = amdsmi_status_t amdsmi_get_socket_info.argtypes = [amdsmi_socket_handle, size_t, ctypes.POINTER(ctypes.c_char)] -uint32_t = ctypes.c_uint32 -amdsmi_get_cpusocket_info = _libraries['libamd_smi.so'].amdsmi_get_cpusocket_info -amdsmi_get_cpusocket_info.restype = amdsmi_status_t -amdsmi_get_cpusocket_info.argtypes = [amdsmi_cpusocket_handle, uint32_t] -amdsmi_get_cpucore_info = _libraries['libamd_smi.so'].amdsmi_get_cpucore_info -amdsmi_get_cpucore_info.restype = amdsmi_status_t -amdsmi_get_cpucore_info.argtypes = [amdsmi_processor_handle, uint32_t] amdsmi_get_processor_handles = _libraries['libamd_smi.so'].amdsmi_get_processor_handles amdsmi_get_processor_handles.restype = amdsmi_status_t amdsmi_get_processor_handles.argtypes = [amdsmi_socket_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] -amdsmi_get_cpucore_handles = _libraries['libamd_smi.so'].amdsmi_get_cpucore_handles -amdsmi_get_cpucore_handles.restype = amdsmi_status_t -amdsmi_get_cpucore_handles.argtypes = [amdsmi_cpusocket_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] amdsmi_get_processor_type = _libraries['libamd_smi.so'].amdsmi_get_processor_type amdsmi_get_processor_type.restype = amdsmi_status_t -amdsmi_get_processor_type.argtypes = [amdsmi_processor_handle, ctypes.POINTER(processor_type_t)] +amdsmi_get_processor_type.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c__EA_processor_type_t)] amdsmi_get_processor_handle_from_bdf = _libraries['libamd_smi.so'].amdsmi_get_processor_handle_from_bdf amdsmi_get_processor_handle_from_bdf.restype = amdsmi_status_t amdsmi_get_processor_handle_from_bdf.argtypes = [amdsmi_bdf_t, ctypes.POINTER(ctypes.POINTER(None))] amdsmi_get_gpu_id = _libraries['libamd_smi.so'].amdsmi_get_gpu_id amdsmi_get_gpu_id.restype = amdsmi_status_t amdsmi_get_gpu_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_gpu_revision = _libraries['libamd_smi.so'].amdsmi_get_gpu_revision -amdsmi_get_gpu_revision.restype = amdsmi_status_t -amdsmi_get_gpu_revision.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)] amdsmi_get_gpu_vendor_name = _libraries['libamd_smi.so'].amdsmi_get_gpu_vendor_name amdsmi_get_gpu_vendor_name.restype = amdsmi_status_t amdsmi_get_gpu_vendor_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), size_t] +uint32_t = ctypes.c_uint32 amdsmi_get_gpu_vram_vendor = _libraries['libamd_smi.so'].amdsmi_get_gpu_vram_vendor amdsmi_get_gpu_vram_vendor.restype = amdsmi_status_t amdsmi_get_gpu_vram_vendor.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), uint32_t] @@ -1753,13 +1418,13 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_get_gpu_subsystem_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), size_t] amdsmi_get_gpu_pci_bandwidth = _libraries['libamd_smi.so'].amdsmi_get_gpu_pci_bandwidth amdsmi_get_gpu_pci_bandwidth.restype = amdsmi_status_t -amdsmi_get_gpu_pci_bandwidth.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_bandwidth_t)] +amdsmi_get_gpu_pci_bandwidth.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_bandwidth_t)] amdsmi_get_gpu_bdf_id = _libraries['libamd_smi.so'].amdsmi_get_gpu_bdf_id amdsmi_get_gpu_bdf_id.restype = amdsmi_status_t amdsmi_get_gpu_bdf_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] amdsmi_get_gpu_topo_numa_affinity = _libraries['libamd_smi.so'].amdsmi_get_gpu_topo_numa_affinity amdsmi_get_gpu_topo_numa_affinity.restype = amdsmi_status_t -amdsmi_get_gpu_topo_numa_affinity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_int32)] +amdsmi_get_gpu_topo_numa_affinity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_pci_throughput = _libraries['libamd_smi.so'].amdsmi_get_gpu_pci_throughput amdsmi_get_gpu_pci_throughput.restype = amdsmi_status_t amdsmi_get_gpu_pci_throughput.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64)] @@ -1786,16 +1451,13 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_get_gpu_memory_usage.argtypes = [amdsmi_processor_handle, amdsmi_memory_type_t, ctypes.POINTER(ctypes.c_uint64)] amdsmi_get_gpu_bad_page_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_bad_page_info amdsmi_get_gpu_bad_page_info.restype = amdsmi_status_t -amdsmi_get_gpu_bad_page_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_retired_page_record_t)] -amdsmi_get_gpu_ras_feature_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_ras_feature_info -amdsmi_get_gpu_ras_feature_info.restype = amdsmi_status_t -amdsmi_get_gpu_ras_feature_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_ras_feature_t)] +amdsmi_get_gpu_bad_page_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_retired_page_record_t)] amdsmi_get_gpu_ras_block_features_enabled = _libraries['libamd_smi.so'].amdsmi_get_gpu_ras_block_features_enabled amdsmi_get_gpu_ras_block_features_enabled.restype = amdsmi_status_t -amdsmi_get_gpu_ras_block_features_enabled.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(amdsmi_ras_err_state_t)] +amdsmi_get_gpu_ras_block_features_enabled.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(c__EA_amdsmi_ras_err_state_t)] amdsmi_get_gpu_memory_reserved_pages = _libraries['libamd_smi.so'].amdsmi_get_gpu_memory_reserved_pages amdsmi_get_gpu_memory_reserved_pages.restype = amdsmi_status_t -amdsmi_get_gpu_memory_reserved_pages.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_retired_page_record_t)] +amdsmi_get_gpu_memory_reserved_pages.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_retired_page_record_t)] amdsmi_get_gpu_fan_rpms = _libraries['libamd_smi.so'].amdsmi_get_gpu_fan_rpms amdsmi_get_gpu_fan_rpms.restype = amdsmi_status_t amdsmi_get_gpu_fan_rpms.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(ctypes.c_int64)] @@ -1808,9 +1470,6 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_get_temp_metric = _libraries['libamd_smi.so'].amdsmi_get_temp_metric amdsmi_get_temp_metric.restype = amdsmi_status_t amdsmi_get_temp_metric.argtypes = [amdsmi_processor_handle, amdsmi_temperature_type_t, amdsmi_temperature_metric_t, ctypes.POINTER(ctypes.c_int64)] -amdsmi_get_gpu_cache_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_cache_info -amdsmi_get_gpu_cache_info.restype = amdsmi_status_t -amdsmi_get_gpu_cache_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_gpu_cache_info_t)] amdsmi_get_gpu_volt_metric = _libraries['libamd_smi.so'].amdsmi_get_gpu_volt_metric amdsmi_get_gpu_volt_metric.restype = amdsmi_status_t amdsmi_get_gpu_volt_metric.argtypes = [amdsmi_processor_handle, amdsmi_voltage_type_t, amdsmi_voltage_metric_t, ctypes.POINTER(ctypes.c_int64)] @@ -1822,16 +1481,16 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_set_gpu_fan_speed.argtypes = [amdsmi_processor_handle, uint32_t, uint64_t] amdsmi_get_utilization_count = _libraries['libamd_smi.so'].amdsmi_get_utilization_count amdsmi_get_utilization_count.restype = amdsmi_status_t -amdsmi_get_utilization_count.argtypes = [amdsmi_processor_handle, struct_amdsmi_utilization_counter_t * 0, uint32_t, ctypes.POINTER(ctypes.c_uint64)] +amdsmi_get_utilization_count.argtypes = [amdsmi_processor_handle, struct_c__SA_amdsmi_utilization_counter_t * 0, uint32_t, ctypes.POINTER(ctypes.c_uint64)] amdsmi_get_pcie_link_status = _libraries['libamd_smi.so'].amdsmi_get_pcie_link_status amdsmi_get_pcie_link_status.restype = amdsmi_status_t -amdsmi_get_pcie_link_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_info_t)] +amdsmi_get_pcie_link_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_info_t)] amdsmi_get_pcie_link_caps = _libraries['libamd_smi.so'].amdsmi_get_pcie_link_caps amdsmi_get_pcie_link_caps.restype = amdsmi_status_t -amdsmi_get_pcie_link_caps.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_info_t)] +amdsmi_get_pcie_link_caps.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_pcie_info_t)] amdsmi_get_gpu_perf_level = _libraries['libamd_smi.so'].amdsmi_get_gpu_perf_level amdsmi_get_gpu_perf_level.restype = amdsmi_status_t -amdsmi_get_gpu_perf_level.argtypes = [amdsmi_processor_handle, ctypes.POINTER(amdsmi_dev_perf_level_t)] +amdsmi_get_gpu_perf_level.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c__EA_amdsmi_dev_perf_level_t)] amdsmi_set_gpu_perf_determinism_mode = _libraries['libamd_smi.so'].amdsmi_set_gpu_perf_determinism_mode amdsmi_set_gpu_perf_determinism_mode.restype = amdsmi_status_t amdsmi_set_gpu_perf_determinism_mode.argtypes = [amdsmi_processor_handle, uint64_t] @@ -1840,22 +1499,16 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_get_gpu_overdrive_level.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_clk_freq = _libraries['libamd_smi.so'].amdsmi_get_clk_freq amdsmi_get_clk_freq.restype = amdsmi_status_t -amdsmi_get_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_amdsmi_frequencies_t)] +amdsmi_get_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_c__SA_amdsmi_frequencies_t)] amdsmi_reset_gpu = _libraries['libamd_smi.so'].amdsmi_reset_gpu amdsmi_reset_gpu.restype = amdsmi_status_t amdsmi_reset_gpu.argtypes = [amdsmi_processor_handle] amdsmi_get_gpu_od_volt_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_od_volt_info amdsmi_get_gpu_od_volt_info.restype = amdsmi_status_t -amdsmi_get_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_od_volt_freq_data_t)] +amdsmi_get_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_od_volt_freq_data_t)] amdsmi_get_gpu_metrics_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_info amdsmi_get_gpu_metrics_info.restype = amdsmi_status_t -amdsmi_get_gpu_metrics_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_gpu_metrics_t)] -amdsmi_get_gpu_pm_metrics_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_pm_metrics_info -amdsmi_get_gpu_pm_metrics_info.restype = amdsmi_status_t -amdsmi_get_gpu_pm_metrics_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.POINTER(struct_amdsmi_name_value_t)), ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_gpu_reg_table_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_reg_table_info -amdsmi_get_gpu_reg_table_info.restype = amdsmi_status_t -amdsmi_get_gpu_reg_table_info.argtypes = [amdsmi_processor_handle, amdsmi_reg_type_t, ctypes.POINTER(ctypes.POINTER(struct_amdsmi_name_value_t)), ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_gpu_metrics_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_gpu_metrics_t)] amdsmi_set_gpu_clk_range = _libraries['libamd_smi.so'].amdsmi_set_gpu_clk_range amdsmi_set_gpu_clk_range.restype = amdsmi_status_t amdsmi_set_gpu_clk_range.argtypes = [amdsmi_processor_handle, uint64_t, uint64_t, amdsmi_clk_type_t] @@ -1867,10 +1520,10 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_set_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, uint32_t, uint64_t, uint64_t] amdsmi_get_gpu_od_volt_curve_regions = _libraries['libamd_smi.so'].amdsmi_get_gpu_od_volt_curve_regions amdsmi_get_gpu_od_volt_curve_regions.restype = amdsmi_status_t -amdsmi_get_gpu_od_volt_curve_regions.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_freq_volt_region_t)] +amdsmi_get_gpu_od_volt_curve_regions.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_freq_volt_region_t)] amdsmi_get_gpu_power_profile_presets = _libraries['libamd_smi.so'].amdsmi_get_gpu_power_profile_presets amdsmi_get_gpu_power_profile_presets.restype = amdsmi_status_t -amdsmi_get_gpu_power_profile_presets.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_amdsmi_power_profile_status_t)] +amdsmi_get_gpu_power_profile_presets.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_power_profile_status_t)] amdsmi_set_gpu_perf_level = _libraries['libamd_smi.so'].amdsmi_set_gpu_perf_level amdsmi_set_gpu_perf_level.restype = amdsmi_status_t amdsmi_set_gpu_perf_level.argtypes = [amdsmi_processor_handle, amdsmi_dev_perf_level_t] @@ -1882,16 +1535,16 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_set_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, uint64_t] amdsmi_get_lib_version = _libraries['libamd_smi.so'].amdsmi_get_lib_version amdsmi_get_lib_version.restype = amdsmi_status_t -amdsmi_get_lib_version.argtypes = [ctypes.POINTER(struct_amdsmi_version_t)] +amdsmi_get_lib_version.argtypes = [ctypes.POINTER(struct_c__SA_amdsmi_version_t)] amdsmi_get_gpu_ecc_count = _libraries['libamd_smi.so'].amdsmi_get_gpu_ecc_count amdsmi_get_gpu_ecc_count.restype = amdsmi_status_t -amdsmi_get_gpu_ecc_count.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(struct_amdsmi_error_count_t)] +amdsmi_get_gpu_ecc_count.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] amdsmi_get_gpu_ecc_enabled = _libraries['libamd_smi.so'].amdsmi_get_gpu_ecc_enabled amdsmi_get_gpu_ecc_enabled.restype = amdsmi_status_t amdsmi_get_gpu_ecc_enabled.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] amdsmi_get_gpu_ecc_status = _libraries['libamd_smi.so'].amdsmi_get_gpu_ecc_status amdsmi_get_gpu_ecc_status.restype = amdsmi_status_t -amdsmi_get_gpu_ecc_status.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(amdsmi_ras_err_state_t)] +amdsmi_get_gpu_ecc_status.argtypes = [amdsmi_processor_handle, amdsmi_gpu_block_t, ctypes.POINTER(c__EA_amdsmi_ras_err_state_t)] amdsmi_status_code_to_string = _libraries['libamd_smi.so'].amdsmi_status_code_to_string amdsmi_status_code_to_string.restype = amdsmi_status_t amdsmi_status_code_to_string.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] @@ -1909,22 +1562,22 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_gpu_control_counter.argtypes = [amdsmi_event_handle_t, amdsmi_counter_command_t, ctypes.POINTER(None)] amdsmi_gpu_read_counter = _libraries['libamd_smi.so'].amdsmi_gpu_read_counter amdsmi_gpu_read_counter.restype = amdsmi_status_t -amdsmi_gpu_read_counter.argtypes = [amdsmi_event_handle_t, ctypes.POINTER(struct_amdsmi_counter_value_t)] +amdsmi_gpu_read_counter.argtypes = [amdsmi_event_handle_t, ctypes.POINTER(struct_c__SA_amdsmi_counter_value_t)] amdsmi_get_gpu_available_counters = _libraries['libamd_smi.so'].amdsmi_get_gpu_available_counters amdsmi_get_gpu_available_counters.restype = amdsmi_status_t amdsmi_get_gpu_available_counters.argtypes = [amdsmi_processor_handle, amdsmi_event_group_t, ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_compute_process_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_process_info amdsmi_get_gpu_compute_process_info.restype = amdsmi_status_t -amdsmi_get_gpu_compute_process_info.argtypes = [ctypes.POINTER(struct_amdsmi_process_info_t), ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_gpu_compute_process_info.argtypes = [ctypes.POINTER(struct_c__SA_amdsmi_process_info_t), ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_compute_process_info_by_pid = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_process_info_by_pid amdsmi_get_gpu_compute_process_info_by_pid.restype = amdsmi_status_t -amdsmi_get_gpu_compute_process_info_by_pid.argtypes = [uint32_t, ctypes.POINTER(struct_amdsmi_process_info_t)] +amdsmi_get_gpu_compute_process_info_by_pid.argtypes = [uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_process_info_t)] amdsmi_get_gpu_compute_process_gpus = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_process_gpus amdsmi_get_gpu_compute_process_gpus.restype = amdsmi_status_t amdsmi_get_gpu_compute_process_gpus.argtypes = [uint32_t, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] amdsmi_gpu_xgmi_error_status = _libraries['libamd_smi.so'].amdsmi_gpu_xgmi_error_status amdsmi_gpu_xgmi_error_status.restype = amdsmi_status_t -amdsmi_gpu_xgmi_error_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(amdsmi_xgmi_status_t)] +amdsmi_gpu_xgmi_error_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c__EA_amdsmi_xgmi_status_t)] amdsmi_reset_gpu_xgmi_error = _libraries['libamd_smi.so'].amdsmi_reset_gpu_xgmi_error amdsmi_reset_gpu_xgmi_error.restype = amdsmi_status_t amdsmi_reset_gpu_xgmi_error.argtypes = [amdsmi_processor_handle] @@ -1934,33 +1587,15 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_topo_get_link_weight = _libraries['libamd_smi.so'].amdsmi_topo_get_link_weight amdsmi_topo_get_link_weight.restype = amdsmi_status_t amdsmi_topo_get_link_weight.argtypes = [amdsmi_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_minmax_bandwidth_between_processors = _libraries['libamd_smi.so'].amdsmi_get_minmax_bandwidth_between_processors -amdsmi_get_minmax_bandwidth_between_processors.restype = amdsmi_status_t -amdsmi_get_minmax_bandwidth_between_processors.argtypes = [amdsmi_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64)] +amdsmi_get_minmax_bandwith_between_processors = _libraries['libamd_smi.so'].amdsmi_get_minmax_bandwith_between_processors +amdsmi_get_minmax_bandwith_between_processors.restype = amdsmi_status_t +amdsmi_get_minmax_bandwith_between_processors.argtypes = [amdsmi_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(ctypes.c_uint64)] amdsmi_topo_get_link_type = _libraries['libamd_smi.so'].amdsmi_topo_get_link_type amdsmi_topo_get_link_type.restype = amdsmi_status_t -amdsmi_topo_get_link_type.argtypes = [amdsmi_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(amdsmi_io_link_type_t)] +amdsmi_topo_get_link_type.argtypes = [amdsmi_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint64), ctypes.POINTER(c__EA_AMDSMI_IO_LINK_TYPE)] amdsmi_is_P2P_accessible = _libraries['libamd_smi.so'].amdsmi_is_P2P_accessible amdsmi_is_P2P_accessible.restype = amdsmi_status_t amdsmi_is_P2P_accessible.argtypes = [amdsmi_processor_handle, amdsmi_processor_handle, ctypes.POINTER(ctypes.c_bool)] -amdsmi_get_gpu_compute_partition = _libraries['libamd_smi.so'].amdsmi_get_gpu_compute_partition -amdsmi_get_gpu_compute_partition.restype = amdsmi_status_t -amdsmi_get_gpu_compute_partition.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), uint32_t] -amdsmi_set_gpu_compute_partition = _libraries['libamd_smi.so'].amdsmi_set_gpu_compute_partition -amdsmi_set_gpu_compute_partition.restype = amdsmi_status_t -amdsmi_set_gpu_compute_partition.argtypes = [amdsmi_processor_handle, amdsmi_compute_partition_type_t] -amdsmi_reset_gpu_compute_partition = _libraries['libamd_smi.so'].amdsmi_reset_gpu_compute_partition -amdsmi_reset_gpu_compute_partition.restype = amdsmi_status_t -amdsmi_reset_gpu_compute_partition.argtypes = [amdsmi_processor_handle] -amdsmi_get_gpu_memory_partition = _libraries['libamd_smi.so'].amdsmi_get_gpu_memory_partition -amdsmi_get_gpu_memory_partition.restype = amdsmi_status_t -amdsmi_get_gpu_memory_partition.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), uint32_t] -amdsmi_set_gpu_memory_partition = _libraries['libamd_smi.so'].amdsmi_set_gpu_memory_partition -amdsmi_set_gpu_memory_partition.restype = amdsmi_status_t -amdsmi_set_gpu_memory_partition.argtypes = [amdsmi_processor_handle, amdsmi_memory_partition_type_t] -amdsmi_reset_gpu_memory_partition = _libraries['libamd_smi.so'].amdsmi_reset_gpu_memory_partition -amdsmi_reset_gpu_memory_partition.restype = amdsmi_status_t -amdsmi_reset_gpu_memory_partition.argtypes = [amdsmi_processor_handle] amdsmi_init_gpu_event_notification = _libraries['libamd_smi.so'].amdsmi_init_gpu_event_notification amdsmi_init_gpu_event_notification.restype = amdsmi_status_t amdsmi_init_gpu_event_notification.argtypes = [amdsmi_processor_handle] @@ -1969,358 +1604,63 @@ class struct_amdsmi_dpm_level_t(Structure): amdsmi_set_gpu_event_notification_mask.argtypes = [amdsmi_processor_handle, uint64_t] amdsmi_get_gpu_event_notification = _libraries['libamd_smi.so'].amdsmi_get_gpu_event_notification amdsmi_get_gpu_event_notification.restype = amdsmi_status_t -amdsmi_get_gpu_event_notification.argtypes = [ctypes.c_int32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_amdsmi_evt_notification_data_t)] +amdsmi_get_gpu_event_notification.argtypes = [ctypes.c_int32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(struct_c__SA_amdsmi_evt_notification_data_t)] amdsmi_stop_gpu_event_notification = _libraries['libamd_smi.so'].amdsmi_stop_gpu_event_notification amdsmi_stop_gpu_event_notification.restype = amdsmi_status_t amdsmi_stop_gpu_event_notification.argtypes = [amdsmi_processor_handle] amdsmi_get_gpu_device_bdf = _libraries['libamd_smi.so'].amdsmi_get_gpu_device_bdf amdsmi_get_gpu_device_bdf.restype = amdsmi_status_t -amdsmi_get_gpu_device_bdf.argtypes = [amdsmi_processor_handle, ctypes.POINTER(union_amdsmi_bdf_t)] +amdsmi_get_gpu_device_bdf.argtypes = [amdsmi_processor_handle, ctypes.POINTER(union_c__UA_amdsmi_bdf_t)] amdsmi_get_gpu_device_uuid = _libraries['libamd_smi.so'].amdsmi_get_gpu_device_uuid amdsmi_get_gpu_device_uuid.restype = amdsmi_status_t amdsmi_get_gpu_device_uuid.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_char)] -amdsmi_get_gpu_driver_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_driver_info -amdsmi_get_gpu_driver_info.restype = amdsmi_status_t -amdsmi_get_gpu_driver_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_driver_info_t)] +amdsmi_get_gpu_driver_version = _libraries['libamd_smi.so'].amdsmi_get_gpu_driver_version +amdsmi_get_gpu_driver_version.restype = amdsmi_status_t +amdsmi_get_gpu_driver_version.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_char)] amdsmi_get_gpu_asic_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_asic_info amdsmi_get_gpu_asic_info.restype = amdsmi_status_t -amdsmi_get_gpu_asic_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_asic_info_t)] -amdsmi_get_gpu_vram_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_vram_info -amdsmi_get_gpu_vram_info.restype = amdsmi_status_t -amdsmi_get_gpu_vram_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_vram_info_t)] +amdsmi_get_gpu_asic_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_asic_info_t)] amdsmi_get_gpu_board_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_board_info amdsmi_get_gpu_board_info.restype = amdsmi_status_t -amdsmi_get_gpu_board_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_board_info_t)] +amdsmi_get_gpu_board_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_board_info_t)] amdsmi_get_power_cap_info = _libraries['libamd_smi.so'].amdsmi_get_power_cap_info amdsmi_get_power_cap_info.restype = amdsmi_status_t -amdsmi_get_power_cap_info.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_amdsmi_power_cap_info_t)] +amdsmi_get_power_cap_info.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_c__SA_amdsmi_power_cap_info_t)] amdsmi_get_xgmi_info = _libraries['libamd_smi.so'].amdsmi_get_xgmi_info amdsmi_get_xgmi_info.restype = amdsmi_status_t -amdsmi_get_xgmi_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_xgmi_info_t)] +amdsmi_get_xgmi_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_xgmi_info_t)] amdsmi_get_fw_info = _libraries['libamd_smi.so'].amdsmi_get_fw_info amdsmi_get_fw_info.restype = amdsmi_status_t -amdsmi_get_fw_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_fw_info_t)] +amdsmi_get_fw_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_fw_info_t)] amdsmi_get_gpu_vbios_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_vbios_info amdsmi_get_gpu_vbios_info.restype = amdsmi_status_t -amdsmi_get_gpu_vbios_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_vbios_info_t)] +amdsmi_get_gpu_vbios_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_vbios_info_t)] amdsmi_get_gpu_activity = _libraries['libamd_smi.so'].amdsmi_get_gpu_activity amdsmi_get_gpu_activity.restype = amdsmi_status_t -amdsmi_get_gpu_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_engine_usage_t)] +amdsmi_get_gpu_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_engine_usage_t)] amdsmi_get_power_info = _libraries['libamd_smi.so'].amdsmi_get_power_info amdsmi_get_power_info.restype = amdsmi_status_t -amdsmi_get_power_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_power_info_t)] -amdsmi_is_gpu_power_management_enabled = _libraries['libamd_smi.so'].amdsmi_is_gpu_power_management_enabled -amdsmi_is_gpu_power_management_enabled.restype = amdsmi_status_t -amdsmi_is_gpu_power_management_enabled.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_bool)] +amdsmi_get_power_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_power_info_t)] amdsmi_get_clock_info = _libraries['libamd_smi.so'].amdsmi_get_clock_info amdsmi_get_clock_info.restype = amdsmi_status_t -amdsmi_get_clock_info.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_amdsmi_clk_info_t)] +amdsmi_get_clock_info.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, ctypes.POINTER(struct_c__SA_amdsmi_clk_info_t)] amdsmi_get_gpu_vram_usage = _libraries['libamd_smi.so'].amdsmi_get_gpu_vram_usage amdsmi_get_gpu_vram_usage.restype = amdsmi_status_t -amdsmi_get_gpu_vram_usage.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_vram_usage_t)] +amdsmi_get_gpu_vram_usage.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_vram_info_t)] amdsmi_get_gpu_process_list = _libraries['libamd_smi.so'].amdsmi_get_gpu_process_list amdsmi_get_gpu_process_list.restype = amdsmi_status_t amdsmi_get_gpu_process_list.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_process_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_process_info amdsmi_get_gpu_process_info.restype = amdsmi_status_t -amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_handle_t, ctypes.POINTER(struct_amdsmi_proc_info_t)] +amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_handle_t, ctypes.POINTER(struct_c__SA_amdsmi_proc_info_t)] 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, uint32_t, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_cpu_socket_energy = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_energy -amdsmi_get_cpu_socket_energy.restype = amdsmi_status_t -amdsmi_get_cpu_socket_energy.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint64)] -amdsmi_get_cpu_smu_fw_version = _libraries['libamd_smi.so'].amdsmi_get_cpu_smu_fw_version -amdsmi_get_cpu_smu_fw_version.restype = amdsmi_status_t -amdsmi_get_cpu_smu_fw_version.argtypes = [amdsmi_cpusocket_handle, ctypes.POINTER(struct_amdsmi_smu_fw_version_t)] -amdsmi_get_cpu_hsmp_proto_ver = _libraries['libamd_smi.so'].amdsmi_get_cpu_hsmp_proto_ver -amdsmi_get_cpu_hsmp_proto_ver.restype = amdsmi_status_t -amdsmi_get_cpu_hsmp_proto_ver.argtypes = [amdsmi_cpusocket_handle, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_prochot_status = _libraries['libamd_smi.so'].amdsmi_get_cpu_prochot_status -amdsmi_get_cpu_prochot_status.restype = amdsmi_status_t -amdsmi_get_cpu_prochot_status.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_fclk_mclk = _libraries['libamd_smi.so'].amdsmi_get_cpu_fclk_mclk -amdsmi_get_cpu_fclk_mclk.restype = amdsmi_status_t -amdsmi_get_cpu_fclk_mclk.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_cclk_limit = _libraries['libamd_smi.so'].amdsmi_get_cpu_cclk_limit -amdsmi_get_cpu_cclk_limit.restype = amdsmi_status_t -amdsmi_get_cpu_cclk_limit.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_socket_current_active_freq_limit = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_current_active_freq_limit -amdsmi_get_cpu_socket_current_active_freq_limit.restype = amdsmi_status_t -amdsmi_get_cpu_socket_current_active_freq_limit.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint16), ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] -amdsmi_get_cpu_socket_freq_range = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_freq_range -amdsmi_get_cpu_socket_freq_range.restype = amdsmi_status_t -amdsmi_get_cpu_socket_freq_range.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint16), ctypes.POINTER(ctypes.c_uint16)] -amdsmi_get_cpu_core_current_freq_limit = _libraries['libamd_smi.so'].amdsmi_get_cpu_core_current_freq_limit -amdsmi_get_cpu_core_current_freq_limit.restype = amdsmi_status_t -amdsmi_get_cpu_core_current_freq_limit.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_socket_power = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_power -amdsmi_get_cpu_socket_power.restype = amdsmi_status_t -amdsmi_get_cpu_socket_power.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_socket_power_cap = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_power_cap -amdsmi_get_cpu_socket_power_cap.restype = amdsmi_status_t -amdsmi_get_cpu_socket_power_cap.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_socket_power_cap_max = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_power_cap_max -amdsmi_get_cpu_socket_power_cap_max.restype = amdsmi_status_t -amdsmi_get_cpu_socket_power_cap_max.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_pwr_svi_telemetry_all_rails = _libraries['libamd_smi.so'].amdsmi_get_cpu_pwr_svi_telemetry_all_rails -amdsmi_get_cpu_pwr_svi_telemetry_all_rails.restype = amdsmi_status_t -amdsmi_get_cpu_pwr_svi_telemetry_all_rails.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_set_cpu_socket_power_cap = _libraries['libamd_smi.so'].amdsmi_set_cpu_socket_power_cap -amdsmi_set_cpu_socket_power_cap.restype = amdsmi_status_t -amdsmi_set_cpu_socket_power_cap.argtypes = [amdsmi_cpusocket_handle, uint32_t, uint32_t] -uint8_t = ctypes.c_uint8 -amdsmi_set_cpu_pwr_efficiency_mode = _libraries['libamd_smi.so'].amdsmi_set_cpu_pwr_efficiency_mode -amdsmi_set_cpu_pwr_efficiency_mode.restype = amdsmi_status_t -amdsmi_set_cpu_pwr_efficiency_mode.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t] -amdsmi_get_cpu_core_boostlimit = _libraries['libamd_smi.so'].amdsmi_get_cpu_core_boostlimit -amdsmi_get_cpu_core_boostlimit.restype = amdsmi_status_t -amdsmi_get_cpu_core_boostlimit.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_socket_c0_residency = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_c0_residency -amdsmi_get_cpu_socket_c0_residency.restype = amdsmi_status_t -amdsmi_get_cpu_socket_c0_residency.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_set_cpu_core_boostlimit = _libraries['libamd_smi.so'].amdsmi_set_cpu_core_boostlimit -amdsmi_set_cpu_core_boostlimit.restype = amdsmi_status_t -amdsmi_set_cpu_core_boostlimit.argtypes = [amdsmi_processor_handle, uint32_t, uint32_t] -amdsmi_set_cpu_socket_boostlimit = _libraries['libamd_smi.so'].amdsmi_set_cpu_socket_boostlimit -amdsmi_set_cpu_socket_boostlimit.restype = amdsmi_status_t -amdsmi_set_cpu_socket_boostlimit.argtypes = [amdsmi_cpusocket_handle, uint32_t, uint32_t] -amdsmi_get_cpu_ddr_bw = _libraries['libamd_smi.so'].amdsmi_get_cpu_ddr_bw -amdsmi_get_cpu_ddr_bw.restype = amdsmi_status_t -amdsmi_get_cpu_ddr_bw.argtypes = [amdsmi_cpusocket_handle, ctypes.POINTER(struct_amdsmi_ddr_bw_metrics_t)] -amdsmi_get_cpu_socket_temperature = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_temperature -amdsmi_get_cpu_socket_temperature.restype = amdsmi_status_t -amdsmi_get_cpu_socket_temperature.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_dimm_temp_range_and_refresh_rate = _libraries['libamd_smi.so'].amdsmi_get_cpu_dimm_temp_range_and_refresh_rate -amdsmi_get_cpu_dimm_temp_range_and_refresh_rate.restype = amdsmi_status_t -amdsmi_get_cpu_dimm_temp_range_and_refresh_rate.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, ctypes.POINTER(struct_amdsmi_temp_range_refresh_rate_t)] -amdsmi_get_cpu_dimm_power_consumption = _libraries['libamd_smi.so'].amdsmi_get_cpu_dimm_power_consumption -amdsmi_get_cpu_dimm_power_consumption.restype = amdsmi_status_t -amdsmi_get_cpu_dimm_power_consumption.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, ctypes.POINTER(struct_amdsmi_dimm_power_t)] -amdsmi_get_cpu_dimm_thermal_sensor = _libraries['libamd_smi.so'].amdsmi_get_cpu_dimm_thermal_sensor -amdsmi_get_cpu_dimm_thermal_sensor.restype = amdsmi_status_t -amdsmi_get_cpu_dimm_thermal_sensor.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, ctypes.POINTER(struct_amdsmi_dimm_thermal_t)] -amdsmi_set_cpu_xgmi_width = _libraries['libamd_smi.so'].amdsmi_set_cpu_xgmi_width -amdsmi_set_cpu_xgmi_width.restype = amdsmi_status_t -amdsmi_set_cpu_xgmi_width.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t] -amdsmi_set_cpu_gmi3_link_width_range = _libraries['libamd_smi.so'].amdsmi_set_cpu_gmi3_link_width_range -amdsmi_set_cpu_gmi3_link_width_range.restype = amdsmi_status_t -amdsmi_set_cpu_gmi3_link_width_range.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, uint8_t] -amdsmi_cpu_apb_enable = _libraries['libamd_smi.so'].amdsmi_cpu_apb_enable -amdsmi_cpu_apb_enable.restype = amdsmi_status_t -amdsmi_cpu_apb_enable.argtypes = [amdsmi_cpusocket_handle, uint32_t] -amdsmi_cpu_apb_disable = _libraries['libamd_smi.so'].amdsmi_cpu_apb_disable -amdsmi_cpu_apb_disable.restype = amdsmi_status_t -amdsmi_cpu_apb_disable.argtypes = [amdsmi_cpusocket_handle, uint32_t, uint8_t] -amdsmi_set_cpu_socket_lclk_dpm_level = _libraries['libamd_smi.so'].amdsmi_set_cpu_socket_lclk_dpm_level -amdsmi_set_cpu_socket_lclk_dpm_level.restype = amdsmi_status_t -amdsmi_set_cpu_socket_lclk_dpm_level.argtypes = [amdsmi_cpusocket_handle, uint32_t, uint8_t, uint8_t, uint8_t] -amdsmi_get_cpu_socket_lclk_dpm_level = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_lclk_dpm_level -amdsmi_get_cpu_socket_lclk_dpm_level.restype = amdsmi_status_t -amdsmi_get_cpu_socket_lclk_dpm_level.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, ctypes.POINTER(struct_amdsmi_dpm_level_t)] -amdsmi_set_cpu_pcie_link_rate = _libraries['libamd_smi.so'].amdsmi_set_cpu_pcie_link_rate -amdsmi_set_cpu_pcie_link_rate.restype = amdsmi_status_t -amdsmi_set_cpu_pcie_link_rate.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, ctypes.POINTER(ctypes.c_ubyte)] -amdsmi_set_cpu_df_pstate_range = _libraries['libamd_smi.so'].amdsmi_set_cpu_df_pstate_range -amdsmi_set_cpu_df_pstate_range.restype = amdsmi_status_t -amdsmi_set_cpu_df_pstate_range.argtypes = [amdsmi_cpusocket_handle, uint8_t, uint8_t, uint8_t] -amdsmi_get_cpu_current_io_bandwidth = _libraries['libamd_smi.so'].amdsmi_get_cpu_current_io_bandwidth -amdsmi_get_cpu_current_io_bandwidth.restype = amdsmi_status_t -amdsmi_get_cpu_current_io_bandwidth.argtypes = [amdsmi_cpusocket_handle, uint8_t, amdsmi_link_id_bw_type_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_cpu_current_xgmi_bw = _libraries['libamd_smi.so'].amdsmi_get_cpu_current_xgmi_bw -amdsmi_get_cpu_current_xgmi_bw.restype = amdsmi_status_t -amdsmi_get_cpu_current_xgmi_bw.argtypes = [amdsmi_cpusocket_handle, amdsmi_link_id_bw_type_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_metrics_table_version = _libraries['libamd_smi.so'].amdsmi_get_metrics_table_version -amdsmi_get_metrics_table_version.restype = amdsmi_status_t -amdsmi_get_metrics_table_version.argtypes = [amdsmi_cpusocket_handle, ctypes.POINTER(ctypes.c_uint32)] -class struct_hsmp_metric_table(Structure): - pass - -amdsmi_get_metrics_table = _libraries['libamd_smi.so'].amdsmi_get_metrics_table -amdsmi_get_metrics_table.restype = amdsmi_status_t -amdsmi_get_metrics_table.argtypes = [amdsmi_cpusocket_handle, uint8_t, ctypes.POINTER(struct_hsmp_metric_table)] -amdsmi_first_online_core_on_cpu_socket = _libraries['libamd_smi.so'].amdsmi_first_online_core_on_cpu_socket -amdsmi_first_online_core_on_cpu_socket.restype = amdsmi_status_t -amdsmi_first_online_core_on_cpu_socket.argtypes = [amdsmi_cpusocket_handle, uint32_t, ctypes.POINTER(ctypes.c_uint32)] -amdsmi_get_esmi_err_msg = _libraries['libamd_smi.so'].amdsmi_get_esmi_err_msg -amdsmi_get_esmi_err_msg.restype = ctypes.POINTER(ctypes.POINTER(ctypes.c_char)) -amdsmi_get_esmi_err_msg.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] +amdsmi_get_gpu_total_ecc_count.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] __all__ = \ - ['AGG_BW0', 'AMDSMI_ARG_PTR_NULL', 'AMDSMI_AVERAGE_POWER', - 'AMDSMI_CNTR_CMD_START', 'AMDSMI_CNTR_CMD_STOP', + ['AMDSMI_CNTR_CMD_START', 'AMDSMI_CNTR_CMD_STOP', 'AMDSMI_COARSE_GRAIN_GFX_ACTIVITY', - 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', 'AMDSMI_CURRENT_POWER', - 'AMDSMI_DEV_PERF_LEVEL_AUTO', 'AMDSMI_DEV_PERF_LEVEL_DETERMINISM', + 'AMDSMI_COARSE_GRAIN_MEM_ACTIVITY', 'AMDSMI_DEV_PERF_LEVEL_AUTO', + 'AMDSMI_DEV_PERF_LEVEL_DETERMINISM', 'AMDSMI_DEV_PERF_LEVEL_FIRST', 'AMDSMI_DEV_PERF_LEVEL_HIGH', 'AMDSMI_DEV_PERF_LEVEL_LAST', 'AMDSMI_DEV_PERF_LEVEL_LOW', 'AMDSMI_DEV_PERF_LEVEL_MANUAL', @@ -2344,33 +1684,30 @@ class struct_hsmp_metric_table(Structure): 'AMDSMI_EVT_NOTIF_GPU_POST_RESET', 'AMDSMI_EVT_NOTIF_GPU_PRE_RESET', 'AMDSMI_EVT_NOTIF_LAST', 'AMDSMI_EVT_NOTIF_THERMAL_THROTTLE', 'AMDSMI_EVT_NOTIF_VMFAULT', - 'AMDSMI_FILE_NOT_FOUND', 'AMDSMI_FREQ_IND_INVALID', - 'AMDSMI_FREQ_IND_MAX', 'AMDSMI_FREQ_IND_MIN', - 'AMDSMI_GPU_BLOCK_ATHUB', 'AMDSMI_GPU_BLOCK_DF', - 'AMDSMI_GPU_BLOCK_FIRST', 'AMDSMI_GPU_BLOCK_FUSE', - 'AMDSMI_GPU_BLOCK_GFX', 'AMDSMI_GPU_BLOCK_HDP', - 'AMDSMI_GPU_BLOCK_INVALID', 'AMDSMI_GPU_BLOCK_LAST', - 'AMDSMI_GPU_BLOCK_MMHUB', 'AMDSMI_GPU_BLOCK_MP0', - 'AMDSMI_GPU_BLOCK_MP1', 'AMDSMI_GPU_BLOCK_PCIE_BIF', - 'AMDSMI_GPU_BLOCK_RESERVED', 'AMDSMI_GPU_BLOCK_SDMA', - 'AMDSMI_GPU_BLOCK_SEM', 'AMDSMI_GPU_BLOCK_SMN', - 'AMDSMI_GPU_BLOCK_UMC', 'AMDSMI_GPU_BLOCK_XGMI_WAFL', - 'AMDSMI_HSMP_TIMEOUT', 'AMDSMI_INIT_ALL_PROCESSORS', + 'AMDSMI_FREQ_IND_INVALID', 'AMDSMI_FREQ_IND_MAX', + 'AMDSMI_FREQ_IND_MIN', 'AMDSMI_GPU_BLOCK_ATHUB', + 'AMDSMI_GPU_BLOCK_DF', 'AMDSMI_GPU_BLOCK_FIRST', + 'AMDSMI_GPU_BLOCK_FUSE', 'AMDSMI_GPU_BLOCK_GFX', + 'AMDSMI_GPU_BLOCK_HDP', 'AMDSMI_GPU_BLOCK_INVALID', + 'AMDSMI_GPU_BLOCK_LAST', 'AMDSMI_GPU_BLOCK_MMHUB', + 'AMDSMI_GPU_BLOCK_MP0', 'AMDSMI_GPU_BLOCK_MP1', + 'AMDSMI_GPU_BLOCK_PCIE_BIF', 'AMDSMI_GPU_BLOCK_RESERVED', + 'AMDSMI_GPU_BLOCK_SDMA', 'AMDSMI_GPU_BLOCK_SEM', + 'AMDSMI_GPU_BLOCK_SMN', 'AMDSMI_GPU_BLOCK_UMC', + 'AMDSMI_GPU_BLOCK_XGMI_WAFL', 'AMDSMI_INIT_ALL_PROCESSORS', 'AMDSMI_INIT_AMD_CPUS', 'AMDSMI_INIT_AMD_GPUS', 'AMDSMI_INIT_NON_AMD_CPUS', 'AMDSMI_INIT_NON_AMD_GPUS', - 'AMDSMI_INVALID_POWER', 'AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES', + 'AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES', 'AMDSMI_IOLINK_TYPE_PCIEXPRESS', 'AMDSMI_IOLINK_TYPE_SIZE', 'AMDSMI_IOLINK_TYPE_UNDEFINED', 'AMDSMI_IOLINK_TYPE_XGMI', + 'AMDSMI_IO_LINK_TYPE', 'AMDSMI_IO_LINK_TYPE__enumvalues', 'AMDSMI_MEM_PAGE_STATUS_PENDING', 'AMDSMI_MEM_PAGE_STATUS_RESERVED', 'AMDSMI_MEM_PAGE_STATUS_UNRESERVABLE', 'AMDSMI_MEM_TYPE_FIRST', 'AMDSMI_MEM_TYPE_GTT', 'AMDSMI_MEM_TYPE_LAST', 'AMDSMI_MEM_TYPE_VIS_VRAM', 'AMDSMI_MEM_TYPE_VRAM', 'AMDSMI_MM_UVD', 'AMDSMI_MM_VCE', 'AMDSMI_MM_VCN', - 'AMDSMI_MM__MAX', 'AMDSMI_NO_DRV', 'AMDSMI_NO_ENERGY_DRV', - 'AMDSMI_NO_HSMP_DRV', 'AMDSMI_NO_HSMP_MSG_SUP', - 'AMDSMI_NO_HSMP_SUP', 'AMDSMI_NO_MSR_DRV', - 'AMDSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK', + 'AMDSMI_MM__MAX', 'AMDSMI_PWR_PROF_PRST_3D_FULL_SCR_MASK', 'AMDSMI_PWR_PROF_PRST_BOOTUP_DEFAULT', 'AMDSMI_PWR_PROF_PRST_COMPUTE_MASK', 'AMDSMI_PWR_PROF_PRST_CUSTOM_MASK', @@ -2381,79 +1718,58 @@ class struct_hsmp_metric_table(Structure): 'AMDSMI_RAS_ERR_STATE_INVALID', 'AMDSMI_RAS_ERR_STATE_LAST', 'AMDSMI_RAS_ERR_STATE_MULT_UC', 'AMDSMI_RAS_ERR_STATE_NONE', 'AMDSMI_RAS_ERR_STATE_PARITY', 'AMDSMI_RAS_ERR_STATE_POISON', - 'AMDSMI_RAS_ERR_STATE_SING_C', 'AMDSMI_REG_PCIE', - 'AMDSMI_REG_USR', 'AMDSMI_REG_USR1', 'AMDSMI_REG_WAFL', - 'AMDSMI_REG_XGMI', 'AMDSMI_SLOT_TYPE__CEM', - 'AMDSMI_SLOT_TYPE__OAM', 'AMDSMI_SLOT_TYPE__PCIE', - 'AMDSMI_SLOT_TYPE__RESERVED', 'AMDSMI_STATUS_ADDRESS_FAULT', - 'AMDSMI_STATUS_AMDGPU_RESTART_ERR', 'AMDSMI_STATUS_API_FAILED', - 'AMDSMI_STATUS_BUSY', 'AMDSMI_STATUS_DRIVER_NOT_LOADED', + 'AMDSMI_RAS_ERR_STATE_SING_C', 'AMDSMI_STATUS_ADDRESS_FAULT', + 'AMDSMI_STATUS_API_FAILED', 'AMDSMI_STATUS_BUSY', 'AMDSMI_STATUS_DRM_ERROR', 'AMDSMI_STATUS_FAIL_LOAD_MODULE', 'AMDSMI_STATUS_FAIL_LOAD_SYMBOL', 'AMDSMI_STATUS_FILE_ERROR', 'AMDSMI_STATUS_INIT_ERROR', 'AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS', 'AMDSMI_STATUS_INSUFFICIENT_SIZE', 'AMDSMI_STATUS_INTERNAL_EXCEPTION', 'AMDSMI_STATUS_INTERRUPT', 'AMDSMI_STATUS_INVAL', 'AMDSMI_STATUS_IO', - 'AMDSMI_STATUS_MAP_ERROR', 'AMDSMI_STATUS_NON_AMD_CPU', - 'AMDSMI_STATUS_NOT_FOUND', 'AMDSMI_STATUS_NOT_INIT', - 'AMDSMI_STATUS_NOT_SUPPORTED', + 'AMDSMI_STATUS_MAP_ERROR', 'AMDSMI_STATUS_NOT_FOUND', + 'AMDSMI_STATUS_NOT_INIT', 'AMDSMI_STATUS_NOT_SUPPORTED', 'AMDSMI_STATUS_NOT_YET_IMPLEMENTED', 'AMDSMI_STATUS_NO_DATA', 'AMDSMI_STATUS_NO_PERM', 'AMDSMI_STATUS_NO_SLOT', 'AMDSMI_STATUS_OUT_OF_RESOURCES', 'AMDSMI_STATUS_REFCOUNT_OVERFLOW', 'AMDSMI_STATUS_RETRY', - 'AMDSMI_STATUS_SETTING_UNAVAILABLE', 'AMDSMI_STATUS_SUCCESS', - 'AMDSMI_STATUS_TIMEOUT', 'AMDSMI_STATUS_UNEXPECTED_DATA', - 'AMDSMI_STATUS_UNEXPECTED_SIZE', 'AMDSMI_STATUS_UNKNOWN_ERROR', - 'AMDSMI_TEMP_CRITICAL', 'AMDSMI_TEMP_CRITICAL_HYST', - 'AMDSMI_TEMP_CRIT_MIN', 'AMDSMI_TEMP_CRIT_MIN_HYST', - 'AMDSMI_TEMP_CURRENT', 'AMDSMI_TEMP_EMERGENCY', - 'AMDSMI_TEMP_EMERGENCY_HYST', 'AMDSMI_TEMP_FIRST', - 'AMDSMI_TEMP_HIGHEST', 'AMDSMI_TEMP_LAST', 'AMDSMI_TEMP_LOWEST', - 'AMDSMI_TEMP_MAX', 'AMDSMI_TEMP_MAX_HYST', 'AMDSMI_TEMP_MIN', - 'AMDSMI_TEMP_MIN_HYST', 'AMDSMI_TEMP_OFFSET', + 'AMDSMI_STATUS_SUCCESS', 'AMDSMI_STATUS_TIMEOUT', + 'AMDSMI_STATUS_UNEXPECTED_DATA', 'AMDSMI_STATUS_UNEXPECTED_SIZE', + 'AMDSMI_STATUS_UNKNOWN_ERROR', 'AMDSMI_TEMP_CRITICAL', + 'AMDSMI_TEMP_CRITICAL_HYST', 'AMDSMI_TEMP_CRIT_MIN', + 'AMDSMI_TEMP_CRIT_MIN_HYST', 'AMDSMI_TEMP_CURRENT', + 'AMDSMI_TEMP_EMERGENCY', 'AMDSMI_TEMP_EMERGENCY_HYST', + 'AMDSMI_TEMP_FIRST', 'AMDSMI_TEMP_HIGHEST', 'AMDSMI_TEMP_LAST', + 'AMDSMI_TEMP_LOWEST', 'AMDSMI_TEMP_MAX', 'AMDSMI_TEMP_MAX_HYST', + 'AMDSMI_TEMP_MIN', 'AMDSMI_TEMP_MIN_HYST', 'AMDSMI_TEMP_OFFSET', 'AMDSMI_UTILIZATION_COUNTER_FIRST', - 'AMDSMI_UTILIZATION_COUNTER_LAST', 'AMDSMI_VOLT_AVERAGE', - 'AMDSMI_VOLT_CURRENT', 'AMDSMI_VOLT_FIRST', 'AMDSMI_VOLT_HIGHEST', - 'AMDSMI_VOLT_LAST', 'AMDSMI_VOLT_LOWEST', 'AMDSMI_VOLT_MAX', - 'AMDSMI_VOLT_MAX_CRIT', 'AMDSMI_VOLT_MIN', 'AMDSMI_VOLT_MIN_CRIT', - 'AMDSMI_VOLT_TYPE_FIRST', 'AMDSMI_VOLT_TYPE_INVALID', - 'AMDSMI_VOLT_TYPE_LAST', 'AMDSMI_VOLT_TYPE_VDDGFX', - 'AMDSMI_VRAM_VENDOR__ELPIDA', 'AMDSMI_VRAM_VENDOR__ESMT', - 'AMDSMI_VRAM_VENDOR__ETRON', 'AMDSMI_VRAM_VENDOR__HYNIX', - 'AMDSMI_VRAM_VENDOR__INFINEON', 'AMDSMI_VRAM_VENDOR__MICRON', - 'AMDSMI_VRAM_VENDOR__MOSEL', 'AMDSMI_VRAM_VENDOR__NANYA', - 'AMDSMI_VRAM_VENDOR__PLACEHOLDER0', - 'AMDSMI_VRAM_VENDOR__PLACEHOLDER1', - 'AMDSMI_VRAM_VENDOR__PLACEHOLDER2', - 'AMDSMI_VRAM_VENDOR__PLACEHOLDER3', - 'AMDSMI_VRAM_VENDOR__PLACEHOLDER4', - 'AMDSMI_VRAM_VENDOR__PLACEHOLDER5', 'AMDSMI_VRAM_VENDOR__SAMSUNG', - 'AMDSMI_VRAM_VENDOR__WINBOND', 'AMDSMI_XGMI_STATUS_ERROR', + 'AMDSMI_UTILIZATION_COUNTER_LAST', + 'AMDSMI_UTILIZATION_COUNTER_TYPE', + 'AMDSMI_UTILIZATION_COUNTER_TYPE__enumvalues', + 'AMDSMI_VOLT_AVERAGE', 'AMDSMI_VOLT_CURRENT', 'AMDSMI_VOLT_FIRST', + 'AMDSMI_VOLT_HIGHEST', 'AMDSMI_VOLT_LAST', 'AMDSMI_VOLT_LOWEST', + 'AMDSMI_VOLT_MAX', 'AMDSMI_VOLT_MAX_CRIT', 'AMDSMI_VOLT_MIN', + 'AMDSMI_VOLT_MIN_CRIT', 'AMDSMI_VOLT_TYPE_FIRST', + 'AMDSMI_VOLT_TYPE_INVALID', 'AMDSMI_VOLT_TYPE_LAST', + 'AMDSMI_VOLT_TYPE_VDDGFX', 'AMDSMI_XGMI_STATUS_ERROR', 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS', - 'AMDSMI_XGMI_STATUS_NO_ERRORS', 'AMD_APU', 'AMD_CPU', - 'AMD_CPU_CORE', 'AMD_GPU', 'CACHE_FLAGS_CPU_CACHE', - 'CACHE_FLAGS_DATA_CACHE', 'CACHE_FLAGS_ENABLED', - 'CACHE_FLAGS_INST_CACHE', 'CACHE_FLAGS_SIMD_CACHE', + 'AMDSMI_XGMI_STATUS_NO_ERRORS', 'AMD_CPU', 'AMD_GPU', 'CLK_TYPE_DCEF', 'CLK_TYPE_DCLK0', 'CLK_TYPE_DCLK1', 'CLK_TYPE_DF', 'CLK_TYPE_FIRST', 'CLK_TYPE_GFX', 'CLK_TYPE_MEM', 'CLK_TYPE_PCIE', 'CLK_TYPE_SOC', 'CLK_TYPE_SYS', 'CLK_TYPE_VCLK0', - 'CLK_TYPE_VCLK1', 'CLK_TYPE__MAX', 'COMPUTE_PARTITION_CPX', - 'COMPUTE_PARTITION_DPX', 'COMPUTE_PARTITION_INVALID', - 'COMPUTE_PARTITION_QPX', 'COMPUTE_PARTITION_SPX', - 'COMPUTE_PARTITION_TPX', 'CONTAINER_DOCKER', 'CONTAINER_LXC', - 'FW_ID_ASD', 'FW_ID_CP_CE', 'FW_ID_CP_ME', 'FW_ID_CP_MEC1', - 'FW_ID_CP_MEC2', 'FW_ID_CP_MEC_JT1', 'FW_ID_CP_MEC_JT2', - 'FW_ID_CP_MES', 'FW_ID_CP_PFP', 'FW_ID_CP_PM4', 'FW_ID_DFC', - 'FW_ID_DMCU', 'FW_ID_DMCU_ERAM', 'FW_ID_DMCU_ISR', - 'FW_ID_DRV_CAP', 'FW_ID_FIRST', 'FW_ID_IMU_DRAM', - 'FW_ID_IMU_IRAM', 'FW_ID_ISP', 'FW_ID_MC', 'FW_ID_MES_KIQ', + 'CLK_TYPE_VCLK1', 'CLK_TYPE__MAX', 'CONTAINER_DOCKER', + 'CONTAINER_LXC', 'FW_ID_ASD', 'FW_ID_CP_CE', 'FW_ID_CP_ME', + 'FW_ID_CP_MEC1', 'FW_ID_CP_MEC2', 'FW_ID_CP_MEC_JT1', + 'FW_ID_CP_MEC_JT2', 'FW_ID_CP_MES', 'FW_ID_CP_PFP', + 'FW_ID_CP_PM4', 'FW_ID_DFC', 'FW_ID_DMCU', 'FW_ID_DMCU_ERAM', + 'FW_ID_DMCU_ISR', 'FW_ID_DRV_CAP', 'FW_ID_FIRST', + 'FW_ID_IMU_DRAM', 'FW_ID_IMU_IRAM', 'FW_ID_ISP', 'FW_ID_MC', 'FW_ID_MES_STACK', 'FW_ID_MES_THREAD1', 'FW_ID_MES_THREAD1_STACK', - 'FW_ID_MMSCH', 'FW_ID_PM', 'FW_ID_PPTABLE', 'FW_ID_PSP_BL', - 'FW_ID_PSP_DBG', 'FW_ID_PSP_INTF', 'FW_ID_PSP_KEYDB', - 'FW_ID_PSP_SOC', 'FW_ID_PSP_SOSDRV', 'FW_ID_PSP_SPL', - 'FW_ID_PSP_SYSDRV', 'FW_ID_PSP_TOC', 'FW_ID_REG_ACCESS_WHITELIST', - 'FW_ID_RLC', 'FW_ID_RLCV_LX7', 'FW_ID_RLC_P', - 'FW_ID_RLC_RESTORE_LIST_CNTL', 'FW_ID_RLC_RESTORE_LIST_GPM_MEM', + 'FW_ID_MMSCH', 'FW_ID_PPTABLE', 'FW_ID_PSP_BL', 'FW_ID_PSP_DBG', + 'FW_ID_PSP_INTF', 'FW_ID_PSP_KEYDB', 'FW_ID_PSP_SOC', + 'FW_ID_PSP_SOSDRV', 'FW_ID_PSP_SPL', 'FW_ID_PSP_SYSDRV', + 'FW_ID_PSP_TOC', 'FW_ID_REG_ACCESS_WHITELIST', 'FW_ID_RLC', + 'FW_ID_RLCV_LX7', 'FW_ID_RLC_P', 'FW_ID_RLC_RESTORE_LIST_CNTL', + 'FW_ID_RLC_RESTORE_LIST_GPM_MEM', 'FW_ID_RLC_RESTORE_LIST_SRM_MEM', 'FW_ID_RLC_SAVE_RESTORE_LIST', 'FW_ID_RLC_SRLG', 'FW_ID_RLC_SRLS', 'FW_ID_RLC_V', 'FW_ID_RLX6', 'FW_ID_RLX6_CORE1', 'FW_ID_RLX6_DRAM_BOOT', @@ -2465,150 +1781,64 @@ class struct_hsmp_metric_table(Structure): 'FW_ID_RS64_PFP_P1_DATA', 'FW_ID_SDMA0', 'FW_ID_SDMA1', 'FW_ID_SDMA2', 'FW_ID_SDMA3', 'FW_ID_SDMA4', 'FW_ID_SDMA5', 'FW_ID_SDMA6', 'FW_ID_SDMA7', 'FW_ID_SDMA_TH0', 'FW_ID_SDMA_TH1', - 'FW_ID_SEC_POLICY_STAGE2', 'FW_ID_SMU', 'FW_ID_TA_RAS', - 'FW_ID_TA_XGMI', 'FW_ID_UVD', 'FW_ID_VCE', 'FW_ID_VCN', - 'FW_ID__MAX', 'MEMORY_PARTITION_NPS1', 'MEMORY_PARTITION_NPS2', - 'MEMORY_PARTITION_NPS4', 'MEMORY_PARTITION_NPS8', - 'MEMORY_PARTITION_UNKNOWN', 'NON_AMD_CPU', 'NON_AMD_GPU', - 'RD_BW0', 'TEMPERATURE_TYPE_EDGE', 'TEMPERATURE_TYPE_FIRST', + 'FW_ID_SEC_POLICY_STAGE2', 'FW_ID_SMC', 'FW_ID_SMU', + 'FW_ID_TA_RAS', 'FW_ID_UVD', 'FW_ID_VCE', 'FW_ID_VCN', + 'FW_ID_XGMI', 'FW_ID__MAX', 'NON_AMD_CPU', 'NON_AMD_GPU', + 'TEMPERATURE_TYPE_EDGE', 'TEMPERATURE_TYPE_FIRST', 'TEMPERATURE_TYPE_HBM_0', 'TEMPERATURE_TYPE_HBM_1', 'TEMPERATURE_TYPE_HBM_2', 'TEMPERATURE_TYPE_HBM_3', - 'TEMPERATURE_TYPE_HOTSPOT', 'TEMPERATURE_TYPE_JUNCTION', - 'TEMPERATURE_TYPE_PLX', 'TEMPERATURE_TYPE_VRAM', - 'TEMPERATURE_TYPE__MAX', 'UNKNOWN', 'VRAM_TYPE_DDR2', - 'VRAM_TYPE_DDR3', 'VRAM_TYPE_DDR4', 'VRAM_TYPE_GDDR1', - 'VRAM_TYPE_GDDR3', 'VRAM_TYPE_GDDR4', 'VRAM_TYPE_GDDR5', - 'VRAM_TYPE_GDDR6', 'VRAM_TYPE_HBM', 'VRAM_TYPE_UNKNOWN', - 'VRAM_TYPE__MAX', 'WR_BW0', 'amd_metrics_table_header_t', - 'amdsmi_asic_info_t', 'amdsmi_bdf_t', 'amdsmi_bit_field_t', - 'amdsmi_board_info_t', 'amdsmi_cache_flags_type_t', + 'TEMPERATURE_TYPE_JUNCTION', 'TEMPERATURE_TYPE_PLX', + 'TEMPERATURE_TYPE_VRAM', 'TEMPERATURE_TYPE__MAX', 'UNKNOWN', + 'amd_metrics_table_header_t', 'amdsmi_asic_info_t', + 'amdsmi_bdf_t', 'amdsmi_bit_field_t', 'amdsmi_board_info_t', 'amdsmi_clk_info_t', 'amdsmi_clk_type_t', - 'amdsmi_compute_partition_type_t', 'amdsmi_container_types_t', - 'amdsmi_counter_command_t', 'amdsmi_counter_value_t', - 'amdsmi_cpu_apb_disable', 'amdsmi_cpu_apb_enable', - 'amdsmi_cpusocket_handle', 'amdsmi_ddr_bw_metrics_t', - 'amdsmi_dev_perf_level_t', 'amdsmi_dimm_power_t', - 'amdsmi_dimm_thermal_t', 'amdsmi_dpm_level_t', - 'amdsmi_driver_info_t', 'amdsmi_engine_usage_t', - 'amdsmi_error_count_t', 'amdsmi_event_group_t', + 'amdsmi_clk_type_t__enumvalues', 'amdsmi_container_types_t', + 'amdsmi_container_types_t__enumvalues', + 'amdsmi_counter_command_t', + 'amdsmi_counter_command_t__enumvalues', 'amdsmi_counter_value_t', + 'amdsmi_dev_perf_level_t', 'amdsmi_dev_perf_level_t__enumvalues', + 'amdsmi_engine_usage_t', 'amdsmi_error_count_t', + 'amdsmi_event_group_t', 'amdsmi_event_group_t__enumvalues', 'amdsmi_event_handle_t', 'amdsmi_event_type_t', + 'amdsmi_event_type_t__enumvalues', 'amdsmi_evt_notification_data_t', 'amdsmi_evt_notification_type_t', - 'amdsmi_first_online_core_on_cpu_socket', 'amdsmi_freq_ind_t', - 'amdsmi_freq_volt_region_t', 'amdsmi_frequencies_t', - 'amdsmi_frequency_range_t', 'amdsmi_fw_block_t', + 'amdsmi_evt_notification_type_t__enumvalues', 'amdsmi_freq_ind_t', + 'amdsmi_freq_ind_t__enumvalues', 'amdsmi_freq_volt_region_t', + 'amdsmi_frequencies_t', 'amdsmi_frequency_range_t', + 'amdsmi_fw_block_t', 'amdsmi_fw_block_t__enumvalues', 'amdsmi_fw_info_t', 'amdsmi_get_clk_freq', - 'amdsmi_get_clock_info', 'amdsmi_get_cpu_cclk_limit', - 'amdsmi_get_cpu_core_boostlimit', - 'amdsmi_get_cpu_core_current_freq_limit', - 'amdsmi_get_cpu_core_energy', - 'amdsmi_get_cpu_current_io_bandwidth', - 'amdsmi_get_cpu_current_xgmi_bw', 'amdsmi_get_cpu_ddr_bw', - 'amdsmi_get_cpu_dimm_power_consumption', - 'amdsmi_get_cpu_dimm_temp_range_and_refresh_rate', - 'amdsmi_get_cpu_dimm_thermal_sensor', 'amdsmi_get_cpu_fclk_mclk', - 'amdsmi_get_cpu_hsmp_proto_ver', 'amdsmi_get_cpu_prochot_status', - 'amdsmi_get_cpu_pwr_svi_telemetry_all_rails', - 'amdsmi_get_cpu_smu_fw_version', - 'amdsmi_get_cpu_socket_c0_residency', - 'amdsmi_get_cpu_socket_current_active_freq_limit', - 'amdsmi_get_cpu_socket_energy', - 'amdsmi_get_cpu_socket_freq_range', - 'amdsmi_get_cpu_socket_lclk_dpm_level', - 'amdsmi_get_cpu_socket_power', 'amdsmi_get_cpu_socket_power_cap', - 'amdsmi_get_cpu_socket_power_cap_max', - 'amdsmi_get_cpu_socket_temperature', 'amdsmi_get_cpucore_handles', - 'amdsmi_get_cpucore_info', 'amdsmi_get_cpusocket_handles', - 'amdsmi_get_cpusocket_info', 'amdsmi_get_energy_count', - 'amdsmi_get_esmi_err_msg', 'amdsmi_get_fw_info', - 'amdsmi_get_gpu_activity', 'amdsmi_get_gpu_asic_info', - 'amdsmi_get_gpu_available_counters', + 'amdsmi_get_clock_info', 'amdsmi_get_energy_count', + 'amdsmi_get_fw_info', 'amdsmi_get_gpu_activity', + 'amdsmi_get_gpu_asic_info', 'amdsmi_get_gpu_available_counters', 'amdsmi_get_gpu_bad_page_info', 'amdsmi_get_gpu_bdf_id', - 'amdsmi_get_gpu_board_info', 'amdsmi_get_gpu_cache_info', - 'amdsmi_get_gpu_compute_partition', + 'amdsmi_get_gpu_board_info', 'amdsmi_get_gpu_compute_process_gpus', 'amdsmi_get_gpu_compute_process_info', 'amdsmi_get_gpu_compute_process_info_by_pid', 'amdsmi_get_gpu_device_bdf', 'amdsmi_get_gpu_device_uuid', - 'amdsmi_get_gpu_driver_info', 'amdsmi_get_gpu_ecc_count', + 'amdsmi_get_gpu_driver_version', 'amdsmi_get_gpu_ecc_count', 'amdsmi_get_gpu_ecc_enabled', 'amdsmi_get_gpu_ecc_status', 'amdsmi_get_gpu_event_notification', 'amdsmi_get_gpu_fan_rpms', 'amdsmi_get_gpu_fan_speed', 'amdsmi_get_gpu_fan_speed_max', - 'amdsmi_get_gpu_id', 'amdsmi_get_gpu_memory_partition', - 'amdsmi_get_gpu_memory_reserved_pages', + 'amdsmi_get_gpu_id', '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', 'amdsmi_get_gpu_pci_replay_counter', 'amdsmi_get_gpu_pci_throughput', 'amdsmi_get_gpu_perf_level', - 'amdsmi_get_gpu_pm_metrics_info', 'amdsmi_get_gpu_power_profile_presets', 'amdsmi_get_gpu_process_info', 'amdsmi_get_gpu_process_list', 'amdsmi_get_gpu_ras_block_features_enabled', - 'amdsmi_get_gpu_ras_feature_info', - 'amdsmi_get_gpu_reg_table_info', 'amdsmi_get_gpu_revision', 'amdsmi_get_gpu_subsystem_id', 'amdsmi_get_gpu_subsystem_name', 'amdsmi_get_gpu_topo_numa_affinity', 'amdsmi_get_gpu_total_ecc_count', 'amdsmi_get_gpu_vbios_info', 'amdsmi_get_gpu_vendor_name', 'amdsmi_get_gpu_volt_metric', - 'amdsmi_get_gpu_vram_info', 'amdsmi_get_gpu_vram_usage', - 'amdsmi_get_gpu_vram_vendor', 'amdsmi_get_lib_version', - 'amdsmi_get_metrics_table', 'amdsmi_get_metrics_table_version', - 'amdsmi_get_minmax_bandwidth_between_processors', + 'amdsmi_get_gpu_vram_usage', 'amdsmi_get_gpu_vram_vendor', + 'amdsmi_get_lib_version', + 'amdsmi_get_minmax_bandwith_between_processors', 'amdsmi_get_pcie_link_caps', 'amdsmi_get_pcie_link_status', 'amdsmi_get_power_cap_info', 'amdsmi_get_power_info', 'amdsmi_get_processor_handle_from_bdf', @@ -2616,87 +1846,97 @@ class struct_hsmp_metric_table(Structure): 'amdsmi_get_socket_handles', 'amdsmi_get_socket_info', 'amdsmi_get_temp_metric', 'amdsmi_get_utilization_count', 'amdsmi_get_xgmi_info', 'amdsmi_gpu_block_t', - 'amdsmi_gpu_cache_info_t', 'amdsmi_gpu_control_counter', + 'amdsmi_gpu_block_t__enumvalues', 'amdsmi_gpu_control_counter', 'amdsmi_gpu_counter_group_supported', 'amdsmi_gpu_create_counter', 'amdsmi_gpu_destroy_counter', 'amdsmi_gpu_metrics_t', 'amdsmi_gpu_read_counter', 'amdsmi_gpu_xgmi_error_status', 'amdsmi_init', 'amdsmi_init_flags_t', - 'amdsmi_init_gpu_event_notification', 'amdsmi_io_bw_encoding_t', - 'amdsmi_io_link_type_t', 'amdsmi_is_P2P_accessible', - 'amdsmi_is_gpu_power_management_enabled', - 'amdsmi_link_id_bw_type_t', 'amdsmi_memory_page_status_t', - 'amdsmi_memory_partition_type_t', 'amdsmi_memory_type_t', - 'amdsmi_mm_ip_t', 'amdsmi_name_value_t', 'amdsmi_od_vddc_point_t', + 'amdsmi_init_flags_t__enumvalues', + 'amdsmi_init_gpu_event_notification', 'amdsmi_is_P2P_accessible', + 'amdsmi_memory_page_status_t', + 'amdsmi_memory_page_status_t__enumvalues', 'amdsmi_memory_type_t', + 'amdsmi_memory_type_t__enumvalues', 'amdsmi_mm_ip_t', + 'amdsmi_mm_ip_t__enumvalues', 'amdsmi_od_vddc_point_t', 'amdsmi_od_volt_curve_t', 'amdsmi_od_volt_freq_data_t', 'amdsmi_pcie_bandwidth_t', 'amdsmi_pcie_info_t', - 'amdsmi_pcie_slot_type_t', 'amdsmi_power_cap_info_t', - 'amdsmi_power_info_t', 'amdsmi_power_profile_preset_masks_t', - 'amdsmi_power_profile_status_t', 'amdsmi_power_type_t', - 'amdsmi_proc_info_t', 'amdsmi_process_handle_t', - 'amdsmi_process_info_t', 'amdsmi_processor_handle', - 'amdsmi_range_t', 'amdsmi_ras_err_state_t', - 'amdsmi_ras_feature_t', 'amdsmi_reg_type_t', 'amdsmi_reset_gpu', - 'amdsmi_reset_gpu_compute_partition', 'amdsmi_reset_gpu_fan', - 'amdsmi_reset_gpu_memory_partition', + 'amdsmi_power_cap_info_t', 'amdsmi_power_info_t', + 'amdsmi_power_profile_preset_masks_t', + 'amdsmi_power_profile_preset_masks_t__enumvalues', + 'amdsmi_power_profile_status_t', 'amdsmi_proc_info_t', + 'amdsmi_process_handle_t', 'amdsmi_process_info_t', + 'amdsmi_processor_handle', 'amdsmi_range_t', + 'amdsmi_ras_err_state_t', 'amdsmi_ras_err_state_t__enumvalues', + 'amdsmi_reset_gpu', 'amdsmi_reset_gpu_fan', 'amdsmi_reset_gpu_xgmi_error', 'amdsmi_retired_page_record_t', - 'amdsmi_set_clk_freq', 'amdsmi_set_cpu_core_boostlimit', - 'amdsmi_set_cpu_df_pstate_range', - 'amdsmi_set_cpu_gmi3_link_width_range', - 'amdsmi_set_cpu_pcie_link_rate', - 'amdsmi_set_cpu_pwr_efficiency_mode', - 'amdsmi_set_cpu_socket_boostlimit', - 'amdsmi_set_cpu_socket_lclk_dpm_level', - 'amdsmi_set_cpu_socket_power_cap', 'amdsmi_set_cpu_xgmi_width', - 'amdsmi_set_gpu_clk_range', 'amdsmi_set_gpu_compute_partition', + 'amdsmi_set_clk_freq', 'amdsmi_set_gpu_clk_range', 'amdsmi_set_gpu_event_notification_mask', - 'amdsmi_set_gpu_fan_speed', 'amdsmi_set_gpu_memory_partition', - 'amdsmi_set_gpu_od_clk_info', 'amdsmi_set_gpu_od_volt_info', - 'amdsmi_set_gpu_overdrive_level', 'amdsmi_set_gpu_pci_bandwidth', + 'amdsmi_set_gpu_fan_speed', 'amdsmi_set_gpu_od_clk_info', + 'amdsmi_set_gpu_od_volt_info', 'amdsmi_set_gpu_overdrive_level', + 'amdsmi_set_gpu_pci_bandwidth', 'amdsmi_set_gpu_perf_determinism_mode', 'amdsmi_set_gpu_perf_level', 'amdsmi_set_gpu_power_profile', 'amdsmi_set_power_cap', 'amdsmi_shut_down', - 'amdsmi_smu_fw_version_t', 'amdsmi_socket_handle', - 'amdsmi_status_code_to_string', 'amdsmi_status_t', + 'amdsmi_socket_handle', 'amdsmi_status_code_to_string', + 'amdsmi_status_t', 'amdsmi_status_t__enumvalues', 'amdsmi_stop_gpu_event_notification', - 'amdsmi_temp_range_refresh_rate_t', 'amdsmi_temperature_metric_t', - 'amdsmi_temperature_type_t', 'amdsmi_topo_get_link_type', - 'amdsmi_topo_get_link_weight', 'amdsmi_topo_get_numa_node_number', - 'amdsmi_utilization_counter_t', - 'amdsmi_utilization_counter_type_t', 'amdsmi_vbios_info_t', + 'amdsmi_temperature_metric_t', + 'amdsmi_temperature_metric_t__enumvalues', + 'amdsmi_temperature_type_t', + 'amdsmi_temperature_type_t__enumvalues', + 'amdsmi_topo_get_link_type', 'amdsmi_topo_get_link_weight', + 'amdsmi_topo_get_numa_node_number', + 'amdsmi_utilization_counter_t', 'amdsmi_vbios_info_t', 'amdsmi_version_t', 'amdsmi_voltage_metric_t', - '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', - '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', 'struct_amdsmi_ddr_bw_metrics_t', - 'struct_amdsmi_dimm_power_t', 'struct_amdsmi_dimm_thermal_t', - 'struct_amdsmi_dpm_level_t', 'struct_amdsmi_driver_info_t', - 'struct_amdsmi_engine_usage_t', 'struct_amdsmi_error_count_t', - 'struct_amdsmi_evt_notification_data_t', - 'struct_amdsmi_freq_volt_region_t', 'struct_amdsmi_frequencies_t', - 'struct_amdsmi_frequency_range_t', 'struct_amdsmi_fw_info_t', - 'struct_amdsmi_gpu_cache_info_t', 'struct_amdsmi_gpu_metrics_t', - 'struct_amdsmi_link_id_bw_type_t', 'struct_amdsmi_name_value_t', - 'struct_amdsmi_od_vddc_point_t', 'struct_amdsmi_od_volt_curve_t', - 'struct_amdsmi_od_volt_freq_data_t', - 'struct_amdsmi_pcie_bandwidth_t', 'struct_amdsmi_pcie_info_t', - 'struct_amdsmi_power_cap_info_t', 'struct_amdsmi_power_info_t', - 'struct_amdsmi_power_profile_status_t', - 'struct_amdsmi_proc_info_t', 'struct_amdsmi_process_info_t', - 'struct_amdsmi_range_t', 'struct_amdsmi_ras_feature_t', - 'struct_amdsmi_retired_page_record_t', - 'struct_amdsmi_smu_fw_version_t', - 'struct_amdsmi_temp_range_refresh_rate_t', - 'struct_amdsmi_utilization_counter_t', - 'struct_amdsmi_vbios_info_t', 'struct_amdsmi_version_t', - 'struct_amdsmi_vram_info_t', 'struct_amdsmi_vram_usage_t', - 'struct_amdsmi_xgmi_info_t', 'struct_cache_', - 'struct_engine_usage_', 'struct_fields_', 'struct_fw_info_list_', - 'struct_hsmp_metric_table', 'struct_memory_usage_', 'uint32_t', - 'uint64_t', 'uint8_t', 'union_amdsmi_bdf_t'] + 'amdsmi_voltage_metric_t__enumvalues', 'amdsmi_voltage_type_t', + 'amdsmi_voltage_type_t__enumvalues', 'amdsmi_vram_info_t', + 'amdsmi_xgmi_info_t', 'amdsmi_xgmi_status_t', + 'amdsmi_xgmi_status_t__enumvalues', 'c__EA_AMDSMI_IO_LINK_TYPE', + 'c__EA_AMDSMI_UTILIZATION_COUNTER_TYPE', + 'c__EA_amdsmi_clk_type_t', 'c__EA_amdsmi_container_types_t', + 'c__EA_amdsmi_counter_command_t', 'c__EA_amdsmi_dev_perf_level_t', + 'c__EA_amdsmi_event_group_t', 'c__EA_amdsmi_event_type_t', + 'c__EA_amdsmi_evt_notification_type_t', 'c__EA_amdsmi_freq_ind_t', + 'c__EA_amdsmi_fw_block_t', 'c__EA_amdsmi_gpu_block_t', + 'c__EA_amdsmi_init_flags_t', 'c__EA_amdsmi_memory_page_status_t', + 'c__EA_amdsmi_memory_type_t', 'c__EA_amdsmi_mm_ip_t', + 'c__EA_amdsmi_power_profile_preset_masks_t', + 'c__EA_amdsmi_ras_err_state_t', 'c__EA_amdsmi_status_t', + 'c__EA_amdsmi_temperature_metric_t', + 'c__EA_amdsmi_temperature_type_t', + 'c__EA_amdsmi_voltage_metric_t', 'c__EA_amdsmi_voltage_type_t', + 'c__EA_amdsmi_xgmi_status_t', 'c__EA_processor_type_t', + 'processor_type_t', 'processor_type_t__enumvalues', 'size_t', + 'struct_c__SA_amd_metrics_table_header_t', + 'struct_c__SA_amdsmi_asic_info_t', + 'struct_c__SA_amdsmi_board_info_t', + 'struct_c__SA_amdsmi_clk_info_t', + 'struct_c__SA_amdsmi_counter_value_t', + 'struct_c__SA_amdsmi_engine_usage_t', + 'struct_c__SA_amdsmi_error_count_t', + 'struct_c__SA_amdsmi_evt_notification_data_t', + 'struct_c__SA_amdsmi_freq_volt_region_t', + 'struct_c__SA_amdsmi_frequencies_t', + 'struct_c__SA_amdsmi_frequency_range_t', + 'struct_c__SA_amdsmi_fw_info_t', + 'struct_c__SA_amdsmi_fw_info_t_0', + 'struct_c__SA_amdsmi_gpu_metrics_t', + 'struct_c__SA_amdsmi_od_vddc_point_t', + 'struct_c__SA_amdsmi_od_volt_curve_t', + 'struct_c__SA_amdsmi_od_volt_freq_data_t', + 'struct_c__SA_amdsmi_pcie_bandwidth_t', + 'struct_c__SA_amdsmi_pcie_info_t', + 'struct_c__SA_amdsmi_power_cap_info_t', + 'struct_c__SA_amdsmi_power_info_t', + 'struct_c__SA_amdsmi_power_profile_status_t', + 'struct_c__SA_amdsmi_proc_info_t', + 'struct_c__SA_amdsmi_proc_info_t_0', + 'struct_c__SA_amdsmi_proc_info_t_1', + 'struct_c__SA_amdsmi_process_info_t', + 'struct_c__SA_amdsmi_range_t', + 'struct_c__SA_amdsmi_retired_page_record_t', + 'struct_c__SA_amdsmi_utilization_counter_t', + 'struct_c__SA_amdsmi_vbios_info_t', + 'struct_c__SA_amdsmi_version_t', + 'struct_c__SA_amdsmi_vram_info_t', + 'struct_c__SA_amdsmi_xgmi_info_t', 'struct_c__UA_amdsmi_bdf_t_0', + 'uint32_t', 'uint64_t', 'union_c__UA_amdsmi_bdf_t'] diff --git a/py-interface/pyproject.toml b/py-interface/pyproject.toml index 34bcf0a..8bcc24d 100644 --- a/py-interface/pyproject.toml +++ b/py-interface/pyproject.toml @@ -2,7 +2,7 @@ # https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html [build-system] -requires = ["setuptools>=59.0"] +requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] @@ -10,11 +10,11 @@ name = "amdsmi" authors = [ {name = "AMD", email = "amd-smi.support@amd.com"}, ] -version = "23.4.2+rocm-6.0.0" +version = "23.2.0.1" license = {file = "LICENSE"} readme = {file = "README.md", content-type = "text/markdown"} description = "AMDSMI Python LIB - AMD GPU Monitoring Library" -requires-python = ">=3.6" +requires-python = ">=3.7" dependencies = [ "PyYAML >= 5.0", "clang >= 14.0" @@ -25,7 +25,3 @@ dependencies = [ [tool.setuptools] packages = ["amdsmi"] - -# install libamd_smi.so -[tool.setuptools.package-data] -amdsmi = ["*.so"] diff --git a/py-interface/setup.cfg b/py-interface/setup.cfg deleted file mode 100644 index 944ae76..0000000 --- a/py-interface/setup.cfg +++ /dev/null @@ -1,25 +0,0 @@ -# this file is only required for setuptools < 61.0 -# mostly a rhel8 limitation... - -[metadata] -name = amdsmi -author = AMD -author_email = amd-smi.support@amd.com -url = https://github.com/RadeonOpenCompute/amdsmi -description = AMDSMI Python LIB - AMD GPU Monitoring Library -version = 23.4.2+rocm-6.0.0 -license_file = amdsmi/LICENSE -classifiers = - Programming Language :: Python :: 3 - -[options] -zip_safe = False -include_package_data = True -packages = find: -python_requires = >=3.6 -install_requires= - PyYAML >= 5.0 - clang >= 14.0 - -[options.package_data] -* = *.so \ No newline at end of file