G P Un Vidia

4
Alberto Perojo Parás Tecnología GPU para las tarjetas gráficas Con este trabajo se pretende dar unas nociones básicas sobre la tecnología GPU usada en las tarjetas gráficas y profundizar en la última arquitectura propuesta por nVidia para los modelos GTX200. El concepto GPU es un acrónimo utilizado para abreviar Graphics Processing Unit, que significa "Unidad de Procesado de Gráficos". Una GPU es un procesador dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos y o aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la CPU puede dedicarse a otro tipo de cálculos (como la inteligencia artificial o los cálculos mecánicos en el caso de los videojuegos). Diferencias con la CPU Una GPU implementa ciertas operaciones gráficas llamadas primitivas optimizadas para el procesamiento gráfico. Una de las primitivas más comunes para el procesamiento gráfico en 3D es el antialiasing, que suaviza los bordes de las figuras para darles un aspecto más realista. Adicionalmente existen primitivas para dibujar rectángulos, triángulos, círculos y arcos. Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos. Si bien en un computador genérico no es posible reemplazar la CPU por una GPU, hoy en día las GPU son muy potentes y pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 500MHz). Pero la potencia de las GPU y su dramático ritmo de desarrollo reciente se deben a dos factores diferentes. El primer factor es la alta especialización de las GPU, ya que al estar pensadas para desarrollar una sola tarea, es posible dedicar más silicio en su diseño para llevar a cabo esa tarea más eficientemente. Por ejemplo, las GPU actuales están optimizadas para cálculo con valores en coma flotante, predominantes en los gráficos 3D. Por otro lado, muchas aplicaciones gráficas conllevan un alto grado de paralelismo inherente, al ser sus unidades fundamentales de cálculo (vértices y píxeles) completamente independientes. Por tanto, es una buena estrategia usar la fuerza bruta en las GPU para completar más calculos en el mismo tiempo. Los modelos actuales de GPU suelen tener una media docena de procesadores de vértices (que ejecutan vertex shaders), y hasta dos o tres veces más procesadores de fragmentos o píxeles (que ejecutan fragment shaders). De este modo, una frecuencia de reloj de unos 500-600MHz (el estándar hoy en día en las GPU de más potencia), muy baja en comparación con lo ofrecido por las CPU (3.8-4 GHz en los modelos más potentes[no necesariamente más eficientes]), se traduce en una potencia de cálculo mucho mayor gracias a su arquitectura en paralelo. Una de las mayores diferencias con la CPU estriba en su arquitectura. A diferencia del procesador central, que tiene una arquitectura Eckert-Mauchly, la GPU se basa en el Modelo Circulante. Este modelo facilita el procesamiento en paralelo, y la gran segmentación que posee la GPU para sus tareas. Arquitectura de la GPU Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquéllas que procesan vértices, y aquéllas que procesan píxeles. Por tanto, se establecen el vértice y el píxel como las principales unidades que maneja la GPU. Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen. Inicialmente, a la GPU le llega la información de la CPU en forma de vértices. El primer tratamiento que reciben estos vértices se realiza en el vertex shader. Aquí se realizan transformaciones como la rotación o el movimiento de las figuras. Tras esto, se define la parte de estos vértices que se va a ver (clipping), y los vértices se transforman en píxeles mediante el proceso de rasterización. Estas etapas no poseen una carga relevante para la GPU. Donde sí se encuentra el principal cuello de botella del chip gráfico es en el siguiente paso: el pixel shader. Aquí se realizan las transformaciones referentes a los píxeles, tales como la aplicación de texturas. Cuando se ha realizado todo esto, y antes de almacenar los píxeles en la caché, se aplican algunos efectos como el antialiasing, blending y el efecto niebla. Otras unidades funcionales llamadas ROP toman la información guardada en la caché y preparan los píxeles para su visualización. También pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida en el frame buffer. Ahora hay dos opciones: o tomar directamente estos píxeles para su representación en un monitor digital, o generar una señal analógica a partir de ellos, para monitores analógicos. Si es este último caso, han de pasar por un DAC, Digital-Analog Converter, para ser finalmente mostrados en pantalla.

Transcript of G P Un Vidia

Page 1: G P Un Vidia

Alberto Perojo Parás

Tecnología GPU para las tarjetas gráficas

Con este trabajo se pretende dar unas nociones básicas sobre la tecnología GPU usada en las tarjetas gráficas y profundizar en la última arquitectura propuesta por nVidia para los modelos GTX200.

El concepto

GPU es un acrónimo utilizado para abreviar Graphics Processing Unit, que significa "Unidad de Procesado de Gráficos".

Una GPU es un procesador dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos y o aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la CPU puede dedicarse a otro tipo de cálculos (como la inteligencia artificial o los cálculos mecánicos en el caso de los videojuegos).

Diferencias con la CPU

Una GPU implementa ciertas operaciones gráficas llamadas primitivas optimizadas para el procesamiento gráfico. Una de las primitivas más comunes para el procesamiento gráfico en 3D es el antialiasing, que suaviza los bordes de las figuras para darles un aspecto más realista. Adicionalmente existen primitivas para dibujar rectángulos, triángulos, círculos y arcos. Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos.

Si bien en un computador genérico no es posible reemplazar la CPU por una GPU, hoy en día las GPU son muy potentes y pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 500MHz). Pero la potencia de las GPU y su dramático ritmo de desarrollo reciente se deben a dos factores diferentes. El primer factor es la alta especialización de las GPU, ya que al estar pensadas para desarrollar una sola tarea, es posible dedicar más silicio en su diseño para llevar a cabo esa tarea más eficientemente. Por ejemplo, las GPU actuales están optimizadas para cálculo con valores en coma flotante, predominantes en los gráficos 3D.

Por otro lado, muchas aplicaciones gráficas conllevan un alto grado de paralelismo inherente, al ser sus unidades fundamentales de cálculo (vértices y píxeles) completamente independientes. Por tanto, es una buena estrategia usar la fuerza bruta en las GPU para completar más calculos en el mismo tiempo. Los modelos actuales de GPU suelen tener una media docena de procesadores de vértices (que ejecutan vertex shaders), y hasta dos o tres veces más procesadores de fragmentos o píxeles (que ejecutan fragment shaders). De este modo, una frecuencia de reloj de unos 500-600MHz (el estándar hoy en día en las GPU de más potencia), muy baja en comparación con lo ofrecido por las CPU (3.8-4 GHz en los modelos más potentes[no necesariamente más eficientes]), se traduce en una potencia de cálculo mucho mayor gracias a su arquitectura en paralelo.

Una de las mayores diferencias con la CPU estriba en su arquitectura. A diferencia del procesador central, que tiene una arquitectura Eckert-Mauchly, la GPU se basa en el Modelo Circulante. Este modelo facilita el procesamiento en paralelo, y la gran segmentación que posee la GPU para sus tareas.

Arquitectura de la GPU

Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquéllas que procesan vértices, y aquéllas que procesan píxeles. Por tanto, se establecen el vértice y el píxel como las principales unidades que maneja la GPU.

Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen.

Inicialmente, a la GPU le llega la información de la CPU en forma de vértices. El primer tratamiento que reciben estos vértices se realiza en el vertex shader. Aquí se realizan transformaciones como la rotación o el movimiento de las figuras. Tras esto, se define la parte de estos vértices que se va a ver (clipping), y los vértices se transforman en píxeles mediante el proceso de rasterización. Estas etapas no poseen una carga relevante para la GPU.

Donde sí se encuentra el principal cuello de botella del chip gráfico es en el siguiente paso: el pixel shader. Aquí se realizan las transformaciones referentes a los píxeles, tales como la aplicación de texturas. Cuando se ha realizado todo esto, y antes de almacenar los píxeles en la caché, se aplican algunos efectos como el antialiasing, blending y el efecto niebla.

Otras unidades funcionales llamadas ROP toman la información guardada en la caché y preparan los píxeles para su visualización. También pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida en el frame buffer. Ahora hay dos opciones: o tomar directamente estos píxeles para su representación en un monitor digital, o generar una señal analógica a partir de ellos, para monitores analógicos. Si es este último caso, han de pasar por un DAC, Digital-Analog Converter, para ser finalmente mostrados en pantalla.

Page 2: G P Un Vidia

Programación de la GPU

Al inicio, la programación de la GPU se realizaba con llamadas a servicios de interrupción de la BIOS. Tras esto, la programación de la GPU se empezó a hacer en el lenguaje ensamblador específico a cada modelo. Posteriormente, se situó un nivel más entre el hardware y el software, diseñando las API (Application Program Interface), que proporcionaban un lenguaje más homogéneo para los modelos existentes en el mercado. El primer API usado ampliamente fue estándar abierto OpenGL (Open Graphics Language), tras el cuál Microsoft desarrolló DirectX.

Tras el desarrollo de APIs, se decidió crear un lenguaje más natural y cercano al programador, es decir, desarrollar un lenguajes de alto nivel para gráficos. Por ello, de OpenGL y DirectX surgieron estas propuestas. El lenguaje estándar de alto nivel, asociado a la biblioteca OpenGL es el "OpenGL Shading Language", GLSL, implementado en principio por todos los fabricantes. La empresa californiana NVidia creó un lenguage propietario llamado Cg (del inglés, "C for graphics"), con mejores resultados que GLSL en las pruebas de eficiencia. En colaboración con NVidia, Microsoft desarrolló su "High Level Shading Language", HLSL, prácticamente idéntico a Cg, pero con ciertas incompatibilidades menores.

Última GPU de nVidia

La última arquitectura desarrollada por nVidia es la GT200.

Tamaño y consecuencias

El GPU GT200 es grande, extremadamente grande y esto combinado con el hecho de que la arquitectura de GPUs es más compleja que la de un CPU, tiene una cantidad importante de consecuencias.

A nVIDIA le ha costado controlar el tamaño de sus GPUs y sus desarrollos les están comenzando a salir un poco de las manos. La razón de esto, es que mientras más grande sea el tamaño del cuadrado de silicio, se pueden obtener menos chips por cada oblea (wafer) que se procesa. Esto es obvio, pues la oblea no ha crecido en diámetro - 300mm - en muchos años. Si para el G80 cada disco tenía 121 GPUs de 484mm², siendo que el tamaño del GT200 es ahora de 576mm², la cantidad de ellos se reduce aproximadamente a 100. Junto con esto, la cantidad de chips sin defectos o en otras palabras, su rendimiento productivo (yields) disminuye debido a que las impurezas ahora amenazan a la superficie de un circuito impreso cuya área es mayor. Por ende, la cantidad de GPUs buenos se reduce en una buena cantidad con respecto a los del G80 trayendo como resultando que el costo del GT200 sea significativamente más alto para la empresa.

Adicionalmente, la cantidad de transistores en cada procesador gráfico ha aumentado a un ritmo considerablemente más rápido que el de los CPUs.Considerando que es Intel la empresa que utiliza los procesos de manufactura más modernos del mundo y no NVIDIA, se puede ver como esta última esta estresando mucho más la tecnología a su límite. Esto se demuestra de forma muy clara cuando se compara el consumo en watts de los más recientes desarrollos de ambas empresas: mientras el Intel Core 2 Extreme QX9770 consume - según documentos de la empresa - 150w, el GT200 disipa 236w, un 57% más aproximadamente. No solo esto, debido a que los transistores del GPU son en su gran mayoría unidades de procesamiento a comparación del caso de Intel en donde la mayoría se emplean en memoria cache, la cantidad de ruido eléctrico generado dentro de cada GPU está haciendo que cada vez sea más difícil que ellos logren frecuencias más elevadas. Las consecuencias de lo anterior hacen fácil preveer que NVIDIA está llegando al límite de lo que pueden hacer en un solo chip para su siguiente generación de GPUs, tanto por factibilidad como por costos.

Page 3: G P Un Vidia

Arquitectura GTX200

1. Manejo de hilos (threads)

En la arquitectura unificada de NVIDIA no existen unidades específicas que cumplan las funciones de por ejemplo, pixel shaders o vertex shaders o cualquier otro conjunto de instrucciones. La forma como se procesan estas instrucciones es por medio de unidades que asignan hilos atadas a su característica y son enviados a los streaming processors a ser procesados. Por ejemplo, si se va a procesar un programa de pixel shader, la unidad de pixel shader crea los hilos marcados con esa función para ser procesados posteriormente. Las diferencias de esta unidad entre su modo computacional y su modo gráfico se verán en el siguiente apartado.

2. Area de procesamiento principal

Un resumen de lo que hace es el siguiente: en esta área del GPU se encuentran los procesadores de hilo (streaming processors o SP) que son agrupados de 8 en 8 en multiprocesdores de flujo (streaming multiprocessors o SM) los cuales incluyen elementos adicionales dependiendo de si se usa el chip en modo computacional o gráfico. Finalmente, los SMs están agrupados de a 3 en grupos de procesamiento de hilo (thread processing clusters o TPC) que adicionalmente incluyen las unidades de texturización y el cache L1 - de primer nivel - compartido. Teniendo en cuenta que hay 10 TPCs en el GPU podemos llegar a esta sencilla ecuación: 10x3x8= 240.

Este número representa la cantidad de SPs (núcleos de procesamiento del GPU) que posee la arquitectura, un salto considerable con respecto a los 128 SPs (8 TPC x 2 SM x 8 SP) del G80.

3. ROP

Para el subsistema de ROPs (encargados de hacer el procesamiento final de los pixeles) el GT200 adiciona dos particiones más de ellas con lo cual pasa a tener 8 ROPS a comparación de 6, lo que le permite procesar hasta 32 píxeles por reloj. Esto implica que técnicamente el GT200 debería tener un rendimiento superior al aplicar filtros (de alisado de lineas y anisotrópico) en comparación a G80.

En la generación anterior, cada ROP estaba conectado a un canal de memoria de 64-bit, en esta generación se da el mismo caso, por lo que ahora el bus de memoria pasó de tener 384 bits a tener 512-bit.

Aparte de algunas otras optimizaciones menores para ciertos tipos de píxeles, los ROPs se mantienen estructuralmente iguales a los anteriores, lo cual implica que todos los modos de Anti-Aliasing / Alisado (MSAA, SSAA, AA de transparencia adaptiva y CSAA) que existían en la generación anterior, son soportados por el nuevo GPU, pero no se agregan nuevos modos.

Page 4: G P Un Vidia

4. Canales de memoria

Es interesante que NVIDIA habla de que se optimizaron las rutas críticas de memoria para que esta pueda operar a una velocidad máxima de 1,2 GHz GDDR3, algo que probablemente viene del G92 pues la velocidad de las memorias en la GeForce 8800 GTX era de 900MHz, que luego subieron a 1080MHz con la GeForce 8800 Ultra y posteriormente a 1100MHz con la GeForce 9800 GTX. Sin embargo, esto también quiere decir que el controlador de memoria está al límite de sus capacidades para GDDR3. NVIDIA cuando tuvo que decidir sobre que tecnología de memorias tendría para su siguiente GPU, decidió ser conservador manteniendo el uso de GDDR3, la cual a estas alturas está ampliamente disponible y por ende es más económica, confiando en que el mayor ancho de banda surgiría por agregar un par de controladores de memoria más en vez de depender del aumento de frecuencia de la memoria. La decisión tomada por la empresa es muy razonable pues disminuye los costos de investigación y desarrollo de un nuevo controlador de memoria, mientras se toman una mayor cantidad de tiempo en hacer las pruebas correspondientes para desarrollarlo y optimizarlo al mismo tiempo que disminuyen los costos por tarjeta de video armada.

También, NVIDIA hizo algunos ajustes en la razón o ratio de ancho de banda entre las texturas y la memoria para que esté más acorde a las cargas de trabajo actuales y futuras y así mantener a las unidades de textura siempre trabajando pues siempre los datos están disponibles.

Por otra parte, se aumentaron en 6 veces la cantidad de estructuras internas para los buffers de salida lo que hace que las operaciones de los shaders de geometría y las operaciones stream out (útiles para modo cómputo) sean considerablemente más rápidas que las del G80 y un poco más rápidas que las de la Radeon HD 3870 X2. Esto es destacable, porque en las pruebas de rendimiento que utilizaban shaders de geometría eran consistentemente más lentos los GPUs de NVIDIA. Siendo que la arquitectura del G80 tenía un rendimiento superior en todas las pruebas de rendimiento vistas en benchmarks y análisis (en donde no se emplean mucho los shaders de geometría pues estos solo fueron recién introducidos con DirectX 10 y las arquitecturas compatibles de NVIDIA y ATI) la empresa se aseguro de corregir una de las pocas cosas en la cual estaba en franca desventaja con la competencia.

El producto

El GT200 viene en dos versiones, el modelo GTX280 y el modelo GTX260. Al igual que en la generación pasada, la diferencia entre cada modelo radica en las velocidades de reloj, en que se deshabilitan dos TCPs completamente, lo que implica que disminuye el número de shaders y se deshabilita un ROP.