Capítulo 4 Permission is granted to copy and distribute this material for educational purposes only, provided that the complete bibliographic citation and following credit line is included: "Copyright 998 Morgan Kaufmann Publishers." Permission is granted to alter and distribute this material provided that the following credit line is included: "Adapted from Computer Organization and Design: The Hardware/Software Interface, 2nd Edition David A. Patterson, John L. Hennessy Morgan Kaufmann, 2nd ed., 997, ISBN 55864286 Copyright 998 Morgan Kaufmann Publishers." Lecture slides created by Michael Wahl in English Tradução: Christian Lyra Gomes Revisão: Wagner M. N. Zola This material may not be copied or distributed for commercial purposes without express written permission of the copyright holder. Aritmética Por onde já passamos: Desempenho (segundos, ciclos, instruções) Abstrações: Arquitetura de Conjunto de Instruções Linguagem Assembly e Linguagem de Máquina O que está a frente: Implementar a Arquitetura operação a b 32 32 ULA 32 resultado 2
Números Bits são apenas bits (não tem um significado inerente) convenções definem a relação entre bits e números Números binários (base 2)... decimal:...2 n - Claro que isso fica mais complicado: números são finitos (overflow) frações e números reais números negativos ex., não existe instrução subi no MIPS; addi pode adicionar um número negativo Como nós podemos representar números negativos? Qual padrão de bits irá representar que número? 3 Representações possíveis Sinal de Magnitude: Complemento de Complemento de 2 = + = + = + = + = + = + = +2 = +2 = +2 = +3 = +3 = +3 = - = -3 = -4 = - = -2 = -3 = -2 = - = -2 = -3 = - = - Pontos: balanço, número de zeros, facilidade de operações Qual deles é melhor? Por que? 4
MIPS Números de 32 bits com sinal: two = ten two = + ten two = + 2 ten... two = + 2,47,483,646 ten two = + 2,47,483,647 ten two = 2,47,483,648 ten two = 2,47,483,647 ten two = 2,47,483,646 ten... two = 3 ten two = 2 ten two = ten maxint minint 5 Operações com Complemento de Dois Negar um número em complemento de dois: inverter todos e bits e adicionar lembre-se: negar e inverter são bem diferentes! Convertendo números com n bits em números com mais de n bits: imediatos de 6 bits do MIPS 6 bit são convertidos em 32 bits para as operações aritméticas copie o bit mais significante (o bit do sinal) nos outros bits -> -> extensão de sinal" (lbu vs. lb) 6
Adição & Subtração Como na escola primária (vai/empresta s) + - - Operações em complemento de dois fácil subtração usando adição de números negativos + Overflow (resultado muito grande para uma palavra de computador finita): ex., adicionando 2 números de n bits não resulta em outro número de n bits + note que o termo overflow pode ser enganoso, ele não significa um carry (vai-um) overflowed 7 Detectando Overflow Não há overflow quando se adiciona um número positivo e um negativo Não há overflow quando os sinais são iguais na subtração Overflow ocorre quando o valor afeta o sinal: overflow quando adicionando dois positivos resulta num negativo ou, adicionando dois negativos resulta num positivo ou, subtraindo um negativo de um positivo resulta num negativo ou, subtraindo um positivo de um negativo e o resultado é positivo Considere as operações A + B, and A B Pode ocorrer overflow se B for? Pode ocorrer overflow se A for? 8
Efeitos do Overflow Uma exceção ocorre (interrupção) controle salta para um endereço de exceção pré-definido Endereço onde foi interrompido é armazenado para uma possível reinicio Detalhes baseados no sistema de software/linguagem exemplo: controle de vôo vs lição de casa Nem sempre se quer detectar overflow novas instruções MIPS: addu, addiu, subu nota: addiu continua estendendo o sinal! nota: sltu, sltiu para comparações sem sinal 9 Revisão: Álgebra Booleana & portas lógicas (Gates) Problema: Considere uma função lógica com 3 entradas: A, B, e C. Saída D é verdadeira se pelo menos uma entrada for verdadeira Saída E é verdadeira se exatamente duas entradas forem verdadeiras Saída F é verdadeira somente se as 3 entradas forem verdadeiras Mostre a tabela verdade para essas 3 funções. Mostre as equações Booleanas para essas 3 funções. Mostre uma implementação usando apenas inversores, portas E e portas OU.
Uma ULA (Unidade Lógica Aritmética) Vamos construir uma ULA que suporte as instruçõesandi e ori nós iremos construir apenas uma ULA de bit e usar 32 delas operação op a b res a b resultado Possível implementação (soma-dos-produtos): Revisão: O Multiplexador Seleciona uma das entras para ser a saída, baseado numa entrada de controle S A B C nota: Nós chamamos isso de um mux de 2 entradas mesmo que ele tenha 3 entradas! Vamos construir nossa ULA usando um MUX: 2
Diferente Implementações Não é fácil decidir qual é a melhor maneira de se construir alguma coisa Não se deseja muitas entradas para um única porta Não se deseja ter que atravessar muitos portas para nossos propósitos, facilidade de compreensão é importante Vamos olhar a ULA de bit para adição: CarryIn a b S um c out = a b + a c in + b c in sum = a xor b xor c in CarryOut Como nós podemos construir uma ULA de bit para adição, E e OU? Como nós podemos construir uma ULA de 32 bits? 3 Construindo uma ULA de 32 bits Operat ion Operat ion a b A LU CarryO ut Result CarryIn a a b A LU CarryO ut Result Result b 2 a2 b2 A LU2 CarryO ut Result2 CarryOut a3 b3 ALU3 Result3 4
E a subtração (a b)? Abordagem Complemento de 2: apenas negamos b e adicionamos. Como nós negamos? Uma solução muito inteligente: Binvert Operation a Result b 2 CarryOut 5 Ajustando a ULA ao MIPS Precisa suportar a instrução atribui-se-menor-que (set-on-less-than - slt) lembre-se: slt é uma instrução aritmética produz se rs < rt, e caso contrário usa subtração: (a-b) < implica que a < b Precisa suporta o teste de igualdade (beq $t5, $t6, $t7) usa subtração: (a-b) = implica que a = b 6
Suportando slt Bi nvert CarryIn Operati on Podemos descobrir a idéia? a b 2 Result 3 a. CarryO ut Binvert Operat ion a b 2 Result 3 Set b. Overf low detecti on O verflow Bi nvert Operation a b ALU Result CarryOut a b ALU CarryOut Result a2 b2 ALU2 CarryOut Result 2 CarryIn a3 b3 ALU3 Set Result 3 Overf low 8
Teste de igualdade Observe as linhas de controle: Bnegat e Opera tion = and = or = add = subtract = slt a b a b ALU CarryO ut ALU CarryO ut Result Result Zero Nota: zero retorna quando o resultado é zero! a2 b2 ALU2 CarryO ut Result2 a3 b3 ALU3 Result 3 Set Overf low 9 Conclusão Nós podemos construir uma ULA para suportar o conjunto de instruções do MIPS idéia chave: usar o multiplexador para selecionar a saída que nós queremos nós podemos executar a subtração de maneira eficiente com o complemento de 2 nós podemos replicar a ULA de bit para produzir a ULA de 32 bits Pontos importantes sobre o hardware todas as portas lógicas estão sempre funcionando a velocidade de uma porta é afetada pelo número de entradas a velocidade de um circuito é afetada pelo número de portas em série (no caminho crítico ou o nível de lógica mais profundo ) Nosso foco primário: compreensão, no entanto, Mudanças inteligentes na organização podem melhorar o desempenho (similar a usar melhores algoritmos no software) Nós iremos olhar dois exemplos de adição e multiplicação 2
Problema: somador com propagação de vai-* é lento Uma ULA de 32 bits é rápida como uma ULA de bit? Existe mais de uma maneira de se fazer a adição? dois extremos: propagação de vai- e soma de produtos Você pode ver a propagação? Como você pode se livrar dela? c = b c + a c + a b c 2 = b c + a c + a b c 2 = c 3 = b 2 c 2 + a 2 c 2 + a 2 b 2 c 3 = c 4 = b 3 c 3 + a 3 c 3 + a 3 b 3 c 4 = Não é praticável! Por que? *N.T.: ripple carry adder 2 Somador com antecipação do vai-* Uma aproximação no meio dos nossos dois extremos Motivação: Se nós não sabemos o valor do vem-, o que podemos fazer? Quando nós podemos sempre gerar o vai-? g i = a i b i Quando nós podemos propagar o vai-? p i = a i + b i Nós nos livramos da propagação? c = g + p c c 2 = g + p c c 2 = c 3 = g 2 + p 2 c 2 c 3 = c 4 = g 3 + p 3 c 3 c 4 = Praticável! Por que? *N.T.: Carry-lookahead adder 22
Use o princípio para construir somadores maiores a b a b a2 b2 a3 b3 ALU P G C pi gi ci + Result--3 Carry-lookahead unit a4 b4 a5 b5 a6 b6 a7 b7 a8 b8 a9 b9 a b a b ALU P G ALU2 P2 G2 C2 C3 pi + gi + ci + 2 pi + 2 gi + 2 ci + 3 Result4--7 Result8-- Não podemos construir somadores com 6 bits desse jeito... (muito grande) Podemos usar o somadores com propagação de vai- com somadores com antecipação de vai- de 4 bits Melhor: use o princípio AV - de novo! a2 b2 a3 b3 a4 b4 a5 b5 ALU3 P3 G3 C4 pi + 3 gi + 3 ci + 4 Result 2--5 CarryO ut 23 Multiplicação Mais complicado do que a adição Conseguida através de deslocamento e adição Mais tempo e mais área Vamos olhar 3 versões baseadas no algoritmo da escola primária (multiplicando) x_ (multiplicador) Números negativos: converter e multiplicar existem técnicas melhores, mas nós não veremos elas 24
Multiplicação: Implementação St art Mult iplier =. Te st M ultipl ier M ultipl ier = Mul tipli cand 64 bit s Shift lef t a. A dd m ul tipli cand to product and place the result in Product register 64-bit ALU Multiplier Shi ft right 32 bits 2. Shift the M ultip lican d regi ster left bit Product 64 bits Wri te Control test 3. Shift the M ultipl ier register right bi t 32nd repet iti on? No: < 32 repet itions Y es: 32 repeti tions Done 25 Segunda Versão St art M ulti plier =. Test Mult iplier Mult iplier = M ulti pl icand 32 bit s a. Add m ulti pl icand to the l eft half of the product and place the result in the left half of the Product register 32-bi t A LU Multiplier Shi ft right 32 bits 2. Shi ft the Product register righ t bit P roduct Shi ft right Wri te Control test 64 bits 3. Shi ft the Mult iplier register ri ght bit 32nd repetit ion? No: < 32 repet iti ons Yes: 32 repet itions Done 26
Versão Final St art Produ ct =. Test Product Product = Mult iplicand 32 bit s a. Add m ulti pl icand to the l eft half of the product and place the result in the left half of the Product register 32-bit A LU Product Shift ri ght Writ e Control test 2. Shi ft the Product register righ t bit 64 bit s 32nd repetit ion? No: < 32 repet iti ons Yes: 32 repet itions Done 27 Ponto Flutuante (uma breve olhada) Nós precisamos uma meio para representar números com frações, ex., 3.46 números muito pequenos, ex.,. números muito grandes, ex., 3.5576? 9 Representação: sinal, expoente, significand : ( ) sinal???significand???2 expoente mais bits para o significand dá mais precisão mais bits no expoente aumenta o intervalo Padrão de ponto flutuante IEEE 754: precisão simples: 8 bits expoente, 23 bit significand precisão dupla: bit expoente, 52 bit significand 28
Padrão de Ponto Flutuante IEEE 754 O bit inicial do signifcand é implícito Expoente é ajustado para facilitar a ordenação todos s é o menor expoente e todos os s é o maior ajuste de 27 para precisão simples e de 23 para precisão dupla sumário: ( ) sinal?????significand)???2expoente ajuste Exemplo: decimal: -.75 = -3/4 = -3/2 2 binário: -. = -. x 2 - ponto flutuante: expoente = 26 = IEEE precisão simples: 29 Complexidade s do Ponto Flutuante As operações são um tanto mais complicadas (veja o texto) Além do overflow podemos ter também o underflow Precisão pode ser um grande problema IEEE 754 guarda dois bits extras, guarda e redondo (round) quatro modos de arredondamento positivos divididos por zero resultam em infinito zero dividido por zero resulta em não é um número outras complexidades Implementar o padrão pode ser trabalhoso Não usar o padrão pode ser ainda pior veja o texto para a descrição do bug do 8x86 e do Pentium! 3
Sumário do Capítulo 4 Aritmética de computadores é restrita por uma precisão limitada Padrões de Bits não tem nenhum significado inerente mas existem padrões Complemento de 2 Ponto flutuante IEEE 754 Instruções de computador determinam o significado dos padrões de bits Desempenho e precisão são importantes pois existem muitas complexidades em máquinas reais (ex., algoritmos e implementações). Nós estamos prontos para seguir adiante (e implementar o processador) Você pode querer uma revisão (Seção 4.2 é uma boa leitura!) 3