Nível da Microarquitetura Ronaldo de Freitas Zampolo LaPS/DEEC/CT/UFPA Tópicos Introdução Exemplo de microarquitetura Exemplo de nível ISA Exemplo de uma implementação Melhora de performance Exemplos de níveis de microarquitetura Microarquitetura – p. Introdução Objetivo: implementar o nível ISA (instruction set architecture) situado imediatamente acima Elementos a considerar no projeto do nível de microarquitetura: Nível ISA Custo × desempenho do computador a ser projetado Microarquitetura – p. Exemplo de microarquitetura ISA a ser implementada: IJVM (subconjunto da JVM) Objetivo do estudo: análise dos sinais de controle e do seqüenciamento da execução das instruções Microprograma em memória ROM: busca, decodificação e execução de instruções ISA Estado: conjunto de variáveis do microprograma que podem ser acessadas por todas as funções chamadas (funções ISA). Cada função muda, pelo menos uma variável de estado. Ex.: PC Instruções IJVM: simples, com 1 ou dois campos: (a) opcode (código de operação); e (b) operando Microarquitetura – p. MDR PC MBR SP LV Control signals Enable onto B bus CPP Write C bus to register TOS OPC C bus B bus H A ALU control B 6 N Z ALU Shifter Shifter control 2 Exemplo de microarquitetura To and from main memory Memory control registers Microarquitetura – p. Caminho de dados: controlado por microinstruções MAR Exemplo de microarquitetura Caminho de dados Conjunto de registradores de 32 bits UAL Controle de função: F0 e F1 Controle de habilitação: ENA, ENB Complemento de A: INVA Incremento: INC 3 barramentos: A, B e C Deslocador SLL8 (shift left logical - 8 bits) SRA1 (shift right arithmetic - 1 bit à direita com preservação de sinal MSB) Microarquitetura – p. Exemplo de microarquitetura Caminho de dados F0 F1 0 0 0 1 1 1 1 1 1 1 0 1 1 1 ENA ENB INVA INC 1 0 1 1 1 1 1 0 1 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 Função A B Ā B̄ A+B A+B+1 A+1 Microarquitetura – p. Exemplo de microarquitetura Caminho de dados É possível escrever em um mesmo registrador no mesmo ciclo de clock: leitura e escrita são feitas em momentos diferentes em um mesmo ciclo A saída da UAL pode ser armazenada em mais de um registrador. Contudo, no barramento B apenas o conteúdo de um dos registradores pode ser transferido por vez. Microarquitetura – p. Caminho de dados Temporização Registers loaded instantaneously from C bus and memory on rising edge of clock Shifter output stable Cycle 1 starts here Clock cycle 1 ∆w ∆x Set up signals to drive data path Drive H and B bus ∆y Clock cycle 2 New MPC used to load MIR with next microinstruction here ∆z ALU and shifter MPC available here Propagation from shifter to registers Microarquitetura – p. Caminho de dados Operação da memória Acesso à memória Porta de 32 bits (palavra): MAR (memory address register) MDR (memory data register) Porta de 8 bits (byte): PC (program counter) MBR (memory buffer register) MAR: guarda o endereço da palavra PC: orientado a byte Microarquitetura – p. Caminho de dados Operação da memória Ex.: Operação de leitura PC=2: leitura do byte 2, armazenamento nos oito bits menos significativos de MBR MAR=2: leitura dos bytes 8 a 11, armazenamento em MDR PC/MBR: programas do nível ISA MAR/MDR: dados do nível ISA Microarquitetura – p.1 Caminho de dados Operação da memória MAR: Implementação Memórias: dispositivos orientados a byte MAR: orientado a palavra Em 4 GB (232 endereços de 1 byte), existem 230 palavras 4 bytes 32-Bit MAR (counts in words) Discarded 0 0 32-Bit address bus (counts in bytes) Microarquitetura – p.1 Caminho de dados Operação da memória MAR (cont): palavra 0 → byte 0 palavra 1 → byte 4 palavra 2 → byte 8 palavra 3 → byte 12 MBR: Com sinal: 25 bits mais significativos (-128 a 127) Sem sinal: MBR passa os oito bits menos significativos para o barramento B, os outros bits são iguais a zero Microarquitetura – p.1 Microinstruções De acordo com a figura do caminho de dados, são necessários 29 sinais para controle: 9 sinais para controlar escrita no barramento B 9 sinais para controlar escrita nos registradores a partir do barramento C 8 sinais para controlar UAL e deslocador 2 sinais para leitura e escrita em memória (MAR / MDR) 1 sinal para busca em memória via PC /MBR Os valores dos 29 sinais definem as operações a serem executadas durante um ciclo do caminho de dados Microarquitetura – p.1 Microinstruções Observação quanto ao acesso à memória: Registers loaded instantaneously from C bus and memory on rising edge of clock Shifter output stable Cycle 1 starts here Clock cycle 1 ∆w ∆x Set up signals to drive data path Drive H and B bus ∆y Clock cycle 2 New MPC used to load MIR with next microinstruction here ∆z ALU and shifter MPC available here Propagation from shifter to registers Microarquitetura – p.1 Microinstruções Observação quanto ao acesso à memória: Uma solicitação de acesso ao conteúdo da memória é feita no ciclo 1 a informação solicitada só estará disponível no ciclo 3 ! (pelo menos) Redução do número de sinais de controle: 9 sinais para controlar escrita em B → 4 sinais, usando decodificador (não faz sentido o acesso a B por mais de um registrador simultaneamente) Microarquitetura – p.1 Microinstruções Estrutura e ordenação de uma possível microinstrução Bits 9 NEXT_ADDRESS Addr 3 J M P C J A M N 8 J A M Z JAM S L L 8 9 3 4 S F 0 F1 E E I I H O T C L S P M M W R F R P O P V P C D A R E E N N N N I T R R T A C A C S P A B V C 1 A E D H ALU C Mem B bus B B bus registers 0 = MDR 1 = PC 2 = MBR 3 = MBRU 4 = SP 5 = LV 6 = CPP 7 = TOS 8 = OPC 9 -15 none Microarquitetura – p.1 Microinstruções Endereço: contém o endereço da próxima microinstrução a ser potencialmente ativada Desvio: determina a próxima microinstrução a ser executada UAL: especifica as funções da UAL e do deslocador Barramento C: seleciona qual dos registradores serão carregados com o valor que estiver no barramento C Memória: especifica as funções da memória Barramento B: seleciona a entrada do barramento B Microarquitetura – p.1 Controle microprogramado Memory control signals (rd, wr, fetch) 3 4 4-to-16 Decoder MAR MDR MPC 9 PC O 8 MBR SP 512 × 36-Bit control store for holding the microprogram 9 LV JMPC CPP Addr J ALU C MIR M B TOS JAMN/JAMZ OPC H B bus 2 1-bit flip–flop N 6 ALU control High bit ALU Control signals Enable onto B bus Z Shifter C bus 2 Write C bus to register Microarquitetura – p.1 Controle microprogramado O MIC-1: elementos Seqüenciador Realiza todos os passos necessários para execução de uma instrução ISA A cada ciclo: estado de cada sinal de controle; e o endereço da próxima microintrução Memória de controle: armazena o microprograma completo MPC (MicroProgram Counter): endereço da próxima microinstrução MIR (Micro Instruction Register): armazena microinstrução corrente Microarquitetura – p.1 Controle microprogramado Campo JAM 000: nada a fazer JAMN == 1: O valor de N deve ser submetido a um OR com bit de maior ordem do MPC JAMZ == 1: O valor de Z deve ser submetido a um OR com bit de maior ordem do MPC F=(JAMN AND N) OR (JAMZ AND Z) OR NEXT_ADDRESS[8] Só há duas possibilidades para conteúdo de MPC: NEXT_ADDRESS NEXT_ADDRESS com bit de mais alta ordem submetido à operação OR com 1 Microarquitetura – p.2 Controle microprogramado Exemplo: Address Addr JAM 0x75 0x92 001 Data path control bits JAMZ bit set … 0x92 … 0x192 One of these will follow 0x75 depending on Z JMPC: 1: MPC=(8 bits de MBR) OR (8 bits menos significativos do NEXT_ADDRESS) JMPC=1: NEXT_ADDRESS = 0x000 ou 0x100 Em geral, MBR contém um código de operação (opcode) ISA Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Pilhas: Armazenamento de variáveis locais SP LV SP LV SP LV a3 a2 a1 108 104 100 (a) b4 b3 b2 b1 a3 a2 a1 c2 c1 b4 b3 b2 b1 a3 a2 a1 (b) (c) SP LV d5 d4 d3 d2 d1 a3 a2 a1 (d) Auxílio em operações aritméticas (Ex.: a1 = a2 + a3) SP SP LV a2 a3 a2 a1 (a) LV a3 a2 a3 a2 a1 (b) SP LV a2 + a3 a3 a2 a1 (c) SP LV a3 a2 a2 + a3 (d) Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Modelo de memória da IJVM Duas opções de visualização: Vetor de 232 bytes = 4 GB Vetor de 230 palavras (cada palavra = 4 bytes) As instruções da IJVM só podem ter acesso à memória indexando-a com ponteiros 1. Pool de Constantes Programas IJVM não podem escrever nessa área que armazena constantes, strings e ponteiros para outras áreas da memória CPP aponta para o endereço da primeira palavra Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Modelo de memória da IJVM 1. Quadro de Variáveis Locais Armazena variáveis locais (procedimentos) LV aponta para a base do quadro de variáveis locais corrente 2. Pilha de Operandos Localiza-se imediatamente acima do quadro de variáveis locais SP aponta para o endereço de mais alta ordem 3. Área de Procedimento Armazena o programa PC armazena o endereço da instrução a ser executada Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Modelo de memória da IJVM Current Operand Stack 3 SP Current Local Variable Frame 3 LV Local Variable Frame 2 Constant Pool Local Variable Frame 1 Method Area PC CPP Área de Procedimento: vetor de bytes Pool de Constantes: vetor de palavras Pilha de Operandos: vetor de palavras Quadro de Variáveis Locais: vetor de palavras Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Conjunto de instruções da IJVM Manipulação de pilha BIPUSH byte (0x10): coloca byte na pilha DUP (0x59): copia topo e coloca no topo ILOAD varnum (0x15): coloca uma variável local no topo da pilha ISTORE varnum(0x36): retira palavra do topo e armazena numa variável local LDC_W índice(0x13): coloca no topo uma constante vinda do Pool de Constantes POP (0x57): retira da pilha a palavra do topo SWAP (0x5F): troca de posição as duas palavras do topo da pilha Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Conjunto de instruções da IJVM Operações aritméticas IADD (0x60): retira as duas palavras do topo, soma-as e armazena o resultado no topo ISUB (0x64): retira as duas palavras do topo, subtrai-as e armazena o resultado no topo Operações lógicas IAND (0x7E): retira as duas palavras do topo, realiza um AND e armazena o resultado no topo IOR (0x80): retira as duas palavras do topo, realiza um OR e armazena o resultado no topo Microarquitetura – p.2 Um exemplo de nível ISA: a IJVM Conjunto de instruções da IJVM Desvios GOTO desl (0xA7): desvio incondicional IFEQ desl (0x99): retira o topo e desvia se for igual a zero IFLT desl (0x9B): retira o topo e desvia se for menor que zero IF_ICMPEQ desl (0x9F): retira as duas palavras do topo e desvia se forem iguais Chamadas a procedimentos INVOKEVIRTUAL desl (0xB6): chama um procedimento IRETURN (0xAC): retorna de um procedimento trazendo um inteiro Microarquitetura – p.2 Compilação de JAVA para IJVM Java Assembly ISA i=j+k; ILOAD J 0x15 0x02 if (i==3) ILOAD K 0x15 0x03 IADD 0x60 ISTORE I 0x36 0x01 ILOAD I 0x15 0x01 BIPUSH 3 0x10 0x03 IF_ICMPEQ L1 0x9F 0x00 0x0D ILOAD J 0x15 0x02 BIPUSH 1 0x10 0x01 ISUB 0x64 ISTORE J 0x36 0x02 GOTO L2 0xA7 0x00 0x07 L1: BIPUSH 0 0x10 0x00 ISTORE K 0x36 0x03 k=0; else j=j-1; L2: Microarquitetura – p.2 Implementação da IJVM Main 1 ⇒ PC=PC+1; fetch; goto(MBR) nop1 ⇒ goto Main 1 iadd1⇒ MAR=SP=SP-1; rd iadd2⇒ H=TOS iadd3⇒ MDR=TOS=MDR+H; wr; goto Main 1 isub1 ⇒ MAR=SP=SP-1; rd isub2 ⇒ H=TOS isub3 ⇒ MDR=TOS=MDR-H; wr; goto Main 1 dup1 ⇒ MAR=SP=SP+1 dup2 ⇒ MDR=TOS; wr; goto Main 1 Microarquitetura – p.3 Implementação da IJVM bipush1 ⇒ SP=MAR=SP+1 bipush2 ⇒ PC=PC+1; fetch bipush3 ⇒ MDR=TOS=MBR; wr; goto Main 1 iload1 ⇒ H=LV iload2 ⇒ MAR=MBRU+H; rd iload3 ⇒ MAR=SP=SP+1 iload4 ⇒ PC=PC+1; fetch; wr iload5 ⇒ TOS=MDR; goto Main 1 Microarquitetura – p.3 Pipeline IFU IFU Reg A C B IFU Reg A C B IFU Reg A C B Reg A C B 1 IFU ALU ALU ALU ALU Shifter Shifter Shifter Shifter IFU Reg A C B IFU Reg A C B IFU Reg A C B Reg A C B 2 IFU ALU ALU ALU ALU Shifter Shifter Shifter Shifter IFU Reg A C B IFU Reg A C B IFU Reg A C B Reg A C B Instruction 3 IFU ALU ALU ALU ALU Shifter Shifter Shifter Shifter IFU Reg A C B IFU Reg A C B IFU Reg A C B Reg A C B 4 Cycle 1 ALU ALU ALU ALU Shifter Shifter Shifter Shifter Cycle 2 Cycle 3 Cycle 4 Time Microarquitetura – p.3 Pipeline swap1 swap2 swap3 swap4 swap5 swap6 ciclo MAR=SP-1 MAR=SP H=MDR; wr MDR=TOS MAR=SP-1; wr TOS=H; goto Main1 1 B=SP 2 C=B-1 B=SP 3 MAR=C; rd C=B 4 MDR=mem MAR=C 5 B=MDR 6 C=B B=TOS 7 H=C; wr C=B B=SP 8 mem=MDR MDR=C C=B-1 B=H 9 MAR=C; wr C=B 10 mem=MDR TOS=C 11 goto(MBR) Microarquitetura – p.3 Velocidade x Custo Metodologias para aumentar a velocidade de execução Reduzir o número de ciclos necessários à execução das instruções Simplificar a organização da máquina, de modo a reduzir o período de clock Sobrepor a execução de instruções Microarquitetura – p.3 Redução do caminho de execução União do loop de interpretação com microcódigo pop1 MAR=SP=SP-1; rd pop2 pop3 TOS=MDR; goto Main1 Main 1 PC=PC+1; fetch; goto(MBR) pop1 MAR=SP=SP-1; rd Main1.pop PC=PC+1; fetch pop3 TOS=MDR; goto(MBR) Microarquitetura – p.3 Redução do caminho de execução Arquitetura com três barramentos: inclusão de um barramento A para a entrada esquerda da UAL Unidade de busca de instruções: busca de instruções a cargo de uma unidade independente; UAL restrita à execução de instruções propriamente dita Microarquitetura – p.3 Redução do caminho de execução Memory control registers MAR To and from main memory MDR PC Instruction fetch unit (IFU) MBR1 MBR2 SP LV Control signals CPP Enable onto B bus TOS Write C bus to register OPC C bus B bus H A bus C latch A latch ALU control B latch 6 ALU N Z Shifter Microarquitetura – p.3