2016-09-27 12 views
0

SSE命令/組み込み関数、たとえば256ビットレジスタを使用する場合、次の32バイトチャンクでプリフェッチ命令を使用するか、またはいくつかの他の技術によって?ロードされるデータが既にメモリ内に正しく整列されていると仮定します。SSE 4メモリロードの最適化

+2

x86はすでにこれを実行することができます。(論理メモリ内の)完全に順序付けられたアイテムの特定のセットをフェッチしている場合、このデータはおそらく 'mov 'の前にL2キャッシュ上にあります。 –

+0

"あなたのタイトルでは「for」という言葉を省略していますか?あなたは、SSE4の[MOVNTDQA](http://www.felixcloutier.com/x86/MOVNTDQA.html)ロード命令、またはSSE4と特に関係することについては言及していないようです。 (256bベクトルはAVX機能です)。 –

+0

私は、特定の命令セットを必要とすることの商業的影響を議論しているので、私はやや曖昧でした。だから、私の質問は、幅広いレジスタを使ってメモリのレイテンシを減らすための一般的なガイドラインを尋ねる行に沿っていました。私はもっ​​とはっきりしていたはずです。 – lhs

答えて

0

x86 CPUのパフォーマンスの詳細については、タグwikiを参照してください。ハードウェアプリフェッチャは、シーケンシャルアクセスのパターンにロックするのには優れているので、通常はソフトウェアプリフェッチ命令は必要ありません。

通常、ワイドベクタロードを実行すると、整数レジスタを別々のものにアンパックする必要はありません。いったんキャッシュラインに触れたら、そこからの負荷はより安く、L1キャッシュからレジスタへのスループットは通常問題ではありません。 ALU命令を使用して256bの負荷を別々の32または64bの整数に展開すると、命令が増え、ALUスループットのボトルネックになる可能性が高くなります。