2011-07-13 42 views
22

私はインテルのデータシートを探しています:インテル®64およびIA-32アーキテクチャーを ソフトウェア・デベロッパーズ・マニュアルと私は違いを見つけることができませんMOVDQAとMOVAPS x86命令の違いは?

  • MOVDQA:移動同盟ダブルクォドワード
  • MOVAPS:移動整列パック単精度

インテルのデータシートには、両方の指示があります:

この命令は、128ビット メモリ位置からXMMレジスタをロードする 128ビットのメモリ・ロケーションにXMMレジスタの内容を保存するために、又は二XMMレジスタの間でデータを移動させるために使用することができます。

唯一の違いは、次のとおり

は、またはアラインされていないメモリ位置からダブルクワッドワードを移動 MOVDQU命令を使用します。

MOVUPS命令を使用し、 アラインされていないメモリ位置へ又はからパックド単精度浮動小数点値を移動します。

しかし私は2つの異なる命令の理由を見つけることができませんか?

だから誰でもその違いを説明できますか?

+0

MOVAPDも同じです。 – Calmarius

答えて

38

機能上、同じです。

(ただしすべてではない)マイクロアーキテクチャでは、「ドメインクロスペナルティ」のためにタイミングの差があります。このため、整数SSE命令でデータを使用する場合はmovdqa、浮動小数点命令で使用する場合はmovapsを使用する必要があります。このテーマの詳細については、インテル®最適化マニュアルまたはAgner Fogの優れたマイクロアーキテクチャガイドを参照してください。これらの遅延は、ロードまたはストアではなくレジスタレジスタの移動に関連することが最も多いことに注意してください。

+1

特定のマニュアルエントリにリンクできますか? SSEのレジスタには型(命令でコード化されている)が関連付けられていないため、これを信じるのは苦労しています。そのため、異なる浮動小数点と整数のパスがあるとは思いません。しかしながら、それらは異なるオペコードを有し、異なる命令セットに導入される。 MOVAPSはSSE1であり、MOVDQAはSSE2である。どちらも、同じレイテンシとスループットを持っています。http://www.intel.com/Assets/PDF/manual/248966.pdf –

+2

あなたの答えは私よりも正しいです。私はそれを削除した。 –

+16

@ジャスパービッカー:あなたは好きなだけ信じることはできませんが、それでもなお正しいです。ドメインとそれらの間のバイパス遅延の一般的な説明については、「インテル®最適化マニュアル」(2.2.3ではNehalemマイクロアーキテクチャーのドメインについて説明しています)を参照してください。具体的な危険の具体例については、Agner Fogの優れたリファレンスhttp://www.agner.org/optimize/microarchitecture.pdfの86ページと87ページを参照してください。 –

関連する問題