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


382

Mac OS Xを実行しているときに、コマンドラインから、マシンにコアがいくつあるかをどのように確認できますか?Linuxでは、次のように使用します。

x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)

完璧ではありませんが、近いです。これはにフィードすることを目的としているためmake、実際の数よりも1多い結果が得られます。上記のコードはPerlでより高密度に記述できること、またはgrep、wc、cutを使用して記述できることは知っていますが、上記は簡潔さと読みやすさのトレードオフであると判断しました。

非常に遅い編集:明確にするために:使用可能な論理コアの数を求めmakeています。これは、生成する同時ジョブの数に対応するためです。jkpの答えは、Chris Lloydによってさらに洗練されており、まさに私が必要としていたものでした。YMMV。


:Linuxの場合、私が使用して1を追加することを避けるgrep ^processor /proc/cpuinfo | wc -l
courtlandj

3
stackoverflow.com/questions/6481005/…を参照してくださいnproc。コマンドに注意してください。
Mike DeSimone、2014

これが初心者向けの質問であれば申し訳ありませんが、論理コアを意味する場合、物理コアを意味しますか?用語はどのように異なりますか(または違いますか)?何を求めているかを理解するためだけに。
チャーリーパーカー

いいえ、物理コアという意味ではありません。物理コアは、コアを実装するチップ上のトランジスタのグループです。論理コアは、オペレーティングシステムおよびユーザープログラムにとってコアであると思われるものです。非常に多くの場合、これらは同じです。ただし、インテルのハイパースレッディングテクノロジー(およびその他のテクノロジー)では、各物理コアが2つの論理コアとして表示されます。
Mike DeSimone 2016年

回答:


797

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

sysctl -n hw.ncpu

6
2011年半ばの1.7GHz MacBook Airでは、このコマンドは4と表示します。しかし、実際にはコアが2つしかないのではないかと疑い、system_profiler SPHardwareDataTypeは同意するようです。違いを説明できますか?
ジョシュアフラナガン

13
@JoshuaFlanaganマシンにはいくつの物理コアがあり、どのチップですか?たとえば、2つの物理コアを持つコアi7の場合、チップはハイパースレッディングをサポートし、アドレス可能な4つのコアがあるかのようにOSに提示されるため、4と表示されます。
jkp

142
本当に気になる場合は、sysctl hw.physicalcpuまたはを試してください。sysctl hw.logicalcpu一般的にはsysctl hw、すべてのオプションを試してください。
可変長コーダー

23
編集者:私がそれを受け入れた後、回答年を変更しないでください。
Mike DeSimone 2014年

2
El Capitanを実行する2015年初頭のMacでは動作しません。「エラー:「hw.ncpu」は不明なキーです」と表示されます。/etc/sysctl.confにもcpu関連のエントリはありません。Frozen Flameの答えはうまくいきました。
TheGT

130

さらに簡単:

sysctl -n hw.ncpu

2
これによって報告される数は、実際には、プロセッサがハイパースレッディングをサポートしているコアの数の2倍です。
ミケアゾ2014

3
これにより4が得られますが、system_profiler SPHardwareDataType信じられるものを使用すると、 `モデル識別子:MacBookPro9,2プロセッサー名:Intel Core i5プロセッサー速度:2.5 GHzプロセッサー数:1コアの総数:2`
Ciasto piekarz

31

これはクロスプラットフォームである必要があります。少なくともLinuxとMac OS Xでは。

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

少し遅いが動作します。


18

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.

マイクは、編集のおかげで、oldplenが入出力パラメーターであることを理解していませんでした。
alfwatt、2015年

14

system_profiler SPHardwareDataType 1つのプロセッサと4つのコアがあることを示しています。

[~] system_profiler SPHardwareDataType
Hardware:

    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%近くを占めていることがわかります(top)。

PID   COMMAND      %CPU  
4306  top          5.6   
4304  java         745.7 
4296  locationd    0.0  

3
ハイパースレッディングが機能していることがわかります。これにより、各コアで2つの実行スレッドを処理できます(pthreadなどのOSスレッドと同じである必要はありません)。その結果、MacOSは各物理コアを2つの論理コアとして扱います。
Mike DeSimone 2013年

こんにちは@MikeDeSimoneは、CentOSの場合にハイパースレッディングが機能しているかどうかを確認する方法を教えていただけますか?
Ciasto piekarz 14年


@CiastopiekarzハイパースレッディングはOSが行うものではなく、CPUアーキテクチャ(Intel)の機能であると私はかなり確信しています。全体のポイントは、OSに何もしなくても物理cpu:sx 2論理コアがあると思わせることですそれらにアクセスするための特別な。したがって、CPUがIntel(すべてのMacにIntelが付属している)の場合、はい、ハイパースレッディングがあります。ただし、PCでCentOSを実行している場合は、AMDプロセッサを使用している可能性があります。それらにはハイパースレッディングはありませんが、通常は同じ(またはより安い)価格で2倍の数のコアが付属しているため、実用的な違いがあるかどうかはわかりません。
Erk

@Erk OSは違いを認識しています。実際、OSはCPUとコアの違い、および物理上で実行されている複数のスレッドを認識しています。 sysctl hw.physicalcpu使用可能な物理CPUコアの数、使用可能なsysctl hw.logicalcpu論理CPUの数が表示されます。Windows / OSX / LinuxのようなOSは、(それがどのタイプであるかに関係なく)複数のCPUを持っているように見えるようにするすべての作業を行います。LinuxのようなOSでは、使用できるCPU、コア、スレッドを構成できます。
Rahly

10
$ system_profiler | grep 'Total Number Of Cores'

2
より高速:$ system_profiler SPHardwareDataType | grep「コアの総数」
ケント

6
タイピング時間を含めると遅くなります
ハイパフォーマンスマーク

2
これはbashスクリプトにあります。タイピングの時間は関係ありません。
Mike DeSimone、

3
Appleが出力のフォーマットを変更したように見えます。大文字に注意してください:以前は「コアの総数」でしたが、現在は「コアの総数」です...それか、または以前に間違って入力しただけです...申し訳ありません!
2013

3
使用できますgrep -i
Skylar Saveland 2013年

8

使用 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コアとして扱うことはそれほど悪くありません。


1
論理コアの数と同じ数のプロセスを生成すること(お気づきのように、ハイパースレッディングの場合は物理コアの数の2倍)は、私にとって非常にうまく機能しました。
Mike DeSimone

7

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

system_profiler SPHardwareDataType

目標は、で生成するプロセスの数を決定するmakeことでした。そのため、jkpの答え(論理コアの数)が最もよく適合します。
Mike DeSimone、2011年

3

次のコマンドは、CPUに関するすべての情報を提供します

$ sysctl -a | sort | grep cpu

いいですが、尋ねられたものではありません。
Mike DeSimone 2017

1

明確化

この質問が尋ねられたとき、OPは実際のコア数ではなくLOGICALコアの数を望んでいるとは言いませんでした。そのため、この答えは、実際の物理コアの実際の数ではなく、論理的に(駄洒落ではありません)答えを返します。OSがハイパースレッディングブードゥーを通じて仮想化しようとする数。

ヨセミテの欠陥を処理するための更新

OS X Yosemiteの奇妙なバグ(そして、おそらく新しいバージョン(El Capitanなど))のため、小さな変更を加えました。(STDERRを無視するだけでも、古いバージョンは完全に機能しました。これは、すべての変更が行うことです。)


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

  1. 間違った情報を与える
  2. コマンド実装のエラーのため、情報を提供しません
  3. ゆっくりと信じられないほど走る(の大半服用分を完了まで)、または
  4. データが多すぎるため、インタラクティブな使用には役立つかもしれませんが、プログラムでデータを使用する場合(たとえば、bundle install --jobs 3数値の代わりに数値を31 にしたい場合などのコマンドへの入力として)は役に立たないあなたが持っているコアの数、または少なくともコアの数以下)

コアの数だけを確実に、正確に、適度に迅速に、そして回答の周りに余分な情報や余分な文字さえなくして取得する方法は、次のとおりです。

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

3
sysctl -n hw.ncpuはMac Proで走っただけで、そのような問題はありませんでした。
Mike DeSimone 2014年

私は明らかにすべてのタイプのMacでテストしたわけではありませんが、時々正確であると信じています。しかし、sysctl私のマシンでは正確な結果が得られず、他の人も同じことを報告しています。それがためにに頼っていたことができない場合は、常に正確な結果が得られ、それは信頼性の高い正確な考えることはできません。
iconoclast 2014年

またsysctl、user1706991が行ったように、表示されるエラーのある動作と、それが表示されるプラットフォームについて説明することもできます。
Mike DeSimone、2014年

他の人はこれがハイパースレッディングによるものであることを示唆しているため、sysctlで表示される数は、実際にはそれほど多くはありませんが、システムがシミュレーションしようとしているコアの数です。正確な数値が必要な場合は、私の方法を使用してください。コンピューターが持っているふりをしているコアの数を知りたい場合は、sysctlを使用してください。
iconoclast 2014年

@iconoclastをテストすると、「コアの総数」がローカライズされていることがわかりました。OS Xが英語以外に設定されている場合、ソリューションは失敗します。最終的に使用されたもの:sysctl -n hw.physicalcpu_max
CO

1

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

私の2008年初頭のMac Proでは、4になります。クアッドコアCPUチップが2つあるため、実際のコア数は8です。
Mike DeSimone、2014

sysctl machdep.cpuは、他のすべての不要な情報を読み取る代わりに機能します。
hsn

1

元の質問では指定されていませんでしたが(コメントでOPの投稿を見たところ、これはオプションではないことがわかりました)、macOSの多くの開発者がHomebrewパッケージマネージャーをインストールしています。

この質問に出くわす将来の開発者にとって、インストールされているHomebrewの前提(または要件)が存在する限り(たとえば、会社のエンジニアリング組織に)、パッケージにnproc含まれている一般的なGNUバイナリの1つですcoreutils

brew install coreutils

2回ではなく1回(Linux + macOSの場合)を記述したいスクリプトがある場合、またはvs ifを呼び出すかどうかを知るためにOSを検出する必要があるブロックを回避する場合は、これより良いオプションになる可能性があります。nprocsysctl -n hw.logicalcpu


0

上記の2つの良い返信に対するコメント:

1)jkpによる承認済みの返信(およびコメント)について:hw.logicalcpu(https://ghc.haskell.org/trac/ghc/ticket/8594に代わり、hw.ncpuは明らかに非推奨になっています

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

これはよりポータブルな方法で行うことができます:

$ nproc --all
32

macOSおよびLinuxと互換性があります。


2
nprocmacOS Mojaveでは利用できないようです。
Mike DeSimone

教えてくれてありがとう、マイク。 nproc自作による簡単なインストールです。
ジェイテイラー

私が実行していたシステムはインターネットから切断されていたため、自作は役に立ちません。「カールサイト| sudo bash」を必要とするものは何も使用できません
Mike DeSimone
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.