Mac OS Xを実行しているときに、マシン上にあるコアの数をコマンドラインからどのように確認できますか? Linuxでは、次を使用します。
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
完璧ではありませんが、近いです。これはmake
に供給されることを目的としているため、実際の数値よりも1高い結果が得られます。また、上記のコードはPerlでより高密度に記述できるか、grep、wc、およびcutを使用して記述できることは知っていますが、上記は簡潔さと読みやすさの良いトレードオフであると判断しました。
VERY LATE EDIT:わかりやすくするために、使用可能なlogicalコアの数を尋ねています。 make
を生成する同時ジョブ。 jkpの答えは、Chris Lloydによりさらに洗練され、exactly必要なものでした。 YMMV。
これは sysctl ユーティリティを使って行うことができます。
sysctl -n hw.ncpu
さらに簡単に:
sysctl -n hw.ncpu
これはクロスプラットフォームです。少なくともLinuxとMac OS X用。
python -c 'import multiprocessing as mp; print(mp.cpu_count())'
少し遅くなりますが動作します。
Cでこれを行うには、sysctl(3)ファミリーの関数を使用できます。
int count;
size_t count_len = sizeof(count);
sysctlbyname("hw.logicalcpu", &count, &count_len, NULL, 0);
fprintf(stderr,"you have %i cpu cores", count);
コアをカウントする "hw.logicalcpu"の代わりに使用する興味深い値は次のとおりです。
hw.physicalcpu - The number of physical processors available in the current power management mode.
hw.physicalcpu_max - The maximum number of physical processors that could be available this boot.
hw.logicalcpu - The number of logical processors available in the current power management mode.
hw.logicalcpu_max - The maximum number of logical processors that could be available this boot.
$ system_profiler | grep 'Total Number Of Cores'
system_profiler SPHardwareDataTypeは、1つのプロセッサと4つのコアがあることを示しています。
[〜] system_profiler SPHardwareDataTypeハードウェア:
Hardware Overview:
Model Name: MacBook Pro
Model Identifier: MacBookPro9,1
Processor Name: Intel Core i7
Processor Speed: 2.6 GHz
Number of Processors: 1
Total Number of Cores: 4
<snip>
[〜]
しかし、sysctlは同意しません。
[〜] sysctl -n hw.logicalcpu 8 [〜] sysctl -n hw.physicalcpu 4 [〜]
しかし、sysctlは正しいように見えます。すべてのCPUスロットを占有するはずのプログラムを実行すると、このプログラムはCPU時間の800%近くを占めているのがわかります(一番上)
PIDコマンド%CPU
4306トップ5.6
4304 Java 745.7 4296ロケーション0.0
system_profiler | grep "Cores"
コマンドを使用してください。
私は持っています:
MacBook Pro Retina、2012年半ば。
プロセッサ:2.6 GHz Intel Core i7
user$ system_profiler | grep "Cores"
Total Number of Cores: 4
user$ sysctl -n hw.ncpu
8
ウィキペディアによると、( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 )8つの物理コアを持つCore i7はないので、ハイパースレッディングという考えが当てはまるはずです。 sysctl
を無視し、正確さのためにsystem_profiler
値を使用してください。本当の問題は、他のプロセスを中断することなく、4つのコアでアプリケーションを効率的に実行できるかどうかです(長いコンパイルジョブ?)。
4コアで並列化されたコンパイラを実行しても、通常のOSの動作に劇的な影響はないようです。だから、おそらく8コアとしてそれを扱うことはそれほど悪くないです。
Jkpがコメントで言ったように、それは物理コアの実際の数を示していません。物理コアの数を取得するには、次のコマンドを使用します。
system_profiler SPHardwareDataType
次のコマンドはあなたのCPUに関する全ての情報を与えます。
$ sysctl -a | sort | grep cpu
Mavericksを実行しているMacBook Proでは、sysctl -a | grep hw.cpu
はいくつかの不可解な詳細のみを返します。 machdep.cpu
セクションには、もっと詳細で分かりやすい情報が記載されています。
sysctl -a | grep machdep.cpu
特に、HyperThreading
(HT)のプロセッサの場合、列挙されたCPUの総数(logical_per_package
)は、物理コアの数(cores_per_package
)の2倍になります。
sysctl -a | grep machdep.cpu | grep per_package
説明
この質問がされたとき、OPは彼がLOGICALのコア数を望んでいたとは言いませんでした実際の数ではなく、この答えは実際の数を取得する方法で論理的に(意図していない)答えを返します。 OSがハイパースレッディングブードゥーによって仮想化を試みる数ではなく、実際の物理コアの数です。
ヨセミテの手の届くところに更新
OS X Yosemite(および今後登場するEl Capitanなどのより新しいバージョン)の奇妙な バグ のため、私は小さな修正を加えました。 (古いバージョンはSTDERRを無視しても完全にうまくいきました。これはすべての変更があなたのために行っています。)
ここに与えられた他のすべての答え
bundle install --jobs 3
のようなコマンドへの入力として、3
の代わりの数字を1より小さい)あなたが持っているコアの数、または少なくともコアの数以下)正確な数のコアを確実に、正確に、適度に迅速に入手し、余分な情報や余分な文字を追加することなく入手する方法は、次のとおりです。
system_profiler SPHardwareDataType 2> /dev/null | grep 'Total Number of Cores' | cut -d: -f2 | tr -d ' '
上記の2つの良い返信に対するコメント:
1)jkpが承認した返信(およびコメント)を再投稿する:hw.ncpuはhw.logicalcpu( を支持しているため、廃止予定となっているようです。/8594 )
2)Karl Ehrによる2014年の更新に関して:私のコンピュータ(2.5 GHz Intel Core i7)では、sysctl -a | grep machdep.cpu | grep per_package
は異なる数値を返します。
machdep.cpu.logical_per_package:16
machdep.cpu.cores_per_package:8
望ましい値は以下のとおりです。
machdep.cpu.core_count:4
machdep.cpu.thread_count:8
どのマッチ:
hw.physicalcpu:4
hw.logicalcpu:8