我正在从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个工作组的工作项目会被执行?
感谢您阅读该帖子并抱歉我的英语不好。
答案 0 :(得分:0)
是的,上面的内核使得不同的工作项按顺序执行而不是一起运行。对我来说,看起来越来越多的工作项在while循环运行时开始执行。要理解这一点,请将每个工作项视为具有三维索引。