内核函数内的工作项序列化 - OpenCL

时间:2012-07-25 20:48:01

标签: opencl

我正在从openCL的内核生成hadware模块(Verilog上的描述)。我正在阅读有关此内容的文章,作者对内核进行了一些预处理,预处理的第一步是:内核函数内部工作项的序列化,他们解释如下: / p>

  

“工作组内的工作项可以按任意顺序执行,   只要内核中不存在同步操作   功能。基于这一观察,我们序列化了执行   通过将指令包含在内核主体中来处理工作项   函数进入三重嵌套循环,给出最大数量   工作组中抽象索引空间中的维度为三。   每个循环嵌套都枚举相应的工作项   维度,从而序列化他们的执行。“

他们提供了这样的例子:

int __kernel_indices[3];

__kernel_indices[2] = 0;
while (__kernel_indices[2]< __local_size[2]){
   __kernel_indices[1] = 0;
   while (__kernel_indices[1]< __local_size[1]){
      __kernel_indices[0] = 0;
      while (__kernel_indices[0]< __local_size[0]){

               //Kernel Body

      }
      __kernel_indices[0]++;
   }
   __kernel_indices[]++;
}
__kernel_indices[2]++;

我不明白序列化的含义,当时是否执行了一个工作项?或者当时只有1个工作组的工作项目会被执行?

感谢您阅读该帖子并抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

是的,上面的内核使得不同的工作项按顺序执行而不是一起运行。对我来说,看起来越来越多的工作项在while循环运行时开始执行。要理解这一点,请将每个工作项视为具有三维索引。