Nieuw in WebGPU (Chrome 134)

François Beaufort
François Beaufort

Gepubliceerd: 26 februari 2025

Machine learning-workloads verbeteren met subgroepen

Na een jaar van ontwikkeling en tests is de WebGPU-functie die parallelle verwerking op SIMD-niveau mogelijk maakt, nu beschikbaar. Hiermee kunnen threads in een werkgroep communiceren en gezamenlijke wiskundige bewerkingen uitvoeren, zoals de som van getallen berekenen. Ook biedt het een efficiënte methode om gegevens tussen threads te delen. Ga naar het oorspronkelijke voorstel en het chromestatus-item.

Ter referentie: Google Meet zag 2,3 tot 2,9 keer hogere snelheden toen subgroepen werden vergeleken met dotproducten van gepackte gehele getallen voor matrix-vectorvermenigvuldigingsshaders op sommige apparaten tijdens de origin-test.

Als de "subgroups"-functie beschikbaar is in een GPUAdapter, vraag je een GPUDevice met deze functie aan om subgroepen te ondersteunen in WGSL. Het is handig om de waarden van de subgroupMinSize- en subgroupMaxSize-adapter te controleren, bijvoorbeeld als u een hardgecodeerd algoritme heeft dat een subgroep van een bepaalde grootte vereist.

Je moet deze extensie ook expliciet aanzetten in je WGSL-code met enable subgroups; om toegang te krijgen tot de volgende ingebouwde waarden in zowel de berekenings- als de fragment-shaderfasen:

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

  • subgroup_size: Een ingebouwde waarde voor toegang tot de grootte van subgroepen.

De vele ingebouwde functies voor subgroepen (bijvoorbeeld subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) maken efficiënte communicatie en berekeningen mogelijk tussen aanroepen binnen een subgroep. Deze subgroepbewerkingen worden geclassificeerd als SIMT-bewerkingen (single-instruction multiple-thread). Daarnaast vergemakkelijken de 4 ingebouwde functies, die werken op een quad van aanroepen, de gegevenscommunicatie binnen de quad.

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

Het volgende voorbeeld is een goed startpunt om subgroepen te verkennen: het toont een shader die de ingebouwde functie subgroupExclusiveMul() gebruikt om faculteiten te berekenen zonder geheugen te lezen of te schrijven om tussenresultaten te communiceren.

Ondersteuning verwijderen voor zwevende filterbare textuurtypen als mengbaar

Nu 32-bits floattexturen mengen beschikbaar is met de functie "float32-blendable", is de onjuiste ondersteuning voor filterbare floattextuurtypen als mengbaar verwijderd. Ga naar probleem 364987733.

Updates voor Dawn

Dawn vereist nu macOS 11 en iOS 14 en ondersteunt alleen Metal 2.3 en hoger. Ga naar issue 381117827.

De nieuwe GetWGSLLanguageFeatures()-methode van de wgpu::Instance vervangt nu EnumerateWGSLLanguageFeatures(). Ga naar issue 368672124.

De volgende bindingstypen hebben een Undefined-waarde en de standaardwaarden in de bindingsindeling zijn gewijzigd. Ga naar probleem 377820810.

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

Dit zijn maar enkele van de belangrijkste punten. Neem de uitgebreide lijst met doorvoeringen door.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

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