der Kernel:
1 | __kernel void distances(constant float* data, int n, int D, int k, global float* centroids, |
2 | global int* cluster, global float* distances ){ |
3 | local float l_distances[64]; |
4 | private int idg=(int)get_global_id(0); |
5 | int idl=(int)get_local_id(0); |
6 | private double sqdist=0; |
7 | |
8 | for(int i=0; i<k;i++){ |
9 | sqdist=0; |
10 | for (int j=0; j<D;j++){ |
11 | sqdist=fma((double)(centroids[i*D] -data[D*idg+j]),(double)(centroids[i*D]-data[D*idg+j]),sqdist); |
12 | }
|
13 | l_distances[k*idl+i]=sqrt(sqdist); |
14 | |
15 | |
16 | }
|
17 | |
18 | |
19 | private float d_min=0; |
20 | for(int i=0;i<k;i++){ |
21 | d_min =d_min<l_distances[k*idl+i]?l_distances[k*idl+i]:d_min; |
22 | cluster[idg]=d_min=l_distances[k*idl+i]?i:cluster[idg]; |
23 | |
24 | |
25 | |
26 | }
|
27 | |
28 | |
29 | distances[idg]=l_distances[idl]; |
30 | |
31 | |
32 | }
|
die Fehlermeldungen: alle identifier in der letzten Zeile sind undefined, nach der Abschließenden Klammer erwartet der Compiler eine deklaration