Intel Architecture プログラミング 新しいページはコチラ
提供: yonewiki
(→プログラムの例) |
(→プログラムの例) |
||
41行: | 41行: | ||
result: 1, 256, 1024, 65536 | result: 1, 256, 1024, 65536 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | 11行目からmovdqaが使われています。第一オペランドのxmm0レジスタに第二オペランドのint配列srcからまとめて格納転送されます。後ろのオペランドから、前のオペランドにデータが転送されている感じです。C++言語側で確保した配列との連携をする場合この操作で、間違いが起こらないようにするには配列が連続していることが重要になりますので、__declspec(align(16))という宣言をしました。16としたところには2の階乗になっていれば、その分だけ連続して配置するように働きます。 | ||
+ | |||
+ | |||
+ | 12行目ではxmm0レジスタから配列へデータが転送されて、srcの内容がdstにコピーされるという動きになっています。 | ||
+ | |||
+ | |||
+ | このように、C++言語での操作の中に制限付きの配列変数を使ったり、Intel Architectureの低レベル命令を駆使することで、ものすごく特殊なデータの転送処理が一括で処理することができます。通常のプログラミングだけではなし得ない、高速な手法です。 | ||
+ | |||
+ | |||
+ | ちなみにmovdqdという命令を使うにはIntel Pentium4プロセッサから導入されたIntel SSE2テクノロジという命令セットがCPUに搭載されていなければ、このプログラムをコンパイルすることも、実行することもできません。ほとんどの後継のプロッセッサにはこれらの各種テクノロジは互換性をもって搭載されていますので、それらのプロセッサでも動作します。管理人のCore i7やAtomプロセッサでも動作しました。 | ||
+ | |||
+ | |||
+ | こういった命令セットを説明していくと広辞苑くらいの情報量が必要になってきます。現にIntelのアーキテクチャー説明資料もPDFで何全ページというボリュームになっています。よく使いそうなものを、ここでは紹介していくかもしれません。それでも、きっと書き終わったころには定年を向かていることでしょう。 |