diff --git a/include/amd_smi/amdsmi.h b/include/amd_smi/amdsmi.h index 75da929b..819cf0a4 100644 --- a/include/amd_smi/amdsmi.h +++ b/include/amd_smi/amdsmi.h @@ -1545,28 +1545,28 @@ typedef struct { /* PCIE other end recovery counter */ uint32_t pcie_lc_perf_other_end_recovery; - /* - * v1.7 additions - */ - /* VRAM max bandwidth at max memory clock (GB/s) */ - uint64_t vram_max_bandwidth; + /* + * v1.7 additions + */ + /* VRAM max bandwidth at max memory clock (GB/s) */ + uint64_t vram_max_bandwidth; - /* XGMI link status(up/down) */ - uint16_t xgmi_link_status[AMDSMI_MAX_NUM_XGMI_LINKS]; + /* XGMI link status(up/down) */ + uint16_t xgmi_link_status[AMDSMI_MAX_NUM_XGMI_LINKS]; /// \endcond } amdsmi_gpu_metrics_t; typedef enum { - AMDSMI_XGMI_LINK_DOWN, //!< The XGMI Link is down - AMDSMI_XGMI_LINK_UP, //!< The XGMI Link is up - AMDSMI_XGMI_LINK_DISABLE, //!< The XGMI Link is disabled + AMDSMI_XGMI_LINK_DOWN, //!< The XGMI Link is down + AMDSMI_XGMI_LINK_UP, //!< The XGMI Link is up + AMDSMI_XGMI_LINK_DISABLE, //!< The XGMI Link is disabled } amdsmi_xgmi_link_status_type_t; typedef struct { - uint32_t total_links; //!< The total links in the status array - amdsmi_xgmi_link_status_type_t status[AMDSMI_MAX_NUM_XGMI_LINKS]; - uint64_t reserved[7]; + uint32_t total_links; //!< The total links in the status array + amdsmi_xgmi_link_status_type_t status[AMDSMI_MAX_NUM_XGMI_LINKS]; + uint64_t reserved[7]; } amdsmi_xgmi_link_status_t; #define MAX_AMDSMI_NAME_LENGTH 64 @@ -1636,19 +1636,19 @@ typedef struct { * @brief This structure holds SMU Firmware version information. */ typedef struct { - uint8_t debug; //!< SMU fw Debug version number - uint8_t minor; //!< SMU fw Minor version number - uint8_t major; //!< SMU fw Major version number - uint8_t unused; //!< reserved fields + uint8_t debug; //!< SMU fw Debug version number + uint8_t minor; //!< SMU fw Minor version number + uint8_t major; //!< SMU fw Major version number + uint8_t unused; //!< reserved fields } amdsmi_smu_fw_version_t; /** * @brief DDR bandwidth metrics. */ typedef struct { - uint32_t max_bw; //!< DDR Maximum theoritical bandwidth in GB/s - uint32_t utilized_bw; //!< DDR bandwidth utilization in GB/s - uint32_t utilized_pct; //!< DDR bandwidth utilization in % of theoritical max + uint32_t max_bw; //!< DDR Maximum theoritical bandwidth in GB/s + uint32_t utilized_bw; //!< DDR bandwidth utilization in GB/s + uint32_t utilized_pct; //!< DDR bandwidth utilization in % of theoritical max } amdsmi_ddr_bw_metrics_t; /** @@ -1794,14 +1794,14 @@ typedef struct __attribute__((__packed__)) { * @brief hsmp frequency limit source names */ static char* const amdsmi_hsmp_freqlimit_src_names[] = { - "cHTC-Active", - "PROCHOT", - "TDC limit", - "PPT Limit", - "OPN Max", - "Reliability Limit", - "APML Agent", - "HSMP Agent" + "cHTC-Active", + "PROCHOT", + "TDC limit", + "PPT Limit", + "OPN Max", + "Reliability Limit", + "APML Agent", + "HSMP Agent" }; #endif diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 2ca74a37..1ae18573 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -3905,38 +3905,40 @@ def amdsmi_get_gpu_metrics_info( } # Create 2d array with each XCD's stats - for k,v in gpu_metrics_output.items(): - if 'xcp_stats' in k: - if 'xcp_stats.gfx_busy_inst' in k: - for curr_xcp, item in enumerate(v): - print_xcp_detail = [] - for val in item.gfx_busy_inst: - print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT32_T, isActivity=True)) - gpu_metrics_output[k][curr_xcp] = print_xcp_detail - if 'xcp_stats.jpeg_busy' in k: - for curr_xcp, item in enumerate(v): - print_xcp_detail = [] - for val in item.jpeg_busy: - print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT16_T, isActivity=True)) - gpu_metrics_output[k][curr_xcp] = print_xcp_detail - if 'xcp_stats.vcn_busy' in k: - for curr_xcp, item in enumerate(v): - print_xcp_detail = [] - for val in item.vcn_busy: - print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT16_T, isActivity=True)) - gpu_metrics_output[k][curr_xcp] = print_xcp_detail - if 'xcp_stats.gfx_busy_acc' in k: - for curr_xcp, item in enumerate(v): - print_xcp_detail = [] - for val in item.gfx_busy_acc: - print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT64_T, isActivity=True)) - gpu_metrics_output[k][curr_xcp] = print_xcp_detail - if 'xcp_stats.gfx_below_host_limit_acc' in k: - for curr_xcp, item in enumerate(v): - print_xcp_detail = [] - for val in item.gfx_below_host_limit_acc: - print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT64_T, isActivity=True)) - gpu_metrics_output[k][curr_xcp] = print_xcp_detail + if 'xcp_stats.gfx_busy_inst' in gpu_metrics_output: + for xcp_index, xcp_metrics in enumerate(gpu_metrics_output['xcp_stats.gfx_busy_inst']): + xcp_detail = [] + for val in xcp_metrics.gfx_busy_inst: + xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT32_T, isActivity=True)) + gpu_metrics_output['xcp_stats.gfx_busy_inst'][xcp_index] = xcp_detail + + if 'xcp_stats.jpeg_busy' in gpu_metrics_output: + for xcp_index, xcp_metrics in enumerate(gpu_metrics_output['xcp_stats.jpeg_busy']): + xcp_detail = [] + for val in xcp_metrics.jpeg_busy: + xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT16_T, isActivity=True)) + gpu_metrics_output['xcp_stats.jpeg_busy'][xcp_index] = xcp_detail + + if 'xcp_stats.vcn_busy' in gpu_metrics_output: + for xcp_index, xcp_metrics in enumerate(gpu_metrics_output['xcp_stats.vcn_busy']): + xcp_detail = [] + for val in xcp_metrics.vcn_busy: + xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT16_T, isActivity=True)) + gpu_metrics_output["xcp_stats.vcn_busy"][xcp_index] = xcp_detail + + if 'xcp_stats.gfx_busy_acc' in gpu_metrics_output: + for xcp_index, xcp_metrics in enumerate(gpu_metrics_output['xcp_stats.gfx_busy_acc']): + xcp_detail = [] + for val in xcp_metrics.gfx_busy_acc: + xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT64_T, isActivity=True)) + gpu_metrics_output["xcp_stats.gfx_busy_acc"][xcp_index] = xcp_detail + + if 'xcp_stats.gfx_below_host_limit_acc' in gpu_metrics_output: + for xcp_index, xcp_metrics in enumerate(gpu_metrics_output['xcp_stats.gfx_below_host_limit_acc']): + xcp_detail = [] + for val in xcp_metrics.gfx_below_host_limit_acc: + xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT64_T, isActivity=True)) + gpu_metrics_output['xcp_stats.gfx_below_host_limit_acc'][xcp_index] = xcp_detail return gpu_metrics_output