15

我曾在几个项目中使用 OpenCL,但始终将内核编写为一个(有时相当大)函数。现在我正在处理一个更复杂的项目,并希望在多个内核之间共享功能。

但是我能找到的示例都将内核显示为单个文件(很少有人调用辅助函数)。似乎应该可以使用多个文件 -clCreateProgramWithSource()接受多个字符串(并组合它们,我假设) - 尽管 pyopenclProgram()只需要一个源。

所以我想听听任何有这样做经验的人的意见:

  • 是否存在与多个源文件相关的问题?
  • pyopencl 是简单地连接文件的最佳解决方法吗?
  • 有没有办法编译函数库(而不是在每个内核中传递库源,即使不是全部都使用)?
  • 如果每次都需要传入库源,是否会丢弃未使用的函数(无开销)?
  • 还有其他最佳实践/建议吗?

谢谢。

4

2 回答 2

6

我不认为 OpenCL 在一个程序中有多个源文件的概念——一个程序是一个编译单元。但是,您可以在编译时使用 #include 并拉入头文件或其他 .cl 文件。

您可以在一个 OpenCL 程序中拥有多个内核 - 因此,在一次编译之后,您可以调用已编译的任何一组内核。

任何未使用的代码 - 函数,或任何静态已知无法访问的代码 - 都可以假定在编译期间被消除,编译时间的成本很小。

于 2011-10-06T12:02:23.987 回答
5

在 OpenCL 1.2 中,您将不同的目标文件链接在一起。

于 2012-01-25T19:22:13.903 回答