El R8000 es un chipset de microprocesador desarrollado por MIPS Technologies, Inc. (MTI), Toshiba y Weitek . [1] Fue la primera implementación de la arquitectura del conjunto de instrucciones MIPS IV . El R8000 también se conoce como TFP , por Tremendous Floating-Point , su nombre durante el desarrollo.
El desarrollo del R8000 comenzó a principios de los años 90 en Silicon Graphics , Inc. (SGI). El R8000 fue diseñado específicamente para proporcionar el rendimiento de las supercomputadoras de los años 90 con un microprocesador en lugar de una unidad central de procesamiento (CPU) construida a partir de muchos componentes discretos como matrices de puertas . En ese momento, el rendimiento de las supercomputadoras tradicionales no avanzaba tan rápidamente como los microprocesadores de conjunto de instrucciones reducido (RISC). Se predijo que los microprocesadores RISC eventualmente igualarían el rendimiento de las supercomputadoras más caras y más grandes a una fracción del costo y el tamaño, haciendo que las computadoras con este nivel de rendimiento fueran más accesibles y permitiendo que las estaciones de trabajo de escritorio y los servidores reemplazaran a las supercomputadoras en muchas situaciones.
Los primeros detalles del R8000 surgieron en abril de 1992 en un anuncio de MIPS Computer Systems que detallaba los futuros microprocesadores MIPS. En marzo de 1992, SGI anunció que iba a adquirir MIPS Computer Systems, que se convirtió en una subsidiaria de SGI llamada MIPS Technologies, Inc. (MTI) a mediados de 1992. El desarrollo del R8000 se transfirió a MTI, donde continuó. Se esperaba que el R8000 se presentara en 1993, pero se retrasó hasta mediados de 1994. El primer R8000, un componente de 75 MHz, se presentó el 7 de junio de 1994. Su precio era de 2.500 dólares estadounidenses en ese momento. A mediados de 1995, apareció un componente de 90 MHz en los sistemas de SGI. El alto costo del R8000 y su estrecho mercado (informática técnica y científica) restringieron su participación de mercado, y aunque fue popular en su mercado objetivo, fue reemplazado en gran medida por el R10000, más económico y en general de mejor rendimiento , presentado en enero de 1996.
Los usuarios del R8000 fueron SGI, que lo utilizó en su estación de trabajo Power Indigo2 , servidor Power Challenge , clúster Power ChallengeArray y sistema de visualización Power Onyx . En la lista TOP500 de noviembre de 1994 , 50 sistemas de 500 utilizaron el R8000. Los sistemas basados en R8000 mejor clasificados fueron cuatro Power Challenges en las posiciones 154 a 157. Cada uno tenía 18 R8000. [2] SGI afirmó tener un rendimiento de punto flotante de 300 millones de instrucciones por segundo, una calificación SPECfp92 de 310 y una calificación SPECint92 más modesta de 108. [3]
El conjunto de chips constaba del microprocesador R8000, la unidad de coma flotante R8010, dos memorias RAM Tag y la caché de streaming. El R8000 es superescalar , capaz de emitir hasta cuatro instrucciones por ciclo y ejecuta las instrucciones en el orden del programa. Tiene una secuencia de comandos de números enteros de cinco etapas .
El R8000 controlaba el conjunto de chips y ejecutaba instrucciones de números enteros. Contenía las unidades de ejecución de números enteros, el archivo de registro de números enteros , las memorias caché primarias y el hardware para la obtención de instrucciones, la predicción de bifurcaciones y los búferes de traducción de datos (TLB).
En la primera etapa, se obtienen cuatro instrucciones de la caché de instrucciones. La caché de instrucciones tiene un tamaño de 16 kB, está mapeada directamente , etiquetada virtualmente e indexada virtualmente y tiene un tamaño de línea de 32 bytes. La decodificación de instrucciones y las lecturas de registros ocurren durante la segunda etapa, y también se resuelven las instrucciones de bifurcación, lo que genera una penalización por predicción errónea de bifurcación de un ciclo. Las instrucciones de carga y almacenamiento comienzan a ejecutarse en la tercera etapa, y las instrucciones de números enteros en la cuarta etapa. La ejecución de números enteros se retrasó hasta la cuarta etapa para que las instrucciones de números enteros que usan el resultado de una carga como operando puedan emitirse en el ciclo posterior a la carga. Los resultados se escriben en el archivo de registro de números enteros en la quinta etapa.
El archivo de registro de enteros tiene nueve puertos de lectura y cuatro puertos de escritura. Cuatro puertos de lectura suministran operandos a las dos unidades de ejecución de enteros (la unidad de ramificación se consideraba parte de una unidad de enteros). Otros cuatro puertos de lectura suministran operandos a los dos generadores de direcciones. Se necesitan cuatro puertos, en lugar de dos, debido al estilo de dirección base(registro) + índice(registro) agregado en la ISA MIPS IV. El R8000 emite como máximo un almacenamiento de enteros por ciclo, y un puerto de lectura final entrega los datos del almacenamiento de enteros.
Se utilizan dos puertos de escritura de archivos de registro para escribir los resultados de las dos unidades funcionales de números enteros. El R8000 emite dos cargas de números enteros por ciclo y los otros dos puertos de escritura se utilizan para escribir los resultados de las cargas de números enteros en el archivo de registro.
La caché de datos de nivel 1 se organizó como dos matrices redundantes, cada una de las cuales tenía un puerto de lectura y un puerto de escritura. Los datos almacenados en números enteros se escribieron en ambas matrices. Se podían procesar dos cargas en paralelo, una en cada matriz.
Las unidades funcionales de números enteros se componen de dos unidades de números enteros, una unidad de desplazamiento, una unidad de multiplicación-división y dos unidades de generación de direcciones. Las instrucciones de multiplicación y división se ejecutan en la unidad de multiplicación-división, que no está segmentada. Como resultado, la latencia de una instrucción de multiplicación es de cuatro ciclos para operandos de 32 bits y de seis ciclos para operandos de 64 bits. La latencia de una instrucción de división depende de la cantidad de dígitos significativos en el resultado y, por lo tanto, varía de 21 a 73 ciclos.
Las cargas y los almacenamientos comienzan a ejecutarse en la tercera etapa. El R8000 tiene dos unidades de generación de direcciones (AGU) que calculan direcciones virtuales para cargas y almacenamientos. En la cuarta etapa, las direcciones virtuales se traducen a direcciones físicas mediante una TLB de doble puerto que contiene 384 entradas y es asociativa por conjuntos de tres vías. Se accede a la caché de datos de 16 kB en el mismo ciclo. Tiene doble puerto y se accede a ella a través de dos buses de 64 bits. Puede dar servicio a dos cargas o a una carga y un almacenamiento por ciclo. La caché no está protegida por paridad ni por código de corrección de errores (ECC). En caso de que se produzca una falla de caché , los datos deben cargarse desde la caché de transmisión con una penalización de ocho ciclos. La caché está indexada virtualmente, etiquetada físicamente , mapeada directamente , tiene un tamaño de línea de 32 bytes y utiliza un protocolo de escritura directa con asignación. Si las cargas impactan en la caché de datos, el resultado se escribe en el archivo de registro de enteros en la quinta etapa.
El R8010 ejecutó instrucciones de punto flotante proporcionadas por una cola de instrucciones en el R8000. La cola desacopló la secuencia de instrucciones de punto flotante de la secuencia de instrucciones de números enteros, implementando una forma limitada de ejecución fuera de orden al permitir que las instrucciones de punto flotante se ejecuten cuando sea posible, antes o después de que se emitan las instrucciones de números enteros del mismo grupo. Las secuencias de instrucciones se desacoplaron para ayudar a mitigar parte de la latencia de la caché de transmisión.
Contenía el archivo de registro de punto flotante, una cola de carga, una cola de almacenamiento y dos unidades de punto flotante idénticas. Todas las instrucciones, excepto la división y la raíz cuadrada, se procesan por canalización. El R8010 implementa un algoritmo iterativo de división y raíz cuadrada que utiliza el multiplicador como parte clave, lo que requiere que la secuencia de procesamiento se detenga en la unidad durante la operación.
Las instrucciones aritméticas, excepto las comparaciones, tienen una latencia de cuatro ciclos. Las divisiones de precisión simple y doble tienen latencias de 14 y 20 ciclos, respectivamente; [1] y las raíces cuadradas de precisión simple y doble tienen latencias de 14 y 23 ciclos, respectivamente. [4]
La caché de transmisión es una caché externa de 1 a 16 MB que funciona como caché unificada L2 del R8000 y caché de datos L1 del R8010. Funciona a la misma velocidad de reloj que el R8000 y está construida a partir de RAM estáticas sincrónicas de consumo. [1] Este esquema se utilizó para lograr un rendimiento de punto flotante sostenido, que requiere un acceso frecuente a los datos. Una caché primaria pequeña de baja latencia no contendría suficientes datos y fallaría con frecuencia, lo que requeriría rearchivos de larga latencia que reducen el rendimiento.
La caché de streaming está entrelazada de dos vías . Tiene dos bancos independientes , cada uno de los cuales contiene datos de direcciones pares o impares. Por lo tanto, puede realizar dos lecturas, dos escrituras o una lectura y una escritura en cada ciclo, siempre que los dos accesos sean a bancos separados. [1] [5] Se accede a cada banco a través de dos buses unidireccionales de 64 bits, uno para lecturas y el otro para escrituras. Este esquema se utilizó para evitar la rotación de bus, que es necesaria en los buses bidireccionales. Al evitar la rotación de bus, se puede leer desde la caché en un ciclo y luego escribir en el siguiente ciclo sin un ciclo intermedio para la rotación, lo que da como resultado un rendimiento mejorado. [5]
Las etiquetas de la caché de streaming están contenidas en dos chips Tag RAM, uno para cada banco. Ambos chips contienen datos idénticos. Cada chip contiene 1,189 Mbit de etiquetas de caché implementadas por celdas SRAM de cuatro transistores. Los chips están implementados en un proceso BiCMOS de 0,7 μm con dos niveles de polisilicio y dos niveles de interconexión de aluminio . Se utilizaron circuitos BiCMOS en los decodificadores y en las porciones combinadas de amplificador de detección y comparador del chip para reducir el tiempo de ciclo. Cada Tag RAM tiene un tamaño de 14,8 mm por 14,8 mm, está empaquetada en un CPGA de 155 pines y disipa 3 W a 75 MHz. [6] Además de proporcionar las etiquetas de caché, las Tag RAM son responsables de que la caché de streaming sea asociativa por conjuntos de cuatro vías. Para evitar un alto número de pines, las etiquetas de caché son asociativas por conjuntos de cuatro vías y la lógica selecciona a qué conjunto acceder después de la búsqueda en lugar de la forma habitual de implementar cachés asociativos por conjuntos. [1]
El acceso a la caché de streaming se canaliza para mitigar parte de la latencia. La canalización tiene cinco etapas: en la etapa uno, se envían direcciones a las Tag RAM, a las que se accede en la etapa dos. La etapa tres es para que las señales de las Tag RAM se propaguen a las SSRAM. En la etapa cuatro, se accede a las SSRAM y los datos se devuelven al R8000 o R8010 en la etapa cinco.
El R8000 contenía 2,6 millones de transistores y medía 17,34 mm por 17,30 mm (299,98 mm 2 ). El R8010 contenía 830.000 transistores. En total, los dos chips contenían 3,43 millones de transistores. Ambos fueron fabricados por Toshiba en su proceso VHMOSIII, un proceso de metal-óxido-semiconductor complementario de metal (CMOS) de triple capa de 0,7 μm . Ambos están empaquetados en encapsulados de matriz de rejilla de pines cerámicos (CPGA) de 591 pines . Ambos chips usaban una fuente de alimentación de 3,3 V y el R8000 disipaba 13 W a 75 MHz.