Un coprocesador matemático es un coprocesador para ampliar el conjunto de instrucciones del procesador central y dotarlo de la funcionalidad de un módulo de operación de punto flotante , para procesadores que no tienen un módulo integrado.
Unidad de punto flotante (o punto flotante ; unidad de punto flotante en inglés (FPU) - parte del procesador para realizar una amplia gama de operaciones matemáticas en números reales .
Los procesadores de " números enteros " simples para trabajar con números reales y operaciones matemáticas requieren procedimientos de soporte apropiados y tiempo para ejecutarlos. El módulo de operaciones de punto flotante admite trabajar con ellos a nivel de primitivas: cargar, descargar un número real (hacia / desde registros especializados ) o una operación matemática en ellos se realiza mediante un comando, debido a esto, una aceleración significativa de tales operaciones se consigue.
x87 es un conjunto de instrucciones especial para trabajar con cálculos matemáticos, que es un subconjunto de la arquitectura del procesador x86 . Recibió este nombre porque los chips de coprocesadores matemáticos individuales originales tenían nombres que terminaban en 87 . Al igual que otras extensiones del conjunto de instrucciones básicas del procesador, estas instrucciones no son estrictamente necesarias para construir un programa que funcione, pero cuando se implementan en hardware, permiten que las tareas matemáticas comunes se realicen mucho más rápido. Por ejemplo, el conjunto de instrucciones x87 contiene instrucciones para calcular valores de seno o coseno .
Para los procesadores de la familia x86 8086/8088 a 386 , la unidad de punto flotante se separó en un chip separado llamado coprocesador matemático . Para instalar un coprocesador en la placa de la computadora, se proporcionó un conector separado.
El coprocesador no es un procesador completo, ya que no puede realizar muchas de las operaciones necesarias para ello (por ejemplo, no puede trabajar con un programa y calcular direcciones de memoria), siendo solo un apéndice del procesador central.
Uno de los esquemas de interacción entre el procesador central y el coprocesador, utilizado, en particular, en los coprocesadores x86, se implementa de la siguiente manera:
Comenzando con el procesador Intel486DX , la unidad de coma flotante se integró en la CPU y se denominó FPU. En la línea Intel486SX , el módulo FPU estaba deshabilitado (al principio, los procesadores con una FPU defectuosa caían en esta línea). Para los procesadores Intel486SX , también se lanzó un "coprocesador" Intel487SX , pero en realidad era un procesador Intel486DX , y cuando se instaló, el procesador Intel486SX estaba deshabilitado .
A pesar de la integración, la FPU en los procesadores i486 es un coprocesador sin cambios hecho en el mismo chip, además, el circuito de la FPU i486 es completamente idéntico al coprocesador 387DX de la generación anterior hasta la frecuencia del reloj (la mitad de la frecuencia del procesador central). La verdadera integración de la FPU con la CPU solo comenzó con los procesadores Pentium MMX.
Los coprocesadores para la plataforma x86, fabricados por Weitek , fueron ampliamente utilizados en el período correspondiente : lanzaron 1167, 2167 en forma de chipset y chips 3167, 4167, para procesadores 8086 , 80286 , 80386 , 80486 , respectivamente. En comparación con los coprocesadores de Intel, proporcionaron un rendimiento 2 o 3 veces mayor, pero tenían una interfaz de software incompatible implementada a través de la tecnología de mapeo de memoria. Todo se reducía al hecho de que el procesador principal tenía que escribir información en ciertas áreas de la memoria controladas por el coprocesador Weitek (no había RAM propia allí). La dirección específica donde se realizó la grabación se interpretó como un comando particular. A pesar de la incompatibilidad, los coprocesadores Weitek fueron ampliamente respaldados tanto por los desarrolladores de software como por los fabricantes de placas base, que proporcionaron sockets para instalar dicho chip en ellos.
Varias otras empresas también produjeron varios coprocesadores matemáticos incompatibles, interconectados con ellos a través de puertos de E/S o interrupciones del BIOS , pero no fueron tan utilizados.
Las empresas de clones produjeron coprocesadores compatibles con el 80287 80387 , que funcionaban más rápido que los Intel similares. Cyrix , AMD , Chips & Technologies (C&T) pueden mencionarse entre estas empresas . A veces, el conjunto de instrucciones de estos coprocesadores se ampliaba con varios incompatibles, por ejemplo, el analógico 80287 de C&T contenía instrucciones para trabajar con un vector de cuatro valores de coma flotante. Estos comandos extendidos no han recibido un apoyo serio por parte de los fabricantes de software.
Los procesadores EMC87 de Cyrix podrían funcionar tanto en el modo de compatibilidad de software Intel 80387 como en su propio modo de programación incompatible. Para ellos, se proporcionó compatibilidad de hardware con el zócalo del coprocesador 80387 .
En la URSS, se produjo un microcircuito (KM) 1810VM87 , que era un análogo de 8087 .
De manera similar, las placas base de PC basadas en procesadores Motorola , antes del desarrollo del procesador MC68040 (en el que se incorporó el coprocesador) por parte de esta empresa, contenían un coprocesador matemático. Como regla general, se utilizó un coprocesador 68881 de 16 MHz o 68882 de 25 MHz como FPU. Casi todos los procesadores modernos tienen un coprocesador incorporado.
Weitek también produjo coprocesadores matemáticos para las plataformas 68000 y MIPS .
Los registros de la FPU no están organizados como una matriz como en otras arquitecturas, sino como una pila de registros . Por lo tanto, la FPU es una calculadora de pila que funciona según el principio de la notación polaca inversa [2] [3] . Esto significa que las instrucciones siempre usan el valor superior de la pila para realizar operaciones, y el acceso a otros valores almacenados generalmente se proporciona como resultado de manipulaciones en la pila. Sin embargo, cuando se trabaja con la parte superior de la pila, se pueden usar otros elementos de la pila al mismo tiempo, para cuyo acceso se usa el direccionamiento directo en relación con la parte superior de la pila. Las operaciones también pueden usar valores almacenados en la RAM. La secuencia habitual de acciones es la siguiente. Antes de la operación, los argumentos se colocan en la pila LIFO ; cuando se realiza la operación, el número requerido de argumentos se elimina de la pila. El resultado de la operación se coloca en la pila, donde puede usarse en cálculos posteriores o eliminarse de la pila para escribirse en la memoria. Si bien el apilamiento de registros de la FPU es conveniente para los programadores, dificulta que los compiladores creen código eficiente.
Todos los procesadores Intel y AMD , comenzando con 486DX , tienen un coprocesador matemático integrado y no necesitan un coprocesador separado (excepto Intel486SX ). Sin embargo, el término x87 todavía se usa para resaltar la parte de las instrucciones del procesador que se usa para trabajar con números reales en la pila de FPU. Un rasgo distintivo de estas instrucciones: sus mnemónicos comienzan con la letra f (del inglés float ). Los compiladores pueden usar estas instrucciones para producir código que, en algunos casos, es más rápido que el código que usa llamadas de biblioteca para realizar operaciones de punto flotante.
Las instrucciones x87 son compatibles con IEEE-754 , es decir, proporcionar la capacidad de realizar cálculos de acuerdo con esta norma. Sin embargo, normalmente la secuencia de instrucciones x87 no funciona estrictamente de acuerdo con los formatos IEEE-754 debido al uso de registros más amplios que los formatos numéricos de precisión simple y doble . Por lo tanto, la secuencia de operaciones aritméticas en un conjunto x87 puede dar un resultado ligeramente diferente que en un procesador que siga estrictamente el estándar IEEE-754 .
Después del advenimiento de 3DNow! de AMD y luego SSE , comenzando con los procesadores Pentium III de Intel , los cálculos de precisión simple se hicieron posibles sin la ayuda de instrucciones FPU y con un mayor rendimiento. La extensión SSE2 y las extensiones posteriores del conjunto de instrucciones también proporcionaron cálculos rápidos de doble precisión (consulte el estándar IEEE-754 ). En este sentido, en las computadoras modernas, la necesidad de instrucciones de coprocesador matemático clásico ha disminuido significativamente. Sin embargo, todavía son compatibles con todos los procesadores x86 lanzados para compatibilidad con aplicaciones más antiguas y para las necesidades de aquellas aplicaciones que requieren conversiones de binario a decimal o cálculos de precisión extendida (cuando la doble precisión no es suficiente). Actualmente, el uso de comandos x87 sigue siendo la forma más eficiente de realizar tales cálculos.
Dentro de la FPU, los números se almacenan en formato de punto flotante de 80 bits (precisión extendida), mientras que se puede usar la escritura o la lectura desde la memoria:
La FPU también admite valores numéricos especiales:
Hay tres grupos de registros en la FPU:
El sistema incluye alrededor de 80 comandos. Su clasificación:
Tecnologías de procesadores digitales | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arquitectura | |||||||||
Set de instrucciones arquitectura | |||||||||
palabra maquina | |||||||||
Paralelismo |
| ||||||||
Implementaciones | |||||||||
Componentes | |||||||||
Administración de energía |