我有以下情况:
两个线程处理两个共享相同上下文的OpenCL设备。每个线程加载不同版本的OpenCL设备代码,创建cl::Programm
实例并编译其特定cl::Device
的代码。但是,成功构建程序后的createKernels
函数失败,错误代码为-47 =
CL_INVALID_KERNEL_DEFINITION如果由kernel_name给出的__kernel函数的函数定义,例如参数个数,则参数类型对于已为其构建程序可执行文件的所有设备都不相同。
有多个cl::Context
个实例(每个设备一个),效果很好。如果我查看OpenCL类图(http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/classDiagram.html),我不明白为什么不能在一个上下文中使用多个内核的多个程序,因为它们可以通过相关程序清楚地区分。
我在CUDA SDK 5.5中使用Nvidia的OpenCL实现。给我带来的问题是:
这是对OpenCL结构的一般误解吗?有一条规则说上下文中的每个内核都必须有一个唯一的名称,或者这个Nvidia的非OpenCL标准是否确认了处理这个特定用例的方法? / p>
我真的希望在一个上下文中的多个设备能够使用从一个cl::Buffer
到另一个{{1}}的副本,即使它们的内存位于不同的设备上也是如此。