커널

2017-03-16 1 views
0

내가 배열을 초기화하기 위해서 간단한 커널이 작동하지 않는 두 가지 차원으로 시작했다. 내 설정은 다음과 같습니다.커널

int size = 30; 
int * result = (int*) malloc(sizeof(int)*size); 
int *resultD; 
cudaMalloc((void**)&resultD, sizeof(int)*size); 

for(int i = 0; i < size; i++) { 

    result[i] = 0; 
} 

cudaMemcpy(resultD, result, sizeof(int)*size, cudaMemcpyHostToDevice); 
dim3 block(100,30); 
test<<<1, block>>>(resultD); 

cudaMemcpy(result, resultD, sizeof(int)*size, cudaMemcpyDeviceToHost); 

for(int i = 0; i < size; i++) { 
    cout << result[i] << endl; 
} 

제 결과는 단지 0입니다. 왜 저를 도울 수 있습니까? 미안 해요, 이거 처음이에요. 고마워.

답변

2

결과가 변경되지 않은 이유는 커널을 시작하지 못하기 때문입니다.

항상 호스트의 CUDA API 호출에서 리턴 오류 코드를 점검하여 이러한 유형의 오류를 catch하십시오.

이 경우 Launch Failure를 지정하는 오류가 발생합니다. 그 이유는 블록 크기 (30 * 100 = 3000)가 허용되는 최대 크기 인 1024보다 커야하기 때문입니다. 커널 그 많은 스레드 (무리한 것은 아닙니다)로, 당신은 그들을 하나 이상의 스레드 블록으로 나누어야 할 것입니다.