Superescalaridade

12
UNIVERSIDADE FEDERAL DE PELOTAS INSTITUTO DE FÍSICA E MATEMÁTICA DEPARTAMENTO DE INFORMÁTICA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO SUPERESCALARIDADE Anderson Chollet Bruno Machado Jerônimo Medina Madruga Mateus Vilar dos Santos Trabalho de pesquisa apresentado na disciplina de Arquitetura e Organização de Computadores II do Curso de Bacharelado em Ciência da Computação, Instituto de Física e Matemática, Universidade Federal de Pelotas. Professor: Prof. José Luís Almada Güntzel, Dr. 2007

Transcript of Superescalaridade

Page 1: Superescalaridade

UNIVERSIDADE FEDERAL DE PELOTAS INSTITUTO DE FÍSICA E MATEMÁTICA DEPARTAMENTO DE INFORMÁTICA

BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

SUPERESCALARIDADE

Anderson Chollet Bruno Machado

Jerônimo Medina Madruga Mateus Vilar dos Santos

Trabalho de pesquisa apresentado na disciplina de Arquitetura e Organização de Computadores II do Curso de Bacharelado em Ciência da Computação, Instituto de Física e Matemática, Universidade Federal de Pelotas. Professor: Prof. José Luís Almada Güntzel, Dr.

2007

Page 2: Superescalaridade

2

Lista de Figuras

Figura 1 - Estrutura de uma arquitetura superescalar genérica .............................6

Figura 2 - Efeito das dependências no desempenho de uma arquitetura

superescalar ................................................................................................................8

Figura 3 - Diagrama do Pentium 4 .......................................................................10

Page 3: Superescalaridade

3

Sumário

Apresentação .........................................................................................................4

1. Introdução .........................................................................................................5

2. Limitações da superescalaridade .....................................................................7

3. Processadores Superescalares.........................................................................9

4. Execução fora de ordem..................................................................................11

Referências ......................................................................................................... 12

Page 4: Superescalaridade

4

Apresentação

O objetivo deste trabalho é apresentar conceitos sobre superescalaridade,

abrangendo desde suas características até processadores que utilizam essa

arquitetura e por fim mostrar um estudo mais aprofundado sobre a execução fora de

ordem.

Page 5: Superescalaridade

5

1 Introdução

Arquiteturas superescalares são arquiteturas que se utilizam do ILP

(paralelismo a nível de instrução) e do paralelismo de máquina para possibilitar a

leitura, decodificação e execução de mais de uma instrução por ciclo de clock. A

grande vantagem das arquiteturas superescalares é que seu IPC (instruções por

ciclo de clock) é superior a um, ocasionando na maioria dos casos em um

desempenho elevado em comparação com as outras arquiteturas. Mas para que

seja possível esse aumento no desempenho é necessário à utilização de diversos

componentes especiais, que constituem essa arquitetura e que serão analisados

nesse momento:

• Um dos primeiros componentes diferenciais desta arquitetura é seu sistema

de busca de instruções, pois visto que existem múltiplas unidades de

execução, o sistema de busca deverá ser capaz de prover múltiplas

instruções para conseguir usufruir ao máximo da capacidade de execução em

paralelo. O sistema de busca também pode ou não contar com uma lógica de

execução especulativa, para buscar as prováveis instruções a serem

executadas após uma instrução de desvio.

• Outro componente importante é a unidade de decodificação, que devera ter a

capacidade de buscar diversos operandos por ciclo de clock, de acordo com o

número de operandos máximos de uma instrução realizada pela arquitetura

em questão e pelo número de unidades funcionais presentes.

• Para resolver problemas de dependências diretas, também está presente

nesta arquitetura uma janela de instruções, que é um buffer que guarda as

instruções a serem executadas enquanto seus operandos não estão prontos

devido a ocorrências dessas dependências, sendo que essa janela localiza-se

entre os estágios de decodificação e execução.

• Para garantir o paralelismo na execução das instruções, como já citado

anteriormente, é necessário múltiplas unidades de execução pipeline,

possibilitando assim que as diversas instruções despachadas tenham uma

unidade de execução para cada uma delas.

Podemos ver alguns desses componentes na figura abaixo que representa uma

estrutura de uma arquitetura escalar genérica:

Page 6: Superescalaridade

6

Figura 1 – Estrutura de uma arquitetura escalar genérica

Fonte: SHEN 2004

Page 7: Superescalaridade

7

2 Limitações da superescalaridade

Apesar do evidente ganho em desempenho provido por uma arquitetura

superescalar, essa arquitetura também tem suas limitações. Elas são provenientes

de alguns problemas clássicos da execução de instruções em pipelines, outros

surgem dos modelos superescalares que suportam execução fora de ordem e

alguns são relativos a particularidades de certas arquiteturas. Dentre essas

limitações podemos destacar as seguintes:

Conflito por recursos: ocorre quando duas ou mais instruções concorrem pelo

mesmo recurso ao mesmo tempo, como acesso a uma unidade funcional. Para a

solução desse problema se propõe o aumento de unidades funcionais em muitos

casos.

Dependência procedimental: causada quando a presença de instruções de

desvio ou instruções de tamanho variável. No caso das instruções de desvio, não se

pode executar instruções posteriores a um desvio ao mesmo tempo que se executa

instruções anteriores ao desvio, e no caso de instruções de tamanho variável, é

necessário decodificar toda a instrução para descobrir o número de buscas

necessária para a realização da mesma, evitando assim buscas simultâneas.

Dependência de dados: ocorre quando um dado a ser utilizado em uma

instrução está sendo alterado pela instrução anterior ao mesmo, fazendo com que

essa instrução só possa ser executada quando a anterior já tiver terminado.

Antidependência: Ocorre quando uma instrução altera um dado que esta

sendo usado em uma instrução anterior a ela. Para evitar que o dado seja alterado

antes do término da instrução anterior, a instrução em questão só poderá ser

executada após o término da anterior.

Dependência de saída: ocorre quando duas instruções alteram o mesmo

dado, e com isso dependendo da ordem em que são executadas, pode ocasionar

uma alteração não planejada no mesmo. Esse tipo de problema poderá ocorrer

somente em sistemas onde a ordem das instruções pode ser revertida, que é o caso

de execução fora de ordem que será abordado futuramente.

Todas essas limitações acabam por ocasionar atrasos na execução das

instruções, e isso pode ser exemplificado pelo gráfico mostrado a seguir:

Page 8: Superescalaridade

8

Figura 2 – Efeito das dependências no desempenho de uma arquitetura

superescalar

Fonte: STALLINGS 2002

Page 9: Superescalaridade

9

3 Processadores Superescalares

O primeiro computador a ter características superescalares foi o

supercomputador CDC 6600, desenvolvido por Seymor Cray e tendo suas primeiras

unidades funcionais em 1964.

Devido ao avanço da tecnologia RISC, que possibilitava a utilização de

instruções simples e a inclusão de diversas unidades funcionais facilmente para os

projetos da época, a superescalaridade chegou aos microprocessadores comerciais

de um único chip finalmente em meados da década de 90, com o i960 da Intel (em

1988) e o 29050 da AMD.

A partir disso começou a se implementar esse tipo de arquitetura em grande

parte dos projetos desenvolvidos na época, como a arquitetura p6 da Intel,

arquitetura na qual são baseados os processadores pentium pro e pentium II, que

utilizava instruções CISC que eram executadas sobre uma micro-arquitetura

superescalar RISC.

Já a arquitetura PowerPC, teve desde seu primeiro representante as

características superescalares embutidas no projeto, visto que esse primeiro

processador , o PowerPC 601, era baseado na arquitetura RS/6000, que também

era superescalar.

Durante essa evolução de processadores superescalares, houve inúmeros

tipos de projetos diferentes, mas podemos classificá-los em três grandes categorias

relacionadas à sua complexidade quanto ao despacho e a execução de instruções:

• Superescalar Estático:

Esses processadores despacham e executam as instruções na ordem do

programa.

• Superescalar Dinâmico:

Essas máquinas permitem a execução fora de ordem, mas geralmente

despacham as instruções na ordem do programa.

• Superescalar Dinâmico com execução especulativa:

Similares ao anterior, mas com a habilidade de prever as instruções que

provavelmente serão executadas após uma instrução e desvio.

Como exemplo de uma arquitetura superescalar atual, ilustramos aqui o

Page 10: Superescalaridade

10

diagrama do Pentium 4 da Intel:

Figura 3 – Diagrama do Pentium 4

Fonte: STALLINGS 2002

Page 11: Superescalaridade

11

4 Execução fora de ordem

Uma das questões que pode tornar extremamente complexa a implementação

de uma arquitetura superescalar é a possibilidade de haver execução fora de ordem,

ou seja, se as instruções poderão ser executadas fora da ordem prevista pelo

programa.

Esse recurso permite que casos onde existiriam conflitos de dados ou

problemas parecidos sejam contornados seja por técnicas de software ou hardware,

e assim aumenta o desempenho da arquitetura em questão, visto que os atrasos

decorrentes desses problemas diminuirão consideravelmente, além de também

permitir técnicas mais avançadas de predição de desvio.

O grande problema ocasionado pela execução fora de ordem é a

inconsistência de dados, ou seja, dados serem alterados de uma forma não prevista

pelo programa, devido a alterações na ordenação das instruções a serem

executadas. Com isso, é exigido um sistema mais complexo ainda para verificação

de dependências nas instruções a serem executadas, como as técnicas de

renomeação de registradores, buffer de reordenamento e a janela de instruções,

para assegura que não haverá prejuízos relativos a execução não-ordenada do

código.

Page 12: Superescalaridade

12

Referências SUPERSCALAR. Disponível em: <http://en.wikipedia.org/wiki/Superscalar> Acessado em 10 fev. 2007, 14:20:00. PATTERSON, David A.; HENNESSY, John. Organização e Projeto de Computadores: A Interface Hardware/Software . 3ª Edição. Rio de Janeiro: Elsevier, 2005. SUPERSCALAR PROCESSORS. Disponível em: <http://www.cs.swan.ac.uk/~csneal/HPM/superscalar.html> Acessado em 9 fev. 2007, 18:33:00. SHEN, Jonh P. Modern Processors Design: Fundamentals of Superscal ar Processors (Electrical and Computer Engineering) . 1ª Edição, McGraw-Hill, Nova York, 2004 STALLINGS, William. Computer Organization and Architecture – Design for Performance . 6ª Edição. Nova Jersey: Prentice Hall, 2002. ARQUITETURAS SUPERESCALARES. Disponível em: <http://equipe.nce.ufrj.br/gabriel/arqcomp2/Superscalar.pdf> Acessado em 9 fev. 2007, 17:50:00. PATTERSON, David A.; HENNESSY, John, Computer Architecture: A Quantitative Approach . 3ª Edição, Morgan Kaufmann, Nova York, 2003