
lscpu
そこでターミナルに入力すると、次のようになりました:
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
ここで CPU の数は、次の式により 4 になります。
No. of CPUs = Sockets X Cores per socket X Threads per Core
しかし、CPU とは一体何なのか、という疑問が生じます。なぜ上記の式にスレッドが含まれているのでしょうか?
答え1
それはあなたが何を探しているかによります。
プロセッサを購入すると、ハイパースレッドとコアの数、およびマルチプロセッサ方式 (複数のソケット) で使用できるかどうかが明確に記載されます。
複数の物理 CPU がある場合については忘れましょう。
1 つのチップに複数のコアがあります。これらのコアはキャッシュを共有する場合もありますが、それ以外はほぼ独立しています。ただし、一部のタスクは調整する必要があるため、4 つのコアでは (通常) 1 つのコアの 4 倍の「パワー」が得られるわけではありません。
ハイパースレッド: これはよりトリッキーです。これは Intel のトリックで (マルチコア以前も)、複数の CPU をシミュレートできます。実際には一度に 1 つのスレッドしか実行できませんが、CPU は一時停止する必要があります (メモリ アクセスや書き込みの待機など)。ハイパースレッドを使用すると、CPU は 2 番目の仮想 CPU にすばやく切り替えることができます。
したがって、ハイパースレッディングを使用すると、コストはほとんどかからず (ロジック、キャッシュ、レジスタは多少増えますが、トランジスタは重複しません)、通常の CPU 1 個だけの場合と比べてパフォーマンスが向上することがよくありますが、それでも 2 つのコアの方が優れています (それでも 2 つの CPU と同等ではありませんが、数値計算では 2 つのタスクが完全に独立しており、カーネルがタスクを妨げません)。
並列プロセスがある場合、私はコア数で乗算したスレッドを使用することが多いです (また、IO の数がばらばらである場合は、スレッド数または最終結果に 1 を追加することがよくあります)。この場合、パフォーマンスが向上します (CPU を集中的に使用する他のタスクがないと仮定)。単一のコアがメモリ データを待機しているときも、最大限の電力を使用します。
しかし、スピードアップを図るには、コアの数を使用するだけです (より良いデータになることを覚えておいてください)。
つまり、何を探しているかによって異なります。また、複雑なタスクを実行している場合は、おそらくプロセスをより多く測定し、それらを最適化しているでしょう (キャッシュ、メモリ、スレッド、コア、CPU、MPI など)。プログラムごとにリソースが異なります。