# Intel i860

El Intel i860 (también conocido como el 80860, y nombre código N10) era un microprocesador RISC de Intel, lanzado en 1989. El i860 fue, junto con el i960, uno de los primeros intentos de una Arquitectura de Conjunto de Instrucciones (Instruction Set Architecture, ISA) completamente nueva y de alto nivel desde el fallido Intel i432 de los años 1980. Fue lanzado con considerable fanfarria, y oscureció el lanzamiento del Intel i960 que muchos consideraban era un mejor diseño. El i860 nunca alcanzó éxito comercial y el proyecto fue terminado a mediados de los años 1990. El chip fue usado en subsistemas gráficos de alto nivel como la tarjeta de expansión "NeXT Dimension" para el NeXT Cube.

## Características técnicas

El i860 combinó un número de características que eran únicas en ese tiempo, lo más notablemente fue su arquitectura VLIW (Very Long Instruction Word) y un buen soporte para operaciones de alta velocidad de coma flotante. El diseño montó una ALU de 32 bits junto con una FPU de 64 bits que en sí misma fue hecha en tres partes, un procesador sumador, uno multiplicador, y uno gráfico. El sistema tenía pipelines separados para el ALU, el sumador y el multiplicador, y podía manejar hasta tres instrucciones por ciclo de reloj.
Una característica bastante inusual del i860 era que las pipelines en las unidades funcionales eran accesibles por los programas, requiriendo a los compiladores ordenar cuidadosamente las instrucciones en el código de objeto para mantener las pipelines llenas. Esto alcanzaba algunas de las mismas metas de la arquitectura de los microprocesadores RISC, en donde microcódigo complejo, un tipo de compilador al vuelo, fue removido del núcleo del CPU y colocado en el compilador. Esto conducía a una núcleo más simple, con más espacio disponible para otros trabajos, pero resultaba en un código mucho más grande, con un impacto negativo en aciertos en el caché, ancho de banda de la memoria, y costo total del sistema. Como resultado de su arquitectura, el i860 podía correr ciertos gráficos y algoritmos de coma flotante con excepcionalmente alta velocidad, pero su desempeño en aplicaciones de propósito general sufrió y era difícil programar eficientemente (ver abajo).
Todos los buses eran de 64 bits de ancho o más. El bus de memoria interno hacia el caché, por ejemplo, fue 128 bits de ancho. Ambas unidades tenían 32 registros de 32 bits, pero el FPU usaba su conjunto como 16 registros de 64 bits. Las instrucciones para el ALU fueron leídas (fetched) dos a la vez para usar completamente el bus externo. Intel se refirió siempre al diseño como el "microprocesador de 64 Bits i860".
La unidad de gráficos era única para la era. Era esencialmente una unidad de números enteros de 64 bits usando los registros del FPU. Soportó un número de comandos para instrucciones similar a las SIMD en adición a aritmética básica de enteros de 64 bits. La experiencia con el i860 influenció la funcionalidad MMX posteriormentea agregada a los procesadores Intel Pentium.

## Problemas de desempeño

El desempeño descrito en el papel era impresionante para una solución de un solo chip; sin embargo, el rendimiento en el mundo real era completamente diferente. Un problema, quizás desconocido en ese entonces, era que las trayectorias del código de runtime eran difíciles de predecir, lo que significaba que llegaba a ser excesivamente difícil de ordenar apropiadamente las instrucciones en tiempo de compilación. Por ejemplo, una instrucción para sumar dos números duraría considerablemente más tiempo si los datos no estuvieran en el caché, sin embargo, para el programador no había ninguna manera de saber si los datos estaban o no en el caché. Si no se acertaba, la pipeline entera se atascaría, esperando por datos. El diseño entero del i860 estaba basado en la eficiencia del compilador para manejar esta tarea, que en la práctica probó ser casi imposible. Mientras que teóricamente era capaz de tener picos de alrededor de 60 MFLOP para las versiones XP, el código ensamblador escrito a mano conseguía tener, en el mejor de los casos, hasta 40 MFLOP, y la mayoría de los compiladores tenían dificultad para conseguir incluso 10 MFLOP.
Otro serio problema era la carencia de cualquier solución para manejar rápidamente el cambio de contexto. El i860 tenía varias pipelines (para las partes del ALU y del FPU) y una interrupción podía derramarlos y requerir que todos ellos fueran recargados. Esto tomaba 62 ciclos en el mejor caso, y casi 2000 ciclos en el peor. El último es 1/20000 de un segundo, una eternidad para un CPU. Esto eliminó en gran parte al i860 como un CPU de propósitos generales.

## Versiones, Aplicaciones

El chip fue lanzado en dos versiones, el XR básico, y el XP(nombre código N11). El XP agregó cachés más grandes en el chip, un caché de segundo nivel, buses más rápidos, y soporte en hardware para husmear el bus, para consistencia del caché en sistemas de computación paralela. El XR corrió a 25 o 40 MHz, y un reducción de tamaño en el proceso de fabricación del XP (de 1 a 0.8 micrómetros) lanzó al XR a 40 y a 50 MHz. Ambos corrieron el mismo conjunto de instrucciones.
Al principio el i860 fue solamente usado en un número pequeño de muy grandes máquinas, como el iPSC/860 en el Laboratorio Nacional Los Álamos. A medida que los compiladores mejoraron, el desempeño general del i860 también lo hizo, pero para entonces la mayoría de los otros diseños RISC ya lo habían pasado en rendimiento.
Por un tiempo, Intel probó la viabilidad del i860 como un CPU de estación de trabajo, compitiendo con chips de arquitectura MIPS y otros. Microsoft trasladó realmente una versión temprana del Windows NT al 860, pero el desempeño no era substancialmente mejor que las nuevas versiones i386, y este esfuerzo fue abandonado.
El i860 vio un cierto uso en el mundo de las estaciones de trabajo como un acelerador gráfico. Fue usado, por ejemplo, en el NeXTDimension, donde corrió una versión reducida del Mach kernel corriendo un PostScript completo. En este rol, el diseño del i860 trabajaba considerablemente mejor a medida que el núcleo del programa podía ser cargado en el caché haciéndose enteramente "predecible", permitiendo a los compiladores obtener el orden correcto. Otro ejemplo fue SGI Onyx Reality Engine 2, que usaba un número de procesadores i860XP en su motor de geometría. Esta clase de uso lentamente desapareció a medida que más CPUs de propósito general comenzaron a emparejar el rendimiento del i860's, y entonces, Intel perdió el interés.
Al final de los años 1990 Intel sustituyó su línea entera de RISC por diseños basados en el ARM, conocidos como el Intel XScale. Confusamente, el nombre i860 ha estado desde entonces siendo reutilizado para un chipset de control de la tarjeta madre para sistemas Intel Xeon, un Pentium de alto nivel.