imported>Fargoud |
imported>Fargoud |
| (22 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) |
| Linha 81: |
Linha 81: |
| '''Exemplos:''' | | '''Exemplos:''' |
| * Arquiteturas paralelas atuais | | * Arquiteturas paralelas atuais |
| * Top500.org | | * [https://www.top500.org/ Top500.org] |
|
| |
|
| [[image: MIPparal5.png|center]] | | [[image: MIPparal5.png|center]] |
| Linha 88: |
Linha 88: |
| Em uma organização MIMD, os processadores são de propósito geral; cada um pode processar todas as instruções necessárias para realizar a transformação de dados apropriada. | | Em uma organização MIMD, os processadores são de propósito geral; cada um pode processar todas as instruções necessárias para realizar a transformação de dados apropriada. |
|
| |
|
| | =Outras classificações para Paralelismo= |
|
| |
|
| Neste momento, é importante diferenciar entre duas abordagens: os '''PROCESSADORES PARALELOS''' e os '''SISTEMAS PARALELOS'''.
| | Há várias fontes de execução paralela em um computador moderno. |
|
| |
|
| Processadores paralelos, ou '''SUPERESCALARES''', exploram o paralelismo em '''''nível de instruções''''', isto é, de maneira a executar mais de uma instrução por ciclo de clock, em unidades diferentes.
| | ==Paralelismo no Nível de Instrução (ILP)== |
|
| |
|
| Este tipo de processador decodifica múltiplas instruções de uma vez e o resultado de instruções de desvio condicional são geralmente ''preditas antecipadamente'', durante a fase de busca, para assegurar um fluxo ininterrupto.
| | Permite executar várias instruções em cada ciclo de relógio. |
|
| |
|
| Sistemas paralelos, ou '''DISTRIBUÍDOS''' consistem basicamente da distribuição de tarefas entre vários processadores, ao mesmo tempo.
| | Modificações na microarquitetura do processador para possibilitar a execução paralela de instruções. |
|
| |
|
| Podem ser processadores ou computadores distintos, ou mesmo conjuntos de componentes interligados em rede que cooperam para realizar um conjunto de tarefas.
| | Abordagens: |
| | * Paralelismo temporal: encadeamento no fluxo de execução das instruções (pipeline); |
| | * Paralelismo na emissão de instruções: submissão de várias instruções para execução pelo fluxo de dados (VLIW - ''very long instruction line'' (128 bits) e superescalaridade); |
| | * Paralelismo de dados: permite executar várias instâncias da mesma instrução para um conjunto de dados (processamento SIMD ou vetorial). |
|
| |
|
| | [[image: MIPparalel6.png|center]] |
|
| |
|
| | ==Pipelining== |
|
| |
|
| =Arquiteturas de processador Superescalares=
| |
|
| |
|
| Processadores Superescalares são todos os que possuem mais de uma unidade funcional em cada ''pipeline'', as quais permitem a execução de mais de uma instrução simultaneamente (no mesmo ciclo de ''clock'').
| | [[image: MIPparalel7.png|center]] |
|
| |
|
| Por si só, a arquitetura pipeline já permite que diversas instruções sejam executadas ao mesmo tempo, desde que estejam em estágios diferentes do pipeline.
| |
|
| |
|
| | [[image: MIPparalel8.png|center]] |
|
| |
|
| [[image: MIPprocpipelined.png|center]]
| |
|
| |
|
|
| |
|
| Na arquitetura superescalar, várias instruções podem ser iniciadas simultaneamente e executadas independentemente umas das outras.
| |
|
| |
|
| A partir do Pentium, a maioria dos processadores para computadores pessoais atualmente são superescalares.
| | =Arquiteturas de processador Superescalares= |
|
| |
|
| Isto é obtido através da implementação de múltiplas unidades funcionais, que são unidades onde as instruções são executadas.
| |
|
| |
|
| | Processadores Superescalares são todos os que possuem mais de uma unidade funcional em cada ''pipeline'', as quais permitem a execução de mais de uma instrução simultaneamente (no mesmo ciclo de ''clock''). |
|
| |
|
| [[image: MIPprocsuperesc.png|center]]
| | A arquitetura pipeline já permite que diversas instruções sejam executadas ao mesmo tempo, desde que estejam em '''estágios diferentes do pipeline'''. |
|
| |
|
| | Porém, ainda que várias instruções sejam executadas concorrentemente (em cada estágio do pipeline), apenas uma instrução encontra-se na fase de execução, ou seja, o sistema continua sendo SISD. |
|
| |
|
|
| |
|
| O Pentium, por exemplo, trabalha internamente como se fosse composto por dois processadores de 32 bits distintos (chamados de pipeline U e pipeline V), sendo capaz de processar duas instruções por ciclo de clock (uma em cada processador).
| | [[image: MIPprocpipelined.png|center]] |
|
| |
|
| Cada processador possui acesso total ao cache, à memória RAM, e aos demais componentes do micro.
| |
|
| |
|
| Foi incluída também, uma unidade de controle, com a função de comandar o funcionamento dos dois processadores e dividir as tarefas entre eles.
| | Já na arquitetura superescalar, várias instruções podem ser iniciadas simultaneamente e executadas independentemente umas das outras. |
|
| |
|
| Teoricamente, o uso de dois processadores distintos dobraria o desempenho do Pentium, já que ao invés de uma, poderiam ser executadas duas instruções por ciclo de clock. Mas, na prática existem algumas limitações.
| | A partir do Pentium, a maioria dos processadores para computadores pessoais atualmente são superescalares. |
|
| |
|
| Se por exemplo, um programa ordena que o processador some 4 números, X + Y + W + K, o processador poderia no primeiro ciclo de clock usar o pipeline U para somar X e Y e o pipeline V para somar W, mas no segundo ciclo, haveria apenas mais um cálculo para ser executado, o resultado das duas somas.
| | Isto é obtido através da implementação de '''múltiplas unidades funcionais''', que são unidades onde as instruções são executadas. |
|
| |
|
| Neste caso, apenas um dos pipelines poderia ser usado; o segundo ficaria ocioso.
| |
|
| |
|
| No final das contas, houve um ganho de 33%, já que ao invés do processador demorar 3 ciclos para executar o cálculo, demorou apenas 2.
| | [[image: MIPprocsuperesc.png|center]] |
|
| |
|
| Em média, a segunda canalização permite um desempenho 30 ou 40% superior ao desempenho obtido com apenas uma canalização.
| |
|
| |
|
| Caso o software seja alterado e otimizado para rodar em um processador com dois pipelines, ordenando as instruções de modo a deixar o segundo pipeline ocupado durante a maior parte do tempo, podemos conseguir mais 10 ou 15% de desempenho, chegando a algo entre 40 e 50%, mas, jamais será possível conseguir o dobro de desempenho.
| | O Pentium, por exemplo, trabalha internamente '''como se fosse composto por dois processadores de 32 bits distintos''' (chamados de ''pipeline U'' e ''pipeline V''), sendo capaz de processar duas instruções por ciclo de clock (uma em cada pipeline). |
|
| |
|
| As arquiteturas superescalares incluem todos os aspectos do pipeline e ainda acrescentam o fato de as instruções poderem estar executando no mesmo estágio do pipelining (em linhas pipelining diferentes). Assim, elas têm a habilidade de iniciarem múltiplas instruções no mesmo ciclo de clock. A forma como estão dispostas e utilizadas as estruturas e os componentes do processador define o modelo da arquitetura de um processador. Há diversas classificações de arquiteturas de processadores baseadas nas suas políticas e nos caminhos de execução dos dados.
| |
|
| |
|
| Uma arquitetura superescalar deve possuir uma série de componentes especiais para executar mais de uma instrução por ciclo:
| | As arquiteturas superescalares incluem todos os aspectos do pipeline e ainda acrescentam o fato de as instruções poderem estar executando no mesmo estágio do ''pipelining'' (em linhas pipelining diferentes). |
|
| |
|
| Assim, como arquiteturas “Pipelined”, com Desempenho
| |
| Superior ao de uma Instrução por Ciclo foram propostas as seguintes metodologias:
| |
|
| |
|
| * Arquiteturas Superescalares - Execução de múltiplas instruções, escalonadas por ''hardware'' e/ou ''software'', concorrentemente.
| | Cada processador possui acesso total ao cache, à memória RAM, e aos demais componentes do micro. |
|
| |
|
| * Arquiteturas VLIW (Very Long Instruction Word) - Execução de múltiplas operações, escalonadas por “software”, concorrentemente.
| | Foi incluída também, uma unidade de controle, com a função de comandar o funcionamento dos dois processadores e dividir as tarefas entre eles. |
|
| |
|
| * Arquiteturas Multithreading e SMT - Executam instruções de mais de um fluxo (''threads'') simultaneamente.
| |
|
| |
|
| * Arquiteturas Multicore - Combinação de vários processadores de um mesmo tipo (acima descrito) em uma única pastilha.
| | '''Observação:''' |
| | Teoricamente, o uso de dois processadores distintos dobraria o desempenho do Pentium, já que ao invés de uma, poderiam ser executadas duas instruções por ciclo de clock. Mas, na prática existem algumas limitações. |
| | Se por exemplo, um programa ordena que o processador some 4 números, X + Y + W + K, o processador poderia no primeiro ciclo de clock usar o pipeline U para somar X e Y e o pipeline V para somar W, mas no segundo ciclo, haveria apenas mais um cálculo para ser executado, o resultado das duas somas. |
| | Neste caso, apenas um dos pipelines poderia ser usado; o segundo ficaria ocioso. |
| | No final das contas, houve um ganho de 33%, já que ao invés do processador demorar 3 ciclos para executar o cálculo, demorou apenas 2. |
|
| |
|
| a principal diferença entre processadores superescalares (despacho multiplo dinamico) e VLIW/EPIC (despacho multiplo estatico), é que no estatico muitas das decisões são formadas pelo compilador antes de executar o programa, e o dinamico são tomadas pelo processador no momento da execução.
| | Assim, em média, a segunda canalização permite um desempenho 30 ou 40% superior ao desempenho obtido com apenas uma canalização. |
|
| |
|
| | Caso o software seja alterado e otimizado para rodar em um processador com dois pipelines, ordenando as instruções de modo a deixar o segundo pipeline ocupado durante a maior parte do tempo, podemos conseguir mais 10 ou 15% de desempenho, chegando a algo entre 40 e 50%, mas, jamais será possível conseguir o dobro de desempenho. |
|
| |
|
| | ==Dependência de desvios== |
|
| |
|
| | A presença de desvios condicionais em uma seqüência de instruções complica a operação do pipeline. |
|
| |
|
| | A instrução seguinte a um desvio condicional (tomado ou não) depende dessa instrução de desvio. |
|
| |
|
| | Esse tipo de dependência também afeta uma pipeline escalar, mas a conseqüência desse tipo de dependência é mais severa em uma pipeline superescalar, porque o número de instruções perdidas em cada atraso é maior. |
|
| |
|
| | Se forem usadas instruções de tamanho variável, surge ainda um outro tipo de dependência. |
|
| |
|
| | Como o tamanho de uma instrução particular não é conhecido, uma instrução deve ser decodificada, pelo menos parcialmente, antes que a instrução seguinte possa ser buscada. |
|
| |
|
| | Isso impede a busca simultânea de instruções, requerida em uma pipeline superescalar. |
|
| |
|
| | Essa é uma das razões pelas quais técnicas supersescalares são mais diretamente aplicáveis a arquiteturas RISC ou do tipo RISC, que possuem instruções de tamanho fixo. |
|
| |
|
| Unidade de Busca de Instruções: capaz de buscar mais de uma instrução por ciclo. Possui também um preditor de desvios, que deve ter alta taxa de acerto, para poder buscar as instruções sem ter que esperar pelo resultados dos desvios.
| | ==Conflito de recursos== |
| Unidade de Decodificação: capaz de ler vários operandos do banco de registradores a cada ciclo. Note que cada instrução sendo decodificada pode ler até dois operandos do banco de registradores.
| |
| Unidades Funcionais Inteiras e de Ponto Flutuante: em número suficiente para executar as diversas instruções buscadas e decodificadas a cada ciclo.
| |
| Superescalar x superpipeline
| |
| Uma técnica alternativa para atingir alta performance no processamento é intitulada como superpipelined - termo utilizado pela primeira vez em 1988. Essa técnica explora o fato de que o estágio de pipeline executa tarefas que requerem menos de meio ciclo de clock. Assim, um processador com velocidade de clock interno dobrada, permite um aumento de performance de duas tarefas executadas em um único ciclo de clock externo.
| |
|
| |
|
| Por exemplo: Uma máquina usando pipeline básico executa uma instrução por ciclo de clock e tem e um estágio de pipeline por clock também. O pipeline tem quatro estágios: busca, decodificação, execução e armazenamento do resultado. Ainda que várias instruções sejam executadas concorrentemente, apenas uma instrução encontra-se na fase de execução.
| | Um conflito de recurso ocorre quando duas ou mais instruções competem, ao mesmo tempo, por um mesmo recurso. |
|
| |
|
| A implementação superpipelined é capaz de executar duas fases da pipeline de cada vez. Um forma alternativa de observa-lo passa por perceber que as instruções
| | Exemplos de recursos incluem memórias, caches, barramentos, portas de bancos de registradores e unidades funcionais (por exemplo, o somador da ULA). |
|
| |
|
| executadas em cada fase podem ser divididas em duas partes, não sobrepostas, onde cada fase é executada em meio ciclo de clock. Uma implementação superpipelined com este comportamento denomina-se de grau 2. Esta imagem retrata bem as diferenças entre as duas implementações mencionadas.
| | Em termos de pipeline, um conflito de recurso apresenta um comportamento semelhante ao de uma dependência de dados. |
|
| |
|
| A implementação superescalar pode executar duas instruções em paralelo, devido ao facto de existirem duas fases homólogas.
| | Existem, entretanto, algumas diferenças. |
|
| |
|
| Ambas as implementações possuem o mesmo número de instruções executadas ao mesmo tempo, no mesmo estado.
| | Por um lado, conflitos de recursos podem ser superados pela duplicação de recursos, enquanto uma dependência de dados não pode ser eliminada. |
|
| |
|
| Limitações
| | Além disso, quando uma operação efetuada em uma dada unidade funcional consome muito tempo para ser completada, é possível minimizar os conflitos de uso dessa unidade por meio de sua implementação como uma pipeline. |
| A abordagem superescalar depende da habilidade de executar várias instruções em paralelo. O termo paralelismo no nível de instruções diz respeito ao nível no qual as instruções de um programa podem ser executadas de forma paralela (em média).
| |
|
| |
|
| Dependência de dados verdadeira (true data dependency)
| | =Multiprocessadores simétricos= |
| Considere a seguinte seqüência de instruções:
| |
|
| |
|
| add r1, r2 # carregar registrador r1 com a soma dos conteúdos de r1 e r2
| | Até muito recentemente, quase todos os computadores pessoais e a maioria das estações de trabalho continham um único microprocessador de uso geral. |
| move r1, r3 # carregar registrador r3 com o conteúdo de r1
| |
|
| |
|
| A segunda instrução pode ser buscada e decodificada antecipadamente, mas não pode ser executada até que seja completada a execução da primeira instrução. A razão é que ela depende do dado produzido pela primeira. Essa situação é denominada como dependência de dados verdadeira (também chamada de dependência de fluxo ou dependência de escrita-leitura).
| | Com a crescente demanda por desempenho e a contínua queda do custo dos microprocessadores, os fabricantes introduziram os sistemas SMP. |
|
| |
|
| Dependência de desvios
| | A denominação SMP refere-se tanto à arquitetura de hardware do computador, quanto ao comportamento do sistema operacional sobre esta arquitetura. |
| A presença de desvios condicionais em uma seqüência de instruções complica a operação do pipeline. A instrução seguinte a um desvio condicional (tomado ou não) depende dessa instrução de desvio. Esse tipo de dependência também afeta uma pipeline escalar, mas a conseqüência desse tipo de dependência é mais severa em uma pipeline superescalar, porque o número de instruções perdidas em cada atraso é maior. Se forem usadas instruções de tamanho variável, surge ainda um outro tipo de dependência. Como o tamanho de uma instrução particular não é conhecido, uma instrução deve ser decodificada, pelo menos parcialmente, antes que a instrução seguinte possa ser buscada. Isso impede a busca simultânea de instruções, requerida em uma pipeline superescalar. Essa é uma das razões pelas quais técnicas supersescalares são mais diretamente aplicáveis a arquiteturas RISC ou do tipo RISC, que possuem instruções de tamanho fixo. | |
|
| |
|
| Conflito de recursos
| | Um computador SMP pode ser definido como: |
| Um conflito de recurso ocorre quando duas ou mais instruções competem, ao mesmo tempo, por um mesmo recurso. Exemplos de recursos incluem memórias, caches, barramentos, portas de bancos de registradores e unidades funcionais (por exemplo, o somador da ULA). Em termos de pipeline, um conflito de recurso apresenta um comportamento semelhante ao de uma dependência de dados. Existem, entretanto, algumas diferenças. Por um lado, conflitos de recursos podem ser superados pela duplicação de recursos, enquanto uma dependência de dados não pode ser eliminada. Além disso, quando uma operação efetuada em uma dada unidade funcional consome muito tempo para ser completada, é possível minimizar os conflitos de uso dessa unidade por meio de sua implementação como uma pipeline.
| | # Existem dois ou mais processadores similares, com capacidade de processamento comparável; |
| | # Estes dois processadores compartilham a mesma memória principal e dispositivos de E/S, e são conectados por barramento interno, de forma que o tempo de acesso à memória em todos é praticamente o mesmo; |
| | # Todos os processadores compartilham acesso aos dispositivos de E/S; |
| | # Todos os processadores são capazes de desempenhar as mesmas funções; |
| | # Tudo é controlado por um sistema operacional integrado, que provê interação entre os processadores e seus programas, em nível de tarefas, de arquivos e de dados. |
|
| |
|
| Arquiteturas Superescalares
| | O sistema operacional (SO) é quem efetua o escalonamento de processos ou fluxos de execução (ou ''threads''), sobre todos os processadores. |
| Organizadas internamente como múltiplos “pipelines”
| |
| e com banco de registradores com múltiplas portas de
| |
| leitura e de escrita, com múltiplas instruções iniciadas
| |
| e terminadas a cada ciclo. O grau de concorrência das
| |
| instruções situa-se na prática entre 2 e 4.
| |
| As instruções são despachadas para execução
| |
| somente quando não violam regras de dependência de
| |
| dados, de controle e quando não existem conflitos
| |
| estruturais.
| |
| • O escalonamento das instruções pode ser feito por
| |
| “software” e/ou por “hardware”.
| |
| • O código objeto para estas arquiteturas é compatível
| |
| com o de arquiteturas escalares convencionais.
| |
| Arquiteturas Superescalares
| |
| Capacidade para realizar busca e decodificação
| |
| de múltiplas instruções por ciclo;
| |
| Existência de uma Janela de Instruções que isola
| |
| os estágios de busca e decodificação dos estágios
| |
| de execução propriamente dita da instrução | |
| modelo de despacho fora-de-ordem:
| |
| Janela Centralizada
| |
| Estações de Reserva (Algoritmo de
| |
| Tomasulo)
| |
| Esquemas eficientes de predição dinâmica de
| |
| desvios;
| |
| Arquiteturas Superescalares
| |
| Recuperação do estado da máquina em caso de
| |
| exceções ou de previsões erradas de desvios
| |
| Reorder Buffer;
| |
| Remoção de dependências de dados
| |
| Scoreboarding, Tomasulo e/ou Renomeação
| |
| Dinâmica;
| |
| Lógica de despacho concorrente para as
| |
| instruções armazenadas na Janela de I
| |
| Arquiteturas Superescalares
| |
| Múltiplos barramentos para comunicação de
| |
| operandos e resultados e Banco de Registradores com
| |
| múltiplas portas de leitura e de escrita, incluindo a
| |
| existência de lógica de arbitração se o número de
| |
| recursos é menor que o máximo possivelmente
| |
| necessário;
| |
| Múltiplas unidades funcionais: ALU, Ponto Flutuante,
| |
| Desvio, Load/Store;
| |
| Suporte para tratamento de dependência de dados
| |
| entre instruções de load e store;
| |
| A figura a seguir mostra um diagrama de blocos de
| |
| um estrutura típica de uma arquitetura superescalar.
| |
|
| |
|
| Busca e Decodificação
| | Neste momento, é importante diferenciar entre as duas abordagens: os '''processadores paralelos''' e os '''sistemas paralelos'''. |
| A arquitetura superescalar só é efetiva se a taxa
| |
| média com que as instruções são buscadas e
| |
| decodificadas for superior à taxa média com que
| |
| instruções são executadas.
| |
| Esquema eficiente de predição de desvios é
| |
| fundamental.
| |
| Necessidade de se dispor de um barramento de
| |
| acesso ao cache de instruções com largura adequada e
| |
| de um decodificador de instruções capaz de decodificar
| |
| múltiplas instruções simultaneamente.
| |
| Um decodificador de múltiplas instruções demanda a
| |
| realização da busca de vários operandos em paralelo
| |
| o banco de registradores com múltiplas portas de
| |
| leitura.
| |
| Degradação do Desempenho da Operação
| |
| de Busca de Instruções
| |
| Falha no acesso à cache de instruções:
| |
| Bem mais do que um ciclo é gasto para a busca do
| |
| próximo conjunto de instruções.
| |
| Predição errada de desvios:
| |
| As instruções buscadas antecipadamente
| |
| mostram-se inúteis e novas instruções terão que
| |
| ser buscadas.
| |
| Alternativa possível: busca simultânea de
| |
| instruções de dois ou mais caminhos possíveis do
| |
| código a cada desvio condicional aumento no
| |
| custo de hardware (cache de instruções com
| |
| múltiplas portas de acesso).
| |
| Degradação do Desempenho da Operação
| |
| de Busca de Instruções
| |
| Desalinhamento do endereço das instruções alvo
| |
| de um desvio em relação ao início de um bloco de
| |
| cache:
| |
| Menos instruções úteis são efetivamente buscadas
| |
| “slots” de decodificação podem ficar subtilizados
| |
| se a unidade de busca não for capaz de realinhar as
| |
| instruções antes de passá-las à unidade de
| |
| decodificação.
| |
|
| |
|
| =Arquitetura Superescalar=
| | Como já foi visto, processadores paralelos, ou superescalares, exploram o paralelismo em '''nível de instruções''', isto é, de maneira a executar mais de uma instrução por ciclo de clock, em unidades diferentes de um mesmo processador. |
|
| |
|
| Na arquitetura superescalar, várias instruções podem ser iniciadas simultaneamente e executadas independentemente umas das outras. A arquitetura pipeline permite que diversas instruções sejam executadas ao mesmo tempo, desde que estejam em estágios diferentes do pipeline.
| | Já os sistemas paralelos, ou '''DISTRIBUÍDOS''' aonde se enquadram os computadores SMP, consistem basicamente da distribuição de tarefas entre vários processadores, ao mesmo tempo. |
|
| |
|
| As arquiteturas superescalares incluem todos os aspectos do pipeline e ainda acrescentam o fato de as instruções poderem estar executando no mesmo estágio do pipelining (em linhas pipelining diferentes). Assim, elas têm a habilidade de iniciarem múltiplas instruções no mesmo ciclo de clock. A forma como estão dispostas e utilizadas as estruturas e os componentes do processador define o modelo da arquitetura de um processador. Há diversas classificações de arquiteturas de processadores baseadas nas suas políticas e nos caminhos de execução dos dados.
| | Podem ser processadores ou computadores distintos, ou mesmo conjuntos de componentes interligados em rede que cooperam para realizar um conjunto de tarefas. |
|
| |
|
| Uma arquitetura superescalar deve possuir uma série de componentes especiais para executar mais de uma instrução por ciclo:
| | ==Vantagens== |
|
| |
|
| Unidade de Busca de Instruções: capaz de buscar mais de uma instrução por ciclo. Possui também um preditor de desvios, que deve ter alta taxa de acerto, para poder buscar as instruções sem ter que esperar pelo resultados dos desvios.
| | A arquitetura SMP tem uma série de vantagens sobre uma arquitetura uniprocessador: |
| Unidade de Decodificação: capaz de ler vários operandos do banco de registradores a cada ciclo. Note que cada instrução sendo decodificada pode ler até dois operandos do banco de registradores.
| |
| Unidades Funcionais Inteiras e de Ponto Flutuante: em número suficiente para executar as diversas instruções buscadas e decodificadas a cada ciclo.
| |
| Superescalar x superpipeline
| |
| Uma técnica alternativa para atingir alta performance no processamento é intitulada como superpipelined - termo utilizado pela primeira vez em 1988. Essa técnica explora o fato de que o estágio de pipeline executa tarefas que requerem menos de meio ciclo de clock. Assim, um processador com velocidade de clock interno dobrada, permite um aumento de performance de duas tarefas executadas em um único ciclo de clock externo.
| |
|
| |
|
| Por exemplo: Uma máquina usando pipeline básico executa uma instrução por ciclo de clock e tem e um estágio de pipeline por clock também. O pipeline tem quatro estágios: busca, decodificação, execução e armazenamento do resultado. Ainda que várias instruções sejam executadas concorrentemente, apenas uma instrução encontra-se na fase de execução.
| | * Desempenho - se o trabalho efetuado pelo computador pode ser organizado de forma que algumas porções desse trabalho possam ser feitas em paralelo, então um sistema com múltiplos processadores resulta em maior desempenho que um sistema uniprocessador; |
| | * Disponibilidade - em um multiprocessador simétrico, como todos os processadores são similares e ativos, uma falha em um deles não ocasiona a parada de todo o sistema; |
| | * Crescimento incremental - o usuário pode aumentar o desempenho do sistema adicionando mais processadores; |
| | * Escalabilidade - fabricantes podem oferecer uma larga faixa de produtos, com características de desempenho e custo diferentes, com base no número de processadores configurados para o sistema. |
|
| |
|
| A implementação superpipelined é capaz de executar duas fases da pipeline de cada vez. Um forma alternativa de observa-lo passa por perceber que as instruções
| | ==Desvantagem== |
|
| |
|
| executadas em cada fase podem ser divididas em duas partes, não sobrepostas, onde cada fase é executada em meio ciclo de clock. Uma implementação superpipelined com este comportamento denomina-se de grau 2. Esta imagem retrata bem as diferenças entre as duas implementações mencionadas.
| | A principal desvantagem da arquitetura SMP é o da coerência de cache. Cada processador possui sua própria memória cache e é possível que uma determinada linha de dados esteja presente em mais de uma delas. |
|
| |
|
| A implementação superescalar pode executar duas instruções em paralelo, devido ao facto de existirem duas fases homólogas.
| | Se esta linha for alterada, então, tanto a memória principal como todas as demais caches terão uma versão inválida desta linha. |
|
| |
|
| Ambas as implementações possuem o mesmo número de instruções executadas ao mesmo tempo, no mesmo estado.
| | Estratégia: [https://pt.wikipedia.org/wiki/Protocolo_MESI protocolo MESI] |
|
| |
|
| Limitações
| | =Clusters= |
| A abordagem superescalar depende da habilidade de executar várias instruções em paralelo. O termo paralelismo no nível de instruções diz respeito ao nível no qual as instruções de um programa podem ser executadas de forma paralela (em média).
| |
|
| |
|
| Dependência de dados verdadeira (true data dependency)
| | É uma das áreas mais promissoras de projeto de sistemas de computação da atualidade. |
| Considere a seguinte seqüência de instruções:
| |
|
| |
|
| add r1, r2 # carregar registrador r1 com a soma dos conteúdos de r1 e r2
| | [https://pt.wikipedia.org/wiki/Cluster '''''Clusters'''''] são agregados, ou aglomerados de computadores completos interconectados, trabalhando juntos, como um recurso de computação unificado que cria a ilusão de se constituir em uma única máquina. |
| move r1, r3 # carregar registrador r3 com o conteúdo de r1
| |
|
| |
|
| A segunda instrução pode ser buscada e decodificada antecipadamente, mas não pode ser executada até que seja completada a execução da primeira instrução. A razão é que ela depende do dado produzido pela primeira. Essa situação é denominada como dependência de dados verdadeira (também chamada de dependência de fluxo ou dependência de escrita-leitura).
| | Cada computador completo do cluster é chamado de ''nó''. |
|
| |
|
| Dependência de desvios
| | Estes nós de processamento (não necessariamente homogêneos) atuam de maneira que um processo de grande consumo seja executado no nó "mais disponível", ou mesmo subdividido por vários nós. |
| A presença de desvios condicionais em uma seqüência de instruções complica a operação do pipeline. A instrução seguinte a um desvio condicional (tomado ou não) depende dessa instrução de desvio. Esse tipo de dependência também afeta uma pipeline escalar, mas a conseqüência desse tipo de dependência é mais severa em uma pipeline superescalar, porque o número de instruções perdidas em cada atraso é maior. Se forem usadas instruções de tamanho variável, surge ainda um outro tipo de dependência. Como o tamanho de uma instrução particular não é conhecido, uma instrução deve ser decodificada, pelo menos parcialmente, antes que a instrução seguinte possa ser buscada. Isso impede a busca simultânea de instruções, requerida em uma pipeline superescalar. Essa é uma das razões pelas quais técnicas supersescalares são mais diretamente aplicáveis a arquiteturas RISC ou do tipo RISC, que possuem instruções de tamanho fixo.
| |
| | |
| Conflito de recursos
| |
| Um conflito de recurso ocorre quando duas ou mais instruções competem, ao mesmo tempo, por um mesmo recurso. Exemplos de recursos incluem memórias, caches, barramentos, portas de bancos de registradores e unidades funcionais (por exemplo, o somador da ULA). Em termos de pipeline, um conflito de recurso apresenta um comportamento semelhante ao de uma dependência de dados. Existem, entretanto, algumas diferenças. Por um lado, conflitos de recursos podem ser superados pela duplicação de recursos, enquanto uma dependência de dados não pode ser eliminada. Além disso, quando uma operação efetuada em uma dada unidade funcional consome muito tempo para ser completada, é possível minimizar os conflitos de uso dessa unidade por meio de sua implementação como uma pipeline.
| |
| | |
| =Sistemas paralelos=
| |
| | |
| Um sistema de processamento distribuído ou paralelo é um sistema que interliga vários nós de processamento (computadores individuais, não necessariamente homogêneos), de maneira que um processo de grande consumo seja executado no nó "mais disponível", ou mesmo subdividido por vários nós.
| |
|
| |
|
| [[image: MIPprocparal.png|center]] | | [[image: MIPprocparal.png|center]] |
|
| |
|
| | Cada nó tem sua própria memória local (não compartilhada) |
| | * Comunicação por troca de mensagens |
| | * Conceito cliente-servidor |
|
| |
|
| Conseguindo-se, portanto, ganhos óbvios nestas soluções: uma tarefa qualquer, se divisível em várias subtarefas pode ser realizada em paralelo.
| | [https://www.opservices.com.br/o-que-e-um-cluster/ Tipos de Cluster] |
| | |
| A nomenclatura geralmente utilizada neste contexto é HPC (High Performance Computing) e/ou DPC (Distributed/Parallel Computing).
| |
| | |
| | |
| Definição
| |
| Um sistema distribuído segundo a definição de Andrew Tanenbaum é uma "coleção de computadores independentes entre si que se apresenta ao usuário como um sistema único e coerente";[1] outra definição, de George Coulouris, diz: "coleção de computadores autônomos interligados através de uma rede de computadores e equipados com software que permita o compartilhamento dos recursos do sistema: hardware, software e dados"[carece de fontes].
| |
| | |
| Assim, a computação distribuída consiste em adicionar o poder computacional de diversos computadores interligados por uma rede de computadores. A união desses diversos computadores com o objetivo de compartilhar a execução de tarefas, é conhecida como sistema distribuído.
| |
|
| |
|
| Organização
| | Outro link: [https://www.infowester.com/cluster.php] |
| Organizar a interação entre cada computador é primordial. Visando poder usar o maior número possível de máquinas e tipos de computadores, o protocolo ou canal de comunicação não pode conter ou usar nenhuma informação que possa não ser entendida por certas máquinas. Cuidados especiais também devem ser tomados para que as mensagens sejam entregues corretamente e que as mensagens inválidas sejam rejeitadas, caso contrário, levaria o sistema a cair ou até o resto da rede.
| |
|
| |
|
| Outro fator de importância, é a habilidade de mandar softwares para outros computadores de uma maneira portável de tal forma que ele possa executar e interagir com a rede existente. Isso pode não ser possível ou prático quando usando hardware e recursos diferentes, onde cada caso deve ser tratado separadamente com cross-compiling ou reescrevendo software.
| | [[image: MIPcluster.png|center]] |
|
| |
|
| Modelos de computação distribuída
| |
| Peer-to-peer (P2P)
| |
| Ver artigo principal: Peer-to-peer Ponto-a-Ponto
| |
| É uma arquitetura de sistemas distribuídos caracterizada pela descentralização das funções na rede, onde cada nó realiza tanto funções de servidor quanto de cliente.
| |
|
| |
|
| Objetos distribuídos
| | ==Vantagens== |
| Semelhante ao peer-to-peer (do inglês peer-to-peer, que significa ponto-a-ponto) é um formato de rede de computadores em que a principal característica é descentralização das funções convencionais de rede, onde o computador de cada usuário conectado acaba por realizar funções de servidor e de cliente ao mesmo tempo.
| |
|
| |
|
| Seu principal objetivo é a transmissão de arquivos e seu surgimento possibilitou o compartilhamento em massa de músicas e filmes. Com a crescente utilização da rede P2P para este fim, cada vez mais surgem programas para este fim, porém nem sempre eles atendem às expectativas do usuário.
| | * Escalabilidade |
| | * Alta disponibilidade |
| | * Melhor relação custo/desempenho |
|
| |
|
| Diversas redes operam hoje em dia nestes moldes de compartilhamento, entre elas Kademlia, Gnutela, Kad Network e SoulSeek. Alguns programas valem a pena ser citados quando o assunto é compartilhamento P2P: μTorrent, BitTorrent, SoulSeek, Ares Galaxy, Shareaza, DreaMule, iMesh e Morpheus. Caso prefira, acesse a categoria de Compartilhadores P2P do Baixaki e conheça mais programas que operam deste modo.
| | ==Desvantagens== |
|
| |
|
| Mas com um Middleware intermediando o processo de comunicação.
| | * Difícil programação |
| | * Modelo de programação diferente |
|
| |
|
| Hardware
| | =Acesso não-Uniforme à Memória (NUMA)= |
| A organização do hardware em sistemas com várias UCPs se dá por:
| |
|
| |
|
| =Sistemas paralelos= | | NUMA = Non-Uniform Memory Acess |
|
| |
|
| Uma maneira tradicional de aumentar o desempenho de um sistema de computador é usar vários processadores, que possam executar em paralelo para poder suportar uma dada carga de trabalho.
| | Em um sistema SMP, existe um limite prático para o número de processadores que podem ser usados. A degradação de desempenho causada pelo gargalo dos barramentos parece limitar o número de processadores em uma configuração SMP a algum valor entre 16 e 64 processadores. |
|
| |
|
| As duas organizações de múltiplos processadores mais comuns são a de multiprocessadores simétricos (SMPs) e a de agregados (''clusters'').
| | Esta é a principal motivação do desenvolvimento de clusters, ao invés de sistemas SMP. |
|
| |
|
| Uma organização SMP consiste em múltiplos processadores similares em um mesmo computador, conectados por um barramento ou alguma outra forma de circuito de conexão.
| | Entretanto, em um cluster, cada nó tem sua própria memória principal privativa; as aplicações não ''enxergam'' uma grande memória global. |
|
| |
|
| | De fato, a coerência de dados é mantida por software, não por hardware. |
|
| |
|
| É constituído de vários processadores tipicamente homogêneos e localizados em um mesmo computador.
| | Uma abordagem para obter um multiprocessamento em larga escala, mantendo o estilo SMP, é a abordagem NUMA (até 1024 processadores). |
| Multicomputadores - Cada processador possui sua própria memória local.
| |
| Multiprocessadores - Os processadores compartilham memória.
| |
| Arquiteturas
| |
| Multiprocessadores em barramento.
| |
| Multiprocessador.
| |
| Multiprocessador homogêneo.
| |
| Multiprocessador heterogêneo.
| |
| Software
| |
| Fracamente acoplados - um software que serve de interface entre o computador (hardware) e os humanos (peopleware) , que permite a execução de diversos outros softwares (aplicativos)....
| |
| Fortemente acoplados - permitem que máquinas e usuários de um sistema distribuído sejam fundamentalmente independentes e ainda interagir de forma limitada quando isto for necessário, compartilhando discos, impressoras e outros recursos.
| |
| Sistemas operacionais
| |
| Sistema operacional (SO) é um software que serve de interface entre o computador (hardware) e os humanos (peopleware) , que permite a execução de diversos outros softwares (aplicativos).
| |
| SO de máquinas monoprocessadas.
| |
| SO Multiprocessadores é uma extensão de SOs de máquinas monoprocessadas, a principal diferença sendo que os dados da memória são acessados por vários processadores e, portanto, necessitam de proteção com relação aos acessos concorrentes.
| |
| SOs Multicomputadores são uma alternativas para o buffering de mensagens e pontos de bloqueio, alguns SOs disponibilizam uma abstração de memória compartilhada.
| |
| SOs de rede: existe uma independência entre os computadores.
| |
| Sistemas fortemente acoplados Neste sistema existe vários processadores compartilhando uma memória, e gerenciado por apenas um S.O.
| |
|
| |
|
| Múltiplos processadores permitem que vários programas sejam executados ao mesmo tempo e em tempo real.Com isso será possível aumentar a capacidade de computação adicionando apenas processadores.
| | O objetivo de um sistema NUMA é manter, de forma transparente, uma visão de grande e única área de memória no sistema, permitindo, ao mesmo tempo, vários nós multiprocessadores, cada qual com sue próprio barramento, ou outro sistema interno de interconexão. |
|
| |
|
| Exemplos
| | [[image: MIPparalel9.png|center]] |
| os sistemas operacionais mais conhecidos hoje são: Windows, GNU/Linux, MacOS(Apple).
| |
| Um exemplo clássico de computação distribuída é o projeto Seti at home que visa procurar em sinais de rádio interplanetários algum vestígio de vida extraterrestre.
| |
| O exemplo mais moderno desse paradigma é o BOINC, que é um framework de grade computacional no qual diversos projetos podem rodar suas aplicações, como fazem os projetos World Community Grid, SETI@Home, ClimatePrediction.net, Einstein@Home, PrimeGrid e OurGrid.
| |
|
| |
|
| | O sistema NUMA consiste de um multiprocessador com memória compartilhada, no qual o tempo gasto por um certo processador para fazer acesso a uma palavra na memória varia de acordo com a posição desta palavra na memória. |
|
| |
|
| | * Grupos de processadores com sua respectiva memória |
| | * Tempos de acesso à memória diferentes |
| | * Mantém modelo de memória compartilhada (mas precisa cuidados para obter desempenho) |
|
| |
|
| As tarefas podem ser executadas de forma paralela e concorrente, com níveis variados de interação entre as mesmas ao longo do processo. Há várias vantagens em se construir sistemas distribuídos, dentre elas o desacoplamento de funcionalidades e a implementação de sistemas com maior capacidade de processamento do que o que seria possível em uma única máquina. Por outro lado, as interações entre vários componentes executando de forma simultânea e concorrente tornam o sistema mais complexo em termos de sua implementação e operação. A Web pode ser vista como um grande sistema distribuído que apresenta boa escalabilidade, porém há inúmeros problemas de falhas, desempenho e disponibilidade que justificam a inclusão desta linha de pesquisa entre os focos do INWeb.
| | Cada nó do sistema NUMA inclui alguma memória principal. Entretanto, do ponto de vista dos processadores, existe uma única área de memória endereçável, com cada posição de memória tendo um endereço único em todo o sistema. |
|
| |
|
| Para fins da organização desta análise, sem perda de generalidade, a pesquisa em SPD pode ser organizada em quatro níveis. O primeiro nível compreende os algoritmos inerentes aos serviços que são executadas de forma paralela e distribuída. O segundo nível compreende os ambientes de desenvolvimento, incluindo paradigmas de programação como sistemas P2P, mecanismos de memória compartilhada e suas linguagens de programação. O terceiro nível compreende as ferramentas de suporte à execução, onde se enfocam problemas como escalonamento e balanceamento de carga, além da implementação dos protocolos de comunicação inerentes às várias aplicações. O último nível compreende as plataformas de processamento e comunicação, incluindo o hardware e os sistemas básicos, como firmware e sistemas operacionais.
| | Quando um processador inicia um acesso à memória, se a posição de memória requerida não está presente na cache L1, a cache L2 inicia uma operação de busca. |
|
| |
|
| Esta linha de pesquisa tem por objetivo investigar, naqueles diversos níveis, algoritmos e técnicas que enfoquem três propriedades essenciais dos sistemas paralelos e distribuídos: desempenho, escalabilidade e dependabilidade. A questão do desempenho é bastante ampla e demanda algoritmos e técnicas de monitoramento que realizem coleta e análise de dados de carga e de métricas de desempenho nos vários níveis do sistema. Sistemas escaláveis são aqueles que podem ser facilmente expandidos para acomodar aumentos na carga ou no número de usuários, ampliando a sua capacidade de processamento e comunicação à medida que a demanda aumenta, ao mesmo tempo que usam as plataformas computacionais eficientemente. Dependabilidade identifica um conjunto de propriedades que permitem ao sistema se recuperar de faltas sem desempenhar ações incorretas, reduzir seus momentos de indisponibilidade, aumentar as garantias de segurança oferecidas aos usuários e ser capaz de passar por operações de atualizações e reparos sem problemas.
| | Se a linha requerida está na porção LOCAL da MP, ela é obtida por meio do barramento local. |
|
| |
|
| Considerando o aspecto dinâmico da Web, que envolve carga crescente com grande variabilidade e diversidade com demandas crescentes dos usuários sobre a qualidade dos serviços providos, garantir essas três características se mostra como um desafio de pesquisa permanente e complexo. O desafio relacionado a desempenho, que pode ser expresso como a habilidade de prover a resposta desejada em tempo apropriado, é exacerbado pelas constantes mudanças de demanda e comportamento dos usuários, aliadas à crescente oferta de conteúdo e serviços.
| | Se a linha está em uma porção REMOTA da MP, então é automaticamente enviada uma requisição para buscar a linha por meio da rede de interconexão e entregue ao barramento local, que então a transfere para a cache requisitante. |
|
| |
|
| As questões de desempenho são fundamentais para a grande maioria dos objetivos específicos dos dois primeiros primeiros. O monitoramento é ainda a base para o objetivo específico 3.1 e permite avaliar os objetivos 3.2 a 3.7 do Desafio 3. Escalabilidade é um desafio pelo aumento do número de usuários, da quantidade de dados e de sua diversidade, assim como pela crescente complexidade das aplicações da Web. Neste caso, os objetivos específicos 1.1 a 1.4, todos os objetivos relacionados ao Desafio 2, bem como os objetivos específicos 3.4, 3.5 e 3.6 trazem uma demanda de algoritmos e técnicas escaláveis nos vários contextos. Dependabilidade também é afetada tanto pelo dinamismo do ambiente quanto pela sua demanda crescente em várias dimensões, assim como por erros involuntários (falhas no desenvolvimento) e voluntários (comportamentos maliciosos). Fatores de dependabilidade devem ser considerados para os objetivos 2.10 e 2.11 tanto em termos da variabilidade do conteúdo, quanto em termos da sua qualidade, e para Os objetivos 3.3 e 3.4, em termos do aumento da carga de trabalho e do desempenho necessário para uma entrega satisfatória dos vários serviços.
| |
|
| |
|
| Esta linha de pesquisa contará com a participação principalmente dos pesquisadores Wagner Meira (UFMG), Dorgival Guedes (UFMG), Jussara Almeida (UFMG), Virgílio Almeida (UFMG), Genaina Rodrigues (UFMG), Raquel Prates (UFMG) e Cristina Murta (CEFET-MG).
| | Toda esta atividade é feita de forma automática e transparente para o processador e para sua cache. |
Por que estudar paralelismo?
- Explora alternativas de projeto de novos sistemas para aumento de desempenho e de recursos de microeletrônica.
- Área de pesquisa com uma comunidade brasileira ativa e atuante em várias áreas e forte apelo internacional
- Áreas de atuação:
- Desenvolvimento de novos modelos de computação
- Desenvolvimento de novas arquiteturas de sistemas computacionais (processadores multi-core, multiprocessadores, sistemas de cluster, grid e cloud computing)
- Viabiliza novas aplicações computacionais (modelos matemáticos):
– Previsão de tempo e de clima
– Drug design, genômica, proteômica
– Simulação (car crash, plataforma petrolífera, ...)
Paralelismo e processamento superescalar
Além de tudo que foi visto, em termos de aprimoramento dos módulos internos do processador, barramentos, memórias, etc, inúmeras outras estratégias foram criadas com o intuito de aumentar a velocidade dos sistemas computacionais.
Em uma das linhas de pesquisa, ao invés de se pensar em um único processador com características superiores, os desenvolvedores começaram a seguir a abordagem de utilizar vários sub-sistemas de processamento acoplados, ou seja, por meio da estratégia "dividir para conquistar".
Tipos de sistemas com processadores paralelos
Taxonomia proposta por Flymm (1972):
Única instrução, único dado (SISD - single instruction, single data)
Um único processador executa uma única sequência de instruções, usando dados armazenados em uma única memória.
Exemplo: Máquina de Von Neumann
Única instrução, múltiplos dados (SIMSD - single instruction, multiple data)
Nestes computadores, ocorre a execução síncrona da instrução, para todos os dados.
Uma única instrução de máquina controla a execução simultânea de um certo número de elementos de processamento, em passos de execução.
Cada elemento de processamento tem uma memória de dados a ele associada, de modo que cada instrução é executada sobre um conjunto de dados diferente em cada processador.
Os processadores vetoriais e matriciais pertencem a essa categoria.
Exemplos:
Múltiplas instruções, único dado (MISD - multiple instruction, single data)
Uma sequência de dados é transmitida para um conjunto de processadores, cada um dos quais executa uma sequência de instruções diferente.
Isto é, várias instruções são executadas em um único fluxo de dados.
Essa estrutura nunca foi implementada.
Múltiplas instruções, múltiplos dados (MIMD - multiple instruction, multiple data)
Permite a execução de instruções diferentes para cada um dos dados.
Ou seja, um conjunto de processadores executa simultaneamente sequências diferentes de instruções, sobre conjuntos de dados distintos.
Os SMPs, clusters e sistemas NUMA pertencem a esta categoria.
Exemplos:
Em uma organização MIMD, os processadores são de propósito geral; cada um pode processar todas as instruções necessárias para realizar a transformação de dados apropriada.
Outras classificações para Paralelismo
Há várias fontes de execução paralela em um computador moderno.
Paralelismo no Nível de Instrução (ILP)
Permite executar várias instruções em cada ciclo de relógio.
Modificações na microarquitetura do processador para possibilitar a execução paralela de instruções.
Abordagens:
- Paralelismo temporal: encadeamento no fluxo de execução das instruções (pipeline);
- Paralelismo na emissão de instruções: submissão de várias instruções para execução pelo fluxo de dados (VLIW - very long instruction line (128 bits) e superescalaridade);
- Paralelismo de dados: permite executar várias instâncias da mesma instrução para um conjunto de dados (processamento SIMD ou vetorial).
Pipelining
Arquiteturas de processador Superescalares
Processadores Superescalares são todos os que possuem mais de uma unidade funcional em cada pipeline, as quais permitem a execução de mais de uma instrução simultaneamente (no mesmo ciclo de clock).
A arquitetura pipeline já permite que diversas instruções sejam executadas ao mesmo tempo, desde que estejam em estágios diferentes do pipeline.
Porém, ainda que várias instruções sejam executadas concorrentemente (em cada estágio do pipeline), apenas uma instrução encontra-se na fase de execução, ou seja, o sistema continua sendo SISD.
Já na arquitetura superescalar, várias instruções podem ser iniciadas simultaneamente e executadas independentemente umas das outras.
A partir do Pentium, a maioria dos processadores para computadores pessoais atualmente são superescalares.
Isto é obtido através da implementação de múltiplas unidades funcionais, que são unidades onde as instruções são executadas.
O Pentium, por exemplo, trabalha internamente como se fosse composto por dois processadores de 32 bits distintos (chamados de pipeline U e pipeline V), sendo capaz de processar duas instruções por ciclo de clock (uma em cada pipeline).
As arquiteturas superescalares incluem todos os aspectos do pipeline e ainda acrescentam o fato de as instruções poderem estar executando no mesmo estágio do pipelining (em linhas pipelining diferentes).
Cada processador possui acesso total ao cache, à memória RAM, e aos demais componentes do micro.
Foi incluída também, uma unidade de controle, com a função de comandar o funcionamento dos dois processadores e dividir as tarefas entre eles.
Observação:
Teoricamente, o uso de dois processadores distintos dobraria o desempenho do Pentium, já que ao invés de uma, poderiam ser executadas duas instruções por ciclo de clock. Mas, na prática existem algumas limitações.
Se por exemplo, um programa ordena que o processador some 4 números, X + Y + W + K, o processador poderia no primeiro ciclo de clock usar o pipeline U para somar X e Y e o pipeline V para somar W, mas no segundo ciclo, haveria apenas mais um cálculo para ser executado, o resultado das duas somas.
Neste caso, apenas um dos pipelines poderia ser usado; o segundo ficaria ocioso.
No final das contas, houve um ganho de 33%, já que ao invés do processador demorar 3 ciclos para executar o cálculo, demorou apenas 2.
Assim, em média, a segunda canalização permite um desempenho 30 ou 40% superior ao desempenho obtido com apenas uma canalização.
Caso o software seja alterado e otimizado para rodar em um processador com dois pipelines, ordenando as instruções de modo a deixar o segundo pipeline ocupado durante a maior parte do tempo, podemos conseguir mais 10 ou 15% de desempenho, chegando a algo entre 40 e 50%, mas, jamais será possível conseguir o dobro de desempenho.
Dependência de desvios
A presença de desvios condicionais em uma seqüência de instruções complica a operação do pipeline.
A instrução seguinte a um desvio condicional (tomado ou não) depende dessa instrução de desvio.
Esse tipo de dependência também afeta uma pipeline escalar, mas a conseqüência desse tipo de dependência é mais severa em uma pipeline superescalar, porque o número de instruções perdidas em cada atraso é maior.
Se forem usadas instruções de tamanho variável, surge ainda um outro tipo de dependência.
Como o tamanho de uma instrução particular não é conhecido, uma instrução deve ser decodificada, pelo menos parcialmente, antes que a instrução seguinte possa ser buscada.
Isso impede a busca simultânea de instruções, requerida em uma pipeline superescalar.
Essa é uma das razões pelas quais técnicas supersescalares são mais diretamente aplicáveis a arquiteturas RISC ou do tipo RISC, que possuem instruções de tamanho fixo.
Conflito de recursos
Um conflito de recurso ocorre quando duas ou mais instruções competem, ao mesmo tempo, por um mesmo recurso.
Exemplos de recursos incluem memórias, caches, barramentos, portas de bancos de registradores e unidades funcionais (por exemplo, o somador da ULA).
Em termos de pipeline, um conflito de recurso apresenta um comportamento semelhante ao de uma dependência de dados.
Existem, entretanto, algumas diferenças.
Por um lado, conflitos de recursos podem ser superados pela duplicação de recursos, enquanto uma dependência de dados não pode ser eliminada.
Além disso, quando uma operação efetuada em uma dada unidade funcional consome muito tempo para ser completada, é possível minimizar os conflitos de uso dessa unidade por meio de sua implementação como uma pipeline.
Multiprocessadores simétricos
Até muito recentemente, quase todos os computadores pessoais e a maioria das estações de trabalho continham um único microprocessador de uso geral.
Com a crescente demanda por desempenho e a contínua queda do custo dos microprocessadores, os fabricantes introduziram os sistemas SMP.
A denominação SMP refere-se tanto à arquitetura de hardware do computador, quanto ao comportamento do sistema operacional sobre esta arquitetura.
Um computador SMP pode ser definido como:
- Existem dois ou mais processadores similares, com capacidade de processamento comparável;
- Estes dois processadores compartilham a mesma memória principal e dispositivos de E/S, e são conectados por barramento interno, de forma que o tempo de acesso à memória em todos é praticamente o mesmo;
- Todos os processadores compartilham acesso aos dispositivos de E/S;
- Todos os processadores são capazes de desempenhar as mesmas funções;
- Tudo é controlado por um sistema operacional integrado, que provê interação entre os processadores e seus programas, em nível de tarefas, de arquivos e de dados.
O sistema operacional (SO) é quem efetua o escalonamento de processos ou fluxos de execução (ou threads), sobre todos os processadores.
Neste momento, é importante diferenciar entre as duas abordagens: os processadores paralelos e os sistemas paralelos.
Como já foi visto, processadores paralelos, ou superescalares, exploram o paralelismo em nível de instruções, isto é, de maneira a executar mais de uma instrução por ciclo de clock, em unidades diferentes de um mesmo processador.
Já os sistemas paralelos, ou DISTRIBUÍDOS aonde se enquadram os computadores SMP, consistem basicamente da distribuição de tarefas entre vários processadores, ao mesmo tempo.
Podem ser processadores ou computadores distintos, ou mesmo conjuntos de componentes interligados em rede que cooperam para realizar um conjunto de tarefas.
Vantagens
A arquitetura SMP tem uma série de vantagens sobre uma arquitetura uniprocessador:
- Desempenho - se o trabalho efetuado pelo computador pode ser organizado de forma que algumas porções desse trabalho possam ser feitas em paralelo, então um sistema com múltiplos processadores resulta em maior desempenho que um sistema uniprocessador;
- Disponibilidade - em um multiprocessador simétrico, como todos os processadores são similares e ativos, uma falha em um deles não ocasiona a parada de todo o sistema;
- Crescimento incremental - o usuário pode aumentar o desempenho do sistema adicionando mais processadores;
- Escalabilidade - fabricantes podem oferecer uma larga faixa de produtos, com características de desempenho e custo diferentes, com base no número de processadores configurados para o sistema.
Desvantagem
A principal desvantagem da arquitetura SMP é o da coerência de cache. Cada processador possui sua própria memória cache e é possível que uma determinada linha de dados esteja presente em mais de uma delas.
Se esta linha for alterada, então, tanto a memória principal como todas as demais caches terão uma versão inválida desta linha.
Estratégia: protocolo MESI
Clusters
É uma das áreas mais promissoras de projeto de sistemas de computação da atualidade.
Clusters são agregados, ou aglomerados de computadores completos interconectados, trabalhando juntos, como um recurso de computação unificado que cria a ilusão de se constituir em uma única máquina.
Cada computador completo do cluster é chamado de nó.
Estes nós de processamento (não necessariamente homogêneos) atuam de maneira que um processo de grande consumo seja executado no nó "mais disponível", ou mesmo subdividido por vários nós.
Cada nó tem sua própria memória local (não compartilhada)
- Comunicação por troca de mensagens
- Conceito cliente-servidor
Tipos de Cluster
Outro link: [1]
Vantagens
- Escalabilidade
- Alta disponibilidade
- Melhor relação custo/desempenho
Desvantagens
- Difícil programação
- Modelo de programação diferente
Acesso não-Uniforme à Memória (NUMA)
NUMA = Non-Uniform Memory Acess
Em um sistema SMP, existe um limite prático para o número de processadores que podem ser usados. A degradação de desempenho causada pelo gargalo dos barramentos parece limitar o número de processadores em uma configuração SMP a algum valor entre 16 e 64 processadores.
Esta é a principal motivação do desenvolvimento de clusters, ao invés de sistemas SMP.
Entretanto, em um cluster, cada nó tem sua própria memória principal privativa; as aplicações não enxergam uma grande memória global.
De fato, a coerência de dados é mantida por software, não por hardware.
Uma abordagem para obter um multiprocessamento em larga escala, mantendo o estilo SMP, é a abordagem NUMA (até 1024 processadores).
O objetivo de um sistema NUMA é manter, de forma transparente, uma visão de grande e única área de memória no sistema, permitindo, ao mesmo tempo, vários nós multiprocessadores, cada qual com sue próprio barramento, ou outro sistema interno de interconexão.
O sistema NUMA consiste de um multiprocessador com memória compartilhada, no qual o tempo gasto por um certo processador para fazer acesso a uma palavra na memória varia de acordo com a posição desta palavra na memória.
- Grupos de processadores com sua respectiva memória
- Tempos de acesso à memória diferentes
- Mantém modelo de memória compartilhada (mas precisa cuidados para obter desempenho)
Cada nó do sistema NUMA inclui alguma memória principal. Entretanto, do ponto de vista dos processadores, existe uma única área de memória endereçável, com cada posição de memória tendo um endereço único em todo o sistema.
Quando um processador inicia um acesso à memória, se a posição de memória requerida não está presente na cache L1, a cache L2 inicia uma operação de busca.
Se a linha requerida está na porção LOCAL da MP, ela é obtida por meio do barramento local.
Se a linha está em uma porção REMOTA da MP, então é automaticamente enviada uma requisição para buscar a linha por meio da rede de interconexão e entregue ao barramento local, que então a transfere para a cache requisitante.
Toda esta atividade é feita de forma automática e transparente para o processador e para sua cache.