Tarjetas gráficas

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

Seguro que has leído o escuchado que las tarjetas gráficas de AMD son mucho mejores en DirectX 12 que las de Nvidia, que la arquitectura usada por los primeros está mucho más preparada para trabajar con la API de nueva generación. Son afirmaciones que solemos ver cada día pero ¿Realmente AMD es mejor que Nvidia en DirectX 12? Te contamos todo lo que necesitas saber en este post.

El overhead es la causa de la mejora de AMD con DirectX 12

Desde que se empezó a hablar de DirectX 12 hemos venido viendo gráficas de comparativas como las siguientes:

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12 Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

Estas gráficas comparan dos tarjetas gráficas equivalentes como la GeForce GTX 980 Ti y la Radeon R9 Fury X, si nos guiamos por las imágenes anteriores vemos que AMD tienen una ganancia de rendimiento brutal al pasar de DirectX 11 a DirectX 12, por contra Nvidia se queda igual o incluso pierde rendimiento al pasar a funcionar con la nueva API. Viendo esto cualquier usuario pensaría que la tarjeta de AMD es mucho mejor que la de Nvidia.

Ahora pasamos a fijarnos en la siguiente imagen:

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

Esta ves la gráfica compara el rendimiento de la GeForce GTX 980 Ti y la Radeon R9 Fury X en DirectX 11 y DirectX 12. Lo que podemos ver es que en DirectX 11 la tarjeta de Nvidia rinde casi el doble que la de AMD y al pasar a DirectX 12 el rendimiento se iguala. Vemos que la Radeon R9 Fury X mejora su rendimiento una barbaridad al pasar a trabajar con DirectX 12 y la GeForce GTX 980 Ti mejora mucho menos. El cualquier caso el rendimiento de ambas bajo DirectX 12 es el mismo ya que la diferencia no llega a 2 FPS a favor de la Fury X.

Llegados a este punto tenemos que plantearnos porqué AMD tiene tal mejora al pasar a trabajar con DirectX 12 y Nvidia mejora mucho menos. ¿Funciona AMD mejor bajo DirectX 12 que Nvidia o es que tiene un gran problema bajo DirectX 11?

La respuesta es que AMD tiene un gran problema bajo DirectX 11, un problema que hace que sus tarjetas funcionen peor que las de Nvidia. Este problema está relacionado con el uso que los drivers de las tarjetas hacen del procesador, un problema que se conoce como “Overhead” o sobrecarga.

Las tarjetas gráficas de AMD hacen un uso muy ineficiente del procesador bajo DirectX 11, para comprobar este problema solo tenemos que fijarnos en los siguientes vídeos en los que se analiza el rendimiento de la Radeon R7 270X y la GeForce GTX 750 Ti con un Core-i7 4790K y luego con un Core-i3 4130. Como podemos ver la gráfica de AMD pierde mucho más rendimiento al pasar a trabajar con un procesador mucho menos potente.

Far Cry 4

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12 Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

Ryse: Son of Rome

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12 Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

COD Advanced Warfare

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12 Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

La clave de ello está en las “command-queue” o listas de comandos bajo DirectX 11. De una forma muy sencilla y entendible lo podemos resumir en que las tarjetas gráficas de AMD cogen todas las llamadas de dibujado a la API y las ponen en un único núcleo del procesador, ello hace que sean muy dependientes de la potencia mono-hilo del procesador y por tanto se resientan mucho al trabajar junto a un procesador menos potente por núcleo. Esta es la razón de que las gráficas de AMD sufrieran mucho con los procesadores AMD FX, mucho menos potentes por núcleo que los de Intel.

En cambio Nvidia coge las llamadas de dibujado a la API y las divide entre los diferentes núcleos del procesador, con ello se reparte la carga y se hace un uso mucho más eficiente y se depende menos de la potencia por núcleo del procesador. Como consecuencia AMD sufre mucho más overhead que Nvidia bajo DirectX 11.

Comprobar esto último es muy sencillo, solo tenemos que monitorizar una tarjeta gráfica de AMD y una de Nvidia bajo el mismo juego y el mismo procesador y veremos como en el caso de Nvidia todos los núcleos trabajan de una forma mucho más balanceada.

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

Este problema de overhead queda solucionado bajo DirectX 12 y esa el la razón principal de que las tarjetas gráficas de AMD tengan una enorme ganancia de rendimiento al pasar de DirectX 11 a DirectX 12. Si nos fijamos en la siguiente gráfica vemos como bajo DirectX 12 ya no se pierde rendimiento al pasar de un procesador de dos núcleos a uno de cuatro.

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

¿Y por qué AMD no hace como Nvidia?

La implementación que ha hecho Nvidia de las command-queue en DirectX 11 es algo muy costoso que requiere de una gran inversión de dinero y recursos humanos. AMD ha estado pasando por una mala situación financiera por lo que no dispone de los mimos recursos que Nvidia para invertir. Además el futuro pasa por DirectX 12 y ahí no existe este problema de overhead ya que la propia API es la que se encarga de gestionar las command-queue de una forma mucho más eficiente.

Además la aproximación de Nvidia tiene el problema de ser mucho más dependiente de la optimización de los drivers, por ello Nvidia suele ser la primera en liberar nuevas versiones de sus drivers cada vez que sale al mercado un juego importante, aunque AMD se ha puesto las pilas en este últimamente. La aproximación de AMD tiene la ventaja de ser mucho menos dependiente de los drivers por lo que sus tarjetas no necesitan nuevas versiones con tanta urgencia como las de Nvidia, esta es una de las razones por las que las tarjetas gráficas de Nvidia envejecen peor con el paso del tiempo cuando se les deja de dar soporte.

¿Y que hay de los Shaders Asíncronos?

También se ha hablado mucho de los Shaders Asíncronos, respecto a esto solo hay que decir que se le ha dado mucha importancia cuando en realidad el overhead es mucho más importante y determinante del rendimiento de la tarjeta gráfica. Nvidia también los soporta aunque su implementación es mucho más simple que la de AMD, la razón de ello es que su arquitectura Pascal trabaja de una forma mucho más eficiente por lo que no necesita los Shaders Asíncronos tanto como AMD.

Las gráficas de AMD incluyen los ACE que son un motor de hardware dedicado al computo asíncrono, un hardware que ocupa espacio en el chip y consume energía por lo que su implementación no es ningún capricho sino que obedece a una gran deficiencia de la arquitectura Graphics Core Next de AMD con la geometría. La arquitectura de AMD es muy poco eficiente a la hora de repartir la carga de trabajo entre los diferentes Compute Units y los núcleos que los forman, esto hace que queden muchos núcleos sin trabajo y por tanto desaprovechados. Lo que hacen los ACE y los Shaders Asíncronos es “dar trabajo” a estos núcleos que se han quedado parados para que puedan ser aprovechados.

En la otra parte tenemos a las gráficas de Nvidia basadas en las arquitecturas Maxwell y Pascal, estas son mucho más eficientes en la geometría y el número de núcleos es muy inferior al de las gráficas de AMD. Esto hace que la arquitectura de Nvidia sea mucho más eficiente a la hora de repartir el trabajo y no queden tantos núcleos desaprovechados como en el caso de AMD. La implementación de los Shaders Asíncronos en Pascal se hace mediante software, pues hacer una implementación por hardware no aportaría casi ventajas en rendimiento y si que sería un lastre en el tamaño del chip y su consumo de energía.

La siguiente gráfica muestra la ganancia de rendimiento de AMD y Nvidia con los Shaders Asíncronos en 3D Mark Time Spy:

Explicamos por qué AMD mejora más que Nvidia al pasar a DirectX 12

TE RECOMENDAMOS
AMD Radeon Software Crimson Edition 16.10.3 Beta han sido liberados

Que Nvidia haga una implementación de los Shaders Asíncronos por hardware en el futuro depende de que los beneficios sean mayores a los perjuicios.

Juan Gomar

Soy un apasionado de la tecnología en general pero principalmente de la informática y los videojuegos.
  • Hardware Kawai

    Muy buen reportaje . Pero vamos la catástrofe de amd fue abandonar dx11 totalmente pensando que los desarrolladores correrían hacia DX12/Mantle . Si Amd hubiese optimizado sus drivers en DX11 para la serie RX 3X y Fury como se merecían, ahora mismo estarían con mas cuota de mercado .

    • Juan Gomar

      Tienen recursos limitados por lo que había que priorizar, también estaba en desarrollo Zen por lo que seguramente no iban a poder con todo y se la jugaron. El problema es que cuando DirectX 12 ya esté asentado al 100% tanto AMD como Nvidia tendrán otra arquitectura diferente.

      • Hardware Kawai

        Sí es la putada de tener que haber precipitado tanto las cosas al no tener presupuesto, tendrían que haber anticipado que a la industria le suele costar mucho adaptarse a los cambios. Aún que te parezca raro todavía salen algunos juegos en dx9 y mira si a llovido . Creo que Amd debió haber pensado en eso .

  • Estuardo Avila

    Excelente explicación me han resuelto la duda de por qué la gtx 1060 rendía igual o más en algunos juegos con menos Cores (CUDA/StreamProcessor). Me encantó deberían de hacer mas seguido estos tutoriales, aclaraciones etc.

    Saludos

  • Jesus Adolfo Baltan ramirez

    “La implementación de los Shaders Asíncronos en Pascal se hace mediante software, pues hacer una implementación por hardware no aportaría casi ventajas en rendimiento y si que sería un lastre en el tamaño del chip y su consumo de energía”.

    Esa explicación es valida solo para Maxwell, pero para Pascal nvidia utiliza algo llamado Balance de carga, el cual lo que hace es rellenar tiempos muertos con carga de trabajo en computo o grafico segun lo requiera, ademas Pascal utiliza un nivel de preemption (ejecución concurrente por medio de asignación de tiempo de procesador, eso se hace vía hardware a través de los planificadores)

    Al usar carga dinámica de trabajo le permite ejecutar mejor las tareas que debe realizar la GPU, es mas nvidia en la GDC 2017 ha indicado que Pascal puede usar Async Compute en DX 11 a través de una mejora en su motor de procesamiento de cargas.

    solo te recuerdo que el uso del Async Compute en Pascal es híbrido ya que intervienen los planificadores de tareas (gigaThread Engine) y los drivres, los cuales calculan como debe ser la carga de trabajo.