【问题标题】:Creating Universal binaries for OpenCL Kernel for Intel GPU为英特尔 GPU 的 OpenCL 内核创建通用二进制文件
【发布时间】: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 也需要很长时间进行编译,因此它可能不是我正在寻找的解决方案,因为初始化时间也很重要。

【问题讨论】:

    标签: binary opencl


    【解决方案1】:

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

    SPIR 有点区分差异,因为它独立于硬件,同时仍然更难进行逆向工程。如果启动性能很重要,您可以随时尝试 clCreateProgramWithBinary 路径;如果二进制加载失败(意味着驱动程序更改或其他原因),则能够回退到 SPIR。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多