Как узнать количество * логических * ядер в Mac OS X? - PullRequest
354 голосов
/ 11 ноября 2009

Как узнать из командной строки, сколько ядер на машине, когда вы работаете в Mac OS X? В Linux я использую:

x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)

Это не идеально, но это близко. Это предназначено для подачи к make, поэтому оно дает результат на 1 больше, чем фактическое число. И я знаю, что приведенный выше код может быть написан более плотно в Perl или может быть написан с использованием grep, wc и cut, но я решил, что вышеупомянутое было хорошим компромиссом между краткостью и удобочитаемостью.

ОЧЕНЬ ПОЗДНЕЕ РЕДАКТИРОВАНИЕ: Просто чтобы уточнить: я спрашиваю, сколько доступно логических ядер, потому что это соответствует количеству одновременных заданий, которые я хочу создать make. Ответ jkp, уточненный Крисом Ллойдом, был точно , что мне было нужно. YMMV.

Ответы [ 12 ]

754 голосов
/ 11 ноября 2009

Это можно сделать с помощью утилиты sysctl :

sysctl -n hw.ncpu
127 голосов
/ 20 ноября 2012

Еще проще:

sysctl -n hw.ncpu
24 голосов
/ 25 июля 2015

Это должно быть кроссплатформенным. По крайней мере, для Linux и Mac OS X.

python -c 'import multiprocessing as mp; print(mp.cpu_count())'

Немного медленно, но работает.

18 голосов
/ 11 марта 2014

Для этого в C вы можете использовать семейство функций sysctl (3):

int count;
size_t count_len = sizeof(count);
sysctlbyname("hw.logicalcpu", &count, &count_len, NULL, 0);
fprintf(stderr,"you have %i cpu cores", count);

Интересные значения для использования вместо "hw.logicalcpu", который подсчитывает ядра:

hw.physicalcpu - The number of physical processors available in the current power management mode.

hw.physicalcpu_max - The maximum number of physical processors that could be available this boot.

hw.logicalcpu - The number of logical processors available in the current power management mode.

hw.logicalcpu_max - The maximum number of logical processors that could be available this boot.
9 голосов
/ 09 июня 2013

system_profiler SPHardwareDataType показывает, что у меня 1 процессор и 4 ядра.

[~] system_profiler SPHardwareDataType Оборудование:

Hardware Overview:

  Model Name: MacBook Pro
  Model Identifier: MacBookPro9,1
  Processor Name: Intel Core i7
  Processor Speed: 2.6 GHz
  Number of Processors: 1
  Total Number of Cores: 4

  <snip>

[~]

Однако sysctl не согласен:

[~] sysctl -n hw.logicalcpu 8 [~] sysctl -n hw.physicalcpu 4 [~]

Но sysctl выглядит правильно, так как, когда я запускаю программу, которая должна занимать все слоты процессора, я вижу, что эта программа занимает около 800% процессорного времени (вверху):

PID COMMAND% CPU
4306 верх 5.6
4304 Java 745,7 4296 с местоположением 0,0

9 голосов
/ 11 ноября 2009
$ system_profiler | grep 'Total Number Of Cores'
8 голосов
/ 26 июня 2013

Используйте команду system_profiler | grep "Cores".

У меня есть:

MacBook Pro Retina, середина 2012 года.

Процессор: 2,6 ГГц Intel Core i7

user$ system_profiler | grep "Cores"
      Total Number of Cores: 4

user$ sysctl -n hw.ncpu
8

Согласно Википедии, (http://en.wikipedia.org/wiki/Intel_Core#Core_i7) не существует Core i7 с 8 физическими ядрами, поэтому идея Hyperthreading должна иметь место. Игнорируйте sysctl и используйте значение system_profiler для Точность. Реальный вопрос заключается в том, можете ли вы эффективно запускать приложения с 4 ядрами (длинные задания компиляции?), не прерывая другие процессы.

Запуск компилятора, параллелизованного с 4 ядрами, не оказывает существенного влияния на обычные операции ОС. Так что, возможно, рассматривать его как 8 ядер не так уж и плохо.

7 голосов
/ 01 ноября 2011

Как сказал jkp в комментарии, это не показывает фактическое количество физических ядер. чтобы получить количество физических ядер, вы можете использовать следующую команду:

system_profiler SPHardwareDataType
3 голосов
/ 29 ноября 2017

Следующая команда дает вам всю информацию о вашем процессоре

$ sysctl -a | sort | grep cpu
1 голос
/ 18 июля 2014

На MacBook Pro с Mavericks , sysctl -a | grep hw.cpu будет возвращать только некоторые загадочные сведения. Более подробная и доступная информация раскрывается в разделе machdep.cpu, а именно:

sysctl -a | grep machdep.cpu

В частности, для процессоров с HyperThreading (HT) общее число перечисленных процессоров (logical_per_package) будет равно удвоенному числу физических ядер (cores_per_package).

sysctl -a | grep machdep.cpu  | grep per_package
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...