Novedades de WebGPU (Chrome 134)

François Beaufort
François Beaufort

Publicado: 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 de subgrupos de WebGPU 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 la suma de números, y ofrece un método eficiente para compartir datos entre subprocesos. Consulta la propuesta original y la entrada de ChromeStatus.

Como referencia, Google Meet experimentó aumentos de velocidad de 2.3 a 2.9 veces cuando se compararon subgrupos con productos punto de números enteros empaquetados para sombreadores de multiplicación de matriz por vector 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 acceder a los siguientes valores integrados en las etapas de sombreadores de fragmentos y de procesamiento:

  • 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 de subgrupo (por ejemplo, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) permiten una comunicación y un cálculo eficientes entre las invocaciones dentro de un subgrupo. Estas operaciones de subgrupos se clasifican como operaciones de subprocesos múltiples con una sola instrucción (SIMT). Además, las funciones integradas de cuádruple, que operan en un cuádruple de invocaciones, facilitan la comunicación de datos dentro del cuádruple.

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

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

Se quitó la compatibilidad con los tipos de texturas filtrables de punto flotante como combinables

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

Actualizaciones de Dawn

Dawn ahora requiere macOS 11 y iOS 14, y solo admite 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 de 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::Undefinedahora es WriteOnly

Esto solo abarca algunos de los aspectos destacados clave. Consulta la lista exhaustiva de confirmaciones.

Novedades de WebGPU

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

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

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