2015-11-26 2 views
0

Редактирование: Компиляция для AMD GPU и процессора Intel дает ту же ошибку. Это всего лишь код, я просто удалил несколько пустых строк, чтобы опубликовать его здесь.OpenCL C ожидается объявление

Мое ядро ​​

__kernel void distances(constant float* data, int n, int D, int k, global float* centroids, global int* cluster, global float* distances) { 
    local float l_distances[64]; 
    private int idg = get_global_id(0); 
    private int idl = get_local_id(0); 
    private double sqdist = 0; 

    for(int i=0; i<k;i++){ 
     sqdist=0; 
     for (int j=0; j<D;j++){ 
      sqdist = fma((double)(centroids[i*D]-data[D*idg+j]), (double)(centroids[i*D]-data[D*idg+j]),sqdist); 
     } 
     l_distances[k*idl+i] = sqrt(sqdist); 
    } 

    private float d_min=0; 
    for(int i=0;i<k;i++){ 
     d_min = (d_min<l_distances[k*idl+i]) ? l_distances[k*idl+i] : d_min; 
     cluster[idg] = (d_min==l_distances[k*idl+i]) ? i : cluster[idg]; 
    } 

    distances[idg] = l_distances[idl]; 
} 

дает следующие ошибки:

...Temp\OCL1304T1.cl", line 35: error: expected a 
      declaration 

    ]=l_distances[idl]; 

^

...Temp\OCL1304T1.cl", line 41: error: expected a 
      declaration 

    } 

^

почему?

+0

Попробуйте выполнить компиляцию для другого устройства. У меня была аналогичная компиляция проблем для intel gpu. –

+1

Вы не ставите весь код. Номер строки не совпадает. Наверное, у вас есть некоторая '{}' размещенная за пределами того фрагмента кода, который вы вставили. – DarkZeros

ответ

1

В этой строке: distances[idg] = l_distances[idl]; вы присваиваете distances который является одновременно переменной и имя, которое вашей функции. Я рекомендую изменить один из них.

Смежные вопросы