コマンドラインのプロセッサー/コアの数


回答:


138

nproc あなたが探しているものです。

詳細:http : //www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/


11
いいですが、/ proc / cpuinfoほどユビキタスではありません。 nprocubuntu VMにはありますが、RedHat 5.5ベースのマシンにはありません。
Digital Trauma 2013年

8
nproc --allインストールされているすべてのプロセッシングユニットを確認してください。なし--allnprocは、現在のプロセスで使用可能な処理装置のみが表示されます。詳細については、manページをお読みください。MMV。
JamesThomasMoon1979 '12

96

最も単純なツールはglibcに付属していて、次のように呼ばれgetconfます。

$ getconf _NPROCESSORS_ONLN
4

8
さらに良いのは、POSIXユーティリティ:pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.htmlです。
BCran 2014年

2
とは異なりnproc、これはMac OS Xで(デフォルトで)機能します。
アレックジェイコブソン

残念ながら、このユーティリティはSolarisで使用できますが、_NPROCESSORS_ONLN(またはcpu、procなどのすべての)出力にリストされます。Linux / Solarisで動作するposixツールであることを期待していたので、ブランチを使用する必要はありませんでした。
Brian Vandenberg

39

Linuxで最も移植性の高い方法だと思います。不要なcatand wcプロセスを生成する代わりに、少し短くすることができます。

$ grep --count ^processor /proc/cpuinfo
2

25

LinuxとOS Xで機能するようにこれを行う場合は、次のようにできます。

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

すてきな移植可能なスクリプト:)
mircealungu

2
Solaris psrinfo -pでは代わりに使用する必要があります
mems

14

新しいカーネルでは、/sys/devices/system/cpu/インターフェイスを使用してもう少し情報を取得することもできます。

$ ls /sys/devices/system/cpu/
cpu0  cpufreq  kernel_max  offline  possible  present  release
cpu1  cpuidle  modalias    online   power     probe    uevent
$ cat /sys/devices/system/cpu/kernel_max 
255
$ cat /sys/devices/system/cpu/offline 
2-63
$ cat /sys/devices/system/cpu/possible 
0-63
$ cat /sys/devices/system/cpu/present 
0-1
$ cat /sys/devices/system/cpu/online 
0-1

これらの意味の詳細については、公式ドキュメントを参照してください。


2
nprocはこれを主に使用します($ OMP_NUM_THREADS、次にreaddir sysfs)。これが良いインターフェースだと思います。
東武

2
また、getconfはこのインターフェース(onlinenprocが行うよりも単純なファイル)にも依存しています
東武

6

誰かが「プロセッサ/コアの数」を尋ねると、2つの回答が要求されます。「プロセッサ」の数は、マシンのソケットにインストールされている物理的な数になります。

「コア」の数は物理コアになります。ハイパースレッド(仮想)コアは含まれません(少なくとも私の考えでは)。スレッドプールを使用して多くのプログラムを作成する人は、物理コアとコア/ハイパースレッドの数を知る必要があります。つまり、次のスクリプトを変更して、必要な答えを得ることができます。

#!/bin/bash

MODEL=`cat /cpu/procinfo | grep "model name" | sort | uniq`
ALL=`cat /proc/cpuinfo | grep "bogo" | wc -l`
PHYSICAL=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
CORES=`cat /proc/cpuinfo | grep "cpu cores" | sort | uniq | cut -d':' -f2`
PHY_CORES=$(($PHYSICAL * $CORES))
echo "Type $MODEL"
echo "Processors $PHYSICAL"
echo "Physical cores $PHY_CORES"
echo "Including hyperthreading cores $ALL"

ハイパースレッディングもサポートする2つのモデルXeon X5650物理プロセッサーを搭載し、それぞれに6つの物理コアを搭載したマシンでの結果:

Type model name : Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz
Processors 2
Physical cores 12
Including hyperthreading cores 24

ハイパースレッディングをサポートしない4つの物理コアをそれぞれ搭載した2つのmdeol Xeon E5472プロセッサーを搭載したマシン

Type model name : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8

これは私が探していた情報を私に与えた最も完全な答えです。
woodenToaster

4

lscpu(1)が提供するコマンドのutil-Linuxのプロジェクトも有用かもしれません。

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
Stepping:              9
CPU MHz:               3406.253
CPU max MHz:           3600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5787.10
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3

1

これは、* bsd、* nix、またはsolaris(aixおよびhp-uxでテストされていませんが、動作するはずです)のCPUコアを数えるポータブルな方法を希望する人向けです。それはいつも私のために働いてきました。

dmesg | \
egrep 'cpu[. ]?[0-9]+' | \
sed 's/^.*\(cpu[. ]*[0-9]*\).*$/\1/g' | \
sort -u | \
wc -l | \
tr -d ' '

solaris grep&オプションegrepがない-oため、sed代わりに使用されます。


1

ハイパースレッドコア数えない別のワンライナー:

lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }' 

0

OSに依存しない方法が必要な場合は、WindowsとLinuxで動作します。Pythonを使用する

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.