Veröffentlicht: 26. Februar 2025
Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
Nach einem Jahr Entwicklungs- und Testzeit ist die WebGPU-Funktion für Untergruppen verfügbar, die Parallelität auf SIMD-Ebene ermöglicht. Er ermöglicht Threads in einer Arbeitsgruppe, zu kommunizieren und gemeinsame mathematische Operationen auszuführen, z. B. die Berechnung einer Summe von Zahlen. Außerdem bietet er eine effiziente Methode für die threadübergreifende Datenfreigabe. Weitere Informationen finden Sie im ursprünglichen Vorschlag und im chromestatus-Eintrag.
Zum Vergleich: Bei Google Meet wurde während des Origin-Tests eine Geschwindigkeitssteigerung von 2,3 bis 2,9 fach erzielt, wenn Subgruppen mit gepackten Ganzzahlpunktprodukten für Matrix-Vektor-Multiplikations-Shader auf einigen Geräten verglichen wurden.
Wenn die "subgroups"
-Funktion in einem GPUAdapter
verfügbar ist, fordern Sie einen GPUDevice
mit dieser Funktion an, um Subgruppen in WGSL zu unterstützen. Es ist hilfreich, die Adapter-Informationswerte subgroupMinSize
und subgroupMaxSize
zu prüfen, z. B. wenn Sie einen hartcodierten Algorithmus haben, der eine Untergruppe einer bestimmten Größe erfordert.
Außerdem müssen Sie diese Erweiterung in Ihrem WGSL-Code mit enable subgroups;
explizit aktivieren, um sowohl in Compute- als auch in Fragment-Shader-Phasen auf die folgenden vordefinierten Werte zuzugreifen:
subgroup_invocation_id
: Ein vordefinierter Wert für den Index des Threads innerhalb der Untergruppe.subgroup_size
: Ein vordefinierter Wert für den Zugriff auf die Größe von Untergruppen.
Die zahlreichen Untergruppenfunktionen (z. B. subgroupAdd()
, subgroupBallot()
, subgroupBroadcast()
, subgroupShuffle()
) ermöglichen eine effiziente Kommunikation und Berechnung zwischen Aufrufen innerhalb einer Untergruppe. Diese Gruppenvorgänge werden als SIMT-Vorgänge (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 eine GPUDevice
mit "shader-f16"
- und "subgroups"
-Funktionen anfordern.
Das folgende Beispiel ist ein guter Ausgangspunkt für die Erkundung von Untergruppen: Es zeigt einen Shader, der die integrierte Funktion subgroupExclusiveMul()
zum Berechnen von Fakultäten verwendet, ohne den Arbeitsspeicher zum Übertragen von Zwischenergebnissen zu lesen oder zu schreiben.
Unterstützung für mithilfe von Float-Werten filterbare Texturtypen als mischbar entfernen
Da die Mischung von 32-Bit-Float-Texturen jetzt mit der Funktion "float32-blendable"
verfügbar ist, wird die falsche Unterstützung für mit Float filterbare Texturtypen als mischbar entfernt. Siehe Problem 364987733.
Dawn-Updates
Für Dawn sind jetzt macOS 11 und iOS 14 erforderlich und es wird nur Metal 2.3 und höher unterstützt. Weitere Informationen finden Sie unter Issue 381117827.
Die neue GetWGSLLanguageFeatures()
-Methode der 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::Undefined
ist jetztUniform
wgpu::SamplerBindingType::Undefined
ist jetztFiltering
wgpu::TextureSampleType::Undefined
ist jetztFloat
wgpu::StorageTextureAccess::Undefined
heißt jetztWriteOnly
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU behandelt wurden.
Chrome 134
- Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
- Unterstützung für mit dem „Flüssigfilter“ filterbare Texturtypen als mischbar entfernen
- Dawn-Updates
Chrome 133
- Zusätzliche Vertexformate vom Typ unorm8x4-bgra und 1-Komponente
- Unbekannte Limits mit einem nicht definierten Wert anfordern
- Änderungen an den Regeln für die Ausrichtung von WGSL
- Leistungssteigerungen bei WGSL mit Discard
- VideoFrame-Anzeigegröße für externe Texturen verwenden
- Mit copyExternalImageToTexture Bilder mit nicht standardmäßigen Ausrichtungen verarbeiten
- Entwicklerfreundlichkeit verbessern
- Kompatibilitätsmodus mit „featureLevel“ aktivieren
- Bereinigung experimenteller Funktionen für Untergruppen
- Das Limit „maxInterStageShaderComponents“ wird eingestellt
- Dawn-Updates
Chrome 132
- Nutzung der Texturansicht
- 32-Bit-Gleitkommatextur-Mischverfahren
- Attribut „adapterInfo“ von „GPUDevice“
- Bei der Konfiguration des Canvas-Kontexts mit einem ungültigen Format wird ein JavaScript-Fehler geworfen
- Einschränkungen für Filter-Sampler bei Texturen
- Erweiterte Tests mit Untergruppen
- Entwicklerfreundlichkeit verbessern
- Experimentelle Unterstützung für 16-Bit-normalisierte Texturformate
- Dawn-Updates
Chrome 131
- Entfernungen in WGSL zuschneiden
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben.
- Integrierte Funktionen für inklusiven Scan für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Shader-Modul-Kompilierungsoption „strict math“
- GPUAdapter-Methode „requestAdapterInfo()“ entfernen
- Dawn-Updates
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserungen bei der Shader-Kompilierungszeit unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Dawn-Updates
Chrome 129
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte wird eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL interpoliert zuerst die Stichprobe und
- Dawn-Updates
Chrome 127
- Experimenteller Support für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Dawn-Updates
Chrome 126
- Maximale Anzahl von Texture-Array-Ebenen erhöhen
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserungen bei der Shader-Kompilierungszeit
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Dawn-Updates
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene 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
- Syntax-Optimierung für die Dereferenzierung von Kompositen in WGSL
- Separater schreibgeschützter Status für Stencil- und Tiefenansichten
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Maximale Anzahl von Vertex-Attributen erhöhen
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU auf Android
- DXC anstelle von FXC für die Shaderkompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Rendering-Passes
- Standardeinstiegspunkte in Shadermodule
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Speicherheaps
- Dawn-Updates
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- Geh an deine Grenzen
- Änderungen am Tiefen-/Schatten-Status
- Aktualisierte Informationen zu Adaptern
- Quantisierung von Zeitstempelabfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Gleitkommatextur
- unorm10-10-10-2-Vertex-Format
- rgb10a2uint-Texturformat
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertextur
- Dawn-Updates
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der Erstellung einer asynchronen Pipeline bei verlorenem Gerät ignorieren
- Änderungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - Einhaltung der Spezifikationen
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Unterstützung für diskrete GPU standardmäßig bei Wechselstromversorgung
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Dawn-Updates