Conceitos Avançados de Arquitetura de Computadores Arquiteturas RISC Reduced Instruction Set Computer Máquinas CISC Complex Instruction Set Computer • Crise do Software – Dificuldades em achar programadores – Aumento da complexidade dos sistema – Aumento do preço do software – Surgimento de linguagens de alto nível – Aumento na complexidade do hardware: Unidades de execução e controle complexas I N E F I C I Ê N C I A Máquinas CISC Complex Instruction Set Computer • Será que esta complexidade é realmente necessária? Comando SAL XPL Fortran C Pascal Média atribuição 47 55 51 38 45 47 if then else 17 17 10 43 29 23 call 25 17 5 12 15 15 loop 6 5 9 3 5 6 go to 0 1 9 3 0 3 outros 5 5 16 1 6 7 Solução: Busca da eficiência na simplicidade • Máquinas RISC Reduced Instruction Set Computer Filosofia RISC • Tornar as máquinas mais simples de modo a torná-las mais velozes: – Poucas instruções, simples e com poucos formatos – Poucos modos de endereçamento – Muitos registradores => Menos buscas na memória => implementação mais eficiente Máquina RISC Implementação eficiente – Conjunto reduzido de instruções simples – Grande número de registradores – Operação similar a uma linha de montagem – Complexidade transferida para o compilador Máquinas RISC Uso eficiente dos registradores • Atribuições • Procedimentos # Var. locais 0 1 2 3 4 >4 % 22 17 20 14 8 20 # Parâmetros 0 1 2 3 4 >4 % 41 19 15 9 7 8 # Termos % 0 80 1 15 2 3 3 2 4 0 >4 Pipeline Lavando Roupa Time 6 PM 7 8 9 10 11 12 1 2 AM 6 PM 7 8 9 10 11 12 1 2 AM Task order A B C D Time Task order A B C D Pipeline O que é pipeline? • É composto por uma série de estágios operando em paralelo onde uma parte do trabalho é feito em cada estágio. • O trabalho não está concluído até que tenha passado por todos os estágios. Surgimento do termo “pipeline” • Campbell (ed), Buchholz, Brooks, Bloch, et al, 1962, Planning a Computer System: Project STRETCH [p 204-5] “The data flow through the computer is comparable to a pipeline which, once filled, has a large output rate no matter what its length.” Carroceria Motor Elétrica Portas Janelas Linha de montagem automotiva Acessórios Para que pipeline? Velocidade • Exemplos: – IBM 7030 100x mais rápido que o 704 (o mais rápido naquele tempo). Melhorias comuns dariam 10x mais. – IBM 360/91 é 1 a 2 ordens de magnitude mais rápido que o 7090. Sem pipeline se conseguiria apenas 4x mais. – O 6502 tem throughput similar ao 8080 (que tem clock 4x mais rápido) Execução de um programa com pipeline Incrementa PC Busca instrução Decodificação da Instrução e Leitura de Registradores Execução (ALU) Acesso a dados externos (memória) Escrita de Resultado (Registradores) registradores Pipeline • Em condições ideais, o ganho em performance é igual ao número de estágios do pipeline • Para estágios desbalanceados isto não acontece: Tempo por estágio = Tempo do estágio mais lento • Há um aumento de tempo de cada estágio por conta dos registradores necessários ao Pipeline • Mesmo que uma instrução não use um estágio, seu tempo é computado Pipeline: tão lento quanto o mais lento dos estágios 2 Time lw $1, 100($0) Instruction Reg fetch lw $2, 200($0) 4 6 8 ALU Data access 10 12 14 ALU Data access 16 18 Reg Instruction Reg fetch 8 ns lw $3, 300($0) Reg Instruction fetch 8 ns ... 8 ns 2 Time lw $1, 100($0) Instruction fetch lw $2, 200($0) 2 ns lw $3, 300($0) 4 Reg Instruction fetch 2 ns 6 ALU Reg Instruction fetch 2 ns 8 Data access ALU Reg 2 ns 10 14 12 Reg Data access Reg ALU Data access 2 ns 2 ns Reg 2 ns Registradores Pipeline IF: Instruction fetch ID: Instruction decode/ register file read EX: Execute/ address calculation MEM: Memory access WB: Write back 0 M u x 1 Add 4 Add Add result Shift left 2 PC Read register 1 Address Instruction Instruction memory Read data 1 Read register 2 Registers Read Write data 2 register Write data 0 M u x 1 Zero ALU ALU result Address Data memory Write data 16 Sign extend 32 Read data 1 M u x 0 Pipeline: Detalhe da instrução lw 0 M u x 1 IF/ID ID/EX EX/MEM MEM/WB Add 4 Add Add result PC Address Instruction memory Instruction Shift left 2 Read egister 1 Read data 1 Read register 2 Registers Read Write data 2 egister Write data 0 M u x 1 Zero ALU ALU result Address Data memory Write data 16 Sign extend 32 Read data 1 M u x 0 Pipeline Representação Gráfica Time (in clock cycles) Program execution order (in instructions) lw $1, 100($0) lw $2, 200($0) lw $3, 300($0) CC 1 CC 2 IM Reg IM CC 3 ALU Reg IM CC 4 CC 5 DM Reg ALU Reg DM ALU CC 6 CC 7 Reg DM Reg Tempo total de execução de instruções Busca Instr. Decod.& Lê Reg ALU Acessa Escr. Tempo dados Reg total Load 2 ns 1 ns 2 ns 2 ns Store 2 ns 1 ns 2 ns 2 ns Add r1,r2,r3 Jeq 2 ns 1 ns 2 ns 2 ns 1 ns 2 ns 1 ns 8 ns 7 ns 1 ns 6 ns 5 ns Uso eficiente do pipeline Características necessárias • Tempo de estágio pequeno • Uma instrução por ciclo Artifícios para obter estas características => Design apropriado do conjunto de instruções => Eliminação ou bom gerenciamento de HAZARDS – Estruturais – Dados – Controle Uso eficiente do pipeline Design do conjunto de instruções 1) Poucas instruções Sem microprogramação 2) Instruções do mesmo tamanho Unidades de busca e decodificação mais eficientes (no 80X86, instruções podem ter de 1 a 17 bytes). 3) Poucos formatos de instrução. Ex. Nos MIPS os campos dos registradores-fonte são sempre os mesmos. A decodificação pode ocorrer em paralelo com a leitura destes registradores. Uso eficiente do pipeline Design do conjunto de instruções 4) Arquitetura Load-Store Permite usar a unidade de execução para calcular o endereço e acessar a memória no estágio seguinte. Se fosse possível executar aritmética com operandos da memória, seria necessário adicionar outro estágio ao pipeline. Requer grande número de registradores. 5) Poucos modos de endereçamento Facilita decodificação e busca de operandos Uso eficiente do pipeline Eliminação ou bom gerenciamento de HAZARDS O que são: Situações em que a próxima instrução não pode ser executada no próximo ciclo, inserindo uma bolha (provocando um stall) Tipos – Estruturais Conflito no uso dos recursos – Dados Dependência de dados – Controle Alteração do fluxo do programa por instruções de desvio, chamada de funções, interrupções Uso eficiente do pipeline Hazard Estrutural Causas: - Recursos não suficientemente replicados ex: portas de escrita na memória ou mem. de dados = mem. Instruções Solução: replicar recursos - Unidade funcionais muito lentas ex: Multiplicação e divisão Solução: pipelinezar o recurso Uso eficiente do pipeline Hazard de Dados Tipos de Dependências de Dados - Dependência Verdadeira: Read-after-Write (RAW) - Dependência de Saída: Write-after-Write (WAW) - Antidependências: Write-after-Read (WAR) Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) Add r1, r2, r3 Sub r4, r1, r5 bi dr ex mem er bi dr ex mem er And r6, r1, r7 Or r8, r1, r9 bi dr ex mem er bi dr ex mem er Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) Ciclos de clock CC 1 CC 2 IM Reg CC 3 CC 4 CC 5 DM Reg CC 6 CC 7 CC 8 CC 9 Instruções sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) IM DM Reg IM DM Reg IM Reg DM Reg IM Reg Reg Reg DM Reg Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) • A solução está em dar tempo para o resultado ser usado pela instrução dependente. 1) Inserir NOPs ou bolhas 2) Inserir instruções independentes entre as dependentes 3) Método do curto circuito ou forwarding Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) 1) Inserir NOPs ou bolhas 2 Tempo Add r1, r2, r3 IF 4 ID 6 EX 8 MEM 10 WB Bolhas Sub r4, r1, r5 IF ID EX MEM WB Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) 2) Inserir instruções independentes entre as dependentes Ex: Troca de valores entre v[k] e v[k+1] lw lw sw sw r0, r2, r2, r0, 0(r1) 4(r1) 0(r1) 4(r1) // reg. r1 tem endereço de v[k] // r0 = v[k] // r2 = v[k+1] // v[k] = r2 // v[k+1] = r0 Problema Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) 2) Inserir instruções independentes entre as dependentes Ex: Troca de valores entre v[k] e v[k+1] lw lw sw sw r0, r2, r0, r2, 0(r1) 4(r1) 4(r1) 0(r1) // reg. r1 tem endereço de v[k] // r0 = v[k] // r2 = v[k+1] // v[k+1] = r0 // v[k] = r2 Solução: trocar a ordem Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) 3) Método do curto circuito ou forwarding 2 Tempo 4 6 8 10 Ordem das Instruções Add r1, r2, r3 Sub r4, r1, r5 IF ID EX MEM IF ID EX WB MEM WB Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) 3) Método do curto circuito ou forwarding registradores Mux 2 Mux 1 ALU R1 R2 Uso eficiente do pipeline, Hazard de Dados Dependência Verdadeira (RAW) 3) Método do curto circuito ou forwarding Algumas vezes as bolhas são inevitáveis, como no exemplo abaixo 2 Tempo lw $s0, 20($t1) sub $t2, $s0, $t3 IF 4 6 ID EX bubble bubble IF 8 10 12 MEM WB bubble bubble bubble ID EX MEM 14 WB Uso eficiente do pipeline Hazard de Controle • Necessidade da alteração no fluxo do programa: – Interrupções, exceções – Desvios condicionais e incondicionais – Chamadas e retornos de subrotinas • Qual o comportamento do pipeline na ocorrência de instruções de desvio condicional? Uso eficiente do pipeline Hazard de Controle Quanto mais tarde a decisão do salto pior o efeito no pipeline 40 beq $1, $3, 7 44 and $12, $2, $5 48 or $13, $6, $2 52 add $14, $2, $2 72 lw $4, 50($7) IM Reg IM DM Reg IM Reg DM Reg IM Reg DM Reg IM Reg DM Reg Reg DM Reg Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas 1) Congelamento do pipeline Esperar para buscar próxima instrução após a execução do desvio (insere bolhas, NOPs) 2 4 6 8 10 14 12 Time add $4, $5, $6 beq $1, $2, 40 Instruction fetch 2ns Reg Instruction fetch lw $3, 300($0) 4 ns ALU Reg Data access ALU Instruction fetch Reg Data access Reg 2ns Simplicidade Degradação do desempenho do pipeline Reg ALU Data access Reg 16 Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas 2) Multiple streams Busca e executa as instruções dos vários endereços de desvio • Não perde tempo • Problemas – Conflito na utilização de registradores e memória – Requer grande duplicação de recursos – Desvios seguidos podem provocar um grande número de streams Ex: IBM 370/168 e IBM 3033 Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas 3) Desvio com efeito retardado Instruções independentes são inseridas após a instrução de desvio de modo a ocupar o pipeline até que o salto seja decidido. Ling. alto nível If a=b then a:= a+1 else a: a-1 end if; Linguagem máquina Mov R1,a Mov R2,b CMP R1,R2 JMPZ end1 Add R1, -1 JMP end2 end1: Add R1, 1 end2: Mov a, R1 Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas 3) Desvio com efeito retardado Linguagem máquina Mov R1,a Mov R2,b CMP R1,R2 JMPZ end1 Add R1, -1 JMP end2 end1: Add R1, 1 end2: Mov a, R1 Linguagem máquina Mov R1,a Mov R2,b CMP R1,R2 JMPZ end1 Add R6,R7 Mov R8, z Slot de retardo Add R1, -1 JMP end2 end1: Add R1, 1 end2: Mov a, R1 Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas 3) Desvio com efeito retardado beq $1, $2, 40 add $4, $5, $6 (Delayed branch slot) lw $3, 300($0) Instruction fetch Reg Instruction 2 ns fetch ALU Reg Instruction 2 ns fetch 2 ns Data access ALU Reg Reg Data access ALU Reg Data access Reg Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas • Execução especulativa: 4) Busca e executa sempre a instrução da sequência ou do salto. Ex: 68020, VAX 11/780 5) Ação dependente da direção do desvio: avanço ou recuo. • Execução especulativa com histórico: 6) Uso de perfis de execução ou previsões feitas durante a compilação, com informações passadas no opcode Ex: Sparc, RS/6000. 7) Técnicas on-line: Branch Target Buffer (BTB). 90% de acerto. Ex: Power-PC Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas Branch Target Buffer (BTB) Endereço da Instrução de Salto Endereço do Salto Histórico (MEF) - 1 ou 2 bits EIS1 ES1 Estado A EIS5 ES5 Estado C Uso eficiente do pipeline, Hazard de Controle Abordagens Usadas Branch Target Buffer (BTB): HISTÓRICO saltou saltou Salta (fraco) não saltou Salta (forte) saltou não saltou saltou não Não Salta (forte) saltou não saltou Não Salta (fraco) Uso eficiente do pipeline, Hazard de Controle Exceções: outra fonte de hazards • Causas – Opcode inexistente – Ultrapassar limites da memória – operações aritméticas erradas (ex. divisão por zero) • Tratamento: – Chamar subrotina em endereço pré-definido. – O pipeline deve parar imediatamente para não modificar os registradores – Mais de uma exceção pode ocorrer em estágios diferentes no mesmo ciclo. (MIPS: a primeira tem prioridade) Uso eficiente do pipeline, Hazard de Controle Tratamento de exceções – Ex: 4C 50 54 … add $1, $2, $1 (exceção no 3o. Estágio) slt $15, $6, $7 lw $16, 50($7) • Interrupção Imprecisa: O endereço indicado é 58 • Interrupção Precisa: O endereço indicado é 4C. É necessário manter um conjunto de registradores (um por estágio) que contém o endereço da instrução em execução. Máquina RISC Gráfico de Profundidade Kiviat pipeline 1 Decodificação microprogramado Modos de endereçamento 2 7 3 hardware 4 5 3 1 5 Tamanho instrução variavel fixo 16 8 Núm. registradores inteiro 128 64 32 16 32 64 128 256 Número instruções unid. desvio 0.2 0.5 Desvio retardado 1 2 3 Clock / Instrução desvio normal Desvio DLX TM320C25