
Nvidia es una compañía bastante conocida por sus gráficas para PC de sobremesa y portátiles. Hace unos años ya, decidió meterse en el mundillo de los SoC ARM con el primer tegra, que salió para los zune HD de microsoft.
El hecho de que Nvidia tenga tanto recorrido en el mercado del PC más tradicional hace pensar a mucha gente que por simple inercia los tegra tienen que ser también un portento en el tema gráfico. Porque claro, como los ha diseñado Nvidia…
Nada más lejos de la realidad.
Hagamos un poco de memoria. Corría el año 2004. Nvidia sacó al mercado un nuevo diseño de GPU conocido por aquella época como NV4x (la X es para marcar iteraciones de poca importancia dentro de este diseño, más bien revisiones). De aquí salieron muchas de las gráficas de la serie 6000 y también el procesador gráfico que se acabó montando para la ps3.
Las características más destacadas de este diseño de gráficas de la época eran lo que Nvidia llamó «PureVideo» la compatibilidad con openGL 2.0, shader model 3.0 y directX 9. En el tema de los smartphones el directX como que da un poco igual, pero el openGL y el diseño de los shaders es algo más importante, sobre todo si se quiere optar a herramientas que hagan que el rendimiento en la práctica de la GPU sea lo más cercano posible a su rendimiento teórico. También los avances en estas áreas suelen posibilitar el hacer por hardware, con el aumento de rendimiento que ello supone, efectos gráficos que hasta ese momento se hacían vía software.
El PureVideo era un decodificador por hardware de vídeo para liberar a la CPU de la decodificación por software de películas y demás. Esta parte concreta también se las trae.
No es una parte puramente gráfica pero estaría bien explicar por qué se las trae. Nvidia anunció que su primera versión de tegra (la que montaba el zune HD) era capaz de decodificar vídeo a 720p. Esto se demostró falso. Nvidia se justificó diciendo que no, que la imagen que sacaba el tegra no era a 720p pero que en algún momento, en algún buffer interno del tegra sí había imágenes a 720p. Me carcajeo yo de esto.
Llegó el tegra 2 y los de Nvidia hicieron algo parecido. Anunciaron a bombo y platillo que este SoC era capaz de reproducir vídeo 1080p sin problemas. Sale al mercado y se ve que esto tiene mucha letra pequeña. El hecho de que el decodificador de vídeo esté basado en un diseño antiguo de PureVideo (aunque no tanto como el del tegra 1 todo hay que decirlo) y que no se les ocurriese meter el módulo NEON en este SoC hace que la reproducción a 1080p solo se pueda llevar a cabo si el vídeo está codificado con un perfil muy determinado. Así que de reproducir vídeos 1080p high profile en un tegra 2 como que no, y eso que Nvidia anunció que sí.
Ya con el tegra 3 parece que les apeteció meter un decodificador de vídeo un poco más moderno.
Después de excavar en el foso de la historia tecnológica tal vez te estés preguntando qué tiene que ver toda esta chapa de antiguallas con la GPU de los tegra. Pues muy sencillo. Los de Nvidia, ni cortos ni perezosos han cogido el diseño de las NV4X y lo han metido con calzador en sus SoC.
¿Qué implicaciones tiene esto?
- Ningún tegra hasta el momento es compatible con opengl 3.0. Esto incluye al tegra 4.
- Ningún tegra hasta el momento es compatible con openCL. Esto incluye al tegra 4.
- Ningún tegra hasta el momento es compatible con una tecnología que es propietaria de la propia Nvidia como es Cuda. Esto incluye al tegra 4.
- Ningún tegra hasta el momento tiene shaders unificados. Esto incluye al tegra 4.
- Aunque esto para el tema de smartphones no influye demasiado, ningún tegra hasta el momento soporta directX11. Ni siquiera el tegra 4.
Hay que tener en cuenta que los competidores del tegra 4 en temas de GPU como son la serie adreno 300 que usa Qualcomm o la serie mali 600 de ARM sí soportan todo esto.
Que hace unos años no soportasen estas tecnologías pues era entendible. Eran unos recién llegados a este mundillo, esas tecnologías no eran tan necesarias… Pero en pleno 2013, con un tegra 4 que ha retrasado su salida porque esta vez en Nvidia se supone que querían hacer las cosa bien que pasen estas cosas…
Y bueno, cuando se le pregunta a Nvidia por qué no han usado el diseño que tienen guardado (kepler) que sí soporta todo esto en el tegra 4 pues simplemente se limitan a echar balones fuera.
Tegra 4 uses our most advanced mobile GPU ever. It adds amazing features like true HDR rendering and supports ultra-efficient computation, like what is done for the computational photography architecture and the first «Always On» HDR camera. It is our fifth generation mobile GPU and 6x the power of Tegra 3’s GPU – a major leap in capability (for reference Tegra 3 was 1.5x the horsepower compared to Tegra 2).
Que tegra 4 usa la GPU más avanzada de los móviles que se ha visto nunca es la cosa más lamentable que he leído en mucho tiempo. Si un diseño del 2004 que no es compatible con tecnologías de hoy en día es avanzado, las GPUs de sus competidores deben estar traídas del futuro lo menos.
Today’s mobile apps do not take advantage of OCL (OpenCL), CUDA or Advanced OGL (OpenGL), nor are these APIs exposed in any OS. Tegra 4’s GPU is very powerful and dedicates its resources toward improving real end user experiences.
Luego comentaron que no hacen uso de estos temas porque no hay ningún sistema operativo que los use. Siendo Nvidia una compañía que ha apostado por windows 8 RT en donde sí hay opción de usar directX11 o cuda, me parece que esto es contradecirse a sí mismo.
La realidad es que no lo usan porque quieren seguir exprimiendo un diseño de hace 10 años para ganar el máximo posible, aunque eso suponga sacar al mercado una GPU que no está a la altura.
Si el diseño es de hace 10 años, ¿cómo mejoran el rendimiento de una versión de tegra a otra?
Pues esta es otra de las chapuzas de este diseño. El no tener shaders unificados implica que deba usar por separado shaders de vértices y shaders de pixels, a la antigua usanza. Cada shader de estos es lo que Nvidia llama núcleos (me río yo de llamar núcleo a un shader, pero bueno el marketing es el marketing). Otros fabricantes son más decentes y llaman núcleos a lo que realmente son núcleos, y por eso nos econtramos con situaciones como que el tegra 3 con sus maravillosos 12 «núcleos» es barrido del mapa por una powerVR sgx544MP4 de 4 núcleos (estos núcleos son de verdad).
Y para aumentar el rendimiento, pues simplemente va metiendo cada vez más shaders de pixels y de vértices (además de ir mejorando poco a poco cosas como el decodificador de vídeo que he comentado antes o los subsistemas de cachés) a medida que el proceso de fabricación va permitiendo meter más transistores en el mismo espacio:


El hecho de usar shaders no unificados es una desventaja por un algo muy sencillo. Los shaders de pixels diciéndolo de una forma simplificada, se encargan de dar efectos a las imágenes. Efectos como la iluminación o hacer que los personajes parezcan todos sudados de tanto brillo que les ponen últimamente en la piel son cosa de estos shaders. Los shaders de vértices básicamente manejan la carga poligonal de la escena.
El tenerlos por separado hace que, o tienes en cuenta el diseño interno en cuanto al reparto de shaders que tiene esa GPU o no vas a ser capaz de sacarle todo el rendimiento. Teniendo en cuenta que no todos los juegos tienen por qué tener las mismas necesidades en cuanto a carga poligonal o efectos aplicados, esto es un desperdicio de potencia teórica en la práctica. Los shaders unificados pueden actuar de shader de vértices o de pixel indistintamente, según las necesidades del desarrollador con lo que la eficiencia en general de la GPU aumenta (bueno, siendo tiquismiquis sigue habiendo ligeras diferencias entre shaders en los unificados, pero en esencia todos los shaders son capaces de hacer las mismas operaciones)
En los tegra concretamente también vemos que el ratio shader de pixel vs shader de vértices cambia de una GPU a otra, siendo en el tegra 2 1:1 mientras que en el tegra 3 hay dos de pixel contra uno de vértices. Esto complica más las cosas ya que no sólo tienes que tener en cuenta las particularidades de los tegra en cuanto a shaders sino que cada tegra debe ser tenido en cuenta por separado. Al menos en el tegra 4 han mantenido el mismo ratio de 2 a 1 del tegra 3.
Y por último, tal vez te estés preguntando que qué hay de cierto en esos juegos de android que se publicitan como optimizados para tegra. Pues esto es simplemente marketing. Nvidia ha puesto dinero para que algunas desarrolladoras capen determinados efectos gráficos a sus juegos si ven que el SoC no es tegra. Es tan simple como eso. No tiene nada que ver con temas de potencia ni de que los tegra sean especiales. De hecho, hay bastantes trucos para hacer funcionar esas «optimizaciones» de los tegra en el resto de SoC que pasan por modificar algún xml en el juego, tocar un par de cosas en el build.prop del móvil… Hay soluciones para todos los gustos.
Y hasta aquí otro artículo en el que pongo a parir a los tegra. Espero que con el tegra 5 que se supone que estrena nuevo diseño de GPU hagan las cosas bien de una vez o que si al menos no les salen las cosas como esperaban que no hagan declaraciones lamentables como hasta ahora o que no se pongan a anunciar cosas que no pueden cumplir.
Y para compararlo con un SoC actual como el Snapdragon 600 que monta una Adreno 320? como es esta GPU así un poco por encima?
Pues es probable que en ese caso la potencia bruta de la adreno 320 esté un poco por debajo. Hay que tener en cuenta varios factores:
– El adreno 320 es un diseño que lleva unos cuantos meses con nosotros. Se empezó a montar en el snapdragon s4 pro…. Estos meses es mucho tiempo en el mundo de la informática
– El tegra 4 es un producto que todavía no ha salido al mercado. Lo más que se ha visto es el experimento del shield de nvidia el cual a día de hoy solo se puede reservar y no comprar, o una tablet de asus sin fecha de salida.
– Por las pocas pruebas que se han podido hacer a estas alturas al tegra 4, se ve que es un SoC que consume 8 watios a plena carga. Esto es una barbaridad de consumo que obliga a Nvidia a cosas como meter un ventilador en el shield o a ser un SoC que se verá solo en tablets si no se quiere verlo recortado funcionando en un smartphone. Yo personalmente creo que lo que veremos en smartphones será el tegra4i, que es menos potente en general y con menos consumo. Con esto quiero decir que comparar el tegra 4 con sus 8 watios de consumo con un snapdragon 600 que se viene montando en smartphones normales sin ventilación y con restricciones de consumo y temperatura, no es muy justo.
– El hecho de que nvidia lleve tanto tiempo hablando del tegra 4 sin haber salido al mercado aún me hace sospechar que es precisamente por esto, para que un producto que aún no ha salido al mercado como es el tegra 4 se compare de forma aparentemente ventajosa con los productos que ya existen en el mercado. Sería más justo comparar el tegra 4 con el snapdragon 800 y su adreno 330 porque este es un producto más destinado a tablets y cuya GPU es superior a la adreno 320, además de ser productos más cercanos en el tiempo de salida al mercado.
Y bueno, habría que tener en cuenta cosas como si las aplicaciones que se van a correr son opengl 2 o 3. En aplicaciones como el emulador dolphin para android que ya soporta opengl 3 si se quiere, se ven ganancias de rendimiento de hasta 10fps, con lo que basarse simplemente en las típicas comparativas de rendimiento basadas en opengl 2 no sería justo para los nuevos modelos de GPU que soportan opengl 3 ya que no se les da oportunidad a mostrar todo su potencial.
Y sobre estas tablas con el rendimiento en GFLOPS de las distintas GPU, tanto móviles como para dispositivos transportables?
http://kyokojap.myweb.hinet.net/gpu_gflops/
Adreno 320, con 51,2 GFLOPS, mete un buen repaso a casi todo lo que hay ahora en el mercado «móvil», quitando unos pocos, como estos Tegra4, el unborn Adreno 330, o la GPU del Apple A6x, quedando a la par con la GPU del Exynos 5410, la del SGS4 «octo-core»
Sí, para hacerse una idea esa página está bastante bien.
De todas formas, los GFLOPS no es una medida exacta para medir el rendimiento entre GPUs ya que en este tema la arquitectura tiene mucho que ver a la hora de alcanzar esa potencia teórica. Por eso en el artículo he hecho hincapié en el tema de los shaders unificados, cosa que ayuda en cierta medida a igualar el rendimiento en la práctica con el teórico.
Estoy tratando de ver qué cantidad de shaders tiene el Adreno 320, pero no hay manera…
Igual mi respuesta llega un poco tarde @Carlos, pero acabo de encontrar el número de shaders de la adreno 320
https://plus.google.com/app/basic/stream/z13tuzb5xqz2v135u04ccl55vuflj52ycyc0k
16 shaders unificados por núcleo gráfico.