Added another set of esmi python wrappers for

amdsmi python library

Change-Id: Ib49efe21d4909c3e4a011eddcd96f587a9b6570c
This commit is contained in:
Deepak Mewar
2023-10-11 06:26:14 -04:00
committed by Dmitrii Galantsev
parent 8568af65ff
commit e6d82912e3
2 changed files with 195 additions and 0 deletions
+15
View File
@@ -29,6 +29,21 @@ from .amdsmi_interface import amdsmi_get_processor_handles
from .amdsmi_interface import amdsmi_get_socket_handles
from .amdsmi_interface import amdsmi_get_socket_info
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_gpu_device_bdf
from .amdsmi_interface import amdsmi_get_gpu_device_uuid
from .amdsmi_interface import amdsmi_get_processor_handle_from_bdf
+180
View File
@@ -595,6 +595,186 @@ def amdsmi_get_processor_handles() -> List[amdsmi_wrapper.amdsmi_processor_handl
return devices
def amdsmi_get_cpu_core_energy(
processor_handle: amdsmi_wrapper.amdsmi_processor_handle, core_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(core_idx, int):
raise AmdSmiParameterException(core_idx, int)
penergy = ctypes.c_uint64()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_core_energy(
processor_handle, core_idx, ctypes.byref(penergy)
)
)
return penergy.value
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):
raise AmdSmiParameterException(
socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle
)
if not isinstance(sock_idx, int):
raise AmdSmiParameterException(sock_idx, int)
penergy = ctypes.c_uint64()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_socket_energy(
socket_handle, sock_idx, ctypes.byref(penergy)
)
)
return penergy.value
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):
raise AmdSmiParameterException(
socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle
)
if not isinstance(sock_idx, int):
raise AmdSmiParameterException(sock_idx, int)
prochot = ctypes.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_socket_energy(
socket_handle, sock_idx, ctypes.byref(prochot)
)
)
return prochot.value
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):
raise AmdSmiParameterException(
socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle
)
if not isinstance(sock_idx, int):
raise AmdSmiParameterException(sock_idx, int)
fclk = ctypes.c_uint32()
mclk = ctypes.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_fclk_mclk(
socket_handle, sock_idx, ctypes.byref(fclk), ctypes.byref(mclk)
)
)
return {
"fclk": fclk.value,
"mclk": mclk.value
}
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):
raise AmdSmiParameterException(
socket_handle, amdsmi_wrapper.amdsmi_cpusocket_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()))
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_socket_current_active_freq_limit(
socket_handle, sock_idx, ctypes.byref(freq), src_type
)
)
return freq.value
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):
raise AmdSmiParameterException(
socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle
)
if not isinstance(sock_idx, int):
raise AmdSmiParameterException(sock_idx, int)
freq_max = ctypes.c_uint16()
freq_min = ctypes.c_uint16()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_socket_freq_range(
socket_handle, sock_idx, ctypes.byref(freq_max), ctypes.byref(freq_min)
)
)
return {
"max_socket_freq": freq_max.value,
"min_socket_freq": freq_min.value
}
def amdsmi_get_cpu_core_current_freq_limit(
processor_handle: amdsmi_wrapper.amdsmi_processor_handle, core_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(core_idx, int):
raise AmdSmiParameterException(core_idx, int)
freq = ctypes.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_core_current_freq_limit(
processor_handle, core_idx, ctypes.byref(freq)
)
)
return freq.value
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):
raise AmdSmiParameterException(
socket_handle, amdsmi_wrapper.amdsmi_cpusocket_handle
)
if not isinstance(sock_idx, int):
raise AmdSmiParameterException(sock_idx, int)
ppower = ctypes.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_socket_power(
socket_handle, sock_idx, ctypes.byref(ppower)
)
)
return ppower.value
def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS):
if not isinstance(flag, AmdSmiInitFlags):
raise AmdSmiParameterException(flag, AmdSmiInitFlags)