web-dev-qa-db-ja.com

Mac OS Xで*論理*コアの数を見つける方法は?

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。

360
Mike DeSimone

これは sysctl ユーティリティを使って行うことができます。

sysctl -n hw.ncpu
754
jkp

さらに簡単に:

sysctl -n hw.ncpu
127
mlbright

これはクロスプラットフォームです。少なくともLinuxとMac OS X用。

python -c 'import multiprocessing as mp; print(mp.cpu_count())'

少し遅くなりますが動作します。

24
Frozen Flame

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.
18
alfwatt
$ system_profiler | grep 'Total Number Of Cores'
9
kent

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

9
user1706991

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コアとしてそれを扱うことはそれほど悪くないです。

8
NetworkN8

Jkpがコメントで言ったように、それは物理コアの実際の数を示していません。物理コアの数を取得するには、次のコマンドを使用します。

system_profiler SPHardwareDataType
7
Tohid

次のコマンドはあなたのCPUに関する全ての情報を与えます。

$ sysctl -a | sort | grep cpu
3
asmaier

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
1
Karl Ehr

説明

この質問がされたとき、OPは彼がLOGICALのコア数を望んでいたとは言いませんでした実際の数ではなく、この答えは実際の数を取得する方法で論理的に(意図していない)答えを返します。 OSがハイパースレッディングブードゥーによって仮想化を試みる数ではなく、実際の物理コアの数です。

ヨセミテの手の届くところに更新

OS X Yosemite(および今後登場するEl Capitanなどのより新しいバージョン)の奇妙な バグ のため、私は小さな修正を加えました。 (古いバージョンはSTDERRを無視しても完全にうまくいきました。これはすべての変更があなたのために行っています。)


ここに与えられた他のすべての答え

  1. 誤った情報を与える
  2. コマンド実装のエラーのため、情報を提供しません
  3. 信じられないほどゆっくりと実行されます(の大部分を完了させるために)
  4. あまりにも多くのデータを与えるので、対話的な使用には役立つかもしれませんが、データをプログラム的に使用したい場合(例えば、bundle install --jobs 3のようなコマンドへの入力として、3の代わりの数字を1より小さい)あなたが持っているコアの数、または少なくともコアの数以下)

正確な数のコアを確実に、正確に、適度に迅速に入手し、余分な情報や余分な文字を追加することなく入手する方法は、次のとおりです。

system_profiler SPHardwareDataType 2> /dev/null | grep 'Total Number of Cores' | cut -d: -f2 | tr -d ' '
1
iconoclast

上記の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

0
Mark