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

Posted

技术标签:

【中文标题】尽管程序给出了正确的输出,但 clGetProgramBuildInfo 返回 CL_BUILD_NONE【英文标题】:clGetProgramBuildInfo returns CL_BUILD_NONE though the program gives correct output 【发布时间】:2021-04-25 14:53:37 【问题描述】:

我正在测试一个来自 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。

【问题讨论】:

clBuildProgram 的输出是什么? 返回 CL_SUCCESS。代码运行良好 【参考方案1】:

来自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

所以,你得到了正确的信息。

【讨论】:

感谢您指出这一点。但是,当我尝试打印“buildlog”时,为什么会得到一个空字符串? @saint_shark - 用于包含构建错误的构建日志,因此没有错误 => 日志为空。但是标准中没有明确说明,这似乎是一种常见的做法。

以上是关于尽管程序给出了正确的输出,但 clGetProgramBuildInfo 返回 CL_BUILD_NONE的主要内容,如果未能解决你的问题,请参考以下文章

尽管在邮递员中工作,但请求 JSON 在 JMeter 中给出错误

尽管函数调用的参数数量不正确,但 C 程序编译

C程序给出不正确的输出?

For循环运行错误

尽管 deviceQuery 测试通过,CUDA 程序仍无法正确执行

我正在尝试搜索一个项目,但程序给出的结果不正确