Arquitetura Vetorial

5
Arquitetura Vetorial Histórico O inicio de desenvolvimento de uma arquitetura vetorial, ocorreu na década de 1960. O projeto que deu inicio a isso foi o Solomon, que visava realizar cálculos matemáticos complexos, no menor tempo possível. A arquitetura do Solomon contava com um processador central que controlava outros processadores, assim o resultado dos processadores filhos eram armazenados em um vetor. O processador principal tinha instruções específicas para tratar os resultados contidos neste vetor [1]. Infelizmente, durante a década de 60 não houve sucesso no desenvolvimento de novos processadores vetoriais, até 1976, quando surgiu o Cray-1, que foi utilizado na NCAR, National Center For Atmospheric Research, nos Estados Unidos. O Cray-1 foi considerado o primeiro computador vetorial, especialmente por conter registradores vetoriais. Para a utilização de todo o poder computacional que este computador disponha na época, foi lançado, em 1978, uma versão do compilador Fortran com vetorização automática [1]. Atualmente, a Cray (empresa que desenvolveu o primeiro processador vetorial), trabalha apenas com arquiteturas paralelas, envolvendo o uso de processadores e processadores gráficos, um dos últimos modelos de supercomputadores que continha apenas a arquitetura vetorial desenvolvido pela Cray, foi o Cray SV1, lançado em 1998. Os processadores atuais contam ainda com conjuntos de instruções vetoriais, como o conjunto SSE (Streaming SIMD Extensions). Processamento Vetorial Seguindo o taxioma de Flynn, o modelo SIMD (Single Instruction Multiple Data) é o modelo que mais se aproxima de uma arquitetura vetorial (uma instrução é tratada por

Transcript of Arquitetura Vetorial

Page 1: Arquitetura Vetorial

Arquitetura Vetorial

Histórico

O inicio de desenvolvimento de uma arquitetura vetorial, ocorreu na década de 1960. O projeto que deu inicio a isso foi o Solomon, que visava realizar cálculos matemáticos complexos, no menor tempo possível. A arquitetura do Solomon contava com um processador central que controlava outros processadores, assim o resultado dos processadores filhos eram armazenados em um vetor. O processador principal tinha instruções específicas para tratar os resultados contidos neste vetor [1].

Infelizmente, durante a década de 60 não houve sucesso no desenvolvimento de novos processadores vetoriais, até 1976, quando surgiu o Cray-1, que foi utilizado na  NCAR, National Center For Atmospheric Research, nos Estados Unidos. O Cray-1 foi considerado o primeiro computador vetorial, especialmente por conter registradores vetoriais. Para a utilização de todo o poder computacional que este computador disponha na época, foi lançado, em 1978, uma versão do compilador Fortran com vetorização automática [1].

Atualmente, a Cray (empresa que desenvolveu o primeiro processador vetorial), trabalha apenas com arquiteturas paralelas, envolvendo o uso de processadores e processadores gráficos, um dos últimos modelos de supercomputadores que continha apenas a arquitetura vetorial desenvolvido pela Cray, foi o Cray SV1, lançado em 1998. Os processadores atuais contam ainda com conjuntos de instruções vetoriais, como o conjunto SSE (Streaming SIMD Extensions).

Processamento Vetorial

Seguindo o taxioma de Flynn, o modelo SIMD (Single Instruction Multiple Data) é o modelo que mais se aproxima de uma arquitetura vetorial (uma instrução é tratada por várias unidades de processamento que compartilham a memória).

Um processador vetorial, além de conter instruções para tratar dados em vetores e matriz, apresenta também formas de trabalhar com escalares, ou seja, trabalha como um processador comum.

As instruções vetoriais, podem ser comparadas a um looping de uma instrução escalar [2].

Os registradores de um processador vetorial apresentam a capacidade de armazenamento de 1 a 8 kb, o que pode ser entendido como um rearranjo de 64, 32, 16 ou 8 bits [1]. A quantidade de registradores varia de acordo com o projeto. Caso o vetor de uma operação extrapole o tamanho do registrador, o compilador realiza o overhead, ou seja, quebra o vetor em um tamanho

Page 2: Arquitetura Vetorial

compatível com o registrador, e o resto do vetor e colocado em outro registrador, se necessário realiza-se overhead novamente [2].

Existem seis elementos que constituem um processador vetorial, estes são: memória principal, processador escalar, controlador vetorial, controlador de memória e gerador de endereços vetoriais, registradores e a unidade aritmética pipeline.

O processador escalar trabalha como um processador comum, executando as tarefas de modo sequencial, porém quando identifica uma instrução vetorial, ele repassa esta para o controlador vetorial.

O controlador vetorial regula a execução das instruções, calculando os parâmetros de endereçamento dos operandos vetoriais e configurando a unidade aritmética pipeline. Todo tipo de conjunto de dados referentes a endereços de memória são enviados ao controlador de memória e gerador de endereços, que a partir destes dados realiza o acesso a memória principal para buscar os operandos. A unidade aritmética pipeline executa as instruções vetoriais sobre os operandos buscados, o pipeline é alimentado pelos registradores vetoriais.

Endereçamento em Memória

No processamento vetorial, existem duas maneiras de endereçar um vetor, o endereçamento denso e o esparso.

O endereçamento denso é dividido em três tipos, sequencial, não sequencial regular e submatriz [1].

-Sequencial: os dados são salvos sequencialmente na memória.

-Não sequencial regular: os dados são salvos de modo a distarem K posições um do outro, por exemplo, para k = 2, o dado 1 é salvo em 0, o dado 2 é salvo em 2 (0+k), o dado 3 é salvo em 4 (2+k), assim por diante.

-Submatriz: lê-se a linha e acessam-se todos os dados desta linha.

O endereçamento esparso utiliza uma matriz de 0 ou 1, que mapeia os operandos, caso aquela posição do operando seja utilizada, ela é marcada com 1, caso contrário 0, assim são executadas apenas instruções sobre a parte dos operandos marcadas com 1, isso evita o gasto de processamento para realizar instruções desnecessárias sobre dados, assim o endereçamento se torna mais rápido [1].

Page 3: Arquitetura Vetorial

Processamento Matricial

O processamento vetorial, muitas vezes envolve o tratamento de matrizes (como exemplo, a busca na memória), assim existem duas formas de se processar a matriz, horizontalmente ou verticalmente, também existe o híbrido, porém ele não será tratado no artigo.

No processamento horizontal, a cada linha é realizada a operação posição por posição e o resultado é salvo em X (que pode ser um vetor ou um escalar, depende da operação), isso é executado a cada linha da matriz [1].

No processamento vertical, as operações são realizada em paralelo com as outras colunas da matriz, ou seja, este método leva vantagem sobre o anterior, pois o pipeline deste é iniciado apenas uma vez, enquanto no anterior o pipeline é executado a cada nova linha [1].

Tipos de Arquitetura Vetorial

A arquitetura vetorial é dividida em duas, memória-memória e vetor-registrador. No primeiro tipo, as operações realizadas sobre os operandos são realizadas na memória (processo lento e não mais utilizado), já no segundo caso, as operações são realizadas em cima dos registradores, porém as operações load e store utilizam o acesso a memória (carregar da memória para o registrador e salvar o registrador na memória) [2].

Exemplo de Instrução Vetorial

Assim como no processamento escalar, existem diversas operações que podem ser realizadas sobre vetores, para isto forma desenvolvidos um conjunto de operadores que realizam estas tarefas.

Uma operação vetorial é constituída de cinco elementos, o código da operação, o endereço de base (pode ser um registrador vetorial, ele indica onde buscar os operandos e onde armazenar os resultados), incremento de endereço, off-set de endereço (deslocamento em relação ao endereço base, para acessar vetores deslocados em paralelo) , tamanho do vetor (para indicar o fim da operação dentro do vetor).

Abaixo segue um exemplo de instrução vetorial:

VADD.VV V1, V2, V3

A operação soma V2+V3 e salva o resultado em V1. Todos os operandos em questão são vetores.

Page 4: Arquitetura Vetorial

Exemplo de Aplicação

O processamento vetorial pode ser utilizado para tratamento de imagens, ou para operações que utilizem cálculos complexos, como previsão meteorológica entre outros. Um exemplo de dispositivo que utiliza processador vetorial, é o Play Station 3.

A NEC SX-6, utilizado para cálculo de simulações climáticas, é um exemplo da utilização de processadores vetoriais, na forma de NUMA.

Referências

[1] BERTACCHI, João E. F.; PAIVA, Marcelo O. de; KHOURY, Marcelo P. ARQUITETURAS VETORIAIS. Disponível em: < http://www.ic.unicamp.br/~rodolfo/Cursos/mc722/2s2004/g04-arquiteturas_vetoriais-texto.pdf>. Acesso em: 17 ago. 2013.

[2] SILVA, Gabriel P. ARQUITETURAS DE SISTEMAS DE PROCESSAMENTO PARALELO. Disponível em: < http://equipe.nce.ufrj.br/gabriel/sispar/ArqPar1.pdf>. Acesso em: 17 ago. 2103.