본문 바로가기
NVIDIA

[NVIDIA] CUDA : NVIDIA GPU 병렬 컴퓨팅 플랫폼

by Yoon_estar 2025. 10. 1.
728x90
반응형

개요

CUDA(Compute Unified Device Architecture)는 NVIDIA가 개발한 GPU 병렬 컴퓨팅 플랫폼이자 프로그래밍 모델입니다. 원래 GPU는 그래픽 처리를 위해 만들어졌지만, CUDA를 통해 과학 계산, 머신러닝, 빅데이터 등 일반적인 범용 연산에도 GPU의 병렬 처리 성능을 활용할 수 있게 되었습니다.

주제 개념

  • CUDA : Compute Unified Device Architecture의 약자
    • Compute : 연산
    • Unified :  통합된
    • Device Architecture : 장치 구조

즉, 연산을 위해 통합된 장치 구조라는 의미로, CPU와 GPU가 협력해 작업을 수행할 수 있는 통합 환경을 뜻합니다.

IT 에서 쓰이는 개념

IT 분야에서는 CUDA가 단순히 그래픽 처리를 넘어서 범용 연산(GPGPU, General Purpose GPU Computing)에 사용됩니다. GPU의 수천 개 코어를 병렬로 활용해 CPU보다 훨씬 빠른 데이터 처리 성능을 제공합니다.

사용 사례 및 예시

실생활 예시

  • GPU CPU 차이
    • CPU는 뛰어난 개인 능력을 가진 직원 8명이 차례대로 일하는 모습이라면, GPU는 단순한 일을 동시에 처리하는 수천명의 알바생이 한번에 투입되는 것과 같습니다.

실제 작동 원리 및 예시

CUDA를 사용하면 GPU에 직접 연산을 요청할 수 있습니다. 예를 들어 행렬 곱셈 같은 연산은 CPU보다 GPU가 수백 수천 배 빠르게 계산합니다.

왜?

왜 사용하는가

  • 대용량 데이터를 빠르게 처리하기 위해
  • 병렬 연산이 필수적인 분야(머신러닝, 시뮬레이션, 영상 처리 등)에서 성능 향상

왜 필요한가?

  • CPU는 직렬 처리에 강하지만, GPU는 병렬 처리에 특화
  • 최근 AI/딥러닝 모델 학습은 수십억 개의 파라미터 연산 → GPU 없이는 비효율적

언제 사용하는가?

  • 머신러닝/딥러닝 모델 학습
  • 과학/수치 계산(분자 동역학, 유체 시뮬레이션 등)
  • 그래픽/영상처리
  • 암호화폐 채굴, 금융 데이터 분석

어떻게 사용할 건가?

  • CUDA Toolkit을 설치하고, C/C++ 또는 Python(CuPy, PyTorch 등)을 통해 GPU 코드 작성
  • GPU 메모리에 데이터를 올리고, 병렬 연산을 실행한 뒤 결과를 CPU로 다시 전송

CUDA 프로그래밍 모델

  • CPU(Host) ↔ GPU(Device) 메모리 전송 구조
  • GPU에서 실행되는 커널 함수(kernel)
  • 스레드, 블록 그리드 개념

메모리 구조

  • 전역 메모리, 공유 메모리, 레지스터
  • 성능 최적화 핵심 포인트

예시 코드

#include <stdio.h>

// CUDA 커널 함수
__global__ void add(int *a, int *b, int *c) {
    int idx = threadIdx.x;
    c[idx] = a[idx] + b[idx];
}

int main(void) {
    int a[5] = {1,2,3,4,5};
    int b[5] = {10,20,30,40,50};
    int c[5];
    int *d_a, *d_b, *d_c;

    cudaMalloc((void**)&d_a, 5*sizeof(int));
    cudaMalloc((void**)&d_b, 5*sizeof(int));
    cudaMalloc((void**)&d_c, 5*sizeof(int));

    cudaMemcpy(d_a, a, 5*sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(d_b, b, 5*sizeof(int), cudaMemcpyHostToDevice);

    // GPU에서 병렬 실행 (스레드 5개)
    add<<<1,5>>>(d_a, d_b, d_c);

    cudaMemcpy(c, d_c, 5*sizeof(int), cudaMemcpyDeviceToHost);

    for (int i=0; i<5; i++) printf("%d ", c[i]);
    printf("\n");

    cudaFree(d_a); cudaFree(d_b); cudaFree(d_c);
    return 0;
}

 

장단점

장점

  • 병렬 연산에 최적화 → 압도적 성능
  • 과학, AI, 데이터 분석 등 다양한 분야 활용
  • NVIDIA GPU와 생태계(PyTorch, TensorFlow, RAPIDS 등) 강력 지원

단점

  • NVIDIA GP에 종속(AMD/INTEL GPU는 CUDA 사용 불가)
  • 병렬화가 어려운 문제(조건문 많은 코드)에는 성능 개선 제한
  • GPU 메모리 전송 비용이 발생 → 작은 작업은 CPU가 더 효율적일 수 있음

 

반응형