-
-
-
-
Antes de falarmos de Arquiteturas Paralelas vamos definir alguns termos:
Após as definições acima podemos dizer que “Arquiteturas Paralelas” fornecem uma estrutura explícita e de alto nível para o desenvolvimento de soluções utilizando o processamento paralelo. Isso ocorre através da existência de múltiplos processadores que cooperam para resolver problemas através de execução concorrente.
Estamos nos aproximando do limite da atual arquitetura de nossos computadores a “Arquitetura de von Neumann”. Em que não poderemos aumentar mais a velocidade de nossos processadores nesta arquitetura, diante disso como poderemos evoluir os computadores?
A resposta pode ser encontrada na comparação dos atuais computadores com o nosso cerebro. Se um neurônio é mais lento que um chip eletrônico, voce deve estar se perguntando como o nosso cérebro consegue se superior ao computador. Simples nós podemos ver o mundo em paralelo. Por exemplo, com um único olhar em uma sala identificamos imediatamente centenas de objetos. Já um computador, mesmo o mais sofisticado, apenas consegue identificar os objetos mais simples.Então por que em vez de tentar construir processadores cada vez mais velozes, não construimos computadores simples porém que operam em paralelo?[3]
Atualmente o mais perto de Arquiteturas Paralelas que um consumidor normal pode chegar é pelos os processadores multicores com o Intel Core 2 Duo e AMD Athlon X2
SISD(Single Instruction stream Single Data stream): é o caso das máquinas convencionais que possui apenas uma CPU (Uma unidade de processamento com uma unidade de controle).
SIMD(Single Instruction strem Multiple Data stream): corresponde ao caso das arquiteturas vetoriais onde a mesma operação é executada sobre múltiplos operandos.
MISD(Multiple Instruction stream Single Data stream): é o caso de um pipeline de processadores onde a medida que os são processados eles são passados para o processador seguinte. A proposta de implementação que mais se aproxima desta categoria é a da máquina de fluxo de dados. Porém ainda não existem computadores contruídos.
MIMD(Multiple Instruction Stream Multiple Data stream): é o caso dos multiprocessadores, onde várias instruções podem ser executadas ao mesmo tempo em unidades de processamento diferentes controladas por unidades de controle independentes (uma para cada unidade de processamento).
Um ponto importante que devemos observar é que o paralelismo existe além da Arquitetura Paralela.
MOLDOVAN [4] propôs a seguinte caracterização para a arquitetura dos computadores paralelos, utilizando os seguintes critérios:
complexidade do processador: refere-se do poder computacional e da estrutura interna de cada elemento de processamento. A complexidade do processador varia bastante de uma classe de arquitetura para outra.
modo de operação: refere-se tanto ao controle de instruções como à manipulação dos dados. O modo tradicional de operação é comando-por-fluxo(command-flow), em que a seqüência de eventos é controlada por comandos derivados do fluxo de instruções. Outro método é o modelo comando-por-dados (dataflow), o controle é determinado pela disponibilidade dos dados. E ainda existe o comando-por-demanda (demand-flow),no qual as computações ocorrem somente se seus resultados são solicitados por outras. Você ainda pode combinar os modelos.
estrutura da memória: refere-se ao modo de operação e à organização da memória do hardware paralelo. A memória pode ser acessada utilizando tanto endereços como conteúdo de dados.
rede de interconexão: diz respeito às conexões de hardware entre processadores, bem como destes com os bancos de memória.Computadores paralelos com redes de interconexão simples e/ou fixas conseguem ser eficientes para um determinado conjunto de tipos de algoritmos. Redes de interconexão complexas, ao contrário, podem ser configuradas para atender um ampla faixa de aplicações; naturalmente isto torna o hardware mais caro.
número de processadores/tamanho da memória:indica quantos processadores o sistema paralelo contém, e o tamanho da memória disponível.Como regra geral, um número maior de processadores confere à arquitetura um maior poder computacional, o que faculta ao sistema paralelo trabalhar com problemas mais complexos.
microprogramação horizontal: quanto maior o tamanho da microinstrução maior será o número de pontos que podem ser controlados diretamente pela microinstrução. Assim, é possível a execução em paralelo de mais de uma instrução de máquina, codificadas dentro da mesma microinstrução;
pré-busca de instrução: utilizada na técnica de pipeline de instruções que explora o paralelismo temporal para aumentar a taxa de execução de instruções;
processamento de operações de E/S em paralelo com instruções de CPU: aproveita a diferença de tempo entre as instruções de E/S e as instruções de CPU. Normalmente a máquina possui um processador dedicado a executar as instruções de E/S. Quando a CPU decodifica uma instrução de E/S, esta é passada para o processador de instruções de E/S e a CPU pode executar a próxima instrução;
execução em paralelo de instruções aritméticas: o ponto chave desta técnica consiste em subdividir a ULA da máquina em várias unidades funcionais, independentes e dedicadas a executar uma única instrução ou um conjunto bem restrito de instruções. Assim, se uma máquina possuir unidades funcionais de soma e de multiplicação, uma operação de soma poderá ser executada ao mesmo tempo que uma operação de multiplicação;
construção de programas paralelos: neste caso as linguagens de programação e os respectivos compiladores devem possuir características para que algoritmos paralelos possam ser escritos e executados de maneira eficiente, aproveitando as estruturas paralelas da arquitetura;
| Algoritmo Paralelo | Arquitetura Paralela |
| Granulosidade do módulo | Complexidade do processador |
| Controle da concorrência | Modo de operação |
| Mecanismo de dados | Estrutura da memória |
| Mecanismo de dados | Estrutura da memória |
| Tamanho do algoritmo | Número de processadores e tamanho da memória |
Características desejáveis de processadores para multiprocessamento:
Recuperabilidade do processo: deve ser possível para um outro processador, em caso de falha, recuperar o estado do processo interrompido e reiniciar o processo.
Troca eficiente de contexto: a troca de contexto consiste em salvar o estado de um processo ativo em um processador, interrompê-lo e carregar um outro processo no processador.
Espaço de endereçamento virtual e físico grandes: quanto maior for a capacidade de memória da máquina, melhor. Pois o número de processos e a área de memória requerida tende a ser grande.
Primitivas de sincronização: as primitivas de sincronização são utilizadas para prover a comunicação entre os processadores e implementar exclusão mútua de recursos.
Mecanismo de comunicação entre os processadores: devem existir instruções específicas para prover a comunicação entre os processadores, seja usando mensagens ou usando memória compartilhada.
Como medir o quanto se ganhou com a execução de uma tarefa em um computador paralelo? É intuitivo que devemos usar o tempo de execução para medir esse desempenho, já que nosso principal objetivo é aumentar a velocidade de processamento. Uma solução boa é verificarmos a relação entre os tempos gastos para executar essa tarefa em um computador serial e em um computador paralelo.[3]
O ideal é que um aumento no número de processadores traga um igual aumento de desempenho (GV). A Figura abaixo apresenta 4 casos, onde se calcula o Ganho de Processamento em função do número de processadores. A curva em vermelho mostra o caso ideal, onde há um ganho linear em função do número de processadores. A curva em verde traz um caso mais real onde o ganho não acompanha a quantidade de processadores, ou seja, ao dobramos a quantidade de processadores, não dobramos o ganho de velocidade. A curva em azul traz um caso de saturação em 85 processadores, ou seja, é inútil utilizar mais do que 85 processadores. A curva em negro apresenta um caso ainda pior, pois nota-se que há um limite em 25 processadores, qualquer processador que se adicione além desse valor, só atrasará o processamento.
Assim, um tópico interessante é determinar qual a quantidade ótima de processadores para uma determinada tarefa. É claro que esse valor é fortemente influenciado pelo algoritmo e pela técnica de programação empregada. A arquitetura paralela também influencia muito. Por exemplo, algumas arquiteturas têm gargalos para a comunicação entre os processadores e outras penalizam muito os acessos à memória global. É claro que nem toda tarefa é indicada para ser executada em máquinas paralelas, como veremos no próximo tópico.
Tendências atuais na construção de máquinas paralelas:[6]
È uma área em pleno desenvolvimento, ainda mais com a chegada dos processadores multicores para consumidor. Porem com as pesquisas em GPCU combinada com esta tecnologia descrita teremos ótimas maquinas com grande poder de processamento. Infelizmente as faculdades não estão preparando os alunos para programação em paralelo.