2014-02-20 4 views
1

케플러 백서에서 읽은 바 있습니다. 케플러가 최대 16 블록/mp를 지원하는 케플러 백서를 읽었습니다. heremp 당 케플러 블록?

그러나 스레드/블록 = 1024 및 스레드/mp = 2048, 따라서 블록/mp = 2.

여기에 뭔가가 있습니까?

답변

3

케플러에 맞춰 스트리밍 숭배 프로세서는 까지 개의 16 개의 스레드 블록을 실행할 수 있습니다.
예를 들어, 스레드 블록이 1024 개의 스레드로 구성된 경우 하나의 mp에서 동시에 두 개의 블록 만 시작할 수 있습니다.이 경우 다중 프로세서 당 최대 스레드 수 (2048/1024 = 2)로 제한됩니다. 블록.

스트리밍 멀티 프로세서에서 동시에 실행될 수있는 블록 수에 영향을주는 요인은 여러 가지가 있습니다. SM은 레지스터와 공유 메모리의 양이 제한되어 있습니다. 레지스터를 너무 많이 사용하거나 공유 메모리를 너무 많이 사용하면 이러한 요인으로 인해 제한됩니다.

여기에 대한 개요는 CUDA occupancy calculator입니다. 엑셀 시트를 사용하면 모든 CUDA 아키텍처에 대한 커널 구성을 쉽게 설정할 수 있으며 커널이 제한 될 수 있음을 알 수 있습니다.
또한 CUDA programming guide은 필요한 모든 정보를 제공합니다.


은 어쩌면 간단한 예제 도움이 될 수 있습니다 - 컴퓨팅 능력 3.0 점유 계산기 수행 :

스레드 블록은 512 실로 구성되어 있으며, 당신은 양보다, 어떤 레지스터 나 공유 메모리를 사용하지 않습니다

경우 의 병렬 블록은 블록 크기에 의해서만 영향을받습니다. cc 3.0 SM 당 2048 개의 스레드를 시작할 수 있습니다. 그래서 2048/512 = 4. 4 개의 스레드 블록을 동시에 사용할 수 있습니다.

두 번째 단계에서는 스레드 당 48 개의 추가 레지스터를 사용합니다. 스레드 당 블록 512 * 48 = 24576 개의 레지스터가 사용됩니다. 그러나 SM은 65536 개의 레지스터 만 사용할 수 있습니다. 이제 4 개 대신 2 개의 블록 만 실행할 수 있습니다.

마지막 단계에서는 블록이 32000 바이트의 공유 메모리를 사용한다고 가정 해 보겠습니다. SM은 49152 바이트 만 공유 메모리로 사용할 수 있기 때문에 더 이상 1 개의 스레드 블록 만 사용할 수 있습니다.

+0

: 예를 들어 스레드/mp가 128 일 경우 1024/128 = 8 블록/mp가됩니다. 하지만 얼마나 많은 스레드/mp를 찾을 수 있습니까? – George

+0

이 정보는 GPU 데이터 탭 아래의 점유 계산기에서 찾을 수 있습니다. 또는 계산기 탭에서 정보를 채울 수 있습니다 (2. 리소스 사용을 입력하십시오). 모든 결과가 3 이하로 표시됩니다.) 또 다른 출처는 [CUDA 프로그래밍 가이드] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/#compute-capabilities)입니다. 여기서 '계산 기능'에서 이러한 정보를 찾을 수 있습니다. – hubs

+0

: 알았어, 고마워, 그래서 그냥 "잡을"했다. – George

관련 문제