Nvidia CUDA: PhysX y computación general

Introducción.

Conocido es que desde la implantación de las unidades de sombreado unificado en DirectX 10 los chips gráficos lograron prestaciones añadidas que pueden ser aplicadas a otro tipo de operaciones que llamamos cómputo general y que no es otra cosa que decir que podemos utilizarlas para ejecutar otro tipo de aplicaciones no orientadas a la generación de gráficos en pantalla. Da la casualidad que estos diseños de múltiples unidades programables tienen una efectividad espectacular en todas aquellas aplicaciones que puedan aprovechar su gran capacidad de calculo matemático en coma flotante.

Este tipo de aplicaciones suelen estar muy orientadas al mundo multimedia, tanto profesional como domestico, asi como a la investigación donde una sola grafica ofrece un potencial que antes solo se encontraban en caras estaciones de trabajo que eran más parecidas a un supercomputador que a un ordenador convencional.

El cómputo general no es exclusivo de ningún fabricante, todos al cumplir con ciertos requisitos del API de Microsoft tuvieron que adoptar este tipo de arquitecturas y de hecho actualmente existen plataformas abiertas para programación de aplicaciones de cómputo general siendo Windows 7, con DirectX 11 y DirectCompute 11, una de las plataformas idóneas para este tipo de aplicaciones. Por supuesto también existen otros APIs abiertos, muy extendidos y de futuro prometedor, como es el OpenCL, que se utiliza en cualquier plataforma, ya sea Windows, Mac o Linux, y que posiblemente acabe convirtiéndose en el OpenGL de la computación general aplicada en chips gráficos.

Existen también plataforma propietarias, con SDKs libres, como es CUDA que pertenece a Nvidia y que, salvo milagro, solo esta soportada por los chips gráficos de este fabricante. Se trata de una solución propietaria de la que cuelgan estándares más o menos establecidos en el sector como es PhysX, que se aplica al cálculo de física aplicada al videojuego. CUDA es de facto el API más extendido en la actualidad, tanto en aplicaciones profesionales, domesticas como lúdicas pero no es la única plataforma soportada por Nvidia ya que también tienen presencia en los otros APIs más importantes ya mencionados.

¿Que nos ofrece CUDA?

CUDA, que está presente en todas las graficas de la generación Geforce 8000 en adelante, nos ofrece la posibilidad de utilizar la grafica como sustituto o apoyo a la CPU central en aplicaciones concretas y especialmente diseñadas para ello. No por tener una grafica Nvidia con los controladores adecuados podremos acelerar cualquier aplicación. Esta debe estar diseñada específicamente para ello mediante alguno de los estándares que soporte la grafica en cuestión.

En la actualidad CUDA le ofrece al usuario de a pie la posibilidad de acelerar procesos multimedia, tanto de creación como de reproducción, así como modalidades de juego mejoradas con estándares como PhysX. No hay mucho mas donde rascar y tampoco hay aplicaciones añadidas que puedan verse beneficiadas de forma notable con esta capacidad añadida. En la actualidad los procesos que mas hardware requieren de un ordenador son básicamente jugar, reproducción contenidos de alta definición y crear este tipo de contenidos.

ION reproduciendo video 1080 con un consumo de CPU menor al 20%.

Cierto es que existen otras necesidades para otros usuarios pero creo que coincidiréis conmigo que actualmente cualquier ordenador de gama baja es capaz de realizar las funciones más habituales, como las funciones ofimáticas, sin necesidad de grandes capacidades de proceso. Es cuando jugamos o realizamos tareas multimedia cuando empezamos a pedir más potencia a nuestra maquina. Es por ello que los desarrollos actuales se centran principalmente en tres pilares: la computación profesional científica, la reproducción y creación multimedia de alta definición y los videojuegos de grandes requisitos técnicos.

No creo que me equivoque si digo que el primero de los pilares es por ahora uno de los grandes beneficiados y también uno de los grandes mercados por explotar para este tipo de soluciones ya que el potencial de cálculo de un chip moderno, como el RV870 de ATI o el GT300 de Nvidia, superan con creces la capacidad de cálculo de la mejor de las CPUs x86 del mercado, y por tanto ofrecen a precios razonables una capacidad de computación superior con fácil escalado, ya que podemos montar varios chips gráficos en el mismo PC, y un panorama de programación con diversas opciones todas completamente de desarrollo abierto sin tener que pagar royalties ni licencias de uso.

Comprimiendo video 1080 mediante una GTX 295.

Para ti y para mí, que no somos científicos, las mejoras van llegando en forma de física aplicada al juego, mejora en la inteligencia artificial y también en nuestra capacidad de adaptarnos a los nuevos formatos de alta definición no solo reproduciéndolos con total soltura, ya sea un PC rápido o lento, y también en su creación, conversión y adaptación. Quién de nosotros no tiene actualmente un teléfono, un reproductor portátil o consola con capacidad para reproducir video y audio pero que necesita convertir los archivos para una reproducir optima en el mismo. Para este tipo de tareas una tarjeta grafica puede aportarnos hasta 30 veces más velocidad que nuestro procesador central gracias a aplicaciones especialmente diseñadas para ello.

Ejemplos reales. Nuestras máquinas. Pruebas de rendimiento.

Tres plataformas hemos utilizado para conocer el aporte que nos ofrece CUDA a nuestro quehacer diario. Tres niveles de rendimiento para conocer las capacidades de este API. El más potente de ellos es un Quad-SLI de GTX 295 que es lo más potente, en el mercado domestico, que podemos tener con chips gráficos Nvidia. Por otro lado una veterana pero aun peleona 9800GX2 que aun puede dar guerra, con sus dos chips gráficos, a cualquier GTS 250 o GTX 260 y por ultimo una plataforma ION encarnada en un Acer Aspire Revo 3600.

Nvidia en sus controladores nos da bastante libertad a la hora de elegir que procesador grafico queremos usar para funciones de PhysX pero no para el resto de aplicaciones. Así podemos tener dos graficas en nuestro PC, aunque no estén en modos SLI, haciendo que una de ellas trabaje en el tema de gráficos y la otra se dedique a PhysX. En el SDK podemos también establecer ciertos parámetros e incluso trabajar con todos los chips gráficos disponibles pero depende del desarrollo de la aplicación que esto sea factible a la hora de la verdad. Nosotros hemos querido medir la eficiencia de chips gráficos pequeños, chips un poco más potentes, y configuraciones de alto nivel para ver si ciertas aplicaciones se aprovechan de esta capacidad añadida.

Como en todo en esto de la informática cuanto mas gastamos mas rendimiento recibimos pero en este caso no se cumple del todo ya que por ahora pocas aplicaciones son capaces de procesar conjuntamente con varios chips gráficos. Lo que si es posible es realizar varios hilos de proceso con aplicaciones preparadas para ello. BOINC, que es una aplicación de calculo distribuido, es capaz de procesar tantos hilos como GPUs tengamos en el sistema. Otras aplicaciones no nos ofrecen ese potencial pero con la entrada de las ultimas revisiones de CUDA obtendremos lo que buscamos en breve en aplicaciones de toda índole.

Conversión video con Badaboom de 1080p a formato Xbox 360 720p. Frames por Segundo.

Tiempo para finalizar tarea en horas. Los QuadSLI ademas procesan

cuatro de estas tareas de forma independiente. Una por GPU.

Ejemplo de BOINC procesado cuatro tareas simultáneamente, una por GPU. consumo de CPU del 15%.

PhysX en los juegos más modernos.

Muchos juegos actuales hacen uso de PhysX como un modo de integrar mas efectos de fisica real dentro del juego. Los efectos mas comunes son la mejora del comportamiento de las ropas mejorando su realismo en el movimiento, tambien la integracion de nieblas mas realistas, con mucho mas volumen y un comportamiento casi real, mas efectos de particulas tanto en impactos de objetos como en otros efectos atmosfericos como lluvia, nieve o incluso en las hojas arrastradas por el viento, los movimientos corporales sobretodo los ejercidos de forma indirecta por otros objetos y tambien el realismo de los liquidos mejora de forma notable. Lo que se echa de menos en muchos juegos es mas capacidad de interferir con los escenarios, mas destructividad dinamica en los escenarios y mas interactividad entre este tipo de efectos fisicos y la inteligencia artificial de los enemigos y personajes no jugadores.

Ejemplo de comportamiento de objetos en Batman Arkham Asylum.

Las nieblas son mas realistas, y se comportan de forma muy realista

acumulándose en ciertas zonas del terreno.

Darkest of Days presenta un uso casi inmaculado de PhysX.

Dispone de Benchmark exclusivo para probar este sistema y dos niveles de calidad.

El humo se acumula en las trincheras. Casi se puede tocar.

El Vesubio esta en erupción y "llueven" cenizas.

Aplicaciones multimedia CUDA.

Personalmente no soy muy amigo de la edición de video, ni de sonido y mis gustos por la reproducción de alta definición son escasos pero seguramente muchos de vosotros echéis en falta velocidad de proceso, aun teniendo un ordenador moderno, en este tipo de aplicaciones. Si este es vuestro caso estáis de enhorabuena porque si hay aplicaciones en el mercado que saquen provecho de graficas modernas esas son sin duda las destinadas a creación y reproducción de contenidos multimedia.

Conocidas por todos son aplicaciones como PowerDVD, WinDVD o CoreAVC Pro que se utilizan asiduamente para la reproducción por hardware de contenidos de alta definición como Blu-ray u otros formatos como mkv, divx, etc. Con la asistencia del hardware de nuestra grafica Nvidia o AMD. Todas estas aplicaciones hacen uso de los APIs propietarios de ambos fabricantes con mejor o peor resultado pero todas nos permiten una reproducción de gran calidad con poco aporte de la CPU del sistema.

PowerDVD es perfecto para aprovechar las CUDA, pero no abre archivos con

formatos alternativos como los MKV.

Bien conocidas por todos son las prestaciones que ofrece la plataforma ION de Nvidia en este tipo de aplicaciones que permiten al usuario reproducir contenidos de alta calidad con un hardware tan recortado como el de los netbooks y nettops que lo equipan como chipset. Los resultados son magníficos y hacen de un pequeño ordenador con un pequeño procesador toda una máquina capaz de reproducir los contenidos gráficos de más calidad.

Pero no todo en esta vida es reproducción. También hay ratos para la creación propia y si este es nuestro hobby o nuestra pesadilla en nuestra tarjeta grafica podemos encontrar nuestro mejor aliado. Todo tipo de aplicaciones de edición, creación y conversión disponen ya de soporte para usar nuestra tarjeta grafica como motor de cálculo. Para mí son realmente útiles las aplicaciones de conversión de formato que aceleran y ayudan la conversión de video y audio a formatos extendidos de reproductores como iPod, iPhone, PocketPC, Archos, etc. Con velocidad y calidad podremos convertir video mucho más rápido que usando una CPU sea o no de última generación. Claro está que si encima nuestra CPU es más potente pues más rápido el proceso pero las velocidades son aceptables incluso en la plataforma ION con procesadores Atom. Voy a daros algunos ejemplos de aplicaciones muy conocidas que nos aportan compatibilidad con chips gráficos de Nvidia y también de su competencia, AMD.

Otro tipo de aplicaciones de se están beneficiando de estas técnicas son los referentes a mejora en tiempo real de calidad de video. Nos sirven para mejorar la calidad de videos tomados en baja resolución, teléfonos móviles, etc. Dos de las aplicaciones de este tipo que tienen soporte CUDa son SimHD de Arcsoft y VReveal. Ambos son capaces de ejecutar este tipo de tareas hasta dos veces más rápido que una CPU convencional.

VReveal procesando una mejora de video en tiempo real.

Flash 10.1.

Queda muy poco para que podamos ver reproducción de contenidos Flash, uno de los medios multimedia más extendidos en la Web y motor de cientos de páginas de contenidos visuales como Youtube, Hulu, etc., tenga soporte de hardware para tarjetas graficas, en un principio solo de Nvidia. Este tipo de aporte de hardware permitirá que ordenadores con poca potencia de CPU, como la plataforma Atom, CULV o Neo, tengan el aporte de potencia necesario, desde una GPU incluso de gama baja, para la reproducción de contenidos flash de alta definición que cada vez cobran mayor importancia en páginas Web de referencia. Este tipo de aporte puede hacer que ordenadores tan demandados actualmente como son los netbooks o nettops tengan la opción de reproducir este tipo de contenidos con independencia de tener una CPU tan falta de recursos como es el procesador Atom de Intel. Eso si tendremos que depender de la plataforma Ion de Nvidia, con su 9400m integrada, por lo que perderemos algo de autonomía en beneficio de una reproducción multimedia sin peros.

Para lograr este milagro solo necesitamos una versión de flash 10.1 o superior ya que a partir de este numero de revisión siempre encontraremos soporte de hardware para usuarios de tarjetas graficas de Nvidia aunque se espera que Adobe, como ya hizo con Photoshop, aporte también estas mejoras a usuarios de tarjetas graficas AMD sobretodo teniendo en cuenta que esta aplicación no usa CUDA sino los protocolos DVXA.

A día de esta review, 7 de Octubre de 2009, aun no está publicada esta nueva versión de flash pero no me cabe la menor duda de que estará disponible en pocos días con soporte para los sistemas operativos más actuales como son Windows 7 y Windows Vista.

Fermi. GT300.

Fermi es el nombre en código del chip GT300 que Nvidia prepara para finales de Noviembre y que se presento en sociedad hace una semana. Este nuevo chip está pensado desde su base para ser una autentica bestia aplicada al computo general, duplicara con facilidad los rendimientos de generaciones anteriores, y ofrece una plataforma más sencilla, si cabe, para su programación general.

Sus 512 procesadores CUDA, su bus de memoria GDDR5, con posibilidad de memoria ECC, con 384-bit de canal asi como si cache jerárquica de dos niveles permitirán una nueva generación de tarjetas que duplicaran y triplicaran el rendimiento de las actuales en este tipo de aplicaciones. Por supuesto otro de los puntos fuertes de esta tarjeta, como deben ser todas las compatibles con DirectX 11, es en su capacidad de procesar múltiples threads simultáneas donde precisamente el Fermi desarrolla nuevas tecnologías como “gigathread” que le permite manejar miles de hilos de proceso de forma simultánea.

El futuro de Nvidia pasa también por aprovechar tanto la capacidad de sus GPUs como el poder combinado de la CPU del sistema con la GPU. De este modo se consiguen mejores rendimientos y un uso combinado de todos los recursos del ordenador. Se trabaja con estándares muy establecidos como C++ o Visual Studio para conseguir la mayor implicación de esta tecnología en todo tipo de aplicaciones.

También se dan las primeras trazas de trabajo serio en la generación de gráficos en pantalla mediante el trazado de rayos de luz más conocido como Ray Tracing. El trazado de rayos o ray tracing es un algoritmo que basa su realismo en el trazado de objetos mediante rayos proyectados desde el punto de visión donde las intersecciones marcan los objetos visibles, en estos rayos también se aplican los diferentes efectos de iluminación y sombreado mediante múltiples proyecciones con lo que se consiguen resultados muy realistas pero con un consumo de potencia de cálculo mucho más elevada que las actuales técnicas de relleno de pantalla o raster. Fermi no será capaz ofrecernos juegos con ray tracing, para eso aún quedan algunos años, pero nos dará un punto de partida en la plataforma Nvidia.

Imagen de Quake Wars renderizada mediante Ray Tracing.

Análisis y Conclusión.  

CUDA añade prestaciones interesantes a pasadas, presentes y futuras generaciones de chips gráficos Nvidia y es por ahora la plataforma de cómputo general que más aplicaciones soportan y un garante de disponer de las prestaciones más elevadas y completas tanto en juegos como en otros tipo de aplicaciones.

El presente de esta plataforma es sin duda interesante, con aplicaciones variadas y cada vez más completas, pero su futuro no esta tan claro. No esta tan claro porque no vemos en el pasado reciente señales de que APIs propietarios de fabricantes hayan finalizado en buen puerto. Al final todos han sido demolidos por estándares más abiertos o por el rodillo despiadado de los estándares marcados por Microsoft.

El tiempo dirá pero de momento sin duda Nvidia dispone de los valores añadidos de cómputo general más completos del mercado y en algunas plataformas como el Atom es prácticamente la única solución que ofrece unos resultados óptimos para un desarrollo normal del entretenimiento multimedia moderno.