88namespace cortex ::hw {
99
1010inline std::vector<GPU> GetGPUInfo () {
11- std::vector<GPU> res;
12- // Only support for nvidia for now
13- // auto gpus = hwinfo::getAllGPUs();
1411 auto nvidia_gpus = system_info_utils::GetGpuInfoList ();
1512 auto vulkan_gpus = GetGpuInfoList ().value_or (std::vector<cortex::hw::GPU>{});
16- // add more information for GPUs
13+ auto use_vulkan_info = nvidia_gpus. empty ();
1714
15+ // In case we have vulkan info, add more information for GPUs
1816 for (size_t i = 0 ; i < nvidia_gpus.size (); i++) {
1917 for (size_t j = 0 ; j < vulkan_gpus.size (); j++) {
2018 if (nvidia_gpus[i].uuid .find (vulkan_gpus[j].uuid ) != std::string::npos) {
19+ use_vulkan_info = true ;
2120 vulkan_gpus[j].version =
2221 nvidia_gpus[0 ].cuda_driver_version .value_or (" unknown" );
2322 vulkan_gpus[j].add_info = NvidiaAddInfo{
@@ -28,6 +27,25 @@ inline std::vector<GPU> GetGPUInfo() {
2827 }
2928 }
3029 }
31- return vulkan_gpus;
30+
31+ if (use_vulkan_info) {
32+ return vulkan_gpus;
33+ } else {
34+ std::vector<GPU> res;
35+ for (auto & n : nvidia_gpus) {
36+ res.emplace_back (
37+ GPU{.id = n.id ,
38+ .name = n.name ,
39+ .version = nvidia_gpus[0 ].cuda_driver_version .value_or (" unknown" ),
40+ .add_info =
41+ NvidiaAddInfo{
42+ .driver_version = n.driver_version .value_or (" unknown" ),
43+ .compute_cap = n.compute_cap .value_or (" unknown" )},
44+ .free_vram = std::stoi (n.vram_free ),
45+ .total_vram = std::stoi (n.vram_total ),
46+ .uuid = n.uuid });
47+ }
48+ return res;
49+ }
3250}
3351} // namespace cortex::hw
0 commit comments