Como você pode dizer, na linha de comando, quantos núcleos existem na máquina quando você está executando o Mac OS X? No Linux, eu uso:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Não é perfeito, mas está próximo. Isso se destina a alimentar make
, e é por isso que ele fornece um resultado 1 maior que o número real. E eu sei que o código acima pode ser escrito mais densamente em Perl ou pode ser escrito usando grep, wc e cut, mas eu decidi que o acima foi uma boa troca entre concisão e legibilidade.
EDIÇÃO MUITO TARDE: Apenas para esclarecer: estou perguntando quantos núcleos lógicos estão disponíveis, porque isso corresponde a quantos trabalhos simultâneos eu quero make
gerar. A resposta de jkp, mais refinada por Chris Lloyd, era exatamente o que eu precisava. YMMV.
grep ^processor /proc/cpuinfo | wc -l
nproc
comando.Respostas:
Você pode fazer isso usando o utilitário sysctl :
fonte
sysctl hw.physicalcpu
ousysctl hw.logicalcpu
, em geral,sysctl hw
para todas as opções.Ainda mais fácil:
fonte
system_profiler SPHardwareDataType
que posso acreditar `Identificador de modelo: MacBookPro9,2 Nome do processador: Intel Core i5 Velocidade do processador: 2,5 GHz Número de processadores: 1 Número total de núcleos:Isso deve ser multiplataforma. Pelo menos para Linux e Mac OS X.
Um pouco lento, mas funciona.
fonte
Para fazer isso em C, você pode usar a família de funções sysctl (3):
Valores interessantes para usar no lugar de "hw.logicalcpu", que conta núcleos, são:
fonte
system_profiler SPHardwareDataType
mostra que eu tenho 1 processador e 4 núcleos.No entanto, o sysctl discorda:
Mas o sysctl parece correto, pois quando executo um programa que deve ocupar todos os slots da CPU, vejo esse programa levando cerca de 800% do tempo da CPU (pol
top
):fonte
sysctl hw.physicalcpu
mostrará quantos núcleos físicos de CPU estão disponíveis para você,sysctl hw.logicalcpu
mostrará quantos cpus lógicos disponíveis para você. Sistemas operacionais como Windows / OSX / Linux fazem todo o trabalho para parecer que você tem várias CPUs (independentemente do tipo). Sistemas operacionais como o Linux permitem que você configure quais CPUs, núcleos e threads podem ser usados.fonte
grep -i
Use o
system_profiler | grep "Cores"
comandoEu tenho um:
De acordo com a Wikipedia, ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) não há Core i7 com 8 núcleos físicos, portanto, a ideia do Hyperthreading deve ser o caso. Ignore
sysctl
e use osystem_profiler
valor para precisão. A verdadeira questão é se você pode ou não executar aplicativos eficientemente com 4 núcleos (trabalhos longos de compilação?) Sem interromper outros processos.A execução de um compilador paralelamente a 4 núcleos não parece afetar drasticamente as operações regulares do SO. Então, talvez tratá-lo como 8 núcleos não seja tão ruim.
fonte
Como o jkp disse em um comentário, isso não mostra o número real de núcleos físicos. para obter o número de núcleos físicos, você pode usar o seguinte comando:
fonte
make
, para que a resposta do jkp (número de núcleos lógicos) se encaixe melhor.O comando a seguir fornece todas as informações sobre sua CPU
fonte
ESCLARECIMENTO
Quando essa pergunta foi feita a OP não disse que queria que o número de LOGICAL núcleos em vez do actual número de núcleos, então esta resposta logicamente (sem trocadilhos) respostas com uma forma de obter o real número de núcleos físicos reais, não o número que o sistema operacional tenta virtualizar através do vodu hyperthreading.
ATUALIZAÇÃO PARA LIDAR COM FLAW EM YOSEMITE
Devido a um bug estranho no OS X Yosemite (e possivelmente em versões mais recentes, como o próximo El Capitan), fiz uma pequena modificação. (A versão antiga ainda funcionou perfeitamente bem se você simplesmente ignorar o STDERR, que é toda a modificação que faz por você.)
Todas as outras respostas dadas aqui também
bundle install --jobs 3
onde você deseja que o número no lugar3
seja um a menos que o número de núcleos que você possui, ou pelo menos não mais do que o número de núcleos)A maneira de obter apenas o número de núcleos, de maneira confiável, correta, razoavelmente rápida e sem informações adicionais ou mesmo caracteres extras em torno da resposta é:
fonte
sysctl -n hw.ncpu
no meu Mac Pro e não tive nenhum desses problemas.sysctl
não fornece resultados precisos na minha máquina e outros relataram a mesma coisa. Se não é possível confiar sempre em resultados precisos, não pode ser considerado confiável e preciso.sysctl
funcionamento adequado sejam mais conhecidos, como o user1706991.sysctl -n hw.physicalcpu_max
Em um MacBook Pro executando o Mavericks ,
sysctl -a | grep hw.cpu
retornará apenas alguns detalhes enigmáticos. Informações muito mais detalhadas e acessíveis são reveladas namachdep.cpu
seção, ou seja:Em particular, para processadores com
HyperThreading
(HT), você verá a contagem total de CPU enumerada (logical_per_package
) como o dobro da contagem física de núcleos (cores_per_package
).fonte
Não foi especificado na pergunta original (embora eu tenha visto OP postar nos comentários que isso não era uma opção), mas muitos desenvolvedores no macOS têm o gerenciador de pacotes Homebrew instalado.
Para futuros desenvolvedores que se deparam com essa questão, desde que exista a suposição (ou requisito) de Homebrew sendo instalado (por exemplo, em uma organização de engenharia de uma empresa),
nproc
é um dos binários comuns do GNU incluídos nocoreutils
pacote.Se você possui scripts que prefere escrever uma vez (para Linux + macOS) em vez de duas vezes, ou para evitar
if
bloqueios nos quais você precisa detectar o sistema operacional para saber se deve ou não chamarnproc
vssysctl -n hw.logicalcpu
, essa pode ser uma opção melhor.fonte
Comentários para 2 boas respostas acima:
1) re resposta aceita (e comentários) por jkp: hw.ncpu aparentemente está obsoleta em favor do hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594 )
2) re a atualização de 2014 de Karl Ehr: no meu computador (com 2,5 ghz intel core i7),
sysctl -a | grep machdep.cpu | grep per_package
retorna números diferentes:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Os valores desejados são:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Qual partida:
hw.physicalcpu: 4
hw.logicalcpu: 8
fonte
Isso pode ser feito de uma maneira mais portátil:
Compatível com macOS e Linux.
fonte
nproc
parece não estar disponível no macOS Mojave.nproc
é uma instalação trivial através do homebrew.