Wat is er nieuw in WebGPU (Chrome 134)

François Beaufort
François Beaufort

Gepubliceerd: 26 februari 2025

Verbeter machine learning-workloads met subgroepen

Na een jaar van ontwikkeling en testen is de WebGPU-functie voor subgroepen, die parallellisme op SIMD-niveau mogelijk maakt, nu beschikbaar. Het stelt threads in een werkgroep in staat om te communiceren en collectieve wiskundige bewerkingen uit te voeren, zoals het berekenen van een som van getallen, en biedt een efficiënte methode voor het delen van gegevens tussen threads. Zie het oorspronkelijke voorstel en het chromestatus-artikel .

Ter referentie: Google Meet zag een snelheidstoename van 2,3-2,9 keer bij het vergelijken van subgroepen met gepakte gehele-getallenpuntproducten voor matrix-vectorvermenigvuldigingsshaders op sommige apparaten tijdens de oorspronkelijke proef .

Wanneer de functie "subgroups" beschikbaar is in een GPUAdapter , vraag dan een GPUDevice met deze functie aan om ondersteuning voor subgroepen in WGSL te krijgen. Het is handig om de adapterinfowaarden subgroupMinSize en subgroupMaxSize te controleren, bijvoorbeeld als u een hardgecodeerd algoritme hebt dat een subgroep van een bepaalde grootte vereist.

U moet deze extensie ook expliciet inschakelen in uw WGSL-code met enable subgroups; om toegang te krijgen tot de volgende ingebouwde waarden in zowel de compute- als fragment shader-fasen:

  • subgroup_invocation_id : een ingebouwde waarde voor de index van de thread binnen de subgroep.

  • subgroup_size : een ingebouwde waarde voor toegang tot subgroepgrootte.

De talrijke ingebouwde subgroepfuncties (bijvoorbeeld subgroupAdd() , subgroupBallot() , subgroupBroadcast() , subgroupShuffle() ) maken efficiënte communicatie en berekeningen tussen aanroepen binnen een subgroep mogelijk. Deze subgroepbewerkingen worden geclassificeerd als single-instruction multiple-thread (SIMT)-bewerkingen. Bovendien faciliteren de ingebouwde quadfuncties , die op een quad van aanroepen werken, de datacommunicatie binnen de quad.

U kunt f16-waarden gebruiken met subgroepen wanneer u een GPUDevice aanvraagt ​​met zowel de functies "shader-f16" als "subgroups" .

Het volgende voorbeeld is een goed startpunt voor het verkennen van subgroepen: het toont een shader die de ingebouwde functie subgroupExclusiveMul() gebruikt om faculteiten te berekenen zonder dat er geheugen hoeft te worden gelezen of geschreven om tussenliggende resultaten te communiceren.

Verwijder float-filterbare textuurtypen die ondersteuning bieden als mengbaar

Nu het blenden van 32-bits float-texturen beschikbaar is met de functie "float32-blendable" , is de onjuiste ondersteuning voor float-filterbare textuurtypen als blendbaar verwijderd. Zie probleem 364987733 .

Dawn-updates

Dawn vereist nu macOS 11 en iOS 14 en ondersteunt alleen Metal 2.3+. Zie probleem 381117827 .

De nieuwe GetWGSLLanguageFeatures() -methode van wgpu::Instance vervangt nu EnumerateWGSLLanguageFeatures() . Zie probleem 368672124 .

De volgende bindingstypen hebben een Undefined waarde en hun standaardwaarden in de bindingslayout zijn gewijzigd. Zie probleem 377820810 .

  • wgpu::BufferBindingType::Undefined is nu Uniform
  • wgpu::SamplerBindingType::Undefined Filtering nu
  • wgpu::TextureSampleType::Undefined is nu Float
  • wgpu::StorageTextureAccess::Undefined is nu WriteOnly

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.

Chroom 140

Chroom 139

Chroom 138

Chroom 137

Chroom 136

Chroom 135

Chroom 134

Chroom 133

Chroom 132

Chroom 131

Chroom 130

Chroom 129

Chroom 128

Chroom 127

Chroom 126

Chroom 125

Chroom 124

Chroom 123

Chroom 122

Chroom 121

Chroom 120

Chroom 119

Chroom 118

Chroom 117

Chroom 116

Chroom 115

Chroom 114

Chroom 113