J'ai un problème lorsque je travaille sur OpenCL en utilisant Xcode. Pour gérer le projet, le chemin le plus court d'un point à un autre point dans une grille doit être trouvé. Comme je ne suis pas familier avec la programmation du noyau, j'ai besoin de quelqu'un pour m'aider à comprendre ce qui ne va pas dans mon code. Le noyau est un bfs bidirectionnel.Erreur de construction du noyau OpenCL
La fonction
ret = clBuildProgram(program, 1, &device_id, NULL, NULL, NULL);
retour Erreur-11 à ret (lorsque la ligne ci-dessous désactivé par les seuls travaux de commentaire)
Ceci est le noyau de BFS bidirectionnel.
__kernel void BFS(__global int *dist,__global bool *blocked,__global char *visited,__global int2 *startpt,int N,int M,__global int* debug_arr){
int i=get_global_id(0),queue[N*M],qr=0,dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},s,d;
debug_arr[i]=i+1;
int px=startpt[i].x,py=startpt[i].y;
queue[qr++]=px*M+py;
for(s=0;s<qr ;++s){
px=queue[s]/M,py=queue[s]%M;
for(d=0;d<4 ;++d){
int nx=px+dx[d],ny=py+dy[d];
if(nx<0||nx>N||ny<0||ny>M||blocked[nx*M+ny]||visited[nx*M+ny]==visited[px*M+py])continue;
if(visited[nx*M+ny]==0 && visited[nx*M+ny]!=visited[px*M+py]){
dist[nx*M+ny]=dist[px*M+py]+1;
visited[nx*M+ny]=visited[px*M+py];
//queue[qr++]=nx*M+ny;
}
else if(visited[nx*M+ny]!=visited[px*M+py]){
debug_arr[i]=dist[nx*M+ny]+dist[px*M+py]+1;
}
}
}
}
Building a échoué (erreur -11) lorsque la ligne //queue[qr++]=nx*M+ny;
est activé. J'ai besoin d'une explication.
merci pour vos suggestions – rareone