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

Франсуа Бофор
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 , которые работают с quad вызовов, облегчают передачу данных внутри quad.

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

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

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

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

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

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

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

Следующие типы привязки имеют значение Undefined , а их значения по умолчанию в макете привязки были изменены. См. issue 377820810 .

  • wgpu::BufferBindingType::Undefined теперь Uniform
  • wgpu::SamplerBindingType::Undefined теперь Filtering
  • wgpu::TextureSampleType::Undefined теперь Float
  • wgpu::StorageTextureAccess::Undefined теперь WriteOnly

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

Что нового в WebGPU

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

Хром 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