Fragmentar características en Vulkan

Fragmentar características en Vulkan. La API de Vulkan está en constante desarrollo, con un grupo cada vez mayor de extensiones para resolver problemas y agregar nuevas características. Sin embargo, las extensiones generalmente no vienen con una línea de tiempo de implementación o una garantía de qué dispositivos las admitirán.

Como resultado, puede ser difícil para los desarrolladores tener una idea clara de cuándo y dónde se admitirán las extensiones, y en qué funcionalidad se puede confiar para los proyectos actuales y futuros. Esta situación es aún más compleja para los desarrolladores que publican aplicaciones a través de plataformas móviles y de escritorio.

Con Vulkan 1.3 y la nueva hoja de ruta pública, estamos dando un paso significativo para reducir la fragmentación de características.

Abordar la fragmentación de características en Vulkan
Abordar la fragmentación de características en Vulkan

Vulkan 1.3

Como era de esperar, Vulkan 1.3 agrega una gama de características que son ampliamente implementables en todo el hardware con soporte activo. De hecho, cualquier hardware que tenga una implementación 1.2 y sea compatible debería ser capaz de admitir Vulkan 1.3.

Por ejemplo, VK_KHR_dynamic_rendering agrega una ruta optimizada para comenzar a renderizar: las aplicaciones que no pueden o no quieren usar subpasos no necesitan crear ningún pase de renderizado u objetos framebuffer. Lo que reduce significativamente la complejidad de la aplicación! El blog Streamlining Render Passes entra en más detalles, y llevar esta opción a Vulkan 1.3 ayuda a garantizar que sea compatible con los dispositivos futuros.

También hemos agregado o requerido una serie de características en Vulkan 1.3 que facilitan la administración de la compilación de canalizaciones:

El estado dinámico adicional introducido originalmente

or VK_EXT_extended_dynamic_state y VK_EXT_extended_dynamic_state2 ayuda a reducir el número de permutaciones de canalizaciones necesarias. VK_EXT_pipeline_creation_cache_control ofrece a los desarrolladores más control sobre cómo y cuándo se compilan las canalizaciones VK_EXT_pipeline_creation_feedback proporciona información sobre las canalizaciones compiladas, lo que facilita el perfil y la depuración de problemas de canalización.

Algunas opciones pasan a ser por defecto

Ahora se requieren algunas características que antes eran opcionales en versiones anteriores de Vulkan. En particular, el soporte de direcciones de dispositivos de búfer, lo que permite a los desarrolladores comenzar a usar punteros en todo el ecosistema.

Todavía hay trabajo por hacer para dar soporte en HLSL, pero los usuarios de herramientas y GLSL ya pueden aprovechar esto. Arm lanzó una publicación de blog que explica los entresijos de esta característica única si está interesado en obtener más información.

Vulkan 1.3 también requiere el modelo de memoria Vulkan, que mejora las garantías hechas por la especificación sobre primitivas atómicas y de sincronización.

VK_EXT_subgroup_size_control agregado soporte para un control más fino sobre los subgrupos. En particular, permite a los proveedores anunciar varios tamaños de subgrupo, permite a los desarrolladores seleccionar un tamaño de subgrupo particular (donde se admita) y requiere una asignación definida entre subgrupos y grupos de trabajo para tamaños de grupo de trabajo alineados.

Sombreador de cómputo SPIR-V 1.6

En Vulkan 1.3, cualquier sombreador de cómputo SPIR-V 1.6 obtendrá automáticamente la asignación definida y el tamaño de subgrupo variable.

Los marcos de aprendizaje automático de nivel superior están ejecutando modelos cada vez más a través de Vulkan, y como un paso para mejorar esta ruta de aceleración, hemos agregado VK_KHR_shader_integer_dot_product a Vulkan 1.3.

Los algoritmos de aprendizaje automático deberían poder usar esto en lugar de las funciones de producto de puntos implementadas manualmente y beneficiarse de la aceleración de hardware de estas instrucciones cuando estén disponibles.

Fragmentar características en Vulkan

La API expone si una instrucción determinada se acelera para permitir un mejor ajuste por dispositivo.

Vulkan 1.3 también agrega una serie de mejoras menores que hacen que el soporte del ecosistema sea más consistente y permiten características futuras como VK_KHR_synchronization2, VK_KHR_maintenance4, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2 y VK_EXT_texel_buffer_alignment.

Tienes más información en el sitio web de Vulkan. En este mismo blog puedes ver más artículos sobre el tema. También tienes toda la información agrupada en el foro, sigue leyendo…