Wie können Sie über die Befehlszeile erkennen, wie viele Kerne sich auf dem Computer befinden, wenn Sie Mac OS X ausführen? Unter Linux verwende ich:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Es ist nicht perfekt, aber es ist nah. Dies soll zugeführt werden make
, weshalb es ein Ergebnis 1 gibt, das höher als die tatsächliche Anzahl ist. Und ich weiß, dass der obige Code in Perl dichter geschrieben werden kann oder mit grep, wc und cut geschrieben werden kann, aber ich entschied, dass der obige ein guter Kompromiss zwischen Prägnanz und Lesbarkeit war.
SEHR SPÄTE BEARBEITUNG: Nur zur Verdeutlichung: Ich frage, wie viele logische Kerne verfügbar sind, da dies der Anzahl der gleichzeitigen Jobs entspricht, die ich erzeugen möchte make
. Die Antwort von jkp, die von Chris Lloyd weiter verfeinert wurde, war genau das , was ich brauchte. YMMV.
grep ^processor /proc/cpuinfo | wc -l
nproc
Befehl.Antworten:
Sie können dies mit dem Dienstprogramm sysctl tun :
quelle
sysctl hw.physicalcpu
odersysctl hw.logicalcpu
und im Allgemeinensysctl hw
für alle Optionen.Sogar einfacher:
quelle
system_profiler SPHardwareDataType
, kann ich glauben, `Modell-ID: MacBookPro9,2 Prozessorname: Intel Core i5 Prozessor Geschwindigkeit: 2,5 GHz Anzahl der Prozessoren: 1 Gesamtzahl der Kerne: 2`Dies sollte plattformübergreifend sein. Zumindest für Linux und Mac OS X.
Ein bisschen langsam, funktioniert aber.
quelle
Dazu können Sie in C die Funktionsfamilie sysctl (3) verwenden:
Interessante Werte anstelle von "hw.logicalcpu", das Kerne zählt, sind:
quelle
system_profiler SPHardwareDataType
zeigt, ich habe 1 Prozessor und 4 Kerne.Sysctl ist jedoch anderer Meinung:
Aber sysctl scheint korrekt zu sein. Wenn ich ein Programm ausführe, das alle CPU-Steckplätze belegen soll, dauert dieses Programm fast 800% der CPU-Zeit (in
top
):quelle
sysctl hw.physicalcpu
zeigt an, wie viele physische CPU-Kerne Ihnen zur Verfügung stehen,sysctl hw.logicalcpu
zeigt an, wie viele logische CPUs Ihnen zur Verfügung stehen. Betriebssysteme wie Windows / OSX / Linux sorgen dafür, dass es so aussieht, als hätten Sie mehrere CPUs (unabhängig davon, um welchen Typ es sich handelt). Mit Betriebssystemen wie Linux können Sie konfigurieren, welche CPU, Kerne und Threading verwendet werden können.quelle
grep -i
Verwenden Sie die
system_profiler | grep "Cores"
Befehl.Ich habe ein:
Laut Wikipedia ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) gibt es keinen Core i7 mit 8 physischen Kernen, daher muss die Hyperthreading- Idee der Fall sein. Ignorieren
sysctl
und verwenden Sie diesystem_profiler
Wert für die Genauigkeit. Die eigentliche Frage ist, ob Sie Anwendungen mit 4 Kernen (lange Kompilierungsjobs?) Effizient ausführen können, ohne andere Prozesse zu unterbrechen.Das Ausführen eines mit 4 Kernen parallelisierten Compilers scheint die regulären Betriebssystemvorgänge nicht dramatisch zu beeinträchtigen. Vielleicht ist es gar nicht so schlecht, es als 8 Kerne zu behandeln.
quelle
Wie jkp in einem Kommentar sagte, zeigt dies nicht die tatsächliche Anzahl der physischen Kerne an. Um die Anzahl der physischen Kerne zu ermitteln, können Sie den folgenden Befehl verwenden:
quelle
make
, damit die Antwort von jkp (Anzahl der logischen Kerne) am besten passt.Der folgende Befehl gibt Ihnen alle Informationen zu Ihrer CPU
quelle
KLÄRUNG
Als diese Frage gestellt wurde, sagte das OP nicht, dass er die Anzahl der logischen Kerne anstelle der tatsächlichen Anzahl der Kerne haben wollte, daher antwortet diese Antwort logisch (kein Wortspiel beabsichtigt) mit einer Möglichkeit, die tatsächliche Anzahl der realen physischen Kerne zu erhalten, nicht Die Nummer, die das Betriebssystem versucht, durch Hyperthreading-Voodoo zu virtualisieren.
UPDATE ZUR BEHANDLUNG VON FLAW IN YOSEMITE
Aufgrund eines seltsamen Fehlers in OS X Yosemite (und möglicherweise neueren Versionen wie dem kommenden El Capitan) habe ich eine kleine Änderung vorgenommen. (Die alte Version hat immer noch einwandfrei funktioniert, wenn Sie STDERR einfach ignorieren, was alles ist, was die Modifikation für Sie tut.)
Jede andere Antwort hier auch
bundle install --jobs 3
bei dem die Nummer anstelle von3
eins kleiner als die Nummer sein soll Anzahl der Kerne, die Sie haben, oder zumindest nicht mehr als die Anzahl der Kerne)Der Weg, um nur die Anzahl der Kerne zuverlässig, korrekt, relativ schnell und ohne zusätzliche Informationen oder sogar zusätzliche Zeichen um die Antwort zu erhalten, ist folgender:
quelle
sysctl -n hw.ncpu
auf meinem Mac Pro gelaufen und hatte keines dieser Probleme.sysctl
jedoch keine genauen Ergebnisse auf meinem Computer, und andere haben das gleiche gemeldet. Wenn man sich nicht darauf verlassen kann, dass immer genaue Ergebnisse erzielt werden, kann dies nicht als zuverlässig und genau angesehen werden.sysctl
ordnungsgemäßen Betriebs besser bekannt sind, wie dies bei user1706991 der Fall war.sysctl -n hw.physicalcpu_max
Auf einem MacBook Pro mit Maverick ,
sysctl -a | grep hw.cpu
nur ein paar kryptischen Details zurück. Viel detailliertere und zugänglichere Informationen finden Sie in diesemmachdep.cpu
Abschnitt:Insbesondere bei Prozessoren mit
HyperThreading
(HT) wird die Gesamtzahl der aufgelisteten CPUs (logical_per_package
) doppelt so hoch wie die Anzahl der physischen Kerne (cores_per_package
).quelle
Es wurde in der ursprünglichen Frage nicht angegeben (obwohl ich OP-Beiträge in Kommentaren gesehen habe, dass dies keine Option war), aber viele Entwickler unter macOS haben den Homebrew-Paketmanager installiert.
Für zukünftige Entwickler, die über diese Frage stolpern,
nproc
ist eine der imcoreutils
Paket enthaltenen allgemeinen GNU-Binärdateien eine der gängigen GNU-Binärdateien, sofern die Annahme (oder Anforderung) der Installation von Homebrew besteht (z. B. in einer technischen Organisation in einem Unternehmen) .Wenn Sie Skripte haben, die Sie lieber einmal (für Linux + macOS) als zweimal schreiben möchten, oder um
if
Blöcke zu vermeiden, in denen Sie das Betriebssystem erkennen müssen, um zu wissen, ob Sienproc
vs aufrufen sollen oder nichtsysctl -n hw.logicalcpu
, ist dies möglicherweise eine bessere Option.quelle
Kommentare für 2 gute Antworten oben:
1) Bezüglich der akzeptierten Antwort (und Kommentare) von jkp: hw.ncpu wird offenbar zugunsten von hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594) abgelehnt )
2) Zum Update 2014 von Karl Ehr: Auf meinem Computer (mit 2,5 GHz Intel Core i7) werden
sysctl -a | grep machdep.cpu | grep per_package
unterschiedliche Zahlen zurückgegeben:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Die gewünschten Werte sind:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Welches Spiel:
hw.physicalcpu: 4
hw.logicalcpu: 8
quelle
Dies kann auf tragbarere Weise erfolgen:
Kompatibel mit macOS und Linux.
quelle
nproc
scheint unter macOS Mojave nicht verfügbar zu sein.nproc
ist eine triviale Installation durch Homebrew.