__kernel void example(__global int *a, __global int *dependency, uint cols) { int j = genter code hereet_global_id(0); int i = get_global_id(1); if(i > 0 && j > 0) { while(1) { test = 1; } //Wait for the dependents ----------------------------- -------------------------- } }
在一定條件下等待其它線程在上面的內核代碼爲什麼while循環只是在所有的線程跳過與出無限循環的任何方式。對此有任何想法。 我正在研究一些有趣的問題,它需要一個線程根據某些條件等待其他線程完成,但每當上面或while(wait_condition)在GPU上運行時都會被跳過。有沒有做一個特定的線程中的OpenCL內核
是否有任何其他方式讓特定線程等待GPU上的OpenCL內核中的其他線程?
在此先感謝!
值得指出的是,並非每個在內核啓動中排隊的工作項都在設備上同時運行是很正常的。這意味着任何採用自旋鎖方案的代碼(即使是正確設計的代碼)仍然可能會失敗併產生無法恢復的死鎖,因爲旋轉工作項目可能正在等待來自尚未安排的工作項目的操作。在GPU計算中,整個設備級別同步的整體思路通常很糟糕,如果您需要,您可能會更好地使用不同的算法或不同的體系結構。 – talonmies 2012-03-14 07:05:47