我想在OpenCL中使用同步信號設置來確保只有一個線程可以進入關鍵內核部分。 下面是代碼,我到目前爲止:OpenCL - 同步和信號?
void sync(int barrierID) {
int ID = get_global_id(0);
barrier(CLK_GLOBAL_MEM_FENCE);
while (ID - barrierID != 0) {
barrier(CLK_GLOBAL_MEM_FENCE);
}
}
//critical part
void signal(int threadCount, int barrierID) {
barrierID++;
barrier(CLK_GLOBAL_MEM_FENCE);
while (barrierID != threadCount) {
barrier(CLK_GLOBAL_MEM_FENCE);
}
barrierID = 0;
}
與經緯線程的量,即wnat訪問重要組成部分,barrierID是多少線程已經通過這部分櫃檯。
不幸的是,這段代碼在OpenCL中不起作用。
有誰知道,如何解決這段代碼?
同意。與此相關的是,當你使用'障礙'時,你必須確保工作組中的所有工作項目都擊中了它。所以任何時候你有一個有條件的內容都是可疑的。 – Dithermaster
我明白這一點,但我的問題是,我有一條關鍵線(約1千行),線程必須單獨輸入。 任何想法如何做到這一點? – 3DExtended
不,沒有辦法全局同步內核中給定點的線程。你必須創建多個內核。 – DarkZeros