我有一些用 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 很长
range 是一个 const long
halfRange 是一个 const long(即 range/2)
我的第二个问题是。
因为它不是一个数组(大多数 OpenCL 教程都讨论了如何让 OpenCL 同时在一个数组中分配多个元素)。
我该如何设置
runningTotal += ((rng_1.rand_cmwc()%range + 1) <= halfRange ? 1: -1);
在多个内核上运行?我做一个工作组吗?
有人可以举例说明我将如何执行引用多个内核的 cl_program clCreateProgramWithSource 命令吗?
我确定我会有更多问题,但我想我需要两个内核,每个都运行它自己的工作组?一个用于我的 cmwc 类,一个用于 runningTotal 总和。
然后以某种方式每隔一段时间将所有工作项同步到更大的总数。