OpenCL通用二进制文件

OpenCL通用二进制文件,opencl,amd,Opencl,Amd,我有两台电脑,一台装有Raden R9 290x,另一台装有Raden R7 250。以下讨论仅关注AMD图形卡。在两台机器上安装了相同的驱动程序。我编写了OpenCL内核,将其编译成二进制文件,并使用clCreateProgramWithBinary。但我面临着以下挑战: 这两种设备的编译二进制文件是不同的:R7的二进制文件重约500KB,R9的二进制文件重约1.5MB 我在编译二进制文件的设备上使用二进制文件时没有问题,一切都会立即发生。但是,如果我尝试在R9运行R7的二进制文件,那么clB

我有两台电脑,一台装有Raden R9 290x,另一台装有Raden R7 250。以下讨论仅关注AMD图形卡。在两台机器上安装了相同的驱动程序。我编写了OpenCL内核,将其编译成二进制文件,并使用clCreateProgramWithBinary。但我面临着以下挑战:

这两种设备的编译二进制文件是不同的:R7的二进制文件重约500KB,R9的二进制文件重约1.5MB

我在编译二进制文件的设备上使用二进制文件时没有问题,一切都会立即发生。但是,如果我尝试在R9运行R7的二进制文件,那么clBuildProgram会执行很长时间(~1分钟),相反(从R9加载到R7的二进制文件)clBuildProgram会导致访问冲突


我需要得到二进制文件,将运行在所有的AMD的图形卡,支持OpenCL。如何编译OpenCL内核,使其在所有设备上都能正常工作?

@Dmitribdnikov感谢您的回复。现在我尝试使用SPIR。我用英特尔OpenCL代码生成器编译了.spir文件,并像二进制文件一样加载它。这是可行的,但我在CLBuild程序中遇到了一个延迟。编译OpenCL源代码需要14秒,使用SPIR需要8秒。这就是兼容性的回报?@Dmittribdnikov正如我所见,SPIR的主要目的是隐藏源代码。编译源代码的需要仍然存在。我的主要目标是避免源代码编译的滞后。R9是一种不同的、更新的体系结构。二进制文件肯定不会兼容。除非另有说明,否则使用SPIR。然而,它仍然迫使您进入编译步骤。为什么R7二进制文件在编译1分钟后就可以在R9上工作,这是一个谜。@Dmitribdnikov-Huh,但他有不同的想法——“SPIR的主要目标是让应用程序开发人员避免以源代码的形式发送内核,同时保持供应商和设备之间的可移植性。”但这是离谱的。我的内核包含~3k行,我认为编译真的需要时间。在我的例子中,我写的DLL在资源中包含二进制文件,所以我没有办法缓存它。我想我应该尝试分离内核,因为它包含独立的部分。@DarkZeros我想你错了。我相信这是可能的。看阿喀什猫。他们分发适用于所有(?)AMD卡的二进制文件。