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::Undefinedagora éUniformwgpu::SamplerBindingType::Undefinedagora éFilteringwgpu::TextureSampleType::Undefinedagora éFloatwgpu::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
- Suporte ao modo de compatibilidade da WebGPU no OpenGL ES 3.1
- Anexos temporários
- Extensão texture_and_sampler_let da WGSL
- Atualizações do Dawn
Chrome 145
- Extensão subgroup_uniformity da WGSL
- Mapeamento de buffer síncrono experimental em workers
- Atualizações do Dawn
Chrome 144
- Extensão subgroup_id da WGSL
- Extensão uniform_buffer_standard_layout da WGSL
- WebGPU no Linux
- writeBuffer e writeTexture mais rápidos
- Atualizações do Dawn
Chrome 143
- Swizzle de componentes de textura
- Remover o uso de textura de armazenamento somente leitura bgra8unorm
- Atualizações do Dawn
Chrome 142
- Capacidades de suporte a formatos de textura estendidas
- Índice primitivo na WGSL
- Atualizações do Dawn
Chrome 141
- Tint IR concluído
- Análise de intervalo de números inteiros no compilador WGSL
- Atualização do SPIR-V 1.4 para o back-end do Vulkan
- Atualizações do Dawn
Chrome 140
- As solicitações de dispositivos consomem o adaptador
- Atalho para usar a textura em que a visualização de textura é usada
- A WGSL textureSampleLevel oferece suporte a texturas 1D
- Descontinuar o uso de textura de armazenamento somente leitura bgra8unorm
- Remover o atributo GPUAdapter isFallbackAdapter
- Atualizações do Dawn
Chrome 139
- Suporte a texturas 3D para formatos compactados BC e ASTC
- Novo recurso "core-features-and-limits"
- Teste de origem para o modo de compatibilidade da WebGPU
- Atualizações do Dawn
Chrome 138
- Atalho para usar o buffer como um recurso de vinculação
- Mudanças nos requisitos de tamanho para buffers mapeados na criação
- Relatório de arquitetura para GPUs recentes
- Descontinuar o atributo GPUAdapter isFallbackAdapter
- Atualizações do Dawn
Chrome 137
- Usar a visualização de textura para vinculação externalTexture
- Buffers copiados sem especificar deslocamentos e tamanho
- WGSL workgroupUniformLoad usando ponteiro para atômico
- Atributo powerPreference do GPUAdapterInfo
- Remover o atributo compatibilityMode do GPURequestAdapterOptions
- Atualizações do Dawn
Chrome 136
- Atributo GPUAdapterInfo isFallbackAdapter
- Melhorias no tempo de compilação do sombreador no D3D12
- Salvar e copiar imagens de tela
- Remover restrições do modo de compatibilidade
- Atualizações do Dawn
Chrome 135
- Permitir a criação de layout de pipeline com layout de grupo de vinculação nulo
- Permitir que as janelas de visualização se estendam além dos limites dos destinos de renderização
- Acesso mais fácil ao modo de compatibilidade experimental no Android
- Remover o limite maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 134
- Melhorar as cargas de trabalho de machine learning com subgrupos
- Remover o suporte a tipos de textura filtráveis de ponto flutuante como mescláveis
- Atualizações do Dawn
Chrome 133
- Formatos de vértice unorm8x4-bgra e de um componente adicionais
- Permitir que limites desconhecidos sejam solicitados com valor indefinido
- Mudanças nas regras de alinhamento da WGSL
- Ganhos de desempenho da WGSL com descarte
- Usar displaySize do VideoFrame para texturas externas
- Processar imagens com orientações não padrão usando copyExternalImageToTexture
- Melhorar a experiência do desenvolvedor
- Ativar o modo de compatibilidade com featureLevel
- Limpeza de recursos experimentais de subgrupo
- Descontinuar o limite maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 132
- Uso da visualização de textura
- Mesclagem de texturas de ponto flutuante de 32 bits
- Atributo adapterInfo do GPUDevice
- Configurar o contexto da tela com um formato inválido gera um erro de JavaScript
- Restrições de filtro de amostrador em texturas
- Experimentação estendida de subgrupos
- Melhorar a experiência do desenvolvedor
- Suporte experimental para formatos de textura normalizados de 16 bits
- Atualizações do Dawn
Chrome 131
- Distâncias de recorte na WGSL
- GPUCanvasContext getConfiguration()
- Primitivos de ponto e linha não podem ter viés de profundidade
- Funções integradas de verificação inclusiva para subgrupos
- Suporte experimental para multi-draw indireto
- Opção de compilação do módulo de sombreador matemática estrita
- Remover GPUAdapter requestAdapterInfo()
- Atualizações do Dawn
Chrome 130
- Mesclagem de origem dupla
- Melhorias no tempo de compilação do sombreador no Metal
- Descontinuação do GPUAdapter requestAdapterInfo()
- Atualizações do Dawn
Chrome 129
- Suporte a HDR com o modo de mapeamento de tons de tela
- Suporte expandido a subgrupos
- Atualizações do Dawn
Chrome 128
- Como testar subgrupos
- Descontinuar a configuração do viés de profundidade para linhas e pontos
- Ocultar o aviso de erros não capturados do Chrome DevTools se preventDefault
- Amostragem de interpolação WGSL primeiro e qualquer um
- Atualizações do Dawn
Chrome 127
- Suporte experimental para OpenGL ES no Android
- Atributo de informações do GPUAdapter
- Melhorias na interoperabilidade do WebAssembly
- Erros de codificador de comandos aprimorados
- Atualizações do Dawn
Chrome 126
- Aumentar o limite maxTextureArrayLayers
- Otimização do upload de buffer para o back-end do Vulkan
- Melhorias no tempo de compilação do sombreador
- Os buffers de comando enviados precisam ser exclusivos
- Atualizações do Dawn
Chrome 125
Chrome 124
- Texturas de armazenamento somente leitura e leitura/gravação
- Suporte a service workers e shared workers
- Novos atributos de informações do adaptador
- Correções de bugs
- Atualizações do Dawn
Chrome 123
- Suporte a funções integradas DP4a na WGSL
- Parâmetros de ponteiro irrestritos na WGSL
- Açúcar sintático para desreferenciar composições na WGSL
- Estado somente leitura separado para aspectos de estêncil e profundidade
- Atualizações do Dawn
Chrome 122
- Ampliar o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite maxVertexAttributes
- Atualizações do Dawn
Chrome 121
- Suporte à WebGPU no Android
- Usar o DXC em vez do FXC para compilação de sombreador no Windows
- Consultas de carimbo de data/hora em passes de computação e renderização
- Pontos de entrada padrão para módulos de sombreador
- Suporte a display-p3 como espaço de cor GPUExternalTexture
- Informações sobre heaps de memória
- Atualizações do Dawn
Chrome 120
- Suporte a valores de ponto flutuante de 16 bits na WGSL
- Ultrapassar os limites
- Mudanças no estado de estêncil de profundidade
- Atualizações de informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos de limpeza de primavera
Chrome 119
- Texturas de ponto flutuante de 32 bits filtráveis
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do Dawn
Chrome 118
- Suporte a HTMLImageElement e ImageData em
copyExternalImageToTexture() - Suporte experimental para textura de armazenamento de leitura/gravação e somente leitura
- Atualizações do Dawn
Chrome 117
- Desdefinir buffer de vértice
- Desdefinir grupo de vinculação
- Erros de silêncio da criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações de criação de módulo de sombreador SPIR-V
- Melhorar a experiência do desenvolvedor
- Pipelines de armazenamento em cache com layout gerado automaticamente
- Atualizações do Dawn
Chrome 116
- Integração do WebCodecs
- Dispositivo perdido retornado pelo GPUAdapter
requestDevice() - Manter a reprodução de vídeo suave se
importExternalTexture()for chamado - Conformidade com a especificação
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 115
- Extensões de linguagem WGSL com suporte
- Suporte experimental para Direct3D 11
- Receber GPU discreta por padrão na alimentação CA
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 114
- Otimizar o JavaScript
- getCurrentTexture() em uma tela não configurada gera InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn