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
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Bloco (0, 0)<br />
Memória<br />
Compartilhada<br />
Regs Regs<br />
Thread<br />
(0, 0)<br />
Mem<br />
Local<br />
Thread<br />
(1, 0)<br />
Mem<br />
Local<br />
A viagem internacional<br />
A viagem interplanetária<br />
Hospe<strong>de</strong>iro (CPU)<br />
Dispositivo (GPU)<br />
Bloco (0, 1)<br />
Memória<br />
Compartilhada<br />
Regs Regs<br />
Thread<br />
(0, 0)<br />
Mem<br />
Local<br />
Memória Global<br />
DRAM<br />
Thread<br />
(1, 0)<br />
Mem<br />
Local<br />
Figura 1.16. A organização <strong>de</strong> memórias<br />
<strong>de</strong>ntro da GPU.<br />
um barramento PCI (Peripheral Component Interconnect). Esta<br />
tranferência é muito lenta, com<strong>para</strong>da com o tempo <strong>de</strong> acesso<br />
<strong>de</strong> dados <strong>de</strong>ntro do micro-chip CUDA.<br />
A transferência <strong>de</strong> dados entre CPU e GPU é ilustrada pelo<br />
programa na figura 1.17. As funções cudaMalloc, cudaFree<br />
e cudaMemcpy são parte da biblioteca <strong>de</strong> <strong>de</strong>senvolvimento CUDA.<br />
A primeira função reserva uma área na memória da GPU, ao<br />
passo que a segunda função libera esta área <strong>para</strong> outros usos.<br />
Finalmente, cudaMemcpy copia dados da CPU <strong>para</strong> a GPU, ou<br />
vice-versa, <strong>de</strong>pen<strong>de</strong>ndo <strong>de</strong> seu último argumento.<br />
20