Wat is er nieuw in WebGPU (Chrome 134)

François Beaufort
François Beaufort

Gepubliceerd: 26 februari 2025

Optimaliseer machine learning-workloads met subgroepen.

Na een jaar van ontwikkeling en testen is de WebGPU-subgroepfunctie, die parallellisme op SIMD-niveau mogelijk maakt, nu beschikbaar. Hiermee kunnen threads in een werkgroep communiceren en gezamenlijke wiskundige bewerkingen uitvoeren, zoals het berekenen van een som van getallen, en biedt het een efficiënte methode voor het delen van gegevens tussen threads. Zie het oorspronkelijke voorstel en de Chromestatus-pagina .

Ter referentie: Google Meet zag een snelheidsverbetering van 2,3 tot 2,9 keer bij het benchmarken van subgroepen met behulp van packed integer dot products voor matrix-vectorvermenigvuldigingsshaders op sommige apparaten tijdens de oorspronkelijke test .

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

Je moet deze extensie ook expliciet inschakelen in je WGSL-code met enable subgroups; om toegang te krijgen tot de volgende ingebouwde waarden in zowel de compute- als de fragmentshaderfase:

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

  • subgroup_size : Een ingebouwde waarde voor toegang tot de subgroepgrootte.

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

Je kunt f16-waarden met subgroepen gebruiken wanneer je een GPUDevice aanvraagt ​​met zowel de "shader-f16" als "subgroups" -functie.

Het volgende voorbeeld is een goed uitgangspunt voor het verkennen van subgroepen: het toont een shader die de ingebouwde functie subgroupExclusiveMul() gebruikt om faculteiten te berekenen zonder geheugen te lezen of te schrijven om tussentijdse resultaten door te geven.

Verwijder de ondersteuning voor filterbare textuurtypen met zwevende deeltjes als mengbaar.

Nu het mengen van 32-bits float-texturen beschikbaar is met de functie "float32-blendable" , is de onjuiste ondersteuning voor filterbare float-textuurtypen als mengbaar 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 methode GetWGSLLanguageFeatures() 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 wordt nu Filtering
  • wgpu::TextureSampleType::Undefined is nu Float
  • wgpu::StorageTextureAccess::Undefined is nu WriteOnly

Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

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