世界初! LDDQU性能をダイレクトに測定!!
では、実際にLDDQU命令はMOVDQU命令よりどれくらい高速なのだろうか。また、最も高速とされるMOVDQA命令はどれほどの性能を持っているのだろうか。今回はProfessionalhearts製特製メモリ性能テストにより、具体的な性能の比較を行なうことができた。結果がグラフである。なお、ここで表示しているのは1次データキャッシュからXMMレジスタへのデータ転送の速度であり、使用したCPUはPrescott 3.2GHzである。
まず、参考までに高速なMOVDQAの結果だが、45GB/秒という非常に高い性能を示した。1クロックにつき128ビットの転送を行なっている場合、3.2GHz動作では理論上51.2GB/秒の能力を持つはずだが、ほぼそれに迫る値を示した。1クロックで128ビットの転送が行なえていることがわかる。
ただ、この命令は16バイト境界でしか使えないことは説明したとおり。従来のMOVDQU命令は、調べたところ、メモリアドレス末尾が0または8のときに限り19.7GB/秒、それ以外では7.5GB/秒にまで落ちてしまうことがわかった。現実には末尾が0のときにはMOVDQAを使うので、MOVDQUの使われる局面での平均速度は8.3GB/秒。MOVDQA利用時の6分の1ほどに落ちてしまう。3回に分けて読み出し、合成することのオーバーヘッドはこれほどまでに大きいのだ。
Prescott 3.2GHzにおける、命令別メモリからXMMレジスタへのデータ転送能力 |
一方、期待の新人LDDQUは、末尾アドレスにかかわらず19.7GB/秒をキープした。内部動作的に2回のMOVDQAを行なっているから、MOVDQAの半分、22GB/秒が予想される速度だが、ほぼそれに近い値になっている。平均速度で言えば、MOVDQUの3倍近い値だ。メモリアクセス速度がこれほど違えば、動き検出の速度に相当なインパクトを与えるであろうことは想像に難くない。TMPGEnc 3で13%といった速度向上が行なわれているのもこの結果から十分納得できる。
CPUでは、たった一つの命令追加でも、局面によって大きく性能アップが図られることがよくわかる。MONITOR/MWAITや水平加算といったあたりも、対応アプリにおいては測定可能な差が出ることが期待できる。SSE3の効果にはしばらく目が離せない。
なお、PrescottではSSE3以外にも、「かけ算の高速化」「分岐予測の高精度化」も行なわれているという。これについては本日発売のアスキープラスVol.14「マニア新聞」に記事を掲載している。