Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
In WGSL is het f16 type de set van 16-bits drijvende-kommawaarden van het IEEE-754 binary16-formaat (halfprecisie). Dit betekent dat het 16 bits gebruikt om een drijvende-kommawaarde weer te geven, in tegenstelling tot 32 bits voor conventionele drijvende-kommawaarden met enkelvoudige precisie ( f32 ). Deze kleinere omvang kan leiden tot aanzienlijke prestatieverbeteringen , met name bij het verwerken van grote hoeveelheden data.
Ter vergelijking: op een Apple M1 Pro-apparaat is de f16 implementatie van de Llama2 7B-modellen die in de WebLLM-chatdemo worden gebruikt, aanzienlijk sneller dan de f32 implementatie, met een verbetering van 28% in de voorvulsnelheid en een verbetering van 41% in de decodeersnelheid, zoals te zien is in de volgende schermafbeeldingen.

f32 (links) en f16 (rechts). Niet alle GPU's ondersteunen 16-bits drijvende-kommawaarden. Wanneer de functie "shader-f16" beschikbaar is in een GPUAdapter , kunt u nu een GPUDevice met deze functie aanvragen en een WGSL-shadermodule maken die gebruikmaakt van het halfprecisie drijvende-kommatype f16 . Dit type is alleen geldig voor gebruik in de WGSL-shadermodule als u de f16 WGSL-extensie inschakelt met enable f16; Anders genereert createShaderModule() een validatiefout. Zie het volgende minimale voorbeeld en issue dawn:1510 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("shader-f16")) {
throw new Error("16-bit floating-point value support is not available");
}
// Explicitly request 16-bit floating-point value support.
const device = await adapter.requestDevice({
requiredFeatures: ["shader-f16"],
});
const code = `
enable f16;
@compute @workgroup_size(1)
fn main() {
const c : vec3h = vec3<f16>(1.0h, 2.0h, 3.0h);
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a compute pipeline with this shader module
// and run the shader on the GPU...
Het is mogelijk om zowel f16 als f32 typen te ondersteunen in de WGSL-shadermodulecode met een alias , afhankelijk van de ondersteuning van de "shader-f16" -functie, zoals in het volgende codefragment wordt getoond.
const adapter = await navigator.gpu.requestAdapter();
const hasShaderF16 = adapter.features.has("shader-f16");
const device = await adapter.requestDevice({
requiredFeatures: hasShaderF16 ? ["shader-f16"] : [],
});
const header = hasShaderF16
? `enable f16;
alias min16float = f16;`
: `alias min16float = f32;`;
const code = `
${header}
@compute @workgroup_size(1)
fn main() {
const c = vec3<min16float>(1.0, 2.0, 3.0);
}
`;
Verleg de grenzen
Het maximale aantal bytes dat nodig is om één sample (pixel of subpixel) van de uitvoergegevens van de renderpipeline op te slaan, voor alle kleurbijlagen, is standaard 32 bytes. Het is nu mogelijk om tot 64 bytes aan te vragen door de limiet maxColorAttachmentBytesPerSample te gebruiken. Zie het volgende voorbeeld en issue dawn:2036 .
const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxColorAttachmentBytesPerSample < 64) {
// When the desired limit isn't supported, take action to either fall back to
// a code path that does not require the higher limit or notify the user that
// their device does not meet minimum requirements.
}
// Request highest limit of max color attachments bytes per sample.
const device = await adapter.requestDevice({
requiredLimits: { maxColorAttachmentBytesPerSample: 64 },
});
De limieten maxInterStageShaderVariables en maxInterStageShaderComponents die worden gebruikt voor communicatie tussen de verschillende fases zijn op alle platforms verhoogd. Zie issue dawn:1448 voor meer informatie.
Voor elke shaderfase is het maximale aantal bind group layout entries over een pipeline layout die storage buffers zijn, standaard 8. Het is nu mogelijk om tot 10 aan te vragen door de limiet maxStorageBuffersPerShaderStage te gebruiken. Zie issue dawn:2159 .
Er is een nieuwe limiet voor maxBindGroupsPlusVertexBuffers toegevoegd. Deze limiet bestaat uit het maximale aantal bind- en vertexbuffer-slots dat gelijktijdig gebruikt kan worden, inclusief eventuele lege slots onder de hoogste index. De standaardwaarde is 24. Zie issue dawn:1849 .
Wijzigingen in de diepte-sjabloonstatus
Om de ontwikkelaarservaring te verbeteren, zijn de attributen depthWriteEnabled en depthCompare van de depth-stencilstatus niet langer altijd vereist: depthWriteEnabled is alleen vereist voor formaten met diepte, en depthCompare is niet vereist voor formaten met diepte als deze helemaal niet worden gebruikt. Zie issue dawn:2132 .
Updates van adapterinformatie
Niet-standaard type en backend -adapterinformatie-attributen zijn nu beschikbaar bij het aanroepen van requestAdapterInfo() wanneer de gebruiker de vlag "WebGPU Developer Features" heeft ingeschakeld via chrome://flags/#enable-webgpu-developer-features . Het type kan "discrete GPU", "integrated GPU", "CPU" of "unknown" zijn. De backend kan "WebGPU", "D3D11", "D3D12", "metal", "vulkan", "openGL", "openGLES" of "null" zijn. Zie issue dawn:2112 en issue dawn:2107 .

De optionele parameter unmaskHints in de lijst in `requestAdapterInfo()` is verwijderd. Zie issue dawn:1427 .
Tijdstempelquery's kwantisering
Met behulp van tijdstempelquery's kunnen applicaties de uitvoeringstijd van GPU-opdrachten met nanosecondeprecisie meten. De WebGPU-specificatie maakt tijdstempelquery's echter optioneel vanwege de risico's op timingaanvallen . Het Chrome-team is van mening dat het kwantificeren van tijdstempelquery's een goed compromis biedt tussen precisie en beveiliging, door de resolutie te verlagen naar 100 microseconden. Zie issue dawn:1800 .
In Chrome kunnen gebruikers tijdstempelkwantisatie uitschakelen door de vlag "WebGPU Developer Features" in te schakelen via chrome://flags/#enable-webgpu-developer-features . Houd er rekening mee dat deze vlag op zichzelf de "timestamp-query" -functie niet inschakelt. De implementatie hiervan is nog experimenteel en vereist daarom de vlag "Unsafe WebGPU Support" via chrome://flags/#enable-unsafe-webgpu .
In Dawn is een nieuwe apparaatschakelaar genaamd "timestamp_quantization" toegevoegd, die standaard is ingeschakeld. Het volgende codefragment laat zien hoe u de experimentele "timestamp-query"-functie zonder tijdstempelkwantisering kunt inschakelen bij het opvragen van een apparaat.
wgpu::DawnTogglesDescriptor deviceTogglesDesc = {};
const char* allowUnsafeApisToggle = "allow_unsafe_apis";
deviceTogglesDesc.enabledToggles = &allowUnsafeApisToggle;
deviceTogglesDesc.enabledToggleCount = 1;
const char* timestampQuantizationToggle = "timestamp_quantization";
deviceTogglesDesc.disabledToggles = ×tampQuantizationToggle;
deviceTogglesDesc.disabledToggleCount = 1;
wgpu::DeviceDescriptor desc = {.nextInChain = &deviceTogglesDesc};
// Request a device with no timestamp quantization.
myAdapter.RequestDevice(&desc, myCallback, myUserData);
Kenmerken van de voorjaarsschoonmaak
De experimentele functie "timestamp-query-inside-passes" is hernoemd naar "chromium-experimental-timestamp-query-inside-passes" om ontwikkelaars duidelijk te maken dat deze functie experimenteel is en voorlopig alleen beschikbaar is in browsers die op Chromium gebaseerd zijn. Zie issue dawn:1193 .
De experimentele functie "pipeline-statistics-query", die slechts gedeeltelijk was geïmplementeerd, is verwijderd omdat de ontwikkeling ervan is stopgezet. Zie issue chromium:1177506 .
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