我曾在几个项目中使用OpenCL,但始终将内核编写为一个(有时相当大)的函数。现在我正在开发一个更复杂的项目,并希望在几个内核之间共享函数。
但我可以找到的示例都将内核显示为单个文件(甚至很少调用辅助函数)。看起来应该可以使用多个文件 - clCreateProgramWithSource()
接受多个字符串(并假设它们合并它们) - 尽管pyopencl的Program()
只占用一个源。
所以我希望听到任何有这方面经验的人:
感谢。
答案 0 :(得分:6)
我不认为OpenCL在程序中有多个源文件的概念 - 程序是一个编译单元。但是,您可以在编译时使用#include并引入头文件或其他.cl文件。
您可以在OpenCL程序中拥有多个内核 - 因此,在一次编译之后,您可以调用任何已编译的内核集。
任何未使用的代码 - 函数或静态知道无法访问的任何代码 - 都可以假设在编译期间被消除,编译时间成本较低。
答案 1 :(得分:5)
在OpenCL 1.2中,您可以将不同的目标文件链接在一起。