SWDEV-463405: Add amdsmi_get_link_topology_nearest support

amdsmi_get_link_topology_nearest() is used to retrieve
the set of GPUs that are nearest to a given device
at a specific interconnectivity level.

Code changes related to the following:
    * API
    * CLI
    * Unit tests
    * Examples

Header Unification Change: "/amdsmi/+/1122408"

Change-Id: Id0317797c652c267742513936d321677793ec634
Signed-off-by: Lang Yu <lang.yu@amd.com>
This commit is contained in:
Lang Yu
2024-08-26 05:29:24 -04:00
committato da Oliveira, Daniel
parent f00a03ed2b
commit 7a557b1c50
11 ha cambiato i file con 535 aggiunte e 69 eliminazioni
+30
Vedi File
@@ -852,6 +852,36 @@ int main() {
std::cout << "\n";
std::cout << "+=======+==================+============+=============="
<< "+=============+=============+=============+============+\n";
// Get nearest GPUs
char *topology_link_type_str[] = {
"AMDSMI_LINK_TYPE_INTERNAL",
"AMDSMI_LINK_TYPE_XGMI",
"AMDSMI_LINK_TYPE_PCIE",
"AMDSMI_LINK_TYPE_NOT_APPLICABLE",
"AMDSMI_LINK_TYPE_UNKNOWN",
};
printf("\tOutput of amdsmi_get_link_topology_nearest:\n");
for (uint32_t topo_link_type = AMDSMI_LINK_TYPE_INTERNAL; topo_link_type <= AMDSMI_LINK_TYPE_UNKNOWN; topo_link_type++) {
auto topology_nearest_info = amdsmi_topology_nearest_t();
ret = amdsmi_get_link_topology_nearest(processor_handles[j],
static_cast<amdsmi_link_type_t>(topo_link_type),
nullptr);
CHK_AMDSMI_RET(ret);
ret = amdsmi_get_link_topology_nearest(processor_handles[j],
static_cast<amdsmi_link_type_t>(topo_link_type),
&topology_nearest_info);
CHK_AMDSMI_RET(ret);
printf("\tNearest GPUs found at %s\n", topology_link_type_str[topo_link_type]);
for (uint32_t k = 0; k < topology_nearest_info.count; k++) {
amdsmi_bdf_t bdf = {};
ret = amdsmi_get_gpu_device_bdf(topology_nearest_info.processor_list[k], &bdf);
CHK_AMDSMI_RET(ret)
printf("\t\tGPU BDF %04lx:%02x:%02x.%d\n", bdf.domain_number,
bdf.bus_number, bdf.device_number, bdf.function_number);
}
}
}
}
+29
Vedi File
@@ -344,6 +344,35 @@ int main() {
<<"," << policy.policies[x].policy_description << ")\n";
}
}
// Get nearest GPUs
char *topology_link_type_str[] = {
"AMDSMI_LINK_TYPE_INTERNAL",
"AMDSMI_LINK_TYPE_XGMI",
"AMDSMI_LINK_TYPE_PCIE",
"AMDSMI_LINK_TYPE_NOT_APPLICABLE",
"AMDSMI_LINK_TYPE_UNKNOWN",
};
printf("\tOutput of amdsmi_get_link_topology_nearest:\n");
for (uint32_t topo_link_type = AMDSMI_LINK_TYPE_INTERNAL; topo_link_type <= AMDSMI_LINK_TYPE_UNKNOWN; topo_link_type++) {
auto topology_nearest_info = amdsmi_topology_nearest_t();
ret = amdsmi_get_link_topology_nearest(processor_handles[j],
static_cast<amdsmi_link_type_t>(topo_link_type),
nullptr);
CHK_AMDSMI_RET(ret);
ret = amdsmi_get_link_topology_nearest(processor_handles[j],
static_cast<amdsmi_link_type_t>(topo_link_type),
&topology_nearest_info);
CHK_AMDSMI_RET(ret);
printf("\tNearest GPUs found at %s\n", topology_link_type_str[topo_link_type]);
for (uint32_t k = 0; k < topology_nearest_info.count; k++) {
amdsmi_bdf_t bdf = {};
ret = amdsmi_get_gpu_device_bdf(topology_nearest_info.processor_list[k], &bdf);
CHK_AMDSMI_RET(ret)
printf("\tGPU BDF %04lx:%02x:%02x.%d\n", bdf.domain_number,
bdf.bus_number, bdf.device_number, bdf.function_number);
}
}
}
}