OSDN Git Service

Add computeHostNumPhysicalCores() implementation for Darwin
authorMehdi Amini <mehdi.amini@apple.com>
Wed, 19 Oct 2016 22:36:07 +0000 (22:36 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Wed, 19 Oct 2016 22:36:07 +0000 (22:36 +0000)
Differential Revision: https://reviews.llvm.org/D25800

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284656 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Host.cpp
unittests/Support/Host.cpp

index e4a9b50..dd19eee 100644 (file)
@@ -1234,6 +1234,25 @@ static int computeHostNumPhysicalCores() {
   }
   return UniqueItems.size();
 }
+#elif defined(__APPLE__) && defined(__x86_64__)
+#include <sys/param.h>
+#include <sys/sysctl.h>
+
+// Gets the number of *physical cores* on the machine.
+static int computeHostNumPhysicalCores() {
+  uint32_t count;
+  size_t len = sizeof(count);
+  sysctlbyname("hw.physicalcpu", &count, &len, NULL, 0);
+  if (count < 1) {
+    int nm[2];
+    nm[0] = CTL_HW;
+    nm[1] = HW_AVAILCPU;
+    sysctl(nm, 2, &count, &len, NULL, 0);
+    if (count < 1)
+      return -1;
+  }
+  return count;
+}
 #else
 // On other systems, return -1 to indicate unknown.
 static int computeHostNumPhysicalCores() { return -1; }
index 1fb0bc7..934a604 100644 (file)
@@ -31,9 +31,10 @@ protected:
     Host.setTriple(Triple::normalize(sys::getProcessTriple()));
 
     // Initially this is only testing detection of the number of
-    // physical cores, which is currently only supported for
-    // x86_64 Linux.
+    // physical cores, which is currently only supported/tested for
+    // x86_64 Linux and Darwin.
     SupportedArchAndOSs.push_back(std::make_pair(Triple::x86_64, Triple::Linux));
+    SupportedArchAndOSs.push_back(std::make_pair(Triple::x86_64, Triple::Darwin));
   }
 };