Novidades do WebGPU (Chrome 134)

François Beaufort
François Beaufort

Publicado em 26 de fevereiro de 2025

Melhorar as cargas de trabalho de aprendizado de máquina com subgrupos

Após um ano de desenvolvimento e testes, o recurso de subgrupos da WebGPU que ativa 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 o cálculo de uma soma de números, e oferece um método eficiente para o compartilhamento de dados entre linhas de execução. Consulte a proposta original e a entrada do chromestatus.

Para referência, o Google Meet teve um aumento de velocidade de 2,3 a 2,9 vezes ao comparar subgrupos com produtos de ponto inteiro empacotados para shaders 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 receber suporte a subgrupos no WGSL. É útil verificar os valores das informações do adaptador subgroupMinSize e subgroupMaxSize, por exemplo, se você tiver um algoritmo codificado que exige um subgrupo de determinado tamanho.

Você também precisa ativar explicitamente essa extensão no código WGSL com enable subgroups; para ter acesso aos seguintes valores integrados nas fases de sombreadores de computação e de fragmentos:

  • subgroup_invocation_id: um valor integrado para o índice da linha dentro do subgrupo.

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

As diversas funções integradas de subgrupo (por exemplo, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) permitem a comunicação e a computação eficientes entre invocações em um subgrupo. Essas operações de subgrupo são classificadas como operações de thread múltipla de instrução única (SIMT, na sigla em inglês). Além disso, as funções integradas do 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 sombreador que usa a função integrada subgroupExclusiveMul() para calcular fatores sem ler ou gravar memória para comunicar resultados intermediários.

Remover o suporte a tipos de textura com filtro de ponto flutuante como mescla

Agora que a mistura 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 misturáveis foi removido. Consulte o problema 364987733.

Atualizações do Dawn

O Dawn agora exige o macOS 11 e o iOS 14 e só oferece suporte para o Metal 2.3 ou mais recente. Consulte o problema 381117827.

O novo método GetWGSLLanguageFeatures() do wgpu::Instance agora substitui o 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
  • wgpu::StorageTextureAccess::Undefined agora é WriteOnly

Isso abrange apenas alguns dos principais destaques. Confira a lista completa de confirmações.

Novidades na WebGPU

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