13.04.2013 Views

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

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.

primeira vez <strong>de</strong>s<strong>de</strong> a popularização dos computadores, faça sentido a programa-<br />

dores comuns abrir os livros <strong>de</strong> compiladores nos capítulos finais, on<strong>de</strong> concei-<br />

tos até agora obscuros, como politopos e transformações <strong>de</strong> Fourier-Motskin vêm<br />

aguardando um momento <strong>de</strong> serem úteis fora do círculo dos especialistas em com-<br />

putação <strong>para</strong>lela. Este material, que explica <strong>de</strong> forma con<strong>de</strong>nsada alguns <strong>de</strong>stes<br />

conceitos, tem o propósito <strong>de</strong> disseminar um pouco da ciência que suporta às<br />

placas <strong>de</strong> processamento gráfico. Muitas das técnicas <strong>de</strong>scritas neste texto po-<br />

<strong>de</strong>m ser usadas tanto em compiladores, quanto por programadores que buscam<br />

melhorar o <strong>de</strong>sempenho <strong>de</strong> suas aplicações <strong>para</strong>lelas. Embora algumas das otimi-<br />

zações <strong>de</strong>scritas sejam específicas <strong>para</strong> o ambiente <strong>de</strong> <strong>de</strong>senvolvimento CUDA,<br />

vários métodos abordados neste texto po<strong>de</strong>m ser aplicados sobre outras arquite-<br />

turas <strong>para</strong>lelas que seguem o mo<strong>de</strong>lo <strong>de</strong> execução SIMD.<br />

1.1. A Ascensão das <strong>Placas</strong> Gráficas Programáveis<br />

O objetivo <strong>de</strong>sta seção é <strong>de</strong>screver um pouco do hardware<br />

e do ambiente <strong>de</strong> <strong>de</strong>senvolvimento que caracterizam as placas<br />

gráficas.<br />

A Roda da Reencarnação: Os computadores <strong>de</strong> propósito geral<br />

que compramos nas lojas normalmente vêem equipados com<br />

uma placa <strong>de</strong> processamento gráfico. É este hardware super<br />

especializado que representa na tela do computador as janelas,<br />

botões e menus dos aplicativos mais comuns e também as belas<br />

imagens 3D que po<strong>de</strong>mos ver nos vi<strong>de</strong>o-games. Algumas <strong>de</strong>stas<br />

placas são programáveis, isto é, nós, usuários po<strong>de</strong>mos criar<br />

programas que serão executados neste hardware. Isto, é claro,<br />

faz perfeito sentido, afinal, po<strong>de</strong>-se imaginar que uma placa <strong>de</strong><br />

processamento gráfico tem um enorme po<strong>de</strong>r computacional,<br />

mesmo porque as imagens que vemos brotar nos monitores <strong>de</strong><br />

nossos computadores são cada vez mais exuberantes.<br />

Mas nem sempre foi assim. Até meados da década <strong>de</strong> 90,<br />

pouco po<strong>de</strong>r-se-ia dizer sobre hardware gráfico. Havia então a<br />

noção <strong>de</strong> um “vetor <strong>de</strong> imagens gráficas", uma possível tradução<br />

<strong>para</strong> vi<strong>de</strong>o graphics array, or VGA. VGAs são exatamente<br />

isto: uma área contígua <strong>de</strong> dados que po<strong>de</strong>m ser lidos e representados<br />

em uma tela. A CPU, é claro, era a responsável por<br />

preencher esta memória. E tal preenchimento <strong>de</strong>veria acontecer<br />

várias vezes a cada segundo. Inicialmente esta carga sobre<br />

a CPU não era um terrível problema. Os aplicativos gráficos <strong>de</strong><br />

2

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

Saved successfully!

Ooh no, something went wrong!