La API DirectX 12 está añadiendo una nueva característica llamada Work Graphs 1.0, con el que se busca que los futuros videojuegos estén menos limitados por el CPU.
DirectX 12: Nueva función para eliminar el cuello de botella del CPU
Microsoft ha lanzado Work Graphs 1.0, con la idea de que los futuros videojuegos desarrollados con la API DirectX 12 aprovechen mejor el hardware de la GPU y dejen de estar tan limitados por el CPU.
Actualmente, el CPU tiene un papel protagónico en la asignación en los recursos de la GPU, algo que está añadiendo ciclos adicionales a la hora del renderizado de los juegos. Lo que hace Work Graphs 1.0 es permitir que la GPU genere trabajo por sí misma y que requiera de una menor intervención del CPU. La siguiente imagen ejemplifica más claramente cómo funciona.
“Con la proliferación de técnicas de renderizado basadas en la GPU (como Nanite en Unreal Engine 5), el papel de la CPU está tendiendo a centrarse principalmente en la gestión de recursos y el seguimiento de elementos, y sólo una parte del tiempo se dedica a generar comandos para la GPU. Antes de la aparición de los gráficos de trabajo de D3D12, resultaba difícil realizar una gestión detallada de la memoria en la GPU, por lo que era prácticamente imposible utilizar algoritmos con expansión dinámica del trabajo. Incluso las cadenas largas y sencillas de trabajo de cálculo secuencial podían dar lugar a una sobrecarga significativa de sincronización y memoria.
El renderizado en la GPU se realizaba de forma que la CPU tenía que adivinar qué asignaciones temporales necesitaba la GPU, a menudo sobreasignando en el peor de los casos, y utilizando la lectura de fotogramas anteriores para el refinamiento. Cualquier carga de trabajo con expansión dinámica implicaba la emisión de envíos en el peor de los casos desde la CPU, haciendo que la GPU se adelantara al trabajo innecesario, o bien se utilizaban técnicas no portables, como los hilos persistentes.
Con Work Graphs, los pipelines complejos que son muy variables en términos de «forma» general ahora pueden ejecutarse eficientemente en la GPU, ya que el programador se encarga de la sincronización y el flujo de datos. Esto es especialmente importante en el caso de las cadenas productor-consumidor, muy comunes en los algoritmos de renderizado. El modelo de programación también se simplifica considerablemente para los desarrolladores, ya que el complejo código de gestión de recursos y barreras se traslada de la aplicación al tiempo de ejecución de Work Graph.
Llevamos años abogando por algo así, y es muy emocionante ver por fin la publicación de Work Graphs”.
Lo que advierten es que la implementación de Work Graphs no será en el corto plazo, por lo que tardaremos algún tiempo para poder verlo implementado en un videojuego. Estamos curiosos por saber cómo esto puede impactar en los juegos y su rendimiento.