2011-10-21 80 views
7

我在OpenCL現在工作一點點,但最近「clBuildProgram」在我的程序之一失敗。我的代碼摘錄如下:clBuildProgram失敗,錯誤代碼-11和沒有生成日誌

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); 
} 

通常早些時候我得到的語法或這裏內核文件的幫助下內其他錯誤「clGetProgramBuildInfo()」功能,每當「clBuildProgram」失敗,但這個程序運行時,控制檯上只打印:

計劃建立失效 ---生成日誌---

,當我試圖打印由「clBuildProgram」返回錯誤代碼;它是「-11」...... 什麼可以是我的內核文件的問題,我沒有得到任何生成失敗信息?

回答

9

您可以通過在cl.h中搜索來了解OpenCL錯誤代碼的含義。在這種情況下,-11就是您所期望的,CL_BUILD_PROGRAM_FAILURE。構建日誌是空的,這當然好奇。兩個問題:

1.)clGetProgramBuildInfo的返回值是什麼?

2.)你在哪個平臺上?如果您正在使用Apple的OpenCL實現,則可以嘗試在您的環境中設置CL_LOG_ERRORS = stdout。例如,從終端:

$ CL_LOG_ERRORS =標準輸出./myprog

它也很容易設置這個在Xcode(編輯計劃 - >參數 - >環境變量)。

3

如果您使用的是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); 
} 
0

我遇到了同樣的問題,用空的日誌文件。我正在另一臺計算機上測試我的ocl內核。它有2個平臺,而不是一個。一個英特爾GPU和一個AMD GPU。我只安裝了AMD OCL SDK。安裝英特爾OCL SDK解決了問題。同時選擇AMD平臺而不是英特爾GPU平臺來修復它。

相關問題