公開日: 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::UndefinedがUniformになりましたwgpu::SamplerBindingType::UndefinedをFilteringに変更wgpu::TextureSampleType::UndefinedがFloatになりましたwgpu::StorageTextureAccess::UndefinedがWriteOnlyになりました
これは主なハイライトの一部にすぎません。コミットの完全なリストをご覧ください。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げられたすべての機能の一覧です。
Chrome 149-150
Chrome 147-148
Chrome 146
Chrome 145
Chrome 144
- WGSL subgroup_id 拡張機能
- WGSL uniform_buffer_standard_layout 拡張機能
- Linux の WebGPU
- writeBuffer と writeTexture の高速化
- Dawn の最新情報
Chrome 143
Chrome 142
Chrome 141
Chrome 140
- デバイス リクエストでアダプターを使用
- テクスチャ ビューが使用されている場合にテクスチャを使用するショートカット
- WGSL textureSampleLevel で 1D テクスチャをサポート
- bgra8unorm 読み取り専用ストレージ テクスチャの使用を非推奨に
- GPUAdapter isFallbackAdapter 属性を削除
- Dawn の最新情報
Chrome 139
Chrome 138
- バインディング リソースとしてバッファを使用するショートカット
- 作成時にマッピングされたバッファのサイズ要件の変更
- 最近の GPU のアーキテクチャ レポート
- GPUAdapter isFallbackAdapter 属性を非推奨に
- Dawn の最新情報
Chrome 137
- externalTexture バインディングにテクスチャ ビューを使用
- オフセットとサイズを指定せずにバッファをコピー
- アトミックへのポインタを使用する WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference 属性
- GPURequestAdapterOptions compatibilityMode 属性を削除
- Dawn の最新情報
Chrome 136
Chrome 135
- null バインド グループ レイアウトでパイプライン レイアウトを作成できるようにする
- ビューポートをレンダー ターゲットの境界を超えて拡張できるようにする
- Android で試験運用版の互換モードに簡単にアクセスできるようにする
- maxInterStageShaderComponents の上限を削除
- Dawn の最新情報
Chrome 134
Chrome 133
- 追加の unorm8x4-bgra および 1 コンポーネント頂点形式
- 不明な上限を未定義の値でリクエストできるようにする
- WGSL のアライメント ルールの変更
- 破棄による WGSL のパフォーマンス向上
- 外部テクスチャに VideoFrame displaySize を使用
- copyExternalImageToTexture を使用して、デフォルト以外の向きの画像を処理
- デベロッパー エクスペリエンスの向上
- featureLevel で互換モードを有効にする
- 試験運用版のサブグループ機能のクリーンアップ
- maxInterStageShaderComponents の上限を非推奨に
- Dawn の最新情報
Chrome 132
- テクスチャ ビューの使用
- 32 ビット浮動小数点テクスチャのブレンド
- GPUDevice adapterInfo 属性
- 無効な形式でキャンバス コンテキストを構成すると JavaScript エラーが発生
- テクスチャのサンプラー制限のフィルタリング
- サブグループの試験運用版の拡張
- デベロッパー エクスペリエンスの向上
- 16 ビット正規化テクスチャ形式の試験運用版のサポート
- Dawn の最新情報
Chrome 131
- WGSL のクリップ距離
- GPUCanvasContext getConfiguration()
- 点と線のプリミティブに深度バイアスを設定しない
- サブグループの包括的なスキャン組み込み関数
- マルチドロー間接の試験運用版のサポート
- シェーダー モジュールのコンパイル オプションの厳密な数学
- GPUAdapter requestAdapterInfo() を削除
- Dawn の最新情報
Chrome 130
Chrome 129
Chrome 128
- サブグループの試験運用
- 線と点の深度バイアス設定を非推奨に
- preventDefault の場合、キャプチャされていないエラー DevTools 警告を非表示にする
- WGSL は最初にサンプリングを補間し、どちらか一方を補間する
- Dawn の最新情報
Chrome 127
- Android での OpenGL ES の試験運用版のサポート
- GPUAdapter info 属性
- WebAssembly 相互運用性の改善
- コマンド エンコーダ エラーの改善
- Dawn の最新情報
Chrome 126
- maxTextureArrayLayers の上限を引き上げる
- Vulkan バックエンドのバッファ アップロードの最適化
- シェーダー コンパイル時間の短縮
- 送信されたコマンド バッファは一意にする必要がある
- Dawn の最新情報
Chrome 125
Chrome 124
- 読み取り専用ストレージ テクスチャと読み書きストレージ テクスチャ
- Service Worker と Shared Worker のサポート
- 新しいアダプター情報属性
- バグの修正
- Dawn の最新情報
Chrome 123
- WGSL での DP4a 組み込み関数のサポート
- WGSL の制限のないポインタ パラメータ
- WGSL での複合体の逆参照の構文シュガー
- ステンシルと深度アスペクトの読み取り専用状態を分離
- Dawn の最新情報
Chrome 122
Chrome 121
- Android で WebGPU をサポート
- Windows でのシェーダー コンパイルに FXC ではなく DXC を使用
- コンピューティング パスとレンダーパスのタイムスタンプ クエリ
- シェーダー モジュールのデフォルトのエントリ ポイント
- GPUExternalTexture の色空間として display-p3 をサポート
- メモリヒープ情報
- Dawn の最新情報
Chrome 120
Chrome 119
Chrome 118
- での HTMLImageElement と ImageData のサポート
copyExternalImageToTexture() - 読み書きストレージ テクスチャと読み取り専用ストレージ テクスチャの試験運用版のサポート
- Dawn の最新情報
Chrome 117
- 頂点バッファの設定を解除
- バインド グループの設定を解除
- デバイスが失われたときに非同期パイプライン作成のエラーを抑制
- SPIR-V シェーダー モジュールの作成の更新
- デベロッパー エクスペリエンスの向上
- 自動生成されたレイアウトでパイプラインをキャッシュに保存
- Dawn の最新情報
Chrome 116
- WebCodecs の統合
- GPUAdapter
requestDevice()によって返される失われたデバイス importExternalTexture()が呼び出された場合でも動画再生をスムーズに保つ- 仕様への準拠
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報
Chrome 115
- サポートされている WGSL 言語拡張機能
- Direct3D 11 の試験運用版のサポート
- AC 電源でデフォルトでディスクリート GPU を取得
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報
Chrome 114
- JavaScript を最適化する
- 構成されていないキャンバスで getCurrentTexture() を呼び出すと InvalidStateError が発生
- WGSL の更新
- Dawn の最新情報