Utilização de técnicas de análise estática e dinâmica para ... - UFMG
Utilização de técnicas de análise estática e dinâmica para ... - UFMG
Utilização de técnicas de análise estática e dinâmica para ... - UFMG
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
<strong>Utilização</strong> <strong>de</strong> <strong>técnicas</strong> <strong>de</strong> <strong>análise</strong> <strong>estática</strong> e<br />
<strong>dinâmica</strong> <strong>para</strong> otimização <strong>de</strong> aplicações <strong>de</strong><br />
propósito geral em GPUs<br />
Bruno Rocha Coutinho<br />
Departamento <strong>de</strong> Ciência da Computação<br />
Universida<strong>de</strong> Fe<strong>de</strong>ral <strong>de</strong> Minas Gerais<br />
coutinho@dcc.ufmg.br<br />
5 <strong>de</strong> julho <strong>de</strong> 2011
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Introdução<br />
• Em computação há uma <strong>de</strong>manda praticamente infinita por<br />
<strong>de</strong>sempenho:<br />
• Simulações cada vez mais complexas<br />
• Análise <strong>de</strong> gran<strong>de</strong>s volumes da dados
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplos: Simulação <strong>de</strong> vírus
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplos: Simulação Climática
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplos: Análise <strong>de</strong> dados do LHC
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Desenvolvimento <strong>de</strong> aplicações <strong>de</strong> alto <strong>de</strong>sempenho
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
<strong>Utilização</strong> <strong>de</strong> GPUs em aplicações <strong>de</strong> alto <strong>de</strong>sempenho<br />
• Evolução das GPUs <strong>para</strong> executar qualquer aplicação<br />
• Uso <strong>de</strong> GPUs <strong>para</strong> aplicações <strong>de</strong> propósito geral<br />
• Baixo custo<br />
• Alto <strong>de</strong>sempenho<br />
• Exploração <strong>de</strong> todo potencial das GPUs é complexo<br />
• Há uma <strong>de</strong>manda por ferramentas <strong>para</strong> facilitar a otimização<br />
<strong>de</strong> aplicações em GPUs
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
História das GPUs<br />
• 1995: Dispositivos <strong>de</strong> funções fixas<br />
• 2001: Dispositivos programáveis<br />
• Sha<strong>de</strong>rs<br />
• 2004: Primeiras aplicações <strong>de</strong> propósito geral<br />
• Linguagens/APIs <strong>de</strong> computação gráfica<br />
• 2007: CUDA<br />
• Primeira linguagem <strong>de</strong> propósito geral <strong>para</strong> GPUs<br />
• Ascensão do <strong>para</strong>digma <strong>de</strong> programação GPGPU.
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
GPUs: hardware voltado à throughput<br />
• Feitas <strong>para</strong> cargas regulares e massivamente <strong>para</strong>lelas<br />
• Não utiliza mecanismos <strong>para</strong> acelerar código serial, tais como:<br />
• Caches gran<strong>de</strong>s<br />
• Execução <strong>de</strong> instruções fora <strong>de</strong> or<strong>de</strong>m<br />
• ALUs muito complexas<br />
• Arquitetura muito mais eficiente <strong>para</strong> aplicações <strong>para</strong>lelas<br />
Control<br />
Cache<br />
DRAM<br />
CPU<br />
ALU<br />
ALU<br />
ALU<br />
ALU<br />
DRAM<br />
GPU
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Por que é difícil aproveitar todo o potencial da GPU?<br />
• Gerenciamento <strong>de</strong> memória<br />
• Movimentação <strong>de</strong> dados entre CPU e GPU<br />
• Disposição dos dados na memória da GPU<br />
• Gran<strong>de</strong> número <strong>de</strong> unida<strong>de</strong>s <strong>de</strong> processamento (512)<br />
• Escon<strong>de</strong> latência executando outras threads<br />
• 24000 threads <strong>para</strong> ter ocupação total<br />
• Arquitetura SIMD (Single Instruction Multiple Data)<br />
• Restrições no fluxo <strong>de</strong> controle<br />
• Carência <strong>de</strong> ferramentas <strong>para</strong> auxiliar os <strong>de</strong>senvolvedores.<br />
• Por exemplo: Visual Profiler da Nvidia<br />
• Em geral estas ferramentas ainda são muito primitivas.
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Divergências<br />
• GPUs combinam threads em grupos que seguem o mo<strong>de</strong>lo<br />
SIMD<br />
• Estas threads executam em passo único (lock-step)<br />
• Eventualmente, num <strong>de</strong>svio, algumas threads executam o<br />
“then” e outras o “else”<br />
• Passo 1: Threads que vão <strong>para</strong> o then executam e threads<br />
que vão <strong>para</strong> o else esperam<br />
• Passo 2: Threads que vão <strong>para</strong> o then esperam e threads que<br />
vão <strong>para</strong> o else executam<br />
• Divergências po<strong>de</strong>m causar gran<strong>de</strong> <strong>de</strong>gradação <strong>de</strong> <strong>de</strong>sempenho
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: Código divergente<br />
__global__ void<br />
ex (float* v) {<br />
if (v[tid] < 0.0) {<br />
v[tid] /= 2;<br />
} else {<br />
v[tid] = 0.0;<br />
}<br />
}
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: Execução do código divergente
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Tese<br />
A otimização <strong>de</strong> aplicações <strong>de</strong> propósito geral em GPUs <strong>de</strong>manda<br />
o <strong>de</strong>senvolvimento <strong>de</strong> novas <strong>técnicas</strong> <strong>de</strong> <strong>análise</strong>s <strong>estática</strong>s e<br />
<strong>dinâmica</strong>s, bem como a sua integração, em particular <strong>para</strong> analisar<br />
e otimizar divergências.<br />
Contribuições:<br />
1 Ferramenta <strong>para</strong> medição (profiling) <strong>de</strong> divergências<br />
2 Análise <strong>estática</strong> <strong>para</strong> <strong>de</strong>tecção <strong>de</strong> <strong>de</strong>svios divergentes<br />
3 Otimização <strong>de</strong> código divergente
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Medição <strong>de</strong> Divergências<br />
• Objetivo:<br />
• Mensurar, via profiling, o número <strong>de</strong> visitas e divergências <strong>de</strong><br />
cada <strong>de</strong>svio durante a execução do programa.<br />
• Vantagens:<br />
• Mostra o que aconteceu em <strong>de</strong>talhes<br />
• Desvantagens:<br />
• Resultados <strong>de</strong>pen<strong>de</strong>m da entrada<br />
• Em geral fornece exemplos, sem provar proprieda<strong>de</strong>s<br />
• Overhead: alguns códigos ficaram 100x mais lentos
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Resultados<br />
1000 <br />
100 <br />
10 <br />
1 <br />
2 <br />
3 <br />
4 4 <br />
5 <br />
1 1 1 1 1 <br />
bp.as <br />
sc.ud <br />
mr.ru <br />
bf.K2 <br />
8 9 10 10 12 13 14 14 14 16 17 17 19 <br />
3 <br />
1 1 <br />
qs.p3 <br />
bf.Kl <br />
mr.bu <br />
rn.32 <br />
3 <br />
bp.ld <br />
tn.ml <br />
1 <br />
3 <br />
sr.s2 <br />
rn.26 <br />
1 <br />
2 <br />
st.pl <br />
qs.p2 <br />
4 <br />
3 <br />
5 5 <br />
sc.pn <br />
nw.n1 <br />
nw.n2 <br />
sd.su <br />
221 <br />
101 <br />
74 <br />
26 27 32 32 34 <br />
44 47 <br />
2 2 <br />
3 <br />
cf.cx <br />
tn.sn <br />
sr.s1 <br />
62 <br />
8 8 9 <br />
34 <br />
21 <br />
11 <br />
14 <br />
qs.p1 <br />
hp.cp <br />
cs.ui <br />
dc.cs <br />
fd.fl <br />
qs.lt <br />
Number of Blocks Number of Branches Number of Divergent Branches <br />
hw.kl
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplos <strong>de</strong> comportamento divergente<br />
!"#$!%&<br />
!"#$%*&<br />
!"#$%)&<br />
!"#$%(&<br />
!"#$%'&<br />
!"#$%%&<br />
!"#$%+&<br />
!"#$%*&<br />
!"#$%)&<br />
!"#$%(&<br />
!"#$%'&<br />
!"#$%!&<br />
!"#$%%&<br />
Heartwall (hw.kl)<br />
!& !!& '!& +!& (!& ,!& )!& -!& *!& .!& !%!& !!!& !'!& !+!&<br />
!& (& *& ,& -& !!& !(& !*& !,& !-& '!& '(& '*& ',& '-& (!& ((& (*&<br />
!"#$%-&<br />
!"#$%,&<br />
!"#$%+&<br />
!"#$%*&<br />
!"#$%)&<br />
!"#$%(&<br />
!"#$%'&<br />
!"#$%!&<br />
!"#$%%&<br />
FDTD3d (fd.fl) Dxtc (dc.cs)<br />
Number of times the branch was visited<br />
!"#$%-&<br />
!"#$%,&<br />
!"#$%+&<br />
!"#$%*&<br />
!"#$%)&<br />
!"#$%(&<br />
!"#$%'&<br />
!"#$%!&<br />
!"#$%%&<br />
lqsort (qs.Lt)<br />
!& *& .& !(& !,& '!& '*& '.& ((& (,& )!& )*& ).& *(& *,&<br />
!& '& (& )& *& +& ,& -& .& !%&!!&!'&!(&!)&!*&!+&!,&!-&!.&'%&'!&''&'(&')&'*&<br />
Number of divergences
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: GPU Quicksort<br />
__global__ static void bitonicSort(int * values) {<br />
extern __shared__ int shared[];<br />
const unsigned int tid = threadIdx.x;<br />
shared[tid] = values[tid];<br />
__syncthreads();<br />
for (unsigned int k = 2; k 0; j /= 2) {<br />
unsigned int ixj = tid ^ j;<br />
if (ixj > tid) {<br />
if ((tid & k) == 0) { 7,329,816 / 28,574,321<br />
if (shared[tid] > shared[ixj]) {<br />
15,403,445 / 20,490,780<br />
swap(shared[tid], shared[ixj]);<br />
}<br />
} else {<br />
if (shared[tid] < shared[ixj]) {<br />
4,651,153 / 8,083,541<br />
swap(shared[tid], shared[ixj]);<br />
}<br />
}<br />
}<br />
__syncthreads();<br />
}<br />
}<br />
values[tid] = shared[tid];<br />
}
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: GPU Quicksort<br />
L 3<br />
14<br />
15<br />
16<br />
17<br />
L 5<br />
L 2<br />
%t2 = ld %shared[%tid]<br />
%t3 = ld %shared[%ixj]<br />
%p3 = gt %t2 %t3<br />
bra %p3 L7<br />
st %shared[%tid] %t3<br />
st %shared[%ixj] %t2<br />
%t1 = and %tid %k<br />
%p2 = eq %t1 0<br />
bra %p2 L3<br />
sync<br />
L 1<br />
7,329,816 / 28,574,321<br />
L 7<br />
L 4<br />
%ixj = xor %tid %j<br />
%p1 = gt %ixj %tid<br />
bra %p1 L2<br />
%t4 = ld %shared[%tid]<br />
%t5 = ld %shared[%ixj]<br />
%p4 = lt %t4 %t5<br />
bra %p4 L7<br />
15,403,445 / 20,490,780 4,651,153 / 8,083,541<br />
18<br />
19<br />
L 6<br />
12<br />
13<br />
4<br />
5<br />
6<br />
7<br />
1<br />
2<br />
3<br />
st %shared[%tid] %t5<br />
st %shared[%ixj] %t4<br />
8<br />
9<br />
10<br />
11
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: GPU Quicksort<br />
Primeira Otimização: aceleração <strong>de</strong> 6,75%<br />
Segunda Otimização: aceleração <strong>de</strong> 9,2%<br />
unsigned int a, b;<br />
if ((tid & k) == 0){<br />
b = tid;<br />
a = ixj;<br />
} else {<br />
b = ixj;<br />
a = tid;<br />
}<br />
if (sh[b] > sh[a]){<br />
swap(sh[b],sh[a]);<br />
}<br />
%t1 = and %tid %k<br />
%p2 = eq %t1 0<br />
bra %p2 L3<br />
%b = mov %tid<br />
%a = mov %ixj<br />
%b = mov %ixj<br />
%a = mov %tid<br />
%t2 = ld %shared[%b]<br />
%t3 = ld %shared[%a]<br />
%p3 = gt %t2 %t3<br />
bra %p3 L7<br />
sync<br />
st %shared[%a] %t3<br />
st %shared[%b] %t2<br />
int p = (tid & k) == 0;<br />
unsigned b = p?tid:ixj;<br />
unsigned a = p?ixj:tid;<br />
if (sh[b] > sh[a]) {<br />
swap(sh[b], sh[a]);<br />
}<br />
%t1 = and %tid %k<br />
%p = eq %t1 0<br />
%a = sel %tid %ixj %p<br />
%b = sel %ixj %tid %p<br />
%t2 = ld %shared[%b]<br />
%t3 = ld %shared[%a]<br />
%p3 = gt %t2 %t3<br />
bra %p3 L7<br />
st %shared[%a] %t3<br />
st %shared[%b] %t2<br />
(a) (b) (c) (d)<br />
sync
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Análise <strong>estática</strong>: Detecção <strong>de</strong> <strong>de</strong>svios divergentes<br />
• Objetivo: verificar se um <strong>de</strong>svio po<strong>de</strong> ser divergente ou não,<br />
sem precisar executar o programa.<br />
• Todo <strong>de</strong>svio na GPU é expresso na forma: @pred bra $LABEL<br />
• @pred: variável booleana (predicado)<br />
• Po<strong>de</strong>mos verificar se <strong>de</strong>svio diverge avaliando este predicado<br />
@pred.<br />
• Se @pred possuir o mesmo valor <strong>para</strong> todas as threads, então o<br />
<strong>de</strong>svio não po<strong>de</strong> ser divergente.
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Variáveis divergentes<br />
Definição: Variável divergente<br />
Uma variável é divergente se threads diferentes a vêem com valores<br />
diferentes.<br />
Variáveis não divergentes por <strong>de</strong>finição:<br />
• Argumentos do kernel<br />
• Memória da GPU (o valor <strong>de</strong> um load é divergente só se o<br />
en<strong>de</strong>reço o for)<br />
Variáveis divergentes por <strong>de</strong>finição<br />
• tid: id da thread (usado <strong>para</strong> divisão <strong>de</strong> dados entre as<br />
threads)<br />
Mas, e as outras variáveis?
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Dependências entre variáveis<br />
• Dependência <strong>de</strong> dados:<br />
• uma variável é usada pra calcular a outra<br />
• c = r ∗ 2 ∗ 3.14;<br />
• Dependência <strong>de</strong> controle:<br />
• uma variável é usada <strong>para</strong> controlar um <strong>de</strong>svio que contém a<br />
atribuição <strong>de</strong> outra variável:<br />
if (y > 0) {<br />
x = 0;<br />
} else {<br />
x = 1;<br />
}<br />
• É mais fácil encontrar <strong>de</strong>pendências <strong>de</strong> controle em programas<br />
que estão em formato SSA (Static Single Assignment):<br />
if (y > 0) {<br />
x1 = 0;<br />
} else {<br />
x2 = 1;<br />
}<br />
x = φ(x1, x2);
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: Código em SSA
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Detecção <strong>de</strong> variáveis divergentes<br />
• Dependências <strong>de</strong> controle:<br />
• Adiciona predicado que controla <strong>de</strong>svio à função-φ,<br />
transformando-as em <strong>de</strong>pendências <strong>de</strong> dados<br />
p = (y > 0);<br />
if (p) {<br />
x1 = 0;<br />
} else {<br />
x2 = 1;<br />
}<br />
x = φ(x1, x2);<br />
p = (y > 0);<br />
if (p) {<br />
x1 = 0;<br />
} else {<br />
x2 = 1;<br />
}<br />
x = φ(x1, x2), p;<br />
• Prova que <strong>de</strong>svios com predicados não-divergentes serão<br />
não-divergentes
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: SSA modificado
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo: Grafo <strong>de</strong> <strong>de</strong>pendências<br />
p 1<br />
t 0<br />
j 3<br />
j 2<br />
j 0<br />
j<br />
j 1<br />
x 0<br />
j 4<br />
p 0<br />
i 1<br />
x<br />
p 2<br />
i<br />
i 0<br />
x 1<br />
tid
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Resultados
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Precisão da <strong>análise</strong>
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Análise <strong>estática</strong> x <strong>dinâmica</strong><br />
• A <strong>análise</strong> <strong>dinâmica</strong> (profiler) permite testar a <strong>análise</strong> <strong>estática</strong><br />
• Obtemos nossa taxa <strong>de</strong> 34% <strong>de</strong> falsos positivos na <strong>análise</strong><br />
<strong>estática</strong> via com<strong>para</strong>ção com profiler<br />
• A <strong>análise</strong> <strong>estática</strong> permite reduzir o overhead do profiler<br />
• Temos <strong>de</strong> instrumentar somente 75% dos <strong>de</strong>svios, pois<br />
po<strong>de</strong>mos provar que os outros 25% não são divergentes
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Otimização: Unificação <strong>de</strong> blocos básicos<br />
Estratégia<br />
• Encontrar trechos <strong>de</strong> código comum<br />
• Mover código comum <strong>para</strong> fora da região divergente<br />
• Quando instruções usarem operandos diferentes, escolher<br />
operando a<strong>de</strong>quado via instrução <strong>de</strong> seleção
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo<br />
(a)<br />
l 4<br />
l 1<br />
(b)<br />
load(t 1, tid)<br />
t 2 = t 1 * t 1<br />
t 3 = t 2 * t 1<br />
t 4 = t 3 * 3.14<br />
t 5 = t 4 / t 0<br />
t 6 = t 5 / t 0<br />
t 7 = t 1 * 2.71<br />
t 8 = t 6 + t 7<br />
store(t 8, tid)<br />
load(t 0, tid)<br />
p 0 = t 0 ≠ 0.0<br />
branch(p 0, l 13)<br />
l 22<br />
T =<br />
F =<br />
l 13<br />
sync<br />
stop<br />
<br />
<br />
<br />
<br />
<br />
<br />
load(t 9, tid)<br />
t 10 = t 9 * t 9<br />
t 11 = t 10 * 3.14<br />
t 12 = t 11 / 2.00<br />
t 13 = t 9 * 2.71<br />
t 14 = t 13 * t 9<br />
t 15 = t 12 + t 14<br />
store(t 15, tid)<br />
jump(l 22)<br />
<br />
<br />
<br />
(c)<br />
l 8<br />
<br />
<br />
<br />
<br />
l 1<br />
<br />
<br />
t 4 = t 3-11 * 3.14<br />
t 5 = t 4 / t 0<br />
l 10<br />
<br />
<br />
load(t 0, tid)<br />
p 0 = t 0 ≠ 0.0<br />
load(t 1-9 , tid)<br />
t 2-10 = t 1-9 * t 1-9<br />
s 1 = sel(p 0 , t 2-10 , 3.14)<br />
t 3-11 = t 2-10 * s 1<br />
branch(p 0 , l 10 )<br />
sync<br />
s 2 = sel(p 0 , t 5 , t 3-11 )<br />
s 3 = sel(p 0 , t 0 , 2.0)<br />
t 6-12 = s 2 / s 3<br />
t 7-13 = t 1-9 * 2.71<br />
branch(p 0, l 16)<br />
l 16<br />
sync<br />
t 8-15 = t 6-12 + t 7-13<br />
store(t 8-15 , tid)<br />
l15 t14 = t7-13 * t1-9
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Algoritmo<br />
• Distância <strong>de</strong> edição<br />
• Trechos comuns<br />
• Instruções que só existem em A<br />
• Instruções que só existem em B<br />
• Porém distância <strong>de</strong> edição é muito limitado<br />
• Instruções diferentes têm custos diferentes<br />
• Smith-Waterman
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Exemplo<br />
→<br />
2 →<br />
↓<br />
0 → 0 → 0 → 0 → 0 → 0 → 0 → 0<br />
0 100→<br />
98 → 98 → 98 → 98 → 98 → 98 → 98<br />
↓ ↓<br />
0 98 102→100 →100→100→100→100→100 ↓ ↓ ↓<br />
0 98 100 104→102→102→102→102→ 102<br />
↓ ↓ ↓ ↓<br />
0 98 100 102→102 104→104→104→104 ↓ ↓ ↓ ↓<br />
0 98 100 102 110→108→108→108→108 ↓ ↓ ↓ ↓<br />
0<br />
↓<br />
98<br />
↓<br />
100<br />
↓<br />
102<br />
↓<br />
110→108→108→108→108 ↓<br />
0<br />
↓<br />
98<br />
↓<br />
100<br />
↓<br />
102<br />
↓<br />
108<br />
↓<br />
112→110→110→110 ↓<br />
0 98 100 102 108 110 113 112 →110<br />
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓<br />
0 98 100 102 108 110 111 110 212<br />
→ → →<br />
→<br />
→<br />
→ → →<br />
0 1 2 3 4 5 6 7 8<br />
→<br />
→<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Resultados
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Contribuições:<br />
Publicações:<br />
• Artigo Performance Debugging of GPGPU Applications<br />
with the Divergence Map no International Symposium on<br />
Computer Architecture and High Performance Computing<br />
SBAC 2010<br />
• Premio <strong>de</strong> melhor artigo da conferência<br />
• Artigo Profiling divergences in GPU applications<br />
submetido <strong>para</strong> a revista Concurrency and Computation:<br />
Practice and Experience (CCPE)<br />
• Artigo Divergence Analisys and Optimizations em<br />
International Conference on Parallel Architecture and<br />
Compilation Techniques (PACT) 2011<br />
• Taxa <strong>de</strong> aceitação <strong>de</strong> 16%<br />
Tecnologia:<br />
• Vários patches do compilador Ocelot foram <strong>de</strong>senvolvidos.
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Conclusões<br />
• GPUs são dispositivos com gran<strong>de</strong> capacida<strong>de</strong> computacional<br />
• Aproveitar todo esse potencial não é trivial<br />
• Existem poucas ferramentas <strong>para</strong> ajudar o programador nessa<br />
tarefa<br />
• Criamos algumas ferramentas <strong>para</strong> aten<strong>de</strong>r essa <strong>de</strong>manda<br />
• Estas ferramentas se complementam<br />
Trabalhos Futuros:<br />
• Melhoria da precisão da <strong>análise</strong> <strong>de</strong> divergências, acoplando-a<br />
com a técnica <strong>de</strong> <strong>de</strong>tecção <strong>de</strong> valores afins <strong>de</strong> Colange et al.<br />
• Alocação <strong>de</strong> registradores com ciência <strong>de</strong> variáveis divergentes
Introdução As GPUs Tese Profiling Análise <strong>estática</strong> Otimização<br />
Perguntas?<br />
Dúvidas? Sugestões?