From 9cc5c303a2531198553c2fde9d46df9c46cabcf2 Mon Sep 17 00:00:00 2001 From: "Castillo, Juan" Date: Tue, 21 Jan 2025 14:11:41 -0600 Subject: [PATCH] [SWDEV-508173] [AMDSMI] Python API missing function errors (#46) * [SWDEV-508173] Updates include: - Updating py-interface to import amdsmi_get_gpu_reg_table_info and amdsmi_get_gpu_pm_metrics_info. - Updating the ctypes from byref to pointer. Signed-off-by: Castillo, Juan --- py-interface/__init__.py | 2 ++ py-interface/amdsmi_interface.py | 12 ++++----- tests/python_unittest/integration_test.py | 33 ++++++++++++++++++++++- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/py-interface/__init__.py b/py-interface/__init__.py index db8df1eb87..30ef0c368d 100644 --- a/py-interface/__init__.py +++ b/py-interface/__init__.py @@ -231,6 +231,8 @@ from .amdsmi_interface import amdsmi_set_gpu_memory_partition_mode # # Individual GPU Metrics Functions from .amdsmi_interface import amdsmi_get_gpu_metrics_header_info +from .amdsmi_interface import amdsmi_get_gpu_reg_table_info +from .amdsmi_interface import amdsmi_get_gpu_pm_metrics_info # # Enums from .amdsmi_interface import AmdSmiInitFlags diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 10c5d0d81e..a5a847015b 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -1778,12 +1778,12 @@ def amdsmi_get_gpu_pm_metrics_info( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - pm_metrics = ctypes.POINTER(amdsmi_wrapper.amdsmi_name_value_t) - num_mets = ctypes.c_uint32 + pm_metrics = ctypes.POINTER(amdsmi_wrapper.amdsmi_name_value_t)() + num_mets = ctypes.c_uint32() _check_res( amdsmi_wrapper.amdsmi_get_gpu_pm_metrics_info( - processor_handle, ctypes.byref(pm_metrics), ctypes.byref(num_mets) + processor_handle, ctypes.pointer(pm_metrics), ctypes.byref(num_mets) ) ) @@ -1807,12 +1807,12 @@ def amdsmi_get_gpu_reg_table_info( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - reg_metrics = ctypes.POINTER(amdsmi_wrapper.amdsmi_name_value_t) - num_regs = ctypes.c_uint32 + reg_metrics = ctypes.POINTER(amdsmi_wrapper.amdsmi_name_value_t)() + num_regs = ctypes.c_uint32() _check_res( amdsmi_wrapper.amdsmi_get_gpu_reg_table_info( - processor_handle, reg_type, ctypes.byref(reg_metrics), ctypes.byref(num_regs) + processor_handle, reg_type, ctypes.pointer(reg_metrics), ctypes.byref(num_regs) ) ) diff --git a/tests/python_unittest/integration_test.py b/tests/python_unittest/integration_test.py index 925a3bd0e7..8d482e0202 100755 --- a/tests/python_unittest/integration_test.py +++ b/tests/python_unittest/integration_test.py @@ -20,6 +20,8 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import sys + +import amdsmi.amdsmi_wrapper sys.path.append("/opt/rocm/libexec/amdsmi_cli/") try: @@ -923,7 +925,36 @@ class TestAmdSmiPythonInterface(unittest.TestCase): violation_status['active_gfx_clk_below_host_limit'])) print() self.tearDown() - + + # Add test for amdsmi_get_gpu_reg_table_info + @handle_exceptions + def test_gpu_reg_table_info(self): + self.setUp() + print("\n\n###Test amdsmi_get_gpu_reg_table_info") + processors = amdsmi.amdsmi_get_processor_handles() + for i in range(0, len(processors)): + print("\n\n###Test Processor {}".format(i)) + print("\n###Test amdsmi_get_gpu_reg_table_info \n") + reg_table_info = amdsmi.amdsmi_get_gpu_reg_table_info(processors[i], amdsmi.amdsmi_interface.AmdSmiRegType.PCIE) + print(" reg_table_info['reg_table'] is: {}".format( + reg_table_info['reg_table'])) + print() + self.tearDown() + + # Add test for amdsmi_get_gpu_pm_metrics_info + @handle_exceptions + def test_gpu_pm_metrics_info(self): + self.setUp() + print("\n\n###Test amdsmi_get_gpu_pm_metrics_info") + processors = amdsmi.amdsmi_get_processor_handles() + for i in range(0, len(processors)): + print("\n\n###Test Processor {}".format(i)) + print("\n###Test amdsmi_get_gpu_pm_metrics_info \n") + pm_metrics_info = amdsmi.amdsmi_get_gpu_pm_metrics_info(processors[i]) + print(" pm_metrics_info['pm_metrics'] is: {}".format( + pm_metrics_info['pm_metrics'])) + print() + self.tearDown() def test_walkthrough(self): print("\n\n#######################################################################")