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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

contrada on-line 3 .<br />

Teorema 1.3.1 ( VARIÁVEL DIVERGENTE) Uma variável v ∈ P é<br />

divergente se e somente se, uma das condições abaixo for verda<strong>de</strong>ira:<br />

1. v = tid – ou qualquer outra variável que possui um valor<br />

pré-<strong>de</strong>finido e particular <strong>para</strong> cada thread, como por<br />

exemplo laneId.<br />

2. v é <strong>de</strong>finida por uma instrução atômica do tipo leia-modifiqueescreva,<br />

como por exemplo atomic { v = *a; *a =<br />

*a + b }.<br />

3. v possui uma <strong>de</strong>pendência <strong>de</strong> dados <strong>de</strong> alguma variável<br />

divergente.<br />

4. v possui uma <strong>de</strong>pendência <strong>de</strong> sincronização <strong>de</strong> alguma<br />

variável divergente.<br />

Antes <strong>de</strong> a<strong>de</strong>ntrar os pormenores <strong>de</strong> <strong>de</strong>pendências <strong>de</strong> dados<br />

e <strong>de</strong> sincronização, procuremos enten<strong>de</strong>r os dois primeiros<br />

itens do Teorema 1.3.1. A variável tid é divergente por <strong>de</strong>finição,<br />

uma vez que ela contém um valor diferente <strong>para</strong> cada<br />

thread. Já uma incremento atômico como atomic { v = *a;<br />

*a = *a + 1 } é executado exclusivamente por cada thread.<br />

Esta serialização faz com que cada thread obtenha um valor<br />

diferente <strong>para</strong> v, pois todas elas lêem – e alteram – o mesmo<br />

en<strong>de</strong>reço <strong>de</strong> memória e esta leitura não é simultânea.<br />

Dado um programa P, a variável v ∈ P possui uma <strong>de</strong>pendência<br />

<strong>de</strong> dados com relação à variável u ∈ P se P contém uma<br />

instrução que cria v e usa u. Por exemplo, na figura 1.36 nós<br />

temos que %i <strong>de</strong>pen<strong>de</strong> <strong>de</strong> %i1, <strong>de</strong>vido à função φ no bloco B1.<br />

Temos também que %i1 <strong>de</strong>pen<strong>de</strong> <strong>de</strong> %i, <strong>de</strong>vido à atribuição<br />

%i1 = %i + 1 no bloco B2. O problema <strong>de</strong> <strong>de</strong>terminar o fecho<br />

transitivo das <strong>de</strong>pendências <strong>de</strong> dados é um tipo <strong>de</strong> fatiamento<br />

<strong>de</strong> programas [40] e ele po<strong>de</strong> ser resolvido por uma simples<br />

busca em grafo. Este grafo, convenientemente chamado grafo<br />

<strong>de</strong> <strong>de</strong>pendência <strong>de</strong> dados, é <strong>de</strong>finido da seguinte forma:<br />

3 http://divmap.wordpress.com<br />

50

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

Saved successfully!

Ooh no, something went wrong!