工作组绑定检查不起作用

时间:2015-06-19 13:01:57

标签: opencl

在我的OpenCL内核中,我检查global_id是否在全局问题大小范围内,但是它不起作用。

如果工作组大小可以分割全局问题大小,那么一切都很好。如果没有,内核就什么都不做。

__kernel void move_points(const unsigned int points,
                              const unsigned int floors,
                              const unsigned int gridWidth,
                              const unsigned int gridHeight,
                              __global const GraphData *graph,
                              __global const float *pin_x,
                              __global const float *pin_y,
                              __global const float *pin_z,
                              __global float *pout_x,
                              __global float *pout_y,
                              __global float *pout_z,
                              __global clrngMrg31k3pHostStream *streams)
{
    int id = get_global_id(0);

    if (id < points) {
        do kernel things...
    }
}

有人知道问题在哪里吗?

非常感谢。罗宾。

1 个答案:

答案 0 :(得分:4)

如果您的全局大小不能被您的本地大小(工作组大小)整除,那么内核根本不会运行。

enqueueNDRangeKernel()调用将CL_INVALID_WORK_GROUP_SIZE作为指定here的错误返回。

如果您真的想要遵循CUDA模式,那么您可能会使用未使用的工作项。然后将检查放入内核(如您所知),并使用更大的全局大小,即本地大小的倍数。