Buscar

Microcódigo e Paralelismo - Organização de Computadores

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Microcódigo e paralelismo
O microcódigo
Através de interpretação, o código a ser executado realmente internamente no processador pode ser bem diferente do código conhecido pelo programador, chamado de código ou linguagem “de máquina”.
Muitas funcionalidades nos processadores foram introduzidas graças à interpretação do código “de máquina” para o seu código interno (microcódigo).
Permite que instruções complexas possam ser utilizadas como se fossem executadas diretamente pelo processador.
Conceituação
Projetistas de processadores foram aumentando o numero de funções executadas pelo microcódigo.
Com o aumento do tamanho do microcódigo, gerou-se uma polêmica:
Alguns pesquisadores entendiam que o microcódigo deveria ser reduzido ou eliminado, para melhor performance (filosofia de processadores RISC). 
RISC: Reduced Instruction Set Computer (Computador com conjunto de instruções reduzidas)
Outros pesquisadores entendiam que o microcódigo facilitava a utilização (programação) do processador, mesmo que isso implicasse em perda de performance (filosofia CISC).
CISC: Complex Instruction Set Computer (Computador com conjunto complexo de instruções)
Posteriormente, chegou-se à conclusão que uma metodologia híbrida era melhor indicada. 
Polêmica CISC X RISC
 RISC
 Todo código deve ser executado diretamente pelo hardware.
Instruções devem ser mantidas simples.
Toda instrução deve ser executada em apenas um ciclo do clock.
Apenas instruções especiais (LOAD e STORE) podem acessar a memória
CISC
Todo código é interpretado, gerando conjunto poderoso de instruções para o processador. 
Instruções podem ter qualquer tamanho.
Instruções mais complexas podem gastar vários ciclos de clock para serem executadas.
Qualquer instrução pode ler ou gravar dados na memória.
Filosofia híbrida resultante:
Interpretar apenas instruções complexas e menos frequentes, e executar direto pelo hardware instruções simples e de uso frequente.
Filosofias RISC x CISC
Performance no processador
A velocidade em que um computador processa dados (inteiros) é medida em MIPS (milhões de instruções por segundo).
Princípios de projeto de processadores para boa performance:
 Equilibrar a razão entre interpretação e execução direta.
Maximizar a taxa em que as instruções são executadas (ou iniciadas) 
Padronizar instruções (tamanho, numero de campos) para facilitar a sua decodificação.
Garantir numero suficientemente grande de registradores (para poupar o acesso à memória).
Princípios de performance
Pode-se obter o aumento da taxa de execução de instruções (numero de MIPS) através de:
Aumento da frequência do clock.
Implica em aumento do consumo de energia. 
Implica em aumento da temperatura do processador, o que implica em dispositivos de refrigeração mais potentes. 
Executando as instruções de forma paralela:
ao nível das instruções individuais
ao nível de threads
ao nível do processador.
Maximização da taxa de execução de instruções
Paralelismo ao nível de instruções
Divide-se a execução das instruções em várias etapas.
 (decodificação, mover dados para registrador, processamento, mover resultado para registrador, etc)
Cada etapa do processo é executada por unidade de hardware individual, denominada estágio, sendo os vários estágios interligados.
Cada estágio executa apenas uma tarefa, passando o resultado para o próximo estágio.
Ao terminar sua tarefa, o estágio já recebe informações sobre a próxima instrução a ser executada
Arquitetura em pipeline
Dessa forma, o processador irá conseguir entregar praticamente uma instrução por unidade de tempo (ciclo de clock). 
Arquitetura em pipeline
Para aumentar o paralelismo, pode-se ter mais de um pipeline.
Instruções realmente em paralelo.
Problema: aumenta o hardware necessário.
Não poderá haver conflito de recursos (p.ex., registradores).
O resultado de uma instrução não deve ser dependente da outra.
Normalmente, cada pipeline terá sua unidade lógica (ULA) para o processamento.
Conflitos resolvidos por software, através do compilador e do código por ele gerado, ou por hardware próprio, que detecta e elimina conflitos quando eles ocorrem.
Arquitetura em pipeline
Nesse caso, ao invés de vários pipelines tem-se um único, porém com várias unidades no estágio de processamento operando paralelamente.
Motivação: o estágio de busca de operando e anteriores (S1, S2 e S3) tem capacidade de distribuir instruções em velocidade maior do que a capacidade do estágio posterior (S4) de executá-las. Para evitar esse gargalo, cria-se outras unidades S4.
Arquitetura superescalar
O estágio de processamento deverá contar com várias unidades lógicas (ULAs), unidades de ponto flutuante (FPUs), etc. 
Obs.: Notar que o ganho de desempenho com as arquiteturas em pipeline ou superescalar é da ordem de cinco ou dez vezes no máximo.
Arquitetura superescalar
Paralelismo ao nível de threads
Problema nos processadores: pipeline interrompe sua atividade e aguarda o dado desejado que não foi ainda carregado na memória.
Essa parada do pipeline faz diminuir a performance.
Abordagem para minimizar o problema: permitir que o processador trabalhe simultaneamente com mais de uma thread.
Thread: unidade de execução do sistema operacional, podendo ser um programa inteiro ou parte de um programa.
Motivação e definição
Se uma thread tiver que aguardar o pipeline, a outra pode continuar seu processamento, garantindo a ocupação do processador e melhorando a performance.
Problema: como as threads podem ser até programas diferentes, o conjunto de registradores do processador além de outros elementos deve ser duplicado para que tal método possa ser aplicado. 
Motivação e definição
Paralelismo – Thread – Granulação
Na Figura abaixo é mostrado um cenário onde existem três threads (a, b, c) sendo executados em um processador com pipeline de granulação fina (d) e em um outro processador com pipeline de granulação grossa (e).
Implementado a partir do Pentium 4.
Para conseguir tal recurso, o tamanho do chip foi aumentado.
Pesquisas identificaram que um aumento de 5% no tamanho do chip para habilitar multithreading implica em ganho de desempenho de 25%, o que se considerou uma boa opção.
Duas threads (ou dois processos) podem executar ao mesmo tempo.
Para o sistema operacional, o processador é visto como se tivesse dois núcleos, compartilhando a memória (principal e cache).
Para tanto:
O processador possui dois contadores de programa (Pcs) e dois registradores de instrução (RI).
A tabela que mapeia os registradores da arquitetura Intel (EAX, EBX, etc) para os registradores físicos do processador é duplicada, então threads diferentes irão usar registradores diferentes.
O controlador de interrupções é duplicado, pois threads podem ser interrompidas de forma independente.
O Hyperthreading da Intel
Paralelismo ao nível do processador
Usando um paralelismo a nível de instrução conseguimos obter uma melhoria de desempenho em uma escala de 5 a 10 vezes maior.
Para uma melhora em um fator de 50 ou mais, é necessário haver em conjunto um paralelismo a nível de processador.
Ideias: 
Processadores Paralelos: processadores com diversas unidades funcionais que podem trabalhar ao mesmo tempo sobre o comando de uma única unidade de controle.
Multiprocessadores: um sistema com mais de uma CPU completa que compartilham uma única memória.
Multicomputadores: um sistema com mais de uma CPU onde todas são independentes e possuem suas próprias memórias.
Paralelismo – Nível Processador
Paralelismo – Nível Processador
Define 4 categorias de organização de computadores em razão de seu paralelismo nas instruções ou nos dados.
SISD (Single Instruction, Single Data): Fluxo único de instruções sobre um único conjunto de dados.
SIMD (Single Instruction, Multiple Data): Fluxo único de instruções em múltiplos conjuntos de dados.
MISD (Multiple Instruction, Single Data): Fluxo múltiplo de instruções em um único conjunto
de dados.
MIMD (Multiple Instruction, Multiple Data): Fluxo múltiplo de instruções sobre múltiplos conjuntos de dados.
Taxonomia de Flynn
Define 4 categorias de organização de computadores em razão de seu paralelismo nas instruções ou nos dados.
SISD: um computador simples usando uma arquitetura de Von Neumann sem qualquer paralelismo.
SIMD: muito usado em placa de vídeos, pois necessitam realizar a mesma instrução em diversos blocos de dados (mudar os pixels).
MISD: computadores que podem realizar diversas instrução em cima de um mesmo conjunto de dados. É de longe o mais incomum.
MIMD: computadores com paralelismo capaz de realizar instruções diferentes em dados diferentes. É o tipo de processador mais comum para máquinas de propósito geral.
Taxonomia de Flynn
Processadores Vetoriais
São processadores bastante específicos e que para um programador não se distingui de um processador SIMD, porém, diferente deste, todos os seus cálculos são realizados em uma única unidade funcional capaz de realizar operações em cima de dados regulares com um alto grau de paralelismo.
É ainda mais específico que o SIMD no que diz aos tipos de instruções (regulares) e formatos de dados (matrizes).
Usa diversos Registradores Vetoriais e realiza operações sobre vetores para obter conjuntos de respostas através.
Mais usados em para sistemas multimidia ou de cálculos científicos
São computadores montados com CPUs completamente independentes, cada qual com suas próprias unidades
Podem compartilhar uma única memória e até mesmo, simultaneamente, ter um pouco de memória dedicada para cada CPU de forma a diminuir o tráfego no barramento da memória principal e problemas de concorrência. 
CPUs são fortemente acopladas, isto é, necessitam acessar uma mesma memória em alguns momentos.
Multiprocessador
Multiprocessador
Quando usamos um sistema com base em multiprocessadores e tentamos aumentar o número destes, surgi um problema: vários processadores competem por uma mesma memória principal.
Um multicomputador possui diversos processadores completamente independentes um dos outros, cada qual com sua própria memória.
CPUs fracamente acopladas.
Multicomputador
É necessário haver uma comunicação entre os processadores, mas esta não necessariamente é 1-1 ou N-N: normalmente existem processadores que ficam encarregados de receber mensagens de outros processadores e as encaminhar para seus respectivos destinatários.
O multicomputador Blue Gene/P da IBM foi construido com mais de 250 mil processadores
Multicomputador

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando