Intel Architecture プログラミング 新しいページはコチラ
提供: yonewiki
(→プログラムの例) |
(→プログラムの例) |
||
44行: | 44行: | ||
11行目からmovdqaが使われています。第一オペランドのxmm0レジスタに第二オペランドのint配列srcからまとめて格納転送されます。後ろのオペランドから、前のオペランドにデータが転送されている感じです。C++言語側で確保した配列との連携をする場合この操作で、間違いが起こらないようにするには配列が連続していることが重要になりますので、__declspec(align(16))という宣言をしました。16としたところには2の階乗になっていれば、その分だけ連続して配置するように働きます。 | 11行目からmovdqaが使われています。第一オペランドのxmm0レジスタに第二オペランドのint配列srcからまとめて格納転送されます。後ろのオペランドから、前のオペランドにデータが転送されている感じです。C++言語側で確保した配列との連携をする場合この操作で、間違いが起こらないようにするには配列が連続していることが重要になりますので、__declspec(align(16))という宣言をしました。16としたところには2の階乗になっていれば、その分だけ連続して配置するように働きます。 | ||
− | + | ||
12行目ではxmm0レジスタから配列へデータが転送されて、srcの内容がdstにコピーされるという動きになっています。 | 12行目ではxmm0レジスタから配列へデータが転送されて、srcの内容がdstにコピーされるという動きになっています。 | ||
− | + | ||
このように、C++言語での操作の中に制限付きの配列変数を使ったり、Intel Architectureの低レベル命令を駆使することで、ものすごく特殊なデータの転送処理が一括で処理することができます。通常のプログラミングだけではなし得ない、高速な手法です。 | このように、C++言語での操作の中に制限付きの配列変数を使ったり、Intel Architectureの低レベル命令を駆使することで、ものすごく特殊なデータの転送処理が一括で処理することができます。通常のプログラミングだけではなし得ない、高速な手法です。 | ||