Verilog로 구현된 최소형 GPU로 GPU 아키텍처 학습
tiny-gpu는 GPU 작동 방식을 학습하기 위해 Verilog로 구현된 최소형 GPU임
GPU 시장의 폐쇄성으로 인한 학습의 어려움을 해결하고자 하드웨어 수준의 GPU 구조를 제공함
매트릭스 연산 커널을 포함하여 GPU 아키텍처의 핵심 요소들을 직접 시뮬레이션 가능
SIMD 프로그래밍 모델과 메모리 제약을 이해하는 데 유용함
GPU 아키텍처의 핵심 요소
tiny-gpu는 디바이스 제어 레지스터(Device Control Register), 디스패처(Dispatcher), 컴퓨팅 코어(Compute Core), 메모리 컨트롤러(Memory Controller), 캐시(Cache)로 구성된다. 특히, 디스패처는 스레드를 코어에 분배하고, 메모리 컨트롤러는 외부 메모리 대역폭을 관리하며, 캐시는 메모리 접근 속도를 향상시킨다. 이러한 요소들은 GPU의 기본적인 작동 원리를 이해하는 데 필수적이다.
SIMD 프로그래밍 모델의 하드웨어 구현
tiny-gpu는 SIMD(Single Instruction, Multiple Data) 프로그래밍 모델을 하드웨어적으로 구현한다. 각 코어는 여러 스레드를 지원하며, 각 스레드는 전용 ALU, LSU, PC, 레지스터 파일을 갖는다. %blockIdx, %blockDim, %threadIdx와 같은 읽기 전용 레지스터를 활용하여 SIMD 연산을 수행한다. 이러한 구조는 병렬 처리를 가능하게 하며, GPU의 핵심 기능 중 하나이다.
메모리 제약 극복을 위한 기술
tiny-gpu는 외부 글로벌 메모리(Global Memory)와 인터페이스하며, 데이터 메모리와 프로그램 메모리를 분리하여 관리한다. 메모리 컨트롤러는 외부 메모리 대역폭을 제한하고, 캐시는 빈번하게 사용되는 데이터를 저장하여 메모리 접근 속도를 향상시킨다. 또한, 메모리 병합(Memory Coalescing)과 같은 기술을 통해 메모리 접근 효율성을 높일 수 있다.
ISA 및 커널 구현
tiny-gpu는 11개의 명령어로 구성된 간단한 ISA(Instruction Set Architecture)를 구현한다. 이 ISA는 행렬 덧셈 및 곱셈과 같은 간단한 커널을 구현하는 데 사용된다. BRnzp, CMP, ADD, SUB, MUL, DIV, LDR, STR, CONST, RET 등의 명령어를 통해 SIMD 프로그래밍을 시연한다. 이러한 커널은 시뮬레이션을 통해 실행 과정을 확인할 수 있다.