我很难理解OpenCL报告的最大工作组限制及其对程序的影响。
所以我的程序报告了以下内容,
CL_DEVICE_MAX_WORK_ITEM_SIZES : 1024, 1024, 1024
CL_DEVICE_MAX_WORK_GROUP_SIZE : 256
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS : 3
现在我正在编写一个程序来添加100万个条目的向量。
因此,NDRange的globalSize和localSize的计算如下
int localSize = 64;
// Number of total work items - localSize must be devisor
globalSize = ceil(n/(float)localSize)*localSize;
.......
// Execute the kernel over the entire range of the data set
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &globalSize, &localSize,
0, NULL, NULL);
根据我的理解,OpenCL间接计算了它将启动的工作组数量。
对于上述示例
globalSize = 15625 * 64 -> 1,000,000 -> So this is total number of threads that will be launched
localSize = 64 -> So each work group will have 64 work items
因此,从上面我们得到
Total Work Groups Launched = globalSize/ localSize -> 15625 Work Groups
在这里,我的困惑开始了,
如果你看到OpenCL CLD_MAX_WORK_GROUP _SIZE:256报告的值,那么我想这意味着我的设备在一个维度上最多可以启动256个工作组,
但上述计算表明,我正在启动15625个工作组。
那么,这东西是怎么工作的?
我希望有人能澄清我的困惑。
我肯定我理解错了。
提前感谢。