2012-08-08 4 views
4

for 루프 내에서 호출되는 CUDA 커널이 있습니다. 뭔가 같은for 루프 내에서 CUDA 커널 호출

for(i=0; i<10; i++) { 
    myKernel<<<1000,256>>>(A,i); 
} 

이제는 15 개의 스트림 다중 프로세서 (SM)가있는 NVIDIA 카드가 있다고 가정합니다. 또한 단순화를 위해 하나의 블록 만 SM에 매핑 할 수 있다고 가정합니다. SM은 기본적으로 대부분의 시간에 15 개의 블록이 장치에서 실행되도록 말합니다. 커널 실행은 비동기이기 때문에 기본적으로 i = 1 인 호출은 첫 번째 커널이 시작된 직후에 실행을 위해 정렬됩니다 (i = 0 인 호출).

질문이있다 : (ⅰ = 0으로) 실행되는 어떤 시점에서 제 커널 만 11 등

후 단지 12 그리고, 13 개의 후, 단지 14 SMS를 분주있을 때

하나의 SM이 사용 가능하자마자 i = 1 인 커널을 장치에서 실행하기 위해 보내겠습니까? 아니면 모든 SM이 첫 번째 커널 (i = 0 인 커널)을 다 처리 할 때까지이 두 번째 커널이 시작될 것입니까? ?

하나의 CUDA 스트림 내에서 작업하고 있다고 가정합니다.

답변

4

동일한 스트림에서 커널을 시작하는 일련 번호입니다. 다른 스트림의 커널 호출은 충분한 리소스 (SM, 공유 메모리 등)가 지정된 경우 겹칠 수 있습니다.

+0

동일한 스트림에서의 연산이 직렬화됩니다. GPU는 스트림의 이전 작업이 완료 될 때까지 푸시 버퍼의 다음 항목을 읽을 수 없습니다. CC2.x-3.0은 16 개의 동시 커널을 지원할 수 있습니다 (서로 다른 스트림에서 발행되고 잘못된 종속성이나 중요한 상태 변경이없는 경우). GPU는 커널을 드라이버를 통해 제출 한 순서대로 SM에 작업을 배포합니다. 즉, 동시 작업은 순서대로 완료 될 수 있지만 항상 순서대로 배포됩니다. 자세한 내용은 http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf를 참조하십시오. –

관련 문제