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

Франсуа Бофор
François Beaufort

Опубликовано: 26 февраля 2025 г.

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

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

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

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

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

  • subgroup_invocation_id : Встроенное значение для индекса потока внутри подгруппы.

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

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

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

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

Удалить поддержку типов текстур с возможностью фильтрации (float filterable texture types) как смешиваемых (blendable).

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

Утренние обновления

Теперь Dawn требует macOS 11 и iOS 14 и поддерживает только Metal 2.3+. См. проблему 381117827 .

Новый метод 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» .

Хром 144

Хром 143

Хром 142

Хром 141

Хром 140

Хром 139

Хром 138

Хром 137

Хром 136

Хром 135

Хром 134

Хром 133

Хром 132

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113