为英特尔GPU创建OpenCL内核的通用二进制文件

时间:2016-10-19 12:19:44

标签: binary opencl

我们编写OpenCL C代码和clCreateProgramWithSource并使用clGetProgramInfo来获取二进制文件。然后将此二进制文件集成到产品二进制文件中,该二进制文件在初始化时使用clCreateProgramWithBinary。

我们创建一个.h文件并在源文件中包含相同的文件。 .h文件的内容是编译OpenCL C Kernel后生成的二进制文件。

上述步骤的问题是,二进制文件的兼容性预计将随OpenCL中的任何次要/主要更改而中断,并且很可能会破坏供应商。我们需要为每个供应商或OpenCL版本生成OpenCL内核二进制文件。

可以将标题形式的OpenCL内核二进制文件集成到项目中。在这种情况下,如果二进制文件不兼容,我们将无法替换二进制文件。在这种情况下,项目初始化失败。

预期解决方案

OpenCL C源是公司专有的,不能与客户共享。

  • 由于OpenCL Kernel二进制文件与项目集成在一起 库,我们需要了解是否可以生成二进制文件 它可以重新组织自己,而clCreateProgramWithBinary适合 到目标平台。
  • 如果绝对有必要为每个生成一次二进制文件 vendor / OpenCL minor / major revision并将其存储到磁盘(将会 在最终用户的机器上完成),我们如何保护源 公司专有(SPIR唯一的选择)?

我已经访问了Universal binaries for OpenCL,但它表明SPIR也需要很长时间进行编译,因此它可能不是我正在寻找的解决方案,因为初始化时间也很重要。

1 个答案:

答案 0 :(得分:0)

在实践中,英特尔Gen二进制格式可以针对相同平台/硬件的驱动程序更改进行更改(例如,用于修复错误的解决方法和性能改进)。因此,clGetProgramInfo返回的位只能在同一设备x驱动程序x等上的clCreateProgramWithBinary中工作...可悲的是,这意味着二进制路径与知识产权安全性不匹配问题。

SPIR将差异分开,因为它与硬件无关,同时仍然难以进行逆向工程。如果启动性能在某种程度上很重要,您始终可以尝试 clCreateProgramWithBinary路径;如果二进制加载失败(意味着驱动程序发生了变化或其他原因),则能够回退到SPIR。