GPU를 활용한 고성능 컴퓨팅의 진화

본 논문은 GPU를 일반 목적 연산에 활용하는 GPGPU 기술의 발전 과정을 살펴보고, NVIDIA의 CUDA와 AMD의 APP(STREAM) 모델을 비교한 뒤, 이들을 통합하려는 표준인 OpenCL의 구조와 장단점을 분석한다. 특히 CUDA의 메모리 계층, 스레드 조직, 프로그래밍 모델을 중심으로 그 효율성을 조명한다.

GPU를 활용한 고성능 컴퓨팅의 진화

초록

본 논문은 GPU를 일반 목적 연산에 활용하는 GPGPU 기술의 발전 과정을 살펴보고, NVIDIA의 CUDA와 AMD의 APP(STREAM) 모델을 비교한 뒤, 이들을 통합하려는 표준인 OpenCL의 구조와 장단점을 분석한다. 특히 CUDA의 메모리 계층, 스레드 조직, 프로그래밍 모델을 중심으로 그 효율성을 조명한다.

상세 요약

CUDA는 NVIDIA가 제시한 병렬 컴퓨팅 프레임워크로, GPU를 다수의 SM(Stream Multiprocessor)으로 구성된 다중 코어 장치로 추상화한다. 각 SM은 워프(warp)라 불리는 32개의 스레드 묶음으로 작업을 스케줄링하며, 이는 SIMD(Single Instruction Multiple Data) 실행 모델과 일치한다. 메모리 계층은 크게 전역(Global) 메모리, 상수(Constant) 메모리, 텍스처(Texture) 메모리, 그리고 SM 내부의 공유(Shared) 메모리와 레지스터(Register)로 구분된다. 전역 메모리는 대용량이지만 대기시간이 길어, 연산 집약적인 커널에서는 공유 메모리를 활용한 데이터 재사용이 성능 향상의 핵심이다. 또한, CUDA는 스트림(stream)과 이벤트(event) 개념을 도입해 비동기식 데이터 전송과 커널 실행을 겹쳐 수행함으로써 PCI‑Express 대역폭 병목을 최소화한다.

AMD APP(STREAM)은 AMD GPU를 대상으로 하는 유사한 모델이지만, 하드웨어 구조가 다소 다르다. AMD GPU는 워크그룹(work‑group)과 워크아이템(work‑item) 개념을 사용하며, 메모리 계층은 글로벌, 로컬, 프라이빗 메모리로 구분된다. CUDA에 비해 로컬 메모리(공유 메모리와 유사)의 크기가 작고, 워프 대신 64개의 스레드가 한 번에 실행되는 웨이브프론트(wavefront) 구조를 갖는다. 이러한 차이는 동일 알고리즘을 두 플랫폼에 이식할 때 메모리 접근 패턴과 스레드 조직을 재조정해야 함을 의미한다.

OpenCL은 이러한 제조사 종속성을 해소하고자 제시된 오픈 표준이다. 플랫폼, 디바이스, 컨텍스트, 커맨드 큐, 커널이라는 추상 계층을 정의해 CPU, GPU, DSP 등 이기종 하드웨어에서 동일한 소스 코드를 컴파일·실행할 수 있게 한다. 그러나 실제 구현에서는 각 벤더가 제공하는 드라이버 최적화 수준이 상이해, 동일 커널이라도 CUDA 대비 10~30% 정도 성능 저하가 발생하는 경우가 많다. 또한, OpenCL은 런타임에 커널을 JIT 컴파일하는 특성상 초기 지연(latency)이 크고, 디버깅 도구가 CUDA에 비해 미흡한 점이 개발 생산성을 저해한다.

결론적으로, CUDA는 NVIDIA GPU에 최적화된 풍부한 라이브러리(CuBLAS, CuDNN 등)와 강력한 프로파일링 도구(NVProf, Nsight)를 제공해 연구·산업 현장에서 높은 생산성과 성능을 보장한다. 반면, AMD APP은 비용 효율성과 오픈소스 친화성을 강조하지만, 메모리 계층 활용과 워프 구조 차이로 인한 코드 이식성이 도전 과제로 남는다. OpenCL은 장기적으로 이종 컴퓨팅 환경을 하나의 API로 통합하려는 비전을 가지고 있으나, 현재는 성능·생산성 측면에서 CUDA에 비해 뒤처진 상황이다.


📜 논문 원문 (영문)

🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...