代码之家  ›  专栏  ›  技术社区  ›  Paritosh Kulkarni

了解CLD_MAX_WORK_GROUP大小限制OpenCL?

  •  0
  • Paritosh Kulkarni  · 技术社区  · 6 年前

    我很难理解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个工作组。

    那么,这东西是怎么工作的?

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

    提前感谢。

    0 回复  |  直到 6 年前
        1
  •  2
  •   user13704652    6 年前

    根据规范 clEnqueueNDRangeKernel : https://www.khronos.org/registry/OpenCL/sdk/2.2/docs/man/html/clEnqueueNDRangeKernel.html , CL_DEVICE_MAX_WORK_ITEM_SIZES CL_DEVICE_MAX_WORK_GROUP_SIZE 指出局部大小的限制( CL_​KERNEL_​WORK_​GROUP_​SIZE CL_DEVICE_MAX_WORK_GROUP_SIZE 在OpenCL 1.2中)。

    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 .