técnicas para vetorização de código - bruno c lopes · slp ๏ análise de dependência garante...

62
Técnicas para vetorização de código Bruno Cardoso Lopes Instituto de Computação - Unicamp

Upload: votram

Post on 16-Dec-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Técnicas para vetorização de código

Bruno Cardoso LopesInstituto de Computação - Unicamp

Agenda

๏ Introdução

๏ Código Vetorial

๏ Vetorização Manual

๏ Vetorização Automática

๏ Superword Level Paralelism (SLP)

Introdução๏ Processadores vetoriais na década de 70.

๏ Instruções SIMD.

๏ Necessidade de compiladores.

๏ Compilador pode descobrir operações vetoriais automáticamente.

๏ Paralelismo no código gera oportunidade de vetorização.

Introdução

๏ Paralelismo aparece de várias formas.

๏ Década de 90 conjuntos de instruções vetoriais aparecem como extensões de multimedia, HP MAX-1 e Intel MMX.

๏ Mecanismos tradicionais de vetorização se aplicam para estas extensões.

Introdução

๏ Cell SPU

Código Vetorial

๏ Instruções vetoriais.

๏ Operandos são registradores vetoriais ou escalares.

๏ Stride: tamanho de cada elemento do vetor

๏ Step: tamanho do registrador vetorial

Código Vetorial๏ Motivação

๏ Subutilização de registradores

๏ Acessos a memória desnecessários

๏ Exemplo: Operações com cores

๏ Soma

๏ Saturação

๏ Mapeamento de canais em vetores

Código Vetorial

Código Vetorial

๏ Operações de aritmética, lógicas

๏ Instruções especiais

๏ Empacotamento/Desempacotamento

๏ Operações Horizontais (Redução)

Código Vetorial

Código Vetorial

๏ Conjuntos de instruções - Extensões Multimédia

Vetorização Manual๏ Vetorização pode ser feita de maneira

manual no compilador.

๏ Invocação de rotinas escritas em assembly ou Inline Assembly em C/C++

๏ Utilização de Intrinsics

๏ Genéricos

๏ Específicos de Arquitetura

Vetorização Manual

๏ Utilização de intrinsics para SSE.

Vetorização Automática

๏ Abordagem mais comum utiliza diversas análises e truques em laços.

๏ Superword level paralelism (SLP).

๏ Necessitam diversas análises.

Dependência de Dados

๏ Três tipos de dependência:

๏ Flow (RAW)

๏ Anti (WAR)

๏ Output (WAW)

๏ Loop carried

๏ Loop independent

Dependência de Dados

Vetorização de laços

๏ Primeira formalização de técnica de vetorização automática.

๏ Execução vetorial preserva dependência.

๏ Apenas laços que contêm dependências acíclicas podem ser vetorizados.

Strip-Mining๏ Cada arquitetura possui tamanho de

registradores vetoriais diferentes.

๏ Possibilita melhor utilização dos registradores.

๏ Divide o laço original em 2 novos laços.

๏ de fora: caminha entre passos

๏ interno: caminha entre iterações únicas de um passo

Strip-Mining

๏ Passo de tamanho 64

Redução๏ Operações horizontais.

๏ Se houver suporte a instruções horizontais

๏ Substituir diretamente

๏ Reduzição para cada passo e depois redução geral.

๏ Caso não, somar cada passo e somar sequencialmente o vetor final.

Redução

Condicionais๏ Tratamento de condicionais.

๏ Solução com vetores de bits e instruções com predicato.

๏ store, load e add adicionais.

๏ fluxo condicional sem branches.

๏ condição implícita na própria instrução.

๏ Na ausência de instruções condicionais, gerar os dois caminhos.

Condicionais

Expansão de Escalares

๏ Presença de escalares em um laço, gera dependência cíclica.

๏ No mínimo há dependência de saída.

๏ Variáveis de indução e temporários.

๏ Cíclos devem ser removidos para se aplicar vetorização.

Expansão de Escalares๏ Variáveis de indução

๏ Substituição

๏ Temporários

๏ Expansão escalar

๏ Temporários mantidos em registradores vetoriais, o valor de cada posição do registrador deverá conter o valor do escalar em diferentes iterações.

Abordagens com ciclos

๏ Dependência com ciclos impossibilita vetorização.

๏ Vários truques podem ser aplicados permitindo vetorização (mesmo que parcial)

Abordagens com ciclos

Loop fission๏ Utilizado para vetorizar loops parcialmente.

๏ Quebra laço em 2 novos laços.

๏ Um deles é vetorizado.

Loop fission๏ Caso haja um temporário que ficaria em

ambos loops, evitar alocação.

๏ Expandir e aplicar strip-mining.

Loop fission

๏ Na presença de condicionais em laços.

๏ Fora do ciclo:

๏ Técnica mostrada anteriormente.

๏ Parte do ciclo:

๏ Necessitaria de suporte em hardware para resolver recorrência booleana.

Ciclos Falsos

๏ Ciclos de antidependência.

๏ Dependência falsa

๏ Em baixa granularidade existe dependência.

๏ Dependência não existe em baixa granularidade.

Ciclos Falsos

๏ Baixa Granularidade

๏ Alta Granularidade

Ciclos Falsos๏ Considerar grafo com alta granularidade.

๏ Ordenação topológica para reordenar as operações.

๏ Garante que o fetch de a[i+1] é realizado antes da escrita de a[i]

Dependência Cruzada

๏ Em uma operação vetorial um dos operandos contêm índice crescente a outra descrenscente.

๏ Aplicar técnica de index set splitting, descobrindo índice de encontro

๏ Divide em outros dois laços,

Index Set Splitting

Tempo de Execução

๏ Um dos subscripts não é conhecido em tempo de execução.

๏ Não se sabe a direção da dependência.

๏ Gerar 2 versões do laço, uma para indices positivos e outra negativos

Tempo de Execução

Otimizações

๏ Ciclos com dependência de saída.

๏ Se o valor guardado for invariante e o mesmo em todas sentenças.

๏ Ignorar ciclos.

Laços Aninhados

๏ Se não existirem ciclos.

๏ Todos laços podem ser vetorizados.

๏ Transformação fica equivalente a atribuição de arrays.

Laços Aninhados

Laços Aninhados

๏ Se um dos laços possuirem ciclos de dependência.

๏ Loop interchanging.

๏ Inverte os laços, joga o ciclo para o laço de fora e paraleliza o interno.

๏ Permite escolher o melhor laço para vetorização.

Superword Level Paralelism (SLP)

๏ Técnicas em laços complexas e frágeis.

๏ Algumas funcionam para casos muito específicos.

๏ SLP explora o descoberta de operações SIMD analisando blocos básicos.

SLP

๏ Sentenças semelhantes sao agregadas em instruções SIMD.

๏ Sentenças isomórficas são escolhidas em um bloco básico.

๏ Sentenças isomórficas são as que possuem as mesmas operações na mesma ordem.

SLP

SLP๏ Definições

๏ Pack : tupla que contem sentenças isomórficas independentes em um BB.

๏ PackSet : é um conjunto de Packs.

๏ Pair : Pack de tamanho 2.

๏ 1a sentença : left element

๏ 2a sentença : right element

SLP๏ Antes do algoritmo executar :

๏ Loop unrolling, transforma paralelismo de vetores em SLP

๏ Alignment Analysis, cuida do endereçamento de cada instrução.

๏ Renaming

๏ Otimizações tradicionais: DCE, CSE, ...

SLP

๏ Código Original

SLP

๏ Loop unrolling e renaming

SLP๏ Algoritmo

๏ Escolher os primeiros candidatos a empacotamento:

๏ Referências adjacentes de memória

๏ Array analysis e informação de alinhamento

๏ Buscar essas sentenças em todos BBs.

SLP๏ Primeira ocorrência de cada par de sentenças

com acesso adjacente é adicionada ao PackSet

SLP

SLP๏ Após a incialização, adicionam-se mais

canditados que:

๏ Produzirem operandos fonte para outras sentenças já no PackSet.

๏ Utilizar dados já empacotados como operandos.

๏ Varrer def-use e use-def dos elementos já presentes no PackSet.

SLP๏ As novas sentenças encontradas devem:

๏ Serem isomórficas e independentes.

๏ Serem o lado esq/dir de grupos cujos lados a esq/dir ainda não estão no PackSet.

๏ Informação de alinhamento consistente.

๏ Tempo de execução novo deve ser menor do que a versão sequencial.

SLP

SLP

๏ Após selecionar todas sentenças possíveis:

๏ Pares podem ser combinados em sentenças maiores.

๏ Podem ser combinados quando o lado esquerdo de um grupo é igual ao lado direito de outro (elimina repetições).

SLP

SLP

๏ Análise de dependência garante que todas setenças em um grupo podem executar em paralelo.

๏ Dois grupos podem produzir violação de dependência, caso ocorra ciclo entre eles.

๏ Grupo contendo a sentença mais recente que ainda não foi escalonada é dividido.

SLP

SLP๏ Fim do algoritmo

SLP๏ Compilador SUIF

๏ Alvo : Motorola MPC7400 com Altivec

Conclusão

๏ Vetorização, primeiro método de explorar paralelismo em laços.

๏ Utilização inicial em processadores vetoriais e hoje com extensões multimedia

๏ Aplicação em laços e SLP

๏ Mesmo antigas, ainda geram muito desempenho quando implementadas.

Referências