【发布时间】:2016-03-16 00:38:28
【问题描述】:
OpenCL 编程的典型示例工作流似乎侧重于字符串中的源代码,传递给 JIT 编译器,然后最终入队(使用特定的内核名称);并且编译结果可以被缓存 - 但这留给你程序员来处理。
在 CUDA 中,代码以非 JIT 方式编译为目标文件(与主机端代码一起,但暂时忘记这一点),然后只在一个上下文中引用设备端函数入队或参数等。
现在,我想要第二种工作流程,但使用 OpenCL 源。也就是说,假设我有一些 C 主机端代码 my_app.c,还有一些 OpenCL 内核代码在一个单独的文件中,my_kernel.cl(为了讨论的目的是自包含的)。我希望能够在my_kernel.cl 上运行一个魔术命令,获得一个my_kernel.whatever,将它与my_app.o 链接或仿链接,并获得一个二进制文件。现在,在my_app.c 中,我希望能够以某种方式引用内核,即使它不是外部符号,作为已编译的 OpenCL 程序(或程序 + 内核名称)——并且不会出现编译错误。
这是否以某种方式支持?使用 nVIDIA 的 ICD 还是使用其他 ICD 之一?如果没有,是否至少一些受支持,例如魔术内核编译器+生成额外的头文件或源存根以用于编译my_app.c?
【问题讨论】:
标签: compilation workflow opencl static-linking