El Intel i860 (también conocido como 80860 ) es un diseño de microprocesador RISC introducido por Intel en 1989. Es uno de los primeros intentos de Intel de una arquitectura de conjunto de instrucciones de alta gama completamente nueva desde el fallido Intel iAPX 432 de principios de la década de 1980. Fue el primer chip de un millón de transistores del mundo. [1] Fue lanzado con considerable fanfarria, eclipsando ligeramente al anterior Intel i960 , que tuvo éxito en algunos nichos de sistemas integrados . El i860 nunca alcanzó el éxito comercial y el proyecto se dio por terminado a mediados de la década de 1990.
La primera implementación de la arquitectura i860 es el microprocesador i860 XR (nombre en código N10 ), que funcionaba a 25, 33 o 40 MHz. El microprocesador i860 XP de segunda generación (nombre en código N11 ) agregó páginas de 4 Mbytes, cachés en chip más grandes, soporte de caché de segundo nivel, buses más rápidos y soporte de hardware para espionaje de bus, para la consistencia de caché en sistemas multiprocesador . Una reducción de proceso para el XP (de 1 μm a 0,8 CHMOS V) aumentó el reloj a 40 y 50 MHz. [3] Ambos microprocesadores admitían el mismo conjunto de instrucciones para programas de aplicación.
El i860 combinaba una serie de características que eran únicas en su época, en particular su arquitectura de palabra de instrucción muy larga (VLIW) y su potente compatibilidad con operaciones de punto flotante de alta velocidad. [4] El diseño utiliza dos clases de instrucciones: instrucciones "centrales" que utilizan una ALU de 32 bits e instrucciones "de punto flotante o gráficas" que operan en un sumador de punto flotante, un multiplicador de punto flotante o una unidad gráfica de enteros de 64 bits. El sistema tenía canales separados para la ALU, el sumador de punto flotante, el multiplicador de punto flotante y la unidad gráfica. Puede buscar y decodificar una instrucción "central" y una instrucción "de punto flotante o gráfica" por ciclo de reloj. Cuando se utilizan instrucciones de punto flotante de operación dual (que transfieren valores entre instrucciones de operación dual posteriores), puede ejecutar hasta tres operaciones (una ALU, una multiplicación de punto flotante y una suma o resta de punto flotante) por ciclo de reloj. [1] [5]
Todos los buses de datos tenían al menos 64 bits de ancho. El bus de memoria interna que conectaba la memoria caché, por ejemplo, tenía 128 bits de ancho.
Las instrucciones de la clase "principal" utilizan treinta y dos registros enteros de 32 bits, pero las instrucciones "de punto flotante o gráficas" utilizan un archivo de registros al que las unidades de punto flotante pueden acceder como treinta y dos registros de punto flotante de 32 bits, dieciséis de 64 bits u ocho de 128 bits, o al que la unidad gráfica puede acceder como dieciséis registros enteros de 64 bits.
La unidad "core" es responsable de obtener instrucciones y, en el modo normal de "instrucción única", puede obtener una instrucción "core" de 32 bits o una instrucción "de punto flotante o gráfica" de 32 bits por ciclo. Pero cuando se ejecuta en modo de instrucción dual, se accede a la caché de instrucciones como instrucciones VLIW que consisten en una instrucción "core" de 32 bits emparejada con una instrucción "de punto flotante o gráfica" de 32 bits, obtenidas simultáneamente a través de un bus de 64 bits. [5]
Intel se refirió al diseño como "Microprocesador i860 de 64 bits". [6]
Las instrucciones del Intel i860 actuaban sobre tamaños de datos de 8 a 128 bits. [7]
Los gráficos admiten instrucciones similares a SIMD además de operaciones matemáticas básicas con números enteros de 64 bits. Por ejemplo, su ruta de datos con números enteros de 64 bits puede representar varios píxeles juntos como píxeles de 8 bits, píxeles de 16 bits o píxeles de 32 bits. [5] La experiencia con el i860 influyó en la funcionalidad MMX que se agregó posteriormente a los procesadores Pentium de Intel .
Las tuberías hacia las unidades funcionales son accesibles por programa ( VLIW ), lo que requiere que los compiladores ordenen las instrucciones cuidadosamente en el código objeto para mantener las tuberías llenas. En las arquitecturas tradicionales, estas tareas eran manejadas en tiempo de ejecución por un programador en la propia CPU, pero la complejidad de estos sistemas limitó su aplicación en los primeros diseños RISC. El i860 fue un intento de evitar esto por completo al trasladar esta tarea fuera del chip al compilador. Esto permitió que el i860 dedicara más espacio a las unidades funcionales, mejorando el rendimiento. Como resultado de su arquitectura, el i860 podía ejecutar ciertos gráficos y algoritmos de punto flotante con una velocidad excepcionalmente alta, pero su rendimiento en aplicaciones de propósito general se vio afectado y fue difícil programar de manera eficiente (ver más abajo).
El i860 tiene instrucciones de bifurcación con y sin retraso. Cuando se toman bifurcaciones con retraso, se ejecutará la siguiente instrucción antes de transferir el control a la instrucción de destino de la bifurcación. Esto significa que el i860 tiene una única ranura de retraso de bifurcación. [8]
En el papel, el rendimiento era impresionante para una solución de un solo chip; sin embargo, el rendimiento en el mundo real no lo era en absoluto. Un problema, tal vez no reconocido en ese momento, era que las rutas de código en tiempo de ejecución son difíciles de predecir, lo que significa que se vuelve extremadamente difícil ordenar las instrucciones correctamente en tiempo de compilación . Por ejemplo, una instrucción para sumar dos números tardará considerablemente más si esos números no están en la caché, pero no hay forma de que el programador sepa si están o no. Si se realiza una suposición incorrecta, todo el proceso se detendrá, esperando los datos. Todo el diseño del i860 se basó en que el compilador manejara esta tarea de manera eficiente, lo que resultó casi imposible en la práctica. Si bien teóricamente era capaz de alcanzar un máximo de aproximadamente 60-80 MFLOPS tanto para precisión simple como para precisión doble para las versiones XP, [9] el código ensamblador escrito manualmente logró obtener solo alrededor de 40 MFLOPS, y la mayoría de los compiladores tuvieron dificultades para obtener incluso 10 MFLOP. [10] La posterior arquitectura Itanium , también un diseño VLIW, sufrió nuevamente el problema de los compiladores incapaces de entregar un código suficientemente optimizado.
Otro problema grave era la falta de una solución para manejar el cambio de contexto rápidamente. El i860 tenía varias tuberías (para las partes ALU y FPU) y una interrupción podía desbordarlas y obligarlas a volver a cargarlas todas. Esto llevaba 62 ciclos en el mejor de los casos y casi 2000 ciclos en el peor. Esto último es 1/20000 de segundo a 40 MHz (50 microsegundos), una eternidad para una CPU. Esto eliminó en gran medida al i860 como CPU de propósito general.
A medida que los compiladores mejoraron, el rendimiento general del i860 también lo hizo, pero para entonces la mayoría de los demás diseños RISC ya habían superado al i860 en rendimiento.
A fines de la década de 1990, Intel reemplazó toda su línea RISC con diseños basados en ARM , conocidos como XScale . Resulta confuso que el número 860 haya sido reutilizado desde entonces para un chipset de control de placa base para sistemas Intel Xeon ( Pentium de gama alta ) y un modelo del Core i7.
Andy Grove sugirió que el fracaso del i860 en el mercado se debió a que Intel estaba exigiendo demasiado:
Ahora teníamos dos chips muy potentes que estábamos lanzando al mercado casi al mismo tiempo: el 486, basado en gran medida en la tecnología CISC y compatible con todo el software de PC, y el i860, basado en la tecnología RISC, que era muy rápido pero no compatible con nada. No sabíamos qué hacer. Así que lanzamos ambos, pensando que dejaríamos que el mercado decidiera. ... nuestra ambigüedad hizo que nuestros clientes se preguntaran qué representaba realmente Intel, ¿el 486 o el i860?
— Andy Grove , [11]
Al principio, el i860 solo se utilizó en un pequeño número de supercomputadoras , como la Intel iPSC/860 . Posteriormente, Intel comercializó el i860 como un microprocesador para estaciones de trabajo durante un tiempo, donde compitió con microprocesadores basados en las arquitecturas MIPS y SPARC , entre otras. Las estaciones de trabajo Unix Oki Electric OKI Station 7300/30 [12] y Stardent Vistra 800 [13] se basaban en un i860 XR de 40 MHz que ejecutaba UNIX System V /i860. [14] La Hauppauge 4860 [15] y la Olivetti CP486 [16] presentaban un Intel 80486 y un i860 en la misma placa base. Microsoft desarrolló inicialmente lo que luego se convertiría en Windows NT en estaciones de trabajo basadas en i860XR diseñadas internamente (con nombre en código Dazzle ), y luego trasladó NT a los procesadores MIPS ( Microsoft Jazz ), Intel 80386 y otros. Algunos afirman que la designación NT era una referencia al nombre en código "N-Ten" del i860XR. [17]
El i860 sí tuvo algún uso en el mundo de las estaciones de trabajo como acelerador de gráficos. Se utilizó, por ejemplo, en NeXTdimension , donde ejecutó una versión reducida del núcleo Mach ejecutando una pila PostScript completa . Sin embargo, la parte PostScript del proyecto nunca se terminó, por lo que terminó simplemente moviendo píxeles de color. En esta función, el diseño del i860 funcionó considerablemente mejor, ya que el programa central se podía cargar en la memoria caché y volverse completamente "predecible", lo que permitía a los compiladores obtener el orden correcto. Truevision produjo una placa aceleradora basada en i860 destinada a su uso con sus tarjetas de búfer de cuadros Targa y Vista. Pixar produjo una versión personalizada de RenderMan para ejecutarse en la tarjeta que funcionaba aproximadamente cuatro veces más rápido que el host 386. Otro ejemplo fue RealityEngine de SGI , que utilizó varios procesadores i860XP en su motor de geometría. Este tipo de uso también desapareció lentamente a medida que CPU más generales comenzaron a igualar el rendimiento del i860 y que Intel centró su atención en los procesadores Pentium para computación de propósito general.
Mercury Computer Systems utilizó el i860 en su multicomputadora . De 2 a 360 nodos de cómputo residirían en una red de árbol de gran tamaño conmutada por circuitos , y cada nodo tendría memoria local que podría ser mapeada por cualquier otro nodo. Cada nodo en este sistema heterogéneo podría ser un i860, un PowerPC o un grupo de tres DSP SHARC . Se obtuvo un buen rendimiento del i860 al proporcionar a los clientes una biblioteca de funciones de procesamiento de señales escritas en lenguaje ensamblador. El hardware incluía hasta 360 nodos de cómputo en 9U de espacio de rack , lo que lo hacía adecuado para aplicaciones móviles como el procesamiento de radares aéreos.
A principios de la década de 1990, Stratus Technologies construyó servidores basados en i860, la serie XA/R, que ejecutaban su sistema operativo propietario VOS . [18]
También en la década de 1990, Alliant Computer Systems construyó sus servidores FX/800 y FX/2800 basados en i860, en reemplazo de las series FX/80 y FX/8 que se basaban en el ISA Motorola 68000. Tanto los sistemas de computación de Alliant como los de Mercury se utilizaron intensamente en la NASA/JPL para las misiones SIR-C .
El ejército estadounidense utilizó el i860 para numerosas aplicaciones aeroespaciales y de procesamiento de señales digitales como coprocesador, donde se utilizó hasta finales de la década de 1990. [19]