컴퓨터 공학 Computer Engineering/병렬 컴퓨팅 Parallel Computing

병렬 컴퓨팅 소개 (CPU, GPU, 발전 과정)

킹남지 2021. 9. 4. 16:51
반응형

이 글은 학부 수업을 들으면서 개인적으로 정리한 글입니다. 잘못된 내용이 있다면 댓글로 말씀 부탁드립니다!

 

CPU와 GPU

중앙 처리 장치, CPU(Central Processing Unit)는 컴퓨터가 계산하는데 있어 가장 핵심적인 부품으로 보통 1개의 독립된 칩 형태.

그래픽스 처리 장치, GPU(Graphics Processing Unit)는 보통 카드 형태.

 

이 전에는 CPU가 주로 계산을 담당, GPU가 화면을 출력하는 용도로 쓰였던 것에 반해, 최근에는 GPU 즉 그래픽 카드를 계산에 사용하는 추세다.

 

간단하게 차이점을 보자면 

  • CPU와 달리 GPU는 코어가 많음.
  • CPU는 복잡한 계산을 빠르게 할 수 있지만, 모두 직렬로 처리.
  • GPU는 간단한 계산을 빠르게 할 수 있고, 많은 연산을 병렬로 동시에 처리 가능.

 

병렬 컴퓨팅의 발전 과정

2003년 이전

일반적인 PC급에서는 2003년 이전까지 Single Core CPU를 주로 사용. (하나의 CPU가 단일 계산만 하는 방식으로 많이 사용)

 

컴퓨터 구조의 관점에서 본다면 지금의 PC까지 모두 폰 노이만(Von Neumann) 구조를 따르고 있음.

기본적인 폰 노이만 구조의 구조도

이 때 Single Core를 사용했다 함은, CPU 내부에서 계산을 하는 Unit이 1개 밖에 없었다는 뜻.

( 위의 구조도에서 보면 산술연산장치(ALU, Arithmetic Logic Unit)가 하나 밖에 없음. ) 

 

2003년 이후

2003년 이후에는 CPU든 GPU든 병렬 컴퓨팅(Parallel Computing)이 PC 시장에 본격적으로 진입했음.

 

CPU 시장에는 Dual Core CPU가 나옴. 

위의 구조도와 달리 하나의 칩 안에 서로 다른 CU, ALU가 두개씩 들어감.

이후 점점 CPU에 코어가 점점 늘어남. (Multi Core CPU, 2 ~ 32+ Cores)

 

반면 GPU 같은 경우 대용량 데이터를 다뤄야되는 일이 아주 많았기 때문에 처음부터 수천 개의 Core를 사용.

(Many Core GPU, 1024~8192+ Cores)

 

과거에는 슈퍼 컴퓨터만 병렬 컴퓨팅을 했다면, 현재는 일반적인 PC를 넘어서 스마트폰을 포함한 대부분의 컴퓨팅 기계들이 병렬 컴퓨팅을 지원.

 

이제 우리가 사용하고 있는 하드웨어는 병렬 컴퓨팅을 지원(Parallel Device)하기에 소프트웨어 또한 순차 처리(Sequential Processing) 방식이 아닌 병렬 처리를 할 수 있도록 개발하는 것이 좋음.

 

CPU와 GPU의 차이 요약

왼쪽이 Multi Core CPU 오른쪽이 Many Core GPU

Multi Core CPU

CPU 발전의 기본 목표는 반응 시간(Latency)를 단축하는 것. 즉, 어떤 입력에 대해 반응이 빠르기를 원함. 이러한 발전은 순차 처리에 적합함. 고성능의 Core가 여러개 있는 쪽으로 발전.

Many Core GPU

GPU 발전의 기본 목표는 처리량(Throughput) 확대로 대규모의 병렬 처리에 적합. 성능이 아닌 Core의 수가 많은 쪽으로 발전. ( ALU가 1000개 이상. 그림에서도 확인 가능. ) 

컴퓨터에서 하는 연산 중 많은 부분이 아주 간단한 연산이기 때문에 최종적으로 단위시간당 처리량이 많아짐. (복잡한 연산에 사용하면 CPU 연산보다 느려질 수 있음.)

요약

반응시간만 놓고 본다면 CPU가 빠르지만, 대용량의 처리는 GPU 쪽이 빠름.

 

예시로 복잡한 팩토리얼 계산식을 2개 계산하는 경우는 CPU, 간단한 덧셈 연산 1000개를 처리하는 경우는 GPU를 활용하는 것이 좋음.

 

 

대규모 병렬 처리를 위해서 필요한 것

 

아래의 요소를 갖춘 모델(시스템)이 필요함.

  • 처리가능한 기기 => 보통 그래픽 카드를 의미
  • 프로그래밍 언어 => 병렬 처리를 다룰 수 있는 언어가 필요 
  • 컴파일러 => 언어에 따른 컴파일러가 필요
  • 라이브러리 

모델 중에는 대표적으로 OpenMP, CUDA, OpenCL 등이 있음.

 

 

[참고자료]

[1] https://m.blog.naver.com/with_msip/221981730449

[2] https://buttercoconut.xyz/157/

[3] https://ko.wikiqube.net/wiki/Parallel_programming_model#Classification_of_parallel_programming_models

반응형