在OpenCL中进行Offlline编译后构建或不构建二进制文件

时间:2017-06-03 03:50:00

标签: compilation binary opencl offline

根据[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/

1 个答案:

答案 0 :(得分:2)

根据OpenCL specification

  

OpenCL允许使用源或者构建程序可执行文件   二进制文件。必须为使用其中任何一个创建的程序调用 clBuildProgram    clCreateProgramWithSource clCreateProgramWithBinary 来构建   程序可执行程序,用于与程序关联的一个或多个设备。

所以你关注的这本书在这方面是错误的。