WebGPU の新機能(Chrome 134)

François Beaufort
François Beaufort

公開日: 2025 年 2 月 26 日

サブグループを使用して機械学習ワークロードを改善する

1 年間の開発とトライアルを経て、SIMD レベルの並列処理を可能にするサブグループ WebGPU 機能が利用可能になりました。これにより、ワークグループ内のスレッドが通信して、数値の合計の計算などの集団的な数学演算を実行できます。また、スレッド間のデータ共有を効率的に行うことができます。元の提案chromestatus エントリをご覧ください。

参考までに、オリジン トライアル中に一部のデバイスで行列ベクトル乗算シェーダーのパックされた整数ドット積に対してサブグループのベンチマークを行ったところ、Google Meet の速度が 2.3 ~ 2.9 倍向上しました。

GPUAdapter"subgroups" 機能が利用可能な場合は、この機能を使用して GPUDevice をリクエストし、WGSL でサブグループのサポートを利用できるようにします。subgroupMinSize アダプター情報値と subgroupMaxSize アダプター情報値を確認すると便利です。たとえば、特定のサイズのサブグループを必要とするハードコードされたアルゴリズムがある場合などです。

また、コンピューティング シェーダーとフラグメント シェーダーの両方のステージで次の組み込み値にアクセスするには、WGSL コードで enable subgroups; を使用してこの拡張機能を明示的に有効にする必要があります。

  • subgroup_invocation_id: サブグループ内のスレッドのインデックスの組み込み値。

  • subgroup_size: サブグループ サイズ アクセスの組み込み値。

多数のサブグループ組み込み関数subgroupAdd()subgroupBallot()subgroupBroadcast()subgroupShuffle()など)を使用すると、サブグループ内の呼び出し間で効率的な通信と計算が可能になります。これらのサブグループ オペレーションは、単一命令複数スレッド(SIMT)オペレーションとして分類されます。また、4 つの呼び出しのクアッドで動作するクアッド組み込み関数を使用すると、クアッド内のデータ通信が容易になります。

GPUDevice"shader-f16" 機能と "subgroups" 機能の両方を使用してリクエストすると、サブグループで f16 値を使用できます。

次のサンプルは、サブグループを調べる際の出発点として最適です。このサンプルでは、subgroupExclusiveMul() 組み込み関数を使用して階乗を計算するシェーダーを示しています。このシェーダーでは、中間結果を伝達するためにメモリの読み取りや書き込みを行いません。

浮動小数点フィルタリング可能なテクスチャ タイプをブレンド可能としてサポートしない

32 ビット浮動小数点テクスチャのブレンド"float32-blendable" 機能で利用可能になったため、浮動小数点フィルタリング可能なテクスチャ タイプをブレンド可能として誤ってサポートする機能は削除されました。問題 364987733 をご覧ください。

Dawn の最新情報

Dawn では macOS 11 と iOS 14 が必要になり、Metal 2.3 以降のみがサポートされます。問題 381117827 をご覧ください。

wgpu::Instance の新しい GetWGSLLanguageFeatures() メソッドが EnumerateWGSLLanguageFeatures() に置き換わりました。問題 368672124 をご覧ください。

次のバインディング タイプには Undefined 値があり、バインディング レイアウトのデフォルト値が変更されました。問題 377820810 をご覧ください。

  • wgpu::BufferBindingType::UndefinedUniform になりました
  • wgpu::SamplerBindingType::UndefinedFiltering に変更
  • wgpu::TextureSampleType::UndefinedFloat になりました
  • wgpu::StorageTextureAccess::UndefinedWriteOnly になりました

これは主なハイライトの一部にすぎません。コミットの完全なリストをご覧ください。

WebGPU の新機能

WebGPU の新機能シリーズで取り上げられたすべての機能の一覧です。

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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