11.01.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!