From 1c87bc60eef7de896215b0b8a2d0e0abf411f113 Mon Sep 17 00:00:00 2001 From: Jon Chronopoulos Date: Sun, 11 Aug 2019 19:11:32 +1000 Subject: ProcessorCount: Fix virtual processor count on Solaris The previous code did not count the number of virtual processors across physical processors on SunOS. Can handle the following situations: ``` $ uname -a SunOS solaris 5.11 11.4.0.15.0 i86pc i386 i86pc $ psrinfo -p -v The physical processor has 1 virtual processor (0) x86 (GenuineIntel 306D2 family 6 model 61 step 2 clock 3492 MHz) Intel Core Processor (Broadwell) The physical processor has 1 virtual processor (1) x86 (GenuineIntel 306D2 family 6 model 61 step 2 clock 3492 MHz) Intel Core Processor (Broadwell) The physical processor has 1 virtual processor (2) x86 (GenuineIntel 306D2 family 6 model 61 step 2 clock 3492 MHz) Intel Core Processor (Broadwell) The physical processor has 1 virtual processor (3) x86 (GenuineIntel 306D2 family 6 model 61 step 2 clock 3492 MHz) Intel Core Processor (Broadwell) ``` ``` $ uname -a SunOS sol11x86 5.11 11.0 i86pc i386 i86pc $ psrinfo -p -v The physical processor has 2 virtual processors (0 1) x86 (GenuineIntel 50650 family 6 model 85 step 0 clock 2000 MHz) Intel(r) Xeon(r) Gold 6138 CPU @ 2.00GHz ``` ``` $ uname -a SunOS sol11 5.11 11.0 sun4v sparc sun4v $ psrinfo -p -v The physical processor has 2 cores and 16 virtual processors (0-15) The core has 8 virtual processors (0-7) The core has 8 virtual processors (8-15) SPARC-T4 (chipid 0, clock 2848 MHz) ``` --- Modules/ProcessorCount.cmake | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake index 8c25256..43ec889 100644 --- a/Modules/ProcessorCount.cmake +++ b/Modules/ProcessorCount.cmake @@ -168,9 +168,13 @@ function(ProcessorCount var) ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE psrinfo_output) - string(REGEX MATCH "([0-9]+) virtual processor" procs "${psrinfo_output}") - set(count "${CMAKE_MATCH_1}") - #message("ProcessorCount: trying psrinfo -p -v '${ProcessorCount_cmd_prvinfo}'") + string(REGEX MATCHALL "has [0-9]+ virtual processor" procs "${psrinfo_output}") + set(count "") + foreach(proc ${procs}) + string(REGEX MATCH "has ([0-9]+) virtual" res ${proc}) + math(EXPR count "${count} + ${CMAKE_MATCH_1}") + endforeach() + #message("ProcessorCount: trying '${ProcessorCount_cmd_psrinfo}' -p -v") else() # Sun (systems where uname -X emits "NumCPU" in its output): find_program(ProcessorCount_cmd_uname uname) -- cgit v0.12