Técnicas de Otimização de Código para Placas de ... - UFMG
Técnicas de Otimização de Código para Placas de ... - UFMG
Técnicas de Otimização de Código para Placas de ... - UFMG
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
i<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<br />
treadIdx.x<br />
Figura 1.14. Espaço <strong>de</strong> iterações <strong>para</strong> o programa<br />
da figura 1.13.<br />
semântica bastante peculiar quando analisados sob a lupa <strong>de</strong><br />
máquinas SIMD: quando um processador não possui trabalho<br />
útil <strong>para</strong> realizar, então ele “dorme", até que as threads possam<br />
ser novamente postas em sincronia.<br />
O Assembly <strong>de</strong> CUDA. Um programa escrito em uma linguagem<br />
<strong>de</strong> alto nível normalmente é traduzido <strong>para</strong> código binário<br />
a fim <strong>de</strong> ser executado. Em CUDA isto não é diferente. Existem<br />
compiladores que traduzem CUDA <strong>para</strong> instruções Direct3D, por<br />
exemplo. Neste material nós utilizaremos uma linguagem assembly<br />
conhecida por PTX, do inglês Parallel Thread Execution.<br />
O programa PTX que correspon<strong>de</strong> ao nosso primeiro kernel,<br />
visto na figura 1.4, é dado na figura 1.15. PTX, sendo uma<br />
linguagem assembly, manipula tipos <strong>de</strong> dados muito simples,<br />
como inteiros <strong>de</strong> 8, 16, 32 e 64 bits e números <strong>de</strong> ponto flutuante<br />
<strong>de</strong> 16, 32 e 64 bits. PTX <strong>de</strong>screve um típico código <strong>de</strong> três<br />
en<strong>de</strong>reços, contendo instruções aritméticas (add, sub, mul,<br />
etc), lógicas (eq, leq, etc), <strong>de</strong> fluxo <strong>de</strong> controle (bra, ret,<br />
call, etc) e <strong>de</strong> transmissão <strong>de</strong> dados (load, store). PTX<br />
também contém muitas instruções <strong>para</strong> calcular funções transcen<strong>de</strong>ntais<br />
como senos e cossenos. Além <strong>de</strong>stas instruções,<br />
também presentes em linguagens assembly mais tradicionais,<br />
16<br />
j