2016-08-24 49 views
0

我已经经历了几个资源:OpenCL Khronos书,GATech教程,纽约大学教程和我可以经历更多。但我还是不完全明白。 内核和程序对象有什么区别?内核和程序对象有什么区别?

到目前为止,最好的解释是这样的我,但这是不够的,我完全理解: 程序对象:程序对象封装了一些源代码(有可能几个内核函数)和最近一次成功的构建。 KERNEL:内核对象封装内核执行时使用的内核参数值的参数值 。

也许程序对象是代码?内核是编译的可执行文件?是吗?因为我能理解这样的事情。

在此先感谢!

+0

这个解释对我来说也没有意义:内核是在OpenCL设备上运行的OpenCL函数;程序对象是实现内核的程序源代码和可执行文件。我的断开是,函数和源代码对我来说意味着同样的事情。 –

+1

我不知道为什么这对你很重要 - 似乎你对术语感到痴迷。实际的方面是重要的,这很清楚 - 内核是一个可以执行的编译函数;该程序是编译的代码,其中可能包含几个内核。所以它是不同抽象层次上的对象,与任何编程语言中的程序和函数/例程完全相同。 –

+0

懂了!这是完全合理的。谢谢! –

回答

3

程序是一个或多个内核以及可选的支持功能的集合。程序可以从源文件或几种类型的二进制文件(例如SPIR,SPIR-V,native)创建。在从内核中选择内核之前,需要为一个或多个设备(使用clBuildProgram或clCompileProgram和clLinkProgram)构建一些程序对象(从源代码或中间二进制文件创建)。考虑程序最简单的方法是,它们就像DLL和导出内核供程序员使用。内核是一个可执行实体(不一定需要编译,因为你可以拥有代表硬件的内置内核(例如Intel硬件上的视频运动估计内核)),你可以绑定它的参数并将它们提交给各种队列执行。

+0

非常感谢你,我认为Lubo的评论与你的回答相结合,给了我一种丰富的理解,我无法在书籍/幻灯片中找到。再次感谢! –