Как узнать из командной строки, сколько ядер на машине, когда вы работаете в Mac OS X? В Linux я использую:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Это не идеально, но это близко. Это предназначено для того, чтобы его накормить make
, поэтому он дает результат на 1 больше, чем фактическое число. И я знаю, что приведенный выше код может быть написан более плотно в Perl или может быть написан с использованием grep, wc и cut, но я решил, что вышеупомянутое было хорошим компромиссом между краткостью и удобочитаемостью.
ОЧЕНЬ ПОЗДНЕЕ РЕДАКТИРОВАНИЕ: Просто чтобы уточнить: я спрашиваю, сколько доступно логических ядер, потому что это соответствует тому, сколько одновременных заданий я хочу make
создать. Ответ jkp, уточненный Крисом Ллойдом, был именно тем , что мне было нужно. YMMV.
grep ^processor /proc/cpuinfo | wc -l
nproc
команду.Ответы:
Вы можете сделать это с помощью утилиты sysctl :
источник
sysctl hw.physicalcpu
илиsysctl hw.logicalcpu
, и вообщеsysctl hw
для всех вариантов.Еще проще:
источник
system_profiler SPHardwareDataType
что я могу поверить, `Идентификатор модели: MacBookPro9,2 Имя процессора: Intel Core i5 Частота процессора: 2,5 ГГц Количество процессоров: 1 Общее количество ядер:Это должно быть кроссплатформенным. По крайней мере, для Linux и Mac OS X.
Немного медленно, но работает.
источник
Для этого в C вы можете использовать семейство функций sysctl (3):
Интересные значения для использования вместо "hw.logicalcpu", который подсчитывает количество ядер:
источник
system_profiler SPHardwareDataType
показывает у меня 1 процессор и 4 ядра.Однако sysctl не согласен:
Но sysctl выглядит правильно, так как, когда я запускаю программу, которая должна занимать все слоты процессора, я вижу, что эта программа занимает около 800% времени процессора (в
top
):источник
sysctl hw.physicalcpu
покажет, сколько физических ядер доступно вам,sysctl hw.logicalcpu
покажет, сколько логических ресурсов доступно вам. Операционные системы, такие как Windows / OSX / Linux, выполняют всю работу, создавая впечатление, что у вас несколько процессоров (независимо от того, какой это тип). Операционные системы, такие как Linux, позволяют вам настроить процессор, ядра и потоки.источник
grep -i
Используйте
system_profiler | grep "Cores"
команду.У меня есть:
Согласно Википедии, ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) нет Core i7 с 8 физическими ядрами, поэтому идея Hyperthreading должна быть именно такой. Игнорируйте
sysctl
и используйтеsystem_profiler
значение для точности. Реальный вопрос заключается в том, можете ли вы эффективно запускать приложения с 4 ядрами (длинные задания компиляции?), Не прерывая другие процессы.Запуск компилятора, параллелизованного с четырьмя ядрами, не оказывает существенного влияния на обычные операции ОС. Так что, возможно, рассматривать его как 8 ядер не так уж и плохо.
источник
Как сказал в комментарии jkp, это не показывает фактическое количество физических ядер. чтобы получить количество физических ядер, вы можете использовать следующую команду:
источник
make
, поэтому ответ jkp (количество логических ядер) подходит лучше всего.Следующая команда дает вам всю информацию о вашем процессоре
источник
ПОЯСНЕНИЯ
Когда этот вопрос был задан, ОП не сказал, что ему нужно количество ЛОГИЧЕСКИХ ядер, а не фактическое количество ядер, поэтому этот ответ логически (без каламбура) отвечает способом, позволяющим получить фактическое количество реальных физических ядер, а не число, которое ОС пытается виртуализировать с помощью гиперпоточности вуду.
ОБНОВЛЕНИЕ, ЧТОБЫ ОБРАЩАТЬСЯ В ЛОШАДЬ В YOSEMITE
Из-за странной ошибки в OS X Yosemite (и, возможно, более новых версий, таких как предстоящая El Capitan), я сделал небольшую модификацию. (Старая версия все еще работала на отлично, если вы просто игнорируете STDERR, и это все, что делает модификация для вас.)
Любой другой ответ, приведенный здесь, либо
bundle install --jobs 3
где вы хотите, чтобы число вместо3
было на единицу меньше, чем число ядер у вас есть, или, по крайней мере, не больше, чем количество ядер)Способ получить только количество ядер, надежно, правильно, достаточно быстро, без дополнительной информации или даже дополнительных символов вокруг ответа, заключается в следующем:
источник
sysctl -n hw.ncpu
свой Mac Pro, и у меня не было ни одной из этих проблем.sysctl
не менее, не дает точных результатов на моей машине, и другие сообщили об этом. Если на него нельзя полагаться, чтобы он всегда давал точные результаты, то он не может считаться надежным и точным.sysctl
правильной работы более известны, как это сделал пользователь 1707099.sysctl -n hw.physicalcpu_max
На MacBook Pro, работающем с Mavericks ,
sysctl -a | grep hw.cpu
будут возвращаться только некоторые загадочные детали. Более подробная и доступная информация раскрывается вmachdep.cpu
разделе, а именно:В частности, для процессоров с
HyperThreading
(HT) общее число перечисленных процессоров (logical_per_package
) будет равно удвоенному количеству физических ядер (cores_per_package
).источник
Он не был указан в исходном вопросе (хотя я видел пост OP в комментариях, что это не вариант), но у многих разработчиков на macOS установлен менеджер пакетов Homebrew.
Для будущих разработчиков, которые сталкиваются с этим вопросом, пока существует предположение (или требование) об установке Homebrew (например, в инженерной организации в компании),
nproc
это один из распространенных двоичных файлов GNU, включенных вcoreutils
пакет.Если у вас есть сценарии, которые вы бы предпочли написать один раз (для Linux + macOS) вместо двух, или чтобы не было
if
блоков, где вам нужно определять ОС, чтобы узнать, вызывать или не вызыватьnproc
vssysctl -n hw.logicalcpu
, это может быть лучшим вариантом.источник
Комментарии к 2 хорошим ответам выше:
1) повторно принятый ответ (и комментарии) от jkp: hw.ncpu, по-видимому, не рекомендуется в пользу hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594 )
2) обновление 2014 года от Karl Ehr: на моем компьютере (с процессором Intel Core i7 с частотой 2,5 ГГц)
sysctl -a | grep machdep.cpu | grep per_package
отображаются разные цифры:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Желаемые значения:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Какой матч:
hw.physicalcpu: 4
hw.logicalcpu: 8
источник
Это можно сделать более переносимым способом:
Совместим с macOS и Linux.
источник
nproc
Похоже, не доступно на MacOS Mojave.nproc
это тривиальная установка через доморощенный.