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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ção φ. Estas são instruções especiais, que funcionam como<br />

multiplexadores. A função φ presente no bloco L 3/4, isto é, a =<br />

phi(a1, a2) atribuirá à variável a ou o valor <strong>de</strong> a1 ou o valor<br />

<strong>de</strong> a2, <strong>de</strong>pen<strong>de</strong>ndo <strong>de</strong> on<strong>de</strong> flui a execução que alcança L 3/4.<br />

Funções φ são uma abstração notacional: elas não existem realmente<br />

em programas assembly. Compiladores que utilizam o<br />

formato SSA possuem, portanto, um passo adicional, que consiste<br />

na implementação <strong>de</strong>stas instruções usando-se instruções<br />

concretas – normalmente cópias, logo antes da geração <strong>de</strong> código<br />

<strong>de</strong> máquina.<br />

Além do formato SSA, nós lançaremos mão também do conceito<br />

<strong>de</strong> pós-dominância. Vamos supor que cada instrução em<br />

um programa PTX é representada por um rótulo l. Um rótulo<br />

lp pós-domina outro rótulo l se e somente se, todo caminho <strong>de</strong><br />

l até a saída do programa passa necessariamente por lp. Mais<br />

ainda, dizemos que lp é o pós dominador imediato <strong>de</strong> l se lp = l e<br />

qualquer outro rótulo que pós-domina l também pós-domina lp.<br />

Fung et al. [16] mostraram que o melhor ponto <strong>para</strong> reconvergir<br />

threads divergentes é o pós-dominador do <strong>de</strong>svio que causou<br />

as divergências.<br />

O conceito <strong>de</strong> pós-dominância usa a noção <strong>de</strong> caminho <strong>de</strong><br />

programa, que <strong>de</strong>finimos da seguinte forma: Dado um programa<br />

P, nós dizemos que um rótulo l vai <strong>para</strong> um rótulo l ′ , o que indicamos<br />

por l → l ′ , se uma das três condições é verda<strong>de</strong>ira:<br />

• l ′ é a próxima instrução após l e l não rotula um <strong>de</strong>svio<br />

incondicional;<br />

• l é um <strong>de</strong>svio condicional sendo l ′ um <strong>de</strong> seus alvos;<br />

• l é um <strong>de</strong>svio incondicional cujo <strong>de</strong>stino é l ′ .<br />

Dizemos que l1 ∗ −→ ln se l1 = ln, ou l1 → l2 e l2 ∗ −→ ln. Se lp é o<br />

pós-dominador imediato <strong>de</strong> l, então nós <strong>de</strong>finimos a região <strong>de</strong><br />

influência <strong>de</strong> l, que <strong>de</strong>notamos por IR(l), como a união <strong>de</strong> todos<br />

os caminhos l ∗ −→ lp que contêm lp exatamente uma vez – e por<br />

conseguinte ao final. Dizemos que uma variável v pertencente a<br />

um programa P alcança um rótulo l se P contêm dois rótulos ld<br />

e lu tais que:<br />

• v é <strong>de</strong>finida por uma instrução em ld;<br />

48

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

Saved successfully!

Ooh no, something went wrong!