clGetProgramBuildInfo不打印生成日志

clGetProgramBuildInfo不打印生成日志,c,linux,parallel-processing,opencl,gpgpu,C,Linux,Parallel Processing,Opencl,Gpgpu,我已经用OpenCL写了一段代码。生成内核程序时出错。错误代码是-11。我尝试打印构建日志,但它没有打印正确的日志,而是生成了一些随机变量。这是那部分 //these are variable declarations cl_device_id* devices; cl_program kernelprgrm; size_t size; //these varaibles have already been assigned properly //main code clGetProgramB

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

//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

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

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

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);
只要它看起来非常像您的代码,就有两个差异,这可能会产生错误:

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

我已经有了。正常运行构建日志,一切正常。这些平台正在上市。我已经构建了上下文commandqueue。其他一切都可以工作,但是内核代码有一个错误,我正在使用buildlog试图找出这个错误,但是它没有给出确切的错误@buttiful buttiful您是否检查了由
clGetProgramBuildInfo
返回的错误代码?好的,我正在更新问题并给出完整的代码和输出。是的。它返回-11@jpriceI我也在运行第二个程序,它返回-1,但得到的是相同的buildlog。但它返回一个空字符串,表示
CL\u BUILD\u NONE
。虽然我的程序运行成功,但这意味着什么?成功构建后它会给你空日志吗?我个人认为,如果构建正常,空日志中没有任何问题。任何编译器的典型行为(除非处于详细模式)。