スレッドはCPUと見なすことができますか? [コピー]

スレッドはCPUと見なすことができますか? [コピー]

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...)。各プログラムのリソースは異なります。

関連情報