# InfiniteReality

InfiniteReality es una arquitectura de hardware de gráficos 3D y una familia de sistemas de gráficos que implementaron la arquitectura de hardware antes mencionada que fue desarrollada y fabricada por Silicon Graphics entre 1996 a 2005. InfiniteReality se posicionó como el hardware de visualización de gama alta de Silicon Graphics para su plataforma MIPS/IRIX y se usó exclusivamente en su familia de sistemas de visualización Onyx, que a veces se denominan "supercomputadoras gráficas" o "supercomputadoras de visualización". InfiniteReality fue comercializado y utilizado por grandes organizaciones, como empresas y universidades, que participan en la simulación por computadora, la creación de contenido digital, la ingeniería y la investigación.

## InfiniteReality

InfiniteReality se introdujo a principios de 1996 y se utilizó en el Onyx. Sucedió a RealityEngine, aunque RealityEngine coexistió con InfiniteReality durante algún tiempo para Onyx como una opción de nivel de entrada para configuraciones de "estación de trabajo" de escritorio.
La arquitectura InfiniteReality fue un diseño de tercera generación y se clasifica como una arquitectura intermedia. Fue diseñado para representar escenas complejas en alta calidad a 60 fotogramas por segundo, aproximadamente de dos a cuatro veces el rendimiento del RealityEngine al que reemplazó. Fue diseñado explícitamente para su uso junto con la biblioteca de gráficos OpenGL e implementa la mayor parte de la canalización de OpenGL en hardware.
La implementación se divide en placas de geometría (también conocida como Geometry Engine), memoria de ráster (también conocida como administrador de ráster) y generador de visualización, y cada placa corresponde a cada etapa de las tres etapas principales en la canalización de la arquitectura. El esquema de partición del conjunto de placas es el mismo que el de RealityEngine, como resultado de que Silicon Graphics quiere que RealityEngine sea fácilmente actualizable a InfiniteReality. Cada tubería consta de una placa de Geometry Engine, una, dos o cuatro placas de administrador de ráster y una placa de generador de visualización.
La implementación comprende doce diseños ASIC fabricados en procesos de 0,5 y 0,35 micrómetros con tres capas de interconexión de metal. Estos ASIC requieren una fuente de alimentación de 3,3 V. Una canalización de InfiniteReality en una configuración máxima contiene 251 millones de transistores. InfiniteReality fue desarrollado por 55 ingenieros.
Dado un sistema lo suficientemente capaz, como ciertos modelos de Onyx2 y Onyx 3000, se pueden alojar hasta 16 canalizaciones de InfiniteReality. Las tuberías se pueden operar en tres modos: multipuesto, multipantalla y multitubería. En el modo multipuesto, cada tubería puede atender hasta ocho usuarios simultáneos, cada uno con sus propias pantallas, teclados y ratones independientes. En el modo de múltiples pantallas, múltiples salidas manejan múltiples pantallas, lo cual es útil para la realidad virtual. El modo multitubería tiene dos métodos de operación: el primer método requiere que se instale una placa secundaria de multiplexor digital (DPLEX) en cada canalización, que combina la salida de múltiples canalizaciones. El segundo método utiliza el software MonsterMode para distribuir los datos utilizados para representar un marco en varias canalizaciones.
Para conectar la tubería al sistema, se utiliza un cable de interfaz de cable plano (FCI) para conectar el ASIC del procesador de interfaz de host en la placa de geometría al Ibus en la placa IO4, una parte del sistema host.

### Geometry Engine

La placa de geometría (Geometry Engine) es responsable del procesamiento de imágenes y geometría y se divide en cuatro etapas, y cada etapa se implementa mediante dispositivos independientes. La primera etapa es la interfaz de host. Debido a que InfiniteReality se diseñó para dos plataformas muy diferentes, el Onyx tradicional basado en el bus de memoria compartida que usa el bus POWERpath-2 y el Onyx2 basado en la red de memoria compartida distribuida que usa la interconexión NUMAlink2, InfiniteReality tenía que tener una interfaz que pudiera proporcionar un rendimiento similar en ambas plataformas, que tenían una gran diferencia en el ancho de banda entrante (200 MB/s frente a 400 MB/s respectivamente).
Con este fin, se utiliza un procesador de interfaz de host, un núcleo RISC incorporado, para obtener objetos de la lista de visualización mediante el acceso directo a la memoria (DMA). El procesador de interfaz de host está acompañado por 16 MB de memoria de acceso aleatorio dinámico síncrono (SDRAM), de los cuales 15 MB se utilizan para almacenar en caché los objetos de visualización. El caché puede entregar datos a la siguiente etapa a más de 300 MB/s. La siguiente etapa es el distribuidor de geometría, que transfiere datos e instrucciones desde el procesador de interfaz del host a los motores de geometría individuales.
La siguiente etapa es realizar geometría y procesamiento de imágenes. Geometry Engine se usa para este propósito, con cada placa de geometría que contiene hasta cuatro que funcionan en MIMD. Geometry Engine es un ASIC semipersonalizado con una canalización de datos múltiples de instrucción única (SIMD) que contiene tres núcleos de punto flotante, cada uno con una unidad lógica aritmética (ALU), un multiplicador y un archivo de registro de 32 bits por 32 entradas con dos puertos de lectura y dos de escritura. Estos núcleos cuentan con una memoria de 32 bits por 2560 entradas que contiene elementos del estado OpenGL y proporciona almacenamiento de memoria virtual. Cada núcleo también tiene un convertidor de flotante a fijo para convertir valores de punto flotante en forma de entero. Geometry Engine es capaz de completar tres instrucciones por ciclo, y cada placa de geometría, con cuatro dispositivos de este tipo, puede completar 12 instrucciones por ciclo. Geometry Engine utiliza una microinstrucción de 195 bits, que se comprime para reducir el tamaño y el uso del ancho de banda a cambio de un rendimiento ligeramente inferior.
El procesador Geometry Engine opera a 90 MHz, logrando un rendimiento teórico máximo de 540 MFLOPS. Como hay cuatro procesadores de este tipo en una placa GE12-4 o GE14-4, el rendimiento teórico máximo es de 2,16 GFLOPS. Por lo tanto, un sistema de 16 tuberías alcanza un rendimiento teórico máximo de 34,56 GFLOPS.
La cuarta etapa es Geometry-Raster FIFO, un búfer FIFO que fusiona las salidas de los cuatro motores de geometría en uno, volviendo a ensamblar las salidas en el orden en que se emitieron. El FIFO está construido a partir de SDRAM y tiene una capacidad de 4 MB, lo suficientemente grande como para almacenar 65.536 vértices. Los vértices transformados se mueven desde este FIFO a las placas Raster Manager para el reensamblaje y la configuración del triángulo mediante el Triangle Bus (también conocido como Vertex Bus), que tiene un ancho de banda de 400 MB/s.

### Placa de memoria ráster

La función de la placa de memoria ráster (Raster Memory board) es realizar la rasterización. También contiene la memoria de textura y la memoria de trama, que se conoce más comúnmente como framebuffer. La rasterización se realiza en el generador de fragmentos y en los ochenta Image Engine. El generador de fragmentos consta de cuatro diseños ASIC: Scan Converter (SC), Texel Address Calculator (TA), Texture Memory Controller (TM) y Texture Fragment (TF).
Los ASIC SC y TA realizan conversión de escaneo, interpolación de color y profundidad, interpolación de coordenadas de textura correcta de perspectiva y cálculo de nivel de detalle en los datos entrantes, y los resultados se pasan a los ocho ASIC TM, que son controladores de memoria especializados optimizados para acceso texel. Cada TM controla cuatro SDRAM que constituyen una octava parte de la memoria de textura. Las SDRAM utilizadas tienen 16 bits de ancho y tienen buses de datos y direcciones separados. Las placas Raster Manager con 16 MB de memoria de textura utilizan SDRAM con una capacidad de 4 Mb, mientras que las placas Raster Manager con 64 MB de memoria de textura utilizan SDRAM de 16 MB. Los ASIC TM realizan búsquedas de texel en sus SDRAM de acuerdo con las direcciones de texel emitidas por el ASIC TA. Los Texels de los ASIC TM se reenvían al ASIC TF apropiado, donde se realiza el filtrado de texturas, la combinación del entorno de textura con el color interpolado y la aplicación de niebla. Como cada SDRAM contiene parte de la memoria de textura, las 32 SDRAM deben estar conectadas a los 80 motores de imagen. Para lograr esto, los ASIC TM y TF implementan una red omega de dos rangos, que reduce la cantidad de rutas individuales requeridas para el tipo 32 a 80 mientras mantiene la misma funcionalidad.
Los ochenta Image Engine tienen múltiples funciones. En primer lugar, cada Image Engine controla una parte de la memoria ráster, que en el caso de InfiniteReality, es un SGRAM de 1 MB organizado como 262.144 palabras de 32 bits. En segundo lugar, los Image Engine realizan las siguientes operaciones OpenGL por fragmento: prueba de propiedad de píxeles, prueba de plantilla, prueba de búfer de profundidad, combinación, interpolación y operación lógica. Por último, los Image Engine realizan operaciones de búfer de acumulación y suavizado. Para entregar datos de píxeles para la visualización, cada motor de imagen tiene un bus serie de 2 bits a la placa del generador de visualización. Si hay una placa de administrador de ráster en la canalización, Image Engine usa todo el ancho del bus, mientras que si hay dos o más placas de administrador de ráster, Image Engine usa la mitad del bus. Cada bus serie es en realidad parte del Video Bus, que tiene un ancho de banda de 1,2 GB/s. Cuatro "núcleos" de Image Engine están contenidos en un ASIC de Image Engine, que contiene casi 488.000 puertas lógicas, que comprenden 1,95 millones de transistores, en una matriz de 42 mm$^2$ (6,5 por 6,5 mm) que fue fabricada en un proceso de 0,35 micrómetros por VLSI Technology.
InfiniteReality utiliza los administradores de ráster RM6-16 o RM6-64. Cada canalización es capaz de mostrar resoluciones de 2,62, 5,24 o 10,48 millones de píxeles, siempre que estén presentes una, dos o cuatro placas Raster Manager respectivamente. La memoria ráster se puede configurar para usar 256, 512 o 1024 bits por píxel. 320 MB admite una resolución de 2560 por 2048 píxeles y cada píxel contiene 512 bits de información. En una configuración con cuatro administradores de ráster, la memoria de textura tiene un ancho de banda de 15,36 GB/s y la memoria de ráster tiene un ancho de banda de 72,8 GB/s.

### Placa de generador de pantalla

La placa del generador de pantalla DG4-2 contiene hardware para controlar hasta dos salidas de video, que se pueden expandir a ocho salidas de video con una placa secundaria opcional, una configuración conocida como DG4-8 Las salidas son independientes y cada salida tiene hardware para generar temporización de video, cambio de tamaño de video, corrección gamma, genlock y conversión de digital a analógico. La conversión de digital a analógico la proporcionan convertidores de digital a analógico de 8 bits que admiten una frecuencia de reloj de píxeles de hasta 220 MHz.
Los datos para las salidas de video son proporcionados por cuatro ASIC que deserializan y desintercalan los flujos de 160 bits en componentes RGBA de 10 bits, componentes RBGA de 12 bits, L16, Stereo Field Sequential (FS) o índices de color. El hardware también incorpora el cursor en esta etapa. Está disponible un mapa de índice de color de 32.768 entradas.

### Capacidades y rendimiento

InfiniteReality era capaz de varias capacidades avanzadas:
* Suavizado de muestras múltiples de 8 por 8
* Una profundidad de color máxima de RGBA de 48 bits
* 16 planos superpuestos
* Un búfer Z de coma flotante de 24 bits
* Cada píxel consta de 256 a 1048 bits de datos
* Se admitía la visualización en estéreo y se almacenaba en búfer cuádruple
El rendimiento de InfiniteReality fue:
* 11 millones de franjas de triángulos sin iluminación, con búfer de profundidad y suavizadas (40 píxeles cada una) por segundo
* 8,3 millones de franjas triangulares texturizadas, con búfer de profundidad y suavizadas (50 píxeles cada una) por segundo
* Más de 7 millones de triángulos iluminados, texturizados y suavizados por segundo
* 800 millones de píxeles trilineales mip-mapping, texturizados, de 16 bits, con búfer de profundidad por segundo
* 750 millones de texel trilineal de 16 bits, texturizado, mip-mapping, cuatro por cuatro submuestras suavizadas, píxeles con búfer de profundidad por segundo
* Más de 710 millones de píxeles texturizados y suavizados por segundo
* 300 millones de píxeles mostrados por segundo, distribuidos entre una y ocho salidas

## InfiniteReality2

InfiniteReality2 es cómo hinv (una utilidad IRIX que enumera el hardware presente en un sistema) se refiere a una InfiniteReality que se usa en Onyx2. Sin embargo, InfiniteReality2 todavía se comercializaba como InfiniteReality. Fue la segunda implementación de la arquitectura InfiniteReality y se introdujo a finales de 1996. Es idéntico a InfiniteReality desde el punto de vista arquitectónico, pero difiere mecánicamente, ya que el gabinete de tarjetas basada en Origin 2000 es diferente del gabinete tarjetas basada en Challenge.
InfiniteReality2 es un esquema de interfaz que se utiliza en Onyx2 de montaje en rack o sistemas posteriores. En lugar de estar conectado al sistema host a través de un cable FCI, el conjunto de placas se conecta en la parte posterior de un backplane, que puede admitir dos conductos. El backplane tiene once ranuras. Las ranuras seis a once son para la primera canalización, que puede contener de una a cuatro placas Raster Manager. Las ranuras del uno al cuatro son para la segunda canalización, que puede contener una o dos placas Raster Manager debido a la cantidad de ranuras que hay. Debido a esto, los sistemas Onyx configurados al máximo utilizan un backplane para cada canalización para evitar restringir la mitad de las 16 canalizaciones a un máximo de dos placas Raster Manager. La ranura cinco contiene una placa Ktown si el midplane se usa en un sistema basado en Origin 2000 (Onyx2) o una placa Ktown2 si el midplane se usa en un sistema basado en Origin 3000 (Onyx 3000). El propósito de estas tarjetas es conectar el enlace XIO del sistema anfitrión con el ASIC del procesador de interfaz del anfitrión en la tarjeta Geometry. Estas placas tienen dos puertos XIO para este propósito, con el puerto XIO superior conectado a la tubería derecha y el puerto XIO inferior conectado a la tubería izquierda.

### Reality

The Reality es una versión de costo reducido de InfiniteReality2 destinada a proporcionar un rendimiento similar. En lugar de utilizar la placa Geometry Engine GE14-4 y las placas RM7-16 o RM7-64 Raster Manager, Reality utilizó la placa GE14-2 y las placas RM8-16 o RM8-64. El GE14-2 tiene dos procesadores de motor de geometría, en lugar de cuatro como los otros modelos. El RM8-16 y el RM864 tienen 16 o 64 MB de memoria de textura respectivamente y 40 MB de memoria de trama. El Reality también estaba limitado por la cantidad de placas Raster Manager que podía admitir, una o dos. Cuando se configura al máximo con dos placas RM8-64 Raster Manager, la canalización Reality tiene 80 MB de memoria ráster.

### InfiniteReality2E

InfiniteReality2E fue una actualización de InfiniteReality, comercializado como InfiniteReality2, presentado en 1998. Mejora InfiniteReality al reemplazar la placa del motor de geometría GE14-4 con la placa del motor de geometría GE16-4 y las placas del administrador de ráster RM7-16 o RM7-64 con la placa del administrador de ráster RM9-64 . La nueva placa Geometry Engine operaba a 112 MHz, mejorando la geometría y el rendimiento del procesamiento de imágenes. La nueva placa Raster Manager funcionaba a 72 MHz, mejorando el rendimiento suavizado de pixeles.

## InfiniteReality3

InfiniteReality3 se introdujo en 2000 junto con Onyx 3000 para reemplazar a InfiniteReality2. Fue utilizado en los sistemas de visualización Onyx2 y Onyx 3000. La única mejora con respecto a la implementación anterior fue el reemplazo del Administrador de ráster RM9-64 con el Administrador de ráster RM10-256, que tiene 256 MB de memoria de textura, cuatro veces la del administrador de ráster anterior. Cuando se configura al máximo con cuatro Raster Managers, la canalización InfiniteReality3 proporciona 320 MB de memoria ráster.

## InfiniteReality4

InfiniteReality4 se introdujo en 2002 para suceder a InfiniteReality3. Se utilizó en Onyx2, Onyx 3000 y Onyx 350. Es el último miembro de la familia InfiniteReality, a la que sucedió UltimateVision, basado en ATI FireGL, que se utilizó en el Onyx4. La única mejora con respecto a la implementación anterior fue la sustitución del Administrador de ráster RM10-256 por el Administrador de ráster RM11-1024, que ha mejorado el rendimiento, 1 GB de memoria de textura y 2,5 GB de memoria de ráster, cuatro y treinta y dos veces más que el administrador de ráster anterior, respectivamente. Cuando se configura al máximo con cuatro administradores de ráster, la canalización InfiniteReality4 tiene 10 GB de memoria de ráster. En una configuración máxima con 16 canalizaciones, InfiniteReality4 contenía 16 GB de memoria de textura y 160 GB de memoria de trama.

## Comparación

Las cifras presentadas en las tablas son para una configuración mínima de 1 tubería y máxima de 16 tuberías, a excepción de Reality, que estaba restringida a la operación de tubería única.

### Hardware

| Modelo | Placa Geometry Engine | Placa Raster Manager | Placa Display Generator | Memoria de textura (MB) | Memoria ráster (GB) | Introducido | Discontinuado |
| InfiniteReality | GE12-4 | RM6-16 o RM6-64 | DG4-2 o DG4-8 | 16 a 1024 | 80 a 5120 | 1993-01-01 | 1999-06-31 |
| InfiniteReality2 | GE14-4 | RM7-16 o RM7-64 | DG5-2 o DG5-8 | 16 a 1024 | 80 a 5120 | 1996-01-26 | 1999-09-30 |
| Reallity | GE14-2 | RM8-16 o RM8-64 | DG5-2 o DG5-8 | 64 | 40 a 80 | 2000-07-01 | 2001-09-15 |
| InfiniteReality2E | GE16-4 | RM9-64 | DG5-2 o DG5-8 | 64 a 1,024 | 80 a 5120 | 2000-07-01 | 2003-06-27 |
| InfiniteReality3 | GE16-4 | RM10-256 | DG5-2 o DG5-8 | 256 a 4096 | 80 a 5120 | 2000-07-01 | 2003-06-27 |
| InfiniteReality4 | GE16-4 | RM11-1024 | DG5-2 o DG5-8 | 1.024 a 16.384 | 2.560 a 163.840 | 2002-07-24 | 2005-03-31 |
| InfinitePerformance | Odisea V12 | XIO | XIO | 104 a 1664 | 128 a 2048 | 2003-07-14 | 2005-03-31 |

### Rendimiento

| Modelo | Polígonos (millones por segundo) | Relleno de píxeles (millones de píxeles por segundo) | Representación de vóxel (millones de vóxeles por segundo) |
| RealidadInfinita | 10.9 | ? | ? |
| RealidadInfinita2 | 10.9 | ? | ? |
| La realidad | 5.5 | 94 a 188 | 100 a 200 |
| RealidadInfinita2E | 13.1 a 210 | 192 a 6,100 | 200 a 6.400 |
| RealidadInfinita3 | 13.1 a 210 | 5,600 | 6,800 |
| RealidadInfinita4 | 13.1 a 210 | 10,200 | 6,800 |
| Rendimiento infinito | 18 a 288 | 6.000 | 6,800 |