Ondersteuning voor ingebouwde DP4a-functies in WGSL
DP4a (Dot Product of 4 Elements and Accumulate) verwijst naar een set GPU-instructies die veel gebruikt worden in deep learning-inferentie voor kwantificering. Het voert efficiënt 8-bits 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 inferentie verbeteren in vergelijking met hun f32-versie. Hierdoor wordt het nu veelvuldig 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 integer-scalairen gebruiken om 4-componentvectoren van 8-bits integers te verpakken als invoer voor de dot-productinstructies in uw WGSL-shadercode met de ingebouwde functies dot4U8Packed
en dot4I8Packed
. U kunt ook inpak- en uitpakinstructies gebruiken met verpakte 4-componentvectoren van 8-bits integers met de ingebouwde WGSL-functies pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
en unpack4xU8
.
Het is aan te raden om een requires-richtlijn 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 het Intel Web Graphics-team in Shanghai voor het voltooien van deze specificatie en implementatie!
Onbeperkte pointerparameters in WGSL
De WGSL -taaluitbreiding "unrestricted_pointer_parameters"
versoepelt de beperkingen op welke pointers kunnen worden doorgegeven aan WGSL-functies:
Parameteraanwijzers van
storage
,uniform
enworkgroup
naar door de gebruiker gedeclareerde functies.Het doorgeven van pointers naar structuurleden en array-elementen aan door de gebruiker gedeclareerde functies.
Bekijk Pointers As Function Parameters | Tour of WGSL om er meer over te weten te komen.
Deze feature kan worden gedetecteerd met behulp van navigator.gpu.wgslLanguageFeatures
. Het is aan te raden om altijd een requires-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-specificatiewijzigingen en het probleem tint:2053 .
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 dezelfde puntsyntaxis ( .
), ongeacht of u direct met de gegevens werkt of met een pointer ernaar. Zo werkt het:
Als
foo
een pointer is:foo.bar
is een handigere manier om(*foo).bar
te schrijven. Normaal gesproken zou de asterisk (*
) nodig zijn om de pointer om te zetten in een "referentie" die kan worden gederefereerd, maar nu lijken zowel pointers als referenties veel meer op elkaar en zijn ze bijna uitwisselbaar.Als
foo
geen aanwijzer is: De puntoperator (.
) werkt precies zoals u gewend bent voor directe toegang tot leden.
Op dezelfde manier, als pa
een aanwijzer is die het startadres van een array opslaat, dan geeft het gebruik van pa[i]
u directe toegang tot de geheugenlocatie waar het 'i
-de element van die array is opgeslagen.
Het is aan te raden om een requires-richtlijn 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-lezenstatus voor stencil- en diepteaspecten
Voorheen vereisten alleen-lezen diepte-stencil-bijlagen in renderpassen 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 weggeschreven om pixels te identificeren voor verdere verwerking. Zie issue dawn:2146 .
Dawn-updates
De callback voor niet-vastgelegde fouten die is ingesteld met wgpuDeviceSetUncapturedErrorCallback()
wordt nu direct aangeroepen wanneer de fout optreedt. Dit is wat ontwikkelaars consequent verwachten en willen voor foutopsporing. Zie wijziging dawn:173620 .
De wgpuSurfaceGetPreferredFormat()
-methode van de webgpu.h API is geïmplementeerd. Zie issue dawn:1362 .
Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .
Wat is er nieuw in WebGPU
Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.
Chroom 138
- Afkorting voor het gebruik van buffer als bindingsbron
- Wijzigingen in de groottevereisten voor buffers die bij het aanmaken in kaart zijn gebracht
- Architectuurrapport voor recente GPU's
- Verouder GPUAdapter isFallbackAdapter-kenmerk
- Dawn-updates
Chroom 137
- Gebruik textuurweergave voor externe textuurbinding
- Buffers kopiëren zonder offsets en grootte op te geven
- WGSL-werkgroepUniformLoad met behulp van een pointer naar atomaire
- GPUAdapterInfo powerPreference-kenmerk
- GPURequestAdapterOptions compatibilityMode-kenmerk verwijderen
- Dawn-updates
Chroom 136
- GPUAdapterInfo isFallbackAdapter-kenmerk
- Verbeteringen in de shadercompilatietijd op D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Beperkingen voor de liftcompatibiliteitsmodus
- Dawn-updates
Chroom 135
- Het maken van een pijplijnlayout met een lay-out voor nulbindingsgroepen toestaan
- Laat viewports zich uitstrekken voorbij de grenzen van de renderdoelen
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android
- Verwijder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 134
- Verbeter machine learning-workloads met subgroepen
- Verwijder float-filterbare textuurtypen als ondersteuning voor mengbaar
- Dawn-updates
Chroom 133
- Extra unorm8x4-bgra en 1-component vertex-formaten
- Toestaan dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatiewinst met weggooien
- Gebruik VideoFrame displaySize voor externe texturen
- Verwerk afbeeldingen met niet-standaardoriëntaties met copyExternalImageToTexture
- Verbetering van de ontwikkelaarservaring
- Compatibiliteitsmodus inschakelen met featureLevel
- Opschonen van experimentele subgroepkenmerken
- Verouder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-kenmerk
- Het configureren van de canvascontext met een ongeldige indeling levert een JavaScript-fout op
- Filteren van samplerbeperkingen op texturen
- Uitgebreide subgroepsexperimenten
- 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 dieptebias hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor multi-draw indirect
- Shadermodule compilatieoptie strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Menging van dubbele bronnen
- Verbeteringen in de shadercompilatietijd op Metal
- Veroudering van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
Chroom 128
- Experimenteren met subgroepen
- Verouder het instellen van dieptebias voor lijnen en punten
- Verberg niet-vastgelegde fout DevTools-waarschuwing als preventDefault
- WGSL interpoleert eerst de bemonstering en
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in WebAssembly-interoperabiliteit
- Verbeterde commando-encoderfouten
- Dawn-updates
Chroom 126
- Verhoog de maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- Ingediende opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde werknemers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chroom 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezenstatus 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 voor WebGPU op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows
- Tijdstempelquery's in compute- en renderpassen
- Standaard toegangspunten tot shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Geheugenstapels info
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de dieptestencilstatus
- Adapterinformatie-updates
- Kwantificering van tijdstempelquery's
- Voorjaarsschoonmaak
Chroom 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- 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
- Vertexbuffer ongedaan maken
- Bindgroep ongedaan maken
- Fouten bij het maken van een asynchrone pijplijn uitschakelen wanneer het apparaat verloren is gegaan
- Updates voor het maken van SPIR-V-shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Zorg ervoor dat de videoweergave vloeiend blijft als
importExternalTexture()
wordt aangeroepen - Specificatieconformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Standaard discrete GPU op netstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- JavaScript optimaliseren
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates