Actualmente para el mundo del PC existen dos API gráficas de primer orden que manejan con autoridad el mercado. Por este motivo os traemos la comparativa DirectX 12 Vs Vulkan.
Ambas tienen una extensa historia detrás y toda una horda de defensores y detractores. Hoy veremos las diferencias, las claves de cada una e intentaremos ofrecer algo de luz sobre ellas.
Índice de contenidos
API gráfico de bajo nivel y “Driver overhead”
API son las siglas de “aplicación programming interface” y es un conjunto de subrutinas que puede usar un desarrollador que incluye también protocolos de comunicación y utilidades que facilita el desarrollo de software. Las podemos encontrar para casi todo y es habitual que cada proveedor de servicios disponga de este tipo de ayudas para implantar sus sistemas de forma sencilla y accesible.
Tanto DirectX 12 como Vulkan 1.1 son API orientadas al desarrollo de juegos y aplicaciones que requieran de la asistencia de motores gráficos modernos. A su vez son API soportadas por los controladores de los mas importantes diseñadores de chipsets gráficos y por tanto una forma rápida y económica de acceder a sus prestaciones sin necesidad de conocer el diseño de las mismas a muy bajo nivel.
Un API de bajo nivel, como estas, permite trabajar con el hardware con una capa muy ligera de interpretación lo que permite al desarrollador aprovechar mejor el hardware logrando mejores resultados a nivel de rendimiento y eficiencia permitiendo además liberar a otros subsistemas de carga adicional. En el mundo del PC, o de los teléfonos móviles supone menos dependencia de la CPU generalista del sistema.
Las dos API de las que hablaremos hoy se pueden considerar APIs de bajo nivel y ambos desarrollos se ha traducido en una cada vez menor dependencia de la CPU del sistema a la vez que se logran mejores resultados a nivel de rendimiento y acceso a funciones gráficas más avanzadas. Son dos API vivos que están recibiendo actualizaciones de forma anual para mantenerlas en línea con la que el publico general y los desarrolladores esperan.
Los API de bajo nivel tienen un efecto directo en otro concepto computacional que conocemos como “driver overhead” que es, en resumidas cuentas, los recursos secundarios que necesitamos para ejecutar cierto tipo de operaciones en una computadora. En el caso de los gráficos se refiere a los recursos extra que requiere la tarjeta gráfica para hacer su trabajo y en este caso es fundamentalmente tiempos de proceso de CPU central. Los API de bajo nivel que aquí describiremos reducen esta dependencia y de hecho la dependencia tiende a 0.
DirectX de Microsoft
DirectX surge como una necesidad para estandarizar diferentes subsistemas multimedia de Windows y es el substituto de WinG para Windows 3.1. Se adopta en Windows 95 como un paquete añadido y su segunda versión, DirectX 2.0, pasa a ser un componente fundamental de Windows 95 OSR2.
Dentro de DirectX encontramos múltiples API independientes como Direct3D, que es realmente el que nos ocupa, DirectDraw, DirectMusic, DirectPlay y DirectSound. DirectX fue una forma de nombrar los avances comunes en todos estos sub-API. Es un API para Windows pero que también se usa para el desarrollo de juegos en sus consolas Xbox por lo que podemos considerarlo un API Multiplataforma pero no libre, como es el caso de Vulkan.
DirectX 12, su ultima versión, lleva con nosotros desde 2014 y no se ha estado quieto y hace pocos meses recibió mejoras importantes como la subrutina Direct RayTracing (DXR) que se incluyó en la versión 1809 october update de Windows 10.
Los API de bajo nivel como DirectX 12 tienen una ventaja fundamental que es la reducción del “driver overhead”. Ahora los programadores están habilitados a diseñar como la GPU se comportará en sus programas y pueden gestionar mejor los recursos de la GPU sobre todo aprovechando la paralelización de proceso. Esto incluye un mejor soporte de múltiples GPU en un sistema e incluso aunque estas no sean del mismo fabricante.
Pueden ejecutar diferentes tipos de operaciones, normalmente “integer” o “coma flotante” aprovechando las capacidades de las gráficas compatibles y también la división de operaciones complejas en más simples procesándolas en paralelo en esos buses mas grandes. Un buen ejemplo es como AMD o Nvidia, ahora, pueden procesar operaciones de 16-Bit en sus buses de 32-Bit mejorando la eficiencia de sus gráficas de forma sustancial.
Este API ha acercado la eficiencia de uso de una GPU de consola, donde los programadores conocen perfectamente el hardware disponible, hasta el heterogéneo ecosistema que forma un PC con infinidad de posibilidades diferentes de hardware.
Actualmente DirectX 12 esta disponible, por sorpresa, para Windows 7 y Windows 10 y aunque no es directamente compatible con Xbox One, lo cierto es que se usa prácticamente al 90% de su funcionalidad para PC, las diferencias son mínimas y eso ha permitido a los desarrolladores rápidas adaptaciones de sus juegos de PC para Xbox One y viceversa.
Vulkan de Khronos
Vulkan es la evolución a API de bajo nivel de OpenGL y esta soportado por la corporación Khronos. En el mundo del PC tienen un papel secundario sobre DirectX 12 pero sus diferentes adaptaciones a diferentes plataformas, como Android, le han convertido en un referente en gráficos para movilidad. Es compatible también con Linux siendo la gran alternativa de juego en sistemas libres.
Su gran virtud es su gran capacidad de proceso en paralelo siendo tremendamente eficiente en CPU y GPUs modernas logrando bajos usos de lo primero y un gran aprovechamiento del hardware de lo segundo. Esta especialmente pensado para aprovechar procesadores de múltiples núcleos logrando una excelente distribución de carga en este tipo de procesadores, de hecho, es tanto más eficiente por cuantos más núcleos podamos aportarle.
La historia de Vulkan data de un año después de DirectX 12 y Khronos, que es una compañía sin animo de lucro, lo mantiene con tanta o más frecuencia que Microsoft hace con su propio API. Se fundamenta en el API Mantle que AMD desarrollo para su arquitectura GCN y que era otro API de bajo nivel para un reducido “driver overhead”. AMD dono sus desarrollos a Khronos y estos son los cimientos de uno de los mejores APIs gráficos del mercado.
Además de una paralelización superior este diseño permite también eliminar la precompilación de operaciones de sombreado en la GPU, pudiendo tener más efectos y en pantalla con mayor velocidad de carga, además de un ajuste mas detallado de como el hardware procesa las operaciones o como accedemos al frame buffer disponible. Es seguramente el API para PC que mas se acerca al propio hardware, incluso mejor que DirectX 12.
Su última versión, Vulkan 1.1, presentada a finales de 2018 añade mejoras importantes como el soporte de HLSL, que es la alternativa de DirectX 12 a la gestión de operaciones de shaders sin necesidad de precompilación, mejor compatibilidad con DirectX 12 (a sus muchas subrutinas a parte de los gráficos), soporte explicito para sistemas Multi-GPU con independencia del fabricante y, como no, soporte para RayTracing.
Puntos fuertes y débiles de DirectX 12 vs Vulkan
Además de las prestaciones comunes ya descritas, como el mejor aprovechamiento del hardware, más control del mismo y mejor aprovechamiento de la paralelización tanto de GPU como de CPU estos dos API también añaden la posibilidad de realizar operaciones de computo general con los chips gráficos con los que son compatibles. Esto habilita a motores gráficos compatibles, varias generaciones ya, a poder realizar operaciones matemáticas complejas que pueden ser aprovechadas por programas de toda índole, incluidos aquellos sin componentes gráficos.
En juegos también se pueden aprovechar para operaciones secundarias cada vez mas importantes como el cálculo de física realista, inteligencia artificial, efectos de sonido posicional, etc.
Ambos API tienen un gran soporte por los grandes de los gráficos, tanto AMD como Nvidia se afanan para ofrecer a estos API los controladores adecuados para lograr tanto ofrecer a sus usuarios las ultimas mejoras como afianzar el rendimiento y la estabilidad de los juegos que usan uno u otro API.
El “driver overhead” de ambos es muy reducido, de hecho, como veréis en nuestras pruebas apenas hay diferencias entre uno y otro, lo que también es un signo de la optimización importante de los controladores de ambos fabricantes.
La única diferencia mas evidente es que Vulkan tiene algo menos de dependencia de la CPU, con menor consumo medio y que también es mucho mas abierto a diferentes plataformas, incluida Windows y Linux y su homogenización con OpenGL ES, que es su versión de móviles, está en camino unificando aun mas las plataformas sobre las que se mueve.
DirectX 12 tiene a su favor la gran aceptación por parte de los desarrolladores, que parecen encontrar en este API el ecosistema perfecto para reducir sus costes ya que incluso tiene una gran integración en frameworks tan extendidos como .NET Framework donde se integra a las mil maravillas sin apenas perdida de rendimiento.
Diferencias de rendimiento en juegos con doble API
Como el movimiento se demuestra andando hemos realizado algunas pruebas de rendimiento en diferentes juegos y benchmarks que tienen capacidad para usar estos dos API para su ejecución.
Os resumimos las mejores guías de hardware que deberían interesarte:
- Mejores procesadores del mercado
- Mejores placas base del mercado
- Mejores memoria RAM del mercado
- Mejores tarjetas gráficas del mercado
- Mejores discos duros del mercado
- Mejores SSD del mercado
- Mejores chasis o cajas de PC
- Mejores fuentes de alimentación
- Mejores disipadores y refrigeraciones líquidas
- Mejores discos duros externos
Como veis, los resultados son parejos y vemos diferencias entre programas a favor y en contra de uno y de otro. Esto nos deja con la incógnita sobre cual es mejor y la respuesta es clara, depende del programa y de como su desarrollador sepa o quiera aprovechar sus prestaciones. Lo que nos queda es pensar que en cada juego los desarrolladores usaran precisamente el API que mejor aproveche las prestaciones de nuestra gráfica aunque esta claro que ambas opciones parecen mas que competentes. ¿Qué os ha parecido nuestro artículo sobre Directx 12 vs Vulkan? ¡Queremos saber vuestra opinión!