WebGPU の新機能(Chrome 134)

François Beaufort
François Beaufort

公開日: 2025 年 2 月 26 日

サブグループを使用して ML ワークロードを改善する

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)オペレーションに分類されます。また、呼び出しの四重で動作する四重組み込み関数により、四重内でのデータ通信が容易になります。

"shader-f16""subgroups" の両方の特徴を持つ GPUDevice をリクエストする場合は、サブグループで f16 値を使用できます。

次のサンプルは、サブグループを探索する際の良い出発点です。このサンプルは、subgroupExclusiveMul() 組み込み関数を使用して、中間結果を通信するためにメモリを読み書きすることなく階乗を計算するシェーダーを示しています。

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

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

Dawn の更新

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

EnumerateWGSLLanguageFeatures() は、wgpu::Instance の新しい GetWGSLLanguageFeatures() メソッドに置き換えられました。問題 368672124 を参照。

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

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

以下に、主なハイライトをいくつかご紹介します。コミットの一覧(すべて網羅)をご覧ください。

WebGPU の新機能

WebGPU の新機能シリーズで取り上げられたすべての内容のリスト。

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