2012-03-22 112 views
1

即時編寫開放cl植絨,我有奇怪的問題。在Kernel Execute之前,clEnqueueReadBuffer從gpu mem讀取程序mem 20000數組float,沒有問題,速度非常快,但是在內核執行後,它在傳遞的數組上執行了一些操作,readbuffer持續太久(〜150 ms)。爲什麼?在這兩種情況下,陣列都充滿了數據。我的內核在幹什麼可能是錯的? (通過數組是__global)。打開CL clEnqueueReadBuffer執行時間

+0

在內核執行之前,gpu內存是如何充滿數據的? – ardiyu07 2012-05-31 01:25:12

回答

1

clEnqueueNDRangeKernel實際上並沒有啓動內核,它會「排入」它們。 OpenCL實現可以在任何合適的時候自由地啓動內核(在這種情況下,當你要求讀取結果時,因爲它需要運行內核來了解結果)。

但是,您可以強制實施通過clFinish啓動內核。

就你而言,150ms的延遲實際上是內核運行所需的時間。

如果您在執行和第二次讀取之間調用clFinish,它將起作用。