2015-05-19 65 views
0

首先,我是OpenCL的相對新手。OpenCL:確定設備是否已在運行

問題1:有沒有辦法在運行時確定設備是否已經在運行另一個內核。我有一個主機程序異步調用不同的OpenCL函數,它可能會或可能不會使用相同的設備。有一些功能可以在CPU上快速運行,因此等待設備準備就緒可能是一個瓶頸。我想確定設備是否已被使用,如果是,則在CPU上運行回退功能。

問題2:如果問題1的答案是否定的。除了編寫我自己的設備級別之外,是否還有其他可能性?

回答

1

沒有用於查詢設備當前是否正在執行內核的專用API,但您可以使用事件對象自己實現此功能。

只要您入隊內核,就可以選擇性地檢索標識該命令的事件對象。使用clGetEventInfoCL_EVENT_COMMAND_EXECUTION_STATUS查詢,您可以檢查特定命令是否已完成執行。通過保持對最近入隊的內核的事件對象的引用,您可以使用此API來檢查設備當前是否在其隊列中有待處理的內核命令。

當然,這只是使您能夠確定是否有未決的麥粒應用 - 有沒有辦法來檢查是否有可能也可以在系統上運行的其他應用程序的OpenCL內核掛起。

+0

要壞!但是,如果在已經運行的設備上運行內核,會發生什麼呢?處理是否存儲在等待隊列中? – user1235183

+0

是的,有一個所有排隊命令(內核​​和內存操作)都被提交到的命令隊列。 – jprice