Jak możesz stwierdzić w wierszu poleceń, ile rdzeni znajduje się na komputerze, gdy korzystasz z systemu Mac OS X? W systemie Linux używam:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
To nie jest idealne, ale jest blisko. Ma to zostać nakarmione make
, dlatego daje wynik o 1 wyższy niż rzeczywista liczba. Wiem, że powyższy kod może być napisany gęstszy w Perlu lub może być napisany przy pomocy grep, wc i cut, ale zdecydowałem, że powyższy kod jest dobrym kompromisem między zwięzłością a czytelnością.
BARDZO PÓŹNA EDYCJA: Tylko dla wyjaśnienia: pytam, ile rdzeni logicznych jest dostępnych, ponieważ odpowiada to liczbie jednoczesnych zadań, które chcę make
odrodzić. Odpowiedź jkp, dopracowana przez Chrisa Lloyda, była dokładnie tym , czego potrzebowałem. YMMV.
grep ^processor /proc/cpuinfo | wc -l
nproc
polecenie.Odpowiedzi:
Możesz to zrobić za pomocą narzędzia sysctl :
źródło
sysctl hw.physicalcpu
lubsysctl hw.logicalcpu
ogólniesysctl hw
wszystkie opcje.Jeszcze łatwiej:
źródło
system_profiler SPHardwareDataType
co mogę wierzyć `Identyfikator modelu: MacBookPro9,2 Nazwa procesora: Intel Core i5 Prędkość procesora: 2,5 GHz Liczba procesorów: 1 Całkowita liczba rdzeni:To powinno być międzyplatformowe. Przynajmniej dla systemu Linux i Mac OS X.
Trochę wolno, ale działa.
źródło
Aby to zrobić w C, możesz użyć rodziny funkcji sysctl (3):
Interesującymi wartościami do zastosowania zamiast „hw.logicalcpu”, które liczą rdzenie, są:
źródło
system_profiler SPHardwareDataType
pokazuje, że mam 1 procesor i 4 rdzenie.Jednak sysctl nie zgadza się:
Ale sysctl wydaje się poprawny, ponieważ kiedy uruchamiam program, który powinien zajmować wszystkie gniazda procesora, widzę, że ten program zajmuje prawie 800% czasu procesora (w
top
):źródło
sysctl hw.physicalcpu
pokaże, ile fizycznych rdzeni procesora jest dostępnych,sysctl hw.logicalcpu
pokaże, ile logicznych procesorów jest dostępnych. Systemy operacyjne, takie jak Windows / OSX / Linux, robią wszystko, aby wyglądało na to, że masz wiele procesorów (niezależnie od tego, jaki to jest typ). Linux jak OS umożliwia konfigurację, które jednostki centralne, rdzenie i wątki mogą być używane.źródło
grep -i
Użyj
system_profiler | grep "Cores"
polecenia.Mam:
Według Wikipedii ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) nie ma Core i7 z 8 rdzeniami fizycznymi, więc pomysł Hyperthreading musi być obecny . Zignoruj
sysctl
i użyjsystem_profiler
wartości dla dokładności. Prawdziwe pytanie brzmi: czy możesz efektywnie uruchamiać aplikacje z 4 rdzeniami (długie zadania kompilacji?) Bez przerywania innych procesów.Uruchomienie kompilatora równolegle z 4 rdzeniami nie wydaje się znacząco wpływać na normalne operacje systemu operacyjnego. Więc może potraktowanie go jako 8 rdzeni nie jest takie złe.
źródło
Jak powiedział w komentarzu jkp, nie pokazuje rzeczywistej liczby rdzeni fizycznych. aby uzyskać liczbę rdzeni fizycznych, możesz użyć następującego polecenia:
źródło
make
, z iloma procesami się odradzać, więc odpowiedź jkp (liczba rdzeni logicznych) najlepiej pasuje.Poniższe polecenie zawiera wszystkie informacje o procesorze
źródło
WYJAŚNIENIE
Kiedy zadano to pytanie, OP nie powiedział, że chce raczej liczby rdzeni LOGICZNYCH niż rzeczywistej liczby rdzeni, więc ta odpowiedź logicznie (bez zamierzonej gry słów) odpowiada w sposób umożliwiający uzyskanie rzeczywistej liczby rzeczywistych rdzeni fizycznych, a nie liczba, którą system operacyjny próbuje wirtualizować za pomocą voodoo hiperwątkowości.
AKTUALIZACJA USTERKI W YOSEMITE
Z powodu dziwnego błędu w systemie OS X Yosemite (i prawdopodobnie nowszych wersjach, takich jak nadchodzący El Capitan), wprowadziłem niewielką modyfikację. (Stara wersja nadal działała doskonale, jeśli po prostu zignorujesz STDERR, co jest wszystkim, co robi dla Ciebie modyfikacja).
Każda inna odpowiedź tutaj
bundle install --jobs 3
którym liczba3
ma być o jeden mniejsza od liczby posiadanych rdzeni, a przynajmniej nie więcej niż ich liczba)Sposób na uzyskanie tylko liczby rdzeni, niezawodnie, poprawnie, rozsądnie szybko i bez dodatkowych informacji lub nawet dodatkowych znaków wokół odpowiedzi, jest następujący:
źródło
sysctl -n hw.ncpu
komputer Mac Pro i nie miałem żadnych z tych problemów.sysctl
nie daje dokładnych wyników na moim komputerze, a inni zgłosili to samo. Jeśli nie można polegać na tym, że zawsze daje dokładne wyniki, to nie może być uważane za wiarygodne i dokładne.sysctl
prawidłowego działania są lepiej znane, tak jak zrobił to użytkownik 17070991.sysctl -n hw.physicalcpu_max
Na MacBook Pro z systemem Mavericks ,
sysctl -a | grep hw.cpu
powróci tylko jakieś tajemnicze szczegóły. Wmachdep.cpu
sekcji tej ujawniono znacznie bardziej szczegółowe i dostępne informacje , tj .:W szczególności w przypadku procesorów z
HyperThreading
(HT) zobaczysz całkowitą wyliczoną liczbę procesorów (logical_per_package
) jako dwukrotność liczby fizycznych rdzeni (cores_per_package
).źródło
Nie zostało to określone w pierwotnym pytaniu (chociaż widziałem OP w komentarzach, że nie była to opcja), ale wielu programistów na macOS ma zainstalowanego menedżera pakietów Homebrew.
Dla przyszłych programistów, którzy natkną się na to pytanie, o ile istnieje założenie (lub wymaganie) instalowania Homebrew (np. W organizacji inżynierskiej w firmie),
nproc
jest jednym ze wspólnych plików binarnych GNU, które są zawarte wcoreutils
pakiecie.Jeśli masz skrypty, które wolisz pisać raz (dla Linux + macOS) zamiast dwa razy, lub aby uniknąć
if
bloków, w których musisz wykryć system operacyjny, aby wiedzieć, czy zadzwonićnproc
vssysctl -n hw.logicalcpu
, może to być lepsza opcja.źródło
Komentarze do 2 dobrych odpowiedzi powyżej:
1) ponownie zaakceptowana odpowiedź (i komentarze) autorstwa jkp: hw.ncpu jest najwyraźniej wycofana na korzyść hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594 )
2) ponownie aktualizacja Karla Ehra z 2014 r .: na moim komputerze (z rdzeniem Intel Core i7 2,5 GHz)
sysctl -a | grep machdep.cpu | grep per_package
zwraca różne liczby:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Pożądane wartości to:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Które dopasowanie:
hw.physicalcpu: 4
hw.logicalcpu: 8
źródło
Można to zrobić w bardziej przenośny sposób:
Kompatybilny z macOS i Linux.
źródło
nproc
nie wydaje się być dostępny w systemie macOS Mojave.nproc
to prosta instalacja przez Homebrew.