Você está na página 1de 46

Paralelismo em nvel de instrues e processadores superescalares

Dennis Svio Martins da Silva dennissavio@hotmail.com

Introduo
Implementao superescalar Aquela onde as instrues comuns (aritmtica de inteiros e de pontos flutuantes, leituras, escritas e desvios condicionais) podem ser iniciadas simultaneamente e executadas independentemente, de maneira concorrente, em mltiplos pipelines.
Pode ser usada em arquiteturas RISC e CISC

Introduo
Superscalar termo que se refere a mquinas projetadas para melhorar o desempenho da execuo de instrues escalares. Abordagem superescalar Aquele em que mltiplos e independentes pipelines de instrues so usados, de maneira paralela.
Busca mltiplas instrues ao mesmo tempo e depois tenta localizar instrues prximas umas das outras que sejam independentes (A entrada de uma no depende das sadas de outra) umas das outras e possam ser executadas em paralelo. Quando detectadas as dependncias, o processador pode executar e completar instrues em uma ordem diferente do cdigo de mquina original.

Superpipeline
Explora o fato de que muitos estgios de pipeline executam tarefas que requerem menos do que metade de um ciclo de clock. Essa velocidade interna dobrada permite executar duas tarefas em um nico ciclo de clock externo.

Buscar

Decodif.

Executar

Escrever

Pipeline simples de 4 instrues

Superpipeline

Superscalar

Tempo

Limitaes do paralelismo
Paralelismo em nvel de instrues grau em que, em mdia, as instrues de um programa podem ser executadas em paralelo.
Pode ser otimizado por uma combinao de otimizao baseada em compilador e tcnicas de hardware.

O paralelismo possui cinco limitaes fundamentais:


Dependncia de dados verdadeira Dependncia procedural Conflitos de recursos Dependncia de sada Antidependncia

Dependncia de dados verdadeira


Tambm conhecida como dependncia de fluxo ou dependncia de escrita aps leitura (a.k.a. Write After Read ou WAR). Duas instrues so obtidas em paralelo, mas uma delas atrasada devido dependncia de dados processados pela outra, por tantos ciclos de clock forem necessrios para remoo da dependncia (Todos os valores de entrada serem produzidos).

Dependncia de dados verdadeira


Ex:
ADD MOV EAX, EBX, ECX EAX ;Carrega o registrador EAX com o contedo de ECX mais o contedo de EAX ;carrega EBX com o contedo de EAX

No caso acima, alguns ciclos sero necessrios at que o registrador EAX esteja liberado (Quando a segunda instruo entra no estgio de execuo, a primeira ainda est no pipeline)

Dependncia de dados verdadeira


Ex:
ADD MOV EAX, EBX, eff EAX ;Carrega o registrador EAX com o contedo do endereo de memria efetivo eff ;carrega EBX com o contedo de EAX

Um processador leva dois ou mais ciclos para executar uma leitura de memria quando a leitura um acesso cache. Se ocorrer uma falha de cache em todos os nveis de cache, podem levar dezenas ou centenas de ciclos para recuperar os dados de uma memria fora do chip.

Dependncia de dados verdadeira


Uma maneira de compensar esse atraso o compilador reordenar as instrues para que uma ou mais instrues subsequentes que no dependam de leitura da memria possam seguir pelo pipeline.
Pode no ser muito eficiente, pois mesmo rearranjando as instrues independentes, sua execuo pode levar apenas poucos ciclos de instruo, deixando o processador ocioso at o termino da leitura.

Dependncias Procedurais
Complicao decorrente da existncia de desvios Uma dependncia procedural uma dependncia existente entre um desvio e as instrues que vem depois dele.
Essa dependncia j era prejudicial no pipeline escalar, e se torna ainda mais severa no pipeline superescalar (maior perda de oportunidade)

Conflito de recursos
Competio de duas instrues pelo mesmo recurso, ao mesmo tempo. Exemplos de recursos:
Memria Cache Barramentos Entradas para banco de registradores Unidades funcionais (EX: somador da ALU)

Pode ser evitado pela duplicao dos recursos, ou amenizado por algum pipeline interno da unidade funcional afetada.

Buscar

Decodif.

Executar

Escrever

i0

Sem dependncia

i1

i0 I1

Dependncia de Dados (i1 usa dados computados por i0)

I0 i1 I2 I3 I4 I5

Dependncia procedural Desvio em i1

I0 i1

Conflito de recurso (i0 e i1 usam a mesma unidade funcional)

Questes de projeto de paralelismo


Paralelismo em nvel de instrues e paralelismo de mquina Poltica de emisso de instrues Renomeao de registradores Previso de desvio Execuo superescalar Implementao superescalar

Paralelismo em nvel de instrues e paralelismo de mquina


Paralelismo em nvel de instrues Existe quando as instrues de uma sequncia so independentes e, assim, podem ser executadas em paralelo por sobreposio.
Load R1 <- R2 Add R3 <- R3, 1 Add R4 <- R4, R2
Instrues Independentes

Add R3 <- R3, 1 Add R4 <- R3, R2 Store [R4] <- R0


Instrues dependentes

Paralelismo em nvel de instrues e paralelismo de mquina


Paralelismo em nvel de instrues O grau do paralelismo em nvel de instrues determinado por:
Frequncia da dependncia de dados verdadeira Dependncias procedurais no cdigo. Latncia da operao (tempo at que o resultado de uma operao esteja disponvel para uso como um operando em uma instruo subsequente).

Paralelismo em nvel de instrues e paralelismo de mquina


Paralelismo de mquina Medida da habilidade do processador para obter vantagem do paralelismo em nvel de instrues. Determinado por:
Nmero de instrues que podem ser obtidas e executadas ao mesmo tempo (nmero de pipelines paralelos) Velocidade e sofisticao dos mecanismos que o processador usa para localizar instrues independentes.

Poltica de emisso de instrues


Emisso da instruo (instruction issue) Processo de iniciao da execuo da instruo em unidades funcionais do processador
Ocorre quando a instruo movida do estgio de decodificao para o primeiro estgio de execuo do pipeline.

Poltica de emisso de instrues protocolo usado para emitir as instrues

Poltica de emisso de instrues


Basicamente, o processador busca instrues do pipeline seguintes atual que podem ser trazidas no pipeline e executadas. Trs tipos de ordenao de instrues so importantes:
A ordem em que as instrues so lidas A ordem em que as instrues so executadas A ordem em que as instrues atualizam o contedo dos registradores e as posies de memria.

Poltica de emisso de instrues


Para otimizar o pipeline, o processador precisa alterar uma ou mais dessas ordens respeitando a ordem a ser encontrada em uma execuo estritamente sequencial.
Logicamente, isso deve ocorrer sem prejuzo ao resultado correto.

As polticas de emisso superescalares se agrupam em trs categorias:


Emisso-em-ordem com concluso-em-ordem Emisso-em-ordem com concluso fora-de-ordem Emisso fora-de-ordem com concluso fora-de-ordem

Emisso-em-ordem com conclusoem-ordem


Poltica mais simples Segue a ordem exata que seria alcanada pela execuo sequencial (emisso em ordem) e pela escrita de resultados na mesma ordem (concluso em ordem) Nem mesmo pipelines escalares seguem uma poltica to simplista

Emisso-em-ordem com conclusoem-ordem


Para entender o exemplo a seguir, considere: 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

Emisso-em-ordem com conclusoem-ordem


Duas instrues so obtidas ao mesmo tempo e passadas para a unidade de decodificao O prximo par de instrues s pode entrar na unidade de decodificao quando o primeiro par sai Para garantir a concluso-em-ordem, quando ocorre um conflito por uma unidade funcional ou quando uma unidade funcional requer mais do que um ciclo para gerar um resultado, a emisso da instruo para temporariamente

Emisso-em-ordem com conclusoem-ordem


Decodificar i1 i3 i3 i5 i2 i4 i4 i4 i6 i6 I5 i6 i5 i6 i1 i1 i3 i4 i3 i4 i1 i2 i2 Executar Escrever Ciclo 1 2 3 4 5 6 7 8

Emisso-em-ordem com conclusofora-de-ordem


Decodificar i1 i3 i5 i2 i4 i4 i6 i6 i5 i6 i1 i1 i2 i3 i4 i2 i1 I4 I5 i6 I3 Executar Escrever Ciclo 1 2 3 4 5 6 7

Melhora o desempenho de instrues que requerem mltiplos ciclos No exemplo acima, i2 tem permisso de concluir antes de i1. Assim, i3 pode ser concluda antes e um ciclo pode ser economizado

Emisso-em-ordem com conclusofora-de-ordem


Qualquer nmero de instrues pode estar no estgio de execuo em qualquer tempo (respeitado o limite do paralelismo) A emisso de instrues parada por conflitos de recursos, dependncias de dados ou dependncias funcionais Problema na poltica: possibilidade de dependncia de sada (a.k.a dependncia de escrita aps escrita, ou WAW write after write)

Emisso-em-ordem com conclusofora-de-ordem


Dependncia de sada - Ex.:

I1: R3 <- R3 op R5 I2: R4 <- R3 + 1 I3: R3 <- R5 + 1 I4: R7 <- R3 op R4


Dependncias de dados verdadeiras: i1 e i2; i3 e i4; Problema: caso i3 termine primeiro que i1, quando i4 for executar, usar um valor desatualizado para R3
No caso, a instruo dever ser parada caso seu resultado possa ser sobrescrito posteriormente por alguma instruo mais antiga que leva mais tempo para completar

Emisso-em-ordem com conclusofora-de-ordem


Requer uma lgica de instrues mais complexa que a concluso-em-ordem. Necessita de implementao de interrupes e excees
Na ocorrncia de interrupes, quando a instruo que causou a interrupo volta ao contexto, deve-se ser considerado que as instrues a serem executadas depois dela j podem ter sido completadas.

Emisso-fora-de-ordem com concluso-fora-de-ordem


Emisso fora-de-ordem permite procurar adiante no pipeline por instrues independentes das que esto sendo executadas Implementada por meio de uma separao nos estgios de decodificao e execuo
Isso feito por meio de um buffer conhecido como janela de instrues

Emisso-fora-de-ordem com concluso-fora-de-ordem


A janela de instrues permite ao processador identificar instrues independentes posteriores que possam ser trazidas para o estgio de execuo. No final, pode ser usado um buffer de reordenao para reorganizar os resultados completados fora de ordem.

Emisso-fora-de-ordem com concluso-fora-de-ordem


Funcionamento da janela de instrues: Quando o processador decodifica uma instruo, ela colocada na janela de instrues. Enquanto a janela no estiver cheia, o processador prossegue decodificando novas instrues. Quando uma unidade funcional se torna disponvel no estgio de execuo, uma instruo da janela de instrues pode ser emitida para o estgio de execuo, considerando que:
Ela precisa de uma unidade funcional particular que esteja disponvel Nenhum conflito ou dependncia bloqueie essa instruo

Emisso-fora-de-ordem com concluso-fora-de-ordem


Decodificar i1 i3 i5 i2 i4 i6 i1, i2 i3, i4 i4, i5, i6 i5 i1 i1 I6 i5 i2 i3 i4 i2 i1 I4 I5 i3 i6 Janela Executar Escrever Ciclo 1 2 3 4 5 6

Obs: i5 foi executada depois, por depender de i4 Obs2: A janela NO um estgio adicional de pipeline. Apenas significa que o processador tem informao suficiente sobre a instruo para definir quando ela pode ser emitida

Emisso-fora-de-ordem com concluso-fora-de-ordem


Problema na poltica: possibilidade de antidependncia (Dependncia de ler aps escrever, ou RAW Read After Write)
Uma instruo posterior no pode completar sua execuo antes que as instrues anteriores que utilizam seus valores tenham lido seus operandos corretamente.

Emisso-fora-de-ordem com concluso-fora-de-ordem


Antidependncia Ex.:

I1: R3 <- R3 op R5 I2: R4 <- R3 + 1 I3: R3 <- R5 + 1 I4: R7 <- R3 op R4


Se i3 atualizar seu valor antes da execuo de i2, i2 poder ser executada com valores inconsistentes para R3.

Renomeao de registradores
Como visto, emisso e concluso de instrues fora de ordem aumentam a possibilidade de dependncias.
Isso dificulta ao compilador especificar o contedo do registrador em cada ponto da execuo. Os valores nos registradores no podem ser totalmente conhecidos em cada momento apenas considerando a sequncia de instrues definida pelo programa. Caso haja conflito, o processador deve resolv-los parando ocasionalmente um estgio do pipeline

Renomeao de registradores
O problema se torna mais difcil de resolver quando tcnicas de otimizao de registradores so usadas, pois h tendncia de aumento de uso de registradores e, por consequncia, de conflitos.

Renomeao de registradores
A tcnica de renomeao baseada simplesmente em duplicao de recursos. Registradores so alocados dinamicamente pelo hardware do processador e associados com valores usados pelas instrues em vrios pontos do tempo. Quando um novo valor de registrador criado no programa, um novo registrador real alocado para esse valor.

Renomeao de registradores
As instrues subsequentes que acessam esse valor como operando de origem nesse registrador tm que passar pelo processo de renomeao:
As referncias dos registradores nessas instrues precisam ser revisadas para que se refiram ao registrador que contm o valor necessrio. A mesma referncia do registrador original pode se referir a registradores reais diferentes, se valores diferentes so pretendidos

Renomeao de registradores
Ex:

I1: R3b <- R3a op R5a I2: R4b <- R3b + 1 I3: R3c <- R5a + 1 I4: R7b <- R3c op R4b

No exemplo acima, um mesmo registrador lgico pode possuir vrios registradores de hardware (diferenciados pelos valores subscritos, no exemplo)
A criao do registrador R3c evitou dependncia RAW da primeira instruo, e dependncia de sada da segunda. Assim, I3 pode ser emitida imediatamente, sem espera.

Uma alternativa para renomeao de registradores a tcnica de scoreboarding.

Previso de desvio
A estratgia de desvio atrasado foi muito usada nas mquinas RISC, mas no to eficiente em mquinas superescalares
Problemas relacionados complexidade de gerenciar o delay slot de mltiplas instrues, e suas dependncias.

O uso de previso de desvio se mostrou mais eficaz em mquinas superescalares

Execuo Superescalar
1. O programa a ser executado (escrito pelo programador ou gerado pelo compilador) consiste em uma sequencia linear de instrues. 2. A obteno da instruo usada para formar um fluxo dinmico de instrues
Previses de desvio so realizadas nessa etapa, bem como o tratamento de dependncias.

Execuo Superescalar
3. Em seguida, as instrues so despachadas para uma janela de execuo
Nessa janela, o fluxo no mais sequencial, e sim baseado nas dependncias de dados e disponibilidade de recursos.

4. Finalmente, as instrues so conceitualmente colocadas em sua ordem original e seus resultados so reordenados.
Essa etapa conhecida como commit (confirmar, ou concluir), ou retirar a instruo.

Execuo Superescalar
O commit necessrio, pois as instrues so completadas em uma ordem diferente da definida no programa esttico.
A Previso de desvio e execuo especulativa faz com que instrues que completaram a execuo tenham que ser abandonadas, por no terem sido usadas aps um desvio. Assim, o armazenamento permanente e o registradores visveis ao programa no podem ser atualizados imediatamente quando as instrues completam a execuo. Os dados devem ficar em algum armazenamento temporrio que possa ser usado pelas instrues dependentes e depois so tomados quando for determinado que o modelo sequencial j tenha executado a instruo.

Execuo superescalar
Despachar instruo Programa Esttico _________ _________ _________ _________ _________ _________ _________ Leitura de instruo e previso de desvio _________ _________ _________ _________ _________ _________ _________ Emitir instruo Executar instruo Reordenao e concluso da instruo

Janela de Execuo

_________ _________ _________ _________ _________ _________ _________ _________ _________

As estratgias de busca de instruo que obtm simultaneamente vrias instrues, frequentemente prevendo os resultados das instrues de desvios condicionais. Estas funes requerem o uso de multiplos estgios de busca e decodificao e lgica de previso de desvios Lgica para determinar dependncias verdadeiras envolvendo valores de registradores e mecanismos para transferir esses valores para onde eles forem necessrios durante a execuo

Elementos chave necessrios para implementao superescalar [Smith e Sohi, 1995]

Mecanismo para iniciar, ou emitir, mltiplas instrues em paralelo. Recursos para execuo paralela de mltiplas instrues, incluindo mltiplas unidades funcionais de pipeline e hierarquias de memria capazes de atender simultaneamente vrias referncias de memria. Mecanismos para concluir o estado do processo na ordem correta.

Elementos chave necessrios para implementao superescalar [Smith e Sohi, 1995]

Você também pode gostar