Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
GPUComputePassEncoder: dispatchWorkgroups() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Sicherer Kontext: Diese Funktion ist nur insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiedispatchWorkgroups()-Methode derGPUComputePassEncoder-Schnittstelle sendet ein spezifisches Raster von Arbeitsgruppen aus, um die Arbeit auszuführen, die von der aktuellenGPUComputePipeline durchgeführt wird (d.h. festgelegt überGPUComputePassEncoder.setPipeline()).
In diesem Artikel
Syntax
dispatchWorkgroups(workgroupCountX)dispatchWorkgroups(workgroupCountX, workgroupCountY)dispatchWorkgroups(workgroupCountX, workgroupCountY, workgroupCountZ)Parameter
workgroupCountXDie X-Dimension des zu sendenden Arbeitsgruppenrasters.
workgroupCountYOptionalDie Y-Dimension des zu sendenden Arbeitsgruppenrasters. Wird dieser Parameter weggelassen, wird
workgroupCountYauf 1 gesetzt.workgroupCountZOptionalDie Z-Dimension des zu sendenden Arbeitsgruppenrasters. Wird dieser Parameter weggelassen, wird
workgroupCountZauf 1 gesetzt.
Hinweis:Die andispatchWorkgroups() undGPUComputePassEncoder.dispatchWorkgroupsIndirect() übergebenen X-, Y- und Z-Dimensionswerte sind die Anzahl der Arbeitsgruppen, die für jede Dimension gesendet werden, nicht die Anzahl der Shader-Invozierungen, die über jede Dimension hinweg ausgeführt werden. Dies entspricht dem Verhalten moderner nativer GPU-APIs, unterscheidet sich jedoch vom Verhalten von OpenCL. Das bedeutet, dass wenn einGPUShaderModule einen Einstiegspunkt mit@workgroup_size(4, 4) definiert und Arbeit mit dem AufrufpassEncoder.dispatchWorkgroups(8, 8); gesendet wird, der Einstiegspunkt insgesamt 1024-mal aufgerufen wird — Eine 4 x 4 Arbeitsgruppe wird 8-mal entlang beider Achsen X und Y gestartet.4 * 4 * 8 * 8 = 1024.
Rückgabewert
Keiner (Undefined).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenndispatchWorkgroups() aufgerufen wird, andernfalls wird einGPUValidationError generiert und derGPUComputePassEncoder wird ungültig:
Beispiele
In unseremBasis-Compute-Demo werden mehrere Befehle über einenGPUCommandEncoder aufgezeichnet. Die meisten dieser Befehle stammen von demGPUComputePassEncoder, der überbeginComputePass() erstellt wurde.
Zu Beginn des Codes legen wir eine globale Puffergröße von 1000 fest. Beachten Sie auch, dass die Arbeitsgruppengröße im Shader auf 64 gesetzt ist.
const BUFFER_SIZE = 1000;// Compute shaderconst shader = `@group(0) @binding(0)var<storage, read_write> output: array<f32>;@compute @workgroup_size(64)...`;Später im Code wird derdispatchWorkgroups()workgroupCountX Parameter basierend auf der globalen Puffergröße und der Shader-Arbeitsgruppenzahl festgelegt.
// …// Create GPUCommandEncoder to encode commands to issue to the GPUconst commandEncoder = device.createCommandEncoder();// Initiate render passconst passEncoder = commandEncoder.beginComputePass();// Issue commandspassEncoder.setPipeline(computePipeline);passEncoder.setBindGroup(0, bindGroup);passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));// End the render passpassEncoder.end();// Copy output buffer to staging buffercommandEncoder.copyBufferToBuffer( output, 0, // Source offset stagingBuffer, 0, // Destination offset BUFFER_SIZE,);// End frame by passing array of command buffers to command queue for executiondevice.queue.submit([commandEncoder.finish()]);// …Spezifikationen
| Specification |
|---|
| WebGPU> # dom-gpucomputepassencoder-dispatchworkgroups> |
Browser-Kompatibilität
Siehe auch
- DieWebGPU API