Bagaimana Anda bisa tahu, dari baris perintah, berapa core yang ada di mesin ketika Anda menjalankan Mac OS X? Di Linux, saya menggunakan:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Itu tidak sempurna, tetapi dekat. Ini dimaksudkan untuk mendapatkan makan make
, itulah sebabnya ia memberikan hasil 1 lebih tinggi dari jumlah sebenarnya. Dan saya tahu kode di atas dapat ditulis lebih padat di Perl atau dapat ditulis menggunakan grep, wc, dan cut, tapi saya memutuskan di atas adalah tradeoff yang baik antara keringkasan dan keterbacaan.
EDIT SANGAT TERLAMBAT: Hanya untuk memperjelas: Saya bertanya berapa banyak core logis yang tersedia, karena ini sesuai dengan berapa banyak pekerjaan simultan yang saya ingin make
hasilkan. Jawaban jkp, yang kemudian disempurnakan oleh Chris Lloyd, adalah persis apa yang saya butuhkan. YMMV.
grep ^processor /proc/cpuinfo | wc -l
nproc
perintahnya.Jawaban:
Anda dapat melakukan ini menggunakan utilitas sysctl :
sumber
sysctl hw.physicalcpu
atausysctl hw.logicalcpu
, dan secara umumsysctl hw
untuk semua opsi.Lebih mudah lagi:
sumber
system_profiler SPHardwareDataType
yang saya yakini `Model Identifier: MacBookPro9,2 Nama Prosesor: Intel Core i5 Kecepatan Prosesor: 2,5 GHz Jumlah Prosesor: 1 Total Jumlah Core: 2`Ini harus lintas platform. Setidaknya untuk Linux dan Mac OS X.
Sedikit lambat tapi berhasil.
sumber
Untuk melakukan ini di C Anda dapat menggunakan keluarga sysctl (3) fungsi:
Nilai menarik untuk digunakan sebagai pengganti "hw.logicalcpu", yang menghitung inti, adalah:
sumber
system_profiler SPHardwareDataType
menunjukkan saya punya 1 prosesor dan 4 core.Namun, sysctl tidak setuju:
Tetapi sysctl tampaknya benar, ketika ketika saya menjalankan sebuah program yang harus mengambil semua slot CPU, saya melihat program ini mengambil hampir 800% dari waktu CPU (dalam
top
):sumber
sysctl hw.physicalcpu
akan menunjukkan berapa banyak core cpu fisik yang tersedia untuk Anda,sysctl hw.logicalcpu
akan menunjukkan berapa banyak CPU logis yang tersedia untuk Anda. OS seperti Windows / OSX / Linux melakukan semua pekerjaan membuatnya seolah-olah Anda memiliki beberapa CPU (terlepas dari apa jenisnya). Seperti linux OS memungkinkan Anda untuk mengkonfigurasi cpu, core, threading yang dapat digunakan.sumber
grep -i
Gunakan
system_profiler | grep "Cores"
perintah.Saya punya:
Menurut Wikipedia, ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) tidak ada Core i7 dengan 8 core fisik sehingga ide Hyperthreading harus menjadi kasusnya. Abaikan
sysctl
dan gunakansystem_profiler
nilai untuk akurasi. Pertanyaan sebenarnya adalah apakah Anda dapat menjalankan aplikasi dengan 4 core secara efisien (pekerjaan kompilasi panjang?) Tanpa mengganggu proses lain.Menjalankan kompiler yang diparalelkan dengan 4 core tampaknya tidak secara dramatis mempengaruhi operasi OS biasa. Jadi mungkin memperlakukannya sebagai 8 core tidak terlalu buruk.
sumber
Seperti yang dikatakan jkp dalam komentar, itu tidak menunjukkan jumlah sebenarnya dari inti fisik. untuk mendapatkan jumlah inti fisik Anda dapat menggunakan perintah berikut:
sumber
make
, jadi jawaban jkp (jumlah core logis) paling cocok.Perintah berikut memberi Anda semua informasi tentang CPU Anda
sumber
KLARIFIKASI
Ketika pertanyaan ini diajukan, OP tidak mengatakan bahwa dia menginginkan jumlah core LOGICAL daripada jumlah core yang sebenarnya , jadi jawaban ini secara logis (tidak ada pun intended) menjawab dengan cara untuk mendapatkan jumlah sebenarnya dari core fisik nyata, bukan nomor yang OS coba untuk virtualisasi melalui voodoo hyperthreading.
PEMBARUAN UNTUK MENANGANI Cacat DI YOSEMITE
Karena bug aneh di OS X Yosemite (dan mungkin versi yang lebih baru, seperti El Capitan yang akan datang), saya telah membuat modifikasi kecil. (Versi lama masih berfungsi dengan baik jika Anda mengabaikan STDERR, yang merupakan modifikasi bagi Anda.)
Setiap jawaban lain yang diberikan di sini juga
bundle install --jobs 3
mana Anda ingin nomor di tempat3
menjadi satu kurang dari angka core yang Anda miliki, atau setidaknya tidak lebih dari jumlah core)Cara mendapatkan jumlah inti, andal, benar, cukup cepat, dan tanpa informasi tambahan atau bahkan karakter tambahan di sekitar jawabannya, adalah ini:
sumber
sysctl -n hw.ncpu
di Mac Pro dan tidak mengalami masalah itu.sysctl
tidak memberikan hasil yang akurat pada mesin saya, dan orang lain telah melaporkan hal yang sama. Jika tidak bisa diandalkan untuk selalu memberikan hasil yang akurat, maka itu tidak dapat dianggap andal dan akurat.sysctl
operasi yang tepat lebih dikenal, seperti yang dilakukan pengguna1706991.sysctl -n hw.physicalcpu_max
Pada MacBook Pro yang menjalankan Maverick ,
sysctl -a | grep hw.cpu
hanya akan mengembalikan beberapa detail samar. Informasi yang jauh lebih terperinci dan dapat diakses diungkapkan dimachdep.cpu
bagian ini, yaitu:Khususnya, untuk prosesor dengan
HyperThreading
(HT), Anda akan melihat jumlah total CPU yang disebutkan (logical_per_package
) dua kali lipat dari jumlah inti fisik (cores_per_package
).sumber
Itu tidak ditentukan dalam pertanyaan asli (walaupun saya melihat posting OP di komentar bahwa ini bukan pilihan), tetapi banyak pengembang di macOS memiliki manajer paket Homebrew diinstal.
Untuk pengembang masa depan yang menemukan pertanyaan ini, selama asumsi (atau persyaratan) Homebrew yang dipasang ada (misalnya, dalam organisasi rekayasa di perusahaan),
nproc
adalah salah satu binari GNU umum yang termasuk dalamcoreutils
paket.Jika Anda memiliki script yang Anda lebih memilih untuk menulis sekali (untuk Linux + MacOS) bukan dua kali, atau untuk menghindari
if
blok mana Anda perlu untuk mendeteksi OS untuk mengetahui apakah atau tidak untuk memanggilnproc
vssysctl -n hw.logicalcpu
, ini mungkin menjadi pilihan yang lebih baik.sumber
Komentar untuk 2 balasan bagus di atas:
1) apakah balasan yang diterima (dan komentar) oleh jkp: hw.ncpu tampaknya sudah tidak digunakan lagi karena hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594 )
2) saat pembaruan 2014 oleh Karl Ehr: di komputer saya (dengan 2,5 ghz intel core i7),
sysctl -a | grep machdep.cpu | grep per_package
mengembalikan nomor yang berbeda:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Nilai yang diinginkan adalah:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Yang cocok:
hw.physicalcpu: 4
hw.logicalcpu: 8
sumber
Ini dapat dilakukan dengan cara yang lebih portabel:
Kompatibel dengan macOS dan Linux.
sumber
nproc
sepertinya tidak tersedia di macOS Mojave.nproc
adalah instalasi sepele melalui homebrew.