Ошибка определения ядра OpenCL clBuildProgram (CL_BUILD_PROGRAM_FAILURE)? - PullRequest
0 голосов
/ 04 февраля 2020

при запуске приложения openCl выдает следующую ошибку:

ERROR: clBuildProgram(CL_BUILD_PROGRAM_FAILURE)

это определение ядра, одна ошибка в функции log2,

другая ошибка в char* bits = &(char_array[64*(n/m)*(index-1)+it*64]);

другая ошибка в max[it] = *count

, а последняя ошибка в if(max[i] > *result){*result = max[i];}.

Не могли бы вы сказать мне, как исправить определение? Спасибо

__kernel void vadd(
    __global char* char_array,
    int m,
    int n,
    __global long* result)
{ 

    int index = get_global_id(0);
    int max_n = n/m;
    if(index == m-1){
        max_n = n - (n/m)*(m-1);
    }

    int max[ max_n ];
    int offset = log2(m);
    for (int it=0; it < max_n; it++)
    {
        char* bits = &(char_array[64*(n/m)*(index-1)+it*64]);
        int count=0;
        for(int i=offset; i<=64; i++)
        {
            if(bits[i]=='0'){
                count++;
            }else{break;}
        }
        max[it] = count;
    }

    *result = 0;
    for(int i=0; i<max_n;i++)
    {
        if(max[i] > *result){*result = max[i];}
    }
    *result = *result +1;
}

1 Ответ

1 голос
/ 04 февраля 2020

Ошибка в этой строке:

char* bits = &(char_array[64*(n/m)*(index-1)+it*64]);

заключается в том, что char* bits при объявлении локальной переменной фактически означает __private char*, тогда как char_array определяется как __global char*. Вы должны убедиться, что bits использует тот же тип.

Остальные не очевидны для меня сразу, но я рекомендую вам добавить полный вывод сборки ядра к вашему вопросу, так как это поможет сузить это вниз.

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