CUDA 2.0 (NVIDIA 590)으로 큰 구조의 배열을 처리하려고합니다. 나는 그것을 위해 공유 메모리를 사용하고 싶다. 나는 각 쓰레드가 배열의 전체 요소를 처리 할 수 있도록 쓰레드 당 최대 공유 메모리를 할당하려고 CUDA 점유율 계산기를 실험했다. 그러나 최대 (블록 당 공유 메모리)/(블록 당 스레드 수) 100 % 다중 프로세서로드에서 계산기에서 볼 수있는 32 바이트는 단일 요소에 충분하지 않습니다 (크기 순서대로). (블록 당 공유 메모리)/(블록 당 스레드)의 최대 값은 32 바이트입니까? alter4native가 바람직하다고 말할 수 있습니까? 배열의 일부를 전역 메모리에 할당하거나 언로드 된 다중 프로세서를 사용합니까? 아니면 실험을 통해서만 결정할 수 있습니까? 내가 볼 수있는 또 다른 방법은 여러 단계에서 배열을 처리하는 것이지만 최후의 수단으로 보입니다. 처음으로 CUDA와 매우 복잡한 것을 시도하고 있으므로 다른 옵션을 놓칠 수 있습니다 ...CUDA에서 100 % MP로드가있는 최대 (블록 당 공유 메모리)/(블록 당 스레드)
1
A
답변
6
CUDA 커널을 설계 할 때 유의해야 할 하드웨어 제한이 많습니다. 여기에 어떤 제약 조건은 고려할 필요가 있습니다
- 단일 블록에서 실행할 수있는 스레드의 최대 수
- 당신이 한 번에
- 최대 수의 스트리밍 멀티 프로세서에로드 할 수있는 블록의 최대 수 스트리밍 멀티 프로세서 먼저 공격 이러한 제한의
어느 당 공유 메모리의 스트리밍 멀티 프로세서 당 레지스터는
최상의 성능을 제공하는 커널 디자인을 사용하고 있는지 확인하는 유일한 방법은 모든 가능성을 테스트하는 것입니다. 또한 모든 유형의 장치에 대해이 성능 테스트를 다시해야합니다. 왜냐하면 모든 유형의 장치가 서로 다른 제약 조건을 가지고 있기 때문입니다. 이것은 분명히 지루할 수 있습니다. 특히 다른 디자인 패턴이 근본적으로 다른 커널을 만들 때 더욱 그렇습니다. 필자는 템플릿 엔진을 사용하여 장치 하드웨어 사양에 따라 런타임에 동적으로 커널을 생성하지만 어느 정도는이 문제를 해결할 수 있습니다.하지만 여전히 약간의 혼란이 있습니다.
관련 문제
- 1. CUDA에서 스레드 당 레지스터 사용량 증가
- 2. 블록 당 스레드를 결정하는 CUDA, 그리드 당 블록
- 3. 블록 파일 복사 당 블록
- 4. 스레드 당 하나의 SQLiteConnection?
- 5. 스레드 당 메모리 할당
- 6. 프로세서 당 스레드
- 7. 스레드 구현 당 큐
- 8. 스레드 당 메모리 관리
- 9. 쿼리 당 최대 메모리
- 10. 연결 당 하나의 인터프리터/스레드?
- 11. 제안 당 최대 2 열?
- 12. 서버 당 최대 연결 수 :
- 13. 특정 조건을 가진 열 블록 당 계산
- 14. Magento : 제품 당 최대 수량 제한 (주문 당)
- 15. 문자 당 스레드 대 맵당 스레드 디자인
- 16. 스레드 별 스레드 당 CPU 통계
- 17. CUDA에서 최대 값 찾기
- 18. Tomcat이 웹 응용 프로그램 당 최대 스레드 수를 구성합니다.
- 19. 스레드, QThread, 프로세스 당 얼마나 "합리적"입니까?
- 20. 트랜잭션 당 100 개의 레코드 삽입
- 21. 연결 모델 당 Java 스레드 대 NIO
- 22. 블록 당 스레드에 대한 CUDA 성능
- 23. Perl의 호출간에 스레드 당 상태를 저장하려면 어떻게해야합니까?
- 24. 계정 당 또는 프로비저닝 프로파일 당 100 개의 개발 장치가 제한됩니까?
- 25. 데이터베이스 당 한 페이지 당 사용자 당 단일 투표를 보장하십시오.
- 26. 컴퓨터 당/응용 프로그램 당 라이센스 당 .NET 응용 프로그램
- 27. CUDA 2D, 3D 스레드 블록
- 28. 별표 (Asterisk) 회의의 용량 : 회의 당 최대 사용자 수, 서버 당 최대 회의 수?
- 29. Qt를 사용하여 스레드 당 하나의 타이머
- 30. "X 당 하나의 스레드"아키텍처의 대안?
감사합니다. 그 강의는 제 정신을 거의 대답했습니다. – mirror2image