2012-09-24 2 views
-3

CUDA의 경우 "블록이 여러 MP로 분할되지 않습니다."(http://llpanorama.wordpress.com/2008/06) . 거기에, 그러나"이해하는 방법" "블록이 여러 MP로 나누어 지 지 않습니다."?

__global__ void dummy() 
{ 
} 

int main() 
{ 
     int N=21504*40000; //21504 is the total threads I found for my Tesla M2070 
     dim3 grids(1,2); 
     dim3 thres(N,N); 
     dummy<<<grids,thres>>>(); 
     return 0; 
} 

:/11/스레드 및 블록 -와 - 그리드 - 오 - 내 /)

그냥이 테스트하기 위해, 나는 커널에 매우 큰 블록 크기를 할당 컴파일이나 런타임 에러가 아니며 무슨 일이 일어나고 있는지 확실하지 않습니다 ...

+2

코드를 검사 할 때 런타임 오류가 없다고 어떻게 말할 수 있습니까? – talonmies

+3

그가 CUDA를 배우려고 할 때 블로그에있는 누군가가 인터넷에서 임의의 구식 페이지를 참조하는 대신, 나는 [CUDA C 프로그래밍 가이드] (http : // Nvidia의 developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Programming_Guide.pdf). CUDA 프로그램을 작성하기 위해 알아야 할 모든 것을 포함하고 있습니다. – tera

답변

2

더미 뒤에다음에 cudaGetLastError()를 추가하면210 < < >>> 호출하면 CUDA Launch Failure 오류가 발생합니다 (cudaGetErrorString (err_code)를 사용하여 오류 코드를 문자열로 변환 할 수 있음).

+0

커널 호출 후 오류 코드를 얻기 위해 동기화해야합니다. – Eugene

+1

@Eugene : 아니,이 경우에는 그렇지 않습니다. 커널 실행은'cudaErrorInvalidConfiguration'을 반환해야하며, 런타임 API 실행 문 다음에'cudaPeekAtLastError' 또는'cudaGetLastError'를 통해 사용할 수 있습니다. – talonmies

0

이 오류는 컴파일 오류가 아니므로 실행 후 런타임 오류가 발생합니다. 문장을 이해하려면 아키텍처를 이해해야합니다. 하나의 MP (SM) 공유 메모리를 통해 동일한 스레드 블록에 배치 된 스레드의 통신을 고정 시키도록 설계되었습니다. 그래서, 그들은 모두 같은 SM에 거주하며 파견되지 않습니다.

관련 문제