[MPC/CUDA] 대규모 병렬 컴퓨팅 개요

 CUDA를 이용한 병렬 컴퓨팅에 앞서, 병렬 컴퓨팅(Parallel Computing)의 도입 과정과 CPU/GPU의 설계 철학에 대해 잠깐 알아보자.


병렬 컴퓨팅의 도입 과정

2003년 이전에는 싱글 코어(single core) CPU를 사용했다.
싱글 코어는 순차 처리, 단일 계산이며, 계산을 하기 위해 ALU 1개가 모든 계산을 담당하는 구조이다.
폰 노이만 구조이며, 코어는 ALU와 CU로 구성되어 있으며 ALU는 산술, 논리 계산에 사용되고, CU는 ALU의 제어를 담당한다. 

싱글 코어 CPU 구조

2003년 이후, 멀티 코어(multi-core) CPU와 매니 코어(many-core) GPU가 등장했다. 이는 CPU core의 개수가 2~32 이상인 것을 의미한다. 

멀티 코어

위의 그림과 같이, 멀티 코어는 2개의 ALU가 동시에 서로 다른 계산을 할 수 있게 된다. 

 

병렬 컴퓨팅은 과거에는 슈퍼 컴퓨터 전용으로 사용되고 개발되었지만, 현재에 와서는 스마트폰의 CPU도 multi-core인 것처럼 언제 어디서나 사용되고 있다. 이처럼 HW는 이미 병렬 기기로 자리 잡았지만, SW 측면에서는 아직까지도 순차 처리에 그쳐있는 경우가 많다. 

CPU와 GPU의 설계 철학

CPU와 GPU는 설계에 대한 목표가 서로 다른데, 이를 알아보자.

CPU

CPU는 고성능 멀티 코어를 추구하며, 반응 시간(Latency)을 단축시키는 것을 목표로 한다. 
이는 순차 처리(Sequential processing)에 적합하며, 기존 고성능 코어를 추가하는 방식이다. 고성능 코어를 추가하는 이유는 core 1개의 덩치가 매우 크기 때문에 이를 위한 반도체가 부족하기 때문이다.

또한, 대용량 캐쉬를 사용하고 대규모 CU와 고성능 ALU를 이용해 복잡한 명령어를 빠르게 처리할 수 있도록 설계한다. 그림으로 보면 아래와 같다.

multi-core CPU

GPU

GPU는 대규모 매니 코어를 추구하며, 처리량(throughput)을 확대하는 것을 목표로 한다. 

이는 병렬 처리(Parallel processing)에 적합하며, 많은 단순한 계산을 매우 빠르게 하기 위해 성능에 무관하게 코어의 숫자 증가에 집중한다. 

소규모 캐쉬 메모리를 사용하고 간단한 CU 1개가 여러 개의 ALU를 한꺼번에 제어하는 방식이다. 스레드 풀(thread pool)의 효과적 집중으로 최종적으로, 단위 시간당 처리량이 대폭 확대된다. 그림으로 보면 아래와 같다.

GPU

적용 분야를 살펴보면, CPU는 순차 처리에 적합하므로 사용자 입력을 최대한 빠르게 화면에 반응하는 것이 중요한 워드 프로세싱 같은 분야에 사용되고, GPU는 대규모 병렬 처리에 적합하므로 대용량 입력을 한 번에 실행하거나 계산하는 빅 데이터의 통계 처리와 같은 분야에 사용된다. 

GPGPU

General Purpose Graphics Processing Unit으로 GPU를 계산용으로 사용하는 테크닉을 말한다. 아래와 같은 구조로 동작한다.


대규모 병렬 처리 모델에는 여러 가지가 있지만, 우리는 이 중 NVIDIA GPU 전용으로 사용되는(현재는 클라우드 컴퓨팅 사용 가능) CUDA를 사용할 것이다. 

 

'대규모병렬컴퓨팅(MPC)' 카테고리의 다른 글

[MPC/CUDA] Elapsed Time(시간 측정)  (1) 2022.10.13
[MPC/CUDA] Error Check  (0) 2022.10.13
[MPC/CUDA] CUDA Kernel  (0) 2022.10.13
[MPC/CUDA] CPU Kernel  (0) 2022.10.13
[MPC/CUDA] Memory Copy  (0) 2022.10.13