Spec-Zone.ru › Web APIs

GPUComputePassEncoder: метод dispatchWorkgroups()

Ограниченная доступность

Эта функция не является базовой, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Экспериментально: Это экспериментальная технология
Перед использованием в продакшене внимательно проверьте таблицу совместимости с браузерами.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод dispatchWorkgroups() интерфейса GPUComputePassEncoder отправляет определённую сетку рабочих групп для выполнения работы, выполняемой текущим GPUComputePipeline (т.е. установленной с помощью GPUComputePassEncoder.setPipeline()).

Синтаксис

dispatchWorkgroups(workgroupCountX)
dispatchWorkgroups(workgroupCountX, workgroupCountY)
dispatchWorkgroups(workgroupCountX, workgroupCountY, workgroupCountZ)

Параметры

workgroupCountX

Размер X сетки рабочих групп для отправки.

workgroupCountY Необязательно

Размер Y сетки рабочих групп для отправки. Если опущен, по умолчанию workgroupCountY равен 1.

workgroupCountZ Необязательно

Размер Z сетки рабочих групп для отправки. Если опущен, по умолчанию workgroupCountZ равен 1.

Примечание: Значения размеров X, Y и Z, передаваемые в dispatchWorkgroups() и GPUComputePassEncoder.dispatchWorkgroupsIndirect(), представляют количество рабочих групп для отправки по каждому измерению, а не количество вызовов шейдера для выполнения по каждому измерению. Это соответствует поведению современных нативных API графических процессоров, но отличается от поведения OpenCL. Это означает, что если GPUShaderModule определяет точку входа с @workgroup_size(4, 4), и работа отправляется ей с вызовом passEncoder.dispatchWorkgroups(8, 8);, точка входа будет вызвана 1024 раза в общей сложности — отправка 4x4 рабочих групп 8 раз по осям X и Y. 4 * 4 * 8 * 8 = 1024.

Возвращаемое значение

None (Undefined).

Валидация

При вызове dispatchWorkgroups() должны быть соблюдены следующие критерии; в противном случае генерируется GPUValidationError, и GPUComputePassEncoder становится недействительным:

  • workgroupCountX, workgroupCountY, и workgroupCountZ все меньше или равны пределу maxComputeWorkgroupsPerDimension устройства GPUDevice лимита.

Примеры

В нашем демо вычислений несколько команд записываются через GPUCommandEncoder. Большинство этих команд исходят от GPUComputePassEncoder, созданного с помощью beginComputePass().

В начале кода мы устанавливаем глобальный размер буфера в 1000. Также обратите внимание, что размер рабочей группы в шейдере установлен на 64.

const BUFFER_SIZE = 1000;

// Compute shader
const shader = `
@group(0) @binding(0)
var<storage, read_write> output: array<f32>;

@compute @workgroup_size(64)

...

`;

Позже в коде параметр dispatchWorkgroups() workgroupCountX устанавливается на основе глобального размера буфера и количества рабочих групп шейдера.

// ...

// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();

// Initiate render pass
const passEncoder = commandEncoder.beginComputePass();

// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));

// End the render pass
passEncoder.end();

// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
  output,
  0, // Source offset
  stagingBuffer,
  0, // Destination offset
  BUFFER_SIZE,
);

// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// ...

Спецификации

Спецификация
WebGPU
# dom-gpucomputepassencoder-dispatchworkgroups

Совместимость с браузерами

Десктоп Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
dispatchWorkgroups
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
превьюВ настоящее время поддерживается только на Linux и Windows.
99В настоящее время поддерживается только на ChromeOS, macOS и Windows.
превью 121 Нет 81 Нет 25.0 121

См. также

  • API WebGPU

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUComputePassEncoder/dispatchWorkgroups

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API