2017-06-22 14 views
0

Xcodeを使用してOpenCLで作業するときに問題があります。 プロジェクトを処理するには、グリッドの別のポイントにポイントを結ぶ最短パスが必要です。私はカーネルプログラミングに精通していないので、私のコードで何が間違っているのか理解するのに助けが必要です。 カーネルは双方向bfsです。OpenCLカーネル構築エラー

機能

ret = clBuildProgram(program, 1, &device_id, NULL, NULL, NULL); 

リターンエラー-11(下の行は、コメントだけの作品では無効になったときに)RETする

これは双方向BFSのカーネルです。

__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; 
      } 
     } 
    } 
} 

//queue[qr++]=nx*M+ny;が有効である場合に建物(エラー-11)が失敗しました。 私は説明が必要です。

答えて

1

API機能を使用してclGetProgramBuildInfo [1] APIビルドログを取得することをお勧めします。

+0

お寄せいただきありがとうございます – rareone

関連する問題