Objetivos Tópico 02: • Estudar as principais características de arquiteturas de conjunto de instruções. Arquitetura do Conjunto de Instruções – “Instruction set architecture” (ISA) • Baseando-se em propriedades extraídas de programas reais (típicos) ... • Como deve ser a ISA de uma máquina contemporânea ? – Que instruções e modos de endereçamento ? – Que formatos e tamanho de campos ? – Qual o impacto da ISA no compilador ? Some pictures are adapted from “Computer Architecture: A Quantitative Approach ”, J. Hennessy and D. Patterson, Morgan Kaufmann Publishers . 3rd edition. CA, A2, slide 1 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 2 Luiz C. V. dos Santos - INE/CTC/UFSC Page 1 Sumário Sumário • Arquiteturas de conjuntos de instruções • O papel dos compiladores – Classificação – Estrutura de um compilador moderno – Impacto das otimizações no desempenho – Sintonia compilador ↔ ISA » Pilha, acumulador, registrador-memória, load/store – Medidas “independentes” de ISA » Endereçamento de memória » Tipo e tamanho de operandos » Operações » Impacto da tecnologia de compiladores no projeto de uma ISA » Impacto do projeto de uma ISA na eficiência do compilador – Codificação de instruções • A arquitetura do MIPS 64 » Formatos e seu impacto – Exemplo real de uma ISA contemporânea CA, A2, slide 3 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 4 Luiz C. V. dos Santos - INE/CTC/UFSC Page 2 ISA: classificação ISA: classificação ←TOS ← ←TOS ← ULA ULA CPU ULA CPU MEM MEM Pilha Pilha CA, A2, slide 5 Luiz C. V. dos Santos - INE/CTC/UFSC CPU MEM Acumulador CA, A2, slide 6 Luiz C. V. dos Santos - INE/CTC/UFSC Page 3 ISA: classificação ISA: classificação ←TOS ← ULA ULA CPU MEM Pilha ←TOS ← ULA CPU ULA CPU MEM MEM Acumulador Reg-Memória ULA CPU MEM Pilha CA, A2, slide 7 Luiz C. V. dos Santos - INE/CTC/UFSC ULA CPU ULA CPU MEM MEM Acumulador Reg-Memória CPU MEM Load/Store CA, A2, slide 8 Luiz C. V. dos Santos - INE/CTC/UFSC Page 4 ISA: exemplo ISA: classificação • C = A+B • Instruções ALU: operandos e endereços Pilha Acumulador Reg-Memória Load/Store Push A Push B Add Pop C Load A Add B Store C Load R1,A Load R1,A Add R3,R1,B Load R2,B Store R3,C Add R3,R1,R2 Store R3,C Número de Número máximo endereços de operandos Tipo de ISA Exemplos de memória permitidos CA, A2, slide 9 Luiz C. V. dos Santos - INE/CTC/UFSC 0 3 1 2 2 3 2 3 Alpha, ARM, MIPS, PowerPC, SPARC, Trimedia TM5200 IBM 360/370, Intel 80x86, Reg-Mem Motorola 68000 Mem-Mem VAX Mem-Mem VAX Load/Store CA, A2, slide 10 Luiz C. V. dos Santos - INE/CTC/UFSC Page 5 Modos de endereçamento: classificação ISA: vantagens e desvantagens Tipo Reg-Reg (0,3) Vantagens Codificação : comprimento fixo. Geração de código : simples. CPI: pouco variável Número de instruções : reduzido, Reg-Mem pois dispensa pré-carga. (1,2) Codificação : comprimento variável. Densidade : boa Mem-Mem Densidade : a mais alta. (2,2) ou (3,3) Desvantagens Número de instruções: o mais alto Densidade : a mais baixa Operandos: um fonte é destruído CPI: variável com a posição do operando Codificação : comprimento muito variável CPI: muito variável entre instruções CA, A2, slide 11 Luiz C. V. dos Santos - INE/CTC/UFSC Modo Exemplo Significado Registrador Imediato Deslocamento Indireto de registrador Indexado Direto ou absoluto Add R4, R3 Add R4, #3 Add R4, 100(R1) Regs[R4] <= Regs[R4] + Regs[R3] Regs[R4] <= Regs[R4] + 3 Regs[R4] <= Regs[R4] + Mem[100+Regs[R1]] Add R4, (R1) Add R3, (R1+R2) Regs[R4] <= Regs[R4] + Mem[Regs[R1]] Regs[R3] <= Regs[R3] + Mem[Regs[R1]+Regs[R2]] Add R1, (1001) Regs[R1] <= Regs[R1] + Mem[1001] CA, A2, slide 12 Luiz C. V. dos Santos - INE/CTC/UFSC Page 6 Modos de endereçamento: classificação Modos de endereçamento: utilização • 50% do acesso a operandos – Modo registrador Modo Exemplo Significado Indireto de memória Add R1, @(R3) Regs[R1] <= Regs[R1] + Mem[Mem[Regs[R3]]] Regs[R1] <= Regs[R1] + Mem[Regs[R2]] Regs[R2] <= Regs[R2] + d • 50% dos acessos usam outros modos Auto-incremento Add R1, (R2) + – Quais ? Em que proporção ? Regs[R2] <= Regs[R2] - d Regs[R1] <= Regs[R1] + Mem[Regs[R2]] Regs[R1] <= Regs[R1] + Mem[100+Regs[R2]] + Add R1, 100(R2) [R3] Regs[R3]*d Auto-decremento Add R1, - (R2) Escalonado CA, A2, slide 13 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 14 Luiz C. V. dos Santos - INE/CTC/UFSC Page 7 Modos de endereçamento: utilização Deslocamento: distribuição de valores • % ocorrência × # bits magnitude (log2 d - 1) 1 0%3% 3% 1% 6% 1% 0% 6% outros Indireto de memória Escalonado Indireto de registrador Imediato 3% TeX spice gcc 16% 24% 11% 43% 39% 17% 32% Deslocamento 40% 0% 40% 35% 30% 25% 20% 15% 10% 5% 0% 55% 0 1 2 10% 20% 30% 40% 50% 60% 3 4 5 6 7 8 inteiros 9 10 11 12 13 14 15 ponto flutuante 75% CA, A2, slide 15 Luiz C. V. dos Santos - INE/CTC/UFSC 99% CA, A2, slide 16 Luiz C. V. dos Santos - INE/CTC/UFSC Page 8 Modo imediato: utilização Imediato: distribuição de valores • % ocorrência × # bits magnitude (log2 i - 1) 1 45% 40% 35% 30% 25% 20% 15% 10% 5% 0% 23% 22% Cargas 25% Operações da ALU 19% 21% Todas 16% 0% 5% 10% 15% Ponto flutuante 20% 25% 30% Inteiros 0 1 2 3 4 5 6 7 8 inteiros 9 10 11 12 13 14 15 ponto flutuante Conclusão: Inteiros: 1/5 das instruções; Ponto flutuante: 1/6 das instruções 50% CA, A2, slide 17 Luiz C. V. dos Santos - INE/CTC/UFSC 80% CA, A2, slide 18 Luiz C. V. dos Santos - INE/CTC/UFSC Page 9 Operações no conjunto de instruções Desvios: nomenclatura • As 10 instruções mais freqüentes no 80x86 • Desvio condicional – Desvio ou “Branch” » Exemplo: BNE R3,R4, nome • Desvio incondicional – Salto ou “Jump” » Exemplo: J nome CA, A2, slide 19 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 20 Luiz C. V. dos Santos - INE/CTC/UFSC Page 10 Desvios e saltos: utilização Desvios e saltos: destino • Conhecido em tempo de compilação – Salto direto 19% Call/Return » J nome 8% – Salto e vínculo 6% 10% Jump » JAL nome 75% 82% Branch – Desvio condicional » BNE R3,R4, nome 0% 20% 40% 60% 80% Ponto flutuante 100% • Desconhecido em tempo de compilação Inteiros – Retorno – Salto indireto » JR R3 CA, A2, slide 21 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 22 Luiz C. V. dos Santos - INE/CTC/UFSC Page 11 Salto indireto: utilização Desvios: distribuição de deslocamentos • % ocorrência × # bits magnitude (log2 d - 1) 1 • Case ou switch 30% – Tabela de endereços 25% • Funções ou métodos virtuais 20% – Chamadas de rotinas diferentes – Dependendo do tipo do argumento 15% 10% • Ponteiros de Funções 5% – Passagem de funções como parâmetros 0% • Bibliotecas compartilhadas dinamicamente 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 – Carregadas e ligadas sob demanda inteiros ponto flutuante 85% CA, A2, slide 23 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 24 Luiz C. V. dos Santos - INE/CTC/UFSC Page 12 Desvio condicional: alternativas Nome Exemplos Como a condição é testada Código condicional (CC) 80x86, 68000, PowerPC, ARM, SPARC Registrador de condição Alpha, MIPS Operação da ULA define bit especial, que é testado pela instrução de desvio Resultado de uma comparação armazenado em registrador arbitrário, que é testado pela instrução de desvio Comparação e desvio PA-RISC, VAX A comparação faz parte da instrução de desvio Desvio condicional: alternativas If (A > B) then S1; S2; CA, A2, slide 25 Luiz C. V. dos Santos - INE/CTC/UFSC CMP B, A BLE end S1 end: S2 SLT X, B, A BEQ X, $zero,end S1 end: S2 Define CC (68020) Não define CC (MIPS) BLE B, A,end S1 end: S2 Em geral só quando teste é simples (<0, >0, ≥0, ≤ 0) CA, A2, slide 26 Luiz C. V. dos Santos - INE/CTC/UFSC Page 13 Desvio condicional: teste Desvios: comparações com zero 2% 5% não = • Não requerem o uso da ULA 18% 16% = >= 0% 11% 33% <= 44% 35% 34% < 0% 10% 20% 30% S 40% Ponto flutuante 50% Inteiros Teste “>” ocorre em porcentagem desprezível CA, A2, slide 27 Luiz C. V. dos Santos - INE/CTC/UFSC Z BLTZ << 0 S BLEZ ≤≤ 0 S+Z BGEZ ≥≥ 0 S′′ BGTZ >> 0 S′′ . Z ′′ CA, A2, slide 28 Luiz C. V. dos Santos - INE/CTC/UFSC Page 14 Operandos: tipos e tamanhos Codificação de instruções Operação e número de operandos Byte (8 bits) Meia palavra (16 bits) 1% 10% Operação 26% 29% 59% Palavra dupla (64 bits) 0% 20% Campo de endereço 1 ... Especificador de endereço n Campo de endereço n Comprimento variável: VAX, Intel 80x86 5% 0% Palavra (32 bits) Especificador de endereço 1 40% 60% Ponto flutuante Campo de endereço 1 Campo de endereço 2 Campo de endereço 3 Comprimento fixo: Alpha, ARM, MIPS, PowerPC, SPARC 70% Operação Especificador de endereço Campo de endereço Operação Especificador de endereço 1 Especificador de endereço 2 Operação Especificador de endereço Campo de endereço 1 80% Inteiros CA, A2, slide 29 Luiz C. V. dos Santos - INE/CTC/UFSC Híbrido: IBM 360/70, MIPS16, Thumb Page 15 Campo de endereço Campo de endereço 2 CA, A2, slide 30 Luiz C. V. dos Santos - INE/CTC/UFSC O papel dos compiladores Compiladores: estrutura • Desempenho Front-end por linguagem – Tecnologia de CIs – Organização do HW – Tecnologia de Compiladores Traduzir linguagem para formato intermediário comum Representação intermediária • Que características do ISA resultam em código mais eficiente ? • Que características do ISA tornam mais fácil escrever compiladores eficientes ? CA, A2, slide 31 Luiz C. V. dos Santos - INE/CTC/UFSC Page 16 Otimizações de alto nível Otimização de laços e inserção de in-lining Otimizador global Otimizações locais, globais e alocação de registradores Gerador de código Seleção de instruções e escalonamento de código CA, A2, slide 32 Luiz C. V. dos Santos - INE/CTC/UFSC Compiladores: estrutura Compiladores: objetivos • • • • Front-end por linguagem Representação intermediária Otimizações de alto nível Dependência da linguagem Correção Velocidade do código compilado Compilação rápida Suporte para depuração ... Dependência da máquina Otimizador global Gerador de código CA, A2, slide 33 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 34 Luiz C. V. dos Santos - INE/CTC/UFSC Page 17 Compiladores: complexidade Compiladores: otimizações • Complexidade impede solução monolítica • Solução: Múltiplos passos (fases) • Otimizações de alto nível – Integração de procedimentos (“inlining”) » Exemplo: Definição: inline int metodo(a,b,c) {return a+b-c;} Chamada: z = metodo(w,x,y); Resultado: z = w+x-y; – Vantagem: reduz complexidade – Desvantagem: problema de ordenação de fases • Exemplo: – Eliminação de expressões comuns – Transformação de laços » Assume temporário em registrador » Exemplo: “loop unrolling” for (i=0; i < N; i=i+1) – Decidir se “inlining” { a[i]=b[i]*c[i];} » Resultado: » Antes de conhecer o tamanho do procedimento for (i=0; i < N; i=i+2) { a[i]=b[i]*c[i]; a[i+1]=b[i+1]*c[i+1];} CA, A2, slide 35 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 36 Luiz C. V. dos Santos - INE/CTC/UFSC Page 18 Compiladores: otimizações Compiladores: otimizações • Otimizações de alto nível • Otimizações locais – Integração de procedimentos (“inlining”) – Escopo = bloco básico » Exemplo: Definição: inline int metodo(a,b,c) {return a+b-c;} Chamada: z = metodo(w,x,y); Resultado: z = w+x-y; » Eliminação de expressões comuns a = x+y; ... b = a+1; ... c = x+y+z; – Transformação de laços » Exemplo: “loop unrolling” for (i=0; i < N; i=i+1) { a[i]=b[i]*c[i];} a = x+y; ... b = a+1; ... c = a+z; » Resultado: for (i=0; i < N/2; i=i+1) { a[i*2]=b[i*2]*c[i*2]; a[i*2+1]=b[i*2+1]*c[i*2+1];} CA, A2, slide 37 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 38 Luiz C. V. dos Santos - INE/CTC/UFSC Page 19 Compiladores: otimizações Compiladores: otimizações • Otimizações locais • Otimizações globais – Escopo = bloco básico – Escopo: além do bloco básico » Propagação de constantes e variáveis a = 0; a = 0; ... ... b = a+1; b = 1; ... ... c = 2*b; c = 2; a = x; ... b = a+1; ... c = 2*a; » Eliminação global de expressões comuns » Code Motion x = y+A[i]; x = y+A[i]; if (x == y) { a = k + w; a = k + w; b = f + g; } a = x; ... b = x+1; ... c = 2*x; else a = k - w; A[i] = a; CA, A2, slide 39 Luiz C. V. dos Santos - INE/CTC/UFSC if (x == y) { b = f + g; } else a = k - w; A[i] = a; CA, A2, slide 40 Luiz C. V. dos Santos - INE/CTC/UFSC Page 20 Otimizações: code motion else exit else exit LD R1, 0(R2) IF DADD R3, R4, R1 BNE R5, R6, else DADD R7, R8, R9 DADD R10, R11, R12 J exit DSUB R7, R8, R9 SD R7, 0(R2) ... ID EX ME WB X IF ID EX ME WB IF ID EX ME WB X IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB LD R1, 0(R2) IF DADD R7, R8, R9 DADD R3, R4, R1 BNE R5, R6, else DADD R10, R11, R12 J exit DSUB R7, R8, R9 SD R7, 0(R2) ... ID EX ME IF ID EX IF ID IF IF WB ME EX ID X Compiladores: otimizações • Alocação de registradores – Mapeamento de variáveis para registradores – Talvez a mais importante otimização » Aceleração do código » Torna outras otimizações úteis ID EX ME WB WB ME WB EX ME WB IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB CA, A2, slide 41 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 42 Luiz C. V. dos Santos - INE/CTC/UFSC Page 21 Otimizações: escalonamento de código Compiladores: otimizações • Otimizações dependentes da máquina • Seleção de instruções • Exemplo: x = y + A[i]; z = w - B[i]; – Exemplo: a = b * 2; » MULT R1, R2, #2 ou » SLLI R1, R2, #2 • Escalonamento de código – Reordenamento de instruções para melhorar o desempenho » Redução do número de pausas devidas a “hazards” CA, A2, slide 43 Luiz C. V. dos Santos - INE/CTC/UFSC LD R1, 0(R8) DADD R3, R4, R1 LD R5, 0(R9) DSUB R6, R 7, R5 IF ID X EX ME W B IF ID EX ME W B IF ID EX ME W B X IF ID EX ME W B LD R1, 0(R8) LD R5, 0(R9) DADD R3, R4, R1 DSUB R6, R7, R5 IF ID EX ME IF ID EX IF ID IF WB ME WB EX ME WB ID EX ME WB CA, A2, slide 44 Luiz C. V. dos Santos - INE/CTC/UFSC Page 22 Otimizações: impacto lucas, nível 3 11% lucas, nível 2 12% lucas, nível 1 Alocação de registradores • Coloração de grafos – Problema NP-completo – Mas, há heurísticas eficientes x 0,57 21% x 0,21 » Desde que #vértices > 16 » Difícil construir bom alocador com poucos regs. lucas, nível 0 mcf, nível 3 76% mcf, nível 2 76% » Não somente há poucas posições de armazenamento » Mas também são mal gerenciadas 84% mcf, nível 1 x 0,84 mcf, nível 0 0 ULA: inteiros – Poucos registradores x 0,90 20 ULA: ponto flutuante 40 60 80 Desvios/Chamadas 100 Load/Store CA, A2, slide 45 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 46 Luiz C. V. dos Santos - INE/CTC/UFSC Page 23 Alocação de registradores Alocação de registradores • Áreas de dados • Restrições – Pilha (endereços relativos ao SP) – Mais efetiva para objetos alocados na pilha – Impossível para objetos na “heap” – Variáveis globais possuem diversos “alias” » Variáveis locais – Área de dados globais Exemplo: » Váriaveis globais, constantes, arranjos – Heap (acesso via ponteiros) » Ilegal alocá-las em registradores p = &a; a = ... » Objetos alocados dinamicamente *p = ... • Aliases (nomes alternativos) – Dificultam alocação de registradores ...a... CA, A2, slide 47 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 48 Luiz C. V. dos Santos - INE/CTC/UFSC Page 24 Características desejáveis de uma máquina contemporânea ISA ↔ Compilador • Propriedades desejáveis de uma ISA • Registradores de uso geral + load/store • Modos de endereçamento simples – Regularidade » Operações e modos de endereçamento ortogonais – deslocamento (12 a 16 bits) – imediato (8 a 16 bits) – indireto de registrador – Oferta de primitivas não de soluções completas » Não tentar sintonizar compilador com a linguagem • Ex.: salvamento automático para chamada de procedure • Tipo e tamanho de dados – Simplicidade em avaliar alternativas – inteiros (8, 16,32 e 64 bits ); PF (32 e 64 bits) » Reg-mem: depois de quantas referências uma variável deve ser alocada em registrador ? CA, A2, slide 49 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 50 Luiz C. V. dos Santos - INE/CTC/UFSC Page 25 Características desejáveis de uma máquina contemporânea Características desejáveis de uma máquina contemporânea • Instruções simples, pois dominantes: • Formato de instrução – load/store, soma, subtração, move entre registradores, deslocamento – fixo (desempenho) – variável (tamanho do código) • Comparações: • Mais de 16 registradores de uso geral – Igual, diferente, menor que – Registradores separados para PF • Desvios • Modos de endereçamento regulares – condicional (com endereçamento relativo ao PC) – incondicional (salto) – chamada – retorno – Aplicam-se a todas as instruções de transferência CA, A2, slide 51 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 52 Luiz C. V. dos Santos - INE/CTC/UFSC Page 26 MIPS64: um modelo arquitetônico MIPS64: um modelo arquitetônico • Características • Registradores – Um conjunto simples de instruções – Máquina load/store – Projeto orientado à eficiência do pipeline – GPRs: 32 reg. de uso geral (64 bits) » R0, ..., R31; » R0 = zero; – FPRs: registradores para PF (32 ou 64 bits) » codificação fixa de instruções » F0, ..., F31 – Projeto orientado à eficiência do compilador CA, A2, slide 53 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 54 Luiz C. V. dos Santos - INE/CTC/UFSC Page 27 MIPS64: um modelo arquitetônico MIPS64: um modelo arquitetônico • Tipos de dados • Modos de endereçamento – Inteiros – Só imediato e deslocamento » byte (8), meias palavras (16) » palavras (32), palavras duplas (64) » Indireto e absoluto como casos particulares » Valor codificado em 16 bits – Ponto flutuante • Memória » precisão simples (32) » precisão dupla (64) – Endereçável por byte – Endereço: 64 bits – Ordem dos bytes configurável • Operações – Sobre inteiros de 64 bits ou valores em ponto flutuante de 32 ou 64 bits – Meias palavras e bytes carregados em GPRs com ou sem extensão de sinal » Big endian ou little endian CA, A2, slide 55 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 56 Luiz C. V. dos Santos - INE/CTC/UFSC Page 28 MIPS64: um modelo arquitetônico MIPS64: formatos de instrução • Máquina Load/store – GPRs: I » byte, meia palavra, palavra ou palavra dupla – FPRs: » precisão simples ou dupla R • Acesso à memória 6 5 5 16 Opcode rs rt imediato 6 5 5 5 5 6 Opcode rs rt rd shamt funct – Alinhamento obrigatório J CA, A2, slide 57 Luiz C. V. dos Santos - INE/CTC/UFSC 6 26 Opcode deslocamento adicionado ao PC CA, A2, slide 58 Luiz C. V. dos Santos - INE/CTC/UFSC Page 29 MIPS64: um modelo arquitetônico MIPS64: freqüência de instruções • Exemplos de instruções load imm – Instruções de load/store call/return » Figura 2.28 compare – Instruções aritméticas/lógicas store cond branch » Figura 2.29 2% 2% 5% 10% 12% 16% and/or/xor – Instruções que afetam o fluxo de controle 21% add/sub » Figura 2.30 26% load – Instruções de ponto flutuante 0% » Figura 2.31 • Conjunto completo de instruções 10% 20% 30% Média inteiros » Apêndice C (www.campus.com.br) CA, A2, slide 59 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 60 Luiz C. V. dos Santos - INE/CTC/UFSC Page 30 Perspectiva histórica: VAX × MIPS MIPS64: freqüência de instruções store int 2% compare int 2% and/or/xor cond branch load imm • VAX – compilador simples, densidade de código 3% » Instruções e modos de endereçamento poderosos, formato de instrução variável, poucos registradores 4% 5% store PF • MIPS 7% mul PF 8% add/sub PF – alto desempenho via pipelining, facilidade de implementação do HW, compatibilidade com compiladores altamente otimizados 10% load int 15% load PF 15% add/sub int 0% » Instruções e modos de endereçamento simples, formato de instrução fixo, muitos registradores 25% 5% 10% 15% 20% 25% 30% Média PF CA, A2, slide 61 Luiz C. V. dos Santos - INE/CTC/UFSC CA, A2, slide 62 Luiz C. V. dos Santos - INE/CTC/UFSC Page 31 VAX 8700 × MIPS M2000 VAX 8700 × MIPS M2000 • Razão: MIPS/VAX IMIPS/IVAX ≈ 2 • Razão: MIPS/VAX = 3/1 CA, A2, slide 63 CPI MIPSLuiz /CPI ≈ 1/6 C. V.VAX dos Santos - INE/CTC/UFSC IMIPS/IVAX ≈ 2 Page 32 CA, A2, slide 64 CPI MIPSLuiz /CPI ≈ 1/6 C. V.VAX dos Santos - INE/CTC/UFSC