【发布时间】:2016-10-25 00:57:59
【问题描述】:
我们编写 OpenCL C 代码和 clCreateProgramWithSource 并使用 clGetProgramInfo 来获取二进制文件。然后将此二进制文件集成到产品二进制文件中,该产品二进制文件在初始化时使用 clCreateProgramWithBinary。
我们创建一个 .h 文件并将其包含在源文件中。 .h文件的内容是编译OpenCL C Kernel后生成的二进制文件。
上述步骤的问题是,二进制文件的兼容性预计会随着 OpenCL 中的任何次要/主要更改而中断,并且很可能会跨越供应商。我们需要为每个供应商或 OpenCL 版本生成 OpenCL Kernel 二进制文件。
可以将标头形式的 OpenCL 内核二进制文件集成到项目中。在这种情况下,如果二进制文件不兼容,我们将无法替换二进制文件。在这种情况下,项目初始化失败。
预期的解决方案
OpenCL C 源代码是公司专有的,不能与客户共享。
- 由于 OpenCL 内核二进制文件已与项目集成 库,我们需要了解是否可以生成二进制文件 它可以在 clCreateProgramWithBinary 适应时重新组织自己 到目标平台。
- 如果绝对有必要为每个文件生成一次二进制文件 供应商/OpenCL 次要/主要修订并将其存储到磁盘(这将 在最终用户的机器上完成),我们如何保护源 公司专有(SPIR 是唯一的选择吗)?
我已经访问过Universal binaries for OpenCL,但它表明 SPIR 也需要很长时间进行编译,因此它可能不是我正在寻找的解决方案,因为初始化时间也很重要。
【问题讨论】: