Novidades do WebGPU (Chrome 134)

François Beaufort
François Beaufort

Publicado em: 26 de fevereiro de 2025

Melhorar as cargas de trabalho de machine learning com subgrupos

Depois de um ano de desenvolvimento e testes, o recurso de subgrupos do WebGPU que permite o paralelismo no nível SIMD já está disponível. Ele permite que as linhas de execução em um grupo de trabalho se comuniquem e executem operações matemáticas coletivas, como calcular uma soma de números, e oferece um método eficiente para compartilhamento de dados entre linhas de execução. Consulte a proposta original e a entrada do chromestatus.

Para referência, o Google Meet teve aumentos de velocidade de 2,3 a 2,9 vezes ao comparar subgrupos com produtos escalares de números inteiros compactados para sombreadores de multiplicação de matriz-vetor em alguns dispositivos durante o teste de origem.

Quando o recurso "subgroups" estiver disponível em um GPUAdapter, solicite um GPUDevice com esse recurso para ter suporte a subgrupos em WGSL. É útil verificar os valores de informações do adaptador subgroupMinSize e subgroupMaxSize, por exemplo, se você tiver um algoritmo codificado que exija um subgrupo de um determinado tamanho.

Também é necessário ativar explicitamente essa extensão no seu código WGSL com enable subgroups; para ter acesso aos seguintes valores integrados nas etapas de sombreadores de computação e de fragmentos:

  • subgroup_invocation_id: um valor integrado para o índice da linha de execução no subgrupo.

  • subgroup_size: um valor integrado para acesso ao tamanho do subgrupo.

As várias funções integradas de subgrupo (por exemplo, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) permitem uma comunicação e computação eficientes entre invocações em um subgrupo. Essas operações de subgrupo são classificadas como operações de instrução única e várias linhas de execução (SIMT, na sigla em inglês). Além disso, as funções integradas de quad, que operam em um quad de invocações, facilitam a comunicação de dados dentro do quad.

É possível usar valores f16 com subgrupos ao solicitar um GPUDevice com os recursos "shader-f16" e "subgroups".

O exemplo a seguir é um bom ponto de partida para explorar subgrupos. Ele mostra um shader que usa a função integrada subgroupExclusiveMul() para calcular fatoriais sem ler ou gravar memória para comunicar resultados intermediários.

Remover o suporte a tipos de textura filtráveis de ponto flutuante como combináveis

Agora que a fusão de texturas de ponto flutuante de 32 bits está disponível com o recurso "float32-blendable", o suporte incorreto para tipos de textura filtráveis de ponto flutuante como combináveis foi removido. Consulte o problema 364987733.

Atualizações do amanhecer

O Dawn agora exige o macOS 11 e o iOS 14 e só é compatível com o Metal 2.3 ou mais recente. Consulte o problema 381117827.

O novo método GetWGSLLanguageFeatures() do wgpu::Instance agora substitui EnumerateWGSLLanguageFeatures(). Consulte o problema 368672124.

Os tipos de vinculação a seguir têm um valor Undefined, e os valores padrão no layout de vinculação foram alterados. Consulte o problema 377820810.

  • wgpu::BufferBindingType::Undefined agora é Uniform
  • wgpu::SamplerBindingType::Undefined agora é Filtering
  • wgpu::TextureSampleType::Undefined agora é Float
  • O wgpu::StorageTextureAccess::Undefined agora é WriteOnly

Isso abrange apenas alguns dos principais destaques. Confira a lista completa de commits.

Novidades no WebGPU

Uma lista de tudo o que foi abordado na série O que há de novo no 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