2012-04-15 15 views
1

此功能註釋掉的PyOpenCL文檔中:http://documen.tician.de/pyopencl/runtime.html?highlight=enqueue#pyopencl.Event.waitPyOpenCL:什麼是Event.wait()用於?

我的問題是:我要調用內核在一個for循環和之後的每個呼叫排隊的複製操作與pyopencl.enqueue_copy_buffer(dest, src, size)。首先我用.wait()(即pyopencl.enqueue_copy_buffer(dest, src, size).wait())做了這個,因爲我在一個例子中發現了這個。然後我刪除.wait()並獲得了非常顯着的加速。

那麼這個函數對於什麼條件可以放棄呢?謝謝。

回答

4

.wait()將等待操作完成。如果你的代碼可以在沒有完成(或者甚至開始)的情況下繼續進行,那麼你可以不用它了。請注意,這與隊列中的操作順序無關:它們將按照您排隊的順序一個接一個地執行(除非您使用亂序隊列)。

+0

Aha,所以在我調用內核並在此之後排入緩衝區副本的循環的情況下,我可以不等待wait(),因爲內核調用和複製函數調用按照正確的順序排隊? – Maxim 2012-04-15 16:28:38

+0

是的,只要確保在隊列同步之前不要修改數據(在這種情況下,根據每種情況下的確切時間,數據可能會在修改之前或之後或中間被複制到設備) 。在這之後入侵數據和內核是可以的。 – eudoxos 2012-04-15 17:54:30

+0

非常感謝。 – Maxim 2012-04-15 18:55:39