stringtranslate.com

x87

x87 es un subconjunto relacionado con el punto flotante del conjunto de instrucciones de la arquitectura x86 . Se originó como una extensión del conjunto de instrucciones 8086 en forma de coprocesadores de punto flotante opcionales que funcionan en tándem con las CPU x86 correspondientes. Estos microchips tienen nombres que terminan en "87". Esto también se conoce como NPX (extensión de procesador numérico). Al igual que otras extensiones del conjunto de instrucciones básicas, las instrucciones x87 no son estrictamente necesarias para construir programas funcionales, sino que proporcionan implementaciones de hardware y microcódigo de tareas numéricas comunes, lo que permite que estas tareas se realicen mucho más rápido que las rutinas de código de máquina correspondientes . El conjunto de instrucciones x87 incluye instrucciones para operaciones básicas de punto flotante como suma, resta y comparación, pero también para operaciones numéricas más complejas, como el cálculo de la función tangente y su inversa, por ejemplo.

La mayoría de los procesadores x86 desde el Intel 80486 han tenido estas instrucciones x87 implementadas en la CPU principal, pero el término a veces todavía se usa para referirse a esa parte del conjunto de instrucciones. Antes de que las instrucciones x87 fueran estándar en las PC, los compiladores o programadores tenían que usar llamadas a bibliotecas bastante lentas para realizar operaciones de punto flotante, un método que todavía es común en los sistemas integrados (de bajo costo) .

Descripción

Los registros x87 forman una estructura de pila no estricta de ocho niveles que va desde ST(0) a ST(7) con registros a los que se puede acceder directamente mediante cualquiera de los operandos, utilizando un desplazamiento relativo a la parte superior, así como también se pueden insertar y extraer. (Este esquema se puede comparar con la forma en que se puede insertar y extraer un marco de pila e indexarlo).

Existen instrucciones para insertar, calcular y extraer valores de la parte superior de esta pila; las operaciones unarias (FSQRT, FPTAN, etc.) se dirigen implícitamente al ST(0) superior, mientras que las operaciones binarias (FADD, FMUL, FCOM, etc.) se dirigen implícitamente a ST(0) y ST(1). El modelo de pila no estricto también permite que las operaciones binarias utilicen ST(0) junto con un operando de memoria directa o con un registro de pila especificado explícitamente , ST( x ), en un papel similar al de un acumulador tradicional (un destino combinado y un operando izquierdo). Esto también se puede revertir instrucción por instrucción con ST(0) como el operando sin modificar y ST( x ) como el destino . Además, el contenido de ST(0) se puede intercambiar con otro registro de pila utilizando una instrucción llamada FXCH ST( x ).

Estas propiedades hacen que la pila x87 se pueda utilizar como siete registros de libre acceso más un acumulador dedicado (o como siete acumuladores independientes). Esto es especialmente aplicable en procesadores x86 superescalares (como el Pentium de 1993 y posteriores), donde estas instrucciones de intercambio (códigos D9C8..D9CF h ) se optimizan hasta una penalización de reloj cero mediante el uso de una de las rutas de números enteros para FXCH ST( x ) en paralelo con la instrucción FPU. A pesar de ser natural y conveniente para los programadores humanos de lenguaje ensamblador , algunos escritores de compiladores han encontrado complicado construir generadores de código automáticos que programen código x87 de manera efectiva. Una interfaz basada en pila de este tipo puede potencialmente minimizar la necesidad de guardar variables de borrador en llamadas de función en comparación con una interfaz basada en registros [1] (aunque, históricamente, los problemas de diseño en la implementación del 8087 limitaron ese potencial. [2] [3] )

El x87 proporciona aritmética binaria de punto flotante de precisión simple, doble precisión y precisión doble extendida de 80 bits según el estándar IEEE 754-1985 . De forma predeterminada, todos los procesadores x87 utilizan internamente precisión doble extendida de 80 bits (para permitir una precisión sostenida en muchos cálculos, consulte la justificación del diseño IEEE 754 ). Por lo tanto, una secuencia dada de operaciones aritméticas puede comportarse de manera ligeramente diferente en comparación con una FPU IEEE 754 de precisión simple o doble estricta. [4] Como esto a veces puede ser problemático para algunos cálculos seminuméricos escritos para asumir precisión doble para un funcionamiento correcto, para evitar tales problemas, el x87 se puede configurar utilizando un registro de estado/configuración especial para redondear automáticamente a precisión simple o doble después de cada operación. Desde la introducción de SSE2 , las instrucciones x87 no son tan esenciales como antes, pero siguen siendo importantes como unidad escalar de alta precisión para cálculos numéricos sensibles al error de redondeo y que requieren la precisión de mantisa de 64 bits y el rango extendido disponibles en el formato de 80 bits.

Actuación

Recuentos de ciclos de reloj para ejemplos de instrucciones FPU x87 típicas (aquí solo se muestran versiones registro-registro). [5]

La notación A ... B (de mínimo a máximo) cubre las variaciones de tiempo que dependen del estado transitorio de la tubería y de la precisión aritmética elegida (32, 64 u 80 bits); también incluye variaciones debidas a casos numéricos (como la cantidad de bits establecidos, cero, etc.). La notación L → H representa los valores correspondientes a las frecuencias de reloj máximas más bajas (L) y más altas (H) que estaban disponibles.

* A menudo es posible lograr un retardo de reloj cero efectivo mediante una ejecución superescalar.
§ El 8087 de 5 MHz fue el procesador x87 original. En comparación con las rutinas de punto flotante implementadas por software típicas en un 8086 (sin un 8087), los factores serían incluso mayores, quizás por otro factor de 10 (es decir, una suma de punto flotante correcta en lenguaje ensamblador puede consumir más de 1000 ciclos).

Fabricantes

Las empresas que han diseñado o fabricado [a] unidades de punto flotante compatibles con el Intel 8087 o modelos posteriores incluyen AMD ( 287 , 387 , 486DX , 5x86 , K5 , K6 , K7 , K8 ), Chips and Technologies (los coprocesadores Super MATH ), Cyrix ( FasMath , Cx87SLC , Cx87DLC , etc., 6x86 , Cyrix MII ), Fujitsu (los primeros Pentium Mobile , etc.), Harris Semiconductor (fabricaron los procesadores 80387 y 486DX ), IBM (varios diseños 387 y 486 ), IDT ( WinChip , C3 , C7 , Nano , etc.), IIT ( 2C87 , 3C87 , etc.), LC Technology (los coprocesadores Green MATH ), National Semiconductor (los Geode GX1 , Geode GXm , etc.), NexGen (el Nx587 ), Rise Technology (el mP6 ), ST Microelectronics (fabricado el 486DX , 5x86 , etc.), Texas Instruments (fabricado los procesadores 486DX , etc.), Transmeta (el TM5600 y el TM5800 ), ULSI (los coprocesadores Math·Co ), VIA (el C3 , el C7 y el Nano , etc.), Weitek (el 1067 , el 1167 , el 3167 y el 4167 ) y Xtend (el 83S87SX-25 y otros coprocesadores).

Generaciones arquitectónicas

8087

El 8087 fue el primer coprocesador matemático para procesadores de 16 bits diseñado por Intel . Fue diseñado para funcionar junto con los microprocesadores Intel 8088 o 8086. (Los procesadores de punto flotante 8231 y 8232 de Intel , comercializados para su uso con la CPU i8080, eran en realidad versiones con licencia de las FPU Am9511 y Am9512 de AMD de 1977 y 1979. [6] )

80C187

Versión de 16 MHz del Intel 80C187

Aunque las hojas de datos originales de 1982 para los chips 80188 y 80186 ( basados ​​en NMOS ) parecen mencionar coprocesadores matemáticos específicos, [7] ambos chips en realidad estaban emparejados con un 8087.

Sin embargo, en 1987, para trabajar con la CPU Intel 80C186 basada en CMOS renovada , Intel introdujo el coprocesador matemático 80C187 [8] . La interfaz del 80C187 con el procesador principal es la misma que la del 8087, pero su núcleo es esencialmente el de un 80387SX y, por lo tanto, es totalmente compatible con IEEE 754 y capaz de ejecutar todas las instrucciones adicionales del 80387. [9]

80287

El 80287 ( i287 ) es el coprocesador matemático para la serie de microprocesadores Intel 80286. Los modelos de Intel incluían variantes con límites de frecuencia superiores específicos que iban desde 6 hasta 12 MHz. La versión NMOS estaba disponible a 6, 8 y 10 MHz. [10] La versión de 10 MHz del coprocesador numérico Intel 80287-10 disponible costaba 250  USD en cantidades de 100. [11] Estas versiones en caja de 80287, 80287-8 y 80287-10 estaban disponibles por 212 USD, 326 USD y 374 USD respectivamente. Había una versión en caja de 80C287A disponible por 457 USD. [12] Otros modelos 287 con un rendimiento similar al 387 son el Intel 80C287, construido utilizando CHMOS III, y el AMD 80EC287 fabricado en el proceso CMOS de AMD , utilizando solo puertas completamente estáticas.

Más tarde le siguió el i80287XL con microarquitectura 387SX con un pinout de 287, [13] el i80287XLT, una versión especial pensada para portátiles, así como otras variantes. Contiene un multiplicador interno 3/2, de modo que las placas base que ejecutaban el coprocesador a 2/3 de la velocidad de la CPU podían en cambio ejecutar la FPU a la misma velocidad de la CPU. Tanto el 80287XL como el 80287XLT ofrecían un rendimiento un 50% mejor, un consumo de energía un 83% menor e instrucciones adicionales. [14]

El 80287 funciona con el microprocesador 80386 y fue inicialmente el único coprocesador disponible para el 80386 hasta la introducción del 80387 en 1987. Sin embargo, el 80387 es fuertemente preferido por su mayor rendimiento y la mayor capacidad de su conjunto de instrucciones.

80387

Imagen de la matriz de la CPU Intel 80387

El 80387 ( 387 o i387 ) es el primer coprocesador de Intel totalmente compatible con el estándar IEEE 754-1985 . Lanzado en 1987, [15] dos años después del chip 386, el i387 incluye una velocidad muy mejorada con respecto a los coprocesadores 8087/80287 anteriores de Intel y características mejoradas de sus funciones trigonométricas. Se puso a disposición por USD $500 en cantidades de 100. [16] Poco después, se puso a disposición a través de la Operación de Mejora de Computadoras Personales de Intel por un precio de mercado minorista de USD $795. [17] La ​​versión de 25 MHz estaba disponible en el canal minorista por USD $1395. [18] El coprocesador matemático Intel M387 cumplió con el estándar MIL-STD-883 Rev. C. Este dispositivo fue probado, lo que incluye ciclos de temperatura entre -55 y 125 °C, sellado hermético y quemado prolongado. Esta versión militar opera a 16 MHz. Esta versión militar estaba disponible en PGA de 68 derivaciones y en paquete plano cuádruple. Esta versión militar estaba disponible por USD $1155 en cantidades de 100 unidades para la versión PGA. [19] La versión de 33 MHz de 387DX estaba disponible y tiene el rendimiento de 3,4 megaafiladores por segundo . [20] La siguiente versión en caja del coprocesador matemático 387DX de 16, 20, 25 y 33 MHz estaba disponible por USD $570, $647, $814 y $994 respectivamente. [21] Las instrucciones FPTAN y FPATAN del 8087 y 80287 están limitadas a un argumento en el rango ±π/4 (±45°), y el 8087 y el 80287 no tienen instrucciones directas para las funciones SIN y COS. [22] [ cita completa necesaria ]

Sin un coprocesador, el 386 normalmente realiza operaciones aritméticas de punto flotante mediante rutinas de software (relativamente lentas), implementadas en tiempo de ejecución mediante un controlador de excepciones de software . Cuando se empareja un coprocesador matemático con el 386, el coprocesador realiza las operaciones aritméticas de punto flotante en hardware y devuelve resultados mucho más rápido que una llamada a una biblioteca de software (emuladora).

El i387 es compatible únicamente con el chip estándar i386, que tiene un bus de procesador de 32 bits. El posterior i386SX, de menor costo y con un bus de datos más estrecho de 16 bits , no puede interactuar con el bus de 32 bits del i387. El i386SX requiere su propio coprocesador, el 80387SX , que es compatible con el bus de datos más estrecho de 16 bits del SX. Intel lanzó la versión de bajo consumo del coprocesador 387SX. [23]

80487

i487SX

El i487SX (P23N) se comercializó como un coprocesador de unidad de punto flotante para máquinas Intel i486SX . En realidad, contenía una implementación completa del i486DX . Cuando se instalaba en un sistema i486SX, el i487 desactivaba la CPU principal y se hacía cargo de todas las operaciones de la CPU. El i487 tomaba medidas para detectar la presencia de un i486SX y no funcionaba sin la CPU original en su lugar. [24] [25] [ verificación fallida ]

80587

El Nx587 fue la última FPU para x86 que se fabricó por separado de la CPU, en este caso el Nx586 de NexGen .

Véase también

Notas

  1. ^ Las empresas sin fábrica diseñan un chip y confían en una empresa fabbricada para fabricarlo, mientras que las empresas fabbricadas pueden realizar tanto el diseño como la fabricación por sí mismas.

Referencias

  1. ^ William Kahan (2 de noviembre de 1990). "Sobre las ventajas de la pila del 8087" (PDF) . Apuntes de curso inéditos, División de Ciencias de la Computación, Universidad de California en Berkeley . Archivado desde el original (PDF) el 18 de enero de 2017.
  2. ^ William Kahan (8 de julio de 1989). "Cómo se debería haber manejado el desbordamiento o subdesbordamiento de pila del Intel 8087" (PDF) . Archivado desde el original (PDF) el 12 de junio de 2013.
  3. ^ Jack Woehr (1 de noviembre de 1997). "Una conversación con William Kahan".
  4. ^ David Monniaux (mayo de 2008). "Los escollos de verificar cálculos de punto flotante". ACM Transactions on Programming Languages ​​and Systems . 30 (3): 1–41. arXiv : cs/0701192 . doi :10.1145/1353445.1353446. S2CID  218578808.
  5. ^ Los números se toman de las hojas de datos de los respectivos procesadores, de los manuales de programación y de los manuales de optimización.
  6. ^ "Procesadores aritméticos: entonces y ahora". www.cpushack.com . 23 de septiembre de 2010 . Consultado el 3 de mayo de 2023 .
  7. ^ Intel (1983). Manual de microprocesadores y periféricos Intel. págs. 3-25 (iAPX 186/20) y 3-106 (iAPX 188/20).
  8. ^ "Colección de CPU: modelo 80187". cpu-info.com . Archivado desde el original el 23 de julio de 2011. Consultado el 14 de abril de 2018 .
  9. ^ "80C187 COPROCESADOR MATEMÁTICO DE 80 BITS" (PDF) . Noviembre de 1992. Consultado el 3 de mayo de 2023 .
  10. ^ Yoshida, Stacy, "Coprocesadores matemáticos: cómo mantener su computadora en óptimas condiciones", Intel Corporation, Microcomputer Solutions, septiembre/octubre de 1990, página 16
  11. ^ Intel Corporation, "Nuevo componente de enfoque de producto: un microprocesador de 32 bits con un poco de ayuda de algunos amigos", Special 32-Bit Issue Solutions, noviembre/diciembre de 1985, página 13.
  12. ^ Intel Corporation, "Mejora de la informática personal", Personal Computer Enhancement Operation, orden n.º 245.2, 10-89/75K/AL/GO, octubre de 1989, página 4
  13. ^ Intel Corporation, "Nuevo enfoque en productos: sistemas: el módulo SnapIn 386 actualiza las PC con sistema PS/2", Microcomputer Solutions, septiembre/octubre de 1991, página 12
  14. ^ Yoshida, Stacy, "Coprocesadores matemáticos: cómo mantener su computadora en óptimas condiciones", Intel Corporation, Microcomputer Solutions, septiembre/octubre de 1990, página 16
  15. ^ Moran, Tom (16 de febrero de 1987). "Los chips mejorarán el rendimiento de las máquinas 386, dice Intel". InfoWorld . Vol. 9, núm. 7. pág. 5. ISSN  0199-6649.
  16. ^ "Nuevos componentes de enfoque de producto: el motor de computación de 32 bits avanza a toda velocidad". Soluciones . Intel Corporation: 10. Mayo-junio de 1987.
  17. ^ "NewsBit: Intel 80387 disponible en los canales minoristas". Soluciones . Intel Corporation: 1. Julio-agosto de 1987.
  18. ^ Intel Corporation, "NewsBits: 25 MHZ 80387 disponible a través de canales minoristas", Microcomputer Solutions, septiembre/octubre de 1988, página 1
  19. ^ Intel Corporation, "Enfoque: Componentes: Los periféricos militarizados soportan el microprocesador M386", Microcomputer Solutions, marzo/abril de 1989, página 12
  20. ^ Lewnes, Ann, "La arquitectura Intel386 llegó para quedarse", Intel Corporation, Microcomputer Solutions, julio/agosto de 1989, página 2
  21. ^ Intel Corporation, "Mejora de las computadoras personales", Operación de mejora de las computadoras personales, orden n.º 245.2, 10-89/75K/AL/GO, octubre de 1989
  22. ^ Documentación del ensamblador Borland Turbo.
  23. ^ Lewnes, Ann, "La arquitectura Intel386 llegó para quedarse", Intel Corporation, Microcomputer Solutions, julio/agosto de 1989, página 2
  24. ^ Intel 487SX en el Diccionario de Computación en Línea Gratuito
  25. ^ "Intel 80487". www.cpu-world.com . Consultado el 9 de junio de 2021 .

Enlaces externos