각 블록의 스레드 수가 이미 CUDA 코어 수보다 많으면 한 번에 하나의 블록을 실행하는 것보다 동시에 블록 그리드를 실행할 때 성능상의 이점이 있습니까?최적의 CUDA 병렬 블록 수
답변
나는 생각합니다. 스레드 블록은 스트리밍 멀티 프로세서 (SM)에 할당되며 SM은 각 블록의 스레드를 순차적으로 실행되도록 계획된 스레드 32 개 (최신 아키텍처는 더 큰 워프를 처리 할 수 있음)의 나눗셈으로 나눕니다. 이를 고려하여 가능한 한 많은 SM을 차지하도록 각 계산을 블록으로 나누는 것이 더 빠를 것입니다. 또한 카드가 지원하는 워프 당 스레드의 배수 인 블록을 작성하는 데 충분합니다 (SM이 32 스레드 워프를 사용하는 경우 40 스레드가 아닌 32 또는 64 스레드 블록).
실행 대기 시간
시작 지연 시간 (GPU에서 시작된 작업에 대한 API 호출) 그리드의 것은 윈도우 비스타/Win7에에 30 ~ 80 μs의 리눅스에 3-8 μS입니다.
SM에 블록을 배포하는 데는 10-100ns ns입니다.
블록 (32 개 스레드)에서 워프를 시작하면 몇 사이클이 소요되며 각 SM에서 병렬로 발생합니다.
리소스 제한
동시 커널 - 한번에 테슬라 N/A 1 개만 그리드 - 페르미 시간 16 그리드 - 케플러 16 그리드 (Kepler2 32 그리드)
최대 블록 (점유 제한을 고려하지 않음) - 테슬라 SmCount * 8 (gtx280 = 30 * 8 = 240) - 페르미 SmCount * 16 (gf100 = 16 * 16 = 256) - 케플러 SmCount * 16 (gk104 = 8 * 16 = 128)
이 ... 블록 당 스레드, SM 당 스레드, SM 당 레지스터, 스레드 당 레지스터에 대한 제한에 대한 점유 계산기를 참조
워프 예약 및 CUDA 코어
CUDA 코어가 부동 소수점/ALU 단위. 각 SM은로드/저장, 특수 기능, 분기 등 다른 유형의 실행 단위를 포함합니다. CUDA 코어는 x86 프로세서의 SIMD 장치와 같습니다. x86 코어와 동일하지 않습니다.
점유 율은 SM 당 최대 비프 니스 수에 대한 SM 당 측정 한 비프입니다. SM 당 워프가 많을수록 워프 스케줄러에 적합한 워프 일정이 잡힐 확률이 높아집니다. 그러나 점유율이 높을수록 스레드 당 사용 가능한 리소스가 줄어 듭니다. 기본 목표로 둘 이상의
25 % 8 테슬라 에 휘어 대상으로 지정할 50 % 페르미 (Fermi) 24 개 날실 50 % 케플러 (일반적으로 이상)
당신은 알 수가 32 개 날실 이 계산에서 CUDA 코어와 실제 관계가 없습니다.
더 잘 이해하려면 Fermi 백서를 읽고 Nsight Visual Studio Edition CUDA 프로파일 러를 사용할 수 있다면 이슈 효율 실험 (CUDA 프로파일 러 또는 Visual Profiler에서는 아직 제공되지 않음)에서 커널이 얼마나 잘 숨고 있는지 이해하십시오 실행 및 메모리 대기 시간.
- 1. CUDA 병렬 처리
- 2. GPU의 병렬 처리 - CUDA/OpenCL
- 3. 병렬 작업 블록 BindingSource.PositionChanged
- 4. Boruvka 알고리즘 병렬 구현 CUDA
- 5. CUDA 2D, 3D 스레드 블록
- 6. cuda-cdb에서 스위칭 블록 포커스
- 7. CUDA 앱에서 최적의 속도로 데이터를 구성하는 방법
- 8. 최적의 성능을 얻기 위해 블록 및 스레드의 CUDA 수를 조정하는 방법
- 9. LAPACK의 dgels에 대한 최적의 블록 크기 쿼리
- 10. 블록 당 스레드를 결정하는 CUDA, 그리드 당 블록
- 11. cuda, 더미/암시 적 블록 동기화
- 12. CUDA 스레드/스레드 블록 간의 통신
- 13. 블록 당 스레드에 대한 CUDA 성능
- 14. cuda 및 cudamalloc 할당 큰 메모리 블록
- 15. omp 병렬 블록 외부의 omp pragmas
- 16. Cuda : GTX460의 아키텍처 및 그리드/블록/스레드의 코드 관련 분리
- 17. mult_curl을 사용하여 최적의 병렬 다운로드 수를 어떻게 계산합니까?
- 18. cuda threadfence
- 19. cudamemcopy를위한 최적의 데이터 구조
- 20. Win32에서 최적의 디스크 IO 블록 크기를 어떻게 결정합니까?
- 21. 최대 출력을위한 최적의 스레드 수
- 22. CUDA-Kernel은 블록 크기에 따라 동적 인 충돌이 발생합니다.
- 23. CUPTI 블록 멀티 스레드 코드에서 CUDA 커널 시작
- 24. CUDA 스레드, SMX, SP 및 블록, 어떻게 작동합니까?
- 25. 병렬 이항 계수 계산
- 26. 병렬 작업 수
- 27. 쿠다 (CUDA) -보다 많은 글로벌 메모리 액세스?
- 28. OpenMPI CUDA 및 CUDPP
- 29. # 블록, #threads
- 30. 병렬 감소
Kepler GPU의 경우에도 워프 크기는 여전히 32 스레드입니다. – Eugene
또한 SM에서 동시에 실행되는 그리드 (블록)의 수에는 제한이 있습니다 (위키피디아에서는 Fermi와 Kepler에 대해 16이라고 말합니다 - 이것이 적절한 수인지는 모르겠습니다). 따라서 많은 수의 작은 블록은 응용 프로그램이 하드웨어를 제대로 채울 수 없게합니다. – Eugene