我正在使用OpenCL實現算法。我將多次循環使用C++,並每次調用同一個OpenCL內核。內核將生成下一次迭代的輸入數據和這些數據的數量。目前,我在每個循環中讀回這個數字以用於兩種用法:如何避免在OpenCL中回讀
- 我使用這個數字來決定下一個循環需要多少個工作項目;和
- 我用這個數字來決定何時退出循環(當數字是0)。
我發現閱讀需要大部分時間的循環。有什麼辦法可以避免它?
一般來說,如果您需要反覆調用一個內核,並且退出條件依賴於內核生成的結果(不是固定數字循環),那麼您如何有效地執行該操作?有什麼像OpenGL中的遮擋查詢,你可以做一些查詢,而不是從GPU回讀?
如果我啓動很多工作項目(比如1000),並且其中大部分(比如說990)都不做任何事情。例如。他們測試一個條件並立即返回,如果它是假的。劑量它有類似的速度,只是啓動10個工作項目?還是會慢得多? – redpearl 2012-07-20 19:46:10
我不明白爲什麼這會是一件壞事。只要沒有回讀,它應該只要工作組中最長的工作項目一樣長,是正確的? – Ani 2012-07-20 19:47:31
我的真實程序比較複雜。我在每個循環中調用許多內核。我不認爲有可能將整個循環的工作實現到內核中。 :( – redpearl 2012-07-20 19:54:43