根据[此] [1]手动,要构建或不建Offlline编译后的二进制中的OpenCL
[1]:
以从在线改变编译的方法脱机时,>以下步骤如下: 1.Read内核为二进制 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/
感谢您的回复。太糟糕了,我似乎是一本很好的参考书。那么,有没有办法去建立这个计划? – VMO
如何处理二进制文件是特定于实现的。检查实施者的文档,看看是否有办法进一步减少加载时间。 – pmdj
你肯定有一个选择是异步执行构建(非''pfn_notify'参数'clBuildProgram()'),并在您的应用程序中同时执行其他初始化。 – pmdj