본문 바로가기

Programming/Todo's CUDA

CUDA의 기본 - 3(Architecture)

03. CUDA 프로세서 아키텍처


3.1 그래픽 카드 블록 다이어그램







그래픽 카드는 GPU와 보드 , 그래픽 메모리(DRAM), 기타 장치로 구성되어 있는데 프로그래밍에서는 주요하게 GPU와 메모리만을 다루게 된다.


그래픽 카드의 내부에 있는 사각형은 GPU를 나타내는 것으로 그래픽 카드 중심에 장착된 프로세서를 의미한다. PC의 메인보드에 장착된 CPU와 같은 기능을 하며 GPU 내부에 있는 모듈들은 프로세서 안에 있기 때문에 빠르게 동작한다.




3.2 스트리밍 프로세서(SP, Streaming Processor)






GPU에서 연산을 하는 코어 유닛이다.


실수를 계산하기 위한 FPU(FP), 정수 계산을 하는 ALU(Int), 데이터를 로드 / 스토어 하기위한 LSU(move, cmp)를 모두 갖추고 있다.


하나의 SP는 CUDA프로그램에서 4개의 스레드를 동작시키게 된다.





3.3 스트리밍 멀티 프로세서(SM, Streaming Multi Processor)



SP가 8개 모여서 SM을 이루게 된다. SM은 SP를 제어하고 명령어 캐시와 데이터 캐시를 가지고 있다.



공유 메모리           :  SP가 서로 데이터를 공유하고 빠르게 사용할 수 있는 메모리로 L1 캐시의 성능을 발휘한다.


I Cache & C Cache  : 명령을 수행한 후에 사용한 결과를 저장하여 재호출되면 다시 그 결과를 사용하여 성능을 높이는 역할을 한다.



SM 하나에 담긴 특수 기능 유닛(SFU, Special Function Unit) 은 2개다. SFU는 sin, cos, 역수, 제곱근, 그래픽 인터폴레이션 등 말 그대로 특수한 연산 및 기능을 수행한다. 각 SFU는 클록 및 스레드 당 하나의 연산을 처리한다.


MT issue 는 SM 내에 있는 SP와 SFU에 명령을 전달한다. SM은 CUDA 프로그램에서 워프와 블록을 실행하게 된다.





3.4 텍스터 / 프로세서 클러스터 (TPC,  Texture Processor Cluster)




TPC는 SM을 제어하고 텍스처 캐시와 지오메트리 엔진을 담고 있다. TPC는 그래픽 카드에서 주요하게 계산하는 텍스처와 지오메트리 셰이더 같은 연산을 처리하는 기능을 가지고 있다.





3.5 그래픽 프로세서 유닛 (GPU,  Graphic Processor Unit)






G80 계열은 SM을 2개 포함한 TPC를 8개 포함하고 있다. SM은 8개의 SP를 가지고 있으므로 8 X 2 X 8 = 128개의 코어를 가지게 된다.

CUDA 에서는 SP, SM, TPC의 관계를 이해하고 있어야 프로그램의 동작 시퀀스를 이해할 수 있다.





3.5 Fermi 아키텍처(GF100)

 



Fermi(GF100) 아키텍처는 성능 향상을 위해 구조를 많이 변경했지만, CUDA의 지원을 위한 구조는 한결같이 유지하고 있다. 기존의 TPC에서 그래픽 기능이 들어가는 것을 SM부터 추가하였고, TPC의 개념은 사라졌다. 1개의 SM에는 32개의 SP(CUDA core)가 포함되어 있고, 4개의 SFU가 들어가 있다. 기존의 16KB 공유 메모리는 64KB로 확장되었다.






04. 용어 정리


| 호스트와 디바이스



디바이스 : 그래픽 카드

호스트    : 그래픽 카드를 제외한 PC부(CPU, DRAM)를 호스트라고 부른다.


CUDA 프로그래밍에서도 그래픽 카드에서 실행되는 코드를 디바이스 코드, PC 부에서 실행되는 코드를 호스트 코드로 구분한다.



| 온칩 프로세서와 오프 칩 프로세서




온 칩 프로세서(On Chip Processor)    : 그래픽 카드에 GPU 프로세서 내에 있는 모듈


-빠르게 동작하지만 제약 사항이 많다.

ex) L1 Cach는 빠르게 동작하지만 용량이 적다.


오프 칩 프로세서(Off Chip Processor) : 그래픽 카드에 GPU 프로세서 외부에 있는 모듈


-느린 동작을 하지만 제약 사항이 적다.

ex) DRAM은 느리게 동작하지만 용량이 크다.



  






'Programming > Todo's CUDA' 카테고리의 다른 글

CUDA 프로그램 준비 - CUDA C언어  (0) 2019.01.31
CUDA 프로그램 준비 - 설치  (0) 2019.01.31
CUDA의 기본 - 2  (0) 2019.01.30
CUDA의 기본 - 1  (0) 2019.01.29
CUDA란?  (0) 2019.01.28