Add amdsmi_get_gpu_pm_metrics_info and amdsmi_get_gpu_reg_table_info to py-interface (v3)
v2: drop depend on libc v3: whitespace Signed-off-by: Tom St Denis <tom.stdenis@amd.com> Change-Id: I2eff7aa9d4f0ca8635796f82b106ac0d36176346
Этот коммит содержится в:
@@ -3182,6 +3182,18 @@ amdsmi_status_t amdsmi_set_gpu_clk_limit(amdsmi_processor_handle processor_handl
|
||||
amdsmi_clk_limit_type_t limit_type,
|
||||
uint64_t clk_value);
|
||||
|
||||
/**
|
||||
* @brief Frees heap memory allocated by reg_table and pm_metrics
|
||||
*
|
||||
* @platform{gpu_bm_linux}
|
||||
*
|
||||
* @details Frees heap memory.
|
||||
*
|
||||
* @param[in] p a pointer to the memory to free.
|
||||
*
|
||||
*/
|
||||
void amdsmi_free_name_value_pairs(void *p);
|
||||
|
||||
/**
|
||||
* @brief This function sets the clock frequency information. It is not supported on
|
||||
* virtual machine guest
|
||||
|
||||
@@ -1693,6 +1693,60 @@ def amdsmi_get_power_cap_info(
|
||||
"min_power_cap": power_info.min_power_cap,
|
||||
"max_power_cap": power_info.max_power_cap}
|
||||
|
||||
def amdsmi_get_gpu_pm_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
|
||||
)
|
||||
|
||||
pm_metrics = ctypes.POINTER(struct_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)
|
||||
)
|
||||
)
|
||||
|
||||
results = []
|
||||
for i in range(num_mets.value):
|
||||
item = {
|
||||
'name': pm_metrics[i].name,
|
||||
'value': pm_metrics[i].value
|
||||
}
|
||||
results.append(item)
|
||||
amdsmi_wrapper.amdsmi_free_name_value_pairs(pm_metrics)
|
||||
return results
|
||||
|
||||
def amdsmi_get_gpu_reg_table_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
reg_type: amdsmi_reg_type_t,
|
||||
) -> Dict[str, Any]:
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
|
||||
reg_metrics = ctypes.POINTER(struct_amdsmi_name_value_t);
|
||||
num_regs = ctypes.c_uint32;
|
||||
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_cpu_reg_table_info(
|
||||
processor_handle, reg_type, ctypes.byref(reg_metrics), ctypes.byref(num_regs)
|
||||
)
|
||||
)
|
||||
|
||||
results = []
|
||||
for i in range(num_regs.value):
|
||||
item = {
|
||||
'name': reg_metrics[i].name,
|
||||
'value': reg_metrics[i].value
|
||||
}
|
||||
results.append(item)
|
||||
amdsmi_wrapper.amdsmi_free_name_value_pairs(pm_metrics)
|
||||
return results
|
||||
|
||||
def amdsmi_get_gpu_vram_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
|
||||
@@ -759,6 +759,19 @@ amdsmi_card_form_factor_t = ctypes.c_uint32 # enum
|
||||
class struct_amdsmi_pcie_info_t(Structure):
|
||||
pass
|
||||
|
||||
class struct_pcie_static_(Structure):
|
||||
pass
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('slot_type', amdsmi_card_form_factor_t),
|
||||
('reserved', ctypes.c_uint64 * 10),
|
||||
]
|
||||
|
||||
class struct_pcie_metric_(Structure):
|
||||
pass
|
||||
|
||||
@@ -777,19 +790,6 @@ struct_pcie_metric_._fields_ = [
|
||||
('reserved', ctypes.c_uint64 * 13),
|
||||
]
|
||||
|
||||
class struct_pcie_static_(Structure):
|
||||
pass
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('slot_type', amdsmi_card_form_factor_t),
|
||||
('reserved', ctypes.c_uint64 * 10),
|
||||
]
|
||||
|
||||
struct_amdsmi_pcie_info_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_pcie_info_t._fields_ = [
|
||||
('pcie_static', struct_pcie_static_),
|
||||
@@ -2061,6 +2061,9 @@ amdsmi_get_gpu_reg_table_info.argtypes = [amdsmi_processor_handle, amdsmi_reg_ty
|
||||
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]
|
||||
amdsmi_free_name_value_pairs = _libraries['libamd_smi.so'].amdsmi_free_name_value_pairs
|
||||
amdsmi_free_name_value_pairs.restype = None
|
||||
amdsmi_free_name_value_pairs.argtypes = [ctypes.POINTER(None)]
|
||||
amdsmi_set_gpu_od_clk_info = _libraries['libamd_smi.so'].amdsmi_set_gpu_od_clk_info
|
||||
amdsmi_set_gpu_od_clk_info.restype = amdsmi_status_t
|
||||
amdsmi_set_gpu_od_clk_info.argtypes = [amdsmi_processor_handle, amdsmi_freq_ind_t, uint64_t, amdsmi_clk_type_t]
|
||||
@@ -2597,7 +2600,8 @@ __all__ = \
|
||||
'amdsmi_event_group_t', 'amdsmi_event_handle_t',
|
||||
'amdsmi_event_type_t', 'amdsmi_evt_notification_data_t',
|
||||
'amdsmi_evt_notification_type_t',
|
||||
'amdsmi_first_online_core_on_cpu_socket', 'amdsmi_freq_ind_t',
|
||||
'amdsmi_first_online_core_on_cpu_socket',
|
||||
'amdsmi_free_name_value_pairs', 'amdsmi_freq_ind_t',
|
||||
'amdsmi_freq_volt_region_t', 'amdsmi_frequencies_t',
|
||||
'amdsmi_frequency_range_t', 'amdsmi_fw_block_t',
|
||||
'amdsmi_fw_info_t', 'amdsmi_get_clk_freq',
|
||||
|
||||
@@ -1217,6 +1217,10 @@ amdsmi_status_t amdsmi_get_gpu_reg_table_info(
|
||||
num_of_metrics);
|
||||
}
|
||||
|
||||
void amdsmi_free_name_value_pairs(void *p) {
|
||||
free(p);
|
||||
}
|
||||
|
||||
amdsmi_status_t
|
||||
amdsmi_get_power_cap_info(amdsmi_processor_handle processor_handle,
|
||||
uint32_t sensor_ind,
|
||||
|
||||
Ссылка в новой задаче
Block a user