Opencl 如何使用cl_amd_离线_设备为特定GPU编译内核?

Opencl 如何使用cl_amd_离线_设备为特定GPU编译内核?,opencl,cross-compiling,amd,dynamic-compilation,Opencl,Cross Compiling,Amd,Dynamic Compilation,我想为某个AMD GPU编译一个OpenCL内核——这在我的机器上是不可用的——这样以后我就可以在GPU存在时加载并运行它了 我在这里读到了这个问题,所以: 答案是建议我用CL\u context\u OFFLINE\u DEVICES\u AMD创建OpenCL上下文。好的,我能做到。那又怎样呢?在AMD的OpenCL编程用户指南中,它说: A.8.6cl\u和离线设备 要脱机生成二进制图像,必须访问编译器以获取每个 运行时支持的设备,即使该设备当前未安装在系统上。在创建上下文期间,当在上下

我想为某个AMD GPU编译一个OpenCL内核——这在我的机器上是不可用的——这样以后我就可以在GPU存在时加载并运行它了

我在这里读到了这个问题,所以:

答案是建议我用
CL\u context\u OFFLINE\u DEVICES\u AMD
创建OpenCL上下文。好的,我能做到。那又怎样呢?在AMD的OpenCL编程用户指南中,它说:

A.8.6
cl\u和离线设备
要脱机生成二进制图像,必须访问编译器以获取每个 运行时支持的设备,即使该设备当前未安装在系统上。在创建上下文期间,当在上下文属性中传递
CL\u context\u OFFLINE\u DEVICES\u AMD
时,将报告所有受支持的设备,无论是联机还是脱机,并可用于创建OpenCL二进制映像


好的,但具体怎么办?我假设我需要调用
clCompileProgram()
clBuildProgram()
,对吗?如何将它的设备列表设置为我喜欢的设备?

正如您所假设的,您从通常的
clCompileProgram()
clBuildProgram()
开始

接下来,您可以使用
clGetProgramInfo()
CL\u程序二进制大小
来获取缓冲区分配的大小,第二次使用
CL\u程序二进制大小
来获取程序的实际二进制映像

然后,此图像可以与
clCreateProgramWithBinary()
一起使用,而不是与
clCreateProgramWithSource()
一起使用


希望这能有所帮助。

所以,我需要检查所有设备以选择我想要的,然后使用该索引获取大小和指向已编译二进制文件的指针,并将其写入文件?好的,听起来是可行的。我不认为你有这样做的示例程序的链接?对不起,手头没有示例,但你基本上可以使用任何OpenCL Hello World,例如,快速将其修改为两个版本-一个创建二进制文件和出口,另一个加载它们而不是源代码。祝你好运。:-)