我在这里有两个相关问题,所以我问一个问题:
1-我们使用
在运行时编译opencl程序clCreateProgramWithSource(context, 1, (const char**)&source, NULL, NULL);
clBuildProgram(program, 1, &device, NULL, NULL,
NULL);
我的问题是每次我的opencl应用程序运行时都会执行此编译,这可能需要相当长的时间。有没有办法让编译第一次发生,在后续的应用程序运行中,它使用前一次编译的二进制文件?
2-使用clBuildProgram()
加速编译的不同方法有哪些?可能正在使用编译器标志或其他东西?
答案 0 :(得分:4)
以便携性为代价,您可以使用clCreateProgramWithBinary
。
要将已编译的OpenCL代码保存为在同一设备上运行,您需要执行以下操作:
clCreateProgramWithSource
clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, //...)
获取二进制文件的大小clGetProgramInfo(program, CL_PROGRAM_BINARIES, //...)
将二进制文件写入char
缓冲区。接下来,您可以使用clCreateProgramWithBinary
而不是从源代码编译。
在this code中有一个如何完成所有这些操作的示例。您可以将其修剪以满足您的需求。
如the comments中所述(感谢@Dithermaster)并重申我的第一点,编译后的二进制文件非常特定于编译它的系统。如果系统有任何更改,则必须编译新的二进制文件。