Opencl 如何使用cl_amd_离线_设备为特定GPU编译内核?
我想为某个AMD GPU编译一个OpenCL内核——这在我的机器上是不可用的——这样以后我就可以在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和离线设备 要脱机生成二进制图像,必须访问编译器以获取每个 运行时支持的设备,即使该设备当前未安装在系统上。在创建上下文期间,当在上下
CL\u context\u OFFLINE\u DEVICES\u AMD
创建OpenCL上下文。好的,我能做到。那又怎样呢?在AMD的OpenCL编程用户指南中,它说:
A.8.6cl\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,例如,快速将其修改为两个版本-一个创建二进制文件和出口,另一个加载它们而不是源代码。祝你好运。:-)