WebGPU(Chrome 134)中的新变化

François Beaufort
François Beaufort

发布时间:2025 年 2 月 26 日

利用子群组改进机器学习工作负载

经过一年的开发和试用,现在我们推出了支持 SIMD 级并行性的子群组 WebGPU 功能。它允许工作组中的线程进行通信并执行集体数学运算(例如计算数字总和),并提供了一种高效的跨线程数据共享方法。请参阅原始提案chromestatus 条目

作为参考,在源试用期间,在某些设备上针对矩阵-向量相乘着色器对基准子群组与打包整数点积进行基准比较时,Google Meet 的速度提高了 2.3-2.9 倍。

"subgroups" 功能在 GPUAdapter 中可用时,请求具有此功能的 GPUDevice,以在 WGSL 中获得子组支持。检查 subgroupMinSizesubgroupMaxSize 适配器信息值很有用,例如,如果您有一个硬编码的算法,该算法需要特定大小的子群组。

您还需要在 WGSL 代码中使用 enable subgroups; 显式启用此扩展程序,才能在计算着色器和片段着色器阶段访问以下内置值:

  • subgroup_invocation_id:子群组中线程的索引的内置值。

  • subgroup_size:用于访问子组大小的内置值。

借助众多子群组内置函数(例如 subgroupAdd()subgroupBallot()subgroupBroadcast()subgroupShuffle()),子群组内的调用之间可以进行高效的通信和计算。这些子群组操作被归类为单指令多线程 (SIMT) 操作。此外,四方内置函数(对四方调用进行操作)有助于在四方内进行数据通信。

当您请求具有 "shader-f16""subgroups" 功能的 GPUDevice 时,可以将 f16 值与子群组搭配使用。

以下示例是探索子群组的一个很好的起点:它展示了一个使用 subgroupExclusiveMul() 内置函数计算阶乘的着色器,该着色器无需读取或写入内存即可传递中间结果。

移除对可混合的浮点可过滤纹理类型的支持

现在,"float32-blendable" 功能支持32 位浮点纹理混合,因此移除了对浮点可过滤纹理类型作为可混合纹理类型的不正确支持。请参阅问题 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 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