GPUs Comparación entre Nvidia y ATI Raúl Rodríguez del Rosario Índice Introducción ................................................................................................. 3 ¿Qué es una GPU? ....................................................................................... 4 Nvidia .......................................................................................................... 5 ATI .............................................................................................................. 7 Benchmarks ..........................................................................................….. 9 Programación de la GPU ………………………………………………... 11 OpenGL …………………………………………………………………. 12 Direct3D ………………………………………………………………… 13 Mesa3D ..................................................................................................... 14 Conclusiones ............................................................................................. 15 Bibliografía ............................................................................................... 16 Introducción Desde hace unos años la popularidad de las tarjetas gráficas ha ido en aumento, debido al gran avance de la electrónica en este apartado y la demanda del mercado de consumo. Hoy en día nos podemos referir indistintamente a lo que son las tarjetas gráficas y las GPU, aunque habrá que matizar que la tarjeta gráfica en sí es una tarjeta de expansión para un ordenador, PC o no, la cual tiene entre sus componentes: memoria de vídeo, RAMDAC, sistemas de conexión, interfaces con la placa base y como elemento principal, la GPU. El objetivo de este trabajo es aclarar que es una GPU, ver la comparación de los últimos modelos de tarjetas gráficas de la gama para el hogar de los dos grandes fabricantes, Nvidia y ATI, los métodos actuales de programación más usados para GPU y sacar unas conclusiones a la hora de adquirir, lo que es hoy en día, el componente más caro de un ordenador de sobremesa. ¿Qué es una GPU? Una GPU – Graphics Processing Unit o Unidad de Procesamiento de Gráficos – es un dispositivo específicamente dedicado para “dibujar” gráficos, se usa en computadoras personales y también en consolas de juegos. Las GPUs modernas tienen una estructura paralela que resulta más efectiva que un procesador normal para algoritmos complejos, típicos del procesamiento de gráficos, tales como transformaciones matriciales, dibujado de polígonos, transformación de vértices en distintos sistemas de coordenadas, etc. 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. figura1: GPU de ATI Actualmente se investigan los llamados “programmable shaders” como una manera de emplear las propiedades de una GPU para procesar cálculos sin que necesariamente se traten de gráficos, produciendo los llamados GPGPU – General Purpose Computing on Graphics Processing Units. Nvidia nVidia Corporation es una empresa multinacional especializada en el desarrollo de unidades de procesamiento gráfico y tecnologías de circuitos integrados para estaciones de trabajo, ordenadores personales y dispositivos móviles. Con sede en Santa Clara, California, la compañía se ha convertido en uno de los principales proveedores de circuitos integrados (CI), como unidades de procesamiento gráfico (GPU) y conjuntos de chips usados en tarjetas de gráficos en videoconsolas y placa base de computadora personal. NVidia divide sus productos en la gama baja o de sobremesa con el nombre de Geforce que es donde nos centraremos, gama media como los Quadro para profesionales dedicados a diseño asistido por ordenador (CAD) y Tesla como gama alta llegando sus precios a superar los 10.000$. El último modelo de tarjeta presentado en diciembre de 2009 fue la Geforce 310 presentando las siguientes características: ESPECIFICACIONES DE MOTOR DE GPU: SOPORTE DE PANTALLA: CUDA cores Reloj de Gráficos(MHz) Reloj de Procesador(MHz) Máxima resolución digital Máxima resolución VGA Conectores de pantalla estandar 16 589 1402 ESPECIFICACIONES DE MEMORIA: Reloj de Memoria(MHz) Config. de memoria estandar Interfaz de memoria Ancho de banda de memoria 500 512MB 64bit-DDR2 8.0 Gb/s Multimonitor HDCP HDMI Entrada de audio para HDMI 2560x1600x32bpp 2048x1536x32bpp DVI + DisplayPort + VGA (opcional) A través de adaptador (DVIHDMI o DPHDMI) interno Además hay que tener en cuenta las distintas tecnologías propias que nVidia incluye en esta tarjeta gráfica como son: CUDA: (Compute Unified Device Architecture) es una arquitectura de cómputo paralelo para fines generales que aprovecha el motor de cómputo paralelo de las (GPU) de NVIDIA para resolver muchos de los problemas de cómputo más complejos en una fracción del tiempo requerido por la CPU. ESA: (Enthusiast System Architecture) es un protocolo de monitorización de PC estándar creado para controlar y comunicar en tiempo real las condiciones operativas, acústicas, eléctricas y térmicas de los sistemas. Si el usuario lo cree preciso podrá modificar cualquier parámetro de configuración para adaptar el sistema a un rendimiento óptimo. Physx: aceleración por hardware para crear efectos de explosiones, tejidos que se pliegan y rasgan, grandes humaredas, niebla, etc. Además de otros tantos algoritmos y primitivas propios de Nvidia que tratan de sacar el máximo partido a la arquitectura de sus GPUs. NVidia muestra esta tarjeta como algo novedoso, pero realmente si miramos sus características y las comparamos con el modelo anterior GT210 vemos que no hay grandes diferencias, haciendo un simple renombrado del mismo producto e intentando venderlo como lo último en tarjetas gráficas. Tras la tremenda decepción que ha supuesto para los usuarios esta tarjeta, todas las expectativas están puestas ahora en su nueva arquitectura Fermi, de la que poco han desvelado y que se espera sea un punto y aparte con todo lo visto hasta ahora, cuya fecha de lanzamiento está prevista para marzo de 2010. figura2: Geforce GT310 de Nvidia ATI Technologies ATI Technologies Inc. era una de las mayores empresas de hardware que diseñaba procesadores gráficos, tarjetas de video y procesadores, fue comprada por AMD en el año 2006 pero mantuvo su nombre para algunos productos. Su mercado acapara todo tipo de productos para el procesamiento gráfico y multimedia, tanto para computadoras personales, como para dispositivos portátiles, videoconsolas, teléfonos móviles y televisión digital. Su fundación data del 20 de agosto de 1985 (ATI). A la empresa se le ha conocido por varios nombres. Se fundó llamándose Array Technology Inc., pero durante los primeros 5 meses se le cambió a Array Technologies Inc., el 18 de diciembre de 1985 pasó a llamarse ATI Technologies Inc., y definitivamente pasó a ser parte de AMD el 25 de octubre de 2006. Al igual que nVidia, ATI también posee varias gamas de productos como los Radeon para equipos de sobremesa, Mobility Radeon para notebooks y para profesionales como es FireGL. En nuestro caso el estudio será sobre su gama de sobremesa Radeon. Su último modelo de tarjeta presentado en noviembre de 2009, la ATI Radeon HD 5970, posee las siguientes características: · Doble GPU con un total de 4.3 billones de transistores (tecnología de 40nm) · TeraScale 2 Arquitectura Unificada de Procesamiento 3200 Unidades de Procesamiento Stream 160 Unidades de Textura 256 Unidades Z/Stencil ROP 64 Unidades de Color ROP · Interface de memoria GDDR5 · Interface de bus PCI Express 2.1 x16 · Soporte DirectX 11 Shader Model 5.0 DirectCompute 11 Unidad de Hardware programmable de teselación Aceleración multi-threading Compresión de texturas HDR Transparencias en orden independiente Al igual que su competidor directo, ATI también presenta una serie de prestaciones que incluye en esta tarjeta, siendo las principales: Eyefinity: tecnología avanzada de múltiples pantallas, compatibles con la última generación de DirectX 11, posee conectividad DisplayPort que hace posible que una sola GPU admita hasta seis salidas de pantalla independientes al mismo tiempo. Impulsa la productividad diaria y facilita la multitarea con una enorme ampliación del espacio de trabajo visual. Utiliza hasta seis pantallas de alta resolución independientes de forma simultánea e independiente, configuradas de manera flexible en varias combinaciones de orientaciones horizontales y verticales. CrossfireX: es el nombre dado al sistema de doble GPU de ATI/AMD que fue diseñado como contrapartida al SLI de nVidia, pionera en los sistemas de GPU múltiples. Este sistema permite, utilizando una placa certificada Crossfire, acoplar hasta cuatro tarjetas gráficas que soporten dicha tecnología en ranuras PCIe x16. ATI Stream: es un conjunto de tecnologías avanzadas de hardware y software que permiten a los procesadores gráficos (GPU) de AMD, trabajando en conjunto con las unidades centrales del sistema (CPU), acelerar las aplicaciones más allá de los gráficos tradicionales y de procesamiento de vídeo. Esto permite a las plataformas ejecutar las tareas computacionalmente intensivas de manera más eficiente. Es el equivalente a CUDA en Nvidia. El cerebro de esta tarjeta gráfica son los chips RV870 con unas características, tales como un total de 1200 SPUs (Stream Processors Units), dividido en 12 unidades SIMD, cada unidad SIMD trae 100 SPUs, ( 12 Núcleos SIMD, 20 SP, 5 SPU), a diferencia del RV770 que contaba con 10 SIMD, cada uno con 80 SPUs, (10 Nucleos SIMD, 16 SP, 5 SPU). Entonces se puede concluir que los ingenieros de ATI solo aumentaron la cantidad de SPUs aumentando las unidades SIMD, y están dando soporte a DX11 y Shader Model 5.0. El RV870 presentaría 48 TMUs a diferencia del RV770 que tiene 32 TMUs. Hay que aclarar que las TMU son unos componentes de las actuales GPU que hacen posible rotar y redimensionar un bitmap y recolocarlo en un plano arbitrario de un objeto 3D como una textura. En las tarjetas actuales está implementada como una etapa más del pipeline del procesador gráfico. Con esta tarjeta ATI se ha puesto a la cabeza del mercado de tarjetas gráficas, aplaudida por muchos foros de usuarios y páginas especializadas en electrónica e informática y asignándole el puesto de mejor tarjeta gráfica del mundo. figura3: ATI Radeon HD 5970 Benchmarks Un benchmark es el resultado de la ejecución de un programa informático o un conjunto de programas en una máquina, con el objetivo de estimar el rendimiento de un elemento concreto o la totalidad de la misma, y poder comparar los resultados con máquinas similares. Un benchmark puede ser utilizado en cualquiera de sus componentes, y en nuestro caso será para la tarjeta gráfica. Como es sabido, los tipos de benchmarks son sintéticos, es decir, especialmente diseñadas para medir el rendimiento de un componente individual de un ordenador, y los de aplicaciones (Dhrystone por ejemplo) que están basados en aplicaciones reales. En el caso de las tarjetas gráficas, los benchmarks de aplicaciones más comunes van a ser videojuegos, que exijan a la tarjeta grandes prestaciones debido al realismo y la cantidad de efectos especiales que despliegan en pantalla. Para la tarjeta HD Radeon 5970 de ATI hay multitud de benchmarks en la red, haciendo comparaciones con modelos anteriores de la misma casa y también con el modelo Geforce GTX295 de Nvidia, pero todavía no con el último modelo de este fabricante que es la tarjeta GT310 (primera de la serie 300). A continuación se muestran diferentes benchmarks: figura4: benchmark Jane Nash de 3Dmark Vantage A 3Dmark Vantage se le considera por muchos un test sintético pero se ha terminado por imponer en el mundo del hardware para PC. Dispone de 2 pruebas principales que simulan una situación de juego, en ellas se basa principalmente la puntuación de GPU que da el programa. La primera de ellas “Jane Nash” comprueba aspectos fundamentales como la iluminación compleja de superficies con refracción y reflexión de la luz, física simulada en la propia GPU y colisión de mapas de renderizado mediante técnicas de física. Además en la página de Tom´s Hardware podemos encontrar diferentes tests para esta tarjeta usando diferentes juegos, usando como medida principal las imágenes por segundo mostradas en pantalla. Debajo se muetra el test hecho con el juego Grand Theft Auto 4 con un nivel de detalles muy alto, sin usar antialliasing: figura5: test para ATI Radeon HD 5970 con el juego GTA-IV Programación de la GPU En las primeras tarjetas gráficas, 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. DP3 RSQ MUL DP3 RSQ MUL DP3 MAX MUL TEX MUL r0.x, f[TEX0], f[TEX0]; r0.x, r0.x; r0, r0.x, f[TEX0]; r1.x, f[TEX1], f[TEX1]; r1.x, r1.x; r1, r1.x, f[TEX1]; r0, r0, r1; r0.x, r0.x, 1.0; r0, r0.x, DIFFUSE; r1, f[TEX1], 0, 2D; r0, r0, r1; figura6: ejemplo de código ensamblador de GPU OpenGL Desde el punto de vista del programador OpenGL es una API para interactuar con dispositivos gráficos y aceleradoras 3D. La interfaz consiste en más de 250 funciones diferentes que pueden usarse para dibujar escenas tridimensionales complejas a partir de primitivas geométricas simples, tales como puntos, líneas y triángulos. Tambien hay que tener claro que OpenGL es una librería gráfica, no posee funciones para el control de Audio, Red o Control de Entrada. Fue desarrollada originalmente por Silicon Graphics Inc. (SGI) en 1992 y se usa ampliamente en CAD, realidad virtual, representación científica, visualización de información y simulación de vuelo. También se usa en desarrollo de videojuegos, donde compite con Direct3D en plataformas Microsoft Windows. Las principales posibilidades que nos ofrece son: · Primitivas geométricas y raster: Nos permite utilizar todas las primitivas geométricas básicas: puntos, lineas, polígonos. Y del raster: un bitmap, imagen. · Â-splines: Las B-splines son usadas para dibujar lineas curvas. · Transformaciones de vista y modelo: Gracias a estas transformaciones podemos facilmente transladar, rotar y escalar los objetos dentro de la escena y a su vez mover la cámara. · Trabajar con el color: OpenGL nos permite operar con colores en modo RGBA (redgreen-blue-alpha) o usando Modo Indexado, donde los colores se seleccionan desde una paleta. · Eliminación de lineas y superficies ocultas: Por medio del algoritmo Z-Buffer · Doble buffer: OpenGL nos permite utilizar un buffer o dos. El buffer doble es usado para eliminar el parpadeo de las animaciones. Cuando se está mostrando un frame en el buffer primario el siguiente se dibuja en el double buffer y cuando está terminado se copia al buffer primario, así se eliminan esos parpadeos. · Mapeado de textura: Algo vital en cualquier API gráfica 3D · Antialiasing: Nos permite suavizar los bordes de polígonos y lineas. Este suavizado se realiza cambiando la intensidad de los pixels adyacentes a la linea que procesamos consiguiendo un efecto de "difuminación" con la consiguiente eliminación de esos zigzag tan desagradables · Luces: Nos permite establecer la fuente de la luz, su posición, su intensidad, color... · Efectos atmosféricos: Por ejemplo niebla o humo. · Transparencia. · Display List. Direct3D Direct3D es uno de los múltiples componentes que contiene la API DirectX de Windows. Se le podría situar al nivel del GDI de Windows, presentando un nivel de abstracción entre una aplicación de gráficos 3D y los drivers de la tarjeta gráfica (véase gráfico adjunto). Con arquitectura basada en el COM de Microsoft, la mayor ventaja que presenta Direct3D frente al GDI es que Direct3D se comunica directamente con los drivers de pantalla, consiguiendo mejores resultados en la representación de los gráficos por pantalla que aquel. Direct3D está compuesto por dos grandes APIs. El modo retenido y el modo inmediato. El modo inmediato da soporte a todas las primitivas de procesamiento 3D que permiten las tarjetas gráficas (luces, materiales, transformaciones, control de profundidad, etc). El modo retenido, construido sobre el anterior, presenta una abstracción de nivel superior ofreciendo funcionalidades preconstruidas de gráficos como jerarquías o animaciones. El modo retenido ofrece muy poca libertad a los desarrolladores, siendo el modo inmediato el que más se usa. Direct3D define un proceso en diferentes etapas, o rendering pipeline. Como entrada a dicho proceso tenemos los datos del modelo de la escena: Vértices, Primitivas y Texturas. Como resultado obtenemos la imagen renderizada o frame. Como se muestra a continuación el pipeline de este API es: Mesa 3D Mesa es una implementación de código abierto de la especificación OpenGL - un sistema para la prestación de gráficos 3D interactivos. Mesa no puede ser llamada una implementación de OpenGL porque no se ha podido obtener la licencia de OpenGL de SGI. Aparte de este problema, se puede encontrar en Mesa una alternativa totalmente válida para OpenGL. Una variedad de controladores de dispositivo permiten a Mesa ser usado en muchos entornos diferentes que van desde la emulación de software para completar la aceleración de hardware para las GPU modernas. Mesa también está vinculado a varias proyectos de código abierto como: Direct Rendering Infrastructure y X.org para proporcionar soporte de OpenGL a los usuarios de X en Linux, FreeBSD y otros sistemas operativos. Conclusiones La tarjeta gráfica es hoy en día el componente más caro de un PC y es también el que más rápidamente se queda obsoleto. Un lector de DVD, un disco duro o la memoria RAM, además de comparativamente más baratos pueden mantenerse en nuestro equipo durante años. Sin embargo una tarjeta gráfica difícilmente podrá durarnos más de dos, al menos si lo que queremos es disfrutar de los últimos juegos en su máximo esplendor. Cualquier tarjeta es capaz de manejar aplicaciones ofimáticas con soltura, son únicamente los videojuegos los que exigen mayor rendimiento gráfico y mantener siempre actualizado este componente. Elegir tarjeta es un compromiso entre velocidad, calidad de imagen y precio. No conviene entusiasmarse en un principio por la potencia y sí ser realistas. De nada sirve una tarjeta capaz de mover con soltura resoluciones panorámicas de 1600x1050 píxeles si nuestro monitor de 17 pulgadas no sobrepasa una resolución de 1280x1024. Tampoco resultan útiles velocidades de actualización de imagen de 80 fps (imágenes por segundo) cuando podemos engañar al ojo con 24 (como el cine nos enseña). La convención suele ser recomendar los 35 fps como el ideal para jugar. Dada la constante evolución del mercado tanto a nivel de hardware como de software, en cualquier caso se hace necesario actualizar la tarjeta periódicamente. Mejor gastar 200 euros cada dos años que 400 cada tres. Bibliografía http://www.nvidia.es/page/home.html http://www.amd.com/es/Pages/AMDHomePage.aspx http://www.opengl.org/ http://usuarios.lycos.es/andromeda_studios/paginas/tutoriales/tutgl001.htm http://www.mesa3d.org/ http://www.tomshardware.com/us/#redir http://www.wikipedia.org/ http://www.futuremark.com/