陷入循环,局部变量对工作组中的其他工作项不可见吗?

时间:2019-04-22 10:26:40

标签: opencl

我正在尝试使用局部变量在工作组中的所有工作项之间进行同步。但是,有条件检查的其他部分总是会失败。其他工作项的d [0]值不等于零。为什么局部变量在工作组中不可见?

我正在使用AMD APU A12-9800

__kernel void test(__global int *input_vector,__global atomic_int *mem_flag)
{
    local int d[32];
    if(get_local_id(0)==0) {
            d[0] = 100;
        }
    barrier(CLK_GLOBAL_MEM_FENCE| CLK_LOCAL_MEM_FENCE);
    while(1) {
        if(get_local_id(0) == 0) {
            d[0] = 0;
            break;
        }
        else {
            if(d[0] == 0)
            break;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

如@alexg建议的那样,

我添加了障碍,并删除了其他条件,并且它起作用了。这是完整的代码

__kernel void test(__global int *input_vector,__global atomic_int *mem_flag)
{
    local int d[32];                                                  
    if(get_local_id(0)==0) {                                          
            d[0] = 100;
        }   
    barrier(CLK_GLOBAL_MEM_FENCE| CLK_LOCAL_MEM_FENCE);               
    while(1) {
            mem_fence(CLK_GLOBAL_MEM_FENCE| CLK_LOCAL_MEM_FENCE);     
           if(d[0] == 0)
            break;
        if(get_local_id(0) == 0) {                                    
            d[0] = 0;   
        }   
    }     
}