Arquiteturas Superescalares
Arquiteturas Superescalares
Arquiteturas Superescalares
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):
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 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.
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.
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).