amdsmi [CPU]: Add implementation to get cpu handles and core handles API
- Update the API names, parameters to return cpu handles and core
handles in the system.
- Update the amdsmi_wrapper.py.
- Update the amdsmi_interface.py to use the processor handles and
core handles API.
Change-Id: Ie24f62f345864f8b6773fdb3c6369993bca7e25b
Tento commit je obsažen v:
odevzdal
Naveen Krishna Chatradhi
rodič
dd8795b099
revize
8308ede9e8
@@ -3842,6 +3842,115 @@ amdsmi_status_t amdsmi_get_cpu_model(uint32_t *cpu_model)
|
||||
return AMDSMI_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
amdsmi_status_t amdsmi_get_cpu_handles(uint32_t *cpu_count,
|
||||
amdsmi_processor_handle *processor_handles)
|
||||
{
|
||||
uint32_t soc_count = 0, index = 0, cpu_per_soc = 0;
|
||||
processor_type_t processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU;
|
||||
std::vector<amdsmi_processor_handle> cpu_handles;
|
||||
amdsmi_status_t status;
|
||||
|
||||
AMDSMI_CHECK_INIT();
|
||||
if (cpu_count == nullptr)
|
||||
return AMDSMI_STATUS_INVAL;
|
||||
|
||||
status = amdsmi_get_socket_handles(&soc_count, nullptr);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
// Allocate the memory for the sockets
|
||||
std::vector<amdsmi_socket_handle> sockets(soc_count);
|
||||
// Get the sockets of the system
|
||||
status = amdsmi_get_socket_handles(&soc_count, &sockets[0]);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
for (index = 0 ; index < soc_count; index++)
|
||||
{
|
||||
cpu_per_soc = 0;
|
||||
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
|
||||
nullptr, &cpu_per_soc);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
// Allocate the memory for the cpus
|
||||
std::vector<amdsmi_processor_handle> plist(cpu_per_soc);
|
||||
// Get the cpus for each socket
|
||||
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
|
||||
&plist[0], &cpu_per_soc);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
cpu_handles.insert(cpu_handles.end(), plist.begin(), plist.end());
|
||||
}
|
||||
|
||||
// Get the cpu count
|
||||
*cpu_count = cpu_handles.size();
|
||||
if (processor_handles == nullptr)
|
||||
return AMDSMI_STATUS_SUCCESS;
|
||||
|
||||
// Copy the cpu socket handles
|
||||
for (uint32_t i = 0; i < *cpu_count; i++)
|
||||
processor_handles[i] = reinterpret_cast<amdsmi_processor_handle>(cpu_handles[i]);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
amdsmi_status_t amdsmi_get_cpucore_handles(uint32_t *cores_count,
|
||||
amdsmi_processor_handle* processor_handles)
|
||||
{
|
||||
uint32_t soc_count = 0, index = 0, cores_per_soc = 0;
|
||||
processor_type_t processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE;
|
||||
std::vector<amdsmi_processor_handle> core_handles;
|
||||
amdsmi_status_t status;
|
||||
|
||||
AMDSMI_CHECK_INIT();
|
||||
if (cores_count == nullptr) {
|
||||
return AMDSMI_STATUS_INVAL;
|
||||
}
|
||||
|
||||
// Get sockets count
|
||||
status = amdsmi_get_socket_handles(&soc_count, nullptr);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
// Allocate the memory for the sockets
|
||||
std::vector<amdsmi_socket_handle> sockets(soc_count);
|
||||
// Get the sockets of the system
|
||||
status = amdsmi_get_socket_handles(&soc_count, &sockets[0]);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
for (index = 0 ; index < soc_count; index++)
|
||||
{
|
||||
cores_per_soc = 0;
|
||||
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
|
||||
nullptr, &cores_per_soc);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
// Allocate the memory for the cores
|
||||
std::vector<amdsmi_processor_handle> plist(cores_per_soc);
|
||||
// Get the coress for each socket
|
||||
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
|
||||
&plist[0], &cores_per_soc);
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
core_handles.insert(core_handles.end(), plist.begin(), plist.end());
|
||||
}
|
||||
|
||||
// Get the cores count
|
||||
*cores_count = core_handles.size();
|
||||
if (processor_handles == nullptr)
|
||||
return AMDSMI_STATUS_SUCCESS;
|
||||
|
||||
// Copy the core handles
|
||||
for (uint32_t i = 0; i < *cores_count; i++)
|
||||
processor_handles[i] = reinterpret_cast<amdsmi_processor_handle>(core_handles[i]);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
amdsmi_status_t amdsmi_get_esmi_err_msg(amdsmi_status_t status, const char **status_string)
|
||||
{
|
||||
for (auto& iter : amd::smi::esmi_status_map) {
|
||||
|
||||
Odkázat v novém úkolu
Zablokovat Uživatele