我已浏览了多个资源:OpenCL Khronos书籍,GATech教程,NYU教程等等。但我仍然不完全理解。 内核和程序对象有什么区别?
到目前为止,对我来说最好的解释是这个,但这还不足以让我完全理解: 程序对象:一个程序对象封装了一些源代码(可能有几个内核函数)及其最后一个成功构建的状态。 内核:内核对象封装了内核执行时使用的内核参数值。
也许一个程序对象就是代码?内核是编译后的可执行文件?就是这样吗?因为我可以理解这样的东西。
提前致谢!
到目前为止,对我来说最好的解释是这个,但这还不足以让我完全理解: 程序对象:一个程序对象封装了一些源代码(可能有几个内核函数)及其最后一个成功构建的状态。 内核:内核对象封装了内核执行时使用的内核参数值。
也许一个程序对象就是代码?内核是编译后的可执行文件?就是这样吗?因为我可以理解这样的东西。
提前致谢!
一个有助于理解内核对象和程序对象区别的比喻是,程序对象就像动态库一样,它包含了一组内核函数。内核对象就像是动态库中函数的句柄。程序对象可以从源代码(OpenCL C)或已编译的程序二进制文件创建(稍后会详细介绍)。程序将为程序对象连接的任何设备构建。然后使用内核对象来访问已编译内核函数的属性,对其进行排队调用并设置其参数。