Vous êtes sur la page 1sur 8

ARQUITETURAS SUPERESCALARES Organizao geral Arquiteturas de processadores superescalares exploram o paralelismo de instruo - Instrucion Level Parallelism (ILP).

As mltiplas unidades funcionais independentes permitem despachar simultaneamente mais de uma instruo por ciclo. As figuras Figura 1 e Figura 2 mostram a organizao geral de uma arquitetura superescalar.

Figura 1

Figura 2
Execuo Superescalar Processadores superescalares variam o nmero de instruo por ciclo de clock escalando-as de modo esttico ou dinmico. As mquinas superescalares tentam paralelizar a execuo de instrues independentes, em cada estgio do pipeline. Caso as instrues possuam dependncias, um menor nmero de instrues ser executado por ciclo. O pipeline mais simples: (Uma instruo / 3 passos):

Figura 3 Execuo de instruo em pipeline simples 5.


Nas arquiteturas superescalares o pipeline de hardware permite que todas as unidades possam executar concorrentemente, porm ele pode ser interrompido (stall )por, por exemplo, instrues de branchs. O pipeline mais simples: (Uma instruo / 3 passos):

Figura 4 - Execuo de instruo em hardware pipeline 5.


Aplicando analogia de correspondncia de cada componente do computador a um componente de uma lavanderia, numa lavanderia superescalar seriam encontradas vrias mquinas de lavar e vrias de secar. Portanto, poder-se-ia lavar e secar o dobro de roupa com um jogo de duas mquinas de lavar e duas de secar, por exemplo, embora fosse necessrio um maior esforo de manejo devido ao aumento do volume de roupas no mesmo intervalo de tempo. A desvantagem seria representada por este trabalho extra que se tem para manter todas as unidades ocupadas, alm de se transferir um maior volume de informaes para o prximo estgio. Quando cada unidade pode ser colocada no pipeline (Multiply Pipeline) e cada estgio de pipeline leva menos ciclos para completar a operao, na arquitetura superescalar, se todos os estgios esto ativos em paralelo no pipeline, obtm-se a finalizao de mais de uma instruo por ciclo como ilustrado na Figura 5.

Figura 5 - Execuo de instruo em pipeline superescalar 5.


Dessa forma esses processadores podem sustentar uma taxa de execuo maior que uma instruo por ciclo; o que resulta em um ganho de desempenho significativo em relao s arquiteturas de pipeline escalares, capazes de executar apenas uma instruo por ciclo. A execuo de vrias instrues por estgio permite que se exceda a taxa do clock, isto , permite a CPI menor que um. Por exemplo, um microprocessador de 1000 MHz superescalar com quatro instrues simultneas, pode operar com uma taxa mxima de quatro bilhes de instrues por segundo, obtendo-se assim CPI de 0,25. Para garantir o ganho potencial das arquiteturas superescalares em relao s outras, necessrio manter as unidades funcionais sempre ocupadas, ou seja, despachar o maior nmero de instrues possvel a cada ciclo. Melhorias em arquiteturas superescalares Mtodos de previso de desvios, execuo especulativa e escalonamento de instrues so objetos de interesse na melhoria das arquiteturas superescalares. Para efeito de estudo de melhorias, trs categorias de limitaes devem ser consideradas 5 para otimizao do uso do pipeline superescalar: 1. Conflitos por recursos que ocorrem quando duas ou mais instrues

a. A presena de branches, considerada o maior problema para obteno de um paralelismo timo. b. Instrues de tamanho varivel, que no podem ser buscadas e despachadas em paralelo, pois uma instruo deve ser decodificada para se identificar a prxima. Assim arquiteturas RISC conseguem uma aplicao eficiente de tcnicas superescalares, pois possuem instruo com tamanho e formato fixos. 3. Conflitos de Dados produzidos por dependncias entre instrues do programa, que devem ser consideradas para validar o despacho e completude das operaes em execues fora de ordem. A dependncia de dados pode ser classificada em: ? Dependncia real de dados - quando a sada de uma instruo requerida como entrada da instruo subseqente; no pode ser eliminada por compiladores ou tcnicas de hardware. ? Dependncia de sada quando duas ou mais instrues esto escrevendo em um mesmo local. Antidependncia - quando uma instruo usa um local e um operando enquanto a seguinte est escrevendo no mesmo local As conseqncias dessas situaes em arquiteturas superescalares so mais severas que em outros tipos de pipeline, pois a oportunidade potencial de grande paralelismo pode ser perdida. Uma ferramenta importante nas arquiteturas superescalares mais modernas a programao dinmica das instrues, que as despacha por execuo dinmica, em paralelo e fora de ordem, quando so independentes e podem ser despachadas apenas com base na disponibilidade de recursos. Porm deve-se garantir que os resultados sejam idnticos aos produzidos por execuo estrita. Dependncias de dados devem ser consideradas com cuidado, pois apenas parte das instrues so potencialmente adequadas para execuo em paralelo. Para encontra-las o processador necessita selecionar de um conjunto suficientemente grande de seqncia de instrues, isto , uma grande janela de execuo necessria. Dependncias de dados e de controle entre instrues impem uma ordem de precedncia na execuo, de forma que instrues interdependentes no possam ser executadas em paralelo ou fora da ordem em que se encontram no cdigo do programa. Tais dependncias restringem o nmero de instrues que podem ser despachadas e, conseqentemente, limitam o desempenho das arquiteturas superescalares, portanto o estudo de formas para minimizar o efeito de dependncias entre instrues, principalmente em relao ao controle (desvios condicionais), so importantes para a obteno do ganho de desempenho projetado. A execuo de instrues em paralelo requer aplicao de tcnicas como o desdobramento de loop, software pipeline, escalonamento esttico ou dinmico de instrues (veja Figura 7), que permitam implementar polticas de execuo como: despacho em ordem com finalizao em ordem, despacho

competem pelo mesmo recurso (registrador, memria, unidade funcional) ao mesmo tempo; a introduo de unidades de pipeline paralelas tem por objetivo reduzir possveis conflitos por uso de recursos. 2. Dependncia de controle (procedural), como por exemplo:

em ordem com finalizao fora de ordem e despacho e finalizao fora de ordem. Dependncias de sada e antidependncias podem ser eliminadas automaticamente, com alocao de registradores extras. Esta tcnica chamada register renaming. Escalonamento Superescalar Esttico No escalonamento superescalar esttico as instrues so levadas para execuo em ordem e todo conflito checado em tempo de escalao pelo controle lgico do pipeline, que verifica conflitos entre as instrues que executaro em um dado ciclo de clock, e tambm entre todas as instrues que ainda esto em execuo. Se algum fluxo de instruo dependente (causa conflito de dados) ou no possui coerncia com o critrio de execuo (pode causar um conflito estrutural), apenas instrues da seqncia que precede a instruo do conflito sero despachadas para executar no ciclo em questo. No exemplo a seguir, de clculo da norma de um vetor, as duas unidades de ponto flutuante de mult/add (MADD) no podem estar ocupadas ao mesmo tempo devido dependncia na soma armazenada na varivel t (veja Figura 8). t=0 do i=1,n t=t+a(i)*a(i) end

Figura 8 Exemplo de dependncia de dados 5


Numa verso otimizada duas threads independentes podem ser processadas por duas unidades separadas de ponto flutuante Mult/Add. Compiladores modernos fazem muitas dessas otimizaes automaticamente de forma a aproveitar a estrutura da arquitetura superescalar (veja Figura 9). t1=0 t2=0 do I=1,N,2 t1=t1+a(i)*a(i) t2=t2+a(i+1)*a(i+1) end do

Figura 9 Exemplo de otimizao para eliminao de dependncias 5 com adio de registrador extra. O escalonamento esttico usa a execuo em ordem, como nos primeiros processadores superescalares, mas o escalonamentodinmico, com execuo fora de ordem, o mais utilizado na maioria dos computadores desk-top e servidores atuais.

Processadores Superescalares Escalonado Estaticamente


Num processador superescalar tpico de oito estgios, podem ser executadas de zero (em stall) at oito instrues em um ciclo de clock. Supondo-se que se tem um processador superescalar esttico de quatro issues; durante a busca de instrues, o pipeline receber uma das instrues de uma unidade de busca, que pode nem sempre ser capaz de entregar as quatro instrues, que constituem o conjunto/pacote de quatro instrues que possivelmente podero ser despachadas. A unidade de busca examina cada instruo, dentro do pacote escalado na ordem de programao. Se uma instruo pode causar um conflito estrutural ou um conflito de dados, com uma instruo ainda em execuo ou com uma instruo do mesmo pacote, a instruo no despachada. Pode-se ter ento de zero a quatro instrues de um pacote sendo executadas em um dado ciclo de clock. Embora a decodificao e a escalao da instruo logicamente sigam a ordem seqencial, na prtica, a unidade de despacho examina todas as instrues do pacote a ser escalado e checa os conflitos, decidindo se a instruo pode ser despachada. Essas checagens de escalao so complexas, de modo que executa-las em um ciclo pode significar a determinao do comprimento mnimo do ciclo. Em muitos escaladores estticos e em todos os superescalares dinmicos, o estgio de escalao quebrado e pipelined, de forma que possa escalar instrues em todo ciclo de clock. Isso no totalmente simples porque o processador pode tambm detectar conflitos entre dois pacotes de instrues enquanto eles ainda esto na escalao do pipeline. Uma abordagem usar o primeiro estgio do pipeline para decidir quantas instrues do pacote podero ser despachadas simultaneamente, ignorando instrues j despachadas, e usar o segundo

estgio para examinar conflitos entre as instrues selecionadas e aquelas que j foram despachadas. Dividindo-se o despacho em dois estgios e colocando-os em pipeline, o custo de desempenho do despacho da instruo superescalar tende a ter maior penalidade de branch, aumentando a importncia de branch prediciton. Com o aumento da taxa de escalao do processador, o pipelining de estgios de despacho pode tornar-se necessrio. Embora quebrar o estgio de escalao em dois seja razoavelmente simples, menos bvia a maneira de colocar em pipeline. Assim, o despacho de instrues pode ser uma limitao na taxa de clock de processadores superescalares.

Processador Superescalares MIPS Programados Estaticamente


Assumindo duas instrues possam ser despachadas por ciclo de clock e que, uma dessas instrues pode ser load, store, branch ou operaes de inteiro na ULA e a outra possa ser uma operao de ponto flutuante (loads e stores consideradas operaes com inteiros incluindo operaes com registradores de ponto flutuante). Despachar uma operao de inteiro com uma de ponto flutuante muito mais simples e demanda menos arbitrariedade, simplificando o controle da unidade de despacho. Buscar duas instrues mais complexo que buscar apenas uma, pois um par de instrues pode aparecer em qualquer lugar do bloco de cach. Muitos processadores apenas buscam uma instruo se a primeira instruo do par for ltima palavra do bloco de cach. Esta configurao muito parecida com aquela utilizada no processador HP 7100. Embora computadores desktop tenham quatro ou mais despachos por ciclo de clock, o despacho dual em pipelines superescalares (de controle mais complexo) comum no mercado de processadores embarcados. Escalar duas instrues por ciclo requer busca e decodificao de 64 bits de instruo. Os primeiros superescalares limitavam a colocao dos tipos de instruo, por exemplo, a instruo de inteiro deveria vir primeiro, mas essa restrio desapareceu em processadores mais modernos. Assumindo que a colocao da instruo no limitada, existem trs passos envolvidos na busca e escala: buscar duas instrues da cach, determinar quantas podem ser escaladas (zero a duas) e despacha-las corretamente na unidade funcional. Computadores superescalares geralmente se valem de uma unidade independente de pr-busca de instruo. Para esse exemplo simples de superescalar, fazer a checagem de conflitos relativamente direto, pois a restrio de um inteiro e uma instruo de ponto flutuante elimina a maioria das possibilidades de conflito na escalao de um pacote, permitindo em

muitos casos a simples avaliao dos opcodes das instrues. A nica dificuldade quando a instruo de inteiro um load, store ou move de ponto flutuante. Essa possibilidade cria conteno para as portas dos registradores de ponto flutuante e pode criar tambm um conflito RAW, quando a segunda instruo do par depende da primeira (ex. a primeira um PF load e a segunda uma operao de ponto flutuante, ou a primeira uma operao de ponto flutuante e a segunda um store de ponto flutuante). Esse uso de restrio de escalonamento para reduzir a complexidade da estrutura do piepline e da deteco de conflitos, que representa um conflito estrutural, comum nos processadores (tambm h possibilidade de conflitos WAR e WAW entre os limites dos pacotes).