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ñado 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 . 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.
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:
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. [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 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 regla, 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 . [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 los conteos 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. [14] [15]
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 ningún 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 .
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.
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 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 [21] 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. [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 , 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).
{{cite web}}
: CS1 maint: URL no apta ( enlace )