Arquitetura e Organização de Computadores 2 Escalonamento Estático e Arquiteturas VLIW Dynamic Scheduling, Multiple Issue, and Speculation Modern microarchitectures: Dynamic scheduling + multiple issue + speculation Two approaches: Assign reservation stations and update pipeline control table in half clock cycles Only supports 2 instructions/clock Design logic to handle any possible dependencies between the instructions Hybrid approaches Issue logic can become bottleneck 2 1
Emissão múltipla de instruções Para obter CPI<1 é necessário emitir (despachar) mais que uma instrução por ciclo. Processadores com emissão múltipla dividem-se em: 1) Processador super-escalar: número variável de instruções por ciclo, sequenciamento dinâmico (ou estático), execução fora de ordem. 2) Processador VLIW (very long instruction word): número fixo de instruções por ciclo ou pacote de instruções com concorrência explicitamente indicada (EPIC explicit parallel instruction computer); sequenciamento estático. Para cada instrução de um pacote de instruções: examinar as instruções por ordem; instruções em conflito com instruções em execução ou com instruções anteriores do pacote não emitidas. Na prática, as instruções de um pacote são todas examinadas concorrentemente; a complexidade da tarefa obriga a usar uma pipeline no estágio de emissão (aumenta a importância da predição). 3 Caracterização de processadores com multi-emissão 4 2
Tornando CPI < 1: Emitindo Múltiplas Instruções/Ciclo Superscalar MIPS: 2 instruções, 1 FP & 1 outra qualquer Busca (fetch) 64-bits/ciclo de clock (Int. e FP) Tipo Estágios de Pipeline Int. instruction IF ID EX MEM WB FP instruction IF ID EX MEM WB Int. instruction IF ID EX MEM WB FP instruction IF ID EX MEM WB Int. instruction IF ID EX MEM WB FP instruction IF ID EX MEM WB 5 Revisão: desenrolamento de loops para minimizar paradas em MIPS pipeline 1 Loop: LD F0,0(R1) 2 LD F6,-8(R1) 3 LD F10,-16(R1) 4 LD F14,-24(R1) 5 ADDD F4,F0,F2 6 ADDD F8,F6,F2 7 ADDD F12,F10,F2 8 ADDD F16,F14,F2 9 SD F4,0(R1) 10 SD F8,-8(R1) 11 SD F12,-16(R1) 12 SUBI R1,R1,#32 13 BNEZ R1,LOOP 14 SD F16,8(R1) ; 8-32 = -24 14 ciclos de clock, ou 3.5 por iteração CPI = 1 6 3
Desdobramento em Superscalar Integer instruction FP instruction Clock cycle Loop: LD F0,0(R1) 1 LD F6,-8(R1) 2 LD F10,-16(R1) ADDD F4,F0,F2 3 LD F14,-24(R1) ADDD F8,F6,F2 4 LD F18,-32(R1) ADDD F12,F10,F2 5 SD F4,0(R1) ADDD F16,F14,F2 6 SD F8,-8(R1) ADDD F20,F18,F2 7 SD F12,-16(R1) 8 SD F16,-24(R1) 9 SUBI R1,R1,#40 10 BNEZ R1,LOOP 11 SD F20,-32(R1) 12 Desenrola 5 vezes para evitar atrasos 12 clocks, ou 2.4 clocks por iteração CPI = 12 / 17 = ~0.7 LD para ADDD: 2 Ciclos ADDD para SD: 2 Ciclos 7 Múltipla Emissão: Desafio para arquitetura superescalar Enquanto a separação em Inteiros e FPs seja simples em HW, o CPI de 0.5 é possível somente para programas com: Exatamente 50% de operações FP Sem conflitos É difícil: emitir ao mesmo tempo, mais que duas instruções É também difícil decidir se 2 instruções escalares podem ser emitidas ao mesmo tempo => examinar 2 opcodes, 6 especificadores de registradores,... 8 4
VLIW (Very Large Instruction Word) A arquitetura VLIW (Very Long Instruction Word) tenta alcançar maiores níveis de paralelismo de instrução pela execução de instruções longas compostas por múltiplas operações. As palavras de instrução longas consistem de várias operações aritméticas, lógicas e de controle cada uma das quais poderia ser uma operação individual em um processador RISC simples. O processador VLIW executa o conjunto de operações concorrentemente, alcançando assim um alto grau de paralelismo no nível de instrução. É responsabilidade do compilador escalonar as operações de modo a utilizar o melhor possível as unidades funcionais disponíveis no processador. Um dos maiores obstáculos à evolução das arquiteturas VLIW tem sido a falta de compatibilidade binária com as arquiteturas convencionais. 9 VLIW (Very Large Instruction Word) Um número fixo de operações são formatadas como uma instrução longa (chamada de bundle) Objetivo do projeto VLIW - reduzir a complexidade do hardware menor tempo de projeto tempo de ciclo mais curto melhor desempenho consumo de energia reduzido Suporte do compilador para aumentar ILP responsabilidade do compilador montar a palavra VLIW dependente de um melhor sequenciamento de código comparadas com arquiteturas superscalar in-order issue. detectar hazards e latências ocultas. 10 5
Desdobramento em VLIW Memory reference 1 Memory reference 2 FP operation 1 FP operation 2 Integer op. branch Clock LD F0,0(R1) LD F10,-16(R1) LD F18,-32(R1) LD F26,-48(R1) SD F4,0(R1) SD F12,-16(R1) SD F20,-32(R1) SD F28,-0(R1) LD F6,-8(R1) LD F14,-24(R1) LD F22,-40(R1) SD F8,-8(R1) SD F16,-24(R1) SD F24,-40(R1) ADDD F4,F0,F2 ADDD F12,F10,F2 ADDD F20,F18,F2 ADDD F28,F26,F2 ADDD F8,F6,F2 ADDD F16,F14,F2 ADDD F24,F22,F2 ADDD F16,F14,F2 SUBI R1,R1,#48 BNEZ R1,LOOP 1 2 3 4 5 6 7 8 9 Desenrola 7 vezes para evitar atrasos 7 resultados em 9 clocks, ou 1.3 clocks por iteração CPI = 23/9 = ~0.39 Nota: Necessita mais registradores em VLIW (15 vs. 6 em Superescalar) 11 Geração de código para VLIW: Trace Scheduling Dois passos: Seleção de Traço (Trace) Encontrar uma sequência provável de blocos básicos, traço, de uma longa sequência de códigos Compactação de Traço Espremer o traço em algumas instruções VLIW Necessita de código alternativo no caso de erro de previsão de código 12 6
Superscalar vs. VLIW Tamanho de código menor Compatibilidade através de gerações de hardware Hardware Simplificado para decodificação e emissão de instruções Sem conflito entre as instruções Mais registradores 13 Software Pipelining Observação: se iterações de loops são independentes, pode-se obter mais ILP tomando instruções de diferentes iterações Software pipelining: reorganiza loops tal que cada iteração seja composta de instruções de diferentes iterações do loop original Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 Softwarepipelined iteration 14 7
Ops. sobrepostas 24/06/2015 Exemplo de Software Pipelining ITERAÇÃO 0 1 LD F0,0(R1) 2 ADDD F4,F0,F2 3 SD F0,0(R1) 4 SUBI R1,R1,#8 5 BNEZ R1,LOOP ITERAÇÃO 1 1 LD F0,0(R1) 2 ADDD F4,F0,F2 3 SD F0,0(R1) 4 SUBI R1,R1,#8 5 BNEZ R1,LOOP ITERAÇÃO 2 1 LD F0,0(R1) 2 ADDD F4,F0,F2 3 SD F0,0(R1) 4 SUBI R1,R1,#8 5 BNEZ R1,LOOP Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 Softwarepipelined iteration 15 Exemplo de Software Pipelining Antes: desenrolado 3 vezes 1 LD F0,0(R1) 2 ADDD F4,F0,F2 3 SD F4,0(R1) 4 LD F6,-8(R1) 5 ADDD F8,F6,F2 6 SD F8,-8(R1) 7 LD F10,-16(R1) 8 ADDD F12,F10,F2 9 SD F12,-16(R1) 10 SUBI R1,R1,#24 11 BNEZ R1,LOOP Após: Software Pipeline 1 SD F4,0(R1) ;Stores M[i] 2 ADDD F4,F0,F2 ;Adds to M[i-1] 3 LD F0,-16(R1) ;Loads M[i-2] 4 SUBI R1,R1,#8 5 BNEZ R1,LOOP SW Pipeline Tempo Loop Unrolled Tempo 16 8
Intel/HP-IA-64 (ITANIUM ) Explicitly Parallel Instruction Computer (EPIC) Explora a arquitetura VLIW, deixando a detecção do ILP (Instruction Level Parallelism) para os compiladores. 3 Instruções em grupos de 128 bits; campos determinam se as instruções são dependentes ou independentes 64 registradores inteiros + 64 registradores ponto flutuante Hardware checa dependências Execução com Predicado => 40% menos previsões errôneas IA-64 : nome da arquitetura do conjunto de instruções Itanium - implementação Suporte para instruções IA-32, porém com desempenho menor que as últimas versões do Pentium, por explorarem mais o desempenho nas instruções EPIC (VLIW) e não terem suportes de ILP por hardware. 17 Pentium 4 640 na tecnologia de 90 nm (2004) recursos tamanho comentários BTB de front-end 4K Previsão de desvio para instr. IA32 Trace Cache 12K uops Cache de rastreio BTB de trace cache 2K Previsão de desvio para uops Registradores para renomear Unidades funcionais 128 128 uops podem estar em execução com até 48 loads e 32 stores 2 ALUs simples, ALU complexa, load, store, move de PF, aritm.pf Cache de dados L1 16 Kb, associativo de 8 vias, blocos de 64 bytes Cache L2 2Mb, associativo de 8 bias, blocos de 128 18 ALU simples executam no dobro da taxa de clock, aceitando até 2 uops a cada ciclo Write through Write back 9
Pentium 4 19 Overview of Design 20 10
Processador ideal Todas as restrições de ILP são removidas 1) renomeação de registrador um número infinito de registradores virtuais à disposição, por isso todos os WAW e WAR são evitados e um número infinito de instruções pode iniciar simultaneamente 2) previsão de desvio a previsão é perfeita 3) previsão de salto todos os saltos são previstos 4) análise de alias de endereço de memória - todos os endereços de memória são conhecidos, e um load pode ser feito antes de um store, desde que os endereços não sejam iguais. 5) caches perfeitos todos os endereços de memória usam 1 ciclo. 21 ILP num processador ideal inteiros Ponto flututante 22 11
O que um processador ideal precisa fazer 1) olhar muito adiante para encontrar um conjunto de instruções a despachar (emitir), prevendo todos os desvios perfeitamente 2) renomear todos os usos de registrador para evitar WAR e WAW 3) determinar se existem dependências de dados entre as instruções no pacote de emissão; se houver renomear adequadamente 4) determinar se existe alguma dependência de memória entre as instruções sendo emitidas e tratar delas adequadamente 5) oferecer unidades funcionais replicadas suficientes para que todas as instruções prontas sejam emitidas 23 Efeitos da limitação da janela inteiros Ponto flutuante 24 12
Efeitos dos tipos de previsão de desvios 25 Redução do paralelismo pelo número de registradores para renomeação Fig.3.5 26 13
Efeito de níveis variados de análise de alias sobre programas 27 Bibliografia David Patterson e John Hennessy, Arquitetura e Organização de Computadores uma abordagem quantitativa, 5ª Edição, ed. Campus. 28 14