WebGPU の新機能(Chrome 125)

François Beaufort
François Beaufort

今回は WebGPU の機能は少々少なめに感じられるかもしれませんが、大きな進化は目前です。今後のリリースでは、シェーダーのコンパイル速度の改善や、WGPUFuture を使用した実装の非同期モデルの変更などの機能が追加される予定です。

サブグループ(開発中の機能)

サブグループ機能を使用すると、SIMD レベルの並列処理が可能になり、グループ内のスレッドによる通信や、16 個の数値の合計の計算など、集団的な数学演算を実行できます。これにより、非常に効率的な形式のクロススレッド データ共有が可能になります。

サブグループ オペレーションは最新の GPU API でサポートされていますが、名前と実装の詳細は異なります。Chrome チームは共通点を特定し、この機能の標準化に取り組んでいます。提案をご確認ください。不明な点がある場合は、コメントしてください。

「試験運用版ウェブ プラットフォーム機能」の背後には、サブグループの実装が最小限で標準化されていないデベロッパーは chrome://flags/#enable-experimental-web-platform-features フラグを指定します。これにより、デベロッパーは WebGPU をお試しになり、フィードバックを共有できます。これは、WebGPU のコンテキストでは実際のメリットがまだ証明されていないためです。

GPUAdapter"chromium-experimental-subgroups" 機能を使用できる場合は、この機能を使用して GPUDevice をリクエストし、WGSL で試験運用版のサブグループのサポートを利用し、minSubgroupSizemaxSubgroupSize の制限を確認します。

また、WGSL のコードで enable chromium_experimental_subgroups を使用して、この拡張機能を明示的に有効にする必要もあります。有効にすると、次の追加機能を利用できるようになります。

  • subgroup_invocation_id: サブグループ内のスレッドのインデックスの組み込み値。
  • subgroup_size: サブグループ サイズ アクセスの組み込み値。
  • subgroupBallot(value):アクティブな呼び出しで value が true の場合は subgroup_invocation_id に対応するビットが 1、それ以外の場合は 0 である一連のビット フィールドを返します。
  • subgroupBroadcast(value, id): id に一致する subgroup_invocation_id の呼び出しから、サブグループ内のすべての呼び出しに value をブロードキャストします。注: id はコンパイル時の定数でなければなりません。

次のコード スニペットは、サブグループを調整してその可能性を発見するための土台となります。

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

3D テクスチャのスライスにレンダリング

GPURenderPassColorAttachment の新しい depthSlice メンバーにより、レンダリング パス内の 3D テクスチャのスライスに直接レンダリングできるようになりました。一般的な 2D テクスチャのレンダリングよりも機能を拡張できます。これを追加することで、たとえば 3D テクスチャ ボリュームに直接レンダリングすることで、ボクセルベースのシーンやエフェクトを作成できます。問題 dawn:1020 をご覧ください。

夜明けの最新情報

コミットの一覧をご確認ください。

WebGPU の新機能

WebGPU の新機能」シリーズに記載されている全内容のリスト。

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