【问题标题】:Why am I getting multiple OpenCL 'binaries' when I built my program for one device?为什么我在为一台设备构建程序时会获得多个 OpenCL“二进制文件”?
【发布时间】:2021-08-08 22:38:36
【问题描述】:

我正在构建一个 OpenCL 程序 - 使用 NVIDIA CUDA 11.2 的 OpenCL 库(及其 C++ 绑定)。成功调用cl::Program::build() 后,对于单个设备(传递具有单个设备索引的向量),我使用:built_program.getInfo<CL_PROGRAM_BINARY_SIZES>() 获得生成的“二进制”大小,这也成功,但给了我 3 个值:非零值和两个零。当我打印第一个二进制文件时,我看到了我期望的 PTX 代码。

我的问题:为什么要给我两个(空)额外的二进制文件?

【问题讨论】:

    标签: opencl multi-gpu dummy-data ptx


    【解决方案1】:

    即使该程序是为您指定的特定设备构建的(请参阅documentation for clBuildProgram),二进制文件仍可用于 context 中的每个设备。在您的情况下,您的系统上可能有三个 GPU;您为单个设备构建了程序,因此对于三个设备之一,您会看到一个非空的 PTX。

    令人困惑?当然。费解?是的。但这完全没有意义吗?诚然,并非如此。

    再深入一点,这似乎是官方的documented(强调我的):

    返回一个数组,其中包含程序二进制文件(可以是可执行二进制文件、编译二进制文件或库二进制文件)与程序关联的每个设备的字节大小。数组的大小是与程序关联的设备数量。如果二进制文件不可用于设备,则返回大小为零。

    不是您构建的每个设备,而是与程序相关联的每个设备;这可能是您创建程序的 OpenCL 上下文中的每个设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2012-08-14
      • 1970-01-01
      • 2015-05-30
      • 2011-05-30
      相关资源
      最近更新 更多