Vetorização MO801/MC972
Motivação Algumas operações usam muito menos bits que os disponíveis em hardware Ex.: Somas de 8 bits de cores para modificar uma figura O somador em hardware é capaz de somar 32 bits Como aproveitá-lo?
Somador de 1 bit + Como fazer um somador de 8 bits? Carry in Carry out
Somador de 2 bits?
Somador de 2 bits + + A0 B0 C0 Carry in Carry out A1 B1 C1 Carry in
E a volta? Como transformar um somador de 32 bits em 4 de 8 bits? Isso é válido para todas as operações? Para quais operações é válido? Soma? Subtração? Multiplicação? Operações lógicas? Operações de ponto flutuante?
Visão geral + + + + = = = = Registrador de 32 bits
Outras operações úteis Soma com saturação Operações horizontais Empacotamento/desempacotamento
Soma com saturação Suponha cada canal de cor representado por 8 bits, o que acontece quando se soma 1 ao valor 255? Sem saturação: 255 + 1 = 0 Com saturação: 255 + 1 = 255 Qual operação é melhor?
Operações horizontais Registrador de 32 bits + + + Registrador de 32 bits
Empacotamento e Desempacotamento Nem sempre os dados estão no formato correto Empacotamento: Coloca dados quebrados num formato para ser manipulado pelas instruções vetoriais Desempacotamento: Volta ao modo anterior
Conjuntos de Instruções Processadores possuem seus conjuntos de instruções vetoriais Em geral, chamadas de extensões multimídia As vezes é melhor utilizá-las no lugar das instruções convencionais Ex.: Ponto flutuante na arquitetura Intel Ex.: SPE da arquitetura Cell
Como programar? Solução óbvia Solução desejada Alternativa Programas em assembly Solução desejada Detecção e uso automático pelo compilador Portabilidade Alternativa Intrinsics (macros) em linguagens de alto nível Pouca portabilidade Solução atual O compilador já faz algo Recomenda-se que o programador utilize intrinsics
Vetorizar ou Paralelizar? Melhor abordagem Vetorizar primeiro Paralelizar depois Não existe OpenMP para vetorização Geralmente um dos dois já satisfaz o requisito de desempenho Comece pelo mais fácil em cada caso Divida o programa em níveis de granularidade Vetorize o mais baixo Paralelize o mais alto
Questões gerais As arquiteturas possuem instruções vetoriais. Por que a vetorização não está sistematizada? Você já trabalhou em algo que precisava de desempenho? Realmente precisamos de mais desempenho? Você tentou vetorizar algum código?