Opencl clBuildProgram失败,错误代码为-11,并且没有生成日志
我现在在OpenCL中工作了一点,但最近在我的一个程序中“clBuildProgram”失败了。我的代码摘录如下:Opencl clBuildProgram失败,错误代码为-11,并且没有生成日志,opencl,Opencl,我现在在OpenCL中工作了一点,但最近在我的一个程序中“clBuildProgram”失败了。我的代码摘录如下: cl_program program; program = clCreateProgramWithSource(context, 1, (const char**) &kernel_string, NULL, &err); if(err != CL_SUCCESS) { cout<<"Unable to create Program Object. Er
cl_program program;
program = clCreateProgramWithSource(context, 1, (const char**) &kernel_string, NULL, &err);
if(err != CL_SUCCESS)
{
cout<<"Unable to create Program Object. Error code = "<<err<<endl;
exit(1);
}
if(clBuildProgram(program, 0, NULL, NULL, NULL, NULL) != CL_SUCCESS)
{
cout<<"Program Build failed\n";
size_t length;
char buffer[2048];
clGetProgramBuildInfo(program, device_id[0], CL_PROGRAM_BUILD_LOG, sizeof(buffer), buffer, &length);
cout<<"--- Build log ---\n "<<buffer<<endl;
exit(1);
}
cl_程序;
program=clCreateProgramWithSource(上下文,1,(常量字符**)和内核字符串,NULL和err);
如果(错误!=CL_成功)
{
cout您可以通过在cl.h中搜索来了解OpenCL错误代码的含义。在这种情况下,-11正是您所期望的,cl\u BUILD\u PROGRAM\u失败。构建日志为空确实很奇怪。有两个问题:
1.)clGetProgramBuildInfo的返回值是多少
2.)您在哪个平台上?如果您使用的是Apple的OpenCL实现,您可以尝试在您的环境中设置CL_LOG_ERRORS=stdout。例如,从终端:
$CL\u LOG\u ERRORS=stdout./myprog
在Xcode(编辑方案->参数->环境变量)中设置这一点也很容易。如果您使用的是C而不是C++:
err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);
////////////////Add the following lines to see the log file///////////
if (err != CL_SUCCESS) {
char *buff_erro;
cl_int errcode;
size_t build_log_len;
errcode = clGetProgramBuildInfo(program, devices[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &build_log_len);
if (errcode) {
printf("clGetProgramBuildInfo failed at line %d\n", __LINE__);
exit(-1);
}
buff_erro = malloc(build_log_len);
if (!buff_erro) {
printf("malloc failed at line %d\n", __LINE__);
exit(-2);
}
errcode = clGetProgramBuildInfo(program, devices[0], CL_PROGRAM_BUILD_LOG, build_log_len, buff_erro, NULL);
if (errcode) {
printf("clGetProgramBuildInfo failed at line %d\n", __LINE__);
exit(-3);
}
fprintf(stderr,"Build log: \n%s\n", buff_erro); //Be careful with the fprint
free(buff_erro);
fprintf(stderr,"clBuildProgram failed\n");
exit(EXIT_FAILURE);
}
我在一个空日志文件中遇到了同样的问题。我在另一台计算机上测试我的ocl内核。它有两个平台,而不是一个。一个Intel GPU和一个AMD GPU。我只安装了AMD ocl SDK。安装Intel ocl SDK解决了这个问题。同时选择AMD平台而不是Intel GPU平台也解决了这个问题。我看到了n当OpenCL内核源代码缺少\u kernel
属性标记时,OSX 10.14.6上会发生这种情况。如果\u kernel
标记和返回类型都丢失,则系统OpenCL编译器守护进程似乎会崩溃,然后需要几秒钟重新启动,新内核才能再次编译。我将程序更改为使用AMD G普,这很有效。