質問
私は、マルチスレッドの高度並列アプリケーションを書いています。私はすでに書かれたSSE加速スレッドのクラスを持っています。私はMMXを書くとしたら、スレッドクラスを加速し、パフォーマンスが著しく向上するであろうと同じ時間(1つのSSEのスレッドとコアあたり1つのMMXスレッド)の両方を実行しますか?
私は、このセットアップが非表示メモリレイテンシを助けるだろうと思うだろうが、私は、私はそれに時間を注ぐ開始する前に必ずしたいと思います。
解決
はSSE及びMMX命令セットは、CPUのベクトル処理実行ユニットの同じセットを共有します。したがって、SSEスレッドとMMXスレッドを実行すると、2つのSSEスレッド(または2つのMMXスレッド)を実行しているかのように、各スレッド同じリソースが使用可能になります。唯一の違いは、(SSEはMMXの拡張であるため)SSEなくMMXに存在する命令です。しかし、その場合にはMMXは、おそらくそれはそれに利用可能なものより高度な命令がないので、遅くなることになるだろう。
答えがあるので、:いいえ、あなたは2つのSSEのスレッドを実行していると比較して、パフォーマンスの向上は表示されません。
。他のヒント
SSEやMMXは、同じレジスタを使用します
より良い質問は、SSEは、ターゲットCPUに実装されている方法です。それは、コアあたりのSSEユニットを持っていますか? (おそらく)もしそうなら、あなたにも、すべてのスレッドでSSE命令を実行する可能性があります。
がコア間で共有SSEユニットを有している場合、別のスレッドがその上に戦うことができるので、多くの複数のスレッドでSSE命令を実行することによって、そこに得られないであろう。
(任意のCPUが実際にかかわらず、スレッド間のSSEユニットを共有している場合、私はそう仮定のケースとしてこれを取ること、知りません)