【问题标题】:Understanding CL_DEVICE_MAX_WORK_GROUP_SIZE limit OpenCL?了解 CL_DEVICE_MAX_WORK_GROUP_SIZE 限制 OpenCL?
【发布时间】:2020-09-25 21:12:55
【问题描述】:

我有点难以理解 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 报告的值 CL_DEVICE_MAX_WORK_GROUP_SIZE : 256 所以,我在想这意味着我的设备最多可以在一个维度上启动 256 个工作组,

但上面的计算表明我正在启动 15625 个工作组。

那么这个东西是怎么工作的呢?

我希望有人能澄清我的困惑。 我确定我理解错了。

提前致谢。

【问题讨论】:

    标签: parallel-processing gpu opencl gpgpu


    【解决方案1】:

    根据clEnqueueNDRangeKernel:https://www.khronos.org/registry/OpenCL/sdk/2.2/docs/man/html/clEnqueueNDRangeKernel.html的规范, CL_DEVICE_MAX_WORK_ITEM_SIZESCL_DEVICE_MAX_WORK_GROUP_SIZE 表示本地大小的限制(CL_​KERNEL_​WORK_​GROUP_​SIZE 在 OpenCL 1.2 中为 CL_DEVICE_MAX_WORK_GROUP_SIZE)。

    const int dimension = n;
    const int localSizeDim[n] = { ... }; // Each element must be less than or equal to 'CL_DEVICE_MAX_WORK_ITEM_SIZES[i]'
    const int localSize = localSizeDim[0] * localSizeDim[1] * ... * localSizeDim[n-1]; // The size must be less than or equal to 'CL_DEVICE_MAX_WORK_GROUP_SIZ'
    

    找不到全局工作项的设备限制,但size t表示的最大值是错误CL_​INVALID_​GLOBAL_​WORK_​SIZE描述中的全局工作项限制。

    【讨论】:

    • 所以看起来对总工作组的数量没有限制。但是总工作项的数量是 65535(size_t 的限制),这些常量基本上说明了本地大小,即每个工作组的工作项数量为 256。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2018-07-10
    • 1970-01-01
    • 2014-10-23
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多