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 zorgt ervoor dat threads in een werkgroep kunnen communiceren en collectieve wiskundige bewerkingen kunnen uitvoeren, zoals het berekenen van een som van getallen, en biedt een efficiënte methode voor het delen van gegevens over de threads heen. Bekijk het oorspronkelijke voorstel en de chromestatus-invoer .
Ter referentie: Google Meet zag een snelheidstoename van 2,3 tot 2,9 keer bij het benchmarken van subgroepen met verpakte integer dot-producten voor matrix-vector multiply shaders op sommige apparaten tijdens de origin-proef .
Wanneer de functie "subgroups"
beschikbaar is in een GPUAdapter
, vraagt u een GPUDevice
met deze functie aan om ondersteuning voor subgroepen te krijgen in WGSL. Het is handig om de informatiewaarden van subgroupMinSize
en subgroupMaxSize
adapter 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 compute- als fragment shaders-fasen:
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 functies van subgroepen (bijvoorbeeld subgroupAdd()
, subgroupBallot()
, subgroupBroadcast()
, subgroupShuffle()
) maken efficiënte communicatie en berekeningen tussen aanroepen binnen een subgroep mogelijk. Deze subgroepbewerkingen worden geclassificeerd als SIMT-bewerkingen (single-instruction multiple-thread). Bovendien vergemakkelijken de ingebouwde functies van de quad , die werken op een quad aanroepingen, 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 arcering die de ingebouwde functie subgroupExclusiveMul()
gebruikt om faculteiten te berekenen zonder geheugen te lezen of te schrijven om tussenresultaten te communiceren.
Verwijder de float-filterbare textuurtypes als mengbaar
Nu de 32-bits float textures blending beschikbaar is met de "float32-blendable"
functie, wordt de onjuiste ondersteuning voor float filterbare textuurtypen als blendable verwijderd. Zie uitgave 364987733 .
Dawn-updates
Dawn vereist nu macOS 11 en iOS 14 en ondersteunt alleen Metal 2.3+. Zie uitgave 381117827 .
De nieuwe GetWGSLLanguageFeatures()
methode van de wgpu::Instance
vervangt nu EnumerateWGSLLanguageFeatures()
. Zie uitgave 368672124 .
De volgende bindingstypen hebben een Undefined
waarde en hun standaardwaarden in de bindingsindeling zijn gewijzigd. Zie uitgave 377820810 .
-
wgpu::BufferBindingType::Undefined
is nuUniform
-
wgpu::SamplerBindingType::Undefined
is nuFiltering
-
wgpu::TextureSampleType::Undefined
is nuFloat
-
wgpu::StorageTextureAccess::Undefined
is nuWriteOnly
Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .
Wat is er nieuw in WebGPU
Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.
Chroom 134
- Verbeter machine learning-workloads met subgroepen
- Verwijder de float-filterbare textuurtypes als mengbaar
- Dawn-updates
Chroom 133
- Extra unorm8x4-bgra en 1-component hoekpuntformaten
- Sta toe dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- WGSL-uitlijningsregels veranderen
- WGSL-prestaties verbeteren met weggooien
- Gebruik VideoFrame displaySize voor externe texturen
- Verwerk afbeeldingen met een niet-standaardoriëntatie met behulp van copyExternalImageToTexture
- Verbetering van de ontwikkelaarservaring
- Schakel de compatibiliteitsmodus in met featureLevel
- Experimentele subgroep biedt opschoning
- Beëindig de maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 132
- Gebruik van textuurweergave
- 32-bits zwevende texturen mengen
- GPUDevice adapterInfo-kenmerk
- Het configureren van canvascontext met een ongeldig formaat levert een JavaScript-fout op
- Filteren van samplerbeperkingen op texturen
- Uitgebreide experimenten met subgroepen
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chroom 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen diepteafwijking hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor indirecte meertrekking
- Compilatieoptie Shader-module strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Mengen met dubbele bron
- Verbeteringen in de compilatietijd van Shader op Metal
- Beëindiging van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
- HDR-ondersteuning met canvas-tone mapping-modus
- Uitgebreide ondersteuning voor subgroepen
- Dawn-updates
Chroom 128
- Experimenteren met subgroepen
- Beëindig het instellen van diepteafwijking voor lijnen en punten
- Niet-opgevangen fout verbergen DevTools-waarschuwing als preventieDefault
- WGSL interpoleert eerst de bemonstering en een van beide
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in de interoperabiliteit van WebAssembly
- Verbeterde opdracht-encoderfouten
- Dawn-updates
Chroom 126
- Verhoog de maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van Shader
- Ingezonden opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lezen-schrijven opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde medewerkers
- Nieuwe attributen voor adapterinformatie
- Bugfixes
- Dawn-updates
Chroom 123
- DP4a ingebouwde functies ondersteunen in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezen-status voor stencil- en diepteaspecten
- Dawn-updates
Chroom 122
- Vergroot het bereik met de compatibiliteitsmodus (functie in ontwikkeling)
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chroom 121
- Ondersteuning WebGPU op Android
- Gebruik DXC in plaats van FXC voor shader-compilatie op Windows
- Tijdstempelquery's in reken- en renderpassen
- Standaardingangspunten voor shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenheaps
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bit drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Veranderingen in de staat van de diepte-stencil
- Updates van adapterinformatie
- Kwantisering van tijdstempelquery's
- Lenteschoonmaakfuncties
Chroom 119
- Filterbare 32-bit float-texturen
- unorm10-10-10-2 hoekpuntformaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chroom 118
- HTMLImageElement- en ImageData-ondersteuning in
copyExternalImageToTexture()
- Experimentele ondersteuning voor lees-schrijf- en alleen-lezen opslagtextuur
- Dawn-updates
Chroom 117
- Schakel hoekpuntbuffer uit
- Schakel de bindingsgroep uit
- Stil fouten bij het maken van asynchrone pijplijnen wanneer het apparaat verloren gaat
- Updates voor het maken van SPIR-V-shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching van pijplijnen met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Houd het afspelen van video soepel als
importExternalTexture()
wordt aangeroepen - Spec-conformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Krijg standaard een discrete GPU op wisselstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- Optimaliseer JavaScript
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates