2012-03-28 2 views
0

나는 기능 후이어떻게 cuda 커널 기능을 동기화 할 수 있습니까?

a<<<BLK_SIZE,THR_SIZE>>>(params,...); 
b<<<BLK_SIZE,THR_SIZE>>>(params,...); 

같은 두 개의 CUDA 커널 기능을 가지고 나는이 완료 될 때까지 기다린 후 기능 B를 시작하려면, 시작했다. 그래서,이 같은 A와 B 사이에 cudaThreadSynchronize()를 삽입

a<<<BLK_SIZE,THR_SIZE>>>(params,...); 
err=cudaThreadSynchronize(); 
if(err != cudaSuccess) 
    printf("cudaThreadSynchronize error: %s\n", cudaGetErrorString(err)); 
b<<<BLK_SIZE,THR_SIZE>>>(params,...); 

하지만 cudaThreadSynchronize()가 오류 코드를 반환합니다 the launch timed out and was terminated cuda error

내가 그것을 어떻게 해결할 수 있습니까?


간단한 코드 설명 :

mmap(sequence file); 
mmap(reference file); 

cudaMemcpy(seq_cuda, sequence); 
cudaMemcpy(ref_cuda,reference); 

kernel<<<>>>(params); //find short sequence in reference 
cudaThreadSynchronize(); 
kernel<<<>>>(params); 

cudaMemcpy(result, result_cuda); 
report result 

및 커널 함수에

가 포함 된 루프에 대한 큰이 몇 가지 경우 - 다른 비교의 수를 줄이기 위해 알고리즘과 일치하는 패턴.

+0

Nvidia의 CUDA 포럼 (예 : [출시 시간이 초과되어 종료되었습니다] (http://forums.nvidia.com/index.php?showtopic=189042))에서 사람들은 너무 오래 걸리는 커널을 가리키고 있습니다 비디오 디스플레이에도 사용되고있는 GPU에서 실행됩니다. 해결책은 커널을 단축하거나 다른 GPU (예 : 통합 그래픽)를 사용하여 디스플레이를 구동하는 것입니다. –

+0

사용중인 운영 체제는 무엇입니까? – talonmies

+0

우분투를 사용하고 있습니다. 10.04 – enc

답변

1

이 시작 오류는 첫 번째 커널이 시작될 때 또는 그 전에 뭔가 잘못되었을 때 오류가 발생했음을 의미합니다. 이를 해결하려면 모든 CUDA 런타임 호출의 오류를 검사하십시오. 또한 모든 커널 호출 후에 cudaThreadSync와 오류 검사를 수행하십시오. 이렇게하면 오류가 발생한 첫 번째 위치를 찾는 데 도움이됩니다.

실제로 실행이 실패한 경우 실행 구성과 커널 코드를 조사하여 오류의 원인을 찾아야합니다.

마지막으로, cudaThreadSynchronize에서 추가 작업으로 인해이 오류가 발생했을 가능성은 거의 없습니다. 당신이 질의 포인트를 cudaThreadSynchronize로 말한 방식이 범인이기 때문에 나는 이것을 말합니다. 이 모든 호출은 기존 오류를 더 빨리 catch하는 것이 었습니다.

+0

a를 호출하기 전에 모든 커널 호출을 확인했지만 오류는 없었습니다. "기능을 실행하는 동안"발사 시간 초과 및 종료 된 쿠다 오류 "가 발생할 수 있습니다 ?? – enc

+0

Enc : 예, 커널에 이상이있을 것입니다. a. 실행 구성 또는 커널 내부에서 수행중인 작업. –

+0

감사합니다. 이 상황에 대한 추측이 있습니까 ?? 어느 것이이 문제를 일으키는 지 나는 모른다. 내가 인식하는 한 가지는 작은 데이터 (~ 10 MB)를 사용할 때 잘 작동하지만 더 큰 데이터 (수백 MB가 있지만 그래픽 카드의 메모리에 맞음)를 사용하면 작동하지 않습니다. – enc

관련 문제