如何将OpenCL内核编译成比特流?

时间:2012-07-09 22:21:24

标签: compiler-construction parallel-processing opencl gpu

如何将OpenCL内核编译成比特流,以后可以直接加载而无需重新编译? 我的平台是带有APU和AMD独立GPU的AMD机器。该机器运行最新的支持OpenCL 1.2的AMD APP SDK。

1 个答案:

答案 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调用重新执行该对象。