////
Search
📄

Chapter 1: Introduction to CUDA Programming

Compute Unified Device Architecture(CUDA)는 2007년 처음 릴리즈(release)된 이후로 그래픽을 사용하는 어플리케이션 뿐 만 아니라 일반적인 목적의 연산에서 Graphic Computing Units(GPUs)를 사용하기 위한 사실상의 표준이 되었다. 첫번째 챕터는 왜 CUDA를 사용하는지에 대해 소개하는 챕터이다. 이를 위해 High Performance Computing(HPC; 고성능 컴퓨팅)의 역사와 CUDA 프로그래밍 모델을 소개하기 위해 CPU와 GPU 구조의 근원적인 차이에 대해서도 다룬다. 챕터의 마지막엔 몇 가지 CUDA 프로그래밍 기초에 대해 소개한다.
이번챕터에서 소개할 내용을 요약하면 아래와 같다.
고성능 컴퓨팅(HPC)의 역사
CUDA로 Hello World 출력하기
CUDA를 사용한 벡터의 덧셈연산
CUDA를 사용한 에러보고
CUDA에서 지원하는 데이터 타입 소개

The history of high-performance computing

고성능 컴퓨팅(HPC)은 과학적인 여러 발견들과 함께 그 한계를 뛰어넘어 왔다. 특히 프로세서 아키텍쳐(processor architecture)와 디자인의 변화가 FLOP의 벽을 뛰어넘어 Mega-Floating Operation(MFLOPs)의 세상을 열었고 현재는 초당 PetaFLOP의 영역까지 가능하게 되었다.
Floating-Point Operations (FLOPs) per second : 단위 시간 당 몇번의 부동소수점 연산을 진행하는지에 대한 지표이며 모든 연산 프로세서의 성능을 측정하기 위한 단위이다. FLOP과 비교하여 MegaFLOP은 10610^6배, PetaFLOP은 101510^{15}배 단위를 의미한다.
Instruction-Level Parallelism(ILP) : 코드와 관련없이 동시에 실행가능한 명령의 수를 의미한다. 병렬상황에서 명령의 실행을 위해선 각 명령은 서로 독립적이어야 한다. 가령 아래와 같은 상황을 가정해보자.
Instr 1: add = inp1 + inp2 Instr 2: mult = inp1 * inp2 Instr 3: final_result = mult / add
C++
복사
이 때 mult와 add 변수는 서로 독립적인 변수기 때문에 동시에 명령을 진행할 수있다. 그러나 final_result의 경우 Instr 1과 Instr 2의 연산 결과에 종속되어 두 연산이 완료될 때 까지 실행되지 않게 된다.
현대의 모든 CPU아키텍처(심지어 GPU도)는 적게는 5개부터 시작해서 15개 이상의 명령을 한번에 처리하여 더 빠른 클락속도(clock rate)를 가지게 되었다.