Computadores Vetoriais Arquiteturas para Alto Desmpenho Prof. pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac
Arquiteturas e Fluxos de Instrução e Dados (SISD) Single Instruction Stream, Single Data Stream: monoprocessador (SIMD) Single Instruction Stream, Multiple Data Stream: arquiteturas vetoriais (MISD) Multiple Instruction Stream, Single Data Stream: sem implementação comercial (MIMD) Multiple Instruction Stream, Multiple Data Stream: arquiteturas multiprocessadas
Processadores Vetoriais SIMD Processadores com instruções de alto nível sobre vetores X = a*x+y, onde X, Y são vetores de tamanho n Abordagem RISC ou CISC? Uma única instrução especifica um grande quantidade de trabalho a ser realizada Os primeiros processadores vetoriais foram comercializados antes dos processadores superescalares
Utilizações comuns de computadores vetoriais Os processadores vetoriais são particularmente úteis para aplicações científicas e de engenharia Simulações, Previsão do tempo, aplicações que operam sobre grandes matrizes e/ou vetores... Aplicações multimídia também podem se beneficiar do processamento vetorial, pois tipicamente contêm vetores e matrizes Extensões multimídia (vetoriais) foram introduzidas em microprocessadores Pentium MMX, Conjunto de instruções SSE, SSE2, SSE3, AVX, etc. GPUs
Unidade Vetorial Registradores Vetoriais Cray Research (Cray-1, Cray-2, X-MP, Y-MP, C90, T90 e SV1), Supercomputadores japoneses (NEC SX/2 a SX/5, Fujitsu VP200 a VPP5000 e as máquinas Hitachi S820 e S-8300) Processadores memória-memória Primeiros computadores vetoriais Computadores da CDC
Principais características Paralelismo de loops explicitados pelo programador ou compilador através das instruções vetoriais Sistema de memória adaptado para fazer um acesso a memória para um vetor inteiro e não para cada elemento (memória entrelaçada)
Principais características O hardware só precisa verificar riscos de dados entre duas instruções vetoriais uma vez por operando vetorial,e não uma vez para cada elemento dentro dos vetores. Pelo fato de um loop inteiro ser substituído por uma instrução vetorial, os riscos de controle que surgiriam são eliminados.
Arquitetura Vetorial Básica Em geral, Um processador vetorial consiste de uma unidade escalar com pipeline comum e uma unidade vetorial. Unidade escalar: tipicamente um pipeline superescalar Vejamos uma versão vetorial do MIPS, isto é unidade escalar MIPS e uma unidade vetorial:
Comp. Vetorial com Registradores Vetoriais (VMIPS/Cray-1)
VMPIS VMIPS : oito registradores vetoriais e cada registrador vetorial contém 64 elementos. Unidades funcionais vetoriais Cada unidade tem um pipeline completo e pode iniciar uma nova operação em cada ciclo de clock. Uma unidade de controle é necessária para detectar riscos Unidade vetorial de carga-armazenamento Essa é uma unidade de memória vetorial que carrega ou armazena um vetor de ou para a memória.
Algumas Instruções Vetoriais
Exemplo Funcionamento Y = a*x + Y Esse é o chamado loop SAXPY ou DAXPY que forma o loop interno do benchmark Linpack. SAXPY: single-precision a X plus Y DAXPY: double-precision a X plus Y
Funcionamento 2 Exemplo Y = a*x + Y; X e Y com 64 elementos Código MIPS L.D F0,a ;carrega escalar a DADDIU R4,Rx,#512 ;último endereço a carregar Loop: L.D F2,0(Rx) ;carrega X(i) MUL.D F2,F2,F0 ;a X(i) L.D F4,0(Ry) ;carrega Y(i) ADD.D F4,F4,F2 ;a X(i) + Y(i) S.D F4,Ry(0) ;armazena em Y(i) DADDIU Rx,Rx,#8 ;incrementa índice para X DADDIU Ry,Ry,#8 ;incrementa índice para Y SUB.D R20,R4,Rx ;calcula limite BNEZ R20,Loop ;verifica se terminou
Funcionamento 3 Exemplo Y = a*x + Y Código VMIPS L.D F0,a ;carrega escalar a LV V1,Rx ;carrega vetor X MULVS.D V2,V1,F0 ;multiplicação de vetor por escalar LV V3,Ry ;carrega vetor Y ADDV.D V4,V2,V3 ;soma SV Ry,V4 ;armazena o resultado
MIPS: VMIPS : Redução devido a Comparação ~ 600(578) instruções executadas 6 instruções executadas Instruções atuando sobre vetores Eliminação de instruções de manutenção do loop: exemplo escolhido favoravelmente (64 elementos) Instruções vetoriais poderiam ter mesma latência de instruções escalares? Nesse caso, qual seria o ganho de desempenho esperado?
Problema: Tamanho Real do Vetores Vetores reais menores que o vetor do processador Vetores reais maiores que o vetor do processador
Exemplo - Mineração na superfície Exemplo de um vetor de comprimento arbitrário processado com mineração na superfície. Todos os blocos, com exceção do primeiro, têm o comprimento MVL, utilizando a potência total do processador vetorial. Nesta figura, a variável m é usada para a expressão (n mod MVL).
Vetores maiores que a capacidade dos registradores n > número de elementos do registrador for(i = 0;i<n;i++) y[i] = a * x[i] + y[i]; Mineração na superfície (Strip mining) low = 0; /*MVL: Maximum Vector Length*/ VL = (n mod MVL) /*encontra o fragmento de tamanho ímpar*/ for(j = 0,j<=(n / MVL);j++) { /*loop exterior*/ for(i=low; i<low + VL;i++){/*execuções de comprimento VL*/ y[i] = a * x[i] + y[i]; /*operação principal*/ } low = low + VL /*início do próximo vetor*/ VL = MVL /*redefine o comprimento com valor máximo*/ }
Unidade Vetorial de Carga/Armazenamento Bancos de Memória (Memória Entrelaçada) Várias cargas ou armazenamento por clock Barramentos de endereços e dados redundantes
Tipos de Endereçamentos Endereçamento Seqüencial Os elementos são adjacentes na memória Endereçamento Espaçado Os elementos são separados por um número fixo de palavras Útil para intercalar vetores que serão operados Endereçamento Gather/Scatter Os elementos são endereçados por outro registrador vetorial (endereçamento indireto)
Uso de várias Unidades Funcionais
Otimização de operações vetoriais Encadeamento MULV.D V1,V2,V3 ADDV.D V4,V1,V5 Dependência RAW Latência alta (quando pistas insuficientes...) Valores parciais podem ser encaminhados para próxima instrução Pistas de execução
Pistas
Laços com instruções condicionais Considere o seguinte código: do 100 i = 1, 64 if (A(i).ne. 0) then A(i)=A(i) B(i) endif 100 Continue Como vetorizar?
Solução: controle de máscara de vetor. Vetor booleano de tamanho MVL que informa se a operação deve ser realizada para um determinado elemento do vetor No exemplo, A(i) é atualizado apenas se o elemento da máscara de vetor corresponde ao elemento i está verdadeiro
Instruções Vetoriais em Microprocessadores MMX (Pentium ) Registradores Vetoriais de 64 bits Tamanho do elemento variável 8 bits (8 elem), 16 bits(4 elem), 32 bits(2 elem) SSE (Streaming SIMD Extension) (Pentium III) 8 Registradores Vetoriais de 128 bits e novo conjunto de Instruções (+70) SSE2 (Pentium IV) Registradores Vetorais de 512 bits com elementos de 64 bits mais novas instruções (+144) AltiVec(PowerPC) Registradores Vetoriais de 128 bits
Problemas no uso de instruções vetoriais em Microprocessadores Vetores curtos e poucos registradores Modos de endereçamento de memória simples(espaçamento único) Falta de suporte em linguagem de programação para operar sobre dados estreitos(elementos) Conseqüentemente, Instruções SIMD geralmente são encontradas apenas em bibliotecas de rotinas gráficas de baixo nível
Resumo de Computadores Vetoriais Instruções que exploram o paralelismo potencial entre iterações de laços Grande melhoria de desempenho porém limitado a tipo bastante específico de operações, o que limita o ganho global Lei de Amdahl
Resumo de Computadores Vetoriais -2 Fortemente dependente da existência de compiladores que façam uso das instruções disponibilizadas Demanda maior largura de banda de memória Instruções (e registradores) vetoriais foram incluídos também em Microprocessadores (x86, PowerPC) e também em máquinas como Nintendo-64 e Playstation2 para acelerar operações gráficas