为什么程序没有’;如果IF回路中包含CL_LOCAL_MeM_围栏,则不工作 while(大小!=0) { 如果在OpenCL中(local_id

为什么程序没有’;如果IF回路中包含CL_LOCAL_MeM_围栏,则不工作 while(大小!=0) { 如果在OpenCL中(local_id,opencl,Opencl,,则工作组中的所有工作项必须执行每种类型相同数量的屏障。当一个工作项遇到第一道屏障时,它将等待所有其他工作项到达第一道屏障;当它到达第二道屏障时,它将等待所有其他工作项到达第二道屏障,依此类推 如果在条件(If,switch,…)块中有一个栅栏,这通常意味着所有工作项上的条件必须相同,如果在循环中有栅栏(for,while,do等),则所有工作项必须运行相同的迭代次数 从技术上讲,代码中的特定界限在哪里并不重要(即,条件的if和else部分都可能有障碍),但遵循这些规则有助于可读性。在“if”中

,则工作组中的所有工作项必须执行每种类型相同数量的屏障。当一个工作项遇到第一道屏障时,它将等待所有其他工作项到达第一道屏障;当它到达第二道屏障时,它将等待所有其他工作项到达第二道屏障,依此类推

如果在条件(If,switch,…)块中有一个栅栏,这通常意味着所有工作项上的条件必须相同,如果在循环中有栅栏(for,while,do等),则所有工作项必须运行相同的迭代次数

从技术上讲,代码中的特定界限在哪里并不重要(即,条件的if和else部分都可能有障碍),但遵循这些规则有助于可读性。

在“if”中只有求和。
while ( size!=0)
{
  if(local_id<size)
    local_sums[local_id] += local_sums[local_id+size];
  work_group_barrier(clk_local_mem_fence)
  size = size/2;
}