Compilation 在OpenCL中进行脱机编译后是否生成二进制文件

Compilation 在OpenCL中进行脱机编译后是否生成二进制文件,compilation,binary,opencl,offline,Compilation,Binary,Opencl,Offline,根据[本][1]手册 [1] : 要将编译方法从联机更改为脱机,请执行>以下步骤: 1.将内核作为二进制文件读取 2.将clCreateProgramWithSource()更改为clCreateProgramWithBinary() 3.摆脱clBuildProgram() 我的问题是关于第三点。我有一个函数create\u binary\u kernel,它也创建并(据说)构建了它,这样我就可以在以后使用它。比如: program = clCreateProgramWithSource(co

根据[本][1]手册

[1] :

要将编译方法从联机更改为脱机,请执行>以下步骤: 1.将内核作为二进制文件读取 2.将
clCreateProgramWithSource()
更改为
clCreateProgramWithBinary()
3.摆脱
clBuildProgram()

我的问题是关于第三点。我有一个函数
create\u binary\u 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\u kernel()
从二进制文件创建程序

program = clCreateProgramWithBinary(
                                    context, 1, &device, (const size_t *)&binary_size,
                                    (const unsigned char **)&binary_buf, &binary_status, &err
                                    );
但是在后一行之后,参考说明我不需要使用
clBuildProgram()
,但是如果我不使用,它就根本不起作用。每次建造都要花费太多的时间。任何帮助都将不胜感激

根据:

OpenCL允许使用源代码或 二进制的clBuildProgram必须为使用以下任一方法创建的程序调用 clCreateProgramWithSourceclCreateProgramWithBinary来构建 与程序关联的一个或多个设备的程序可执行文件

因此,在这方面,您所遵循的书是错误的。

根据:

OpenCL允许使用源代码或 二进制的clBuildProgram必须为使用以下任一方法创建的程序调用 clCreateProgramWithSourceclCreateProgramWithBinary来构建 与程序关联的一个或多个设备的程序可执行文件


因此,在这方面,您正在阅读的书是错误的。

谢谢您的回复。太糟糕了,我似乎是一本很好的参考书。那么,有没有一种方法可以预构建程序?二进制文件的处理方式是特定于实现的。请查阅您的实现者文档,看看是否有办法进一步缩短加载时间。您肯定有一个选择,即异步执行生成(非空
pfn\u notify
参数到
clBuildProgram()
),并在应用程序中同时执行其他初始化。感谢您的回复。太糟糕了,我似乎是一本很好的参考书。那么,有没有一种方法可以预构建程序?二进制文件的处理方式是特定于实现的。查看您的实现者文档,看看是否有办法进一步减少加载时间。您肯定有一个选择,即异步执行生成(非空
pfn\u notify
参数到
clBuildProgram()
),并在应用程序中同时执行其他初始化。