퍼즐 게임에 대해 무차별 방식 AI를 수행하기 위해 openCL 커널을 작성하고 있지만, 커널 코드 및/또는 보조 함수에 문제가 있습니다. 다음은 커널 코드입니다 (입력 값이 올바르게 전달되었음을 확신합니다). 60은 clEnqueueNDRangeKernel에 의해 설정된 전역 작업 크기입니다. 다음 openCL 보조 함수 호출이 작동하지 않습니다.
커널에 대한 입력
은 : 테스트 목적__global 숯 *의 board_in // 60 개 보드
함유 큰 문자 어레이 // 더미 입력에__global 숯 *
__global의 INT는 * 조회, // 나는 빨리 점수의 점수를 얻을하는 데 사용하는 배열
출력 이동 :
__global * CHAR 아웃 // 테스트 더미 출력
__global INT score_out * // 60 득점 Array : 한 각 보드
__global INT row_out * // 배열 용 findBestMove 함수는 다음과 같이 작동 ...
__kernel void helloworld(__global char* in,
__global char* board_in,
__global int* lookup,
__global char* out,
__global int * score_out,
__global int * row_out,
__global int * col_out)
{
int num = get_global_id(0);
char workingBoard[72];
int scoreMat[64];
//set up the array for each thread to use
for(int k=0; k< 72; k++)
{
workingBoard[k] = board_in[num*BOARDSIZE+k];
}
// Make a copy of the score matrix for each thread to use
for(int j=0; j<64; j++)
{
scoreMat[j] = lookup[j];
}
int s=0;
int r=0;
int c=0;
findBestMove(workingBoard,scoreMat,&s,1,&r,&c);
col_out[num] = ?????????
score_out[num] = ???????????
row_out[num] = ???????????????
}
(ITS 꽤 잘 60 행, 각 기판에 대해 하나의 60 COLS의 평가는
__global의 INT col_out * // 배열 테스트를 거쳤습니다. 나는 그것을 CPU 구현에서 잠시 사용했다.) : 보드 (문자 배열), 스코어 조회 배열, 이동 점수, 현재 깊이 및 행과 열의 포인터에 대한 포인터를 취한다. . 점수, 행 및 열을 설정해야합니다. 동일한 문서에서 정의한 다른 함수를 호출합니다. 내 커널 코드를 실행하면
// workerBoard and lookuparr are set previous to this to be the same as what
//the kernel thread is supposed to have
int s=0;
int r=0;
int c=0;
findBestMove(workerBoard,lookuparr,&s,1,&r,&c);
cout<<s<<","<<r<<","<<c<<endl;
, 나는 함수 호출 과거를하지 않는 : 나는이 CPU에이 코드를 실행하면
, 나는 적절한 출력을 얻을. 이 함수는 커널과 같은 문서에서 정의되며 동적 메모리, 함수 포인터, 재귀 또는 전역 메모리 (커널 arg 외부)를 사용하지 않습니다. 일부 #define 문을 사용합니다.
???? 커널의 섹션을 r, c, s로 만들었지 만 언급했듯이 나는 거기에 가지 않는다. 중요한 실수를 저 지르고 있습니까 (참고 : 커널은 코드 검사기와 AMD 커널 분석기를 전달합니다). 또한, 저는 openCL에 매우 익숙합니다. 그래서 어떤 팁도 환영합니다. 이 질문에 대답하는 데 도움이되는 정보를 더 제공 할 수 있으면 알려주십시오.
'findBestMove '기능 코드도 게시 할 수 있습니까? – CaptainObvious
플러스 다른 기능은 ~ 500 라인입니다. 도움이 될 수도 있지만 여기에 많은 코드를 붙여두면 도움이 될지 모르겠습니다. – user2503981
OK, "나는 함수 호출을 지나치게하지 않는다"는 것은 무엇을 의미합니까? 반환되는 오류가 있습니까? 그렇다면 오류 번호는 무엇입니까? 그렇지 않은 경우 어떻게됩니까? – CaptainObvious