1. 대규모 병렬연산을 위한 GPGPU의 개요
그래픽 처리를 위해 설계된 GPU의 대규모 병렬 연산능력을 범용 응용프로그램의 연산에 활용하여 처리능력을 향상시키는 병렬 컴퓨팅 기술이다.
등장배경
- AI·과학연산·영상처리 등 대규모 병렬연산 요구 증가
- CPU의 소수 고성능 Core 방식에서 GPU의 다수 Core를 활용한 병렬처리로 연산 가속
2. GPGPU 구조 및 구성요소

- GPU : 다수 SM으로 구성. 대규모 병렬 연산 수행
- SM(Streaming Multiprocessor) : Thread들을 그룹화하여 스케줄링 명령·실행
- SP(Straming Processor) : SM 내부에서 실제 산술·논리 연산 실행
- Register : Thread별 데이터의 고속 저장
- Shared Memory/L1 : SM 내부 Thread 간 데이터 공유 및 고속 접근
3. GPGPU 처리과정
① 데이터 전송 → ② Kernel 실행 → ③ 병렬연산 → ④ 결과 회수
① CPU가 Main Memory의 데이터를 GPU Memory로 전송
② CPU(Host)가 GPU에 Kernel 실행 명령
③ GPU의 다수 Thread가 병렬로 연산 수행
④ 연산 결과를 GPU Memory에서 Main Memory로 전송
→ 최근에는 Unified Memory, 고속 인터커넥트 등 활용으로 병목 해소
* Unified Memory : CPU와 GPU가 단일 메모리 주소공간을 공유하여 데이터 복사 및 메모리 관리 부담을 감소시키는 기술
4. CPU와 GPGPU의 비교
| 구분 | CPU | GPGPU |
|---|---|---|
| 구조 | 소수의 고성능 Core | 다수의 단순 Core |
| 처리 | 순차·복잡 연산 | 대규모 병렬 연산 |
| 최적화 | 지연시간(Latency) | 처리량(Throughput) |
| 제어 | 복잡한 제어에 강함 | 동일·반복 연산에 강함 |
| 활용 | OS, 일반 프로그램 | AI, 영상, 과학연산 |
* 장점 : 높은 병렬처리 성능, 높은 메모리 대역폭, 부동소수점·행렬연산에 유리
* 단점 : 분기·복잡한 흐름제어에 불리, 병렬화 가능한 문제만에 적합, CPU-GPU 데이터 전송 오버헤드
* CPU대비 : Core당 성능보다 다수 Core를 이용한 Throughput 중심
* 활용 : AI / Deep Learning : 행렬·Tensor 연산 가속
HPC : 기상예측, 유체해석, 과학 시뮬레이션
영상처리 : Rendering, Encoding, Computer Vision
* CPU-GPU 전송 오버헤드 : CPU와 GPU의 분리된 메모리 구조에서 데이터 복사 및 통신에 추가적인 지연과 대역폭 비용이 발생하는 문제
* Throughput 중심 ↔ Latency 중심
* Throughput(처리량) : 단위 시간당 시스템이 처리할 수 있는 작업 또는 데이터의 양
* Latency(지연시간) : 하나의 작업 또는 요청이 시작되어 결과가 반환될 때까지 소요되는 시간
* 숫자 하나 → Scalar
* 숫자 한 줄 → Vector
* 숫자 표 → Matrix(행렬)
* 행렬을 여러 개 쌓은 것 → 고차원 Tensor
* HPC(High Performance Computing, 고성능 컴퓨팅)
* Computer Vision : 이미지·영상에서 객체 및 특징을 인식·분석하는 기술 (얼굴인식, 자율주행 객체인식, CCTV 영상분석 등)
5. GPGPU의 핵심기술
| 기술 | 설명 |
|---|---|
| SIMT | 다수 Thread가 동일 명령을 병렬 수행 |
| Thread | GPU 병렬 실행 단위 |
| Kernel | GPU에서 병렬 실행되는 함수 |
| Memory 계층 | Register·Shared·Global Memory 활용 |
| CUDA / OpenCL | GPU 병렬 프로그래밍 플랫폼 |
* SIMT = Single Instruction, Multiple Threads
GPGPU 프로그래밍 플랫폼
* CUDA : NVIDIA, CUDA C/C++, Kernel 기반 병렬 프로그래밍, NVIDIA GPU 종속
* OpenCL : Khronos Group, CPU·GPU 등 이기종 플랫폼 지원, 높은 이식성
* OpenACC : Directive 기반 병렬화, 기존 C/C++/Fortran 코드의 GPU 가속 용이
* C++ AMP : Microsoft의 C++ 기반 병렬 프로그래밍 모델, DirectX 기반 GPU 활용
* Directive(지시문) 기반 병렬화 : 기존 C/C++/Fortran 코드에 컴파일러 지시문(Directive)을 추가하여 비교적 쉽게 GPU 병렬처리를 적용하는 프로그래밍 모델
* C++ AMP(Accelerated Massive Parallelism) : 이제 레거시


답글 남기기