좋아요. 관련 질문을 반복해서 물어 보았습니다. 그리고 이것에 관해서 거의 모든 것을 읽었지만, 일들은 여전히 불분명합니다. 아마 내가 서로 모순되는 것을 발견하고 읽었 기 때문일 수도 있습니다. 아마도 서로 다른 시간대에 있기 때문에 서로 다른 컴퓨팅 기능을 가진 장치를 참조했기 때문입니다. 실행 시간을 줄이기 위해보다 효율적으로 노력하고 있으므로 얼마나 많은 스레드/워프/블록을 동시에 병렬로 실행할 수 있는지 정확히 알아야합니다. 또한 이것을 일반화하고 최적의 스레드 수와 블록 수를 계산하여 (단순한 프로그램의 경우) 수행해야하는 작업 수와 시스템 사양에만 기반하여 커널에 전달할 것을 고려하고있었습니다.CUDA Blocks & Warps
GTX 550Ti, btw 및 계산 기능 2.1이 있습니다. SMs x 48 코어 4 개 = 192 CUDA 코어. 좋아
은 그래서 내게 불분명 것은 :
AT ONCE (병렬) 멀티 프로세서 (SM)에 1 개 이상의 블록 실행이 할 수 있습니까? 나는 최대 8 블록을 SM에 할당 할 수 있지만 SM이 어떻게 실행되는지는 알지 못한다. SM (1536) 당 최대 스레드 수가 블록 당 최대 스레드 수 (1024)보다 약간 크다는 사실로부터 블록이 병렬로 실행되지 않는다고 생각할 것입니다 (아마도 1 년 반 정도?). 아니면 적어도 내가 그들에 스레드의 최대 개수가 있다면. 또한 블록 수를 설정하면 4 (SM 수)를 각각 다른 SM으로 보냅니 까? 또는이 모든 것이 하드웨어에서 어떻게 분산되어 있는지를 제어 할 수 없으며 이것은 논점입니다. 내 실행 시간은 장치의 변덕에 따라 달라질 수 있습니다 ...
두 번째로, 스레드를 병렬로 실행되는 32 개의 스레드 그룹 (워프 (warps))으로 나눕니다. 이제이 날실 (서로 관계가 없다고 가정 할 때)은 평행하게도 달릴 수 있습니까? 페르미 (Fermi) 아키텍처에서는 2 개의 워프가 동시에 실행됨을 나타내므로 각각의 워프에서 하나의 명령어를 16 개 코어 그룹으로 보내고 다른 코어는 워프를 처리하는 1536 개의 최대 스레드를 설명합니다. 32 * 48) 그러나 조금 많이 보인다. 1 개의 CUDA 코어가 32 개의 스레드를 동시에 처리 할 수 있습니까?
간단히 말하면, 나는 (예를 들어) 3 번째 벡터에서 2 개의 벡터를 더하고 싶다면, 어떤 길이를 주어야하는지 (nr의 연산 수)와 어떻게 나누어야하는지 블록 및 쓰레드를 (유휴 코어 또는 SM을 사용하지 않고) 전체 용량에서 동시에 (병렬로) 작업 할 수 있습니다.
이전에 질문을 받았지만받지 못했거나 보지 못해 죄송합니다. 당신이 나를 도울 수 있기를 바랍니다. 고맙습니다!
질문 확장 : * 1 CUDA 코어가 32 개의 스레드를 동시에 처리 할 수 있습니까? *, 32 개 스레드가 동일해야합니다 블록? CUDA 코어가 서로 다른 블록의 두 스레드를 동시에 실행할 수 있습니까? – haccks
CUDA 코어는 "코어"가 아니며 정수/부동 소수점 실행 파이프 라인입니다. 워프와 실행 파이프 라인의 스레드 레인 id (ptx % laneid) 사이에는 고정 된 매핑이 있습니다. CC 3.x 장치에서 워프의 32 스레드는 32 와이드 int/fp 실행 경로로 발송됩니다. CC 2.x 장치에서 워프의 32 스레드는 2 개의 핫 클을 통해 16 와이드 더블 클럭 인/fp 실행 경로로 발송됩니다. 배 정밀도 단위가 너비가 아니기 때문에 워프가 여러주기에 걸쳐 발행됩니다. 모든 스레드는 동일한 워프의 일부 여야합니다. –
그래, 알아. 모든 스레드는 동일한 랩의 일부 여야합니다. GPU의 CPU 코어는 SM이며 랩 (32 개 스레드)에서 스레드를 실행합니다. 각 SP는 스레드를 처리합니다. 저를 혼란스럽게하는 것은 SM이 둘 이상의 블록 상주를 가질 수 있습니다. 즉, 다중 스레드 블록이 하나의 다중 프로세서에서 동시에 실행할 수 있습니다. SM에 8 SP가 있으며 한 번에 8 개의 상주 블록과 64 개의 스레드가있는 각 블록을 가질 수 있다면 처음 8 개 사이클에서 단 하나의 블록 만 처리해야합니까? – haccks