DP4a ingebouwde functies ondersteunen in WGSL
DP4a (Dot Product of 4 Elements and Accumulate) verwijst naar een reeks GPU-instructies die vaak worden gebruikt bij deep learning-inferentie voor kwantisering. Het voert efficiënt 8-bit integer dot-producten uit om de berekening van dergelijke int8-gekwantiseerde modellen te versnellen. Het kan (tot 75%) geheugen- en netwerkbandbreedte besparen en de prestaties van alle machine learning-modellen bij het inferenties verbeteren in vergelijking met hun f32-versie. Als gevolg hiervan wordt het nu intensief gebruikt binnen veel populaire AI-frameworks.
Wanneer de WGSL -taalextensie "packed_4x8_integer_dot_product"
aanwezig is in navigator.gpu.wgslLanguageFeatures
, kunt u nu 32-bits gehele scalaire waarden gebruiken die 4-component vectoren van 8-bit gehele getallen verpakken als invoer voor de puntproductinstructies in uw WGSL-shadercode met de dot4U8Packed
en dot4I8Packed
ingebouwde functies. U kunt ook in- en uitpakinstructies gebruiken met ingepakte 4-componentenvectoren van 8-bit gehele getallen met pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
en unpack4xU8
WGSL ingebouwde functies.
Het wordt aanbevolen om een require-directive te gebruiken om de mogelijkheid van niet-portabiliteit aan te geven met requires packed_4x8_integer_dot_product;
bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en geef tint:1497 op .
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
Speciale dank aan Intel's Web Graphics-team in Shanghai voor het tot een goed einde brengen van deze specificatie en implementatie!
Onbeperkte pointerparameters in WGSL
De WGSL -taalextensie "unrestricted_pointer_parameters"
versoepelt de beperkingen waarop pointers kunnen worden doorgegeven aan WGSL-functies:
Parameteraanwijzers van
storage
,uniform
enworkgroup
naar door de gebruiker gedeclareerde functies.Het doorgeven van verwijzingen naar structuurleden en array-elementen naar door de gebruiker gedeclareerde functies.
Bekijk Pointers als functieparameters | Rondleiding door WGSL om er meer over te leren.
Deze functie kan worden gedetecteerd met behulp van navigator.gpu.wgslLanguageFeatures
. Het wordt aanbevolen om altijd een require-directive te gebruiken om de mogelijkheid van niet-portabiliteit aan te geven met requires unrestricted_pointer_parameters;
bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld, de WGSL-specificatie verandert en geeft tint:2053 op .
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
Syntaxissuiker voor het derefereren van composieten in WGSL
Wanneer de WGSL -taalextensie "pointer_composite_access"
aanwezig is in navigator.gpu.wgslLanguageFeatures
, ondersteunt uw WGSL-shadercode nu toegang tot componenten van complexe gegevenstypen met behulp van dezelfde puntsyntaxis ( .
), ongeacht of u rechtstreeks met de gegevens werkt of met een wijs ernaar. Hier is hoe het werkt:
Als
foo
een pointer is:foo.bar
is een handiger manier om(*foo).bar
te schrijven. Het sterretje (*
) zou normaal gesproken nodig zijn om van de aanwijzer een "referentie" te maken waarvan de verwijzingen kunnen worden verwijderd, maar nu lijken zowel aanwijzers als verwijzingen veel meer op elkaar en zijn ze bijna uitwisselbaar.Als
foo
geen pointer is: De punt-operator (.
) werkt precies zoals u gewend bent voor directe toegang tot leden.
Op dezelfde manier, als pa
een pointer is die het startadres van een array opslaat, geeft het gebruik pa[i]
u directe toegang tot de geheugenlocatie waar het 'i
-e element van die array is opgeslagen.
Het wordt aanbevolen om een require-directive te gebruiken om de mogelijkheid van niet-portabiliteit aan te geven met requires pointer_composite_access;
bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en geef tint:2113 op .
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
Afzonderlijke alleen-lezen-status voor stencil- en diepteaspecten
Voorheen vereisten alleen-lezen diepte-stencilbijlagen in renderpassages dat beide aspecten (diepte en stencil) alleen-lezen waren. Deze beperking is opgeheven. Nu kunt u het diepteaspect alleen-lezen gebruiken, bijvoorbeeld voor het traceren van contactschaduwen, terwijl de stencilbuffer wordt geschreven om pixels te identificeren voor verdere verwerking. Zie uitgave Dawn:2146 .
Dawn-updates
De niet-opgevangen fout-callback die is ingesteld met wgpuDeviceSetUncapturedErrorCallback()
wordt nu onmiddellijk aangeroepen wanneer de fout optreedt. Dit is wat ontwikkelaars consequent verwachten en willen bij het debuggen. Zie wijziging dageraad:173620 .
De methode wgpuSurfaceGetPreferredFormat()
van de webgpu.h API is geïmplementeerd. Zie uitgave Dawn:1362 .
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 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen diepteafwijking hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor indirecte meertrekking
- Shader-module compilatie-optie 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
- Wijzigingen 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