根据[this] [1]手册,
[1]:
为了将编译方法从在线更改为离线,>遵循以下步骤: 1.将内核读为二进制文件 2.将
clCreateProgramWithSource()
更改为clCreateProgramWithBinary()
3.摆脱clBuildProgram()
我的问题是关于第三点。我有一个函数create_binary_kernel
创建和(据说)构建它,以便我可以使用它。像:
program = clCreateProgramWithSource(context,1,(const char **)
&source_str, (const size_t *)&source_size, &err);
clBuildProgram(program, 1, &device, NULL, NULL, NULL);
FILE *f;
char *binary;
size_t binary_size;
clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &binary_size, NULL);
binary = malloc(binary_size);
clGetProgramInfo(program, CL_PROGRAM_BINARIES, binary_size, &binary, NULL);
f = fopen(BIN_PATH, "w");
fwrite(binary, binary_size, 1, f);
fclose(f);
然后,另一个函数exec_kernel()
从二进制文件
program = clCreateProgramWithBinary(
context, 1, &device, (const size_t *)&binary_size,
(const unsigned char **)&binary_buf, &binary_status, &err
);
但是在后一行之后,参考文献说我不需要使用clBuildProgram()
,但如果我不这样做,它根本不起作用。每次构建它都需要花费太多时间。任何帮助都会非常感激。
https://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/online-offline-compilation/
答案 0 :(得分:2)
OpenCL允许使用源或者构建程序可执行文件 二进制文件。必须为使用其中任何一个创建的程序调用 clBuildProgram clCreateProgramWithSource 或 clCreateProgramWithBinary 来构建 程序可执行程序,用于与程序关联的一个或多个设备。
所以你关注的这本书在这方面是错误的。