22.01.2015 Views

こちらから - インタフェース

こちらから - インタフェース

こちらから - インタフェース

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!