WebGPU の新機能(Chrome 125)

François Beaufort
François Beaufort

現時点では WebGPU の機能は少なめに感じられるかもしれませんが、大きな進歩が目前に迫っています。今後のリリースには、シェーダーのコンパイル速度の改善や、WGPUFuture を使用した実装の非同期モデルの変更などの機能が含まれます。

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

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

サブグループ操作は最新の GPU API でサポートされていますが、名前や実装の詳細は異なります。Chrome チームは共通点を特定し、現在この機能の標準化に取り組んでいます。ご不明な点がございましたら、提案コメントをご確認ください。

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

"chromium-experimental-subgroups" 機能が GPUAdapter で利用できる場合は、この機能を含む 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 テクスチャのスライスにレンダリングする

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

夜明けの更新情報

commit の完全なリストを確認する。

WebGPU の新機能

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

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