Aritmetica para Computadoras

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Implementaciones posibles

Captulo 4 Aritmtica para computadoras y como construir una ALU

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

Nmeros con signo de 32 bits:


0000 0000 0000 ... 0111 0111 1000 1000 1000 ... 1111 1111 1111
result
32

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

Operaciones con complementado-2

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

Revisin: lgebra booleana y compuertas

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

Notar que el trmino sobreflujo no significa un acarreo desbordado


7 10

Detectando el desborde (Overflow)

ALU (Unidad lgica atirmtica)

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

Implementacin posible (suma-de-productos):

11

Efectos del desborde

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

Nota: este es un multiplexor de 2 entradas an si tiene 3 entradas


A B
0 1

La ALU se puede realizar con un multiplexor: nota: addiu extiende a signo nota: sltu, sltiu para comparaciones sin signo

12

Diferentes implementaciones

Ecuacin lgica para Sum

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

Ecuacin lgica para Sum

Una ALU de 1-bit para la adicin:


CarryIn

a Sum b

cout = a b + a cin + b cin sum = a xor b xor cin

CarryOut

14

17

Ecuacin lgica para Cout

Diagrama lgico para Sum y Cout

15

18

ALU de 1 bit

Adaptando la ALU al MIPS

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

usa la substraccin: (a-b) < 0 implica que a < b

R e s u lt

Necesita poder hacer las pruebas de igualdad (beq $t5, $t6, $t7)
2 b

usa la substraccin: (a-b) = 0 implica que a = b

C a rr y O u t

19

22

Implementacin de una ALU de 32 bits


C arryIn O peration

Agregando la instruccin slt

Cmo se podra hacer?


a0 b0 C arryIn ALU 0 C arryO ut R esu lt0

a1 b1

C arryIn ALU 1 C arryO ut R esu lt1

a2 b2

C arryIn ALU 2 C arryO ut R esu lt2

a3 1 b3 1

C arryIn A LU 3 1 R esu lt31

20

23

Substraccin (a-b)
Binvert CarryIn Operation

Utilizando complemento-2: simplemente negar b y adicionar 1 Cmo negar?

a0 b0

CarryIn ALU0 Less CarryOut

Result0

Una solucin ingeniosa:

Binvert

Operation CarryIn

a1 b1 0

CarryIn ALU1 Less CarryOut

Result1

a 0
a2 b2 0 CarryIn ALU2 Less CarryOut Result2

Result

0 1

2
CarryIn

a31 b31 0

CarryIn ALU31 Less

Result31 Set Overflow

CarryOut

21

24

Prueba de igualdad
Bnegate Operation

Problema con el sumador

Notar las lneas de control: 000 001 010 110 111 = = = = = and or add subtract slt

a0 b0

CarryIn ALU0 Less CarryOut

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

CarryIn ALU1 Less CarryOut

Result1

Nota: zero es 1 cuando el resultado es 0

a2 b2 0

CarryIn ALU2 Less CarryOut

Result2

c1 = b0c0 + a0c0 + a0b0 c2 = b1c1 + a1c1 + a1b1 c3 = b2c2 + a2c2 + a2b2 c4 = b3c3 + a3c3 + a3b3

c2 = c3 = c4 = No es posible! Por qu?

a31 b31 0

CarryIn ALU31 Less

Result31 Set Overflow

25

28

Conclusin

Carry-lookahead adder (CLA)

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

Sumador con acarreo predictivo


Un manera entre los dos extremos Motivacin: Si no se conoce el valor del acarreo de entrada, qu se puede hacer? Cundo hay que generar siempre un acarreo? gi = ai bi Cundo hay que propagar el acarreo? pi = ai + bi Cmo nos deshacemos del ripple? c1 = g0 + p0c0 c2 = g1 + p1c1 c3 = g2 + p2c2 c4 = g3 + p3c3

c2 = c3 = c4 = Si es posible! Por qu?


29

Problema con el sumador

Construyendo sumadores grandes


CarryIn

La propagacin del acarreo es lento

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

CarryIn Result0--3 ALU0 P0 G0 C1 pi gi Carry-lookahead unit ci + 1

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

a8 b8 a9 b9 a10 b10 a11 b11

Para un sumador de n bits, el retraso es equivalente al retraso de 2n compuertas


27

a12 b12 a13 b13 a14 b14 a15 b15

30

Multiplicacin

Observaciones del multiplicador 1

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

Multiplicando, ALU y multiplicador de 32 bits Producto de 64 bits


Multiplicand 32 bits

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?

No: < 32 repetitions

En el registro producto se desperdicia espacio * La mitad de los bits son 0


32

Yes: 32 repetitions

Done

35

Multiplicacin: implementacin
Start

Versin final
Start

Multiplicando, producto y ALU de 64 bits Multiplicador de 32 bits

Multiplier0 = 1

1. Test Multiplier0

Multiplier0 = 0

Multiplicando y ALU de 32 bits Producto de 64 bits (no multiplicador)

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

Multiplicand Shift left 64 bits


2. Shift the Multiplicand register left 1 bit

32-bit ALU

2. Shift the Product register right 1 bit

64-bit ALU

Multiplier Shift right 32 bits

3. Shift the Multiplier register right 1 bit

Product 64 bits
No: < 32 repetitions

Shift right Write

Control test

32nd repetition?

No: < 32 repetitions

Product Write 64 bits

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:

El multiplicador esta subrayado Esto es: 2 x 6 = 2 x 8 2 x 2


37 40

Observaciones del multiplicador 3

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

Y la multiplicacin con signo? Se usa el algoritmo de Booth

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.

Una ALU puede obtener el mismo resultado en ms de una forma:

11: Parte de una cadena de 1s. No hacer operaciones aritmticas.

2. Recorrer el producto 1 bit hacia la derecha.

39

42

Algoritmo de Booth (ejemplo 5 x -6)

Algoritmo de divisin versin 1

Multiplicando = -6 = 1010 Multiplicador = -5 = 1011

-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

Toma n+1 pasos para un cociente 46 y residuo de n bits

Divisin

Ejemplo

Ejemplo (sin signo): 20 / 6 = 3

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

Observaciones del divisor 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

Divisor 32 bits, ALU 32 bits, cociente 32 bits Residuo 64 bits

Divisor 32 bits, ALU 32 bits Residuo 64 bits (cociente 0 bits)

49

52

Algoritmo de divisin versin 2

Algoritmo de divisin versin 3

50

53

Observaciones del divisor 2

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

Ejemplo usando el divisor versin 3: 14 / 3 = 4 ; residuo = 2

51

54

Observaciones del divisor 3

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

Punto flotante: Notacin cientfica

Suma (punto flotante)

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

Formato de punto flotante IEEE

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.

Alinear los punto binarios (denormalizar el nmero menor)

2.

Sumar los componentes alineados

3.

Normalizar el resultado

60

10

Multiplicacin (punto flotante)

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

Punto flotante (resumen)

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

Complicaciones del punto flotante

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

También podría gustarte