призыв к «пау» неоднозначен - PullRequest
0 голосов
/ 12 января 2019

Когда я пытаюсь запустить ядро ​​opencl, я получаю сообщение об ошибке:

 Error building: stringInput.cl:1:197: error: call to 'pow' is ambiguous
/usr/lib/x86_64-linux-gnu/beignet/include/ocl_math.h:49:20: note: candidate function
/usr/lib/x86_64-linux-gnu/beignet/include/ocl_math.h:148:19: note: candidate function

Я использую ниже C ++ Opencl код:

std::string kernel_code=
        "   void kernel simple_add(global const int* A, global const int* B, global int* C){       "
        "   for(int i=0;i<20000;i++) {  "
        "   for(int j=0;j<20000;j++) {  "
        "   for(int k=0;i<20000;i++) {  "
        "   int d1 = sqrt(pow(A[i]-A[j],2)+pow(B[i]-B[j],2)+pow(C[i]-A[j],2)) "
        "   int d2 = sqrt(pow(A[i]-A[k],2)+pow(B[i]-B[k],2)+pow(C[i]-A[k],2)) "
        "   int d3 = sqrt(pow(A[k]-A[j],2)+pow(B[k]-B[j],2)+pow(C[k]-A[j],2)) "
        "       C[i+j]=A[i]+B[j]+k;     "
        "       }                       "
        "       }                       "
        "   }                           "
        "   }                           ";
sources.push_back({kernel_code.c_str(),kernel_code.length()});

Я использую графическую карту Intel и Opencl Bingnet. Здесь, когда я не использую функции pow или sqrt внутри кода ядра, все работает нормально. Итак, как мне использовать другие функции c ++ в ядре opencl?

1 Ответ

0 голосов
/ 12 января 2019

Ошибка означает, что не существует версии функции, которая принимает тип, который вы передаете, но вместо этого существует более одной версии, принимающей тип, в который можно преобразовать тип (например, float и double). Компилятор не знает, что вы хотите. Не существует версии int этой функции, но вы передаете int. Ошибка может быть устранена путем приведения параметра к функции, чтобы он был понятным (в этом случае приведите к float и приведите результат обратно к int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...