2022. 11. 22. 20:43ㆍCUDA
Thread Context Switching
GPU는 대량의 레지스터를 지원하므로 스레드 교환을 위해 할당할 공간을 더 많이 가지고 있어 스레드를 많이 생성해도 부담이 적음. 동시에 처리할 수 있는 스레드의 수보다 많은 스레드를 이용하여 프로그램을 구성해도 CPU와 같이 동작하지 않음. Thread Context Switching을 위해 레지스터와 메모리 간의 스위칭 교환으롭 라생할 부하를 막도록 최대 생성 가능 스레드만 생성하고 나머지 스레드는 대기시킴. 최대 스레드 개수 만큼 처리하고 난 뒤 나머지 스레드를 다시 생성하여 스레드 컨텍스트 스위칭을 위한 부하를 방지. 이를 블록과 워프 단위로 처리.
SP의 스레드 스케줄링
CUDA의 최소 단위 코어인 SP(Streaming Processor)는 한 번에 4개의 스레드를 실행하여 처리. 물리적으로 하나의 코어가 4개의 스레드를 동시에 실행시키는 것이 아니라 시분할을 이용하여 4개의 스레드 단위로 프로그램 처리. SP도 하나의 프로세서이므로 클록 단위로 실행. 4개의 스레드를 처리하기 위해 4번ㄴ의 클록을 하나의 사이클로 동작하면서 처리.
워프
하나의 SM에서 처리되는 스레드. 코드 진행의 단위가 됨.
SM의 스레드 스케줄링
CUDA 연산 처리는 코드의 위치를 워프 단위로 동시에 처리. 레지스터에 있는 변수에 대한 연산은 1개의 워프 단위로 처리하고 메모리에서 레지스터로 값을 로딩하는 작업은 워프를 절반으로 나누어 진행.
SM의 워프 스케줄링
SM에서 워프 단위(한번에 처리할 수 있는 스레드 수)로 코드를 실행할 때 레지스터에 로딩된 변수를 연산하는 명령은 적은 클록수로 계산 가능. 그러나 실제로 사용하는 프로그램은 메모리에서 레지스터로 데이터를 읽어오고 레지스터의 값을 메모리에 쓴느 연산이 많이 들어있음. 이런 연산이 수행될 때 SM은 대기상태에 놓이므로 시간을 낭비하지 않기 위해 SM은 워프 단위로 스케줄링하게 됨.
커널의 코드가 메모리를 읽고 쓰게 되면 해당 작업을 진행하는 동안 또 다른 워프를 스위칭하여 연산을 수행. 이렇게 스위칭하면서 관리하는 워프 개수가 많을수록 SM이 메모리를 읽고 쓰는 시간 동안 대기하는 시간이 줄어들고 효율적으로 동작.
Active Block
SM이 코드를 실행하면서 관리하는 블록. CUDA 프로그램의 효율은 액티브 블록이 많을수록 더욱 효율적이게 되며 이것은 커널 함수의 레지스터 사용이나 공유 메모리의 사용량으로 결정됨.
'CUDA' 카테고리의 다른 글
CUDA API 함수 (0) | 2022.12.01 |
---|---|
메모리 아키텍처 (0) | 2022.11.22 |
스레드 블록 아키텍처 Thread Block Architecture (0) | 2022.11.16 |
CUDA C (0) | 2022.11.16 |
CUDA 프로세서 아키텍처 (0) | 2022.11.16 |