Что нового в WebGPU (Chrome 134)

François Beaufort
François Beaufort

Дата публикации: 26 февраля 2025 г.

Как улучшить рабочие нагрузки машинного обучения с помощью подгрупп

После года разработки и тестирования стала доступна функция подгрупп WebGPU, которая позволяет использовать параллелизм на уровне SIMD. Он позволяет потокам в рабочей группе обмениваться данными и выполнять коллективные математические операции, например вычислять сумму чисел, а также предлагает эффективный метод обмена данными между потоками. Подробнее об исходном предложении и записи в chromestatus…

Во время экспериментальной версии на некоторых устройствах скорость работы Google Meet увеличилась в 2,3–2,9 раза при сравнении подгрупп с скалярным произведением упакованных целых чисел для шейдеров умножения матрицы на вектор.

Если функция "subgroups" доступна в GPUAdapter, запросите GPUDevice с этой функцией, чтобы получить поддержку подгрупп в WGSL. Полезно проверять значения адаптеров subgroupMinSize и subgroupMaxSize, например если у вас есть жестко заданный алгоритм, требующий подгруппу определенного размера.

Чтобы получить доступ к перечисленным ниже встроенным значениям на этапах вычислений и фрагментных шейдеров, вам также нужно явно включить это расширение в коде WGSL с помощью enable subgroups;:

  • subgroup_invocation_id – встроенное значение индекса потока в подгруппе.

  • subgroup_size – встроенное значение для доступа к размеру подгруппы.

Множество встроенных функций подгрупп (например, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) обеспечивают эффективную связь и вычисления между вызовами в подгруппе. Эти операции подгрупп классифицируются как операции с одной инструкцией и несколькими потоками (SIMT). Кроме того, встроенные функции quad, которые работают с квадратом вызовов, облегчают обмен данными внутри квадрата.

Значения f16 можно использовать с подгруппами при запросе GPUDevice с функциями "shader-f16" и "subgroups".

Приведенный ниже пример – хорошая отправная точка для изучения подгрупп. В нем показан шейдер, который использует встроенную функцию subgroupExclusiveMul() для вычисления факториалов без чтения или записи в память для передачи промежуточных результатов.

Удаление поддержки фильтруемых типов текстур с плавающей запятой в качестве смешиваемых

Теперь, когда функция смешивания 32-битных текстур с плавающей запятой доступна в рамках функции "float32-blendable", некорректная поддержка типов текстур с плавающей запятой в качестве смешиваемых удалена. Подробнее о проблеме 364987733…

Обновления на рассвете

Теперь для Dawn требуется macOS 11 и iOS 14 и поддерживается только Metal 2.3+. Подробнее об этой проблеме…

Новый метод GetWGSLLanguageFeatures() объекта wgpu::Instance теперь заменяет EnumerateWGSLLanguageFeatures(). Подробнее о проблеме 368672124…

У следующих типов привязки есть значение Undefined, и их значения по умолчанию в макете привязки были изменены. Подробнее о проблеме 377820810…

  • wgpu::BufferBindingType::Undefined теперь называется Uniform.
  • wgpu::SamplerBindingType::Undefined теперь называется Filtering.
  • wgpu::TextureSampleType::Undefined теперь называется Float.
  • wgpu::StorageTextureAccess::Undefined теперь называется WriteOnly

Это лишь некоторые из основных изменений. Ознакомьтесь с полным списком коммитов.

Что нового в WebGPU

Список всех тем, которые были рассмотрены в серии статей Что нового в WebGPU.

Chrome 155–156

Chrome 153–154

Chrome 151–152

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