こちらから - インタフェース
こちらから - インタフェース
こちらから - インタフェース
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
GPG-8826 Help for Linux<br />
5.3 SIMD 拡 張 命 令 を 利 用 したデータ 転 送<br />
【 概 要 】<br />
SIMD 拡 張 命 令 に 対 応 した CPU を 使 用 される 場 合 、 長 データの 一 括 転 送 に 対 応 した 拡 張 命 令 を 使<br />
用 することでデータ 転 送 を 高 速 に 行 うことができる 場 合 があります。※<br />
【 使 用 例 】<br />
// movdqu を 使 用 した 128bit(16byte) 単 位 のメモリコピー(32bit)<br />
void memcpy_dqu(void *dst, void *src, size_t size)<br />
{<br />
asm (<br />
"movdqu_cpy: "<br />
" movdqu (%%esi), %%xmm0; " // src から xmm レジスタへの 転 送 (128bit)<br />
" lea 16(%%esi), %%esi; "<br />
" movdqu %%xmm0, (%%edi); " // xmm レジスタ から dst への 転 送 (128bit)<br />
" lea 16(%%edi), %%edi; "<br />
" sub $16, %%eax; "<br />
" cmp $16, %%eax; "<br />
" jge movdqu_cpy; "<br />
}<br />
" emms "<br />
:: "a" (size), "S" (src), "D" (dst)<br />
);<br />
【 内 容 】<br />
上 記 の 使 用 例 は SSE2 以 降 で 対 応 した movdqu 命 令 を 使 用 して、128bit(16byte) 単 位 でのデー<br />
タ 転 送 を 行 う 例 となります。<br />
(movdqu 命 令 はアライメントが 揃 っていなくても 使 用 できますが、アライメントを 揃 えたアド<br />
レスで 使 用 する 方 がより 高 速 に 動 作 します。)<br />
Virtual ウィンドウ/Link ウィンドウに 対 してデータ 転 送 を 行 う 際 に、movdqu 命 令 等 の 長 デー<br />
タの 一 括 転 送 に 対 応 した 拡 張 命 令 を 使 用 すると、バースト 転 送 が 発 生 しやくなる 場 合 がありま<br />
す。※<br />
【 注 意 事 項 】<br />
※ご 使 用 される CPU・ディストリビューション 等 によっては 効 果 が 出 ない 場 合 もあります。<br />
※64bit 環 境 で 実 行 する 場 合 は、 使 用 するレジスタを 64bit 用 のものに 変 更 してください。<br />
eax → rax<br />
esi → rsi<br />
edi → rdi<br />
© 2012, 2013 Interface Corporation. All rights reserved.<br />
47