我曾在几个项目上与OpenCL合作过,但一直将内核编写为一个(有时很大)的函数。现在我正在研究一个更复杂的项目,并希望在多个内核之间共享函数。如何构建大型OpenCL内核?
但我能找到的所有例子都显示内核为单个文件(很少有甚至调用辅助函数)。似乎应该可以使用多个文件 - clCreateProgramWithSource()
接受多个字符串(并且将它们结合起来,我假设) - 虽然pyopencl的Program()
只接受单一来源。
所以我想从别人听到有经验的这样:
- 是否有与多个源文件相关的问题?
- 是pyopencl简单连接文件的最佳解决方法?
- 有什么办法可以编译一个函数库(而不是每个内核都传入库源代码,即使并非全部都使用)?
- 如果每次都需要传入库源,是否丢弃了未使用的函数(无开销)?
- 任何其他最佳做法/建议?
谢谢。
您可以创建一个包含#include“part1.cl”#include“part2.cl”的并置文件。这适用于我(NVidia编译器),尽管可能每次应用程序运行时编译所有内容。 我认为有一个预编译函数库有点科幻,因为函数代码被内联到每个内核中(这就是为什么你不能写递归函数)。 –