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つのコア1つの「電力」が4倍になりません。
ハイパースレッディング:これはもっと面倒です。複数のCPUをエミュレートできるIntelのトリック(マルチコア以前にも同様)でした。実際には一度に1つのスレッドしか実行できませんが、CPUはしばしば一時停止する必要があります(メモリアクセスや書き込み待ちなど)。ハイパースレッディングを使用すると、CPUを2番目の仮想CPUにすばやく切り替えることができます。
したがって、ハイパースレッディングを使用すると、通常のCPUを使用するよりもコストがかかりますが、通常は優れたパフォーマンスが得られますが(ロジック、キャッシュ、レジスタは多くありますが、冗長トランジスタはありません)、2つのコアがまだ優れています(まだ2つCPUと同じではありませんが、数値的に2つのタスクは完全に独立しており、コアはタスクを妨げません。
並列プロセスがある場合は通常、スレッド x コアを使用します (不連続な IO 量がある場合は通常、スレッドまたは最終結果に 1 つを追加します)。この場合、より良いパフォーマンスが得られます(CPUを多用する他の作業がないと仮定)。シングルコアがメモリデータを待っている場合でも、最大電力を使用します。
しかし、速度を上げるためにコア数だけを使います(より良いデータが得られることに注意してください)。
だからそれはあなたが探しているものに依存します。複雑な作業を行う場合は、より多くのプロセスを測定して最適化できます(キャッシュ、メモリ、スレッド、コア、CPU、MPI...)。各プログラムのリソースは異なります。