GPU Microarchitecture
메인 프로그램이 CPU 에서 실행이 되며, 병렬처리 부분만 GPU 에서 실행이 된다. (커널 파트) GPU 커널 구조에 대해서 살펴보자.
소프트웨어 개발자가 GPU 를 코딩할 수 있다. CUDA KERNEL은 함수와 같이 생기었다. 함수는 인풋과 아웃풋을 가지는데, "many threads<=KERNEL"
커널은 다수의 쓰레드를 아웃풋으로 생성하며,
각각의 쓰레드는 쓰레드 인덱스를 가지고 있다.
SPMD(Single Program Multiple Data) : 모든 쓰레드가 하나의 커널(함수)를 공유한다. 그러면 어떻게 다수의 데이터를 핸들링 할 수 있을까?
A[i] GPU 커널은 배열과 같다. 각각 쓸레드는 인덱스 넘버 0 255까지 가지고 있으며, 쓰레드는 또 쓰레드 그룹 계층이 있다. 하나의 0 부터 255개의 쓰레드는 쓰레드 블록 또는 CTA 라고 불린다.
커널 -> 쓰레드 블록 -> 다수의 쓰레드 (0~255)
쓰레드 블록의 차원 : 1D (X), 2D (X, Y), 3D (X,Y,Z)
thread block = CTA
즉 하나의 커널이므로 쓰레드 블록도 같은 코드를 공유한다.
쓰레드 블록은 GPU 하드웨어 구조(Shared memory)와 연관된다. 다른 쓰레드 블록간의는 데이터를 공유할 수 없다. 각각의 쓰레드 블록은 비동기적으로 실행하지 않는다. 같은 블록안에 쓰레드끼리만 공유할 수 있다.
https://catcountryroad.tistory.com/22
CTA Assignments on SMs
하드웨어 리소스(WARP, RF, Shared Memory)가 CTA 에 할당된다. WARP 의 사이즈가 32인데, 그 의미는 하나의 WARP 가 32개의 쓰레드를 가진다는 것이다. 따라서 만약 한 CTA 에 256 개의 쓰레드 8개의 WARP 를 갖는 것이다. 하나의 SM 이 32 WARP 를 지원한다면(하드웨어 구조상), 하나의 CTA 8 WARP 이니깐 4개의 CTA 를 SM 에 할당할 수 있다.
ALU, Bandwidth 제한된 코스트 안에서
LOAD/STORE Units 의 파이프라인 와프 단위로 실행이 발생한다. 캐쉬에서 리소스라고 하면 MSHR, 이
Last updated