|
2 | 2 |
|
3 | 3 | using CPUSummary
|
4 | 4 | using Pkg
|
| 5 | +using Statistics: mean |
5 | 6 |
|
6 | 7 | """
|
7 | 8 | is_cuda_available()
|
@@ -82,11 +83,32 @@ function get_system_info()
|
82 | 83 | info["os_name"] = Sys.iswindows() ? "Windows" : Sys.islinux() ? "Linux" : Sys.isapple() ? "macOS" : "Other"
|
83 | 84 | info["arch"] = string(Sys.ARCH)
|
84 | 85 |
|
85 |
| - # Use CPUSummary where available, fallback to Sys otherwise |
| 86 | + # Get detailed CPU information from Sys.cpu_info() |
| 87 | + cpu_info = Sys.cpu_info() |
| 88 | + if !isempty(cpu_info) |
| 89 | + first_cpu = cpu_info[1] |
| 90 | + info["cpu_model"] = first_cpu.model |
| 91 | + info["cpu_speed_mhz"] = first_cpu.speed |
| 92 | + |
| 93 | + # Count unique CPU models (for heterogeneous systems) |
| 94 | + cpu_models = unique([cpu.model for cpu in cpu_info]) |
| 95 | + if length(cpu_models) > 1 |
| 96 | + info["cpu_models"] = join(cpu_models, ", ") |
| 97 | + info["heterogeneous_cpus"] = true |
| 98 | + else |
| 99 | + info["heterogeneous_cpus"] = false |
| 100 | + end |
| 101 | + else |
| 102 | + info["cpu_model"] = "Unknown" |
| 103 | + info["cpu_speed_mhz"] = 0 |
| 104 | + end |
| 105 | + |
| 106 | + # Legacy CPU name for backward compatibility |
86 | 107 | try
|
87 | 108 | info["cpu_name"] = string(Sys.CPU_NAME)
|
88 | 109 | catch
|
89 |
| - info["cpu_name"] = "Unknown" |
| 110 | + # Fallback to cpu_model if CPU_NAME not available |
| 111 | + info["cpu_name"] = get(info, "cpu_model", "Unknown") |
90 | 112 | end
|
91 | 113 |
|
92 | 114 | # CPUSummary.num_cores() returns the physical cores (as Static.StaticInt)
|
@@ -295,11 +317,45 @@ function get_detailed_system_info()
|
295 | 317 | system_data["machine"] = "unknown"
|
296 | 318 | end
|
297 | 319 |
|
298 |
| - # CPU details |
| 320 | + # CPU details from Sys.cpu_info() |
| 321 | + try |
| 322 | + cpu_info = Sys.cpu_info() |
| 323 | + if !isempty(cpu_info) |
| 324 | + first_cpu = cpu_info[1] |
| 325 | + system_data["cpu_model"] = first_cpu.model |
| 326 | + system_data["cpu_speed_mhz"] = first_cpu.speed |
| 327 | + |
| 328 | + # Check for heterogeneous CPUs |
| 329 | + cpu_models = unique([cpu.model for cpu in cpu_info]) |
| 330 | + if length(cpu_models) > 1 |
| 331 | + system_data["cpu_models"] = join(cpu_models, ", ") |
| 332 | + system_data["heterogeneous_cpus"] = true |
| 333 | + else |
| 334 | + system_data["heterogeneous_cpus"] = false |
| 335 | + end |
| 336 | + |
| 337 | + # Calculate average CPU speed if speeds vary |
| 338 | + cpu_speeds = [cpu.speed for cpu in cpu_info] |
| 339 | + if length(unique(cpu_speeds)) > 1 |
| 340 | + system_data["cpu_speed_avg_mhz"] = round(mean(cpu_speeds), digits=0) |
| 341 | + system_data["cpu_speed_min_mhz"] = minimum(cpu_speeds) |
| 342 | + system_data["cpu_speed_max_mhz"] = maximum(cpu_speeds) |
| 343 | + end |
| 344 | + else |
| 345 | + system_data["cpu_model"] = "unknown" |
| 346 | + system_data["cpu_speed_mhz"] = 0 |
| 347 | + end |
| 348 | + catch |
| 349 | + system_data["cpu_model"] = "unknown" |
| 350 | + system_data["cpu_speed_mhz"] = 0 |
| 351 | + end |
| 352 | + |
| 353 | + # Legacy CPU name for backward compatibility |
299 | 354 | try
|
300 | 355 | system_data["cpu_name"] = string(Sys.CPU_NAME)
|
301 | 356 | catch
|
302 |
| - system_data["cpu_name"] = "unknown" |
| 357 | + # Fallback to cpu_model if available |
| 358 | + system_data["cpu_name"] = get(system_data, "cpu_model", "unknown") |
303 | 359 | end
|
304 | 360 |
|
305 | 361 | try
|
|
0 commit comments