Prévia do material em texto
ARQUITETURAS AVANÇADAS DE
MICROPROCESSADORES
UCM-FENG
ARQUITETURAS AVANÇADAS DE
MICROPROCESSADORES
Arquiteturas avançadas de microprocessadores são projectos de processadores que
incorporam técnicas e recursos avançados para melhorar o desempenho e a eficiência do
processamento de dados. Entre essas técnicas avançadas, destacam-se o pipelining, a
superscalaridade e a predição de ramificação.
O pipelining é uma técnica que permite que várias instruções sejam executadas em paralelo,
dividindo o ciclo de busca, decodificação, execução e armazenamento em estágios
independentes. Cada estágio executa uma parte diferente da instrução, permitindo que
múltiplas instruções sejam processadas simultaneamente. Isso aumenta o throughput do
processador, já que várias instruções podem estar em diferentes estágios de execução ao
mesmo tempo.
.
ARQUITETURAS AVANÇADAS DE
MICROPROCESSADORES
A superscalaridade é uma técnica que permite a execução de múltiplas instruções por ciclo de
clock. Em uma arquitetura superscalar, o processador possui múltiplas unidades de execução,
como unidades de adição, multiplicação e divisão, que podem operar independentemente. O
processador é capaz de detectar instruções que podem ser executadas em paralelo e enviá-las
para as unidades de execução apropriadas. Isso permite uma maior taxa de execução de
instruções e maior desempenho geral.
A predição de ramificação é uma técnica utilizada para mitigar o impacto negativo das
instruções de desvio condicional, como os comandos "if" e "while", que podem causar um desvio
no fluxo normal de execução do programa. Os processadores modernos empregam algoritmos
de predição de ramificação para tentar prever se uma instrução de desvio será tomada ou não,
de forma a antecipar a próxima instrução a ser executada. Isso ajuda a evitar atrasos causados
por desvios de ramificação, permitindo que o processador mantenha um alto nível de utilização
de recursos.
Essas técnicas avançadas de microprocessadores são apenas algumas das várias estratégias
usadas para melhorar o desempenho dos processadores. Elas permitem que os processadores
executem instruções mais rapidamente e de forma mais eficiente, maximizando a utilização dos
recursos disponíveis e melhorando a capacidade de processamento geral
PARALELISMO EM NÍVEL DE INSTRUÇÕES EM
MICROPROCESSADORES
O paralelismo em nível de instruções (ILP - Instruction-Level Parallelism) e os
processadores superescalares são conceitos relacionados que visam melhorar o
desempenho dos processadores por meio da execução simultânea de múltiplas
instruções.
O paralelismo em nível de instruções refere-se à capacidade de executar várias
instruções em paralelo, aproveitando as dependências de dados e recursos entre
elas. Em um processador que suporta ILP, as instruções são analisadas para identificar
as dependências entre elas e determinar quais instruções podem ser executadas
independentemente. Essas instruções independentes são então enviadas para
unidades de execução separadas, onde são processadas simultaneamente. O
objectivo é maximizar a utilização dos recursos do processador e reduzir o tempo
total de execução do programa.
PARALELISMO EM NÍVEL DE INSTRUÇÕES E
PROCESSADORES SUPERESCALARES
Os processadores superescalares são uma implementação específica do paralelismo
em nível de instruções. Eles possuem múltiplas unidades funcionais, como unidades de
adição, multiplicação e divisão, que são capazes de executar várias instruções
simultaneamente. O processador superescalar é capaz de buscar, decodificar e
emitir várias instruções em um único ciclo de clock, enviando-as para as unidades de
execução apropriadas. Essa abordagem permite que múltiplas instruções sejam
processadas em paralelo, desde que não haja dependências entre elas. A
capacidade de execução simultânea de múltiplas instruções é o que diferencia os
processadores superescalares de outros tipos de arquiteturas.
PARALELISMO EM NÍVEL DE INSTRUÇÕES E
PROCESSADORES SUPERESCALARES
O objectivo do paralelismo em nível de instruções e dos processadores
superescalares é aumentar o desempenho do processador, executando mais
instruções em um determinado período de tempo. No entanto, a eficiência do
paralelismo em nível de instruções depende da capacidade do compilador em
identificar instruções independentes e da disponibilidade de recursos adequados no
processador.
Além disso, a presença de dependências de dados entre as instruções pode limitar o
grau de paralelismo que pode ser explorado. Portanto, a eficácia do paralelismo em
nível de instruções e dos processadores superescalares pode variar dependendo do
programa em execução e das características do processador.
A POLÍTICA DE EMISSÃO DE INSTRUÇÕES EM
MICROPROCESSADOR
A política de emissão de instruções, também conhecida como política de escalonamento,
refere-se às regras e estratégias usadas por um processador para determinar quais
instruções devem ser buscadas, decodificadas e emitidas para execução. Essas políticas são
importantes para optimizar o desempenho do processador, maximizando a utilização dos
recursos disponíveis.
Existem diferentes abordagens para a política de emissão de instruções, e elas variam de
acordo com a arquitetura do processador. Algumas das políticas comuns incluem:
Emissão em ordem (in-order): Nessa política, as instruções são executadas na ordem em que
foram emitidas pelo programa. Isso implica que todas as dependências de dados devem ser
resolvidas antes que uma instrução possa ser emitida para execução. Embora essa política seja
relativamente simples de implementar, ela pode levar a subutilização dos recursos do
processador quando instruções independentes estão disponíveis para execução.
A POLÍTICA DE EMISSÃO DE INSTRUÇÕES EM
MICROPROCESSADOR
Emissão fora de ordem (out-of-order): Nessa política, o processador é capaz de reordenar as
instruções para maximizar a utilização dos recursos. Instruções independentes podem ser
emitidas e executadas antes de instruções anteriores que estão aguardando a resolução de
dependências. Isso permite que o processador aproveite melhor o paralelismo disponível no
código do programa. No entanto, a reordenação das instruções deve ser feita com cuidado
para garantir a corretude do programa.
Emissão especulativa: Nessa política, o processador pode emitir instruções especulativas com
base em previsões sobre o comportamento do programa. As instruções especulativas são
executadas antes de se ter certeza sobre sua validade, o que pode levar a um desfazimento
(rollback) caso as previsões estejam incorretas. A emissão especulativa é comumente usada em
técnicas avançadas de predição de ramificação para mitigar os atrasos causados por desvios
condicionais.
A escolha da política de emissão de instruções depende das características do processador, do
código do programa e dos objectivos de desempenho desejados. Cada política tem suas
vantagens e desvantagens, e o projeto de um processador pode envolver uma combinação de
várias políticas para otimizar o desempenho geral.
O PARALELISMO DE MÁQUINA
O paralelismo de máquina refere-se à capacidade de um sistema de computação
executar múltiplas instruções ou tarefas simultaneamente, aproveitando o uso
eficiente dos recursos disponíveis. Esse paralelismo pode ser alcançado de várias
maneiras, dependendo da arquitetura do sistema. Algumas formas comuns de
paralelismo de máquina incluem:
Paralelismo de instruções: Também conhecido como paralelismo a nível de instruções
(ILP - Instruction-Level Parallelism), refere-se à execução simultânea de múltiplas
instruções em um pipeline ou em unidades de execução paralelas. Isso é alcançado
por meio do uso de técnicas como pipelining, superscalaridade e emissão
especulativa, conforme mencionado anteriormente.
O PARALELISMO DE MÁQUINA
Paralelismo de dados: Refere-se à execução simultânea de operações independentes
em diferentes conjuntos de dados. Isso pode ser alcançado pormeio de
processadores vetoriais, onde uma única instrução é aplicada a vários elementos de
dados em paralelo, ou por meio de processadores SIMD (Single Instruction, Multiple
Data), onde várias unidades de processamento executam a mesma instrução em
diferentes conjuntos de dados.
Paralelismo de thread: Envolve a execução simultânea de múltiplas threads ou fluxos
de execução independentes. Isso pode ser alcançado por meio de processadores
multinúcleo ou sistemas multiprocessados, onde cada núcleo ou processador executa
um conjunto diferente de instruções e dados.
.
O PARALELISMO DE MÁQUINA
Paralelismo de tarefa: Refere-se à execução simultânea de tarefas independentes
em um sistema distribuído ou em um conjunto de processadores. Isso geralmente
envolve a divisão de um problema em várias tarefas menores e a alocação dessas
tarefas para diferentes processadores ou nós de computação.
O paralelismo de máquina é uma técnica essencial para melhorar o desempenho e a
capacidade de processamento de sistemas computacionais. Ele permite a execução
eficiente de tarefas complexas e o processamento simultâneo de grandes volumes de
dados. No entanto, aproveitar o paralelismo de máquina requer algoritmos e
programas adequados que possam ser divididos e executados de forma paralela,
além de uma arquitetura de sistema que suporte o paralelismo desejado
O PARALELISMO DE MÁQUINA
O paralelismo de máquina pode ser implementado em diferentes níveis, desde o
hardware até o software.
No nível de hardware:
Processadores multi-core: Um único chip contém múltiplos núcleos de processamento,
cada um capaz de executar instruções independentemente.
Processadores multi-threaded: Um único núcleo de processamento pode executar
múltiplas threads simultaneamente, alternando entre elas rapidamente.
Processadores vectoriais: Possuem unidades de processamento especializadas para
realizar operações em vectores de dados.
O PARALELISMO DE MÁQUINA
O paralelismo de máquina oferece diversos benefícios, como:
Aumento de desempenho: Múltiplas tarefas podem ser realizadas simultaneamente, reduzindo o tempo total de execução.
Melhor utilização de recursos: Os recursos do sistema são utilizados de forma mais eficiente, evitando ociosidade.
Escalabilidade: O sistema pode ser facilmente expandido adicionando mais processadores ou núcleos, aumentando sua
capacidade de processamento.
No entanto, o paralelismo de máquina também apresenta desafios, como:
Complexidade de programação: O desenvolvimento de programas paralelos é mais complexo do que o desenvolvimento de
programas sequenciais.
Sincronização: É necessário coordenar a execução de múltiplas tarefas para garantir a corretude do programa.
Comunicação: As tarefas paralelas precisam se comunicar entre si para trocar dados, o que pode gerar overhead
A PREVISÃO DE DESVIO NO MICROPROCESSSDOR
A previsão de desvio, também conhecida como previsão de ramificação (branch
prediction), é uma técnica utilizada pelos processadores para tentar antecipar a
direção de desvios condicionais em programas de computador. Desvios condicionais
são instruções que podem alterar o fluxo de execução do programa, como instruções
de desvio condicional (por exemplo, "if" ou "switch") que podem resultar em um salto
para uma parte diferente do código, dependendo de uma condição específica.
A previsão de desvio é importante porque desvios condicionais podem criar
gargalos no desempenho do processador. Sem uma previsão precisa, o processador
pode precisar esperar até que a direção do desvio seja determinada antes de
buscar as instruções corretas, o que pode resultar em ciclos de clock desperdiçados e
atrasos na execução do programa.
A PREVISÃO DE DESVIO NO MICROPROCESSSDOR
Existem várias técnicas de previsão de desvio que podem ser implementadas, e algumas das
mais comuns são:
Previsão estática: Nessa técnica, a direção do desvio é prevista com base em padrões
estáticos do código. Por exemplo, se a maioria dos desvios em um programa segue uma
mesma direção, a previsão estática assumiria que os desvios subsequentes seguirão a mesma
direção. Essa técnica é simples, mas não leva em consideração o comportamento real do
programa.
Previsão baseada em histórico: Nessa técnica, o processador mantém um histórico dos
resultados anteriores de desvios condicionais. Com base nesse histórico, o processador tenta
prever a direção do desvio actual. Por exemplo, se um determinado desvio condicional foi
tomado (taken) nas últimas vezes em que ocorreu, a previsão seria de que ele será tomado
novamente. Essa técnica leva em consideração o comportamento passado do programa, mas
pode falhar quando há mudanças repentinas no padrão de desvios.
A PREVISÃO DE DESVIO NO MICROPROCESSSDOR
Previsão baseada em correlação: Nessa técnica mais avançada, o processador analisa
correlações entre desvios condicionais e outras informações do programa para fazer a
previsão. Por exemplo, o processador pode analisar a relação entre a posição de uma
instrução de desvio no código e o resultado do desvio anterior para fazer uma previsão mais
precisa. Essa técnica é mais complexa, mas pode melhorar a precisão da previsão.
É importante ressaltar que a previsão de desvio não é infalível e pode incorrer em erros de
previsão. Quando uma previsão de desvio falha, o processador precisa desfazer (rollback) as
instruções especulativas emitidas e retomar a execução correta do programa. Essa
penalidade de desfazimento pode resultar em atrasos no desempenho do processador.
As técnicas de previsão de desvio são continuamente aprimoradas e adaptadas para lidar
com diferentes padrões de desvio e características dos programas. O objetivo é maximizar a
precisão da previsão, minimizando assim os atrasos causados por desvios condicionais no
processador.
A EXECUÇÃO SUPERESCALAR
A execução superescalar é uma técnica utilizada em processadores modernos para
melhorar o desempenho através da execução simultânea de múltiplas instruções em
paralelo. Essa técnica permite que o processador execute várias instruções
independentes em um único ciclo de clock, explorando o paralelismo de nível de
instrução (ILP).
Em um processador superescalar, existem múltiplas unidades de execução
funcionando em paralelo, permitindo que várias instruções sejam buscadas,
decodificadas e executadas simultaneamente. Essas unidades de execução podem
incluir unidades aritméticas e lógicas (ALUs), unidades de ponto flutuante, unidades
de acesso à memória, entre outras.
ORGANIZAÇÃO SUPERESCALAR GERAL
ACELERAÇÕES REPORTADAS DAS MÁQUINAS DO TIPO
SUPERESCALAR
A EXECUÇÃO SUPERESCALAR
A execução superescalar envolve as seguintes etapas principais:
Busca de instruções: O processador busca várias instruções em paralelo da memória
ou do cache de instruções, aproveitando o paralelismo de nível de instrução.
Decodificação: As instruções são decodificadas para determinar suas operações e
operandos.
Emissão: As instruções decodificadas são emitidas para as unidades de execução. O
processador pode emitir múltiplas instruções em um único ciclo de clock, desde que
não haja dependências entre elas.
Execução: As instruções são executadas em paralelo pelas unidades adequadas. Isso
pode incluir operações aritméticas, lógicas, de ponto flutuante, acesso à memória,
entre outras.
A EXECUÇÃO SUPERESCALAR
Conclusão: As instruções concluídas têm seus resultados armazenados nos registradores
ou na memória, prontos para serem utilizados por instruções subsequentes.
A execução superescalar é capaz de aumentar significativamente o desempenho do
processador, permitindo a execução simultânea de várias instruções independentes. No
entanto, existem desafios associados a essa técnica, como:
Dependências de dados: Se houver dependências de dados entre as instruções, a
execução paralela pode ser impedida. O processador precisa garantir que todas as
dependências sejam resolvidas corretamente.
A EXECUÇÃO SUPERESCALAR
Conflitosde recursos: Caso duas instruções precisem acessar o mesmo recurso (por
exemplo, a mesma unidade de memória), pode ocorrer um conflito, exigindo
mecanismos de controle para evitar problemas.
Predição de desvio: A previsão de desvio é especialmente importante em execução
superescalar, pois várias instruções estão sendo buscadas e executadas em paralelo.
Se a previsão de desvio falhar, pode ser necessário descartar instruções
especulativas e retomar a execução correta.
Os projectistas de processadores implementam várias técnicas e mecanismos para
lidar com esses desafios e optimizar a execução superescalar, visando obter um
desempenho máximo através da exploração do paralelismo disponível nas
aplicações.
LIMITAÇÕES DA EXECUÇÃO SUPERESCALAR
A execução superescalar, apesar de oferecer benefícios significativos em termos de
desempenho, também possui algumas limitações. Aqui estão algumas delas:
Dependências de dados: A execução superescalar pode ser limitada por
dependências de dados entre as instruções. Se uma instrução depende dos
resultados de uma instrução anterior, é necessário garantir que a instrução
dependente espere até que os dados estejam disponíveis. Isso pode resultar em
gargalos de desempenho, pois algumas unidades de execução podem ficar ociosas
aguardando a disponibilidade dos dados.
Conflitos de recursos: Quando várias instruções estão sendo executadas em paralelo,
pode haver conflitos de recursos, como várias instruções tentando acessar a mesma
unidade funcional ou registrador ao mesmo tempo. Mecanismos de controle, como
escalonamento de recursos, precisam ser implementados para evitar conflitos e
garantir o correto compartilhamento dos recursos entre as instruções.
ILUSTRAÇÃO CONCEITUAL DE PROCESSAMENTO
SUPERESCALAR
LIMITAÇÕES DA EXECUÇÃO SUPERESCALAR
Predição de desvio: A execução superescalar depende fortemente da previsão de desvio
para buscar e executar instruções especulativas. Se a previsão de desvio falhar, instruções
especulativas podem ser buscadas e executadas desnecessariamente, resultando em
desperdício de recursos e diminuição do desempenho. Além disso, a recuperação de erros de
previsão de desvio também pode introduzir atrasos na execução.
Complexidade do hardware: A implementação da execução superescalar requer hardware
complexo, com múltiplas unidades de execução, mecanismos de escalonamento, buffers e
circuitos de controle adicionais. Isso resulta em um aumento no consumo de energia e no custo
do processador.
Diminuição do ganho de desempenho com instruções dependentes: Se um programa contém
um grande número de instruções dependentes, em que cada instrução depende dos resultados
anteriores, o potencial de paralelismo da execução superescalar pode ser limitado. Nesses
casos, o desempenho obtido pela execução superescalar pode ser semelhante ao de uma
execução escalar tradicional.
POLÍTICAS DE EMISSÃO E CONCLUSÃO DE INSTRUÇÕES
SUPERESCALARES-(A) EMISSÃO EM-ORDEM E
CONCLUSÃO EM-ORDEM
(B) EMISSÃO EM-ORDEM E CONCLUSÃO FORA-
DE-ORDEM
(C) EMISSÃO FORA-DE-ORDEM E CONCLUSÃO
FORA-DE-ORDEM
POLÍTICAS DE EMISSÃO E CONCLUSÃO DE
INSTRUÇÕES SUPERESCALARES-
O exemplo assume as seguintes restrições em um fragmento de código de seis
instruções:
I1 requer dois ciclos para executar.
I3 e I4 competem pela mesma unidade funcional.
I5 depende do valor produzido por I4.
I5 e I6 competem pela mesma unidade funcional.
A RENOMEAÇÃO DE REGISTADORES
A renomeação de registadores é uma técnica utilizada em processadores superescalares para melhorar o desempenho e
permitir a execução de instruções em paralelo de forma mais eficiente. Essa técnica busca mitigar o problema das
dependências de dados entre as instruções.
Quando um processador executa instruções em paralelo, pode haver situações em que uma instrução depende do resultado
de uma instrução anterior. Essas dependências de dados podem criar gargalos de desempenho, pois as instruções
subsequentes precisam esperar pelos resultados das instruções anteriores antes de poderem ser executadas.
A renomeação de registradores resolve esse problema através da criação de várias cópias físicas dos registradores
arquiteturais (aqueles visíveis para o programador). Essas cópias físicas são chamadas de registradores renomeados ou
registradores de destino.
Quando uma instrução é emitida para execução, os operandos são buscados nos registradores renomeados em vez dos
registradores arquiteturais. Isso permite que várias instruções que dependem dos mesmos registradores arquiteturais sejam
executadas em paralelo, pois cada instrução tem seus próprios registradores renomeados.
A RENOMEAÇÃO DE REGISTADORES
O processo de renomeação de registradores envolve as seguintes etapas:
Emissão e decodificação: As instruções são emitidas pelo escalonador de instruções e
decodificadas para determinar suas operações e operandos.
Alocação de registradores renomeados: Os registradores renomeados são alocados
para as instruções. Se houver dependências de dados entre as instruções,
registradores renomeados diferentes serão atribuídos para evitar conflitos.
A RENOMEAÇÃO DE REGISTADORES
Busca e escrita de operandos: Os operandos necessários para a execução das instruções são
buscados nos registadores renomeados ou na memória. Os resultados são escritos nos
registradores renomeados.
Commit: Quando as instruções são concluídas, os resultados são transferidos dos registadores
renomeados para os registradores arquiteturais. Esse processo é chamado de commit e
garante a corretude da execução.
A renomeação de registadores permite que o processador execute instruções em paralelo de
forma mais eficiente, reduzindo os gargalos causados por dependências de dados. Essa
técnica é amplamente utilizada em processadores modernos e contribui significativamente
para o aumento do desempenho e da capacidade de processamento.
PIPELINE DE MICROPROCESSADOR
Pipeline é uma técnica de design de processadores que visa melhorar o desempenho ao
dividir o ciclo de execução de uma instrução em várias etapas menores. Cada etapa do
pipeline executa uma parte específica da instrução, permitindo que múltiplas instruções sejam
processadas simultaneamente em diferentes estágios do pipeline.
O pipeline de um processador pode ser dividido em estágios, como busca de instrução,
decodificação, busca de operandos, execução e escrita de resultados. Cada estágio é
responsável por uma tarefa específica e as instruções passam sequencialmente por esses
estágios.
A ideia por trás do pipeline é que, enquanto uma instrução está em um estágio, a próxima
instrução pode entrar no estágio anterior. Isso permite que múltiplas instruções estejam em
diferentes estágios do pipeline ao mesmo tempo, aumentando a taxa de execução das
instruções e melhorando o desempenho.
PIPELINE DE MICROPROCESSADOR
O tempo entre as execuções em um pipeline é determinado pela soma dos tempos de cada estágio do
pipeline, juntamente com o tempo necessário para a propagação de sinais e possíveis atrasos devido a
dependências de dados. A fórmula geral para calcular o tempo de execução em um pipeline é conhecida
como a Lei de Amdahl.
A Lei de Amdahl é dada pela seguinte fórmula:
Tempo de Execução = Tempo de Execução Não-Pipelined / (Taxa de Aceleração do Pipeline + Overhead
do Pipeline)
O tempo de execução não-pipelined refere-se ao tempo necessário para executar as mesmas instruções
sem a utilização de um pipeline. A taxa de aceleração do pipeline é a medida de quantas vezes o pipeline
é mais rápido em relação à execução não-pipelined. O overhead do pipeline representa o tempo adicional
necessário devido aos estágios do pipeline, como latência de busca, decodificação, execução, etc.
Para calcular o tempo entre as execuções em um pipeline específico, você precisa conhecer os tempos de
cada estágio do pipeline, a taxa de aceleração do pipeline e o overhead do pipeline. Essas informações
podem ser obtidas através de medições,simulações ou especificações do processador.
É importante observar que a fórmula da Lei de Amdahl é uma simplificação e não leva em consideração
outros fatores, como dependências de dados, desvios condicionais e outros eventos que podem afetar o
desempenho real do pipeline. Portanto, a fórmula fornece apenas uma estimativa aproximada do tempo
entre as execuções em um pipeline.
PIPELINE DE MICROPROCESSADOR
No entanto, o pipeline pode enfrentar alguns desafios, como dependências de dados
entre as instruções. Quando uma instrução depende do resultado de uma instrução
anterior, é necessário garantir a correta ordem de execução das instruções para
evitar resultados incorretos. Dependências de dados podem causar atrasos no
pipeline, pois as instruções subsequentes devem esperar pelos resultados das
instruções anteriores.
Além disso, o pipeline também pode enfrentar outros problemas, como desvios
condicionais, onde a próxima instrução a ser executada depende de uma condição.
Desvios condicionais podem resultar em instruções buscadas e decodificadas
desnecessariamente, o que pode causar atrasos e reduzir a eficiência do pipeline.
PIPELINE DE MICROPROCESSADOR
Em relação ao ponto flutuante, o pipeline de ponto flutuante é um tipo específico de
pipeline que é projetado para executar operações aritméticas em números de ponto
flutuante. As operações de ponto flutuante, como adição, subtração, multiplicação e
divisão, são executadas em unidades de ponto flutuante dedicadas.
O pipeline de ponto flutuante divide o processo de execução das operações em
várias etapas, permitindo que múltiplas operações de ponto flutuante sejam
processadas simultaneamente. Isso é especialmente importante em aplicações que
exigem um alto desempenho de cálculos matemáticos, como simulações científicas,
processamento de imagem ou gráficos 3D.
PIPELINE DE MICROPROCESSADOR
Assim como o pipeline convencional, o pipeline de ponto flutuante pode enfrentar
desafios, como dependências de dados e desvios condicionais, que precisam ser
gerenciados para garantir a correta ordem de execução das operações e evitar
resultados incorretos.
Em resumo, tanto o pipeline geral quanto o pipeline de ponto flutuante são técnicas
de design de processadores que visam melhorar o desempenho ao dividir o ciclo de
execução de instruções em etapas menores e permitir a execução paralela de
múltiplas instruções.
UM PROCESSADOR SUPERESCALAR COM PIPELINE
DUPLO
PIPELINE DE MICROPROCESSADOR
Actualmente, a grande maioria dos sistemas de
computação é fabricado em torno de
processadores que buscam maior velocidade na
realização de suas actividades.
25
Um dos processos mais usados é o que conhecemos naindústria como linha de
montagem ("pipeline"), no qual a UCP se divide em várias partes funcionais distintas
(estágios), cada uma correspondendo a uma determinada actividade.
PIPELINE DE MICROPROCESSADOR
Várias instruções são realizadas de forma simultânea,
embora em estágios diferentes.
Exemplo
Lavanderia
Colocar uma carga de roupa na lavadora. (L) (30)
Quando terminar de lavar, colocar na secadora. (S)(40)
Quando terminar de secar, dobrá-las. (D)(20)
90 minutos depois, começar de novo a lavar
PIPELINE DE MICROPROCESSADOR
Exemplo 2: Ciclo de instrução:
Considere um pipeline com 6 estágios de mesma duração:
busca de instrução (BI);
decodificaçãodeinstrução(DI);
cálculo de operandos (CO);
busca de operandos (BO);
execução de instrução (EI);
escrita de operando (EO).
MULTITHREADING E CHIPS MULTIPROCESSADORES
Multithreading e chips multiprocessadores são conceitos relacionados ao processamento paralelo,
nos quais múltiplas tarefas ou processadores trabalham simultaneamente para realizar
computação de forma mais eficiente. Vamos explorar cada um desses conceitos separadamente:
Multithreading:
Multithreading refere-se à capacidade de um sistema executar múltiplas threads ou fluxos de
execução de forma concorrente. Uma thread é uma sequência de instruções que pode ser
executada independentemente das outras threads em um programa. Com o multithreading, várias
threads podem ser executadas ao mesmo tempo, compartilhando recursos do sistema, como a CPU.
A medida mais importante de desempenho para um processador é a taxa em que ele executa as
instruções.Isso pode ser expresso como:
Taxa MIPS = f * IPC
onde f é a frequência de clock do processador, em MHz, e IPC (instruções por ciclo) é o número
médio de instruções executadas por ciclo
MULTITHREADING E CHIPS MULTIPROCESSADORES
Existem diferentes abordagens de multithreading, incluindo:
Multithreading a nível de software: Nessa abordagem, o sistema operacional ou a
aplicação divide o trabalho em várias threads que são executadas concorrentemente
em uma única CPU. Cada thread é agendada pelo sistema operacional para
executar por um determinado tempo fatiado entre as várias threads.
Multithreading a nível de hardware: Nessa abordagem, o processador possui suporte
embutido para a execução de várias threads simultaneamente. Isso pode ser
alcançado com o uso de múltiplos conjuntos de registradores e unidades de
execução, permitindo que várias threads sejam executadas em paralelo em um único
núcleo de processamento.
MULTITHREADING E CHIPS MULTIPROCESSADORES
O multithreading oferece benefícios, como melhor utilização dos recursos da CPU,
maior capacidade de resposta em sistemas multitarefa e maior potencial de
escalabilidade em aplicações paralelizáveis.
Chips multiprocessadores:
Chips multiprocessadores, também conhecidos como processadores multi-core, são
projetados com dois ou mais núcleos independentes em um único chip. Cada núcleo é
capaz de executar instruções de forma independente e possui seus próprios recursos,
como registradores, caches e unidades de execução.
Com os chips multiprocessadores, é possível ter múltiplos processadores trabalhando
em paralelo em um único chip. Cada processador pode executar tarefas
independentes simultaneamente, aumentando significativamente a capacidade de
processamento em relação a um único núcleo.
MULTITHREADING E CHIPS MULTIPROCESSADORES
Os chips multiprocessadores oferecem vantagens como:
Paralelismo de tarefas: Com múltiplos núcleos, diferentes tarefas podem ser executadas simultaneamente em cada núcleo,
melhorando a eficiência e o desempenho geral do sistema.
Escalabilidade: Adicionar mais núcleos em um chip multiprocessador é uma maneira escalável de aumentar a capacidade de
processamento sem a necessidade de aumentar a frequência do clock ou a complexidade do design.
Maior capacidade de resposta: Em sistemas multitarefa, cada núcleo pode ser dedicado a uma tarefa específica, permitindo
uma melhor capacidade de resposta do sistema, especialmente em ambientes onde várias tarefas estão em execução ao
mesmo tempo.
No entanto, é importante observar que nem todas as aplicações se beneficiam totalmente dos chips multiprocessadores. O
desempenho real depende da natureza das tarefas executadas e do grau de paralelismo que essas tarefas podem
explorar. Além disso, a comunicação e a sincronização entre os núcleos podem introduzir sobrecarga e latência adicionais.
Em resumo, multithreading e chips multiprocessadores são abordagens para alcançar o processamento paralelo e melhorar o
desempenho do sistema. O multithreading permite a execução simultânea de várias threads em uma CPU, enquanto os chips
multiprocessadores possuem múltiplos núcleos independentes que podem executar tarefas simultaneamente em um único chip.
TRABALHO SEMESTRAL
1-Arquiteturas de processadores para computação de alto desempenho (HPC)-POS-
LABORAL
2-Optimização de desempenho em arquiteturas multicore-LABORAL