6

私はHyperThreaded CPU上でOpenMPコードを使用しています。ハイパースレッディングはどのように並列化に影響しますか?

他のすべてが等しい場合、ハイパースレッド化されていないCPUでパフォーマンスがどのように変更されるのですか。

実行するスレッドの数に関係なく、100%のプロセッサ使用率に気付きましたが、スレッド数を変更するとパフォーマンスが向上します。どうすればいいの?

非INTELマルチスレッドCPUの話は同じですか?

答えて

3

ハイパースレッディングによるパフォーマンスの向上(ある場合)を予測することは困難です。

ハイパースレッディングとは、1つのスレッドが何らかの理由でストールした場合、CPUは別のスレッドから(実行しようとする)命令プールを持つことを意味します。例えば、コードがメインメモリ待ち時間(例えば、プリフェッチなしの予測不可能な読み出しパターン)に大きく依存する場合、ハイパースレッディングは性能を大幅に向上させる可能性がある。

逆方向では、注意深くキャッシュを使用してレイテンシをカバーするように注意深く記述されている場合、プリフェッチなどはハイパースレッディングからほとんどまたは全く得られません。特に、スレッドスケジューリングでハイパースレッディングを考慮しない古いOSでは、余分なスレッドが実際に余分なコンテキスト切り替えを引き起こし、全体の実行が遅くなる可能性があります。

完全にシングルスレッドのコードから始まり、OpenMPディレクティブを追加すると仮定すると、Hyperthreadingは通常、何かオーダーや10%でパフォーマンスを向上させるのに適しています。コードがprefecthingやそれに類するものをほとんど試みていない場合、その利点のほとんど(すべてではないにしても)のほとんどがすぐに蒸発します。

+0

BIOSでハイパースレッディングを無効にできることがわかりました。あなたは改善をどのように判断していますか? – roro

+0

@roro:私は、BIOSでハイパースレッディングを無効にし、手動でスレッドカウントを使用可能だった物理コアの数に制限し、スレッドの親和性を手動で調整することでテストを行っています。 –

+0

私は、HTの性能向上を予測することは困難であることに同意します。ただし、すべての実行リソースは、ストールするまで使用されません。代わりに、実行リソース(ポート、キャッシュ、...)はハイパースレッド間で共有されます。そのため、HT 1の追加μopはHaswellポート0で実行でき、HT 2のleopは同じクロックサイクルでポート5で実行されます。インテルの言葉を引用すると、「マイクロアーキテクチャの観点から、これは、両方の論理プロセッサからの命令が、共有実行リソース上で持続して同時に実行されることを意味します。 http://www.cs.virginia.edu/~mc2zk/cs451/vol6iss1_art01.pdf – Olsonist