Опубликовано: 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
- Дополнительные форматы unorm8x4-bgra и 1-компонентных вершин.
- Разрешить запрашивать неизвестные лимиты с неопределенным значением
- Изменения в правилах выравнивания WGSL
- Прирост производительности WGSL за счет сброса
- Используйте VideoFrame displaySize для внешних текстур.
- Обработка изображений с ориентацией, отличной от заданной по умолчанию, с помощью copyExternalImageToTexture.
- Улучшение опыта разработчиков
- Включите режим совместимости с FeatureLevel
- Экспериментальная подгруппа занимается уборкой
- Устарело ограничение maxInterStageShaderComponents.
- Обновления рассвета
Хром 132
- Использование представления текстур
- Смешивание 32-битных плавающих текстур
- Атрибут адаптера GPUDeviceInfo
- Настройка контекста холста с недопустимым форматом вызывает ошибку JavaScript
- Фильтрация ограничений сэмплера на текстуры
- Расширенные эксперименты с подгруппами
- Улучшение опыта разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур.
- Обновления рассвета
Хром 131
- Расстояния отсечения в WGSL
- GPUCanvasContext getConfiguration()
- Примитивы точек и линий не должны иметь смещения глубины.
- Встроенные функции инклюзивного сканирования для подгрупп
- Экспериментальная поддержка косвенного множественного отрисовки
- Вариант компиляции шейдерного модуля, строгая математика
- Удалить запрос GPUAdapterAdapterInfo()
- Обновления рассвета
Хром 130
- Смешение двух источников
- Улучшение времени компиляции шейдеров в Metal
- Устаревшая функция запроса GPUAdapterInfo().
- Обновления рассвета
Хром 129
Хром 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
- Интеграция веб-кодеков
- Потерянное устройство, возвращенное
requestDevice()
- Обеспечьте плавное воспроизведение видео, если вызывается
importExternalTexture()
. - Соответствие спецификациям
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 115
- Поддерживаемые языковые расширения WGSL
- Экспериментальная поддержка Direct3D 11
- Получите дискретный графический процессор по умолчанию от сети переменного тока
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 114
- Оптимизировать JavaScript
- getCurrentTexture() на ненастроенном холсте выдает InvalidStateError
- Обновления WGSL
- Обновления рассвета