Экспериментируем с подгруппами
Функция подгрупп обеспечивает параллелизм на уровне SIMD, позволяя потокам внутри группы взаимодействовать и выполнять коллективные математические операции (например, вычисление суммы 16 чисел). Это обеспечивает высокоэффективную форму обмена данными между потоками.
Минимальная реализация предложения подгрупп доступна для локального тестирования под флагом «Поддержка Unsafe WebGPU» по адресу chrome://flags/#enable-unsafe-webgpu
.
Вы также можете опробовать подгруппы на своем сайте с реальными пользователями, подписавшись на пробную версию Origin . Прочтите раздел Начало работы с пробными версиями Origin, чтобы узнать, как подготовить сайт к использованию пробных версий Origin. Пробная версия Origin будет работать с Chrome 128 по 131 (заканчивается 19 февраля 2025 г.). См . «Намерение экспериментировать» .
Если функция "subgroups"
доступна в GPUAdapter
, запросите GPUDevice
с этой функцией, чтобы получить поддержку подгрупп в WGSL и проверить ограничения minSubgroupSize
и maxSubgroupSize
.
Вам также необходимо явно включить это расширение в коде WGSL с помощью enable subgroups;
. При включении вы получаете доступ к следующим дополнениям:
-
subgroup_invocation_id
: встроенное значение индекса потока внутри подгруппы. -
subgroup_size
: встроенное значение для доступа к размеру подгруппы. -
subgroupBallot(value)
: возвращает набор битовых полей, где бит, соответствующийsubgroup_invocation_id
равен 1, еслиvalue
истинно для этого активного вызова, и 0 в противном случае. -
subgroupBroadcast(value, id)
: транслируетvalue
вызова с идентификаторомsubgroup_invocation_id
совпадающим сid
, всем вызовам в подгруппе. Примечание.id
должен быть константой времени компиляции.
В будущем будут добавлены дополнительные встроенные функции, такие как subgroupAdd
, subgroupAll
, subgroupElect
, subgroupShuffle
. См. выпуск 354738715 .
Чтобы разрешить f16 в операциях с подгруппами, запросите GPUDevice
с функциями "subgroups"
, "subgroups-f16"
и "shader-f16"
, затем включите его в своем коде WGSL с помощью enable f16, subgroups, subgroups_f16;
.
Следующий фрагмент кода предоставляет основу для работы и раскрытия потенциала подгрупп.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
Устарела настройка смещения глубины для линий и точек.
Изменение спецификации WebGPU делает ошибкой проверки установку для depthBias
, depthBiasSlopeScale
и depthBiasClamp
ненулевого значения, когда топология конвейера рендеринга представляет собой тип линии или точки. Чтобы дать разработчикам достаточно времени для обновления своего кода, в консоли DevTools отображается предупреждение о предстоящей проверке, а в таких обстоятельствах значения также устанавливаются на 0. См. выпуск 352567424 .
Скрыть предупреждение DevTools о неперехваченной ошибке, если PreventDefault
В консоли DevTools предупреждения о событиях uncapturederror
больше не отображаются, если был зарегистрирован прослушиватель событий для uncapturederror
и в обратном вызове прослушивателя событий был вызван метод Event preventDefault()
. Такое поведение соответствует обработке событий в JavaScript. См. следующий пример и проблему 40263619 .
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL сначала интерполирует выборку и либо
Атрибут interpolate
WGSL позволяет управлять определяемой пользователем интерполяцией данных ввода-вывода. Теперь новые параметры выборки интерполяции first
(по умолчанию) either
дают вам дополнительный контроль: first
используется значение из первой вершины примитива, а either
разрешается либо первая, либо последняя вершина. См. выпуск 340278447 .
Обновления рассвета
Реализация WGPUFuture от Dawn для обработки асинхронных операций завершена. Ключевые концепции включают wgpuInstanceProcessEvents для гибкой обработки событий и WGPUCallbackMode для определения местоположений обратного вызова. WGPUFuture означает одноразовые события с бесконечным временем существования, а wgpuInstanceWaitAny ожидает завершения любого будущего или тайм-аута. См . выпуск 42240932 .
Значение CompositeAlphaMode::Auto
теперь не сообщается Surface::GetCapabilities()
. Он по-прежнему действителен и эквивалентен Surface::GetCapabilities().alphaMode[0]
. См. выпуск 292 .
Серверная часть OpenGL теперь поддерживает Surface
с переворотом по оси Y для каждого вызова Present()
. См. выпуск 344814083 .
Метод Adapter::GetProperties()
устарел в пользу использования Adapter::GetInfo()
.
Jaswant, внешний участник, переписал все файлы CMake, упростив их обновление и позволив выполнять предварительные сборки. Ознакомьтесь с кратким руководством по использованию Dawn в проектах CMake.
Это касается только некоторых ключевых моментов. Ознакомьтесь с исчерпывающим списком коммитов .
Что нового в WebGPU
Список всего, что было описано в серии «Что нового в WebGPU» .
Хром 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
- Обновления рассвета