개요

GPU(Graphic Processing Unit)는 병렬 연산에 최적화된 아키텍처로, 그래픽 렌더링뿐만 아니라 딥러닝, 과학 계산 등 다양한 분야에서도 중요한 역할을 하고 있다. 이 장에서는 GPU의 프로세서 코어 설계에 대해 다뤄본다.

SIMD(Single Instruction, Multiple Data) 설계

GPU 코어는 SIMD(단일 명령 다중 데이터) 구조를 따르는 경우가 많다. SIMD는 하나의 명령어가 여러 데이터에 동시에 적용될 수 있게 하여 병렬 연산을 효율적으로 수행할 수 있다.

워프(Warp)와 스레드(Thread) 개념:

스레드 다이버전스(Thread Divergence) 관리

스레드 다이버전스는 같은 워프 내의 여러 스레드가 서로 다른 명령어 경로를 따를 때 발생한다. 이는 GPU의 병렬 처리 성능을 저하시킬 수 있다.

제어 흐름 다이버전스:

코어의 메모리 계층 구조

GPU 코어는 다양한 메모리 계층 구조를 가지고 있다. 각각의 계층은 다른 속도와 용량을 제공하여 다양한 연산 요구 사항을 충족시킨다.

레지스터 파일:

공유 메모리:

글로벌 메모리:

명령어 발행 및 스케줄링

GPU는 여러 개의 명령어를 병렬로 발행하여 스레드의 실행 효율을 극대화한다. 이를 위해 다양한 스케줄링 기법이 사용된다.

워프 스케줄링:

연산 유닛

GPU 코어는 다양한 종류의 연산 유닛을 포함하고 있다. 각 유닛은 특정 종류의 연산을 전문적으로 처리한다.

ALU(Arithmetic Logic Unit):

SFU(Special Function Unit):

에너지 효율

GPU는 일반적으로 고성능을 목표로 하지만, 에너지 효율 또한 중요한 설계 목표 중 하나이다. 에너지 효율을 극대화하기 위한 다양한 기법들이 적용된다.

다이나믹 전압 및 주파수 스케일링(DVFS):

파워 게이팅:

메모리 접근 최적화

GPU의 성능을 극대화하기 위해서는 메모리 접근의 효율성을 극대화해야 한다. 이를 위해 다양한 최적화 기법들이 적용된다.

메모리 공존성(코러스케일러티):

뱅크 충돌 방지(Bank Conflict Avoidance):

캐싱

GPU에는 다양한 캐싱 기법이 적용되어 메모리 접근 속도를 향상시키고, 데이터의 재사용성을 높인다.

L1 및 L2 캐시:

텍스처 캐시:

프로그래밍 모델

GPU를 효과적으로 프로그래밍하기 위해서는 적절한 프로그래밍 모델을 이해하는 것이 중요하다.

CUDA:

OpenCL:

응용 분야

GPU는 그래픽 렌더링 외에도 다양한 분야에서 활용된다.

딥러닝:

과학 계산: - 복잡한 수학적 연산을 빠르게 처리할 수 있어, 기후 모델링, 천체 물리학 등에서 사용된다.