
ハイパースレッディングのおかげで、私のCPUはコアごとに2つの論理プロセッサを持っています。ハイパースレッディングの前提を正しく理解していれば、各コアが2つの別々のスレッドを同時に実行するために別々のキャッシュと命令ポインタを持つことができるようになりますが、ない1つのコアで2つのスレッドを同時に実行できます。つまり、基本的にはスレッドスワップのオーバーヘッドを軽減するだけであり、コア数よりも多くのスレッドを実行することで発生するパフォーマンスへの悪影響を軽減します。しかし、それでもいくつかの諸経費がかかる、そしていくつかのたとえば、物理コアが 8 個しかないシステムで 16 個のスレッドを実行すると、パフォーマンスに悪影響が生じます。
私のシステムで実行されているソフトウェアは、8 つの物理コアでハイパースレッディングを行っているため、CPU コアが 16 個あると認識しているようです。特定のビルド システムなど、並列処理を最大化するために、デフォルトで使用可能なすべてのコアを使用するソフトウェアもあります。私が考えているソフトウェアでは、引数を使用してスレッド数を指定できることはわかっています。8 スレッドを超えてもパフォーマンスにメリットはないと考えるのは正しいでしょうか。8 スレッドを超えると、実際にパフォーマンスが低下すると考えるのは正しいでしょうか。したがって、プログラムに 8 スレッド以上を使用しないように指示する必要がありますか。
答え1
場合によります。
一般的に、CPU スレッドごとに 1 つのソフトウェア スレッドを実行すると、最高のパフォーマンスが得られます。CPU コアごとに 1 つのソフトウェア スレッドを実行する場合と比べて、速度が 10% 向上することがよく確認されています。つまり、1 つのソフトウェア スレッドを 100% で実行する代わりに、2 つのソフトウェア スレッドをそれぞれ 55% で実行します。
しかし、私はより良いパフォーマンスを走っているのも見てきました少ない複数のコアが同じキャッシュを共有する場合、CPU コアよりも多くのプロセスが実行されます。ただし、これは非常にまれです。
通常は 16 個の CPU スレッドをすべて使用する必要がありますが、システム上で確実に知る唯一の方法は測定することです。