WebGPU(Chrome 134)中的新变化

François Beaufort
François Beaufort

发布时间:2025 年 2 月 26 日

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

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

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

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

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

  • 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 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