Neuigkeiten bei WebGPU (Chrome 134)

François Beaufort
François Beaufort

Veröffentlicht am 26. Februar 2025

Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern

Nach einem Jahr der Entwicklung und Tests ist die WebGPU-Funktion „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. eine Summe von Zahlen berechnen. Außerdem bietet sie eine effiziente Methode für den threadübergreifenden Datenaustausch. Originalvorschlag und Chrome-Status-Eintrag

Zum Vergleich: Bei Google Meet wurde während des Origin-Trials auf einigen Geräten eine 2,3- bis 2,9-fache Geschwindigkeitssteigerung erzielt, als Untergruppen mit gepackten Ganzzahl-Skalarprodukten für Matrix-Vektor-Multiplikations-Shader verglichen wurden.

Wenn die "subgroups"-Funktion in einem GPUAdapter verfügbar ist, fordern Sie ein GPUDevice mit dieser Funktion an, um Untergruppen in WGSL zu unterstützen. Es ist hilfreich, die Adapterinformationswerte subgroupMinSize und subgroupMaxSize zu prüfen, z. B. wenn Sie einen fest codierten Algorithmus haben, für den eine Untergruppe einer bestimmten Größe erforderlich ist.

Sie müssen diese Erweiterung auch explizit in Ihrem WGSL-Code mit enable subgroups; aktivieren, um in den Compute- und 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 Funktionen für Untergruppen (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 für ein Quad von Aufrufen ausgeführt werden, die Datenkommunikation innerhalb des Quads.

Sie können f16-Werte mit Untergruppen verwenden, wenn Sie eine GPUDevice mit den Funktionen "shader-f16" und "subgroups" anfordern.

Das folgende Beispiel ist ein guter Ausgangspunkt für die Untersuchung von Untergruppen: Es zeigt einen Shader, der die integrierte Funktion subgroupExclusiveMul() verwendet, um Fakultäten zu berechnen, ohne Speicher zu lesen oder zu schreiben, um Zwischenergebnisse zu kommunizieren.

Unterstützung für float-filterbare Texturtypen als blendable entfernen

Da die Mischung von 32-Bit-Gleitkomma-Texturen mit dem "float32-blendable"-Feature verfügbar ist, wurde die falsche Unterstützung von filterbaren Gleitkomma-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+ unterstützt. Weitere Informationen finden Sie unter Problem 381117827.

Die neue GetWGSLLanguageFeatures()-Methode des 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::Undefinedheißt jetzt WriteOnly

Dies sind nur einige der wichtigsten Neuerungen. Vollständige Liste der Commits

Neues zu WebGPU

Eine Liste mit allen Themen, die in der Reihe Neu in WebGPU behandelt wurden.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

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