Aritmetica para Computadoras
Aritmetica para Computadoras
Aritmetica para Computadoras
Magnitud y signo 000 = +0 001 = +1 010 = +2 011 = +3 100 = -0 101 = -1 110 = -2 111 = -3
Complemento uno 000 = +0 001 = +1 010 = +2 011 = +3 100 = -3 101 = -2 110 = -1 111 = -0
Complemento dos 000 = +0 001 = +1 010 = +2 011 = +3 100 = -4 101 = -3 110 = -2 111 = -1
Implicaciones: balance, nmero de ceros, facilidad para operaciones Cul es mejor? Por qu?
Aritmtica
MIPS
Lo que se ha estudiado: Rendimiento (segundos, ciclos, instrucciones) Abstracciones: Arquitectura del juego de instrucciones Lenguaje ensamblador y lenguaje de mquina En este captulo: Implementacin de la arquitectura
operation
0000 0000 0000 0000 0000 0000 0000two = 0ten 0000 0000 0000 0000 0000 0000 0001two = + 1ten 0000 0000 0000 0000 0000 0000 0010two = + 2ten 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1110two 1111two 0000two 0001two 0010two = = = = = + + 2,147,483,646ten 2,147,483,647ten 2,147,483,648ten 2,147,483,647ten 2,147,483,646ten
maxint minint
a
32
1111 1111 1111 1111 1111 1111 1101two = 3ten 1111 1111 1111 1111 1111 1111 1110two = 2ten 1111 1111 1111 1111 1111 1111 1111two = 1ten
ALU
b
32
Nmeros
Los bits son solo bits convencin para definir una relacin entre bits y nmeros Nmeros binarios (base 2) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001... decimal: 0...2n-1 Las cosas se complican porque: los nmeros son finitos (sobreflujo - overflow) fracciones y nmeros reales nmeros negativos ejem., en MIPS no hay instruccin subi; addi puede sumar nmeros negativos Cmo representar nmeros negativos? i.e., qu patrones de bit representarn a cules nmeros?
Negar un nmero complemento-2: invertir todos los bits y sumar 1 importante: negar e invertir no es lo mismo
Convertir nmeros de n bits en nmeros con ms de n bits: En MIPS los nmeros inmediatos de 16 bits son convertidos a 32 bits para las operaciones aritmticas
copiar el bit ms significativo (el bit de signo) a los otros bits 0010 -> 0000 0010 1010 -> 1111 1010 extensin de signo" (lbu vs. lb)
Adicin y substraccin
Como en la primaria (llevar y pedir prestado 1 - carry/borrow) 0111 0111 0110 + 0110 - 0110 - 0101
Problema: Considerar una funcin lgica con tres entradas: A, B y C. La salida D es 1 si al menos una de las entradas es 1 La salida E es 1 si exctamente dos entradas son 1 La salida F es 1 solo si las tres entradas son 1 Realizar las tablas de verdad para las tres funciones Obtener las ecuaciones booleanas para las tres funciones Mostrar una implementacin utilizando compuertas AND, OR e inversores
Operaciones con complemento-2 son fciles substraccin usando la adicin de nmeros negativos 0111 + 1010
Sobreflujo (Overflow) (resultado demasiado grande para una palabra finita): ejem., al sumar dos nmeros de n-bits no siempre da un nmero de n-bits. 0111 + 0001 1000
No hay desborde cuando se suma un nmero positivo con uno negativo No hay desborde cuando los signos son los mismos para la substraccin El desborde ocurre cuando el valor afecta el signo: hay desborde cuando al sumar dos positivos el resultado es negativo o, al sumar dos negativos el resultado es positivo o, al substraer un negativo de un positivo el resultado es negativo o, al substraer un positivo de un negativo el resultado es positivo Considerar las operaciones A + B, y A B Pude haber desborde si B es 0 ? Pude haber desborde si A es 0 ?
Se implementar una ALU que ejecute las instrucciones andi y ori se construir una ALU de 1 bit y se usaran 32 de stas
op a operacin a b resultado
res
11
Revisin: El multiplexor
Una excepcin (interrupcin) ocurre El control salta a una direccin predefinida para la excepcin La direccin donde ocurri la interrupcin se almacena para posiblemente continuar con las operaciones Detalles dependen del software / lenguaje ejemplo: control de vuelo vs. tarea escolar No siempre se quiere detectar un desborde instrucciones nuevas de MIPS: addu, addiu, subu
Selecciona una de las entradas hacia la salida, basdo en una entrada de control
La ALU se puede realizar con un multiplexor: nota: addiu extiende a signo nota: sltu, sltiu para comparaciones sin signo
12
Diferentes implementaciones
No es fcil decidir la mejor manera de construir algo No se quieren muchas entradas en una sola compuerta No se quiere tener que pasar a travs de muchas compuertas para nuestros propsitos es importante la comprensin
Cmo se puede construir una ALU de 1-bit para add, and y or ? Cmo se puede consturir una ALU de 32-bits?
13
16
Sumador de 1 bit
a Sum b
CarryOut
14
17
15
18
ALU de 1 bit
O p e r a t io n C a r ry In
Necesita poder hacer la instruccion set-on-less-than (slt) importante: slt es una instruccin aritmtica produce un 1 si rs < rt y un 0 en caso contrario
0 1
R e s u lt
Necesita poder hacer las pruebas de igualdad (beq $t5, $t6, $t7)
2 b
C a rr y O u t
19
22
a1 b1
a2 b2
a3 1 b3 1
20
23
Substraccin (a-b)
Binvert CarryIn Operation
a0 b0
Result0
Binvert
Operation CarryIn
a1 b1 0
Result1
a 0
a2 b2 0 CarryIn ALU2 Less CarryOut Result2
Result
0 1
2
CarryIn
a31 b31 0
CarryOut
21
24
Prueba de igualdad
Bnegate Operation
Notar las lneas de control: 000 001 010 110 111 = = = = = and or add subtract slt
a0 b0
Result0
Es una ALU de 32-bits tan rpida como una de 1-bit? Hay ms de una manera de hacer una adicin? Dos extremos: ripple carry y suma-de-productos Cmo podemos deshacernos de l?
Zero
a1 b1 0
Result1
a2 b2 0
Result2
c1 = b0c0 + a0c0 + a0b0 c2 = b1c1 + a1c1 + a1b1 c3 = b2c2 + a2c2 + a2b2 c4 = b3c3 + a3c3 + a3b3
a31 b31 0
25
28
Conclusin
Se puede construir una ALU para el juego de instrucciones de MIPS idea central: usar multiplexores para seleccionar la salida requerida se puede realizar eficientemente una substraccin usando complemento-2 se pueden usar ALUs de 1-bit para producir una de 32-bits Puntos importantes acerca del hardware todas las compuertas siempre estn funcionando la velocidad de una compuerta depende de su nmero de entradas la velocidad de un circuito est limitada por el nmero de compuertas en serie (en el camino crtico o en el nivel ms profundo de lgica) Nuestro enfoque es la comprensin, sin embargo: Cambios inteligentes en la organizacin puede mejorar el rendimiento (similar a usar mejores algoritmos en software) se vern dos ejemplos para la adicin y para la multiplicacin
26
No se pueden construir sumadores de 32-bits de esta manera (muy grandes) Se puede usar el ripple carry de sumadores CLA de 4-bits Mejor: volver a usar el principio del CLA
a0 b0 a1 b1 a2 b2 a3 b3
a4 b4 a5 b5 a6 b6 a7 b7
CarryIn Result4--7 ALU1 P1 G1 C2 CarryIn Result8--11 ALU2 P2 G2 C3 CarryIn Result12--15 ALU3 P3 G3 C4 CarryOut pi + 3 gi + 3 ci + 4 pi + 2 gi + 2 ci + 3 pi + 1 gi + 1 ci + 2
30
Multiplicacin
Ms complicada que la adicin se implementa con translados y adiciones Ms tiempo y mayor rea 3 ejemplos basados en algoritmos de la escuela 0010 x 1011 (multiplicando) (multiplicador)
1 Ciclo de reloj por cada paso = aprox. 100 ciclos por multiplicacin La mitad de los bits del multiplicando son siempre ceros * La mitad del sumador se desperdicia Se insertan 0`s a la derecha del multiplicando despus de cada corrimiento * Los bits menos significativos no cambian
En lugar de recorrer el multiplicando hacia la izquierda, podemos recorrer el producto hacia la derecha... Nmeros negativos: convertir y multiplicar hay mejores tcnicas, pero no sern vistas en el curso
31 34
Ejemplo: 11 x 9
Segunda versin
Start
Multiplier0 = 1
1. Test Multiplier0
Multiplier0 = 0
1a. Add multiplicand to the left half of the product and place the result in the left half of the Product register
32-bit ALU
Multiplier Shift right 32 bits Product 64 bits Shift right Write Control test
3. Shift the Multiplier register right 1 bit 2. Shift the Product register right 1 bit
32nd repetition?
Yes: 32 repetitions
Done
35
Multiplicacin: implementacin
Start
Versin final
Start
Multiplier0 = 1
1. Test Multiplier0
Multiplier0 = 0
Product0 = 1
1. Test Product0
Product0 = 0
Multiplicand
1a. Add multiplicand to product and place the result in Product register
32 bits
1a. Add multiplicand to the left half of the product and place the result in the left half of the Product register
32-bit ALU
64-bit ALU
Product 64 bits
No: < 32 repetitions
Control test
32nd repetition?
Control test
Yes: 32 repetitions
32nd repetition?
Done
Yes: 32 repetitions
Done
33
36
Ejemplo: 11 x 9
Algoritmo de Booth
Reemplazar cadenas de 1s en el multiplicador con: * Restar inicialmente cuando vemos el primer 1 (desde la derecha) * Sumar cuando vemos un 0 en le extremo izquierdo de la cadena de 1s Ejemplo:
Algoritmo de Booth
Ejecuta la instruccin MIPS MultU Los registros Hi y Lo contienen la mitad izquierda y derecha del producto respectivamente Los corrimientos del multiplicador y el producto se combinan
Fue pensado originalmente para aumentar la velocidad * El corrimiento era ms rpido que la suma Principal ventaja: Funciona correctamente con nmeros representados en complemento a dos
38
41
Algoritmo de Booth
Algoritmo de Booth
Ejemplo: 2 x 6
0010 x 0110
1. Dependiendo del valor del bit actual y previo hacer lo siguiente: 00: Parte de una cadena de 0s. No operaciones aritmticas. 01: Fin de una cadena de 1s. Sumar el multiplicando a la mitad izquierda del producto. 10: Inicio de una cadena de 1s. Restar el multiplicando de la mitad izquierda del producto.
39
42
-Multiplicando = 6 = 0110
Notas:
1. Multiplicando en el registro producto est subrayado 2. Bits actual y previos en parntesis 3. Bit previo se inicializa con 0
43
Divisin
Ejemplo
Residuo = 2
Ejemplo: 7 / 3 = 2, residuo =1
Divisor
110 10100
Cociente Dividendo
Algoritmo: Si residuo parcial > divisor Bit del cociente = 1; residuo = residuo divisor Si no Bit del cociente = 0 Agregar al residuo el siguiente bit del dividendo
44
47
Divisor versin 1
Divisor 64 bits (iniciando en la mitad izquierda) ALU 64 bits, residuo 64 bits( dividendo en la mitad derecha) Cociente 32 bits
La mitad de los bits en el divisor son siempre 0s La mitad del sumador de 64 bits se desperdicia La mitad del divisor se desperdicia En lugar de recorrer el divisor a la derecha, podemos recorrer el residuo a la izquierda El primer paso no puede producir un 1 en el cociente (en caso contrario el cociente seria demasiado grande) * Invertir el orden para ahorrar una iteracin (recorrer primero y despus restar)
45
48
Divisor versin 2
Divisor versin 3
49
52
50
53
Ejemplo
El residuo pierde un bit cada ciclo; el cociente gana un bit cada ciclo Se puede eliminar el registro del cociente si se combina con el registro del residuo * Recorrer ambos valores a la izquierda simultneamente * Ciclo contiene solo dos pasos: * El residuo se recorre a la derecha una vez ms de las necesarias por lo que se requiere un ajuste al final
51
54
Nmeros normalizados
Usa el mismo hardware que le multiplicador, solo necesita que la ALU sume o reste y un regsitro de 63-bits que recorra hacia la izquierda o derecha En MIPs, los registros Hi y Lo se combinan para actuar como un registro de 64 bits para multiplicar y dividir Divisin con signo * Lo ms sencillo es recordar los signos, hacer los operandos positivos y complementar el cociente y residuo si es necesario. * El residuo tendr el mismo signo que el dividendo * El cociente es negado si el signo del divisor y del dividendo son diferentes
El significando siempre se ajusta a la izquierda - El significando debe tener el mximo valor posible y el exponente el menor valor posible. Ejemplo: 2.5 = 1.01 X 21
Cuando se utiliza la base 2, el bit ms significativo de un nmero normalizado siempre es 1, por lo que no es necesario almacenar este bit oculto
Dentro de la unidad de punto flotante, el bit oculto se inserta durante la etapa de denormalizacin que precede la suma/resta
55 58
Los nmeros se representan como: * Mantisa * Exponente Aritmtica: * Multiplicacin y divisin: - Multiplicar/dividir mantisa - Sumar/restar exponente - Ejemplo: 5.6 x 1011 x 6.7 x 1012 = 5.6 x 6.7 x 1022 * Suma y resta: - Convertir los operandos para que tengan el mismo valor en el exponente - Sumar/restar mantisa - Ejemplo: 2.1 x 103 + 4.3 x 104 = 0.21 x 104 + 4.3 x 104
56
59
Ejemplo de suma
Precisin simple:
Ejemplo: 11 + 6
(significando de 4 bits)
Formato - El exponente real e es igual a E-127 (biased) - El valor se obtiene con: (-1)s(1.M) X 2E-127 Rango de nmeros que pueden ser representados 1.0 X 2-126 ... 2-2-23 X 2127 = 1.8 X 10-38 ... 3.40 X 1038 Doble precisin: - 64 bits totales - Significando de 52 bits - Exponente de 11 bits ( e = E-1023) - El valor se obtiene con: (-1)s(1.M) X 2E-1023
57
1.
2.
3.
Normalizar el resultado
60
10
Conclusin
La aritmtica de las computadoras est limitada por la precisin Los patrones de bits no tienen un significado inherente, sino que se adaptan a algn estndar complemento dos punto flotante definido por el estndar IEEE 754 Las instrucciones de la computadora determinan el significado de los patrones de bits El rendimiento y la exactitud son importantes por lo que hay muchas complicaciones en la implementacin de mquinas reales (algoritmos y su implementacin) El siguiente punto es implementar el procesador se recomienda leer la seccin 4.12
61 64
Se necesita una forma de representar nmeros con fracciones, por ejemplo 3.1416 nmeros muy pequeos, por ejemplo 0.000000001 nmeros muy grandes, por ejemplo 3.15576 x 109 Representacin: signo, exponente, significando: (1)sign x significando x 2exponent ms bits para el significando da mayor precisin ms bits para el exponente incrementa el rango Estndar IEEE 754 para punto flotante: precisin simple: 8 bits exponente, 23 bits significando doble precisin: 11 bits exponente, 52 bits significando
62
Las operaciones son ms complicadas (ver el libro) Adems del sobreflujo se tiene tambien el caso contrario (underflow) La exactitud puede ser un gran problema IEEE 754 utiliza dos bits adicionales: guard y round cuatro modos de redondear valor positivo dividido entre cero da infinito - Inf cero dividido cero cero da no es un nmero - NaN otras complicaciones Implementar el estndar puede ser complicado No utilizar el estndar puede ser peor leer el libro sobre la descripcin del 80x86 y el error del Pentium
63
11