CUDA(Compute Unified Device Architecture)는 엔비디아(Nvidia)가 개발한 독점(proprietary) 병렬 컴퓨팅 플랫폼이자 응용 프로그래밍 인터페이스(API)이다. 소프트웨어가 특정 유형의 그래픽 처리 장치(GPU)를 범용 연산 처리에 사용할 수 있게 함으로써 GPU의 활용 범위를 인공지능, 과학 연산, 고성능 컴퓨팅 분야로 크게 확장시켰다.
개요
CUDA는 데이터 관리를 위한 소프트웨어 계층이자 병렬 연산을 가능하게 하는 API 라이브러리이다. 드라이버 및 런타임 커널 외에도 컴파일러, 라이브러리, 개발자 도구를 포함한다. C 언어로 작성되었으나 C++, Fortran, Python, Julia 등 여러 프로그래밍 언어와 함께 사용할 수 있도록 설계되었다. 이를 통해 병렬 프로그래밍 전문가가 아닌 개발자도 GPU 자원을 활용할 수 있게 되었으며, 이전의 Direct3D나 OpenGL 같은 API가 요구했던 고급 그래픽 프로그래밍 기술이 불필요해졌다.
역사
CUDA의 기원은 2000년대 초반 스탠퍼드 대학교의 컴퓨터공학 박사 과정 학생이었던 이언 벅(Ian Buck)이 그래픽을 넘어 GPU를 다른 용도로 사용하는 실험을 하면서 시작되었다. 벅은 스탠퍼드에서 Brook이라는 프로그래밍 언어를 개발하였고, 그의 연구는 엔비디아와 방위고등연구계획국(DARPA)의 지원을 받았다. 2004년 엔비디아는 벅을 고용하여 존 니콜스(John Nickolls)와 함께 Brook을 CUDA로 발전시켰고, 2007년 2월 16일 공식 출시되었다. 초기에는 Compute Unified Device Architecture의 약자였으나, 이후 엔비디아는 이 약어의 의미를 더 이상 사용하지 않고 있다.
2015년 이후 CUDA의 개발은 머신러닝과 인공 신경망 워크로드 가속에 점차 집중되었다.
주요 특징
CUDA는 기존 그래픽 API를 사용한 GPGPU(General-Purpose computing on GPUs) 방식에 비해 여러 장점을 가진다:
- 임의 주소의 메모리 읽기(Scattered reads) 지원
- 통합 가상 메모리(Unified Virtual Memory, CUDA 4.0 이상)
- 통합 메모리(Unified Memory, CUDA 6.0 이상)
- 공유 메모리(Shared Memory) 제공: 스레드 간 공유할 수 있는 고속 메모리 영역
- GPU로의 빠른 데이터 다운로드 및 읽기
- 정수 및 비트 연산 완전 지원
제한 사항
CUDA는 엔비디아의 독점 기술이므로 CUDA를 지원하는 GPU는 엔비디아 제품에서만 사용할 수 있다. 다른 제조사의 GPU에서 CUDA를 실행하려는 여러 시도(Project Coriander, CU2CL, ZLUDA, ChipStar, SCALE 등)가 있었으나, 공식적으로 지원되지는 않는다.
소프트웨어 구성요소
CUDA 툴킷에는 다음과 같은 주요 라이브러리가 포함된다:
- cuBLAS: 기본 선형 대수 서브루틴 라이브러리
- cuFFT: 고속 푸리에 변환 라이브러리
- cuRAND: 난수 생성 라이브러리
- cuSOLVER: 밀집 및 희소 직접 솔버 라이브러리
- cuSPARSE: 희소 행렬 라이브러리
- NPP: 엔비디아 성능 프리미티브 라이브러리
- nvGRAPH: 그래프 분석 라이브러리
활용 분야
CUDA는 다음과 같은 광범위한 분야에서 사용된다:
- 3D 그래픽 가속 렌더링
- 비디오 파일 형식 변환 가속
- 암호화, 복호화 및 압축
- 생물정보학(예: NGS DNA 시퀀싱)
- 단백질 구조 예측 분산 계산
- CT 및 MRI 스캔 기반 가상 현실 의료 분석
- 유체 역학 등 물리 시뮬레이션
- 신경망 훈련(딥러닝/머신러닝)
- 대규모 언어 모델(LLM) 추론
- 분자 동역학
- 암호화폐 채굴
경쟁 기술
CUDA는 인텔의 OneAPI(오픈소스) 및 AMD의 ROCm(오픈소스)과 경쟁 관계에 있다. 엔비디아의 CUDA가 폐쇄형(클로즈드 소스)인 반면, 인텔 OneAPI와 AMD ROCm은 오픈 소스로 개발되고 있다. 2024년에는 인텔, 구글, ARM, 퀄컴, 삼성 등이 주축이 된 UXL 재단(Unified Acceleration Foundation)이 결성되어 CUDA의 개방형 대안을 목표로 활동 중이다.