diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py index fed4a538e6..1e13f524d8 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py @@ -1947,7 +1947,7 @@ class AMDSMICommands(): power_info[key] = self.helpers.unit_format(self.logger, value, voltage_unit) - elif key == "socket_power": + elif 'power' in key: power_info[key] = self.helpers.unit_format(self.logger, value, power_unit) @@ -7492,7 +7492,13 @@ class AMDSMICommands(): current_power = gpu_metrics['current_socket_power'] else: current_power = gpu_metrics['average_socket_power'] - temperature = gpu_metrics['temperature_hotspot'] + # If the hotspot temperature is not available use the edge temp (applicable to APUs) + if gpu_metrics['temperature_hotspot'] != "N/A": + temperature = gpu_metrics['temperature_hotspot'] + elif gpu_metrics['temperature_edge'] != "N/A": + temperature = gpu_metrics['temperature_edge'] + else: + temperature = "N/A" else: mem_util = "N/A" gfx_util = "N/A" diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_logger.py b/projects/amdsmi/amdsmi_cli/amdsmi_logger.py index 4957bcff31..b28214a7f0 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_logger.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_logger.py @@ -1080,7 +1080,12 @@ class AMDSMILogger(): power_usage = gpu_info['power_usage'] if power_usage != "N/A": - power_usage = f"{gpu_info['power_usage']['current_power']}/{gpu_info['power_usage']['power_limit']} W" + power_limit = gpu_info['power_usage']['power_limit'] + if power_limit != 0: + power_limit = f"/{power_limit}" + else: + power_limit = "" + power_usage = f"{gpu_info['power_usage']['current_power']}{power_limit} W" power_usage = str(power_usage).rjust(13) gpu_id = str(gpu_info['gpu_id']).rjust(3) diff --git a/projects/amdsmi/example/amd_smi_drm_example.cc b/projects/amdsmi/example/amd_smi_drm_example.cc index 55db8b9c7d..e8dec0845f 100644 --- a/projects/amdsmi/example/amd_smi_drm_example.cc +++ b/projects/amdsmi/example/amd_smi_drm_example.cc @@ -1128,7 +1128,7 @@ int main() { printf(" Output of amdsmi_get_power_info:\n"); if (ret != AMDSMI_STATUS_NOT_SUPPORTED) { CHK_AMDSMI_RET(ret) - printf("\tCurrent GFX Voltage: %ld\n", power_measure.gfx_voltage); + printf("\tCurrent GFX Voltage: %" PRIu64 "\n", power_measure.gfx_voltage); printf("\tAverage socket power: %d\n", power_measure.average_socket_power); printf("\tGPU Power limit: %d\n\n", power_measure.power_limit); } else { diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index b8934cb15e..ee93a0688e 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -3067,7 +3067,7 @@ def amdsmi_get_power_info( } for key, value in power_info_dict.items(): - if value == 0xFFFF: + if value in (MaxUIntegerTypes.UINT8_T, MaxUIntegerTypes.UINT16_T, MaxUIntegerTypes.UINT32_T, MaxUIntegerTypes.UINT64_T): power_info_dict[key] = "N/A" return power_info_dict diff --git a/projects/amdsmi/src/amd_smi/amd_smi.cc b/projects/amdsmi/src/amd_smi/amd_smi.cc index 4082462d28..3f832108b7 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi.cc @@ -4556,28 +4556,33 @@ amdsmi_get_power_info(amdsmi_processor_handle processor_handle, amdsmi_power_inf if (status != AMDSMI_STATUS_SUCCESS) return status; - info->socket_power = 0xFFFF; - info->current_socket_power = 0xFFFF; - info->average_socket_power = 0xFFFF; - info->gfx_voltage = 0xFFFF; - info->soc_voltage = 0xFFFF; - info->mem_voltage = 0xFFFF; - info->power_limit = 0xFFFF; + info->socket_power = get_std_num_limitsocket_power)>(); + info->current_socket_power = get_std_num_limitcurrent_socket_power)>(); + info->average_socket_power = get_std_num_limitaverage_socket_power)>(); + info->gfx_voltage = get_std_num_limitgfx_voltage)>(); + info->soc_voltage = get_std_num_limitsoc_voltage)>(); + info->mem_voltage = get_std_num_limitmem_voltage)>(); + info->power_limit = get_std_num_limitpower_limit)>(); amdsmi_gpu_metrics_t metrics = {}; status = amdsmi_get_gpu_metrics_info(processor_handle, &metrics); if (status == AMDSMI_STATUS_SUCCESS) { - info->current_socket_power = metrics.current_socket_power; - info->average_socket_power = metrics.average_socket_power; - info->gfx_voltage = metrics.voltage_gfx; - info->soc_voltage = metrics.voltage_soc; - info->mem_voltage = metrics.voltage_mem; - } + if (metrics.current_socket_power != get_std_num_limit()) + info->current_socket_power = metrics.current_socket_power; + if (metrics.average_socket_power != get_std_num_limit()) + info->average_socket_power = metrics.average_socket_power; + if (metrics.voltage_gfx != get_std_num_limit()) + info->gfx_voltage = metrics.voltage_gfx; + if (metrics.voltage_soc != get_std_num_limit()) + info->soc_voltage = metrics.voltage_soc; + if (metrics.voltage_mem != get_std_num_limit()) + info->mem_voltage = metrics.voltage_mem; - if (metrics.current_socket_power != 0xFFFF) { - info->socket_power = metrics.current_socket_power; - } else if (metrics.average_socket_power != 0xFFFF) { - info->socket_power = metrics.average_socket_power; + /* store something in socket power */ + if (info->current_socket_power != get_std_num_limitcurrent_socket_power)>()) + info->socket_power = info->current_socket_power; + else if (info->average_socket_power != get_std_num_limitaverage_socket_power)>()) + info->socket_power = info->average_socket_power; } int power_limit = 0; @@ -4585,6 +4590,8 @@ amdsmi_get_power_info(amdsmi_processor_handle processor_handle, amdsmi_power_inf amdsmi_status_t status2 = smi_amdgpu_get_power_cap(gpu_device, 0, &power_limit); if (status2 == AMDSMI_STATUS_SUCCESS) { info->power_limit = power_limit; + } else if (status2 == AMDSMI_STATUS_NOT_SUPPORTED) { + status = AMDSMI_STATUS_SUCCESS; } // Returning status from amdsmi_get_gpu_metrics_info() which should return SUCCESS diff --git a/projects/amdsmi/src/amd_smi/amd_smi_utils.cc b/projects/amdsmi/src/amd_smi/amd_smi_utils.cc index 3625665caf..c475c7e8d8 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_utils.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_utils.cc @@ -260,7 +260,7 @@ amdsmi_status_t smi_amdgpu_get_power_cap(amd::smi::AMDSmiGPUDevice* device, uint fullpath += "/power" + std::to_string(sensor_ind + 1) + "_cap"; std::ifstream file(fullpath.c_str(), std::ifstream::in); if (!file.is_open()) { - return AMDSMI_STATUS_API_FAILED; + return AMDSMI_STATUS_NOT_SUPPORTED; } file.getline(val, DATA_SIZE);