Neuigkeiten bei WebGPU (Chrome 134)

François Beaufort
François Beaufort

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 jetzt Uniform
  • wgpu::SamplerBindingType::Undefined ist jetzt Filtering
  • wgpu::TextureSampleType::Undefined ist jetzt Float
  • wgpu::StorageTextureAccess::Undefined heißt jetzt WriteOnly

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

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113