CPU vs GPU

블로그·2025년 2월 23일

들어가며

최근 그로킹 동시성 이라는 책을 읽고 있다. 이 책에서 동시성에 대해 설명하면서 하드웨어에 대한 설명들이 나오는데, 대칭형 다중처리에 대해 설명하면서 CPU와 GPU를 비교하며 설명하였다.

이것을 읽다가 이 부분에 대해서 조금 궁금해져서 작성하게 되었다. 그리고 최근 AI, 딥러닝, 엔비디아 등 GPU와 무엇이 연관이 있는지 궁금해졌다.

대칭형 다중처리(Symmetric Multiprocessing, SMP)

일단 CPU와 GPU는 대칭형 다중처리(Symmetric Multiprocessing)에 속한다. SMP는 여러 개의 프로세서가 하나의 메모리와 운영체제(OS)를 공유하며 작업을 처리하는 방식이다. 이는 일반적으로 CPU를 여러 개 장착하여 성능을 높이는 방식이다. 그리고 이 구조의 주요 특징은 다음과 같습니다

  • 공유 메모리(Shared Memory): 모든 프로세서(코어)가 동일한 메모리 공간에 접근한다.
  • 작업 분배: 운영체제가 각 프로세서에 작업을 균등하게 분배한다. 모든 프로세서가 동등한 권한을 가지며, 어떤 프로세서든 어떤 작업이든 처리할 수 있다.
  • 확장성:프로세서를 추가해 시스템 성능을 높일 수 있다. 하지만 메모리 대역폭과 동기화 문제로 인해 프로세서 수가 증가할수록 효율성이 떨어질 수 있다.

플린(Flynn)의 분류(Flynn’s Taxonomy)

플린의 분류는 명령어데이터 흐름을 기준으로 병렬 컴퓨터를 네 가지 유형으로 나눈다.

  • SISD (Single Instruction, Single Data): 하나의 명령어가 하나의 데이터 스트림을 처리하는 방식. 전통적인 단일 코어 CPU가 여기에 해당된다.
  • SIMD (Single Instruction, Multiple Data): 하나의 명령어가 여러 개의 데이터를 동시에 처리하는 방식. 벡터 프로세서나 GPU가 주로 SIMD 방식을 사용한다.
  • MISD (Multiple Instruction, Single Data): 여러 개의 명령어가 하나의 데이터를 처리하는 방식인데, 실제로 거의 사용되지 않는다.
  • MIMD (Multiple Instruction, Multiple Data): 여러 개의 명령어가 여러 개의 데이터를 처리하는 방식. 멀티코어 CPU나 대형 슈퍼컴퓨터에서 사용된다.

처음에는 이 이야기가 잘 이해되지 않았으나, 계속 보다보니 조금 이해가 되었다. 일단 SISD와 MISD는 현재 관심사가 아니니 넘어간다. SIMD는 간단하게 말해서 한 가지 작업을 동시에 병렬로 실행한다는 이야기이다. 그리고 MIMD는 다른 종류의 작업을 동시에 병렬로 실행한다는 이야기이다.

구체적으로 CPU와 GPU에 대해서 살펴보면서 더 생각해보겠다.

CPU

CPU는 복잡한 작업을 빠르게 순차적으로 처리하는 데 초점이 맞춰져 있다. 따라서 코어 수는 적지만(보통 4~16개), 각 코어는 매우 강력하고 다양한 작업을 효율적으로 처리할 수 있다.

따라서 CPU는 운영체제의 제어, 복잡한 로직 수행 등에 적합한 반면, 병렬 연산 성능이 낮다.

GPU

GPU는 그래픽 처리와 같은 대규모 병렬 작업에 최적화되어 있다. 그래픽 처리와 같은 대규모 병렬 작업에 최적화되어 있다. 그래픽스 렌더링은 수많은 픽셀을 동시에 계산해야 하기 때문에, GPU는 수천 개의 작은 코어를 가지고 있어 동시에 많은 작업을 처리할 수 있다.

결국 동일한 연산을 반복하는 병렬 처리에 최적이고 반대로 복잡한 제어 흐름이 있는 연산에 부적합하다.

CPU vs GPU

나도 처음에 위의 설명정도로 이해가 잘 되지 않았다. 구체적인 예시로 비교를 해보자. 컴퓨터에서 설명을 할 때, 가장 자주 나오는 예시인 요리를 이용해보겠다.

CPU

여러 명의 요리사가 각각 다른 레시피를 가지고, 다른 요리를 만든다고 생각해 보자.

예를 들어, 한 레스토랑에서:
👨‍🍳 첫 번째 요리사는 스테이크를 굽고,
👩‍🍳 두 번째 요리사는 파스타를 만들고,
👨‍🍳 세 번째 요리사는 샐러드를 준비한다.

각 요리사는 서로 독립적으로 동작하며, 각자 자신의 요리에 집중한다.
요리사가 많아질수록 동시에 더 많은 요리를 만들 수 있다.

➡ 멀티코어 CPU의 방식 (ex: 여러 개의 프로그램 실행, 웹 서버의 동시 요청 처리, 병렬 프로그래밍)
➡ 각 코어가 서로 다른 명령을 실행하며, 독립적인 연산 수행

GPU

🧑‍🍳 한 명의 요리사가 같은 레시피를 따라 여러 개의 요리를 동시에 만든다고 해보자.
예를 들어, 5개의 스테이크를 한꺼번에 굽는 상황을 생각해 보자.
① 고기 5개를 동시에 팬에 올린다.
② 같은 소스를 뿌린다.
③ 같은 불 온도로 굽는다.
④ 각 접시에 담는다.

즉, 요리사는 한 번에 하나의 행동(명령어)을 하면서, 여러 개의 데이터(스테이크)를 동시에 처리한다.

➡ GPU의 기본 연산 방식 (ex: 그래픽 처리, 딥러닝 행렬 연산, 비디오 필터링)
➡ 같은 연산을 여러 데이터에 적용하는 병렬 처리

AI와 GPU

이제 적당히 이해를 했으니, AI와 딥러닝과 관련해서 GPU가 중요한 이유를 알아보겠다. AI와 딥러닝에서 GPU가 많이 사용되는 이유는 딥러닝의 핵심 연산이 대규모 병렬 처리에 매우 적합하기 때문이다. GPU는 이러한 연산을 CPU보다 훨씬 빠르고 효율적으로 처리할 수 있다. 아래에서 구체적으로 어떤 요소들이 GPU 사용을 필수적으로 만드는지 살펴보자.

1. 행렬 연산(Matrix Operations)

  • 딥러닝의 핵심: 딥러닝 모델의 학습과 추론은 대부분 행렬 곱셈(Matrix Multiplication)과 같은 선형 대수 연산으로 이루어진다.
    • 예: 신경망의 각 층(Layer)은 입력 데이터와 가중치(Weight) 행렬의 곱셈으로 계산된다.
  • GPU의 강점: GPU는 수천 개의 코어를 사용해 행렬 곱셈을 병렬로 처리할 수 있다. 이는 CPU보다 훨씬 빠른 속도를 제공한다.

2. 컨볼루션 연산(Convolution Operation)

  • 컨볼루션 신경망(CNN): 이미지 처리와 컴퓨터 비전에서 사용되는 CNN은 컨볼루션 연산을 기반으로 한다.
    • 컨볼루션 연산은 작은 필터(Kernel)를 이미지 전체에 걸쳐滑动하며 계산하는 작업이다.
  • GPU의 강점: 컨볼루션 연산은 본질적으로 병렬화가 가능하며, GPU는 이러한 연산을 동시에 처리해 빠른 속도를 제공한다.

3. 대규모 데이터 처리

  • 대용량 데이터셋: 딥러닝은 수백만 개의 데이터 포인트를 처리해야 한다.
    • 예: 이미지 데이터셋(ImageNet), 텍스트 데이터셋 등.
  • GPU의 강점: GPU는 대규모 데이터를 작은 단위로 나누어 병렬로 처리할 수 있다. 예를 들어, 배치(Batch) 단위로 데이터를 처리할 때 GPU는 배치 내 모든 데이터를 동시에 계산할 수 있다.

4. 활성화 함수 및 손실 함수 계산

  • 활성화 함수(Activation Function): ReLU, Sigmoid, Tanh 등 비선형 함수를 적용하는 작업입니다.
  • 손실 함수(Loss Function): 모델의 출력과 실제 값의 차이를 계산하는 작업다.
  • GPU의 강점: 이러한 연산도 병렬화가 가능하며, GPU는 이를 동시에 처리해 학습 속도를 크게 높인다.

무슨 이야기인지 잘 모르겠지만, 느낌만 알고 넘어간다.

0개의 댓글