【问题标题】:clGetProgramBuildInfo does not print build logclGetProgramBuildInfo 不打印构建日志
【发布时间】:2015-09-18 09:00:27
【问题描述】:

我在 OpenCL 中编写了代码。构建内核程序时出错。错误代码是-11。我尝试打印 BUILD LOG,但它没有打印正确的日志,而是生成了一些随机变量。这是那部分

//these are variable declarations
cl_device_id* devices;
cl_program kernelprgrm;
size_t size;
//these varaibles have already been assigned properly

//main code
clGetProgramBuildInfo(kernelprgrm,devices[i], CL_PROGRAM_BUILD_LOG ,0,NULL,&size);
char *buildlog=(char*)malloc(size);
clGetProgramBuildInfo(kernelprgrm,devices[i], CL_PROGRAM_BUILD_LOG ,size,buildlog,NULL);
printf("\n\nBuildlog:   %s\n\n",buildlog);

它给出以下输出:-

Buildlog:   ���0

请帮助我获取正确的构建日志。谢谢

【问题讨论】:

  • 我已经有了。 Uptil buildlog 一切正常。这些平台正在上市。我已经建立了上下文,命令队列。其他一切正常,但内核代码有一个错误,我试图使用 buildlog 找出它,但它没有给我确切的错误。 @buttiful-buttefly
  • 你检查过clGetProgramBuildInfo返回的错误码吗?
  • 好的,我正在更新问题并提供整个代码以及输出。
  • 是的。它返回 -11 @jprice
  • 我也在运行第二个程序,它返回 -1 但得到相同的构建日志

标签: c linux parallel-processing opencl gpgpu


【解决方案1】:

我在我的机器上测试了这段代码,它工作正常:

size_t len = 0;
cl_int ret = CL_SUCCESS;
ret = clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, 0, NULL, &len);
char *buffer = calloc(len, sizeof(char));
ret = clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, len, buffer, NULL);

只要它看起来很像您的代码,就有 2 个差异,可能会产生错误:

  • 检查返回码
  • 检查数组中设备的索引。可能是您想从错误的设备获取日志。

【讨论】:

  • 整理出来了。但它返回一个空字符串,意思是CL_BUILD_NONE。虽然我的程序运行成功了,但这意味着什么?
  • 构建成功后是否给你空日志?
  • 就个人而言,如果构建正常,我在空日志中看不到任何问题。任何编译器的典型行为(除非在详细模式下)。
猜你喜欢
  • 2015-07-08
  • 2021-12-09
  • 2017-11-05
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2020-03-27
  • 1970-01-01
相关资源
最近更新 更多