TeraScale (microarquitectura)
# TeraScale (microarquitectura)

TeraScale es el nombre en clave de una familia de microarquitecturas de unidades de procesamiento de gráficos desarrolladas por ATI Technologies/AMD y su segunda microarquitectura que implementa el modelo de sombreado unificado siguiendo a Xenos. TeraScale reemplazó las antiguas microarquitecturas de tubería fija y compitió directamente con la primera microarquitectura de sombreado unificado de Nvidia llamada Tesla.

TeraScale se utilizó en HD 2000 fabricado en 80 nm y 65 nm, HD 3000 fabricado en 65 nm y 55 nm, HD 4000 fabricado en 55 nm y 40 nm, HD 5000 y HD 6000 fabricados en 40 nm. TeraScale también se usó en las unidades de procesamiento acelerado de AMD con el nombre en código "Brazos", "Llano", "Trinity" y "Richland". TeraScale incluso se encuentra en algunas de las marcas de tarjetas gráficas exitosas.

TeraScale es una arquitectura VLIW SIMD, mientras que Tesla es una arquitectura RISC SIMD, similar al sucesor de TeraScale, Graphics Core Next. TeraScale implementa HyperZ.

Un generador de código LLVM (es decir, un back-end del compilador) está disponible para TeraScale, pero parece que falta en la matriz de LLVM. Por ejemplo Mesa 3D hace uso de él.

## TeraScale 1 (VLIW)

En SIGGRAPH 08 en diciembre de 2008, el empleado de AMD, Mike Houston, describió parte de la microarquitectura TeraScale.

En FOSDEM09, Matthias Hopf, del socio tecnológico de AMD, SUSE Linux, presentó una diapositiva sobre la programación del controlador de código abierto para el R600.

### Sombreadores unificados

Las arquitecturas de GPU anteriores implementaron canalizaciones fijas, es decir, había distintos procesadores de sombreado para cada tipo de sombreador . TeraScale aprovecha muchos procesadores de sombreadores flexibles que se pueden programar para procesar una variedad de tipos de sombreadores, lo que aumenta significativamente el rendimiento de la GPU (dependiendo de la combinación de instrucciones de la aplicación, como se indica a continuación). El núcleo R600 procesa sombreadores de vértices, geometría y píxeles como se describe en la especificación Direct3D 10.0 para Shader Model 4.0, además de la compatibilidad completa con OpenGL 3.0.

La nueva funcionalidad de sombreado unificado se basa en una arquitectura de palabra de instrucción muy larga (VLIW) en la que el núcleo ejecuta operaciones en paralelo.

Un grupo de sombreadores está organizado en 5 unidades de procesamiento de flujo. Cada unidad de procesamiento de flujo puede retirar una instrucción MAD (o ADD o MUL) de coma flotante de precisión simple terminada por reloj, producto escalar (DP y casos especiales mediante la combinación de ALU) y ADD entero. La quinta unidad es más compleja y además puede manejar funciones trascendentales especiales como seno y coseno. Cada grupo de sombreadores puede ejecutar 6 instrucciones por ciclo de reloj (pico), que consta de 5 instrucciones de sombreado más 1 rama.

En particular, la arquitectura VLIW trae consigo algunos desafíos clásicos inherentes a los diseños de VLIW, a saber, el de mantener un flujo de instrucción óptimo. Además, el chip no puede co-emitir instrucciones cuando una depende de los resultados de la otra. El rendimiento de la GPU depende en gran medida de la combinación de instrucciones que utiliza la aplicación y de qué tan bien el compilador en tiempo real del controlador puede organizar dichas instrucciones.

El núcleo R600 incluye 64 grupos de sombreadores, mientras que los núcleos RV610 y RV630 tienen 8 y 24 grupos de sombreadores respectivamente.

### Teselación de hardware

TeraScale incluye varias unidades capaces de realizar teselaciones. Son similares a las unidades programables de la GPU Xenos que se usa en Xbox 360.

La teselación se especificó oficialmente en las principales API a partir de DirectX 11 y OpenGL 4. Las GPU basadas en TeraScale 1 (series HD 2000, 3000 y 4000) solo son compatibles con Direct3D 10 y OpenGL 3.3 y, por lo tanto, implementan un principio de teselación diferente que utiliza extensiones API específicas del proveedor. Las GPU basadas en TeraScale 2 (a partir de la serie Radeon HD 5000) fueron las primeras en ajustarse a la técnica de teselación de Direct3D 11 y OpenGL 4.0. Aunque el teselado TeraScale 1 tiene un diseño más simple, AMD lo describe como un subconjunto del estándar de teselado posterior.

Las unidades de teselado TeraScale permiten a los desarrolladores tomar una malla poligonal simple y subdividirla utilizando una función de evaluación de superficie curva. Existen diferentes formas de teselado, como las superficies de Bézier con N-patches, B-splines y NURBS, y también algunas técnicas de subdivisión de la superficie, que suelen incluir mapas de desplazamiento con algún tipo de textura. Esencialmente, esto permite aumentar drásticamente la densidad de polígonos de un modelo simple y de pocos polígonos en tiempo real con un impacto muy pequeño en el rendimiento. Scott Wasson de Tech Report señaló durante una demostración de AMD que el modelo resultante era tan denso con millones de polígonos que parecía sólido.

El teselado TeraScale recuerda a ATI TruForm, el nombre de marca de una de las primeras unidades de teselado de hardware utilizada inicialmente en la Radeon 8500.

ATI TruForm recibió poca atención por parte de los desarrolladores de software. Algunos juegos (como Madden NFL 2004, Serious Sam, Unreal Tournament 2003 y 2004, y extraoficialmente Morrowind), incluían soporte para la tecnología de teselado de ATI. Una adaptación tan lenta tiene que ver con el hecho de que no era una característica compartida con las GPU de NVIDIA, ya que habían implementado una solución de teselación de la competencia utilizando parches Quintic-RT que habían logrado incluso menos apoyo de los principales desarrolladores de juegos. Dado que la GPU de Xbox 360 se basa en la arquitectura de ATI, Microsoft vio la teselación de superficie acelerada por hardware como una característica importante de la GPU. Un par de años más tarde, la función de teselado se hizo obligatoria con el lanzamiento de DirectX 11 en 2009.

Si bien el principio de teselado introducido con TeraScale no formaba parte de los requisitos de OpenGL 3.3 o Direct3D 10.0, y los competidores como la serie GeForce 8 carecían de hardware similar, Microsoft ha agregado la función de teselado como parte de sus planes futuros de DirectX 10.1. Finalmente, Microsoft introdujo la teselación como una capacidad requerida no con DirectX 10.1 sino con DirectX 11.

El procesador geométrico GCN es la solución más actual de AMD (que adquirió el negocio de GPU de ATI) para realizar teselaciones utilizando la GPU.

### Procesador de despacho con ultra subprocesos

Aunque la R600 es una desviación significativa de los diseños anteriores, aún comparte muchas características con su predecesora, la Radeon R520. El procesador de despacho Ultra-Threaded es un componente arquitectónico importante del núcleo R600, tal como lo fue con las GPU Radeon X1000. Este procesador administra una gran cantidad de subprocesos en curso de tres tipos distintos (sombreadores de vértices, geometría y píxeles) y cambia entre ellos según sea necesario. Con una gran cantidad de subprocesos administrados simultáneamente, es posible reorganizar el orden de los subprocesos para utilizar los sombreadores de manera óptima. En otras palabras, el procesador de despacho evalúa lo que pasa en las otras partes del R600 e intenta mantener la eficiencia de procesamiento lo más alta posible. También hay niveles más bajos de gestión; cada matriz SIMD de 80 procesadores de flujo tiene su propio secuenciador y árbitro. El árbitro decide qué subproceso procesar a continuación, mientras que el secuenciador intenta reordenar las instrucciones para obtener el mejor rendimiento posible dentro de cada subproceso.

### Texturizado y suavizado

El texturizado y el resultado final a bordo del núcleo R600 son similares pero también distintos a los del R580. R600 está equipado con 4 unidades de textura que están desacopladas (independientes) del núcleo del shader, como en las GPU R520 y R580. Las unidades de salida de renderizado (ROP) de la serie Radeon HD 2000 ahora realizan la tarea de suavizado multimuestra (MSAA) con cuadrículas de muestra programables y un máximo de 8 puntos de muestra, en lugar de usar sombreadores de píxeles como en la serie Radeon X1000. También es nueva la capacidad de filtrar texturas FP16, popular con la iluminación HDR, a toda velocidad. ROP también puede realizar filtrado trilineal y anisotrópico en todos los formatos de textura. En R600, esto totaliza 16 píxeles por reloj para texturas FP16, mientras que las texturas FP32 de mayor precisión filtran a la mitad de la velocidad (8 píxeles por reloj).

Las capacidades de suavizado son más sólidas en R600 que en la serie R520. Además de la capacidad de realizar 8 × MSAA, desde 6 × MSAA en el R300 hasta el R580, el R600 tiene un nuevo modo de suavizado de filtro personalizado (CFAA). CFAA se refiere a una implementación de filtros sin cuadro que miran los píxeles alrededor del píxel en particular que se procesa para calcular el color final y suavizar la imagen. CFAA se realiza mediante sombreador, en lugar de en los ROP. Esto brinda una capacidad de programación muy mejorada porque los filtros se pueden personalizar, pero también puede generar posibles problemas de rendimiento debido al uso de recursos de sombreado. A partir del lanzamiento del R600, CFAA utiliza filtros tipo carpa anchos y angostos. Con estos, las muestras de fuera del píxel que se procesa se ponderan linealmente en función de su distancia desde el centroide de ese píxel, con la función lineal ajustada en función del filtro ancho o estrecho elegido.

### Controladores de memoria

Los controladores de memoria están conectados a través de un bus de anillo bidireccional interno que envuelve el procesador. En Radeon HD 2900, es un bus de anillo bidireccional de 1024 bits (512 bits de lectura y 512 bits de escritura), con 8 canales de memoria de 64 bits para un ancho de bus total de 512 bits en la 2900 XT; en Radeon HD 3800, es un bus de anillo de 512 bits; en Radeon HD 2600 y HD 3600, es un bus de anillo de 256 bits; En Radeon HD 2400 y HD 3400, no hay bus de anillo.

### Actualización de media generación

La serie vio una actualización de media generación con troquel retráctil (55 nm) variantes: RV670, RV635 y RV620. Todas las variantes admiten PCI Express 2.0, DirectX 10.1 con funciones Shader Model 4.1, decodificador de video unificado (UVD) ATI dedicado para todos los modelos y tecnología PowerPlay para tarjetas de video de escritorio.

Excepto la serie Radeon HD 3800, todas las variantes admitían 2 salidas DisplayPort integradas, que admitían pantallas de 24 y 30 bits para resoluciones de hasta 2560 × 1600. Cada salida incluía 1, 2 o 4 carriles por salida, con una tasa de datos de hasta 2,7 Gbit/s por carril.

ATI afirmó que la compatibilidad con DirectX 10.1 puede mejorar el rendimiento y la eficiencia de procesamiento con un error de redondeo reducido (0,5 ULP comparado con error promedio 1.0 ULP como error tolerable), mejores detalles y calidad de imagen, iluminación global (una técnica utilizada en películas animadas y más mejoras en los sistemas de juego de consumo, por lo que brinda una experiencia de juego más realista.)

### Tarjetas de video

* Serie Radeon HD 2000
* Serie Radeon HD 3000
* Serie Radeon HD 4000

## TeraScale 2 (VLIW5)

TeraScale 2 (VLIW5) se introdujo con las GPU de la serie Radeon HD 5000 en la generación "Evergreen".

En HPG10, Mark Fowler presentó "Evergreen" y afirmó que, por ejemplo, 5870 (Cypress), 5770 (Juniper) y 5670 (Redwood) admiten una resolución máxima de 6 veces 2560 × 1600 píxeles, mientras que 5470 (Cedar) admite 4 veces 2560 × 1600 píxeles, importante para la compatibilidad con varios monitores AMD Eyefinity.

Con el lanzamiento de Cypress, la arquitectura del motor de gráficos Terascale se actualizó con el doble de núcleos de transmisión, unidades de textura y unidades ROP en comparación con el RV770. La arquitectura de los núcleos de transmisión prácticamente no ha cambiado, pero agrega soporte para las capacidades de DirectX 11/ DirectCompute 11 con nuevas instrucciones. También similar al RV770, cuatro unidades de textura están vinculadas a 16 núcleos de flujo (cada uno tiene cinco elementos de procesamiento, lo que hace un total de 80 elementos de procesamiento). Esta combinación de se conoce como núcleo SIMD.

A diferencia de la predecesora Radeon R700, como DirectX 11 exige un control total del desarrollador sobre la interpolación, se eliminaron los interpoladores dedicados y se confiaron en cambio en los núcleos SIMD. Los núcleos de flujo pueden manejar la instrucción de suma y multiplicación fusionada (FMA) de mayor precisión de redondeo en precisión simple y doble, lo que aumenta la precisión sobre la suma y multiplicación (MAD) y cumple con el estándar IEEE 754-2008. La suma de instrucciones de diferencias absolutas (SAD) se ha agregado de forma nativa a los procesadores. Esta instrucción se puede utilizar para mejorar en gran medida el rendimiento de algunos procesos, como la codificación y transcodificación de video en el motor 3D. Cada núcleo SIMD está equipado con 32 Compartir datos locales KiB y 8 kiB de caché L1, mientras que todos los núcleos SIMD comparten 64 KiB de datos globales.

### Controlador de memoria

Cada controlador de memoria se vincula a dos ROP cuádruples, uno por canal de 64 bits y 512 dedicado Caché KiB L2.

### Ahorro de energía

Se admite AMD PowerPlay, consulte allí.

### Chips

* Chips Evergreen:
   * Cedar RV810
   * Cypress RV870
   * Hemlock R800
   * Juniper RV840
   * Redwood RV830
* Chips Northern Islands:
   * Barts RV940
   * Caicos RV910
   * Turks RV930
* APU que incluyen un TeraScale 2 IGP:
   * Llano
   * Ontario
   * Zacate

## TeraScale 3 (VLIW4)

TeraScale 3 (VLIW4) reemplaza los diseños VLIW de 5 vías anteriores con un diseño VLIW de 4 vías. El nuevo diseño también incorpora una unidad de mosaico adicional para mejorar el rendimiento de Direct3D 11.

TeraScale 3 se introduce en las tarjetas gráficas de la marca Radeon HD 6900 y también se implementa en las APU Trinity y Richland.

### Ahorro de energía

AMD PowerTune, escalado dinámico de frecuencia para GPU, se presentó con la serie Radeon HD 6900 el 15 de diciembre de 2010 y ha experimentado un desarrollo continuo, como se documenta en algunas reseñas de AnandTech.

### Chips

* Chips Northern Islands:
   * Cayman RV970
   * Antilles R900
   * Trinity y Richland incluyen un TeraScale 3 IGP

## Sucesor

En HPG11 en agosto de 2011, los empleados de AMD Michael Mantor (Senior Fellow Architect) y Mike Houston (Fellow Architect) presentaron Graphics Core Next, la microarquitectura que sucede a TeraScale.

## Comparación de chips TeraScale

| Microarquitectura | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 1 | TeraScale 2 | TeraScale 2 | TeraScale 2 | TeraScale 2 | TeraScale 2 | TeraScale 2 | TeraScale 2 | TeraScale 3 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| $Chip^1$ | R600 | RV610 | RV620 | RV630 | RV635 | RV670 | RV710 | RV711 | RV730 | RV740 | RV770 | RV790 | Cedar (RV810) | Redwood (RV830) | Juniper (RV840) | Cypress (RV870) | Caicos (RV910) | Turks (RV930) | Barts (RV940) | Cayman (RV970) |
| Nombre en clave | Pele | Laka | Koopa | Shaka | Wario | Boom | Luigi | Luigi | Mario | Walden | Wekiva | Spartan | ? | ? | ? | ? | ? | ? | Victoria | ? |
| Variantes del chip | | M72 M74 | M82 | M76 | M86 | M88 | M92 | M93 | M96 | M97 | M98 | | Park Robson | Capilano Madison Pinewood | Broadway Granville | Hemlock Lexington | Seymour | Onega Thames Whistler | Blackcomb | Antilles |
| Fabricación (nm) | 80 | 65 | 55 | 65 | 55 | 55 | 55 | 55 | 55 | 40 | 55 | 55 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 |
| Tamaño del chip $(mm^2)$ | 420 | 85 / 82 (M74) | 67 | 153 | 135 | 192 | 73 | 73 | 146 | 137 | 256 | 282 | 59 | 104 | 166 | 334 | 67 | 118 / 104 (Thames, Whistler) | 255 / 212 (Blackcomb) | 389 |
| Transistores (millones) | 720 | 180 | 181 | 390 | 378 | 666 | 242 | 242 | 514 | 826 | 956 | 959 | 292 | 627 | 1,040 | 2,154 | 370 | 716 | 1,700 | 2,640 |
| Densidad de transistores $(MTr/mm^2)$ | 1.7 | 2.1 / 2.2 (M74) | 2.7 | 2.5 | 2.8 | 3.5 | 3.3 | 3.3 | 3.5 | 6.0 | 3.7 | 3.4 | 4.9 | 6.0 | 6.3 | 6.4 | 5.5 | 6.1 / 6.9 (Thames, Whistler) | 6.7 / 8.0 (Blackcomb) | 6.8 |
| Unidades de cómputo | 4 | 2 | 2 | 3 | 3 | 4 | 1 | 1 | 4 | 8 | 10 | 10 | 2 | 5 | 10 | 20 / 5 (Lexington) | 2 | 6 | 14 | 24 |
| Hilos de proceso | 16 | 4 | 4 | 8 | 8 | 16 | 8 | 8 | 32 | 32 | 40 | 40 | 8 | 20 | 40 | 80 / 20 (Lexington) | 8 | 24 | 56 | 96 |
| Procesadores de flujo | 320 | 40 | 40 | 120 | 120 | 320 | 80 | 80 | 320 | 640 | 800 | 800 | 80 | 400 | 800 | 1600 / 400 (Lexington) | 160 | 480 | 1120 | 1536 |
| Unidades de mapeo de texturas | 16 | 4 | 4 | 8 | 8 | 16 | 8 | 8 | 32 | 32 | 40 | 40 | 8 | 20 | 40 | 80 / 20 (Lexington) | 8 | 24 | 56 | 96 |
| Unidad de salida de renderizado | 16 | 4 | 4 | 4 | 4 | 16 | 4 | 4 | 8 | 16 | 16 | 16 | 4 | 8 | 16 | 32 / 8 (Lexington) | 4 | 8 | 32 | 32 |
| Z/Stencil OPS | 32 | 8 | 8 | 8 | 8 | 32 | 4 | 4 | 32 | 64 | 64 | 64 | 4 | 40 | 40 | 40 | 16 | 32 | 40 | 128 |
| Caché L1 (KB) | 32 per 4 SPs (Procesadores de flujo) | 32 per 4 SPs (Procesadores de flujo) | 32 per 4 SPs (Procesadores de flujo) | 32 per 4 SPs (Procesadores de flujo) | 32 per 4 SPs (Procesadores de flujo) | 32 per 4 SPs (Procesadores de flujo) | 16 per CU (Unidades de cómputo) | 16 per CU (Unidades de cómputo) | 16 per CU (Unidades de cómputo) | 16 per CU (Unidades de cómputo) | 16 per CU (Unidades de cómputo) | 16 per CU (Unidades de cómputo) | 8 por CU | 8 por CU | 8 por CU | 8 por CU | 8 por CU | 8 por CU | 8 por CU | 8 por CU |
| Caché L2 (KB) | 256 | 32 | 64 | 64 | 128 | 256 | 64 | 64 | 128 | 128 | 256 | 256 | 128 | 256 | 256 | 512 / 256 (Lexington) | 128 | 256 | 512 | 512 |
| Motor central del Display | 2.0 | 2.0 | 3.0 | 2.0 | 3.0 | 2.0 | 3.2 | 3.2 | 3.2 | 3.2 | 3.1 | 3.1 | 4.0 | 4.0 | 4.0 | 4.0 | 5.0 | 5.0 | 5.0 | 5.0 |
| Decodificador de video unificado | Avivo HD | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.2 | 2.2 | 2.2 | 2.2 | 2.0 | 2.0 | 2.3 | 2.3 | 2.3 | 2.3 | 3.1 | 3.1 | 3.1 | 3.1 |
| Lanzamiento inicial | Mayo 2007 | Enero 2007 | Enero 2008 | Junio 2007 | Enero 2008 | Noviembre 2007 | Septiembre 2008 | Mayo 2010 | Septiembre 2008 | Abril 2009 | Junio 2008 | Abril 2009 | Febrero 2010 | Enero 2010 | Octubre 2009 | Septiembre 2009 | Febrero 2011 | Febrero 2011 | Octubre 2010 | Diciembre 2010 |
| Serie | R600 (Radeon HD 2000 / Radeon HD 3000) | R600 (Radeon HD 2000 / Radeon HD 3000) | R600 (Radeon HD 2000 / Radeon HD 3000) | R600 (Radeon HD 2000 / Radeon HD 3000) | R600 (Radeon HD 2000 / Radeon HD 3000) | R600 (Radeon HD 2000 / Radeon HD 3000) | R700 (Radeon HD 4000) | R700 (Radeon HD 4000) | R700 (Radeon HD 4000) | R700 (Radeon HD 4000) | R700 (Radeon HD 4000) | R700 (Radeon HD 4000) | Evergreen (Radeon HD 5000) | Evergreen (Radeon HD 5000) | Evergreen (Radeon HD 5000) | Evergreen (Radeon HD 5000) | Northern Islands (Radeon HD 6000) | Northern Islands (Radeon HD 6000) | Northern Islands (Radeon HD 6000) | Northern Islands (Radeon HD 6000) |
| Referencias | | [31][32] [33][34] | [35][36] [37] | [38][39] [40] | [41][42] [43] | [44][45] [46] | [47][48] [49] | [50] [51] | [52][53] [54] | [55][56] [57] | [58][59] [60] | | [63][64] [65][66] | [67][68] [69][70][71] | [72] [73][74] | [75][76] [77][78] | [79][80] [81] | [82][83] [84][85][86] | [87][88] [89] | [90][91] [92] |

$^1$ No se incluyen chips Duo como R680 (2x RV670) y R700 (2x RV770).

