从内核入队内核导致被误解的构建错误
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 功能。
我需要从另一个内核启动一个内核,所以我阅读了 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 功能。