SSE レジスターは論理プロセッサー間で共有または複製されていますか (ハイパースレッディング)? 通常のプログラムと同じように、SSE を多用するプログラムの並列化によって、同じような高速化を期待できますか (Intel は、ハイパー スレッディングを備えたプロセッサで 30% を主張しています)。
2 に答える
ハイパースレッディングプロセッサがスレッド間でレジスタファイルを共有するのか、2つの異なるものがあるのかは、Intelのドキュメントからはわかりません(そうでない場合、HTスレッド間のコンテキスト切り替え時間が非常に長くなるため、実際には異なると思いますが、これは純粋に推測)。
スピードアップに関しては、それはあなたの命令の組み合わせとスケジュールに依存するでしょう。HT CPUには追加の実行リソース(ALU、ロード/ストアユニットなど)がないことを忘れないでください。パフォーマンスの向上は、特に最新のプロセッサでの一般的なコードが妥当な量を費やすため、これらのリソースの利用率が向上するためです。実行を続行する前に、メモリのロードとストアが完了するのを待ってブロックされた時間。HTを使用すると、これらのロードとストアをインターリーブして、一方のスレッドが読み取りで停止し、もう一方のスレッドを切り替えて、以前はアイドル状態であった実行リソースの使用を開始できます。
SSEプログラムのマルチスレッド化でどのようなパフォーマンスの向上が見られるかは、メモリ操作と算術操作の比率に依存すると思います。たとえば、SSEプログラムがメモリから4つのSSEレジスタをロードし、それらに対して10,000のSSE操作を実行してから、4つのレジスタを書き戻す場合、HTがメモリアクセスをオーバーラップできることによる利点はあまり見られません。プログラムの実行時間の99%は、メモリアクセスではなく、SIMDALUに費やされます。
一方、プログラムが非常に計算量が多い場合、プログラムをマルチスレッド化すると、マルチコアプロセッサのパフォーマンスが大幅に向上し、30%の向上よりもはるかに優れている可能性があります。その場合、コードは一度に複数のコア。
それらは論理的に複製されます - 各スレッドは独自の状態を取得します。物理的に、それらは共有される可能性があります - ハイパースレッディングの実装に依存します。