Przeglądaj źródła

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)
```
Jon Chronopoulos 6 lat temu
rodzic
commit
1c87bc60ee
1 zmienionych plików z 7 dodań i 3 usunięć
  1. 7 3
      Modules/ProcessorCount.cmake

+ 7 - 3
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)