Опубликовано: 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» .
Хром 138
- Сокращение для использования буфера в качестве связующего ресурса
- Требования к размеру меняются для буферов, отображаемых при создании
- Отчет об архитектуре последних графических процессоров
- Отменить использование атрибута GPUAdapter isFallbackAdapter
- Обновления рассвета
Хром 137
- Использовать вид текстуры для привязки externalTexture
- Буферы копируются без указания смещения и размера
- WGSL workgroupUniformLoad с использованием указателя на атомарный
- Атрибут powerPreference GPUAdapterInfo
- Удалить атрибут совместимости GPURequestAdapterOptions
- Обновления рассвета
Хром 136
- GPUAdapterInfo — атрибут FallbackAdapter
- Улучшение времени компиляции шейдера на D3D12
- Сохраняйте и копируйте изображения холста
- Снять ограничения режима совместимости
- Обновления рассвета
Хром 135
- Разрешить создание макета конвейера с макетом группы нулевой привязки
- Разрешить областям просмотра выходить за пределы границ целевых объектов рендеринга
- Более простой доступ к экспериментальному режиму совместимости на Android
- Удалить ограничение maxInterStageShaderComponents
- Обновления рассвета
Хром 134
- Улучшите рабочие нагрузки машинного обучения с помощью подгрупп
- Удалить поддержку плавающих фильтруемых типов текстур как смешиваемых
- Обновления рассвета
Хром 133
- Дополнительные форматы вершин unorm8x4-bgra и 1-компонентные
- Разрешить запрашивать неизвестные лимиты с неопределенным значением
- Изменения правил выравнивания WGSL
- Повышение производительности WGSL с отбрасыванием
- Используйте VideoFrame displaySize для внешних текстур
- Обработка изображений с ориентацией, отличной от стандартной, с помощью copyExternalImageToTexture
- Улучшение опыта разработчиков
- Включить режим совместимости с featureLevel
- Экспериментальная подгруппа функций очистки
- Отменить ограничение maxInterStageShaderComponents
- Обновления рассвета
Хром 132
- Использование вида текстуры
- Смешивание 32-битных плавающих текстур
- Атрибут GPUDevice adapterInfo
- Настройка контекста холста с недопустимым форматом приводит к ошибке JavaScript
- Фильтрация ограничений сэмплера на текстуры
- Расширенные эксперименты с подгруппами
- Улучшение опыта разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур
- Обновления рассвета
Хром 131
- Расстояния клипов в WGSL
- GPUCanvasContext получитьКонфигурацию()
- Точечные и линейные примитивы не должны иметь смещения глубины.
- Встроенные функции сканирования для подгрупп
- Экспериментальная поддержка многоразового непрямого вывода
- Опция компиляции шейдерного модуля строгая математика
- Удалить GPUAdapter requestAdapterInfo()
- Обновления рассвета
Хром 130
- Смешивание двух источников
- Улучшение времени компиляции шейдеров на Metal
- Устаревание GPUAdapter requestAdapterInfo()
- Обновления рассвета
Хром 129
- Поддержка HDR с режимом тональной компрессии Canvas
- Расширенная поддержка подгрупп
- Обновления рассвета
Хром 128
- Эксперименты с подгруппами
- Отменить настройку смещения глубины для линий и точек
- Скрыть предупреждение DevTools об неперехваченной ошибке, если preventDefault
- WGSL сначала интерполирует выборку и либо
- Обновления рассвета
Хром 127
- Экспериментальная поддержка OpenGL ES на Android
- Атрибут информации GPUAdapter
- Улучшения взаимодействия WebAssembly
- Улучшены ошибки кодировщика команд
- Обновления рассвета
Хром 126
- Увеличить лимит maxTextureArrayLayers
- Оптимизация загрузки буфера для бэкэнда Vulkan
- Улучшения времени компиляции шейдера
- Отправленные буферы команд должны быть уникальными.
- Обновления рассвета
Хром 125
Хром 124
- Текстуры хранения данных, доступные только для чтения и для чтения и записи
- Поддержка работников сферы услуг и коллективных работников
- Новые атрибуты информации об адаптере
- Исправления ошибок
- Обновления рассвета
Хром 123
- Поддержка встроенных функций DP4a в WGSL
- Неограниченные параметры указателя в WGSL
- Синтаксический сахар для разыменования композитов в WGSL
- Отдельное состояние «только для чтения» для аспектов трафарета и глубины
- Обновления рассвета
Хром 122
- Расширьте охват с помощью режима совместимости (функция в разработке)
- Увеличить лимит maxVertexAttributes
- Обновления рассвета
Хром 121
- Поддержка WebGPU на Android
- Используйте DXC вместо FXC для компиляции шейдеров в Windows
- Запросы временных меток в проходах вычислений и рендеринга
- Точки входа по умолчанию в шейдерные модули
- Поддержка display-p3 как цветового пространства GPUExternalTexture
- Информация о кучах памяти
- Обновления рассвета
Хром 120
- Поддержка 16-битных значений с плавающей точкой в WGSL
- Раздвиньте границы
- Изменения в состоянии трафарета глубины
- Обновления информации об адаптере
- Квантование запросов временных меток
- Особенности генеральной уборки
Хром 119
- Фильтруемые 32-битные плавающие текстуры
- формат вершин unorm10-10-10-2
- формат текстуры rgb10a2uint
- Обновления рассвета
Хром 118
- Поддержка HTMLImageElement и ImageData в
copyExternalImageToTexture()
- Экспериментальная поддержка текстур хранения данных для чтения и записи и только для чтения
- Обновления рассвета
Хром 117
- Сбросить буфер вершин
- Отменить привязку группы
- Ошибки тишины при создании асинхронного конвейера при потере устройства
- Обновления создания шейдерного модуля SPIR-V
- Улучшение опыта разработчиков
- Кэширование конвейеров с автоматически сгенерированной компоновкой
- Обновления рассвета
Хром 116
- Интеграция WebCodecs
- Потерянное устройство, возвращенное GPUAdapter
requestDevice()
- Сохраняйте плавность воспроизведения видео, если вызывается
importExternalTexture()
- Соответствие спецификации
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 115
- Поддерживаемые расширения языка WGSL
- Экспериментальная поддержка Direct3D 11
- Получите дискретный графический процессор по умолчанию при питании от сети переменного тока
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 114
- Оптимизировать JavaScript
- getCurrentTexture() на ненастроенном холсте выдает InvalidStateError
- Обновления WGSL
- Обновления рассвета