Novità di WebGPU (Chrome 134)

François Beaufort
François Beaufort

Data di pubblicazione: 26 febbraio 2025

Migliorare i carichi di lavoro di machine learning con i sottogruppi

Dopo un anno di sviluppo e prove, la funzionalità WebGPU dei sottogruppi che consente il parallelismo a livello SIMD è ora disponibile. Consente ai thread di un gruppo di lavoro di comunicare ed eseguire operazioni matematiche collettive, come il calcolo di una somma di numeri, e offre un metodo efficiente per la condivisione dei dati tra thread. Consulta la proposta originale e la voce di chromestatus.

Come riferimento, Google Meet ha registrato un aumento della velocità di 2,3-2,9 volte durante il benchmarking dei sottogruppi rispetto ai prodotti in virgola mobile con numeri interi impacchettati per gli shader di moltiplicazione matrice-vettore su alcuni dispositivi durante la prova dell'origine.

Quando la funzionalità "subgroups" è disponibile in un GPUAdapter, richiedi un GPUDevice con questa funzionalità per ottenere il supporto dei sottogruppi in WGSL. È utile controllare i valori delle informazioni dell'adattatore subgroupMinSize e subgroupMaxSize, ad esempio se hai un algoritmo hardcoded che richiede un sottogruppo di una determinata dimensione.

Inoltre, devi attivare esplicitamente questa estensione nel codice WGSL con enable subgroups; per accedere ai seguenti valori predefiniti sia nelle fasi di calcolo che negli shader di frammento:

  • subgroup_invocation_id: un valore predefinito per l'indice del thread all'interno del sottogruppo.

  • subgroup_size: un valore predefinito per l'accesso alle dimensioni dei sottogruppi.

Le numerose funzioni predefinite dei sottogruppi (ad esempio subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) consentono una comunicazione e un calcolo efficienti tra le invocazioni all'interno di un sottogruppo. Queste operazioni di sottogruppi sono classificate come operazioni SIMT (single-instruction multiple-thread). Inoltre, le funzioni integrate del quad, che operano su un quad di invocazioni, facilitano la comunicazione dei dati all'interno del quad.

Puoi utilizzare i valori f16 con i sottogruppi quando richiedi un GPUDevice con le funzionalità "shader-f16" e "subgroups".

Il seguente esempio è un buon punto di partenza per esplorare i sottogruppi: mostra uno shader che utilizza la funzione subgroupExclusiveMul() integrata per calcolare i fattoriali senza leggere o scrivere nella memoria per comunicare i risultati intermedi.

Rimuovere il supporto dei tipi di texture filtrabili con valori float come miscelabili

Ora che la fusione delle texture con valori float a 32 bit è disponibile con la funzionalità "float32-blendable", il supporto errato dei tipi di texture filtrabili con valori float come miscibibili è stato rimosso. Consulta il problema 364987733.

Aggiornamenti di Dawn

Dawn ora richiede macOS 11 e iOS 14 e supporta solo Metal 2.3 e versioni successive. Consulta il problema 381117827.

Il nuovo metodo GetWGSLLanguageFeatures() di wgpu::Instance ora sostituisce EnumerateWGSLLanguageFeatures(). Consulta il problema 368672124.

I seguenti tipi di vincolo hanno un valore Undefined e i relativi valori predefiniti nel layout del vincolo sono stati modificati. Consulta il problema 377820810.

  • wgpu::BufferBindingType::Undefined ora è Uniform
  • wgpu::SamplerBindingType::Undefined ora è Filtering
  • wgpu::TextureSampleType::Undefined ora è Float
  • wgpu::StorageTextureAccess::Undefined è diventato WriteOnly

Sono riportati solo alcuni punti salienti. Consulta l'elenco completo dei commit.

Novità di WebGPU

Un elenco di tutto ciò che è stato trattato nella serie Novità di 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