PDF(1,9MB) - Está é a máquina do Professor Alfredo Goldman (this ...
PDF(1,9MB) - Está é a máquina do Professor Alfredo Goldman (this ...
PDF(1,9MB) - Está é a máquina do Professor Alfredo Goldman (this ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>é</strong> utilizada para controlar o fluxo de execução <strong>do</strong> programa, enquanto que a<br />
GPU fica responsável pelos inúmeros cálculos sobre os da<strong>do</strong>s.<br />
Um programa CUDA possui o seguinte fluxo básico [40]:<br />
• O host inicializa um vetor com da<strong>do</strong>s;<br />
• O vetor <strong>é</strong> copia<strong>do</strong> da memória <strong>do</strong> host para a memória <strong>do</strong> device;<br />
• O device realiza cálculos sobre o vetor de da<strong>do</strong>s;<br />
• O vetor conten<strong>do</strong> os da<strong>do</strong>s modifica<strong>do</strong>s <strong>é</strong> copia<strong>do</strong> novamente para o<br />
host.<br />
3.4.1 Kernels e hierarquia de threads<br />
O princípio básico da programação em CUDA consiste em definir funções<br />
chamadas de kernels (utilizan<strong>do</strong> uma extensão da linguagem C), que espe-<br />
cifica o código a ser executa<strong>do</strong> N vezes em paralelo por N diferentes threads<br />
na GPU. Estas threads são extremamente leves, resultan<strong>do</strong> em baixo custo<br />
de criação.<br />
Tal modelo estimula a divisão <strong>do</strong>s problemas em <strong>do</strong>is passos:<br />
• primeiro separar em sub-problemas independentes, forman<strong>do</strong> os grids<br />
• depois dividir o grid em blocos independentes de mesmo tamanho (th-<br />
read block), cujas threads podem trabalhar de forma cooperativa e com-<br />
partilham uma memória visível apenas entre elas<br />
Cada thread no bloco possui um identifica<strong>do</strong>r único tridimensional (thre-<br />
adIdx.x, threadIdx.y, threadIdx.z) e cada bloco em um grid tamb<strong>é</strong>m possui<br />
seu próprio identifica<strong>do</strong>r bidimensional (blockIdx.x, blockIdx.y). Apesar disso,<br />
37