我曾在几个项目上使用 OpenCL,但总是将内核编写为一个(有时相当大)函数。现在我正在处理一个更复杂的项目,并希望在多个内核之间共享功能。
但是我能找到的所有示例都将内核显示为单个文件(甚至很少调用辅助函数)。似乎应该可以使用多个文件 - clCreateProgramWithSource()
接受多个字符串(并组合它们,我假设) - 尽管 pyopencl 的 Program()
只需要一个来源。
所以我想听听有这方面经验的人的意见:
谢谢。
最佳答案
我不认为 OpenCL 有一个程序中有多个源文件的概念——一个程序是一个编译单元。但是,您可以使用 #include 并在编译时引入头文件或其他 .cl 文件。
您可以在 OpenCL 程序中拥有多个内核 - 因此,在一次编译后,您可以调用已编译的任何一组内核。
任何未使用的代码 - 函数,或任何静态已知无法访问的代码 - 都可以假设在编译期间被删除,编译时会付出一些小的代价。
关于coding-style - 如何构建大型 OpenCL 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7622293/