WebGPU の新機能(Chrome 125)

François Beaufort
François Beaufort

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

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

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

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

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

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)subgroup_invocation_idid と一致する呼び出しから、サブグループ内のすべての呼び出しに 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 テクスチャのスライスに直接レンダリングできるようになりました。これにより、一般的な 2D テクスチャ レンダリングを超えて機能が拡張されます。depthSlice の新しい GPURenderPassColorAttachment メンバーを使用します。この追加により、たとえば、3D テクスチャ ボリュームに直接レンダリングすることで、ボクセルベースのシーンやエフェクトを作成できます。issue dawn:1020 をご覧ください。

Dawn の最新情報

コミットの完全なリストをご覧ください。

WebGPU の新機能

WebGPU の新機能シリーズで取り上げられたすべての機能の一覧です。

Chrome 149 ~ 150

Chrome 147 ~ 148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

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