coding-style - 如何构建大型 OpenCL 内核?

标签 coding-style opencl gpgpu pyopencl

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

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

所以我想听听有这方面经验的人的意见:

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

  • 谢谢。

    最佳答案

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

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

    任何未使用的代码 - 函数,或任何静态已知无法访问的代码 - 都可以假设在编译期间被删除,编译时会付出一些小的代价。

    关于coding-style - 如何构建大型 OpenCL 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7622293/

    相关文章:

    java - 在窗口之间导航的正确方法是什么?

    java - 大型项目代码格式化的最佳实践

    opencl - 使用 NVIDIA 的 nvcc 编译器编译和构建 .cl 文件?

    ios - Metal - 优化内存访问

    opengl-es - 如何将 Opengl Es 用于 gpgpu 实现

    c - Ruby - 源代码 - 编码风格

    Python 编码约定“ block : found by pylint 之前的错误继续缩进

    c - 霍夫变换: improving algorithm efficiency over OpenCL

    multithreading - OpenMP 可以扩展到包括图形处理器吗?

    c - 在 OpenCL 和映射缓冲区中使用多个命令队列。我会遇到冲突吗?