sábado, 19 de octubre de 2013

Novedades de la semana en hardware gráfico

Esta semana ha habido algunas novedades de interés. Presentación de la serie R9 de tarjetas gráficas de AMD y el evento en Montreal de NVIDIA donde la compañía ha presentado nuevas tecnologías. Esto incluye algunos vídeos y también análisis de rendimiento. Aprovecharé para describir un poco la motivación para investigar acerca de estas cosas.
Empezaremos hablando de NVIDIA. Los días 17 y 18 de octubre de 2013 esta compañía ha hospedado un evento en Montreal en el cual ha expuesto novedades tecnológicas ideadas por dicha empresa. De lo primero que vamos a hablar es de «G-Sync». Muchos jugadores de PC seguramente habrán experimentado problemas de micro parones y de fotogramas partidos (una parte de la pantalla con un fotograma anterior y la otra parte con el nuevo fotograma). Esto es debido a la variabilidad de los fotogramas por segundo a la hora de hacer un render ya que no es posible mantener exactamente los 60 cuadros por segundo. Lo máximo que tratan de obtener los desarrolladores de videojuegos, ya sea para PC o consola es mantenerse en el rango de los 30-60 FPS.
Para tratar de mitigar esos problemas se suele activar el llamado V-Sync (algo que las consolas usan por defecto). El V-Sync es una abreviación de vertical synchronization. Con el V-Sync activo lo que se hace es que se obliga a mostrar un fotograma justo en el momento en que el monitor va a refrescarse, por lo que con una frecuencia de actualización de 60 Hz se envía justamente un fotograma cada 1/60 segundos (16 ms), si no hay fotogramas nuevos disponibles se sigue enviando el mismo. Al contrario también ocurre que si hay nuevos fotogramas disponibles y el monitor está en medio de un refresco, esos fotogramas quedan en espera para ser mostrados secuencialmente. Esto corrige los problemas de tearing, es decir, problemas de enviar un fotograma nuevo a la memoria de pantalla en medio de un refresco, provocando que una parte de los píxeles muestren un fotograma distinto a la otra parte (o partes). El siguiente esquema quizá clarifique las cosas un poco:


En este proceso hay un problema claro y es que la tarjeta gráfica funciona a un ritmo y el monitor a otro. Mientras que el monitor va a tiro fijo (60 Hz, ahora con los más modernos 120 Hz o incluso 144 Hz), la tarjeta gráfica escribe en el buffer a medida que puede, a medida que va procesando los gráficos y coloreando los píxeles conforme el resultado de ese procesado. El V-Sync no lo soluciona totalmente, ya que aunque se eviten las escrituras en medio de una lectura (refresco) del monitor, resulta que sigue habiendo otro problema: los micro cortes. Como el ritmo de actualización de la pantalla sigue sin adecuarse al ritmo de actualización del buffer, habrá fotogramas que permanezcan más tiempo en pantalla que otros. Esto aumenta la sensación de no continuidad. Además, debido a estas esperas al refresco se añade también más retardo (lag), algo muy molesto para los que juegan géneros que requieren de una alta capacidad de respuesta. Personalmente activar el V-Sync hacía muy molesto el navegar por los menús de algunos juegos ya que seguían enviando la señal de movimiento de ratón cuando no deberían de hacerlo y esperar también al V-Sync (un bug que suele ocurrir). Esto en determinadas partidas en línea no es nada aceptable, y se nota bastante en juegos de ordenador más competitivos.
Para resolver ambos problemas de un plumazo, NVIDIA ha ideado un chipset al que ha llamado G-Sync. Con G-Sync se añade un mecanismo mediante el cual la tarjeta gráfica puede controlar la frecuencia de refresco del monitor, adaptando dicha frecuencia a la tasa de fotogramas por segundo que esté consiguiendo. De esa forma se mantiene en todo momento un pase de fotogramas con tiempo equitativo para cada uno, sin mantener durante más de un ciclo de refresco un mismo fotograma. Es como tener un V-Sync pero con una tasa de refresco (o ciclo de sincronización) modulado por la gráfica y no exigido por el monitor. Así, en vez de escribir en el buffer cada 16 ms (60 Hz) en sintonía con el monitor y mantener el actual fotograma si no hay uno nuevo disponible, se escribirá en el buffer y se refrescará cuando la tarjeta gráfica tenga un nuevo fotograma listo. El anterior diagrama quedaría así:



El monitor sólo refresca cuando la tarjeta gráfica le da permiso, se convierte en un subordinado de la tarjeta gráfica. Al mostrarse en pantalla el nuevo fotograma justo cuando está listo, se elimina también cualquier retardo al no generar una cola de fotogramas en espera de ser mostrados. Y por si no ha quedado claro, el monitor lee el buffer y lo lee píxel a píxel, de ahí estos problemas de escribir el buffer cuando la tarjeta puede y que el monitor lo lee a otro ritmo.
El chip de G-Sync será incluido en monitores nuevos a partir del primer trimestre del 2014, y se incluirá en monitores de hasta 4K. En el caso de que no tengas un monitor con G-Sync, puedes comprar el circuito por separado y añadirlo a tu monitor. NVIDIA publicará manuales para hacer las modificaciones oportunas. También habrá sitios donde te puedan hacer la modificación y conservar la garantía. Por lo pronto ASUS ha anunciado ya una versión con G-Sync de su monitor de gaming VG248QE por $399 cuando la versión normal sale por $299. $100 de diferencia que merecen la pena según los asistentes a la demostración. Otros fabricantes mencionados en la demostración que incluirán G-Sync en sus monitores son Benq, Philips y ViewSonic. No hace falta decir que G-Sync es una tecnología exclusiva de NVIDIA. Con esta adición a los monitores los desarrolladores de videojuegos podrán olvidarse de mantener una tasa de fotogramas dentro de un rango determinado, aunque sin pasarse claro, además recordemos que también existen tarjetas gráficas de otros fabricantes como AMD e Intel que no usan esta tecnología. En otros medios se puede leer afirmaciones similares, como en Anandtech:

El sistema G-Sync superó el test perfectamente. Consiguió una suavidad y experiencia visual idéntica a tener 60 fps constantes. Es increíble y cambia completamente la experiencia de usuario. Las caídas en la tasa de fotogramas ya no significan caídas en suavidad. Los desarrolladores que cuenten con la presencia de G-Sync pueden poner efectos de mayor calidad en una escena sin preocuparse en caídas de la tasa de fotogramas por debajo de los 60 fps.
Recalcar el hecho de que en vez de dedicar potencia de hardware en renderizar la escena más rápido, ahora se puede dedicar a hacer escenas de mayor calidad, aunque también puede derivar en optimizaciones aún peores por desidia (para qué optimizar si con esto se aguanta todo), todo hay que decirlo. También llevaron a varios desarrolladores principales de videojuegos como John Carmack (id Software y Oculus Rift, gafas de realidad virtual) o Tim Sweeney (Unreal Engine) los cuales corroboraron la increíble mejora de dicho sistema, no sólo en la tasa de fotogramas sino también en la disminución del retardo (lag) aumentando la interactividad del videojuego. Aunque no sirva de mucho ya que es una grabación a 30 FPS, a continuación un par de vídeos de la demostración:
Este primer vídeo es una demo cno el Tomb Raider funcionando
Este segundo vídeo es la primera demo que hicieron, con un péndulo

En ambos vídeos hay un monitor sin G-Sync y el otro con G-Sync. Desgraciadamente al ser una grabación no se puede apreciar la mejora, salvo quizá el tearing.
El único problema de esto es que sigue siendo tecnología propietaria de NVIDIA como el 3D Vision, por lo que sólo funciona con tarjetas gráficas de NVIDIA. Ni tarjetas Intel, ni AMD, ni las consolas podrán beneficiarse de usar un monitor con G-Sync. A pesar de ello parece que el chipset G-Sync no hace nada demasiado especial. Sólo funciona con DisplayPort (protocolo basado en paquetes) manipulando los paquetes que llevan el control del V-Blank, así que en realidad podría dar pie a implementaciones en drivers de otras tarjetas.
El caso es que estamos ante una tecnología increíble que se pasa por la piedra cualquier problema derivado de la tasa de fotogramas, pero sin pasarse eh, que al cine a 23.976 fps se le nota un poco el entrecortado (pero al menos es constante), aunque bien pensado en videojuegos quizá no se note tanto porque no se aprecia como algo realista, cosas de la visión e interpretación que hace el cerebro. Algo tan sencillo como que el refresco del monitor debería ser controlado por el dispositivo al cual está conectado no se ha hecho nunca hasta hoy, y todo esto por arrastrar un método de funcionamiento de la época de las televisiones de tubo de rayos catódicos que para hacer la circuitería más simple tenían una tasa de refresco equivalente a la frecuencia de la electricidad que llegaba a las casas.
El G-Sync es sin duda alguna una gran mejora y esperemos que esté disponible para GNU Linux, algo que estaría bien ya que por ejemplo el 3D Vision en GNU Linux no se puede usar. Cualquier cosa que mejore los periféricos es una ganancia muy efectiva ya que es lo que envía y recibe la información del usuario y esto es algo que podría ser útil para cualquier reproductor conectado a una pantalla (televisiones, monitores, móviles, etc.) ya que rara vez se funciona en un múltiplo de la tasa de refresco de la pantalla; por ejemplo las películas Blu-Ray se distribuyen a 23.976 fps (24000/1001) y las teles funcionan a 60 fps por lo que deben hacer un proceso llamado dejudder, que tiene que ver con otro llamado pulldown, y que no es del todo perfecto (esos decimales traicioneros), consistente en insertar fotogramas duplicados para alcanzar un múltiplo o submúltiplo de 50 o 60 fps (Hz). Éste tipo de técnicas introducen retardos adicionales.

Cambiando de tercio, en su serie de conferencias en Montreal otra de las cosas que ha presentado NVIDIA ha sido GameStream. GameStream te permite jugar a tus juegos de PC donde quieras, además de hacer retransmisiones (streaming) a la consola Android de NVIDIA, SHIELD. Con esta iniciativa SHIELD adquiere un nuevo modo de juego llamado «consola» que permite conectarla a la TV y retransmitir del PC a SHIELD mostrándose el juego en la TV y controlando SHIELD con cualquier mando bluetooth.
Otra vertiente de GameStream es que NVIDIA pretende unificar el uso de NVIDIA GRID para retransmitir juegos en la nube, permitiendo enviar datos desde GRID a un PC o SHIELD. Es una consolidación de tecnologías que ya tenían.

Otra de las novedades es la adición al GeForce Experience de la posibilidad de grabar tus partidas. A esta posibilidad la han llamado ShadowPlay y estará disponible en versión beta a partir del 28 de octubre. También permite hacer streaming en vivo de tu partida en curso en la red Twitch. Tiene modo automático que permite grabar clips de 10 minutos o bien un modo manual para grabar todo el tiempo que quieras y llenar tu disco duro si así lo estimas oportuno. Graba con el compresor hardware de H.264 incluido en las tarjetas gráficas GeForce 600 y 700 por lo que no consume CPU, permitiendo hasta 1080p a 60 FPS. No está mal, pero es otra solución disponible sólo en Windows.


Por último y no menos importante están las tecnologías que se emplean en efectos de videojuegos: FLEX y GameWorks. FLEX es una evolución de PhysX. FLEX logra unas simulaciones físicas más realistas gracias a las mejoras en detección de colisiones entre los modelos de los objetos y un algoritmo unificado para resolver todas las interacciones que suceden en las distintas combinaciones de tipos de sistemas físicos posibles a simular (dinámica de fluidos, mecánica, etc.). GameWorks es una biblioteca de simulación de partículas (humo, llamas) y fluidos lista para ser usada por los ingenieros. También se ha añadido sistemas de iluminación global (Global Illumination). GameWorks viene a ser un conglomerado de tecnologías de simulación disponible para CUDA, DX11 y GLSL.






Todo bastante interesante aunque si nos hemos de guiar por muestras similares en anteriores ocasiones, poco uso real van a tener. La mayoría de juegos que han implementado PhysX ha sido de forma más disimulada y por pura decoración. Las cosas se hacen multiplataforma y en ese caso no caben tecnologías propietarias como FLEX, PhysX o GameWorks, aunque de buen seguro tendrán aplicaciones en otras áreas distinta a la de los videojuegos, a pesar de que NVIDIA haya puesto una diapositiva indicando que se mueve más dinero en videojuegos que en cine, retransmisión de deportes o streaming de contenidos en línea.

Hasta aquí he llegado con las novedades de NVIDIA, bueno una última cosa: han presentado una nueva tarjeta gráfica, la GeForce 780 Ti, que posiblemente sea una Titan sin su capacidad de cómputo y la mitad de memoria RAM, para así poder competir con la AMD Radeon R9 290X.

De AMD comentar un par de cosas. La presentación de su nuevo modelo de tarjeta gráfica R9 290X y una nueva API gráfica denominada Mantle para usar con sus tarjetas gráficas y así obtener mejor rendimiento, que visto lo que ha hecho NVIDIA dinamitando el problema de mantener una tasa de fotogramas aceptable, esta API quizá sea algo que haya perdido relevancia. Sería una pena teniendo en cuenta que AMD está en minoría en el mercado de tarjetas gráficas (en Steam por ejemplo el 53% de los usuarios gastan NVIDIA y AMD ronda 33%).

Antes de hablar de Mantle, quizá sea más oportuno y digerible hablar de las nuevas tarjetas gráficas de AMD. La R9 290X con 2816 shaders, 172 unidades de texturado y 64 ROPs, con un bus de memoria de 512 bits y 4GB de RAM GDDR5, está pensada para el juego a altas resoluciones. Se han desvelado pruebas de rendimiento a una resolución de 4K (3840x2160) y supera en media a la GeForce 780 en un ~24%:

Si hacemos una tabla comparativa:

Radeon R9 290X vs GeForce GTX 780 (2160p)
R9 290X GTX 780 R9 290X/GTX 780
Anno 2070 34,40 25,28 36,1%
Battlefield 3 36,89 31,09 18,7%
Bioshock Infinite 43,99 37,67 16,8%
Borderlands 2 76,25 62,48 22,0%
Company Of Heroes 2 34,81 26,66 30,6%
Crysis 3 32,21 27,52 17,0%
Dirt Showdown 31,72 21,20 49,6%
Far Cry 3 BD 37,21 30,14 23,5%
Grid 2 47,99 39,15 22,6%
Hitman: Absolution 35,94 32,14 11,8%
Max Payne 3 72,13 50,70 42,3%
Matro: Last Light 47,86 40,76 17,4%
Saints Row IV 34,04 30,38 12,0%
Skyrim 71,21 52,63 35,3%
Sleeping Dogs 46,19 18,32 152,1%
Splinter Cell: Blacklist 44,63 42,64 4,7%
Tomb Raider 40,30 34,50 16,8%
MEDIA 23,8%

No está nada mal, sobre todo si tenemos en cuenta que es resolución 4K, estamos obteniendo siempre tasas de fotogramas por encima de los 30 fps. Es capaz de superar por mucho a la 780, alcanzando el rendimiento de una tarjeta gráfica de 1000 dólares como es una Titan por 400 dólares menos (la R9 290X saldría por 600 dólares). Además los drivers aún están un poco verdes (como pasa con cualquier lanzamiento de nuevas GPUs). Por la red seguro encontraréis gráficas más igualadas, eso es porque muy posiblemente hayan hecho las pruebas con la tarjeta en modo silencioso en vez de en máximo rendimiento, porque está claro que pasar de un ~13% de diferencia en beneficio de la 290X a un 24% hay un trecho.
Es un buen avance para AMD, compañía que gracias a las consolas ha obtenido una subida en sus beneficios.

Otra de las novedades de AMD reside en Mantle. Mantle es una API que supuestamente es de más bajo nivel que DirectX y OpenGL. Esto permite mejorar el rendimiento al incrementar el número de llamadas que se puede hacer, es decir, consume menos recursos de CPU para realizar el mismo trabajo. Tal y como funcionan actualmente las cosas, la CPU ejecuta el código gráfico y prepara las comunicaciones con el driver gráfico de forma que los comandos gráficos sean enviados a la GPU. Esto mucha gente lo entenderá si se habla de los shaders y los shaders compilados. Cuando se compila un shader lo que se hace es llamar al driver gráfico para que compile ese código escrito en un lenguaje de shaders (como el OpenGL GLSL o el Direct3D HLSL) y este código compilado luego se envía al driver para que se lo pase a la GPU. Esto es así dado que las GPUs a día de hoy son un ciudadano de segunda en vez de ser un coprocesador como las antiguas unidades de coma flotante x87 que terminaron integradas en los procesadores Intel (y AMD). Además entre generaciones de tarjetas gráficas los fabricantes de GPUs cambian bastante su microarquitectura por lo que es necesario tener unos geniales compiladores que sean capaces de optimizar muy bien, al estilo Intel IA-64 (Itanium):

La arquitectura Itanium emplea paralelismo a nivel de instrucción, en el que el compilador decide qué instrucciones ejecutar en paralelo. Esto contrasta con otras arquitecturas que dependen del procesador para resolver dependencias en tiempo de ejecución.
A este tipo de arquitecturas se las conoce como VLIW (Very Long Instruction Word) y tienen instrucciones de múltiples operandos y registros, haciéndolas poco manejables para trabajar con ensamblador, y los chips gráficos son de este tipo. Pero bueno, esto no es mayor problema, con un buen compilador y soporte nativo para un coprocesador gráfico sin drivers por parte del sistema operativo se eliminaría un buen cuello de botella. Esto ni tan siquiera es efectivo en sistemas empotrados (placas ARM, x86 o lo que sea), Linux, BSD o NT siguen tratando a cualquier procesador adicional a la CPU como algo accesorio a tratar de forma indirecta.
Por suerte esto siempre se ha podido mitigar usando la sesera. Mantle sin embargo nos acerca más al metal, recordando a cosas como Close to Metal. Esta nueva API de AMD permite un acceso directo a todas las funcionalidades de la GPU y elimina gran parte de las pérdidas por usar OpenGL o Direct3D. Un dato es que permite multiplicar por 9 el número de llamadas de dibujado con respecto a las API usadas a día de hoy. Esto significa que es más ligera con la CPU, permitiendo realizar más trabajo en el mismo tiempo. Permite nuevas técnicas de renderizado y digamos que establece una API similar en rendimiento a la de las consolas y que además reutiliza lo usado en las mismas por lo que los programas ya optimizados para ejecutarse en ellas podrán funcionar sobre Mantle con las mismas optimizaciones, permitiendo aproximarse más a la potencia pico de las GPUs que siempre tienen que esperar a que la CPU les envíe el trabajo. Por supuesto, esta API permite un mayor paralelismo, escalando perfectamente a 8 núcleos. Un punto bueno es que a pesar de ser más específica, mantiene compatibilidad con el High Level Shading Language (HLSL) de Direct3D para así facilitar la adaptación de los títulos a esta nueva API. Una de las claves y objetivos de Mantle es que es reusable, permitiendo reaprovechar técnicas empleadas en los sistemas cerrados, además de lenguajes ya existentes.
El motor gráfico Frostbite utilizado por la saga Battlefield es el primero que incorpora compatibilidad con Mantle. Battlefield 4 lleva integrada esta funcionalidad y si en el sistema hay una Radeon compatible con Mantle el juego funcionará sobre Mantle en vez de sobre Direct3D 11, mejorando el rendimiento.
Esta API seguramente sea heredera directa de alguna de las API de PlayStation 4 o Xbox One, y dada la compatibilidad con HLSL me declino más por Xbox One. Esto significa que los ports de consolas podrían funcionar sobre PC casi de forma directa. Por otra parte, ser derivado de Xbox One no sería una sorpresa, este siempre ha sido un problema de AMD y es que su soporte a tecnologías no Microsoft es malo en comparación con NVIDIA. Como nota anecdótica, el mismo sitio web de AMD está hecho con ASP. PlayStation 4, basada en BSD utiliza una API más cercana a OpenGL, en vez de a Direct3D como ya ocurriera con PlayStation 3 (y no hablo de PSGL).
Microsoft por su parte ha hablado de nuevas características y mejoras en Direct3D y de las posibilidades de la versión de Xbox One -Direct3D 11.x, siendo la x de Xbox-. Se pueden resumir en un Direct3D con algunas funciones adicionales para manejar manualmente la eSRAM de 32MB que incorpora Xbox One y quitar algunas pérdidas de rendimiento (algo que siempre he valorado en torno a un 20%).
Si queremos hablar de APIs de alto rendimiento mi apuesta sería por mejorar el modelo de drivers gráficos en Linux y utilizar LLVM para generar shaders y código relacionado de OpenGL. No se necesitan más argucias. Mantle viene a solucionar un problema de Direct3D en PCs con Windows, problema en el que Microsoft dice haber estado trabajando para su Xbox One que usa un derivado de Direct3D. En cuanto a Linux, cosas al respecto ya están ocurriendo como NVIDIA trabajando con Red Hat para permitir acceso al espacio de direcciones del sistema de forma transparente y por cualquier GPU, no sólo por las de NVIDIA. Otra empresa que ha visto un gran beneficio en usar software libre es Valve, cuyos trabajadores han tenido una muy buena experiencia trabajando con el equipo de los drivers libres de Intel, que ha permitido incluso arreglar bugs y mejorar el rendimiento de los mismos, algo que no sólo beneficia a Valve sino a cualquiera que use los drivers libres de Intel.

Finalmente, con las nuevas R9 AMD no ha querido dejar ningún lazo suelto y también ha anunciado la implementación de aceleración por hardware del sonido mediante sus tarjetas gráficas. AMD  TrueAudio es la tecnología que incorporan sus chips para permitir añadir efectos avanzados de sonido y mezcla de una gran cantidad de canales para reproducir efectos de sonido más realistas y envolventes incluso cuando se tengan sólo dos altavoces o unos auriculares. Y todo esto sin consumir apenas CPU ya que la reproducción de dichos efectos es mediante un DSP integrado en la GPU y no por software como se venía haciendo hasta ahora.

Las novedades de la semana en hardware gráfico terminan aquí.

No hay comentarios:

Publicar un comentario en la entrada