Experimenteren met subgroepen
De subgroepfunctie maakt parallellisme op SIMD-niveau mogelijk, waardoor threads binnen een groep met elkaar kunnen communiceren en gezamenlijke wiskundige bewerkingen kunnen uitvoeren (bijvoorbeeld de som van 16 getallen berekenen). Dit biedt een zeer efficiënte vorm van gegevensuitwisseling tussen threads.
Een minimale implementatie van het subgroepvoorstel is beschikbaar voor lokale tests achter de vlag "Unsafe WebGPU Support" op chrome://flags/#enable-unsafe-webgpu .
Je kunt ook subgroepen op je site met echte gebruikers uitproberen door je aan te melden voor de Origin-proef . Lees ' Aan de slag met Origin-proeven' voor instructies over hoe je je site kunt voorbereiden op het gebruik van Origin-proeven. De Origin-proef loopt van Chrome 128 tot en met 131 (tot en met 19 februari 2025). Zie 'Intent to Experiment' .
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 en controleer de limieten minSubgroupSize en maxSubgroupSize .
Je moet deze extensie ook expliciet inschakelen in je WGSL-code met enable subgroups; . Wanneer deze is ingeschakeld, krijg je toegang tot de volgende toevoegingen:
-
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. -
subgroupBallot(value): Retourneert een set bitvelden waarbij de bit die overeenkomt metsubgroup_invocation_id1 is alsvaluewaar is voor die actieve aanroep en 0 anders. -
subgroupBroadcast(value, id): Verstuurt devaluevan de aanroep metsubgroup_invocation_iddie overeenkomt metidnaar alle aanroepen binnen de subgroep. Opmerking:idmoet een compile-time constante zijn.
In de toekomst zullen er meer ingebouwde functies worden toegevoegd, zoals subgroupAdd , subgroupAll , subgroupElect en subgroupShuffle . Zie issue 354738715 .
Om f16 toe te staan in subgroepbewerkingen, vraagt u een GPUDevice aan met de features "subgroups" , "subgroups-f16" en "shader-f16" , en schakelt u deze vervolgens in uw WGSL-code in met enable f16, subgroups, subgroups_f16;
Het volgende codefragment biedt een basis om mee te experimenteren en de mogelijkheden van subgroepen te ontdekken.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
Het instellen van dieptevoorkeur voor lijnen en punten wordt afgeraden.
Een wijziging in de WebGPU-specificaties zorgt ervoor dat het een validatiefout oplevert om depthBias , depthBiasSlopeScale en depthBiasClamp in te stellen op een waarde die niet nul is, wanneer de topologie van een renderpipeline van het type lijn of punt is. Om ontwikkelaars voldoende tijd te geven hun code bij te werken, wordt er een waarschuwing in de DevTools Console weergegeven over deze aanstaande validatie, terwijl de waarden in deze gevallen ook automatisch op 0 worden gezet. Zie issue 352567424 .
Verberg niet-vastgelegde DevTools-foutwaarschuwing als preventDefault is ingeschakeld.
In de DevTools-console worden waarschuwingen voor uncapturederror -gebeurtenissen niet langer weergegeven als er een gebeurtenislistener voor uncapturederror is geregistreerd en de methode event preventDefault() is aangeroepen binnen de callback van de gebeurtenislistener. Dit gedrag komt overeen met de gebeurtenisafhandeling in JavaScript. Zie het volgende voorbeeld en probleem 40263619 .
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL interpoleert eerst de bemonstering en of
Met het WGSL-attribuut interpolate kunt u de interpolatie van door de gebruiker gedefinieerde IO-gegevens beheren. De nieuwe parameters voor het bemonsteren van `interpolate`, first (standaard) en either bieden u nu extra controle: first gebruikt de waarde van het eerste hoekpunt van de primitief, terwijl either het eerste of laatste hoekpunt toestaat. Zie issue 340278447 .
Dawn-updates
De implementatie van Dawn's WGPUFuture voor het afhandelen van asynchrone bewerkingen is nu voltooid. Belangrijke concepten zijn onder andere wgpuInstanceProcessEvents voor opportunistische gebeurtenisverwerking en WGPUCallbackMode voor het definiëren van callbacklocaties. WGPUFuture duidt op eenmalige gebeurtenissen met een oneindige levensduur, en wgpuInstanceWaitAny wacht op de voltooiing van een future of een time-out. Zie issue 42240932 .
De waarde CompositeAlphaMode::Auto wordt nu niet meer gerapporteerd door Surface::GetCapabilities() . Deze is nog steeds geldig en gelijk aan Surface::GetCapabilities().alphaMode[0] . Zie probleem 292 .
De OpenGL-backend ondersteunt nu Surface met een y-flip blit voor elke Present() aanroep. Zie issue 344814083 .
De methode Adapter::GetProperties() is verouderd en wordt vervangen door Adapter::GetInfo() .
Jaswant, een externe bijdrager, heeft alle CMake-bestanden herschreven, waardoor ze gemakkelijker te updaten zijn en pre-builds mogelijk zijn. Bekijk de snelstartgids voor het gebruik van Dawn in CMake-projecten.
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
- WGSL subgroup_id-extensie
- WGSL uniform_buffer_standard_layout-extensie
- WebGPU op Linux
- Snellere writeBuffer en writeTexture
- Dawn-updates
Chrome 143
- Textuurcomponent swizzel
- Verwijder het gebruik van de alleen-lezen opslagtextuur bgra8unorm
- Dawn-updates
Chrome 142
Chrome 141
- Tint IR voltooid
- Analyse van gehele getallenbereiken in de WGSL-compiler
- SPIR-V 1.4-update voor Vulkan-backend
- Dawn-updates
Chrome 140
- Apparaatverzoeken verbruiken de adapter.
- Verkorte notatie voor het gebruik van texturen waar de textuurweergave wordt gebruikt.
- WGSL textureSampleLevel ondersteunt 1D-texturen.
- Het gebruik van de alleen-lezen opslagtextuur bgra8unorm wordt afgekeurd.
- Verwijder het isFallbackAdapter-attribuut van GPUAdapter.
- Dawn-updates
Chrome 139
- Ondersteuning voor 3D-texturen in de gecomprimeerde formaten BC en ASTC.
- Nieuwe functie voor "kernfuncties en -beperkingen".
- Origin-proefversie voor WebGPU-compatibiliteitsmodus
- Dawn-updates
Chrome 138
- Verkorte notatie voor het gebruik van buffer als bindingsbron.
- De vereiste grootte voor buffers die bij de aanmaak worden toegewezen, verandert.
- Architectuurrapport voor recente GPU's
- Het attribuut `isFallbackAdapter` van GPUAdapter wordt afgeschaft.
- Dawn-updates
Chrome 137
- Gebruik de textuurweergave voor het binden van externe texturen.
- Buffers kopiëren zonder specificatie van offsets en grootte.
- WGSL workgroupUniformLoad gebruikt een pointer naar een atomisch object.
- GPUAdapterInfo PowerPreference-attribuut
- Verwijder het compatibilityMode-attribuut van GPURequestAdapterOptions
- Dawn-updates
Chrome 136
- GPUAdapterInfo isFallbackAdapter-attribuut
- Verbeteringen in de compilatietijd van shaders in D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Compatibiliteitsmodusbeperkingen opheffen
- Dawn-updates
Chrome 135
- Maakt het mogelijk om een pipeline-layout te creëren met een null-bindgroep-layout.
- Sta toe dat viewports buiten de grenzen van de render targets uitsteken.
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android.
- Verwijder de maxInterStageShaderComponents-limiet
- Dawn-updates
Chrome 134
- Optimaliseer machine learning-workloads met subgroepen.
- Verwijder de ondersteuning voor filterbare textuurtypen met zwevende deeltjes als mengbaar.
- Dawn-updates
Chrome 133
- Aanvullende unorm8x4-bgra- en 1-component-vertexformaten
- Sta toe dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde.
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatieverbeteringen met discard-effect
- 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.
- Opschoning van experimentele subgroepfuncties
- De limiet maxInterStageShaderComponents wordt afgeschaft.
- Dawn-updates
Chrome 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-attribuut
- Het configureren van de canvascontext met een ongeldig formaat veroorzaakt een JavaScript-fout.
- Beperkingen van de sampler op texturen filteren
- Uitgebreide subgroepsexperimenten
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chrome 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptevoorkeur hebben.
- Inclusieve scan met ingebouwde functies voor subgroepen
- Experimentele ondersteuning voor indirecte meervoudige trekking
- Shadermodule-compilatieoptie strikte wiskunde
- Verwijder GPUAdapter requestAdapterInfo()
- Dawn-updates
Chrome 130
- Mengen met twee bronnen
- Verbeteringen in de compilatietijd van shaders op Metal
- De functie GPUAdapter requestAdapterInfo() wordt afgeschaft.
- Dawn-updates
Chrome 129
Chrome 128
- Experimenteren met subgroepen
- Het instellen van dieptevoorkeur voor lijnen en punten wordt afgeraden.
- Verberg niet-vastgelegde DevTools-foutwaarschuwing als preventDefault is ingeschakeld.
- WGSL interpoleert eerst de bemonstering en of
- Dawn-updates
Chrome 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter-info-attribuut
- Verbeteringen in de interoperabiliteit met WebAssembly
- Verbeterde fouten in de commando-encoder
- Dawn-updates
Chrome 126
- Verhoog de maxTextureArrayLayers-limiet
- Buffer-uploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- De ingediende commandobuffers moeten uniek zijn.
- Dawn-updates
Chrome 125
Chrome 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning voor servicepersoneel en deeltijdwerkers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chrome 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL.
- Onbeperkte pointerparameters in WGSL
- Syntactische suiker voor het dereferentiëren van samengestelde typen in WGSL
- Aparte alleen-lezen-status voor stencil- en diepteaspecten
- Dawn-updates
Chrome 122
- Vergroot uw bereik met de compatibiliteitsmodus (functie in ontwikkeling).
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chrome 121
- WebGPU-ondersteuning op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows.
- Tijdstempelquery's in de reken- en weergavefasen
- Standaard toegangspunten tot shadermodules
- Ondersteuning voor display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenhops
- Dawn-updates
Chrome 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de diepte-sjabloonstatus
- Updates van adapterinformatie
- Tijdstempelquery's kwantisering
- Kenmerken van de voorjaarsschoonmaak
Chrome 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chrome 118
- Ondersteuning voor HTMLImageElement en ImageData in
copyExternalImageToTexture() - Experimentele ondersteuning voor lees-schrijf- en alleen-lezen-opslagtexturen
- Dawn-updates
Chrome 117
- Vertexbuffer niet ingesteld
- Bindingsgroep niet instellen
- Onderdruk fouten bij het aanmaken van asynchrone pipelines wanneer het apparaat verloren gaat.
- Updates over het maken van SPIR-V shader-modules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chrome 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice() - Zorg ervoor dat de videoweergave soepel blijft als
importExternalTexture()wordt aangeroepen. - conformiteit met specificaties
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chrome 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- De aparte grafische kaart wordt standaard ingeschakeld bij gebruik van netstroom.
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chrome 114
- Optimaliseer JavaScript
- getCurrentTexture() op een niet-geconfigureerd canvas geeft een InvalidStateError.
- WGSL-updates
- Dawn-updates