Veröffentlicht: 26. Februar 2025
Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
Nach einem Jahr Entwicklung und Tests ist die WebGPU-Funktion für Untergruppen verfügbar, die Parallelität auf SIMD-Ebene ermöglicht. Damit können Threads in einer Arbeitsgruppe kommunizieren und gemeinsame mathematische Operationen ausführen, z. B. die Summe von Zahlen berechnen. Außerdem bietet sie eine effiziente Methode für die Datenfreigabe zwischen Threads. Weitere Informationen finden Sie im ursprünglichen Vorschlag und im Chrome-Status-Eintrag.
Bei einem Benchmark für Untergruppen im Vergleich zu gepackten Integer-Punktprodukten für Matrix-Vektor-Multiplikations-Shader in Google Meet wurde während des Ursprungstests auf einigen Geräten eine 2,3- bis 2,9-fache Geschwindigkeitssteigerung festgestellt.
Wenn die Funktion "subgroups" in einem GPUAdapter verfügbar ist, fordern Sie ein GPUDevice mit dieser Funktion an, um die Unterstützung von Untergruppen in WGSL zu erhalten. Es ist hilfreich, die Adapterinformationen subgroupMinSize und subgroupMaxSize zu prüfen, z. B. wenn Sie einen fest codierten Algorithmus haben, der eine Untergruppe einer bestimmten Größe erfordert.
Sie müssen diese Erweiterung auch explizit in Ihrem WGSL-Code mit enable subgroups; aktivieren, um sowohl in Compute- als auch in Fragment-Shadern auf die folgenden integrierten Werte zuzugreifen:
subgroup_invocation_id: Ein integrierter Wert für den Index des Threads innerhalb der Untergruppe.subgroup_size: Ein integrierter Wert für den Zugriff auf die Untergruppengröße.
Die zahlreichen integrierten Untergruppenfunktionen (z. B. subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) ermöglichen eine effiziente Kommunikation und Berechnung zwischen Aufrufen innerhalb einer Untergruppe. Diese Untergruppenoperationen werden als SIMT-Operationen (Single-Instruction Multiple-Thread) klassifiziert. Außerdem erleichtern die integrierten Quad-Funktionen, die auf einem Quad von Aufrufen ausgeführt werden, die Datenkommunikation innerhalb des Quads.
Sie können f16-Werte mit Untergruppen verwenden, wenn Sie ein GPUDevice mit den Funktionen "shader-f16" und "subgroups" anfordern.
Das folgende Beispiel ist ein guter Ausgangspunkt für die Erkundung von Untergruppen: Es zeigt einen Shader, der die integrierte Funktion subgroupExclusiveMul() verwendet, um Fakultäten zu berechnen, ohne Arbeitsspeicher zu lesen oder zu schreiben, um Zwischenergebnisse zu kommunizieren.
Unterstützung für filterbare Texturtypen mit Gleitkommazahlen als mischbar entfernen
Da das Mischen von 32-Bit-Gleitkomma-Texturen jetzt mit der "float32-blendable" Funktion verfügbar ist, wird die falsche Unterstützung für filterbare Texturtypen mit Gleitkommazahlen als mischbar entfernt. Siehe Problem 364987733.
Dawn-Updates
Dawn erfordert jetzt macOS 11 und iOS 14 und unterstützt nur Metal 2.3 oder höher. Siehe Problem 381117827.
Die neue Methode GetWGSLLanguageFeatures() von wgpu::Instance ersetzt jetzt EnumerateWGSLLanguageFeatures(). Siehe Problem 368672124.
Die folgenden Bindungstypen haben einen Undefined-Wert und ihre Standardwerte im Bindungslayout wurden geändert. Siehe Problem 377820810.
wgpu::BufferBindingType::Undefinedist jetztUniformwgpu::SamplerBindingType::Undefinedist jetztFilteringwgpu::TextureSampleType::Undefinedist jetztFloatwgpu::StorageTextureAccess::Undefinedist jetztWriteOnly
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits finden Sie hier.
Neues in WebGPU
Eine Liste aller Themen, die in der Reihe „Neues in WebGPU“ behandelt wurden.
Chrome 149–150
Chrome 147–148
Chrome 146
- Unterstützung des WebGPU-Kompatibilitätsmodus unter OpenGL ES 3.1
- Temporäre Anhänge
- WGSL-Erweiterung texture_and_sampler_let
- Dawn-Updates
Chrome 145
- WGSL-Erweiterung subgroup_uniformity
- Experimentelle synchrone Pufferzuordnung in Workern
- Dawn-Updates
Chrome 144
- WGSL-Erweiterung subgroup_id
- WGSL-Erweiterung uniform_buffer_standard_layout
- WebGPU unter Linux
- Schnellere writeBuffer- und writeTexture-Funktionen
- Dawn-Updates
Chrome 143
- Swizzle für Texturkomponenten
- Verwendung von schreibgeschützten bgra8unorm-Speichertexturen entfernen
- Dawn-Updates
Chrome 142
Chrome 141
- Tint IR abgeschlossen
- Analyse von Ganzzahlbereichen im WGSL-Compiler
- SPIR-V 1.4-Update für Vulkan-Backend
- Dawn-Updates
Chrome 140
- Geräteanfragen belegen Adapter
- Kurzform für die Verwendung von Texturen, wenn Texturansichten verwendet werden
- WGSL textureSampleLevel unterstützt 1D-Texturen
- Verwendung von schreibgeschützten bgra8unorm-Speichertexturen wird eingestellt
- GPUAdapter-Attribut „isFallbackAdapter“ entfernen
- Dawn-Updates
Chrome 139
- Unterstützung für 3D-Texturen für komprimierte BC- und ASTC-Formate
- Neue Funktion „core-features-and-limits“
- Ursprungstest für den WebGPU-Kompatibilitätsmodus
- Dawn-Updates
Chrome 138
- Kurzform für die Verwendung von Puffern als Bindungsressource
- Änderungen der Größenanforderungen für Puffer, die bei der Erstellung zugeordnet werden
- Architekturbericht für aktuelle GPUs
- GPUAdapter-Attribut „isFallbackAdapter“ wird eingestellt
- Dawn-Updates
Chrome 137
- Texturansicht für die externeTextur-Bindung verwenden
- Puffer ohne Angabe von Offsets und Größe kopieren
- WGSL workgroupUniformLoad mit Zeiger auf Atomic
- GPUAdapterInfo-Attribut „powerPreference“
- GPURequestAdapterOptions-Attribut „compatibilityMode“ entfernen
- Dawn-Updates
Chrome 136
- GPUAdapterInfo-Attribut „isFallbackAdapter“
- Verbesserungen der Shader-Kompilierungszeit unter D3D12
- Canvas-Bilder speichern und kopieren
- Einschränkungen des Kompatibilitätsmodus aufheben
- Dawn-Updates
Chrome 135
- Erstellung von Pipeline-Layouts mit Null-Bindungsgruppen-Layout zulassen
- Viewports können über die Grenzen der Renderziele hinausgehen
- Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
- Limit für maxInterStageShaderComponents entfernen
- Dawn-Updates
Chrome 134
- Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
- Unterstützung für filterbare Texturtypen mit Gleitkommazahlen als mischbar entfernen
- Dawn-Updates
Chrome 133
- Zusätzliche unorm8x4-bgra- und 1-Komponenten-Vertex-Formate
- Anforderung unbekannter Limits mit undefiniertem Wert zulassen
- Änderungen der WGSL-Ausrichtungsregeln
- WGSL-Leistungssteigerungen mit „discard“
- VideoFrame displaySize für externe Texturen verwenden
- Bilder mit nicht standardmäßigen Ausrichtungen mit copyExternalImageToTexture verarbeiten
- Verbesserung der Entwicklerfreundlichkeit
- Kompatibilitätsmodus mit featureLevel aktivieren
- Bereinigung experimenteller Untergruppenfunktionen
- Limit für maxInterStageShaderComponents wird eingestellt
- Dawn-Updates
Chrome 132
- Verwendung von Texturansichten
- Mischen von 32-Bit-Gleitkomma-Texturen
- GPUDevice-Attribut „adapterInfo“
- Konfiguration des Canvas-Kontexts mit ungültigem Format löst JavaScript-Fehler aus
- Einschränkungen für Sampler-Filterung auf Texturen
- Erweiterte Tests mit Untergruppen
- Verbesserung der Entwicklerfreundlichkeit
- Experimentelle Unterstützung für normalisierte 16-Bit-Texturformate
- Dawn-Updates
Chrome 131
- Clip-Entfernungen in WGSL
- GPUCanvasContext.getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben
- Integrierte Funktionen für inklusive Scans für Untergruppen
- Experimentelle Unterstützung für Multi-Draw Indirect
- Option für Shader-Modul-Kompilierung „strict math“
- GPUAdapter.requestAdapterInfo() entfernen
- Dawn-Updates
Chrome 130
- Mischen mit zwei Quellen
- Verbesserungen der Shader-Kompilierungszeit unter Metal
- Einstellung von GPUAdapter.requestAdapterInfo()
- Dawn-Updates
Chrome 129
- HDR-Unterstützung mit Canvas-Tone Mapping-Modus
- Erweiterte Unterstützung für Untergruppen
- Dawn-Updates
Chrome 128
- Tests mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte
- Warnung in den Entwicklertools für nicht erfasste Fehler ausblenden, wenn preventDefault
- WGSL: Zuerst interpolieren und dann entweder samplen
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES unter Android
- GPUAdapter-Attribut „info“
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen für Befehlscodierer
- Dawn-Updates
Chrome 126
- Limit für maxTextureArrayLayers erhöhen
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserungen der Shader-Kompilierungszeit
- Übermittelte Befehlspuffer müssen eindeutig sein
- Dawn-Updates
Chrome 125
Chrome 124
- Schreibgeschützte und Lese-/Schreib-Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Dawn-Updates
Chrome 123
- Unterstützung für integrierte DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntaxzucker für die Dereferenzierung von Composites in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Dawn-Updates
Chrome 121
- WebGPU unter Android unterstützen
- DXC anstelle von FXC für die Shader-Kompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Render-Passes
- Standardmäßige Einstiegspunkte für Shader-Module
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Arbeitsspeicher-Heaps
- Dawn-Updates
Chrome 120
- Unterstützung für 16-Bit-Gleitkommawerte in WGSL
- Limits erweitern
- Änderungen am Tiefen- und Schablonenstatus
- Updates für Adapterinformationen
- Quantisierung von Zeitstempelabfragen
- Bereinigung von Funktionen
Chrome 119
- Filterbare 32-Bit-Gleitkomma-Texturen
- unorm10-10-10-2-Vertex-Format
- rgb10a2uint-Texturformat
- Dawn-Updates
Chrome 118
- Unterstützung für HTMLImageElement und ImageData in
copyExternalImageToTexture() - Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertexturen
- Dawn-Updates
Chrome 117
- Vertex-Puffer aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipeline-Erstellung unterdrücken, wenn das Gerät verloren geht
- Updates für die Erstellung von SPIR-V-Shader-Modulen
- Verbesserung der Entwicklerfreundlichkeit
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter zurückgegeben wird
requestDevice() - Reibungslose Videowiedergabe, wenn
importExternalTexture()aufgerufen wird - Spezifikationskonformität
- Verbesserung der Entwicklerfreundlichkeit
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Standardmäßig diskrete GPU bei Netzstrom verwenden
- Verbesserung der Entwicklerfreundlichkeit
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- getCurrentTexture() für nicht konfigurierte Canvas löst InvalidStateError aus
- WGSL-Updates
- Dawn-Updates