我想在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