이 전 포스팅에서 본 CUDA 컴파일러의 구조를 좀 더 자세히 보자. source code에는 CUDA kernel 코드와 C++ 코드가 함께 섞여 있다. 그렇다면, CUDA 컴파일러 입장에서 source code에서 어느 부분이 CPU를 위한 코드이고, 어느 부분이 GPU를 위한 코드인지 구분할 필요가 있다. 이를 구분하는 단위를 the unit of compilations라 한다. file 단위, line 단위... 등 여러 가지 단위가 있지만, 우리는 function 즉, 함수 단위를 사용할 것이다. 📂 CUDA programming model CUDA 컴파일러에서 compilation unit은 functions 이다. 각 함수들이 CPU나 GPU에 할당될 것이다. 그럼 함수들을 구분하는 방법은 ..
CUDA를 설치했으니, CUDA 프로그래밍 모델과 CUDA 프로그램 시나리오에 대해 알아보자. 📂 CUDA 프로그래밍 모델 CUDA의 컴파일러 구조를 알아보기 전에 먼저 PC의 구조를 살펴보자. pc의 구조를 도식화하면 위와 같이 나타낼 수 있다. 중앙에 위치한 north bridge, south bridge가 Controller Chip이며, 각각 memory controller, I/O controller의 역할을 한다. 왼쪽의 GPU가 들어있는 박스는 그래픽카드(비디오카드)의 부분이다. 이 PC 구조를 간략화해서 보자. CUDA의 관점에서 그래픽 카드 쪽이 Device가 되고, CPU 쪽이 Host가 된다. 그리고, device와 host는 각각의 메모리를 가지고 있는데, CPU의 memory를 m..
CUDA를 이용한 병렬 컴퓨팅에 앞서, 병렬 컴퓨팅(Parallel Computing)의 도입 과정과 CPU/GPU의 설계 철학에 대해 잠깐 알아보자. 병렬 컴퓨팅의 도입 과정 2003년 이전에는 싱글 코어(single core) CPU를 사용했다. 싱글 코어는 순차 처리, 단일 계산이며, 계산을 하기 위해 ALU 1개가 모든 계산을 담당하는 구조이다. 폰 노이만 구조이며, 코어는 ALU와 CU로 구성되어 있으며 ALU는 산술, 논리 계산에 사용되고, CU는 ALU의 제어를 담당한다. 2003년 이후, 멀티 코어(multi-core) CPU와 매니 코어(many-core) GPU가 등장했다. 이는 CPU core의 개수가 2~32 이상인 것을 의미한다. 위의 그림과 같이, 멀티 코어는 2개의 ALU가 동..