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

Após um ano de desenvolvimento e testes, o recurso de subgrupos da 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 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 aumentos de velocidade de 2,3 a 2,9 vezes ao comparar subgrupos com produtos de ponto inteiro 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 na WGSL. É útil verificar os valores de informações do adaptador subgroupMinSize e subgroupMaxSize, por exemplo, se você tiver um algoritmo codificado que exige um subgrupo de um 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 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 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 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 no 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 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 mescláveis

Agora que a mesclagem 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 mesclá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 ao 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 seguintes tipos de vinculação 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::Undefinedagora é WriteOnly

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

Novidades na WebGPU

Uma lista de tudo o que foi abordado na série Novidades na WebGPU.

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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