Что нового в 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+. См . выпуск 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» .

Хром 134

Хром 133

Хром 132

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113