如何将OpenCL内核编译成比特流,以后可以直接加载而无需重新编译? 我的平台是带有APU和AMD独立GPU的AMD机器。该机器运行最新的支持OpenCL 1.2的AMD APP SDK。
答案 0 :(得分:10)
1)使用clCreateProgamWithSource API调用将内核编译为源程序。使用clGetProgramBuildInfo API调用检索编译器错误。
2)使用clGetProgramInfo API调用来获取CL_PROGRAM_BINARY_SIZES。这些是程序二进制文件的大小。 2a)使用2)
中的大小为二进制文件分配内存3)使用clGetProgramInfo API调用来获取CL_PROGRAM_BINARIES。这会得到程序二进制文件。
4)可以通过API调用将二进制文件转换为OpenCL程序对象 clCreateProgamWithBinary。
特定于设备的二进制文件,因此在特定设备上编译的二进制文件将无法在其他设备上运行。
对于单个流程实例,一旦拥有了环境(平台,设备,上下文和队列),就可以重新使用OpenCL内核对象,并使用另一个clEnqueueNDRange API调用重新执行该对象。