diff --git a/py-interface/README.md b/py-interface/README.md index fee3a48770..6343bb1775 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -3821,3 +3821,126 @@ try: 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) +``` diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index ea1bf675a5..d1069be1ab 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -876,6 +876,101 @@ def amdsmi_get_cpu_socket_power( return ppower.value +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): + raise AmdSmiParameterException( + socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + ) + if not isinstance(sock_idx, int): + raise AmdSmiParameterException(sock_idx, int) + + pcap = ctypes.c_uint32() + _check_res( + amdsmi_wrapper.amdsmi_get_cpu_socket_power_cap( + socket_handle, sock_idx, ctypes.byref(pcap) + ) + ) + + return pcap.value + +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): + raise AmdSmiParameterException( + socket_handle, amdsmi_wrapper.amdsmi_cpusocket_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) + ) + ) + + return pmax.value + +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): + raise AmdSmiParameterException( + socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle + ) + if not isinstance(sock_idx, int): + raise AmdSmiParameterException(sock_idx, int) + + power = ctypes.c_uint32() + _check_res( + amdsmi_wrapper.amdsmi_get_cpu_pwr_svi_telemetry_all_rails( + socket_handle, sock_idx, ctypes.byref(power) + ) + ) + + return power.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): + raise AmdSmiParameterException( + socket_handle, amdsmi_wrapper.amdsmi_cpusocket_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): + 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) + + _check_res( + amdsmi_wrapper.amdsmi_set_cpu_pwr_efficiency_mode( + socket_handle, sock_idx, mode) + ) + def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS): if not isinstance(flag, AmdSmiInitFlags): raise AmdSmiParameterException(flag, AmdSmiInitFlags)