La Unidad de punto flotante (a partir de ahora FPU) de la IA proporciona un alto rendimiento a la capacidad de procesar en punto flotante. Soporta tipos de datos reales, enteros, y enteros BCD, el algoritmo de procesamiento en punto flotante y excepciones de manejo de arquitectura definido en IEEE 754 y 854 Standards for Floating-Point Arithmetic. La FPU ejecuta instrucciones desde el conjunto normal de instrucciones del procesador y implementa la eficiencia de los procesadores IA a favor de la precisión numérica necesaria para cálculos científicos, por ejemplo.
Para aumentar la velocidad y eficiencia de las operaciones con números reales, se representan en un formato binario de punto flotante. En el formato, el número real tiene 3 partes: el signo (1 bit; 0 si es positivo, 1 si es negativo), el exponente (8 bits, que representa el orden de magnitud de la mantisa. El mínimo y el máximo valor posible determinan el rango de valores representables.), y la parte fraccionaria de la mantisa (23 bits, que representa los dígitos significativos del número. El tamaño máximo determina la precisión de la representación. Normalmente este campo está normalizado, es decir que su parte entera sólo consta de un dígito). Esta forma es conforme al estándar IEEE, y se llama representación de números reales en simple precisión.
Una variante de números reales y valores especiales se puede codificar en el formato de punto flotante de la FPU. Estos valores especiales se dividen en: Ceros con signo (El cero se puede representar como +0 o -0, siendo el valor de ambos el mismo. Esto sirve por ejemplo, para indicar el signo de un infinito que ha sido anulado), números finitos no normalizados (Cuando un número es muy próximo a cero no se puede utilizar el formato normalizado porque el rango del exponente es demasiado largo. Para esto se usa el formato no normalizado, poniendo los bits de la mantisa a cero para que el exponente no sea tan grande. Esto implica pérdida de precisión), números finitos normalizados (Son todos los números finitos distintos de cero que pueden ser codificados en un formato de números reales normalizado entre cero y infinito), infinitos con signo (Para representar el infinito la mantisa debe estar a cero, y el exponente al valor máximo permitido por el formato que se utiliza), NaNs (de Not A Number; los signos para los NaNs son ignorados, y aquí se incluyen los números con máximo exponente y mantisa no nula. Hay dos tipos: QNaNs, que son NaNs con el bit más significativo de la mantisa a 1 y se les permiten propagarse por la mayoría de las operaciones aritméticas sin que salte una excepción; y SNaNs, que el bit de la mantisa es 0 y generalmente son señal de una excepción en una operación no válida. Es posible operar con NaNs), y números indefinidos (Operando con números reales, el valor real indefinido es un QNaN).
La FPU es un coprocesador que opera paralelamente con la Integer Unit del procesador. La FPU toma las instrucciones del mismo decodificador de instrucciones y secuanciador que la Integer Unit, y comparte el bus del sistema con ella. A pesar de todo, operan independientemente y en paralelo. El entorno de ejecución de instrucciones de la FPU consiste en 8 registros de datos y 6 registros de propósito general (el registro de estado (registro de 16 bits que controla el tope de la pila, las condiciones de las banderas del código, las banderas de excepciones o la bandera de fallo de pila), el de control (registro de 16 bits que controla el método de redondeo (al más cercano, al mayor, al menor, o truncar) y la precisión que puede ser de 24, 53 o 64 bits. También contiene los bits de la máscara de la bandera de excepciones), el registro tag word (indica el contenido de los 8 registros en la pila de registros de datos del FPU), el de puntero de instrucción (El contenido está indefinido si la instrucción previa que no sea de control no tuvo un operador de memoria), el de último operando, y el de opcode(proporciona información de estado para el administrar excepciones)).
Las instrucciones FSTENV/FNSTENV guardan el contenido de estado, control, punteros de instrucción y de operación de la FPU, y registros de opcode. Las instrucciones FSAVE/FNSAVE guardan esa información y el contenido de los registros de datos, y inicializa la FPU a los valores por defecto. La forma en que se establece la información en memoria depende del modo de operación del procesador (modo protegido o modo real-address).
La FPU trabaja con 7 tipos de datos, divididos en 3 grupos: reales, enteros, y enteros BCD compactados. Con la excepción del bit 80 del formato real extendido, el resto de tipos de datos existen sólo en memoria. Cuando son cargados en registros de datos de la FPU, se convierten en formato real extendido y operan en dicho formato. Los 3 tipos de datos reales (single-real, double-real, extended-real) se corresponden directamente a los formatos single-precision, double-precision y double-extended-precision del estándar del IEEE. Los tipos de datos enteros binarios también son 3: word, short y long. El formato es el mismo para los 3, lo que cambia es la longitud. Los negativos se representan en complemento a 2 (invertir el valor de cada cifra, y sumarle uno).
Hay formatos no soportados por el formato real extendido, como por ejemplo pseudo-NaNs o números pseudo-infinitos. Se generan excepciones de operación no válida cuando se detecta este tipo de datos.
Los SNaNs se usan por ejemplo, para que el programador sepa quien ha hecho saltar una excepción cuando se desenmascara la excepción de operación inválida.Los QNaNs se pueden utilizar por ejemplo, para depurar más rápidamente un código.
La FPU detecta seis clases de condiciones de excepción mientras se ejecutan instrucciones en punto flotante: Operaciones no válidas (overflow de pila, underflow, operación aritmética no válida), división por cero, operando no normalizado, overflow numérico, underflow numérico, y resultado no exacto. Cada una tiene su bandera correspondiente asignada al registro de estado y en la máscara del registro de control de la FPU. Las excepciones más significativas son (en orden de prioridad, de más a menos significativas): excepción de operación no válida (overflow o underflow de pila, operando de formato no soportado, operando SNaN), operando QNaN (no es una excepción, pero tiene prioridad sobre excepciones menos significativas), cualquier otra excepción de operación no válida no mencionada o la excepción de división por cero, excepción de operando no normal, excepción de overflow y underflow numérico en conjunto con la de resultado no exacto, excepción de resultado no exacto.
La FPU del Pentium Pro, Pentium y Intel486 proporciona dos modos diferentes de operacion para invocar una excepción del software para excepciones en punto flotante; modo nativo, y modo compatible con MS-DOS.
Como la Integer Unit y la FPU son unidades separadas de ejecución, es posible ejecutar instrucciones en punto flotante, de enteros, y del sistema a la vez. Sin embargo, esta ejecución puede causar problemas para las excepciones en punto flotante. Estos se solucionan poniendo inmediatamente después de una instrucción en punto flotante que pueda dar lugar a esta situación, una excepción de instrucción sincronizada.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario