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