[SWDEV-513651] Sync Unified And Linux Header (#98)

Signed-off-by: Joseph Narlo <joseph.narlo@amd.com>

[ROCm/amdsmi commit: dc4a16da6f]
This commit is contained in:
Narlo, Joseph
2025-02-06 22:25:50 -06:00
committed by GitHub
parent e8a8122111
commit c26da62fc7
14 changed files with 161 additions and 154 deletions
+16
View File
@@ -139,6 +139,21 @@ GPU: 0
### Changed
- **Added an additional argument `sensor_ind` to `amdsmi_get_power_info()`**.
This change breaks previous C API calls and will require a change
Python API now accepts `sensor_ind` as an optional argument, does not imapact previous usage
- **Depricated enum `AMDSMI_NORMAL_STRING_LENGTH` in favor of `AMDSMI_MAX_STRING_LENGTH`**.
- **Changed amdsmi_vram_vendor_type_t enum names impacting amdsmi_vram_info_t structure**.
This also change impacts usage of the vram_vendor output of `amdsmi_get_gpu_vram_info()`
- **Changed `amdsmi_nps_caps_t` struct impacting `amdsmi_memory_partition_config_t`, `amdsmi_accelerator_partition_t`, `amdsmi_accelerator_partition_profile_config_t`**.
- Functions affected by struct change are:
- `amdsmi_get_gpu_memory_partition_config()`
- `amdsmi_get_gpu_accelerator_partition_profile()`
- `amdsmi_get_gpu_accelerator_partition_profile_config()`
- **Corrected CLI CPU argument name**.
- `--cpu-pwr-svi-telemtry-rails` to `--cpu-pwr-svi-telemetry-rails`
@@ -2282,3 +2297,4 @@ Now the information is displayed as a table by each GPU's BDF, which closer rese
- **Fix for driver not initialized**.
If driver module is not loaded, user retrieve error reponse indicating amdgpu module is not loaded.
@@ -811,7 +811,7 @@ class AMDSMICommands():
vram_vendor = "N/A"
else:
# Remove amdsmi enum prefix
vram_vendor = vram_vendor.replace('AMDSMI_VRAM_VENDOR__', '')
vram_vendor = vram_vendor.replace('AMDSMI_VRAM_VENDOR_', '')
# Assign cleaned values to vram_info_dict
vram_info_dict['type'] = vram_type
@@ -656,6 +656,7 @@ It is not supported on virtual machine guest
Input parameters:
* `processor_handle` device which to query
* `sensor_ind` optional argument that defaults to 0
Output: Dictionary with fields
@@ -684,6 +685,8 @@ try:
else:
for device in devices:
power_measure = amdsmi_get_power_info(device)
# Example with using sensor_ind
# power_measure = amdsmi_get_power_info(device, 0)
print(power_measure['current_socket_power'])
print(power_measure['average_socket_power'])
print(power_measure['gfx_voltage'])
@@ -330,7 +330,7 @@ int main() {
// Get power measure
amdsmi_power_info_t power_measure = {};
ret = amdsmi_get_power_info(processor_handles[j], &power_measure);
ret = amdsmi_get_power_info(processor_handles[j], 0, &power_measure);
CHK_AMDSMI_RET(ret)
printf(" Output of amdsmi_get_power_info:\n");
printf("\tCurrent GFX Voltage: %d\n",
@@ -467,7 +467,7 @@ uint64_t goamdsmi_gpu_dev_power_get(uint32_t dv_ind)
uint64_t gpu_power_temp = GOAMDSMI_UINT64_MAX;
amdsmi_power_info_t amdsmi_power_info_temp = {0};
if((dv_ind < num_gpu_devices_inAllSocket) && (AMDSMI_STATUS_SUCCESS == amdsmi_get_power_info(amdsmi_processor_handle_all_gpu_device_across_socket[dv_ind], &amdsmi_power_info_temp)))
if((dv_ind < num_gpu_devices_inAllSocket) && (AMDSMI_STATUS_SUCCESS == amdsmi_get_power_info(amdsmi_processor_handle_all_gpu_device_across_socket[dv_ind], 0, &amdsmi_power_info_temp)))
{
gpu_power_temp = amdsmi_power_info_temp.average_socket_power;
if (enable_debug_level(GOAMDSMI_DEBUG_LEVEL_2)) {printf("AMDSMI, Success for Gpu:%d, GpuPowerAverage:%llu, GpuPowerAverageinWatt:%.6f\n", dv_ind, (unsigned long long)(gpu_power_temp), ((double)(gpu_power_temp))/1000000);}
+28 -32
View File
@@ -577,22 +577,17 @@ typedef enum {
* @cond @tag{gpu_bm_linux} @tag{host} @endcond
*/
typedef enum {
AMDSMI_VRAM_VENDOR__PLACEHOLDER0,
AMDSMI_VRAM_VENDOR__SAMSUNG,
AMDSMI_VRAM_VENDOR__INFINEON,
AMDSMI_VRAM_VENDOR__ELPIDA,
AMDSMI_VRAM_VENDOR__ETRON,
AMDSMI_VRAM_VENDOR__NANYA,
AMDSMI_VRAM_VENDOR__HYNIX,
AMDSMI_VRAM_VENDOR__MOSEL,
AMDSMI_VRAM_VENDOR__WINBOND,
AMDSMI_VRAM_VENDOR__ESMT,
AMDSMI_VRAM_VENDOR__PLACEHOLDER1,
AMDSMI_VRAM_VENDOR__PLACEHOLDER2,
AMDSMI_VRAM_VENDOR__PLACEHOLDER3,
AMDSMI_VRAM_VENDOR__PLACEHOLDER4,
AMDSMI_VRAM_VENDOR__PLACEHOLDER5,
AMDSMI_VRAM_VENDOR__MICRON,
AMDSMI_VRAM_VENDOR_SAMSUNG,
AMDSMI_VRAM_VENDOR_INFINEON,
AMDSMI_VRAM_VENDOR_ELPIDA,
AMDSMI_VRAM_VENDOR_ETRON,
AMDSMI_VRAM_VENDOR_NANYA,
AMDSMI_VRAM_VENDOR_HYNIX,
AMDSMI_VRAM_VENDOR_MOSEL,
AMDSMI_VRAM_VENDOR_WINBOND,
AMDSMI_VRAM_VENDOR_ESMT,
AMDSMI_VRAM_VENDOR_MICRON,
AMDSMI_VRAM_VENDOR_UNKNOWN
} amdsmi_vram_vendor_type_t;
/**
@@ -832,20 +827,19 @@ typedef struct {
} amdsmi_kfd_info_t;
/**
* @brief Possible Memory Partition Capabilities.
* This union holds memory partition bitmask.
* @brief This union holds memory partition bitmask.
*
* @cond @tag{gpu_bm_linux} @tag{host} @endcond
*/
typedef union {
struct nps_flags_ {
uint32_t nps1_cap :1; //!< bool 1 = true; 0 = false
uint32_t nps2_cap :1; //!< bool 1 = true; 0 = false
uint32_t nps4_cap :1; //!< bool 1 = true; 0 = false
uint32_t nps8_cap :1; //!< bool 1 = true; 0 = false
uint32_t reserved :28;
} amdsmi_nps_flags_t;
uint32_t nps_cap_mask;
struct nps_flags_ {
uint32_t nps1_cap :1; //!< bool 1 = true; 0 = false
uint32_t nps2_cap :1; //!< bool 1 = true; 0 = false
uint32_t nps4_cap :1; //!< bool 1 = true; 0 = false
uint32_t nps8_cap :1; //!< bool 1 = true; 0 = false
uint32_t reserved :28;
} nps_flags;
uint32_t nps_cap_mask;
} amdsmi_nps_caps_t;
/**
@@ -5886,9 +5880,7 @@ amdsmi_status_t
amdsmi_get_gpu_activity(amdsmi_processor_handle processor_handle, amdsmi_engine_usage_t *info);
/**
* @brief Returns the current power and voltage of the GPU.
* The voltage is in units of mV and the power in units of W.
* It is not supported on virtual machine guest
* @brief Returns the current power and voltage of the GPU.
*
* @ingroup tagGPUMonitor
*
@@ -5896,13 +5888,17 @@ amdsmi_get_gpu_activity(amdsmi_processor_handle processor_handle, amdsmi_engine_
*
* @note amdsmi_power_info_t::socket_power metric can rarely spike above the socket power limit in some cases
*
* @param[in] processor_handle Device which to query
* @param[in] processor_handle PF of a processor for which to query
*
* @param[out] info Reference to the gpu power structure. Must be allocated by user.
* @param[in] sensor_ind a 0-based sensor index. Normally, this will be 0.
* If a processor has more than one sensor, it could be greater than 0.
* Parameter @p sensor_ind is unused on @platform{host}.
*
* @param[out] info Reference to the gpu power structure. Must be allocated by user.
*
* @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail
*/
amdsmi_status_t amdsmi_get_power_info(amdsmi_processor_handle processor_handle, amdsmi_power_info_t *info);
amdsmi_status_t amdsmi_get_power_info(amdsmi_processor_handle processor_handle, uint32_t sensor_ind, amdsmi_power_info_t *info);
/**
* @brief Returns is power management enabled
+4 -4
View File
@@ -11,13 +11,13 @@ with AMD hardware through a user-friendly API. Find the documentation in the
## Online documentation
Explore the latest documentation on the [ROCm documentation
portal](https://rocm.docs.amd.com/projects/en/latest/index.html).
portal](https://rocm.docs.amd.com/projects/amdsmi/en/latest/index.html).
- [Install AMD
SMI](https://rocm.docs.amd.com/projects/en/latest/install/install.html)
SMI](https://rocm.docs.amd.com/projects/amdsmi/en/latest/install/install.html)
- [Python library
usage](https://rocm.docs.amd.com/projects/en/latest/how-to/amdsmi-py-lib.html).
usage](https://rocm.docs.amd.com/projects/amdsmi/en/latest/how-to/amdsmi-py-lib.html).
- [Python API
reference](https://rocm.docs.amd.com/projects/en/latest/reference/amdsmi-py-api.html).
reference](https://rocm.docs.amd.com/projects/amdsmi/en/latest/reference/amdsmi-py-api.html).
@@ -62,7 +62,6 @@ AMDSMI_NUM_VOLTAGE_CURVE_POINTS = 3
AMDSMI_MAX_MM_IP_COUNT = 8
AMDSMI_MAX_DATE_LENGTH = 32
AMDSMI_MAX_STRING_LENGTH = 64
AMDSMI_NORMAL_STRING_LENGTH = 32
AMDSMI_MAX_DEVICES = 32
AMDSMI_MAX_NAME = 32
AMDSMI_MAX_DRIVER_VERSION_LENGTH = 80
@@ -2307,6 +2306,7 @@ def amdsmi_get_gpu_driver_info(
def amdsmi_get_power_info(
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
sensor_ind: int = 0
) -> Dict[str, ctypes.c_uint32]:
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
raise AmdSmiParameterException(
@@ -2316,7 +2316,7 @@ def amdsmi_get_power_info(
power_measure = amdsmi_wrapper.amdsmi_power_info_t()
_check_res(
amdsmi_wrapper.amdsmi_get_power_info(
processor_handle, ctypes.byref(power_measure)
processor_handle, sensor_ind, ctypes.byref(power_measure)
)
)
+51 -61
View File
@@ -675,39 +675,29 @@ amdsmi_vram_type_t = ctypes.c_uint32 # enum
# values for enumeration 'amdsmi_vram_vendor_type_t'
amdsmi_vram_vendor_type_t__enumvalues = {
0: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER0',
1: 'AMDSMI_VRAM_VENDOR__SAMSUNG',
2: 'AMDSMI_VRAM_VENDOR__INFINEON',
3: 'AMDSMI_VRAM_VENDOR__ELPIDA',
4: 'AMDSMI_VRAM_VENDOR__ETRON',
5: 'AMDSMI_VRAM_VENDOR__NANYA',
6: 'AMDSMI_VRAM_VENDOR__HYNIX',
7: 'AMDSMI_VRAM_VENDOR__MOSEL',
8: 'AMDSMI_VRAM_VENDOR__WINBOND',
9: 'AMDSMI_VRAM_VENDOR__ESMT',
10: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER1',
11: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER2',
12: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER3',
13: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER4',
14: 'AMDSMI_VRAM_VENDOR__PLACEHOLDER5',
15: 'AMDSMI_VRAM_VENDOR__MICRON',
0: 'AMDSMI_VRAM_VENDOR_SAMSUNG',
1: 'AMDSMI_VRAM_VENDOR_INFINEON',
2: 'AMDSMI_VRAM_VENDOR_ELPIDA',
3: 'AMDSMI_VRAM_VENDOR_ETRON',
4: 'AMDSMI_VRAM_VENDOR_NANYA',
5: 'AMDSMI_VRAM_VENDOR_HYNIX',
6: 'AMDSMI_VRAM_VENDOR_MOSEL',
7: 'AMDSMI_VRAM_VENDOR_WINBOND',
8: 'AMDSMI_VRAM_VENDOR_ESMT',
9: 'AMDSMI_VRAM_VENDOR_MICRON',
10: 'AMDSMI_VRAM_VENDOR_UNKNOWN',
}
AMDSMI_VRAM_VENDOR__PLACEHOLDER0 = 0
AMDSMI_VRAM_VENDOR__SAMSUNG = 1
AMDSMI_VRAM_VENDOR__INFINEON = 2
AMDSMI_VRAM_VENDOR__ELPIDA = 3
AMDSMI_VRAM_VENDOR__ETRON = 4
AMDSMI_VRAM_VENDOR__NANYA = 5
AMDSMI_VRAM_VENDOR__HYNIX = 6
AMDSMI_VRAM_VENDOR__MOSEL = 7
AMDSMI_VRAM_VENDOR__WINBOND = 8
AMDSMI_VRAM_VENDOR__ESMT = 9
AMDSMI_VRAM_VENDOR__PLACEHOLDER1 = 10
AMDSMI_VRAM_VENDOR__PLACEHOLDER2 = 11
AMDSMI_VRAM_VENDOR__PLACEHOLDER3 = 12
AMDSMI_VRAM_VENDOR__PLACEHOLDER4 = 13
AMDSMI_VRAM_VENDOR__PLACEHOLDER5 = 14
AMDSMI_VRAM_VENDOR__MICRON = 15
AMDSMI_VRAM_VENDOR_SAMSUNG = 0
AMDSMI_VRAM_VENDOR_INFINEON = 1
AMDSMI_VRAM_VENDOR_ELPIDA = 2
AMDSMI_VRAM_VENDOR_ETRON = 3
AMDSMI_VRAM_VENDOR_NANYA = 4
AMDSMI_VRAM_VENDOR_HYNIX = 5
AMDSMI_VRAM_VENDOR_MOSEL = 6
AMDSMI_VRAM_VENDOR_WINBOND = 7
AMDSMI_VRAM_VENDOR_ESMT = 8
AMDSMI_VRAM_VENDOR_MICRON = 9
AMDSMI_VRAM_VENDOR_UNKNOWN = 10
amdsmi_vram_vendor_type_t = ctypes.c_uint32 # enum
class struct_amdsmi_range_t(Structure):
pass
@@ -825,19 +815,6 @@ 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
@@ -858,6 +835,19 @@ struct_pcie_metric_._fields_ = [
('reserved', ctypes.c_uint64 * 12),
]
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_),
@@ -1005,7 +995,7 @@ struct_nps_flags_._fields_ = [
union_amdsmi_nps_caps_t._pack_ = 1 # source:False
union_amdsmi_nps_caps_t._fields_ = [
('amdsmi_nps_flags_t', struct_nps_flags_),
('nps_flags', struct_nps_flags_),
('nps_cap_mask', ctypes.c_uint32),
]
@@ -2240,6 +2230,9 @@ amdsmi_get_gpu_subsystem_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(
amdsmi_get_gpu_subsystem_name = _libraries['libamd_smi.so'].amdsmi_get_gpu_subsystem_name
amdsmi_get_gpu_subsystem_name.restype = amdsmi_status_t
amdsmi_get_gpu_subsystem_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), size_t]
amdsmi_get_gpu_virtualization_mode = _libraries['libamd_smi.so'].amdsmi_get_gpu_virtualization_mode
amdsmi_get_gpu_virtualization_mode.restype = amdsmi_status_t
amdsmi_get_gpu_virtualization_mode.argtypes = [amdsmi_processor_handle, ctypes.POINTER(amdsmi_virtualization_mode_t)]
amdsmi_get_gpu_pci_bandwidth = _libraries['libamd_smi.so'].amdsmi_get_gpu_pci_bandwidth
amdsmi_get_gpu_pci_bandwidth.restype = amdsmi_status_t
amdsmi_get_gpu_pci_bandwidth.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_pcie_bandwidth_t)]
@@ -2573,7 +2566,7 @@ amdsmi_get_gpu_activity.restype = amdsmi_status_t
amdsmi_get_gpu_activity.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_engine_usage_t)]
amdsmi_get_power_info = _libraries['libamd_smi.so'].amdsmi_get_power_info
amdsmi_get_power_info.restype = amdsmi_status_t
amdsmi_get_power_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_power_info_t)]
amdsmi_get_power_info.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(struct_amdsmi_power_info_t)]
amdsmi_is_gpu_power_management_enabled = _libraries['libamd_smi.so'].amdsmi_is_gpu_power_management_enabled
amdsmi_is_gpu_power_management_enabled.restype = amdsmi_status_t
amdsmi_is_gpu_power_management_enabled.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_bool)]
@@ -2905,17 +2898,12 @@ __all__ = \
'AMDSMI_VRAM_TYPE_HBM', 'AMDSMI_VRAM_TYPE_HBM2',
'AMDSMI_VRAM_TYPE_HBM2E', 'AMDSMI_VRAM_TYPE_HBM3',
'AMDSMI_VRAM_TYPE_UNKNOWN', 'AMDSMI_VRAM_TYPE__MAX',
'AMDSMI_VRAM_VENDOR__ELPIDA', 'AMDSMI_VRAM_VENDOR__ESMT',
'AMDSMI_VRAM_VENDOR__ETRON', 'AMDSMI_VRAM_VENDOR__HYNIX',
'AMDSMI_VRAM_VENDOR__INFINEON', 'AMDSMI_VRAM_VENDOR__MICRON',
'AMDSMI_VRAM_VENDOR__MOSEL', 'AMDSMI_VRAM_VENDOR__NANYA',
'AMDSMI_VRAM_VENDOR__PLACEHOLDER0',
'AMDSMI_VRAM_VENDOR__PLACEHOLDER1',
'AMDSMI_VRAM_VENDOR__PLACEHOLDER2',
'AMDSMI_VRAM_VENDOR__PLACEHOLDER3',
'AMDSMI_VRAM_VENDOR__PLACEHOLDER4',
'AMDSMI_VRAM_VENDOR__PLACEHOLDER5', 'AMDSMI_VRAM_VENDOR__SAMSUNG',
'AMDSMI_VRAM_VENDOR__WINBOND', 'AMDSMI_XGMI_LINK_DISABLE',
'AMDSMI_VRAM_VENDOR_ELPIDA', 'AMDSMI_VRAM_VENDOR_ESMT',
'AMDSMI_VRAM_VENDOR_ETRON', 'AMDSMI_VRAM_VENDOR_HYNIX',
'AMDSMI_VRAM_VENDOR_INFINEON', 'AMDSMI_VRAM_VENDOR_MICRON',
'AMDSMI_VRAM_VENDOR_MOSEL', 'AMDSMI_VRAM_VENDOR_NANYA',
'AMDSMI_VRAM_VENDOR_SAMSUNG', 'AMDSMI_VRAM_VENDOR_UNKNOWN',
'AMDSMI_VRAM_VENDOR_WINBOND', 'AMDSMI_XGMI_LINK_DISABLE',
'AMDSMI_XGMI_LINK_DOWN', 'AMDSMI_XGMI_LINK_UP',
'AMDSMI_XGMI_STATUS_ERROR', 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS',
'AMDSMI_XGMI_STATUS_NO_ERRORS', 'CLK_LIMIT_MAX', 'CLK_LIMIT_MIN',
@@ -3009,9 +2997,11 @@ __all__ = \
'amdsmi_get_gpu_subsystem_id', 'amdsmi_get_gpu_subsystem_name',
'amdsmi_get_gpu_topo_numa_affinity',
'amdsmi_get_gpu_total_ecc_count', 'amdsmi_get_gpu_vbios_info',
'amdsmi_get_gpu_vendor_name', 'amdsmi_get_gpu_volt_metric',
'amdsmi_get_gpu_vram_info', 'amdsmi_get_gpu_vram_usage',
'amdsmi_get_gpu_vram_vendor', 'amdsmi_get_gpu_xgmi_link_status',
'amdsmi_get_gpu_vendor_name',
'amdsmi_get_gpu_virtualization_mode',
'amdsmi_get_gpu_volt_metric', 'amdsmi_get_gpu_vram_info',
'amdsmi_get_gpu_vram_usage', 'amdsmi_get_gpu_vram_vendor',
'amdsmi_get_gpu_xgmi_link_status',
'amdsmi_get_hsmp_metrics_table',
'amdsmi_get_hsmp_metrics_table_version', 'amdsmi_get_lib_version',
'amdsmi_get_link_metrics', 'amdsmi_get_link_topology_nearest',
+3 -1
View File
@@ -5720,9 +5720,10 @@ pub fn amdsmi_get_gpu_activity(
/// #
/// // Example processor_handle, assuming the number of processors is greater than zero
/// let processor_handle = amdsmi_get_processor_handles!()[0];
/// let sensor_ind = 0
///
/// // Retrieve the power information
/// match amdsmi_get_power_info(processor_handle) {
/// match amdsmi_get_power_info(processor_handle, sensor_ind) {
/// Ok(info) => println!("Power information: {:?}", info),
/// Err(e) => panic!("Failed to get power information: {}", e),
/// }
@@ -5741,6 +5742,7 @@ pub fn amdsmi_get_power_info(
let mut info = MaybeUninit::<AmdsmiPowerInfoT>::uninit();
call_unsafe!(amdsmi_wrapper::amdsmi_get_power_info(
processor_handle,
sensor_ind,
info.as_mut_ptr()
));
let info = unsafe { info.assume_init() };
@@ -104,7 +104,6 @@ where
pub const AMDSMI_MAX_MM_IP_COUNT: u32 = 8;
pub const AMDSMI_MAX_DATE_LENGTH: u32 = 32;
pub const AMDSMI_MAX_STRING_LENGTH: u32 = 256;
pub const AMDSMI_NORMAL_STRING_LENGTH: u32 = 256;
pub const AMDSMI_256_LENGTH: u32 = 256;
pub const AMDSMI_MAX_DEVICES: u32 = 32;
pub const AMDSMI_MAX_NAME: u32 = 32;
@@ -3022,6 +3021,7 @@ extern "C" {
extern "C" {
pub fn amdsmi_get_power_info(
processor_handle: AmdsmiProcessorHandle,
sensor_ind: u32,
info: *mut AmdsmiPowerInfoT,
) -> AmdsmiStatusT;
}
+48 -48
View File
@@ -572,7 +572,7 @@ amdsmi_status_t amdsmi_get_gpu_board_info(amdsmi_processor_handle processor_hand
board_info->product_name, AMDSMI_256_LENGTH);
status = rsmi_wrapper(rsmi_dev_serial_number_get, processor_handle, 0,
board_info->product_serial, AMDSMI_NORMAL_STRING_LENGTH);
board_info->product_serial, AMDSMI_MAX_STRING_LENGTH);
}
std::ostringstream ss;
@@ -587,10 +587,10 @@ amdsmi_status_t amdsmi_get_gpu_board_info(amdsmi_processor_handle processor_hand
if (board_info->product_serial[0] == '\0') {
status = rsmi_wrapper(rsmi_dev_serial_number_get, processor_handle, 0,
board_info->product_serial, AMDSMI_NORMAL_STRING_LENGTH);
board_info->product_serial, AMDSMI_MAX_STRING_LENGTH);
if (status != AMDSMI_STATUS_SUCCESS) {
memset(board_info->product_serial, 0,
AMDSMI_NORMAL_STRING_LENGTH * sizeof(board_info->product_serial[0]));
AMDSMI_MAX_STRING_LENGTH * sizeof(board_info->product_serial[0]));
}
ss << __PRETTY_FUNCTION__ << " | [rsmi_correction] board_info->product_serial= |"
<< board_info->product_serial << "|";
@@ -1401,7 +1401,7 @@ amdsmi_status_t amdsmi_get_gpu_vram_info(
// init the info structure with default value
info->vram_type = AMDSMI_VRAM_TYPE_UNKNOWN;
info->vram_size = 0;
info->vram_vendor = AMDSMI_VRAM_VENDOR__PLACEHOLDER0;
info->vram_vendor = AMDSMI_VRAM_VENDOR_UNKNOWN;
info->vram_bit_width = std::numeric_limits<decltype(info->vram_bit_width)>::max();
info->vram_max_bandwidth = std::numeric_limits<decltype(info->vram_max_bandwidth)>::max();
@@ -1434,25 +1434,25 @@ amdsmi_status_t amdsmi_get_gpu_vram_info(
brand, 255);
if (r == AMDSMI_STATUS_SUCCESS) {
if (strcasecmp(brand, "SAMSUNG") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__SAMSUNG;
info->vram_vendor = AMDSMI_VRAM_VENDOR_SAMSUNG;
if (strcasecmp(brand, "INFINEON") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__INFINEON;
info->vram_vendor = AMDSMI_VRAM_VENDOR_INFINEON;
if (strcasecmp(brand, "ELPIDA") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__ELPIDA;
info->vram_vendor = AMDSMI_VRAM_VENDOR_ELPIDA;
if (strcasecmp(brand, "ETRON") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__ETRON;
info->vram_vendor = AMDSMI_VRAM_VENDOR_ETRON;
if (strcasecmp(brand, "NANYA") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__NANYA;
info->vram_vendor = AMDSMI_VRAM_VENDOR_NANYA;
if (strcasecmp(brand, "HYNIX") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__HYNIX;
info->vram_vendor = AMDSMI_VRAM_VENDOR_HYNIX;
if (strcasecmp(brand, "MOSEL") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__MOSEL;
info->vram_vendor = AMDSMI_VRAM_VENDOR_MOSEL;
if (strcasecmp(brand, "WINBOND") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__WINBOND;
info->vram_vendor = AMDSMI_VRAM_VENDOR_WINBOND;
if (strcasecmp(brand, "ESMT") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__ESMT;
info->vram_vendor = AMDSMI_VRAM_VENDOR_ESMT;
if (strcasecmp(brand, "MICRON") == 0)
info->vram_vendor = AMDSMI_VRAM_VENDOR__MICRON;
info->vram_vendor = AMDSMI_VRAM_VENDOR_MICRON;
}
uint64_t total = 0;
r = rsmi_wrapper(rsmi_dev_memory_total_get, processor_handle, 0,
@@ -1806,10 +1806,10 @@ amdsmi_get_gpu_memory_partition_config(amdsmi_processor_handle processor_handle,
// initialization for devices which do not support partitions
amdsmi_nps_caps_t flags;
flags.amdsmi_nps_flags_t.nps1_cap = 0;
flags.amdsmi_nps_flags_t.nps2_cap = 0;
flags.amdsmi_nps_flags_t.nps4_cap = 0;
flags.amdsmi_nps_flags_t.nps8_cap = 0;
flags.nps_flags.nps1_cap = 0;
flags.nps_flags.nps2_cap = 0;
flags.nps_flags.nps4_cap = 0;
flags.nps_flags.nps8_cap = 0;
config->partition_caps = flags;
config->mp_mode = AMDSMI_MEMORY_PARTITION_UNKNOWN;
@@ -1851,16 +1851,16 @@ amdsmi_get_gpu_memory_partition_config(amdsmi_processor_handle processor_handle,
if (status == AMDSMI_STATUS_SUCCESS) {
memory_caps_str = std::string(memory_caps);
if (memory_caps_str.find("NPS1") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps1_cap = 1;
flags.nps_flags.nps1_cap = 1;
}
if (memory_caps_str.find("NPS2") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps2_cap = 1;
flags.nps_flags.nps2_cap = 1;
}
if (memory_caps_str.find("NPS4") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps4_cap = 1;
flags.nps_flags.nps4_cap = 1;
}
if (memory_caps_str.find("NPS8") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps8_cap = 1;
flags.nps_flags.nps8_cap = 1;
}
}
config->partition_caps = flags;
@@ -1900,10 +1900,10 @@ amdsmi_get_gpu_accelerator_partition_profile_config(amdsmi_processor_handle proc
profile_config->resource_profiles->partition_resource = 0;
profile_config->resource_profiles->num_partitions_share_resource = 0;
amdsmi_nps_caps_t flags;
flags.amdsmi_nps_flags_t.nps1_cap = 0;
flags.amdsmi_nps_flags_t.nps2_cap = 0;
flags.amdsmi_nps_flags_t.nps4_cap = 0;
flags.amdsmi_nps_flags_t.nps8_cap = 0;
flags.nps_flags.nps1_cap = 0;
flags.nps_flags.nps2_cap = 0;
flags.nps_flags.nps4_cap = 0;
flags.nps_flags.nps8_cap = 0;
ss << __PRETTY_FUNCTION__
<< " | 1";
@@ -2070,16 +2070,16 @@ amdsmi_get_gpu_accelerator_partition_profile_config(amdsmi_processor_handle proc
supported_nps_caps_str = std::string(supported_nps_configs);
}
if (supported_nps_caps_str.find("NPS1") != std::string::npos) {
profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps1_cap = 1;
profile_config->profiles[i].memory_caps.nps_flags.nps1_cap = 1;
}
if (supported_nps_caps_str.find("NPS2") != std::string::npos) {
profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps2_cap = 1;
profile_config->profiles[i].memory_caps.nps_flags.nps2_cap = 1;
}
if (supported_nps_caps_str.find("NPS4") != std::string::npos) {
profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps4_cap = 1;
profile_config->profiles[i].memory_caps.nps_flags.nps4_cap = 1;
}
if (supported_nps_caps_str.find("NPS8") != std::string::npos) {
profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps8_cap = 1;
profile_config->profiles[i].memory_caps.nps_flags.nps8_cap = 1;
}
// 2) get resource profiles
for (auto r = static_cast<int>(RSMI_ACCELERATOR_XCC);
@@ -2123,7 +2123,7 @@ amdsmi_get_gpu_accelerator_partition_profile_config(amdsmi_processor_handle proc
}
auto current_resource_idx = (resource_index >= 1) ? resource_index - 1 : 0;
std::string nps_caps = "N/A";
if (profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps1_cap == 1) {
if (profile_config->profiles[i].memory_caps.nps_flags.nps1_cap == 1) {
if (nps_caps == "N/A") {
nps_caps.clear();
nps_caps = "NPS1";
@@ -2131,7 +2131,7 @@ amdsmi_get_gpu_accelerator_partition_profile_config(amdsmi_processor_handle proc
nps_caps += ", NPS1";
}
}
if (profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps2_cap == 1) {
if (profile_config->profiles[i].memory_caps.nps_flags.nps2_cap == 1) {
if (nps_caps == "N/A") {
nps_caps.clear();
nps_caps = "NPS2";
@@ -2139,7 +2139,7 @@ amdsmi_get_gpu_accelerator_partition_profile_config(amdsmi_processor_handle proc
nps_caps += ", NPS2";
}
}
if (profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps4_cap == 1) {
if (profile_config->profiles[i].memory_caps.nps_flags.nps4_cap == 1) {
if (nps_caps == "N/A") {
nps_caps.clear();
nps_caps = "NPS4";
@@ -2147,7 +2147,7 @@ amdsmi_get_gpu_accelerator_partition_profile_config(amdsmi_processor_handle proc
nps_caps += ", NPS4";
}
}
if (profile_config->profiles[i].memory_caps.amdsmi_nps_flags_t.nps8_cap == 1) {
if (profile_config->profiles[i].memory_caps.nps_flags.nps8_cap == 1) {
if (nps_caps == "N/A") {
nps_caps.clear();
nps_caps = "NPS8";
@@ -2209,10 +2209,10 @@ amdsmi_get_gpu_accelerator_partition_profile(amdsmi_processor_handle processor_h
profile->num_resources = 0;
amdsmi_nps_caps_t flags;
flags.amdsmi_nps_flags_t.nps1_cap = 0;
flags.amdsmi_nps_flags_t.nps2_cap = 0;
flags.amdsmi_nps_flags_t.nps4_cap = 0;
flags.amdsmi_nps_flags_t.nps8_cap = 0;
flags.nps_flags.nps1_cap = 0;
flags.nps_flags.nps2_cap = 0;
flags.nps_flags.nps4_cap = 0;
flags.nps_flags.nps8_cap = 0;
profile->memory_caps = flags;
// TODO(amdsmi_team): add resources here ^
@@ -2357,16 +2357,16 @@ amdsmi_get_gpu_accelerator_partition_profile(amdsmi_processor_handle processor_h
if (status == AMDSMI_STATUS_SUCCESS) {
memory_caps_str = std::string(memory_caps);
if (memory_caps_str.find("NPS1") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps1_cap = 1;
flags.nps_flags.nps1_cap = 1;
}
if (memory_caps_str.find("NPS2") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps2_cap = 1;
flags.nps_flags.nps2_cap = 1;
}
if (memory_caps_str.find("NPS4") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps4_cap = 1;
flags.nps_flags.nps4_cap = 1;
}
if (memory_caps_str.find("NPS8") != std::string::npos) {
flags.amdsmi_nps_flags_t.nps8_cap = 1;
flags.nps_flags.nps8_cap = 1;
}
}
profile->memory_caps = flags;
@@ -2989,20 +2989,20 @@ amdsmi_get_gpu_vbios_info(amdsmi_processor_handle processor_handle, amdsmi_vbios
strncpy(info->name, (char *) vbios.name, AMDSMI_MAX_STRING_LENGTH);
strncpy(info->build_date, (char *) vbios.date, AMDSMI_MAX_DATE_LENGTH);
strncpy(info->part_number, (char *) vbios.vbios_pn, AMDSMI_MAX_STRING_LENGTH);
strncpy(info->version, (char *) vbios.vbios_ver_str, AMDSMI_NORMAL_STRING_LENGTH);
strncpy(info->version, (char *) vbios.vbios_ver_str, AMDSMI_MAX_STRING_LENGTH);
}
}
else {
// get vbios version string from rocm_smi
char vbios_version[AMDSMI_NORMAL_STRING_LENGTH];
char vbios_version[AMDSMI_MAX_STRING_LENGTH];
status = rsmi_wrapper(rsmi_dev_vbios_version_get, processor_handle, 0,
vbios_version,
AMDSMI_NORMAL_STRING_LENGTH);
AMDSMI_MAX_STRING_LENGTH);
// ignore the errors so that it can populate as many fields as possible.
if (status == AMDSMI_STATUS_SUCCESS) {
strncpy(info->version,
vbios_version, AMDSMI_NORMAL_STRING_LENGTH);
vbios_version, AMDSMI_MAX_STRING_LENGTH);
}
}
@@ -3319,7 +3319,7 @@ amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, uint32_t *
}
amdsmi_status_t
amdsmi_get_power_info(amdsmi_processor_handle processor_handle, amdsmi_power_info_t *info) {
amdsmi_get_power_info(amdsmi_processor_handle processor_handle, uint32_t sensor_ind, amdsmi_power_info_t *info) {
AMDSMI_CHECK_INIT();
if (info == nullptr) {
@@ -3447,7 +3447,7 @@ amdsmi_status_t amdsmi_get_pcie_info(amdsmi_processor_handle processor_handle, a
SMIGPUDEVICE_MUTEX(gpu_device->get_mutex())
char buff[AMDSMI_NORMAL_STRING_LENGTH];
char buff[AMDSMI_MAX_STRING_LENGTH];
FILE* fp;
double pcie_speed = 0;
unsigned pcie_width = 0;
+1 -1
View File
@@ -235,7 +235,7 @@ amdsmi_status_t gpuvsmi_get_pid_info(const amdsmi_bdf_t &bdf, long int pid,
return AMDSMI_STATUS_API_FAILED;
strncpy(info.name, name.c_str(), std::min(
(unsigned long) AMDSMI_NORMAL_STRING_LENGTH,
(unsigned long) AMDSMI_MAX_STRING_LENGTH,
name.length()));
for (int i = 0; i < AMDSMI_MAX_CONTAINER_TYPE; i++) {
@@ -545,7 +545,7 @@ class TestAmdSmiPythonInterface(unittest.TestCase):
bdf = amdsmi.amdsmi_get_gpu_device_bdf(processors[i])
print("\n\n###Test Processor {}, bdf: {}".format(i, bdf))
print("\n###Test amdsmi_get_power_info \n")
power_info = amdsmi.amdsmi_get_power_info(processors[i])
power_info = amdsmi.amdsmi_get_power_info(processors[i], 0)
print(" power_info['current_socket_power'] is: {}".format(
power_info['current_socket_power']))
print(" power_info['average_socket_power'] is: {}".format(