从内核入队内核导致被误解的构建错误

Enqueue kernel from kernel leads to a misunderstood build error

我需要从另一个内核启动一个内核,所以我阅读了 OpenCL 规范并完全按照所述进行操作,但我得到了 CL_BUILD_PROGRAM_FAILURE。也许我的 opencl 版本低于 2.0,但我下载了带有 CUDA 的 OpenCL,所以通常版本高于 2.0 对吗?

这是我的内核代码:

__kernel void funcB(__global int* a)
{
    //blabla
}

__kernel void funcA(__global int* a, const size_t n)
{
    //blabla

    void (^funcB)(void) = ^{funcB(a);};

    enqueue_kernel(get_default_queue(), CLK_ENQUEUE_FLAGS_WAIT_KERNEL, 
    ndrange_1d(n), funcB);
}

我还需要在主机代码中创建一个 'cl_kernel funcB' object 吗??或者导入一个 header 而不是 ?

感谢您的帮助。

您不能在 OpenCL 1.1/1.2/3.0 设备上使用 OpenCL 2.0/2.1/2.2 功能。

Nvidia GPU 仅支持 OpenCL C 1.2 语言标准(您可以使用 cl_device.getInfo<CL_DEVICE_OPENCL_C_VERSION>() 查询)。 Nvidia 最近“升级”到 OpenCL 3.0 版,但这只是 1.2 版的新名称。仍不支持 OpenCL 2.0/2.1/2.2 功能。