Articulo de referencia

Unidad de punto flotante

Colección de la familia de coprocesadores matemáticos x87 de Intel Una unidad de punto flotante ( FPU ), unidad de procesamiento numérico ( NPU ), [ 1 ] coloquialmente coprocesa...

Colección de la familia de coprocesadores matemáticos x87 de Intel

Una unidad de punto flotante ( FPU ), unidad de procesamiento numérico ( NPU ), [ 1 ] coloquialmente coprocesador matemático , es una parte de un sistema informático especialmente diseñada para realizar operaciones con números de punto flotante . [ 2 ] Las operaciones típicas son suma , resta , multiplicación , división y raíz cuadrada . Los diseños modernos generalmente incluyen una instrucción de multiplicación-suma fusionada , que se ha encontrado muy común en el código del mundo real. Algunas FPU también pueden realizar varias funciones trascendentales como cálculos exponenciales o trigonométricos , pero la precisión puede ser baja, [ 3 ] [ 4 ] por lo que algunos sistemas prefieren calcular estas funciones en software.

Las operaciones de punto flotante se gestionaban originalmente mediante software en los primeros ordenadores. Con el tiempo, los fabricantes comenzaron a ofrecer bibliotecas de punto flotante estandarizadas como parte de sus paquetes de software. Algunas máquinas, las dedicadas al procesamiento científico, incluían hardware especializado para realizar algunas de estas tareas con mucha mayor rapidez. La introducción del microcódigo en la década de 1960 permitió incluir estas instrucciones en la arquitectura del conjunto de instrucciones (ISA) del sistema. Normalmente, el microcódigo las decodificaba en una serie de instrucciones similares a las de las bibliotecas, pero en las máquinas con una unidad de punto flotante (FPU), se enrutaban a dicha unidad, que las ejecutaba mucho más rápido. Esto permitió que las instrucciones de punto flotante se volvieran universales, mientras que el hardware de punto flotante seguía siendo opcional; por ejemplo, en el PDP-11 se podía añadir la unidad de procesamiento de punto flotante en cualquier momento mediante tarjetas de expansión enchufables .

La introducción del microprocesador en la década de 1970 dio lugar a una evolución similar a la de los primeros mainframes y minicomputadoras . Los primeros sistemas de microcomputadoras realizaban operaciones de punto flotante mediante software, generalmente en una biblioteca específica del fabricante incluida en la ROM . Las FPU dedicadas de un solo chip comenzaron a aparecer a finales de la década, pero siguieron siendo poco comunes en los sistemas reales hasta mediados de la década de 1980, y su uso requería reescribir el software para llamarlas. A medida que se hicieron más comunes, las bibliotecas de software se modificaron para funcionar como el microcódigo de las máquinas anteriores, ejecutando las instrucciones en la CPU principal si era necesario, pero descargándolas a la FPU si estaba presente. A finales de la década de 1980, la fabricación de semiconductores había mejorado hasta el punto de que fue posible incluir una FPU con la CPU principal, lo que dio lugar a diseños como el i486 y el 68040 . Estos diseños se conocían como "FPU integradas" y, desde mediados de la década de 1990, las FPU se convirtieron en una característica estándar de la mayoría de los diseños de CPU, excepto aquellos diseñados como procesadores integrados de bajo costo .

En los diseños modernos, una sola CPU suele incluir varias unidades aritmético-lógicas (ALU) y varias unidades de punto flotante (FPU), que leen muchas instrucciones simultáneamente y las distribuyen a las distintas unidades para su ejecución en paralelo. Para la década del 2000, incluso los procesadores integrados generalmente incluían también una FPU.

Historia

En 1954, la IBM 704 incorporó la aritmética de punto flotante como característica estándar, una de sus principales mejoras con respecto a su predecesora, la IBM 701. Esta característica se mantuvo en sus sucesoras, la 709, la 7090 y la 7094.

En 1963, Digital anunció el PDP-6 , que tenía la coma flotante como característica estándar. [ 5 ]

En 1963, el GE-235 incorporó una "Unidad Aritmética Auxiliar" para cálculos de punto flotante y doble precisión. [ 6 ]

Históricamente, algunos sistemas implementaban la aritmética de punto flotante con un coprocesador en lugar de una unidad integrada (aunque ahora, además de la CPU, por ejemplo, las GPU —que son coprocesadores y no siempre están integradas en la CPU— suelen tener unidades de punto flotante, mientras que las primeras generaciones de GPU no las tenían). Esto podía ser un único circuito integrado , una placa de circuito completa o un gabinete. Cuando no se dispone de hardware para el cálculo de punto flotante, estos cálculos se realizan por software, lo que requiere más tiempo de procesador, pero evita el coste del hardware adicional. Para una arquitectura de computadora particular, las instrucciones de la unidad de punto flotante pueden emularse mediante una biblioteca de funciones de software; esto puede permitir que el mismo código objeto se ejecute en sistemas con o sin hardware de punto flotante. La emulación puede implementarse en varios niveles: en la CPU como microcódigo , como una función del sistema operativo o en código de espacio de usuario . Cuando solo se dispone de funcionalidad de enteros, los métodos CORDIC son los más utilizados para la evaluación de funciones trascendentales .  

En la mayoría de las arquitecturas informáticas modernas, existe una separación entre las operaciones de punto flotante y las operaciones con números enteros . Esta separación varía significativamente según la arquitectura; algunas cuentan con registros de punto flotante dedicados, mientras que otras, como Intel x86 , llegan incluso a utilizar esquemas de reloj independientes . [ 7 ]

Las rutinas CORDIC se han implementado en coprocesadores Intel x87 ( 8087 , [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] 80287, [ 12 ] [ 13 ] 80387 [ 12 ] [ 13 ] ) hasta la serie de microprocesadores 80486 [ 8 ] , así como en los Motorola 68881 [ 8 ] [ 9 ] y 68882 para algunos tipos de instrucciones de punto flotante, principalmente como una forma de reducir el número de compuertas (y la complejidad) del subsistema FPU.

Las operaciones de punto flotante a menudo se ejecutan en paralelo . En arquitecturas superescalares anteriores, sin ejecución fuera de orden general , las operaciones de punto flotante a veces se ejecutaban en paralelo por separado de las operaciones con números enteros.

La arquitectura modular de la microarquitectura Bulldozer utiliza una FPU especial llamada FlexFPU, que emplea multihilo simultáneo . Cada núcleo físico de enteros, dos por módulo, es de un solo hilo, a diferencia de Hyperthreading de Intel , donde dos hilos virtuales simultáneos comparten los recursos de un único núcleo físico. [ 14 ] [ 15 ]

Biblioteca de punto flotante

Algunos sistemas de punto flotante solo admiten las operaciones más simples: suma, resta y multiplicación. Pero incluso los sistemas de punto flotante más complejos tienen un número finito de operaciones que pueden admitir ; por ejemplo, ninguna unidad de punto flotante admite directamente aritmética de precisión arbitraria . 

Cuando una CPU ejecuta 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 hardware de punto flotante, la CPU lo emula mediante 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 de operaciones necesarias para emular operaciones de punto flotante suele estar incluido en una biblioteca de punto flotante .

Unidades de punto flotante integradas

En algunos casos, las unidades de punto flotante (FPU) pueden estar especializadas y divididas entre operaciones de punto flotante más sencillas (principalmente suma y multiplicación) y operaciones más complejas, como la división. En ocasiones, solo las operaciones sencillas se implementan en hardware o microcódigo , mientras que las más complejas se implementan en software.

En algunas arquitecturas actuales, la funcionalidad de la FPU se combina con unidades SIMD para realizar cálculos SIMD; un ejemplo de ello es la ampliación 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 recientes.

Unidades de punto flotante adicionales

Varios modelos del PDP-11 , como el PDP-11/45, [ 16 ] PDP-11/34a, [ 17 ] : 184–185 PDP-11/44, [ 17 ] : 195, 211 y PDP-11/70, [ 17 ] : 277, 286–287 admitían una unidad de punto flotante adicional para admitir instrucciones de punto flotante. El PDP-11/60, [ 17 ] : 261 MicroPDP-11/23 [ 18 ] y varios modelos VAX [ 19 ] [ 20 ] podían ejecutar instrucciones de punto flotante sin una FPU adicional (el MicroPDP-11/23 requería una opción de microcódigo adicional), [ 18 ] y ofrecían aceleradores adicionales para acelerar aún más la ejecución de esas instrucciones.

En la década de 1980, era común en los microordenadores compatibles con IBM PC que la FPU estuviera completamente separada de la CPU y, por lo general, se vendía como un complemento opcional. Solo se compraba si era necesario para acelerar o habilitar programas con gran cantidad de cálculos matemáticos.

El IBM PC, XT y la mayoría de los compatibles basados ​​en el 8088 o 8086 tenían un zócalo para el coprocesador opcional 8087. Los sistemas basados ​​en AT y 80286 generalmente tenían zócalos para el 80287 , y las máquinas basadas en 80386/80386SX , para el 80387 y 80387SX respectivamente, aunque los primeros tenían zócalos para el 80287, ya que el 80387 aún no existía. Otras compañías fabricaron coprocesadores para la serie Intel x86. Estas incluían Cyrix y Weitek . Acorn Computers optó por el WE32206 para ofrecer precisión simple , doble y extendida [ 21 ] a su gama Archimedes con tecnología ARM , introduciendo una matriz de puertas para conectar el procesador ARM2 con el WE32206 para admitir las instrucciones de punto flotante ARM adicionales. [ 22 ] Posteriormente, Acorn ofreció el coprocesador FPA10, desarrollado por ARM, para varias máquinas equipadas con el procesador ARM3. [ 23 ] 

Los coprocesadores estaban disponibles para la familia Motorola 68000 , concretamente para los modelos 68881 y 68882. Eran comunes en las estaciones de trabajo basadas en Motorola 68020/68030 , como la serie Sun-3 . También se añadían habitualmente a los modelos de gama alta de Apple Macintosh y Commodore Amiga , pero, a diferencia de los sistemas compatibles con IBM PC, los zócalos para añadir el coprocesador no eran tan comunes en los sistemas de gama baja.

También existen unidades de coprocesamiento FPU adicionales para microcontroladores (MCU/μC) y computadoras de placa única (SBC), que proporcionan capacidad de aritmética de punto flotante . Estas FPU adicionales son independientes del procesador principal, tienen sus propios requisitos de programación ( operaciones , conjuntos de instrucciones , etc.) y suelen incluir sus propios entornos de desarrollo integrados (IDE).

Véase también

Referencias

  1. "Unidad de procesamiento numérico Intel 80287XL" . computinghistory.org.uk . Consultado el 2 de noviembre de 2024 .
  2. Anderson, Stanley F.; Earle, John G.; Goldschmidt, Robert Elliott; Powers, Don M. (enero de 1967). "El IBM System/360 Modelo 91: Unidad de ejecución de punto flotante". IBM Journal of Research and Development . 11 (1): 34– 53. doi : 10.1147/rd.111.0034 . ISSN 0018-8646 . 
  3. Dawson, Bruce (09/10/2014). "Intel subestima los límites de error en 1,3 quintillones" . randomascii.wordpress.com . Consultado el 16/01/2020 .
  4. "Mejoras en la documentación de FSIN en el "Manual del desarrollador de software para arquitecturas Intel® 64 e IA-32"" . intel.com . 09-10-2014. Archivado del original el 16-01-2020 . Consultado el 16-01-2020 .
  5. "Manual PDP-6" (PDF) . www.bitsavers.org . Archivado (PDF) del original el 9 de octubre de 2022.
  6. "Documentos GE-2xx" . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf , pág. IV-4.
  7. "Familia Intel 80287" . www.cpu-world.com . Consultado el 15 de enero de 2019 .
  8. 1 2 3 Muller, Jean-Michel (2006). Funciones elementales: algoritmos e implementación (2.ª ed.). Boston, Massachusetts: Birkhäuser . pág. 134. ISBN   978-0-8176-4372-0LCCN 2005048094. Consultado el 1 de diciembre de 2015 . 
  9. 1 2 Nave, Rafi (marzo de 1983). "Implementación de funciones trascendentales en un procesador numérico". Microprocesamiento y microprogramación . 11 ( 3–4 ): 221–225 . doi : 10.1016/0165-6074(83)90151-5 .
  10. Palmer, John F.; Morse, Stephen Paul (1984). The 8087 Primer (1.ª ed.). John Wiley & Sons Australia, Limited . ISBN  0471875694. 9780471875697 . Consultado el 2 de enero de 2016 .
  11. Glass, L. Brent (enero de 1990). "Coprocesadores matemáticos: una mirada a lo que hacen y cómo lo hacen". Byte . 15 (1): 337– 348. ISSN 0360-5280 . 
  12. 1 2 3 Jarvis, Pitts (1990-10-01). "Implementación de algoritmos CORDIC: una única rutina compacta para el cálculo de funciones trascendentales" . Dr. Dobb's Journal : 152–156 . Recuperado el 2016-01-02 .
  13. 1 2 Yuen, AK (1988). "Procesadores de punto flotante de Intel". Electro/88 Conference Record : 48/5/1–7.
  14. "AMD Steamroller vs Bulldozer" . WCCFtech . Archivado del original el 9 de mayo de 2015. Consultado el 14 de marzo de 2022 .
  15. Halfacree, Gareth (28 de octubre de 2010). "AMD presenta Flex FP" . bit-tech.net . Archivado del original el 22 de marzo de 2017. Recuperado el 29 de marzo de 2018 .
  16. Manual del procesador PDP-11/45 (PDF) . Digital Equipment Corporation . 1973. Capítulo 7 "Procesador de punto flotante" . Consultado el 30 de octubre de 2025 .
  17. 1 2 3 4 Manual del procesador PDP-11 (PDF) . Digital Equipment Corporation . 1979. Consultado el 30 de octubre de 2025 .
  18. 1 2 Manual MICRO/PDP-11 (PDF) . Digital Equipment Corporation . 1983. pág. 33. 
  19. VAX – Manual de hardware Volumen I – 1986 (PDF) . Digital Equipment Corporation . 1985.
  20. VAX – Manual de hardware Volumen II – 1986 (PDF) . Digital Equipment Corporation . 1986.
  21. "Coprocesador Western Electric 32206" . www.cpu-world.com . Consultado el 6 de noviembre de 2021 .
  22. Fellows, Paul (marzo de 1990). "Programación del ARM: el coprocesador de punto flotante". A&B Computing . págs. 43–44 . 
  23. "Acorn lanza acelerador de punto flotante" (Comunicado de prensa). Acorn Computers Limited. 5 de julio de 1993. Consultado el 7 de abril de 2021 .

Lecturas adicionales

  • Filiatreault, Raymond (2003). "SIMPLEMENTE FPU" .