OpenCL,多工作组/内核?

时间:2012-10-24 18:17:43

标签: kernel opencl

我在C ++中使用了一些利用多线程的代码。

我取消了一个数组,可以总结程序(在多次运行中运行多个线程),即-1 / + 1个随机数的总和

runningTotal += ((rng_1.rand_cmwc()%range + 1) <= halfRange ? 1: -1);

rng_1.rand_cmwc()是指cmwc类的函数,rng_1是对象。

我已经在OpenCl上做了一些阅读(http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201),我有了库设置,并编译了自己的主机。

这引出了我的问题#1

这个类在OpenCL中不存在,所以我认为我需要创建一个内核来保存这个类。

变量:

runningTotal很长

范围是一个长的

halfRange是一个const长(即范围/ 2)

我的第二个问题是。

因为它不是一个数组(大多数OpenCL教程讨论如何让OpenCL同时在一个数组中分配多个元素)。

如何设置

  runningTotal += ((rng_1.rand_cmwc()%range + 1) <= halfRange ? 1: -1);

在多个核心上运行?我做工作组吗?

有人可以举例说明我如何执行引用多个内核的cl_program clCreateProgramWithSource命令吗?

我确定我会有更多问题,但我想我需要两个内核,每个内核都运行自己的工作组?一个用于我的cmwc类,一个用于runningTotal总和。

然后以某种方式将所有工作项经常同步到更大的总数。

1 个答案:

答案 0 :(得分:1)

第一个问题:我认为只有AMD支持通过名为Static C ++ Kernel language的扩展来支持在内核中使用类(参见http://developer.amd.com/Assets/CPP_kernel_language.pdf

第二个问题:要并行进行求和,必须使用并行求和算法,例如前缀sum(http://en.wikipedia.org/wiki/Prefix_sum)或reduction(http://developer.amd。 COM /资源/文件/条/页/ OpenCL的 - 优化 - 案例研究 - 简单Reductions.aspx)。请注意,此处存在库。

希望有所帮助。祝你好运:)