それほど遠くない2000年に、IntelはPentium 4プロセッサ用のNetBurstマイクロアーキテクチャを市場に導入し、2004年にPrescottベースのプロセッサが登場したときに、LDDQUコマンドがSSE3命令セットに実装されました。
ただし、アプリケーションの1つの領域、つまりビデオエンコードを対象としており、詳細な場合:
原則として、ビデオエンコーディングの最大計算量は、現在のフレームのブロックを前のフレームのブロックと比較し、最適な一致を検索する動き推定 (ME)メカニズムに必要です。 多くのメトリックを使用して、最適なものを見つけることができます。 最も一般的なのはL1メトリック-絶対差の合計です。 MEメカニズムは、前のフレームのブロックロードが整列されず、現在のフレームのブロックロードが整列されるように機能します。 調整されていないダウンロードでは、次の2つのタイプの遅延が発生します。
- アライメントされていないデータへのアクセスの処理コスト。
- キャッシュラインの分割によるコスト。
NetBurstマイクロアーキテクチャは、128ビットの非境界整列データをロードするためのマイクロ操作をサポートしていません。 このため、movupsやmovdquなどの128ビットの非整合ダウンロードのコマンドは、2つの64ビットダウンロードを使用してマイクロコードでエミュレートされ、その結果は128ビットの結果に結合されます。 アライメントされていないダウンロードをエミュレートするコストに加えて、アクセスが64バイトの境界を超えた場合、分割キャッシュラインの処理にコストがかかります。
128ビットの不均衡なダウンロードのキャッシュラインを分割する問題を解決するために、lddquコマンドがSSE3命令セットに追加されました。 このコマンドは、16バイト境界に位置合わせされた32バイトブロックをロードし、位置合わせされていないアクセスに対応する16バイトを取得します。 コマンドは要求よりも多くのバイトをロードするため、特定の使用制限が課せられます。 lddquコマンドは、キャッシュされていないメモリ(キャッシュなし-UC)および結合された書き込み(Write-Combining-USWC)があるメモリアドレス空間の領域では使用しないでください。 さらに、lddquコマンドの実装の性質上、読み取り書き込みリダイレクトが予想される状況では使用しないでください。 ロードのみが実行され、UCおよびUSWCメモリアドレス領域が使用されない状況では、lddquコマンドはmovdqu / movups / movupdコマンドを正常に置き換えることができます。
以下のコードは、新しいコマンドの使用例です。 両方のコードシーケンスは似ていますが、古い非整列ロードコマンド(movdqu)が新しいコマンド(lddqu)に置き換えられている点が異なります。 調整されていないダウンロードの25%がキャッシュラインを通過すると仮定すると、新しいコマンドはMEエンジンのパフォーマンスを30%向上させることができます。 MPEG-4エンコーダーは10%以上の加速を実証しています。
SSE3なしのモーション推定器:
movdqa xmm0, < >
movdqu xmm1, < >
psadbw xmm0, xmm1
paddw xmm2, xmm0
SSE3を使用したMotion Estimator:
movdqa xmm0, < >
lddqu xmm1, < >
psadbw xmm0, xmm1
paddw xmm2, xmm0
詳細はこちらからダウンロードできます: download.intel.com/technology/itj/2004/volume08issue01/art01_microarchitecture/vol8iss1_art01.pdf
また、最も興味深い議論:
要約すると、Intel Core 2モデルの外観(これは2006年半ばに登場したCoreマイクロアーキテクチャとMeromプロセッサ以降に適用されます)から始まり、将来のすべてのモデルでは、lddquコマンドはmovdquコマンドと同じアクションを実行します。
つまり、プロセッサがSupplemental Streaming SIMD Extensions 3(SSSE3)命令セットをサポートしている場合、lddquコマンドはmovdquコマンドと同じアクションを実行します。 プロセッサがSSSE3命令セットをサポートしていないが、SSE3をサポートしている場合は、lddquコマンドを使用します(使用するメモリのタイプに関する詳細を忘れないでください)。
最後に、特許に関して:番号6721866の特許の存在に注意してください。これには、実装と使用の詳細も記載されています。
PS:参考のために、すべてのIntelマイクロアーキテクチャに関するデータを収集する有用な記事に注意してください: en.wikipedia.org/wiki/List_of_Intel_CPU_microarchitectures
(他の問題では、いつものように-ウィキペディア)