Diese Funktion wird in der Dokumentation PyOpenCL unkommentiert: http://documen.tician.de/pyopencl/runtime.html?highlight=enqueue#pyopencl.Event.waitPyOpenCL: Was ist Event.wait() für?
Mein Problem ist: Ich habe einen Kern in einer for-Schleife rufen und nach jedem Anruf mit pyopencl.enqueue_copy_buffer(dest, src, size)
einen Kopiervorgang einreihen. Zuerst habe ich dies mit .wait()
angefügt (d. H. pyopencl.enqueue_copy_buffer(dest, src, size).wait()
), weil ich dies in einem Beispiel gefunden habe. Dann entfernte ich .wait()
und bekam eine sehr deutliche Beschleunigung.
Also, was ist diese Funktion für und unter welchen Bedingungen kann es aufgegeben werden? Vielen Dank.
Aha, also im Falle einer Schleife, wo ich einen Kernel aufrufen und eine Pufferkopie direkt danach in die Warteschlange stellen, kann ich wait() auslassen, weil der Kernelaufruf und der Kopierfunktionsaufruf in der richtigen Reihenfolge eingereiht sind, richtig ? – Maxim
Ja, stellen Sie sicher, dass Sie Ihre Daten nicht ändern, bevor die Warteschlange synchronisiert wird (in diesem Fall, abhängig vom genauen Zeitpunkt im jeweiligen Fall, können Daten vor oder nach der Änderung oder in der Mitte auf das Gerät kopiert werden) . Daten und Kernel direkt danach zu vererben ist in Ordnung. – eudoxos
Vielen Dank. – Maxim