2012-07-25 30 views
0

我正在从openCL的内核生成hadware模块(对Verilog的描述)。我在读关于这方面的文章,作者做一些预先处理内核,预处理的第一步是:内核函数中工作项的序列化 - OpenCL

序列化的内核函数里面的工作项目,他们这样解释“工作组中的工作项可以按任意顺序执行, 前提是在内核 函数中不存在同步操作。基于此观察,我们通过将指令包含在工作项中来序列化 工作项的执行。内核 函数的主体函数转换为三重嵌套循环,假设wo内抽象索引空间中的最大维数为 rkgroup是三个。 每个循环嵌套枚举工作项目在相应 尺寸,从而序列化它们的执行“

,他们提供了这样一个例子:

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

你有链接到这篇文章? – 2012-07-25 22:54:47

回答

0

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