Поддержка встроенных функций DP4a в WGSL
DP4a (скалярное произведение 4 элементов с накоплением) — это набор инструкций графического процессора, обычно используемых в глубоком обучении для квантования. Он эффективно выполняет скалярные произведения 8-битных целочисленных значений, ускоряя вычисления таких моделей, квантованных до int8. Он позволяет сэкономить (до 75%) память и пропускную способность сети, а также повысить производительность любых моделей машинного обучения при выводе по сравнению с версией f32. В результате он широко используется во многих популярных фреймворках искусственного интеллекта.
При наличии расширения языка WGSL "packed_4x8_integer_dot_product"
в navigator.gpu.wgslLanguageFeatures
вы можете использовать 32-битные целочисленные скаляры для упаковки 4-компонентных векторов 8-битных целых чисел в качестве входных данных для инструкций скалярного произведения в коде шейдера WGSL с помощью встроенных функций dot4U8Packed
и dot4I8Packed
. Вы также можете использовать инструкции упаковки и распаковки с упакованными 4-компонентными векторами 8-битных целых чисел с помощью встроенных функций WGSL pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
и unpack4xU8
.
Рекомендуется использовать директиву require-, чтобы обозначить потенциальную непереносимость, с помощью requires packed_4x8_integer_dot_product;
в начале кода шейдера WGSL. См. следующий пример и выдайте ошибку tint:1497 .
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
Особая благодарность команде Intel Web Graphics в Шанхае за разработку и реализацию данной спецификации!
Неограниченные параметры указателя в WGSL
Расширение языка WGSL "unrestricted_pointer_parameters"
ослабляет ограничения на то, какие указатели могут передаваться функциям WGSL:
Указатели параметров адресных пространств
storage
,uniform
и адресаworkgroup
на объявленные пользователем функции.Передача указателей на элементы структуры и элементы массива в объявленные пользователем функции.
Более подробную информацию можно найти в статье Указатели как параметры функций | Обзор WGSL .
Эту функцию можно обнаружить с помощью navigator.gpu.wgslLanguageFeatures
. Рекомендуется всегда использовать директиву require-, чтобы обозначить потенциальную непереносимость, с помощью requires unrestricted_pointer_parameters;
в начале кода шейдера WGSL. См. следующий пример, изменения спецификации WGSL и проблему tint:2053 .
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
Синтаксический сахар для разыменования композитов в WGSL
Если расширение языка WGSL "pointer_composite_access"
присутствует в navigator.gpu.wgslLanguageFeatures
, ваш код шейдера WGSL теперь поддерживает доступ к компонентам сложных типов данных, используя тот же синтаксис с точкой ( .
), независимо от того, работаете ли вы напрямую с данными или с указателем на них. Вот как это работает:
Если
foo
— указатель:foo.bar
— более удобный способ записи(*foo).bar
. Звёздочка (*
) обычно нужна для преобразования указателя в «ссылку», которую можно разыменовать, но теперь и указатели, и ссылки гораздо более похожи и практически взаимозаменяемы.Если
foo
не является указателем: оператор точки (.
) работает точно так же, как вы привыкли для прямого доступа к членам.
Аналогично, если pa
— указатель, хранящий начальный адрес массива, то использование pa[i]
дает вам прямой доступ к ячейке памяти, где хранится 'i
-й элемент этого массива.
Рекомендуется использовать директиву require-, чтобы обозначить потенциальную непереносимость с помощью requires pointer_composite_access;
в начале кода шейдера WGSL. См. следующий пример и выдайте ошибку tint:2113 .
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
Отдельное состояние «только для чтения» для аспектов трафарета и глубины
Ранее для прикрепления трафарета глубины в проходах рендеринга, доступного только для чтения, требовалось, чтобы оба аспекта (глубина и трафарет) были доступны только для чтения. Это ограничение снято. Теперь аспект глубины можно использовать только для чтения, например, для трассировки контактных теней, при этом буфер трафарета будет записываться для идентификации пикселей для дальнейшей обработки. См. issue dawn:2146 .
Обновления Dawn
Функция обратного вызова для неперехваченных ошибок, заданная с помощью wgpuDeviceSetUncapturedErrorCallback()
, теперь вызывается немедленно при возникновении ошибки. Именно этого разработчики постоянно ожидают и хотят для отладки. См. изменение dawn:173620 .
Реализован метод wgpuSurfaceGetPreferredFormat()
из API webgpu.h . См. issue dawn:1362 .
Здесь рассматриваются лишь некоторые из ключевых моментов. Ознакомьтесь с полным списком коммитов .
Что нового в WebGPU
Список всего, что было рассмотрено в серии « Что нового в WebGPU» .
Хром 140
- Запросы устройств потребляют адаптер
- Сокращенное обозначение использования текстуры там, где используется вид текстуры
- WGSL textureSampleLevel поддерживает одномерные текстуры
- Отменить использование текстур хранилища bgra8unorm только для чтения
- Удалить атрибут GPUAdapter isFallbackAdapter
- Обновления Dawn
Хром 139
- Поддержка 3D-текстур для сжатых форматов BC и ASTC
- Новая функция «основные функции и ограничения»
- Пробная версия Origin для режима совместимости с WebGPU
- Обновления Dawn
Хром 138
- Сокращение для использования буфера в качестве связующего ресурса
- Изменения требований к размеру буферов, отображаемых при создании
- Отчет об архитектуре последних графических процессоров
- Отменить атрибут GPUAdapter isFallbackAdapter
- Обновления Dawn
Хром 137
- Использовать вид текстуры для привязки externalTexture
- Буферы копируются без указания смещения и размера
- WGSL workgroupUniformLoad с использованием указателя на атомарный
- Атрибут powerPreference GPUAdapterInfo
- Удалить атрибут совместимости GPURequestAdapterOptions
- Обновления Dawn
Хром 136
- GPUAdapterInfo — атрибут FallbackAdapter
- Улучшение времени компиляции шейдера на D3D12
- Сохраняйте и копируйте изображения холста
- Ограничения режима совместимости
- Обновления Dawn
Хром 135
- Разрешить создание макета конвейера с макетом группы нулевых привязок
- Разрешить областям просмотра выходить за границы целевых объектов рендеринга
- Более простой доступ к экспериментальному режиму совместимости на Android
- Удалить ограничение maxInterStageShaderComponents
- Обновления Dawn
Хром 134
- Улучшите рабочие нагрузки машинного обучения с помощью подгрупп
- Удалить поддержку плавающих фильтруемых текстур как смешиваемых.
- Обновления Dawn
Хром 133
- Дополнительные форматы вершин unorm8x4-bgra и 1-компонентные
- Разрешить запрашивать неизвестные лимиты с неопределенным значением
- Изменения правил выравнивания WGSL
- Повышение производительности WGSL за счет отмены
- Используйте VideoFrame displaySize для внешних текстур
- Обработка изображений с ориентацией, отличной от стандартной, с помощью copyExternalImageToTexture
- Улучшение опыта разработчиков
- Включить режим совместимости с featureLevel
- Экспериментальная подгруппа функций очистки
- Отменить ограничение maxInterStageShaderComponents
- Обновления Dawn
Хром 132
- Использование вида текстуры
- Смешивание 32-битных плавающих текстур
- Атрибут GPUDevice adapterInfo
- Настройка контекста холста с недопустимым форматом приводит к ошибке JavaScript
- Фильтрация ограничений сэмплера на текстуры
- Расширенные эксперименты с подгруппами
- Улучшение опыта разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур
- Обновления Dawn
Хром 131
- Расстояния клипов в WGSL
- GPUCanvasContext getConfiguration()
- Точечные и линейные примитивы не должны иметь смещения глубины.
- Встроенные функции сканирования для подгрупп
- Экспериментальная поддержка многоразового косвенного вывода
- Опция компиляции модуля шейдера строгая математика
- Удалить GPUAdapter requestAdapterInfo()
- Обновления Dawn
Хром 130
- Смешивание двух источников
- Улучшение времени компиляции шейдеров на Metal
- Устаревание GPUAdapter requestAdapterInfo()
- Обновления Dawn
Хром 129
- Поддержка HDR с режимом тональной компрессии на холсте
- Расширенная поддержка подгрупп
- Обновления Dawn
Хром 128
- Эксперименты с подгруппами
- Отменить настройку смещения глубины для линий и точек
- Скрыть предупреждение DevTools об ошибке, если preventDefault
- WGSL сначала интерполирует выборку, а затем либо
- Обновления Dawn
Хром 127
- Экспериментальная поддержка OpenGL ES на Android
- Атрибут информации GPUAdapter
- Улучшения взаимодействия с WebAssembly
- Улучшены ошибки кодировщика команд
- Обновления Dawn
Хром 126
- Увеличить лимит maxTextureArrayLayers
- Оптимизация загрузки буфера для бэкэнда Vulkan
- Улучшение времени компиляции шейдера
- Отправленные буферы команд должны быть уникальными.
- Обновления Dawn
Хром 125
Хром 124
- Текстуры хранения данных, доступные только для чтения и для чтения и записи
- Поддержка работников сферы услуг и коллективных работников
- Новые атрибуты информации об адаптере
- Исправления ошибок
- Обновления Dawn
Хром 123
- Поддержка встроенных функций DP4a в WGSL
- Неограниченные параметры указателя в WGSL
- Синтаксический сахар для разыменования композитов в WGSL
- Отдельное состояние «только для чтения» для аспектов трафарета и глубины
- Обновления Dawn
Хром 122
- Расширение охвата с помощью режима совместимости (функция в разработке)
- Увеличить лимит maxVertexAttributes
- Обновления Dawn
Хром 121
- Поддержка WebGPU на Android
- Используйте DXC вместо FXC для компиляции шейдеров в Windows
- Запросы временных меток в проходах вычислений и рендеринга
- Точки входа по умолчанию в шейдерные модули
- Поддержка display-p3 как цветового пространства GPUExternalTexture
- Информация о кучах памяти
- Обновления Dawn
Хром 120
- Поддержка 16-битных значений с плавающей запятой в WGSL
- Раздвинь границы
- Изменения в состоянии трафарета глубины
- Обновления информации об адаптере
- Квантование запросов по временным меткам
- Особенности генеральной уборки
Хром 119
- Фильтруемые 32-битные плавающие текстуры
- формат вершин unorm10-10-10-2
- формат текстуры rgb10a2uint
- Обновления Dawn
Хром 118
- Поддержка HTMLImageElement и ImageData в
copyExternalImageToTexture()
- Экспериментальная поддержка текстур хранения данных для чтения и записи и только для чтения
- Обновления Dawn
Хром 117
- Сбросить буфер вершин
- Отменить привязку группы
- Ошибки тишины при создании асинхронного конвейера при потере устройства
- Обновления создания шейдерного модуля SPIR-V
- Улучшение опыта разработчиков
- Кэширование конвейеров с автоматически сгенерированной компоновкой
- Обновления Dawn
Хром 116
- Интеграция WebCodecs
- Потерянное устройство, возвращенное GPUAdapter
requestDevice()
- Сохраняйте плавность воспроизведения видео, если вызывается
importExternalTexture()
- Соответствие спецификации
- Улучшение опыта разработчиков
- Обновления Dawn
Хром 115
- Поддерживаемые расширения языка WGSL
- Экспериментальная поддержка Direct3D 11
- Получите дискретный графический процессор по умолчанию при питании от сети переменного тока
- Улучшение опыта разработчиков
- Обновления Dawn
Хром 114
- Оптимизировать JavaScript
- getCurrentTexture() на ненастроенном холсте выдает InvalidStateError
- Обновления WGSL
- Обновления Dawn