stringtranslate.com

Unidad de punto flotante

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

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 con números de punto flotante . [1] Las operaciones típicas son suma , resta , multiplicación , división y 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 baja, [2] [3] por lo que algunos sistemas prefieren calcular estas funciones en software.

En arquitecturas de computadoras de propósito general , una o más FPU pueden integrarse 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 punto flotante (aunque cada vez más las tienen como estándar).

Cuando una CPU está ejecutando un programa que requiere una operación de punto flotante, hay tres formas de llevarla a cabo:

Historia

En 1954, el IBM 704 tenía 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, el 7090 y el 7094.

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

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

Históricamente, algunos sistemas implementaban el punto flotante con un coprocesador en lugar de como 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 como norma, mientras que las primeras generaciones de GPU no las tenían). 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 punto flotante. La emulación se puede implementar en cualquiera de 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 está disponible la funcionalidad de números enteros, los métodos CORDIC se usan más comúnmente para la evaluación de funciones trascendentales . [ cita requerida ]

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

Las rutinas CORDIC se han implementado en coprocesadores Intel x87 ( 8087 , [7] [8] [9] [10] [11] 80287, [11] [12] 80387 [11] [12] ) hasta la serie de microprocesadores 80486 [7] , así como en los Motorola 68881 [7] [8] 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 suelen canalizarse . En arquitecturas superescalares anteriores sin ejecución general fuera de orden , las operaciones de punto flotante a veces se canalizaban por separado de las operaciones con números enteros.

La arquitectura modular de la microarquitectura Bulldozer utiliza una FPU especial denominada FlexFPU, que utiliza subprocesos múltiples simultáneos . Cada núcleo entero físico, dos por módulo, es de un solo subproceso, en contraste con el Hyperthreading de Intel , donde dos subprocesos simultáneos virtuales comparten los recursos de un solo núcleo físico. [13] [14]

Biblioteca de punto 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 la 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 hardware de punto flotante, la CPU lo emula utilizando una serie de operaciones aritméticas de punto fijo más simples que se ejecutan en la unidad lógica aritmética de números enteros .

El software que enumera las series de operaciones necesarias para emular operaciones de punto flotante a menudo está empaquetado 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 cálculos SIMD; un ejemplo de esto 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 nuevos.

FPU adicionales

Varios modelos del PDP-11 , como el PDP-11/45, [15] PDP-11/34a, [16] : 184–185  PDP-11/44, [16] : 195, 211  y el PDP-11/70 , [16] : 277, 286–287  admitían una unidad de punto flotante adicional para admitir instrucciones de punto flotante. El PDP-11/60, [16] : 261  MicroPDP-11/23 [17] y varios modelos VAX [18] [19] podían ejecutar instrucciones de punto flotante sin una FPU adicional (el MicroPDP-11/23 requería una opción de microcódigo adicional), [17] 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 que en las microcomputadoras compatibles con IBM PC la FPU estuviera completamente separada de la CPU y se vendiera normalmente como un complemento opcional. Solo se compraba si era necesario para acelerar o habilitar programas con uso intensivo de matemáticas.

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 8087 opcional. 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 el 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 a Cyrix y Weitek . Acorn Computers optó por el WE32206 para ofrecer precisión simple , doble y extendida [20] a su gama Archimedes impulsada por ARM , introduciendo una matriz de puertas para interconectar el procesador ARM2 con el WE32206 para soportar las instrucciones de punto flotante ARM adicionales. [21] Posteriormente, Acorn ofreció el coprocesador FPA10, desarrollado por ARM, para varias máquinas equipadas con el procesador ARM3. [22]

Los coprocesadores estaban disponibles para la familia Motorola 68000 , 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 las series 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 coprocesador FPU adicionales para unidades de microcontroladores (MCU/μC)/ computadoras de placa única (SBC), que sirven para proporcionar capacidad aritmética de punto flotante . Estas FPU adicionales son independientes del procesador anfitrión, poseen sus propios requisitos de programación ( operaciones , conjuntos de instrucciones , etc.) y a menudo se proporcionan con sus propios entornos de desarrollo integrados (IDE).

Véase también

Referencias

  1. ^ Anderson, Stanley F.; Earle, John G.; Goldschmidt, Robert Elliott; Powers, Don M. (enero de 1967). "El IBM System/360 Model 91: Unidad de ejecución de coma flotante". Revista IBM de investigación y desarrollo . 11 (1): 34–53. doi :10.1147/rd.111.0034. ISSN  0018-8646.
  2. ^ Dawson, Bruce (9 de octubre de 2014). "Intel subestima los límites de error en 1,3 trillones". randomascii.wordpress.com . Consultado el 16 de enero de 2020 .
  3. ^ "Mejoras en la documentación de FSIN en el "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32"". intel.com . 2014-10-09. Archivado desde el original el 2020-01-16 . Consultado el 2020-01-16 .
  4. ^ "Manual del PDP-6" (PDF) . www.bitsavers.org . Archivado (PDF) del original el 2022-10-09.
  5. ^ "Documentos GE-2xx". www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf, pág. IV-4.
  6. ^ "Familia Intel 80287". www.cpu-world.com . Consultado el 15 de enero de 2019 .
  7. ^ abc Muller, Jean-Michel (2006). Funciones elementales: algoritmos e implementación (2.ª ed.). Boston, Massachusetts: Birkhäuser . pág. 134. ISBN 978-0-8176-4372-0. LCCN  2005048094 . Consultado el 1 de diciembre de 2015 .
  8. ^ ab 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.
  9. ^ Palmer, John F.; Morse, Stephen Paul (1984). Manual básico de 8087 (1.ª ed.). John Wiley & Sons Australia, Limited . ISBN 0471875694. 9780471875697 . Consultado el 2 de enero de 2016 .
  10. ^ 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.
  11. ^ abc Jarvis, Pitts (1990-10-01). "Implementación de algoritmos CORDIC: una rutina compacta única para calcular funciones trascendentales". Dr. Dobb's Journal : 152–156 . Consultado el 2 de enero de 2016 .
  12. ^ ab Yuen, AK (1988). "Procesadores de punto flotante de Intel". Acta de la conferencia Electro/88 : 48/5/1–7.
  13. ^ "AMD Steamroller vs Bulldozer". WCCFtech . Archivado desde el original el 9 de mayo de 2015. Consultado el 14 de marzo de 2022 .
  14. ^ Halfacree, Gareth (28 de octubre de 2010). «AMD presenta Flex FP». bit-tech.net . Archivado desde el original el 22 de marzo de 2017 . Consultado el 29 de marzo de 2018 .{{cite web}}: CS1 maint: URL no apta ( enlace )
  15. ^ Manual del procesador PDP-11/45 (PDF) . Digital Equipment Corporation . 1973. Capítulo 7 "Procesador de punto flotante".
  16. ^ abcd Manual del procesador PDP-11 (PDF) . Digital Equipment Corporation . 1979.
  17. ^ ab Manual MICRO/PDP-11 (PDF) . Digital Equipment Corporation . 1983. pág. 33.
  18. ^ VAX – Manual de hardware Volumen I – 1986 (PDF) . Digital Equipment Corporation . 1985.
  19. ^ VAX – Manual de hardware Volumen II – 1986 (PDF) . Digital Equipment Corporation . 1986.
  20. ^ "Coprocesador Western Electric 32206". www.cpu-world.com . Consultado el 6 de noviembre de 2021 .
  21. ^ Fellows, Paul (marzo de 1990). "Programación del ARM: el coprocesador de punto flotante". A&B Computing . págs. 43–44.
  22. ^ "Acorn lanza un acelerador de coma flotante" (Nota de prensa). Acorn Computers Limited. 5 de julio de 1993. Consultado el 7 de abril de 2021 .

Lectura adicional