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