Unidad de punto flotante
Una unidad de punto flotante (FPU, coloquialmente un coprocesador matemático) es una parte de un sistema informático especialmente diseñado para realizar operaciones en números de coma flotante. Las operaciones típicas son la suma, la resta, la multiplicación, la división y la raíz cuadrada. Algunas FPU también pueden realizar varias funciones trascendentales, como cálculos exponenciales o trigonométricos, pero la precisión puede ser muy baja, por lo que algunos sistemas prefieren calcular estas funciones en el software.
En las arquitecturas informáticas de propósito general, una o más FPU pueden estar integradas como unidades de ejecución dentro de la unidad central de procesamiento; sin embargo, muchos procesadores integrados no tienen soporte de hardware para operaciones de coma flotante (aunque cada vez más las tienen como estándar, al menos de 32 bits).
Cuando una CPU está ejecutando un programa que requiere una operación de coma flotante, hay tres formas de llevarla a cabo:
- Un emulador de unidad de punto flotante (una biblioteca de punto flotante)
- Add-on FPU
- Integrated FPU
Historia
En 1954, el IBM 704 tenía la aritmética de punto flotante como característica estándar, una de sus principales mejoras con respecto a su predecesor, el IBM 701. Esto se trasladó a sus sucesores, el 709, 7090 y 7094.
En 1963, Digital anunció el PDP-6, que tenía un punto flotante como característica estándar.
En 1963, el GE-235 presentaba una "Unidad Aritmética Auxiliar" para cálculos de punto flotante y de doble precisión.
Históricamente, algunos sistemas implementaron el punto flotante con un coprocesador en lugar de una unidad integrada (pero ahora, además de la CPU, por ejemplo, las GPU, que son coprocesadores que no siempre están integrados en la CPU, tienen FPU por regla general, mientras que las primeras generaciones de GPU no lo hicieron). Esto podría ser un solo circuito integrado, una placa de circuito completa o un gabinete. Cuando no se ha proporcionado hardware de cálculo de punto flotante, los cálculos de punto flotante se realizan en software, lo que requiere más tiempo de procesador, pero evita el costo del hardware adicional. Para una arquitectura de computadora particular, las instrucciones de la unidad de punto flotante pueden ser emuladas por una biblioteca de funciones de software; esto puede permitir que el mismo código objeto se ejecute en sistemas con o sin hardware de coma flotante. La emulación se puede implementar en cualquiera de varios niveles: en la CPU como microcódigo (no es una práctica común), como una función del sistema operativo o en código de espacio de usuario. Cuando solo está disponible la funcionalidad de números enteros, los métodos de emulación de punto flotante de CORDIC son los más utilizados.
En la mayoría de las arquitecturas informáticas modernas, existe cierta división entre las operaciones de coma flotante y las operaciones con enteros. Esta división varía significativamente según la arquitectura; algunos tienen registros de punto flotante dedicados, mientras que otros, como Intel x86, lo llevan tan lejos como esquemas de reloj independientes.
Las rutinas CORDIC se han implementado en los coprocesadores Intel x87 (8087, 80287, 80387) hasta la serie de microprocesadores 80486, así como en los Motorola 68881 y 68882 para algunos tipos de instrucciones de punto flotante, principalmente como una forma de reducir el número de puertas (y la complejidad) del subsistema FPU.
Las operaciones de punto flotante a menudo se canalizan. En arquitecturas superescalares anteriores sin una ejecución fuera de orden general, las operaciones de punto flotante a veces se canalizaban por separado de las operaciones con enteros.
La arquitectura modular de la microarquitectura Bulldozer utiliza una FPU especial denominada FlexFPU, que utiliza subprocesos múltiples simultáneos. Cada núcleo físico entero, dos por módulo, tiene un solo subproceso, en contraste con Hyperthreading de Intel, donde dos subprocesos virtuales simultáneos comparten los recursos de un solo núcleo físico.
Biblioteca de coma flotante
Algunos hardware de punto flotante solo admiten las operaciones más simples: suma, resta y multiplicación. Pero incluso el hardware de punto flotante más complejo tiene un número finito de operaciones que puede admitir; por ejemplo, ninguna FPU admite directamente aritmética de precisión arbitraria.
Cuando una CPU está ejecutando un programa que requiere una operación de punto flotante que no es compatible directamente con el hardware, la CPU utiliza una serie de operaciones de punto flotante más simples. En sistemas sin ningún hardware de punto flotante, la CPU lo emula usando una serie de operaciones aritméticas de punto fijo más simples que se ejecutan en la unidad lógica aritmética de enteros.
El software que enumera la serie necesaria de operaciones para emular operaciones de punto flotante a menudo se empaqueta en una biblioteca de punto flotante.
FPU integradas
En algunos casos, las FPU pueden especializarse y dividirse entre operaciones de punto flotante más simples (principalmente suma y multiplicación) y operaciones más complicadas, como la división. En algunos casos, solo las operaciones simples pueden implementarse en hardware o microcódigo, mientras que las operaciones más complejas se implementan como software.
En algunas arquitecturas actuales, la funcionalidad FPU se combina con unidades SIMD para realizar el cálculo SIMD; un ejemplo de esto es el aumento del conjunto de instrucciones x87 con el conjunto de instrucciones SSE en la arquitectura x86-64 utilizada en los procesadores Intel y AMD más nuevos.
FPU adicionales
En la década de 1980, era común en las microcomputadoras IBM PC/compatibles que la FPU estuviera completamente separada de la CPU y, por lo general, se vendía como un complemento opcional. Solo se compraría si fuera necesario para acelerar o habilitar programas intensivos en matemáticas.
La IBM PC, XT y la mayoría de los compatibles basados en el 8088 o el 8086 tenían un zócalo para el coprocesador 8087 opcional. Los sistemas basados en AT y 80286 generalmente se conectaron para las máquinas basadas en 80287 y 80386/80386SX, para 80387 y 80387SX respectivamente, aunque los primeros se conectaron para 80287, ya que el 80387 aún no existía. Otras empresas fabricaron coprocesadores para la serie Intel x86. Estos incluyeron a Cyrix y Weitek. Acorn Computers optó por el WE32206 para ofrecer precisión simple, doble y extendida a su gama Archimedes con tecnología ARM.
Los coprocesadores estaban disponibles para la familia Motorola 68000, el 68881 y el 68882. Estos eran comunes en las estaciones de trabajo basadas en Motorola 68020/68030, como la serie Sun-3. También se agregaron comúnmente a los modelos de gama alta de las series Apple Macintosh y Commodore Amiga, pero a diferencia de los sistemas compatibles con PC de IBM, los zócalos para agregar el coprocesador no eran tan comunes en los sistemas de gama baja.
También hay unidades de coprocesador FPU adicionales para unidades de microcontrolador (MCU/μC)/computadora de placa única (SBC), que sirven para proporcionar capacidad aritmética de punto flotante. Estas FPU complementarias son independientes del procesador del host, poseen sus propios requisitos de programación (operaciones, conjuntos de instrucciones, etc.) y, a menudo, se proporcionan con sus propios entornos de desarrollo integrado (IDE).
Contenido relacionado
Dispositivo semiconductor
Lenguaje de descripción del hardware
Edición no lineal