Novedades de WebGPU (Chrome 134)

François Beaufort
François Beaufort

Fecha de publicación: 26 de febrero de 2025

Mejora las cargas de trabajo de aprendizaje automático con subgrupos

Después de un año de desarrollo y pruebas, ya está disponible la función WebGPU de subgrupos que habilita el paralelismo a nivel de SIMD. Permite que los subprocesos de un grupo de trabajo se comuniquen y ejecuten operaciones matemáticas colectivas, como calcular una suma de números, y ofrece un método eficiente para compartir datos entre subprocesos. Consulta la propuesta original y la entrada de chromestatus.

A modo de referencia, Google Meet registró un aumento de velocidad de entre 2.3 y 2.9 veces cuando se compararon subgrupos con productos punto enteros empaquetados para sombreadores de multiplicación de matrices vectoriales en algunos dispositivos durante la prueba de origen.

Cuando la función "subgroups" esté disponible en un GPUAdapter, solicita un GPUDevice con esta función para obtener compatibilidad con subgrupos en WGSL. Es útil verificar los valores de información del adaptador subgroupMinSize y subgroupMaxSize, por ejemplo, si tienes un algoritmo codificado que requiere un subgrupo de un tamaño determinado.

También debes habilitar explícitamente esta extensión en tu código WGSL con enable subgroups; para obtener acceso a los siguientes valores integrados en las etapas de sombreadores de cómputo y fragmentos:

  • subgroup_invocation_id: Es un valor integrado para el índice del subproceso dentro del subgrupo.

  • subgroup_size: Es un valor integrado para el acceso al tamaño del subgrupo.

Las numerosas funciones integradas del subgrupo (por ejemplo, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) permiten una comunicación y un procesamiento eficientes entre invocaciones dentro de un subgrupo. Estas operaciones de subgrupo se clasifican como operaciones de subprocesos múltiples de una sola instrucción (SIMT). Además, las funciones integradas en el cuádruple, que operan en un cuádruple de invocaciones, facilitan la comunicación de datos dentro del cuádruple.

Puedes usar valores f16 con subgrupos cuando solicitas un GPUDevice con las funciones "shader-f16" y "subgroups".

El siguiente ejemplo es un buen punto de partida para explorar subgrupos: muestra un sombreador que usa la función integrada subgroupExclusiveMul() para calcular factoriales sin leer ni escribir memoria para comunicar resultados intermedios.

Se quitó la compatibilidad con los tipos de texturas filtrables de números de punto flotante como mezclables.

Ahora que la combinación de texturas de números de punto flotante de 32 bits está disponible con la función "float32-blendable", se quitó la compatibilidad incorrecta con los tipos de texturas filtrables de números de punto flotante como combinables. Consulta el problema 364987733.

Actualizaciones de Dawn

Dawn ahora requiere macOS 11 y iOS 14, y solo es compatible con Metal 2.3 y versiones posteriores. Consulta el problema 381117827.

El nuevo método GetWGSLLanguageFeatures() de wgpu::Instance ahora reemplaza a EnumerateWGSLLanguageFeatures(). Consulta el problema 368672124.

Los siguientes tipos de vinculación tienen un valor Undefined, y se cambiaron sus valores predeterminados en el diseño de vinculación. Consulta el problema 377820810.

  • wgpu::BufferBindingType::Undefined ahora es Uniform.
  • wgpu::SamplerBindingType::Undefined ahora es Filtering.
  • wgpu::TextureSampleType::Undefined ahora es Float.
  • wgpu::StorageTextureAccess::Undefined ahora es WriteOnly

Esto solo abarca algunos de los aspectos más destacados. Consulta la lista exhaustiva de confirmaciones.

Novedades de WebGPU

Una lista de todo lo que se analizó en la serie Novedades de WebGPU.

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113