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

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?

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

Saved successfully!

Ooh no, something went wrong!