Что нового в 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

Теперь Dawn требует macOS 11 и iOS 14 и поддерживает только Metal 2.3+. См . issue 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» .

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