GPUQueue: Methode onSubmittedWorkDone()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die onSubmittedWorkDone()-Methode der GPUQueue-Schnittstelle gibt ein Promise zurück, das aufgelöst wird, wenn alle an die GPU über diese GPUQueue übermittelten Arbeiten zu dem Zeitpunkt, an dem die Methode aufgerufen wird, verarbeitet wurden.

Dies umfasst den Abschluss aller mapAsync()-Aufrufe, die auf GPUBuffers gemacht wurden, die in an die Warteschlange übermittelten Befehlen verwendet werden, bevor onSubmittedWorkDone() aufgerufen wird.

Hinweis: In den meisten Fällen müssen Sie onSubmittedWorkDone() nicht aufrufen. Sie müssen es nicht zum Mapping eines Puffers aufrufen. mapAsync garantiert, dass Arbeiten, die an die Warteschlange übermittelt wurden, bevor mapAsync aufgerufen wird, vor der Rückkehr von mapAsync ausgeführt werden (siehe WebGPU-Spezifikation: Abschnitt 5.2)

Die zwei Anwendungsfälle für onSubmittedWorkDone

  1. Warten auf mehrere Pufferzuordnungen (langsam)

    js
    // good
    await Promise.all([
      buffer1.mapAsync(),
      buffer2.mapAsync(),
      buffer3.mapAsync(),
    ]);
    data1 = buffer1.getMappedRange();
    data2 = buffer2.getMappedRange();
    data3 = buffer3.getMappedRange();
    
    js
    // works but slow
    buffer1.mapAsync();
    buffer2.mapAsync();
    buffer3.mapAsync();
    await device.queue.onSubmittedWorkDone();
    data1 = buffer1.getMappedRange();
    data2 = buffer2.getMappedRange();
    data3 = buffer3.getMappedRange();
    

    Der Grund, warum die zweite Methode langsam ist, liegt darin, dass die Implementierung möglicherweise die Puffer zuordnen kann, bevor alle übermittelten Arbeiten abgeschlossen sind. Wenn zum Beispiel alle Puffer fertig verwendet wurden, aber mehr Arbeit (unabhängig von den Puffern) bereits übermittelt wurde, dann werden Sie mit der zweiten Methode länger warten als mit der ersten.

  2. Drosseln der Arbeit

    Wenn Sie schwere Berechnungsarbeit leisten und zu viel Arbeit auf einmal übermitteln, kann der Browser Ihre Arbeit abbrechen. Sie können die Arbeit drosseln, indem Sie neue Arbeit nur dann übermitteln, wenn die bereits übermittelte Arbeit abgeschlossen ist.

Syntax

js
device.queue.onSubmittedWorkDone()

Parameter

Keine.

Rückgabewert

Ein Promise, das mit Undefined aufgelöst wird.

Beispiele

js
device.queue.submit([commandEncoder.finish()]);
device.queue.onSubmittedWorkDone().then(() => {
  console.log("All submitted commands processed.");
});

Spezifikationen

Specification
WebGPU
# dom-gpuqueue-onsubmittedworkdone

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch