Comment pouvez-vous déterminer, à partir de la ligne de commande, combien de cœurs se trouvent sur la machine lorsque vous exécutez Mac OS X? Sous Linux, j'utilise:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Ce n'est pas parfait, mais c'est proche. Ceci est destiné à être alimenté make
, c'est pourquoi il donne un résultat 1 supérieur au nombre réel. Et je sais que le code ci-dessus peut être écrit plus dense en Perl ou peut être écrit en utilisant grep, wc et cut, mais j'ai décidé que ce qui précède était un bon compromis entre concision et lisibilité.
MODIFICATION TRÈS TARD: Juste pour clarifier: je demande combien de cœurs logiques sont disponibles, car cela correspond au nombre de travaux simultanés que je veux make
générer. La réponse de jkp, affinée par Chris Lloyd, était exactement ce dont j'avais besoin. YMMV.
grep ^processor /proc/cpuinfo | wc -l
nproc
commande.Réponses:
Vous pouvez le faire en utilisant l' utilitaire sysctl :
la source
sysctl hw.physicalcpu
ousysctl hw.logicalcpu
, et en généralsysctl hw
pour toutes les options.Encore plus simple:
la source
system_profiler SPHardwareDataType
ce que je peux croire `Identifiant du modèle: MacBookPro9,2 Nom du processeur: Intel Core i5 Vitesse du processeur: 2,5 GHz Nombre de processeurs: 1 Nombre total deCela devrait être multiplateforme. Au moins pour Linux et Mac OS X.
Un peu lent mais ça marche.
la source
Pour ce faire en C, vous pouvez utiliser la famille de fonctions sysctl (3):
Les valeurs intéressantes à utiliser à la place de "hw.logicalcpu", qui compte les cœurs, sont:
la source
system_profiler SPHardwareDataType
montre que j'ai 1 processeur et 4 cœurs.Cependant, sysctl n'est pas d'accord:
Mais sysctl semble correct, car lorsque j'exécute un programme qui devrait occuper tous les emplacements CPU, je vois que ce programme prend près de 800% du temps CPU (in
top
):la source
sysctl hw.physicalcpu
montrera combien de cœurs de processeur physiques sont à votre disposition,sysctl hw.logicalcpu
montrera combien de cpus logiques à votre disposition. Les systèmes d'exploitation comme Windows / OSX / Linux font tout leur travail pour donner l'impression que vous avez plusieurs processeurs (quel que soit leur type). Les OS comme linux vous permettent de configurer quels processeurs, cœurs, threads peuvent être utilisés.la source
grep -i
Utilisez la
system_profiler | grep "Cores"
commande.J'ai un:
Selon Wikipedia, ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ), il n'y a pas de Core i7 avec 8 cœurs physiques, donc l' idée d' hyperthreading doit être le cas. Ignorez
sysctl
et utilisez lasystem_profiler
valeur pour la précision. La vraie question est de savoir si vous pouvez exécuter efficacement des applications avec 4 cœurs (longs travaux de compilation?) Sans interrompre d'autres processus.L'exécution d'un compilateur parallélisé avec 4 cœurs ne semble pas affecter considérablement les opérations régulières du système d'exploitation. Alors peut-être que le traiter comme 8 cœurs n'est pas si mal.
la source
Comme l'a dit jkp dans un commentaire, cela ne montre pas le nombre réel de cœurs physiques. pour obtenir le nombre de cœurs physiques, vous pouvez utiliser la commande suivante:
la source
make
, de sorte que la réponse de jkp (nombre de cœurs logiques) convient le mieux.La commande suivante vous donne toutes les informations sur votre CPU
la source
CLARIFICATION
Lorsque cette question a été posée, le PO n'a pas dit qu'il voulait le nombre de cœurs LOGIQUES plutôt que le nombre réel de cœurs, donc cette réponse répond logiquement (sans jeu de mots) avec un moyen d'obtenir le réel nombre de cœurs physiques réels, non le nombre que l'OS essaie de virtualiser via le vaudou hyperthreading.
MISE À JOUR POUR GÉRER LE DÉFAUT DE YOSEMITE
En raison d'un bug étrange dans OS X Yosemite (et peut-être des versions plus récentes, telles que le prochain El Capitan), j'ai apporté une petite modification. (L'ancienne version fonctionnait toujours parfaitement bien si vous ignorez simplement STDERR, ce que toute la modification fait pour vous.)
Toutes les autres réponses données ici non plus
bundle install --jobs 3
où vous souhaitez que le nombre à la place3
soit inférieur de un au nombre) de cœurs que vous avez, ou du moins pas plus que le nombre de cœurs)La façon d'obtenir juste le nombre de cœurs, de manière fiable, correcte, raisonnablement rapide, et sans informations supplémentaires ni même de caractères supplémentaires autour de la réponse, est la suivante:
la source
sysctl -n hw.ncpu
sur mon Mac Pro et je n'ai eu aucun de ces problèmes.sysctl
ne donne pas de résultats précis sur ma machine, et d'autres ont signalé la même chose. S'il ne peut pas être invoqué pour toujours donner des résultats précis, il ne peut pas être considéré comme fiable et précis.sysctl
lesquelles vous le voyez, afin que les limites de son bon fonctionnement soient mieux connues, comme l'a fait user1706991.sysctl -n hw.physicalcpu_max
Sur un MacBook Pro exécutant Mavericks ,
sysctl -a | grep hw.cpu
ne renverra que des détails cryptiques. Des informations beaucoup plus détaillées et accessibles sont révélées dans lamachdep.cpu
section, à savoir:En particulier, pour les processeurs avec
HyperThreading
(HT), vous verrez le nombre total d'UC énuméré (logical_per_package
) comme le double de celui du noyau physique (cores_per_package
).la source
Cela n'était pas spécifié dans la question d'origine (même si j'ai vu OP post dans les commentaires que ce n'était pas une option), mais de nombreux développeurs sur macOS ont installé le gestionnaire de paquets Homebrew.
Pour les futurs développeurs qui tombent sur cette question, tant que l'hypothèse (ou l'exigence) d'installation de Homebrew existe (par exemple, dans une organisation d'ingénierie dans une entreprise),
nproc
est l'un des binaires GNU courants inclus dans lecoreutils
package.Si vous avez des scripts que vous préférez écrire une fois (pour Linux + macOS) au lieu de deux, ou pour éviter d'avoir des
if
blocs où vous devez détecter le système d'exploitation pour savoir s'il faut ou non appelernproc
vssysctl -n hw.logicalcpu
, cela peut être une meilleure option.la source
Commentaires pour 2 bonnes réponses ci-dessus:
1) concernant la réponse (et commentaires) acceptée par jkp: hw.ncpu est apparemment déconseillé au profit de hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594 )
2) concernant la mise à jour 2014 de Karl Ehr: sur mon ordinateur (avec 2,5 GHz Intel Core i7),
sysctl -a | grep machdep.cpu | grep per_package
renvoie différents chiffres:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Les valeurs souhaitées sont:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Quel match:
hw.physicalcpu: 4
hw.logicalcpu: 8
la source
Cela peut être fait de manière plus portable:
Compatible avec macOS et Linux.
la source
nproc
ne semble pas être disponible sur macOS Mojave.nproc
est une installation triviale via homebrew.