如何更快地编译'OpenCL-program'?



我有两个相关的问题,所以我问一个问题:

1-我们在运行时使用

编译opencl程序
clCreateProgramWithSource(context, 1,  (const char**)&source, NULL, NULL);
clBuildProgram(program, 1, &device, NULL, NULL,
NULL);

我的问题是每次我的opencl应用程序运行时,它都会做这个编译,这可能需要相当长的时间。是否有一种方法可以使编译在第一次进行时,以及在随后的应用程序运行时,使用来自前一次编译的二进制文件?

2-使用clBuildProgram()加速编译的不同方法是什么?可能是使用编译器标志或其他东西?

以牺牲可移植性为代价,您可以使用clCreateProgramWithBinary

要保存已编译的OpenCL代码以在同一设备上运行,您需要执行以下操作:

    使用clCreateProgramWithSource 编译代码
  • 使用clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, //...)获取二进制文件
  • 的大小
  • 使用clGetProgramInfo(program, CL_PROGRAM_BINARIES, //...)将二进制文件写入char缓冲区
  • 将缓冲区写入磁盘

那么在将来,你可以使用clCreateProgramWithBinary而不是从源代码编译。

在这段代码中有一个如何完成所有这些的示例。你可以把它剪短以适合你的需要。

正如评论中提到的(感谢@Dithermaster),并重申我的第一点,编译的二进制文件非常特定于编译它的系统。如果系统有任何变化,必须编译一个新的二进制文件。

最新更新