微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我为一台设备构建程序时,为什么会得到多个 OpenCL“二进制文件”?

如何解决当我为一台设备构建程序时,为什么会得到多个 OpenCL“二进制文件”?

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

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

解决方法

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

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

再深入一点,似乎这甚至是正式的documented(强调我的):

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。