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, è ora disponibile la funzionalità di sottogruppi WebGPU che consente il parallelismo a livello SIMD. Consente ai thread di un gruppo di lavoro di comunicare ed eseguire operazioni matematiche collettive, ad esempio calcolare la somma di numeri, e offre un metodo efficiente per la condivisione dei dati tra i 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 scalari interi compressi 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 sugli adattatori subgroupMinSize e subgroupMaxSize, ad esempio se hai un algoritmo hardcoded che richiede un sottogruppo di una determinata dimensione.

Devi anche attivare esplicitamente questa estensione nel codice WGSL con enable subgroups; per accedere ai seguenti valori incorporati nelle fasi degli shader di calcolo e di frammenti:

  • subgroup_invocation_id: Un valore integrato per l'indice del thread all'interno del sottogruppo.

  • subgroup_size: Un valore integrato per l'accesso alla dimensione del sottogruppo.

Le numerose funzioni integrate 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 sui sottogruppi sono classificate come operazioni single-instruction multiple-thread (SIMT). Inoltre, le funzioni integrate quad, che operano su un quad di chiamate, 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 integrata subgroupExclusiveMul() per calcolare i fattoriali senza leggere o scrivere in memoria per comunicare i risultati intermedi.

Rimuovi il supporto dei tipi di texture filtrabili float come miscelabili

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

Aggiornamenti all'alba

Dawn ora richiede macOS 11 e iOS 14 e supporta solo Metal 2.3+. Vedi il problema 381117827.

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

I seguenti tipi di binding hanno un valore Undefined e i relativi valori predefiniti nel layout di binding sono stati modificati. Vedi problema 377820810.

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

Questi sono solo alcuni dei punti salienti. Consulta l'elenco completo dei commit.

Novità di WebGPU

Un elenco di tutti gli argomenti trattati nella serie Novità di 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