24.07.2013 Views

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

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.

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?

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

Saved successfully!

Ooh no, something went wrong!