Parallel processing clGetProgramBuildInfo返回CL_BUILD_NONE,尽管程序给出了正确的输出

Parallel processing clGetProgramBuildInfo返回CL_BUILD_NONE,尽管程序给出了正确的输出,parallel-processing,gpu,opencl,gpgpu,Parallel Processing,Gpu,Opencl,Gpgpu,我正在测试一个来自Nvidia的opencl代码示例的简单矢量添加程序。它给出了正确的向量加法结果。为了进行实验,我尝试在调用clBuildProgram后添加以下行,以查看程序构建状态和构建日志: size_t size = 0; ret=clGetProgramBuildInfo(program,device_id, CL_PROGRAM_BUILD_STATUS ,0,NULL,&size); cl_build_status *status=(cl_build_status *)

我正在测试一个来自Nvidia的opencl代码示例的简单矢量添加程序。它给出了正确的向量加法结果。为了进行实验,我尝试在调用clBuildProgram后添加以下行,以查看程序构建状态和构建日志:

size_t size = 0;
ret=clGetProgramBuildInfo(program,device_id, CL_PROGRAM_BUILD_STATUS ,0,NULL,&size);

cl_build_status *status=(cl_build_status *)malloc(sizeof(cl_build_status));
clGetProgramBuildInfo(program,device_id, CL_PROGRAM_BUILD_STATUS ,size,status,NULL);
printf("\nBuild status=%d\n",*status); 

ret = clGetProgramBuildInfo(program,device_id, CL_PROGRAM_BUILD_LOG ,0,NULL,&size);
char *buildlog=(char*)malloc(size);
buildlog[size] = '\n';
ret = clGetProgramBuildInfo(program,device_id, CL_PROGRAM_BUILD_LOG ,size,buildlog,NULL);
printf("\n\nBuildlog:   %s\n\n",buildlog);
状态返回“0”,这意味着CL_BUILD_NONE,构建日志不打印任何内容(可能返回空字符串)


根据opencl文档,当未对设备的指定程序对象执行生成时,将返回CL_BUILD_NONE。

来自
CL.h
标题:

/* cl_build_status */
#define CL_BUILD_SUCCESS                            0
#define CL_BUILD_NONE                               -1
#define CL_BUILD_ERROR                              -2
#define CL_BUILD_IN_PROGRESS                        -3

因此,您得到了正确的信息。

clBuildProgram的输出是什么??返回CLU成功。代码运行得非常好,谢谢你指出这一点。但是,为什么当我试图打印“buildlog”时会得到一个空字符串?@saint_shark-用于包含构建错误的构建日志,因此没有错误=>日志是空的。然而,标准中没有明确规定,这似乎是一种常见做法。