CPU preferred computing
Overview
GPU(Graphics Processing Unit)는 병렬 처리 능력으로 과학 계산에 널리 사용되지만, CPU(Central Processing Unit) 계산이 더 적합한 경우도 있습니다.
Summary
- 무엇인가? GPU 대신 CPU 계산이 더 적합한 상황과 도메인 설명
- 왜 필요한가? 모든 계산이 GPU에 적합한 것은 아님 — CPU 장점을 이해해야 최적 선택 가능
- 언제 사용하는가? 시계열 작업, 복잡한 제어 흐름, 메모리 바운드 작업, 단일 스레드 애플리케이션
---
Purpose
이 문서가 존재하는 이유
- Goal: CPU 계산이 GPU보다 우월한 상황과 도메인 식별 가이드 제공
- Scope: CPU 우위 시나리오 5가지, 구체적 도메인 예제
- Non-goals: GPU 최적화 가이드, GPU/CPU 성능 벤치마크
---
Key Concepts
| 개념 | 설명 | Related |
|---|---|---|
| GPU | 병렬 처리에 특화된 프로세서 | GPU |
| CPU | 시계열 작업에 특화된 프로세서 | CPU |
| 시계열 계산 | 순차적 실행이 필요한 계산 | CPU preferred computing |
| 분기 예측 | 복잡한 제어 흐름 효율적 처리 | CPU preferred computing |
| 메모리 바운드 | 계산보다 메모리 접근이 성능 제한 | CPU preferred computing |
| 단일 스레드 | 멀티코어 병렬화 불가 작업 | CPU preferred computing |
---
Architecture
CPU vs GPU 아키텍처 비교:
graph LR
A[CPU] --> B[적은 코어 수]
A --> C[큰 캐시]
A --> D[복잡한 제어 로직]
A --> E[분기 예측]
F[GPU] --> G[많은 코어 수]
F --> H[작은 캐시]
F --> I[단순 병렬 연산]
F --> J[SIMD 아키텍처]---
Workflow
CPU vs GPU 선택 워크플로우:
- 작업 분석
- 시계열 작업인가? → CPU
- 복잡한 제어 흐름인가? → CPU
- 메모리 바운드인가? → CPU
- 단일 스레드인가? → CPU
- 대규모 병렬 계산인가? → GPU
- 결정 → 적절한 하드웨어 선택
---
Detailed Explanation
CPU 계산이 유리한 상황
1. 시계열 계산 (Serial computations)
과학 계산이 쉽게 병렬화할 수 없는 순차적 또는 시계열 작업인 경우, CPU 계산이 더 효율적일 수 있습니다. CPU는 순차적 작업을 실행하는 데 뛰어나며, 순차적 연산에 크게 의존하는 알고리즘에 적합합니다.
2. 복잡한 제어 흐름 (Complex control flow)
계산에 복잡한 제어 흐름, 조건부 분기, 또는 실행 경로 빈번한 변경이 포함되는 경우, CPU가 일반적으로 더 적합합니다. CPU는 정교한 분기 예측 메커니즘과 고급 명령어 세트를 갖추고 있어 복잡한 제어 흐름을 GPU보다 효과적으로 처리할 수 있습니다.
3. 메모리 바운드 계산 (Memory-bound computations)
계산 성능이 주로 메모리 접근에 의해 제한되는 경우, CPU가 우위를 가질 수 있습니다. CPU는 일반적으로 GPU보다 큰 캐시와 높은 메모리 대역폭을 갖추고 있어 메모리 바운드 작업에 더 효율적입니다.
4. 단일 스레드 애플리케이션 (Single-threaded applications)
과학 계산이 효과적으로 여러 GPU 코어를 활용하지 못하는 단일 스레드 라이브러리 또는 소프트웨어에 크게 의존하는 경우, CPU 계산이 더 적합할 수 있습니다. 일부 레거시 또는 전문 소프트웨어는 GPU 가속을 위해 최적화되지 않아 GPU 사용의 이점이 제한될 수 있습니다.
5. 상호작용성과 유연성 (Interactivity and flexibility)
CPU는 더 큰 유연성과 응답성을 제공하여 상호작용형 과학 계산이나 빈번한 컨텍스트 전환이 필요한 시나리오에 이상적입니다. CPU는 여러 작업을 동시에 처리하여 상호작용형 환경에서 더 부드러운 멀티태스킹과 응답성을 제공할 수 있습니다.
CPU 계산이 선호되는 도메인 예제
GPU는 강력한 병렬 프로세서이지만, 소스 코드 컴파일의 주요 장치로는 일반적으로 사용되지 않습니다.
1. 소스 코드 컴파일
주요 workload가 소스 코드 컴파일에 있는 경우, 관련된 작업의 특성으로 인해 CPU 중심적입니다:
- 단일 스레드 특성 — 컴파일러의 주요 작업은 순차적
- 제어 흐름과 분기 — 복잡한 전처리 및 구문 분석
- 컴파일러 optimization — 순차적 최적화 알고리즘
- 컴파일 중 메모리 접근 및 캐싱 — 대용량 코드베이스
- 디버깅 및 프로파일링 — 상호작용형 디버깅
2. MATLAB
MATLAB은 수치 계산 및 과학 프로그래밍을 위한 인기 있는 소프트웨어 환경입니다. CPU 계산에 크게 의존하며 CPU 기능을 활용하는 최적화된 선형 대수 라이브러리를 사용합니다.
3. 유한 요소 해석 (FEA: Finite Element Analysis)
ANSYS 및 Abaqus와 같은 FEA 소프트웨어는 구조 및 기계 분석에 널리 사용되며, 주로 CPU 계산에 의존합니다. FEA는 반복적으로 복잡한 방정식을 풀어야 하며, CPU는 순차적 작업 처리가 효율적입니다.
4. 전산 유체 역학 (CFD: Computational Fluid Dynamics)
OpenFOAM 및 Fluent와 같은 CFD 시뮬레이션은 유체 흐름 방정식을 풀기 위해 CPU에 크게 의존합니다.
---
Configuration
CPU 최적화 설정
# 사용 가능한 CPU 코어 수 확인
nproc
# CPU 정보 확인
cat /proc/cpuinfo
# CPU 성능 모드 설정
sudo cpupower frequency-set -g performance
# NUMA 설정 확인
numactl --hardware
---
Examples
Example 1: MATLAB 실행
# MATLAB 실행
matlab
# MATLAB에서 선형 대수 연산
A = rand(1000);
b = rand(1000, 1);
x = A \ b; % CPU 최적화 선형 대수 솔버
Example 2: 소스 코드 컴파일
# GCC 컴파일 (CPU 중심)
gcc -O2 -o myprogram myprogram.c
# CMake 빌드 (CPU 중심)
mkdir build && cd build
cmake ..
make -j$(nproc)
---
Best Practices
- 시계열 작업 — 병렬화 불가능한 작업은 CPU에서 실행
- 복잡한 분기 — 조건부 로직이 많은 코드는 CPU가 우위
- 메모리 바운드 — 대용량 캐시가 필요한 작업은 CPU 선택
- 단일 스레드 — 병렬화 불가 라이브러리는 CPU 활용
- 소스 코드 컴파일 — 컴파일러 작업은 본질적으로 CPU 중심
---
Limitations
- GPU가 병렬 계산에서 압도적 우위 — 과학 계산의 많은 부분은 GPU가 적합
- CPU 메모리 대역폭은 GPU보다 제한적
- CPU 코어 수는 GPU보다 훨씬 적음
- HPC 워크로드는 대부분 GPU 가속 필요
---
References
- (문서 내 참조)
---
Related Pages
---