diff options
author | Jon Chronopoulos <patches@crondog.com> | 2019-08-11 09:11:32 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2019-08-20 14:26:06 (GMT) |
commit | 1c87bc60eef7de896215b0b8a2d0e0abf411f113 (patch) | |
tree | 1919aa2832a1ff81cba346e7fbb296d0404dd6e5 /Modules | |
parent | 2a5d077a89ea3ef08409e4d3e043ae78c9d8132d (diff) | |
download | CMake-1c87bc60eef7de896215b0b8a2d0e0abf411f113.zip CMake-1c87bc60eef7de896215b0b8a2d0e0abf411f113.tar.gz CMake-1c87bc60eef7de896215b0b8a2d0e0abf411f113.tar.bz2 |
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)
```
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/ProcessorCount.cmake | 10 |
1 files 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) |