是否可以在OpenCL中使用不同的预处理器选项构建同一个程序两次。

是否可以在OpenCL中使用不同的预处理器选项构建同一个程序两次。,opencl,Opencl,给定以下代码,wher p是一个加载了一些源代码的cl_程序。 如果我跑了怎么办 *err = clBuildProgram (p, 1, m_gpu_device_id, str0, // Compiler options, see the specifications for more details 0

给定以下代码,wher p是一个加载了一些源代码的cl_程序。 如果我跑了怎么办

*err = clBuildProgram (p, 
                       1,
                       m_gpu_device_id,
                       str0,   // Compiler options, see the specifications for more details
                       0, 
                       0);

cl_kernel kernel0= clCreateKernel (p,   // The program where the kernel is
                        "nn_feedforward",   // The name of the kernel, i.e. the name of the kernel function as it's declared in the code
                        err);

*err = clBuildProgram (p,1,m_gpu_device_id, str1 ,0, 0);
cl_kernel kernel1 = clCreateKernel (p, "nn_feedforward", err);

kernel1是否可以使用str1选项,而kernel0是否可以使用str0选项。或者第一个内核会以某种方式被重写。

当您尝试此操作时发生了什么?我能够构建它,但我仍在学习,我无法测试它是否生成不同的内核。我看不出有任何理由不能获得两个不同的有效内核。看起来它毕竟没有构建。第二个生成调用给出了一个-59错误,并且specifications告诉您,当上一个生成调用未完成时,此错误适用。但是我已经确定并且我知道在第二次调用之前它已经完成了。我必须创建两个程序,这意味着复制源代码两次。看起来有点奇怪。