为什么我会得到多个OpenCL';二进制文件';当我为一台设备构建程序时? 我正在构建一个OpenCL程序——使用Nvidia CUDA 11.2的OpenCL库(及其C++绑定)。成功调用cl::Program::build()后,对于单个设备(传递带有单个设备索引的向量),我使用:builded\u Program.getInfo()获得生成的“二进制文件”大小,这也成功了,但给出了3个值:一个非零值和两个零。当我打印第一个二进制文件时,我看到了预期的PTX代码

为什么我会得到多个OpenCL';二进制文件';当我为一台设备构建程序时? 我正在构建一个OpenCL程序——使用Nvidia CUDA 11.2的OpenCL库(及其C++绑定)。成功调用cl::Program::build()后,对于单个设备(传递带有单个设备索引的向量),我使用:builded\u Program.getInfo()获得生成的“二进制文件”大小,这也成功了,但给出了3个值:一个非零值和两个零。当我打印第一个二进制文件时,我看到了预期的PTX代码,opencl,multi-gpu,dummy-data,ptx,Opencl,Multi Gpu,Dummy Data,Ptx,我的问题:为什么给我两个(空的)额外的二进制文件?即使程序是为您指定的特定设备构建的(请参见),二进制文件在上下文中对每个设备都可用。在您的情况下,您的系统上可能有三个GPU;您为单个设备构建了程序,因此对于三个设备中的一个,您会看到一个非空的PTX 困惑?当然晦涩难懂的对但这是完全没有意义的吗?不可否认,不是真的 进一步挖掘,这似乎是官方的(强调我的): 返回一个数组,该数组包含与程序关联的每个设备的程序二进制文件(可以是可执行二进制文件、编译二进制文件或库二进制文件)的字节大小。数组的大小是

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

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

困惑?当然晦涩难懂的对但这是完全没有意义的吗?不可否认,不是真的

进一步挖掘,这似乎是官方的(强调我的):

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

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