Ошибка OpenCL: CL_INVALID_PROGRAM Ошибка OpenCL: CL_INVALID_PROGRAM - PullRequest
0 голосов
/ 01 сентября 2018

ubuntu16.04 + затмение + OpenCL + CUDA; Я могу запустить свой проект в Терминале, и все в порядке, но мне нужно изменить код и отладить мой код, поэтому я создаю проект в Eclipse без ошибок, но когда я отлаживаю или запускаю свой код, консоль показывает эти ошибки:

Unable to open ../assets/cvc.cl. ../../src/oclUtil.cpp:445
Failed to create OpenCL program.../../src/CVC_cl.cpp:25
OpenCL error: CL_INVALID_PROGRAM
Failed to create OpenCL kernel. ../../src/CVC_cl.cpp:77

мой код в порядке, и я могу работать в терминале. Я не знаю почему, пожалуйста, помогите мне. спасибо!

1 Ответ

0 голосов
/ 03 сентября 2018

Используйте дополнительную проверку ошибок в вашей сборке, например,

 // Build the program                                                                                                                                                                                                                                                                    
  ret = clBuildProgram(program, 1, &deviceId, NULL, NULL, NULL); RC_TEST2(ret, "clBuildProgram");                                                                                                                                                                                         

  if(ret != CL_SUCCESS){                                                                                                                                                                                                                                                                  
    size_t len = 0;                                                                                                                                                                                                                                                                       

    clGetProgramBuildInfo(program, deviceId, CL_PROGRAM_BUILD_LOG, 0, NULL, &len);                                                                                                                                                                                                        

    char *buffer = calloc(len, sizeof(char));                                                                                                                                                                                                                                             
    ret = clGetProgramBuildInfo(program, deviceId, CL_PROGRAM_BUILD_LOG, len, buffer, NULL);                                                                                                                                                                                              
    fprintf(stderr, "%s", buffer);                                                                                                                                                                                                                                                        
    exit(1);                                                                                                                                                                                                                                                                              
  }                 

Но в вашем случае ясно, что путь к файлу cl неправильный. Таким образом, компилятор не может собрать ядро. Что-то не так с относительным путем. Попробуйте использовать абсолютный путь, если вы не можете это исправить.

...