当CL_LOCAL_MeM_FENCE包含在IF循环

时间:2016-06-26 17:02:23

标签: opencl

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;
}

在while循环中,CL_LOCAL_MeM_FENCE包含在IF循环中。任务是识别错误并注释当IF_L循环中包含CL_LOCAL_MeM_FENCE时程序无效的原因

我正在学习与我的课程相关的GPU编程。以上我提供了有关我的查询的所有详细信息。我不明白为什么当IF_L循环中包含CL_LOCAL_MeM_FENCE时程序不起作用。拜托,有人帮帮我。谢谢你。

1 个答案:

答案 0 :(得分:2)

在OpenCL中,工作组中的所有工作项必须对每种类型执行相同数量的障碍。当一个工作项遇到它的第一个围栏时,它等待所有其他人到达它们的第一个围栏;当它到达第二个时,它等待所有其他人到达围栏2,依此类推。

如果在条件(if,switch,...)块中有栅栏,这通常意味着所有工作项上的条件必须相同,并且如果在循环内有栅栏(for,while,do等等),所有工作项必须运行相同数量的迭代。

从技术上讲,特定围栏在代码中的位置并不重要(即,您可以在条件的if和else部分都有障碍),但它有助于遵循这些规则以便于阅读。