WebGPU の新機能(Chrome 125)

François Beaufort
François Beaufort

今回の WebGPU 機能の数は少ないように感じるかもしれませんが、まもなく大きな進歩が期待できます。今後のリリースでは、シェーダーのコンパイル速度の向上や、WGPUFuture を使用した実装の非同期モデルの変更などの機能が追加される予定です。

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

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

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

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

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

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

  • subgroup_invocation_id: サブグループ内のスレッドのインデックスの組み込み値。
  • subgroup_size: サブグループ サイズ アクセス用の組み込み値。
  • subgroupBallot(value): は、subgroup_invocation_id に対応するビットが、そのアクティブな呼び出しで value が true の場合に 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 を参照してください。

Dawn の更新

コミットの一覧(すべて網羅)をご覧ください。

WebGPU の新機能

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

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