Compilation 在OpenCL中进行脱机编译后是否生成二进制文件
根据[本][1]手册 [1] : 要将编译方法从联机更改为脱机,请执行>以下步骤: 1.将内核作为二进制文件读取 2.将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
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必须为使用以下任一方法创建的程序调用
clCreateProgramWithSource或clCreateProgramWithBinary来构建
与程序关联的一个或多个设备的程序可执行文件
因此,在这方面,您所遵循的书是错误的。根据:
OpenCL允许使用源代码或
二进制的clBuildProgram必须为使用以下任一方法创建的程序调用
clCreateProgramWithSource或clCreateProgramWithBinary来构建
与程序关联的一个或多个设备的程序可执行文件
因此,在这方面,您正在阅读的书是错误的。谢谢您的回复。太糟糕了,我似乎是一本很好的参考书。那么,有没有一种方法可以预构建程序?二进制文件的处理方式是特定于实现的。请查阅您的实现者文档,看看是否有办法进一步缩短加载时间。您肯定有一个选择,即异步执行生成(非空
pfn\u notify
参数到clBuildProgram()
),并在应用程序中同时执行其他初始化。感谢您的回复。太糟糕了,我似乎是一本很好的参考书。那么,有没有一种方法可以预构建程序?二进制文件的处理方式是特定于实现的。查看您的实现者文档,看看是否有办法进一步减少加载时间。您肯定有一个选择,即异步执行生成(非空pfn\u notify
参数到clBuildProgram()
),并在应用程序中同时执行其他初始化。