병렬처리기 아키텍처: Flynn 분류와 메모리 구조 이해
병렬처리기의 Flynn 분류, 공유·분산 메모리 구조, GPU와 특수 목적 가속기, 성능 평가 법칙을 정리한다.
2026-08-14 · 최초 발행 2026-01-16
병렬성을 어디에 배치할 것인가
병렬처리기(Parallel Processor)는 여러 처리 장치가 동시에 연산을 수행하도록 구성한 컴퓨터 시스템이다. 단일 프로세서의 물리적 한계를 넘고 대규모 연산을 다루기 위해 발전했으며, 처리 시간을 줄이고 처리량을 높이는 데 목적이 있다.
병렬성은 적용 위치에 따라 성격이 달라진다.
| 유형 | 설명 | 예시 |
|---|---|---|
| 데이터 병렬성 | 동일 연산을 여러 데이터에 적용 | 벡터 연산, 행렬 곱셈 |
| 작업 병렬성 | 서로 다른 작업을 동시 수행 | 파이프라인, 멀티태스킹 |
| 명령어 병렬성 | 여러 명령어를 동시 실행 | 슈퍼스칼라, VLIW |
| 비트 병렬성 | 여러 비트를 동시 처리 | 워드 단위 연산 |
명령어 수준에서는 파이프라인, 슈퍼스칼라, VLIW가 병렬성을 제공한다. 스레드 수준에서는 SMT, 멀티코어, 멀티스레딩이 사용되며, 데이터 수준은 SIMD·벡터 프로세서·GPU로 이어진다. 작업 수준의 병렬성은 분산 시스템, 클러스터, 그리드 환경에서 나타난다.
명령어와 데이터 흐름으로 보는 Flynn 분류
Flynn의 분류법은 명령어 스트림과 데이터 스트림의 수를 기준으로 병렬처리기 구조를 나눈다.
SISD(Single Instruction, Single Data)는 하나의 명령어 스트림이 하나의 데이터 스트림을 처리하는 순차 구조다. 폰 노이만 아키텍처, 단일 CPU와 단일 메모리, 순차 명령 실행이 여기에 해당하며 파이프라인으로 성능을 개선할 수 있다.
SIMD(Single Instruction, Multiple Data)는 하나의 명령어를 여러 데이터에 동시에 적용한다. 벡터·배열 프로세서와 GPU의 기본 구조이며, 멀티미디어 처리나 과학 계산처럼 같은 연산을 반복하는 데이터 병렬 작업에 적합하다. 벡터 덧셈 A[0:N] + B[0:N] = C[0:N], 이미지 필터링, 행렬 연산이 대표적이다.
MISD(Multiple Instruction, Single Data)는 여러 명령어 스트림이 하나의 데이터 스트림을 처리하는 형태다. 실제 구현은 드물며, 이론적 분류나 내결함성 시스템의 제한적 적용, 시스톨릭 배열의 일부 해석에서 언급된다.
MIMD(Multiple Instruction, Multiple Data)는 여러 명령어 스트림과 데이터 스트림이 독립적으로 동작하는 가장 일반적인 병렬 구조다. 멀티프로세서, 클러스터, 분산 시스템이 이에 속하며 유연한 프로그래밍 모델을 제공한다.
메모리 구성은 확장성의 조건이 된다
공유 메모리 구조에서는 여러 프로세서가 하나의 메모리 공간을 사용한다. UMA(Uniform Memory Access)는 모든 프로세서가 메모리에 균일한 시간으로 접근하는 방식이다. SMP(Symmetric MultiProcessor)와 버스 기반 상호연결이 대표적이며, 프로그래밍은 쉽지만 버스 병목으로 확장성이 제한된다.
NUMA(Non-Uniform Memory Access)는 프로세서마다 로컬 메모리를 두므로 메모리 접근 시간이 균일하지 않다. 대규모 시스템에 적합하고 확장성이 높지만, 메모리 배치를 최적화해야 한다. ccNUMA(cache coherent NUMA)도 이 범주에 속한다.
분산 메모리 구조에서는 각 프로세서가 독립적인 로컬 메모리를 보유하고 메시지 패싱으로 통신한다. 높은 확장성을 제공하지만, MPI(Message Passing Interface)를 통한 통신과 네트워크 대역폭이 성능에 직접 영향을 주며 프로그래밍 복잡도도 커진다. 대규모 클러스터, 슈퍼컴퓨터, 분산 컴퓨팅이 적용 대상이다.
하이브리드 구조는 두 방식을 함께 사용한다. 노드 내부는 공유 메모리(SMP)로 구성하고 노드 간은 분산 메모리(MPI)로 연결하며, MPI + OpenMP 혼합 프로그래밍을 사용한다. 현대 슈퍼컴퓨터에서 쓰이는 표준적인 구성이다.
| 구조 | 확장성 | 프로그래밍 | 지연시간 | 대역폭 |
|---|---|---|---|---|
| UMA | 낮음 | 쉬움 | 균일 | 제한적 |
| NUMA | 중간 | 중간 | 불균일 | 높음 |
| 분산 | 높음 | 어려움 | 높음 | 매우 높음 |
| 하이브리드 | 매우 높음 | 복잡 | 가변 | 최적화 가능 |
노드 간 통신 경로의 선택
정적 토폴로지는 노드 간 물리적 연결이 고정된 방식이다. 선형 배열은 1차원 연결로 단순하고 저비용이지만 확장성에 제약이 있다. 링은 양방향 순환 구조로 균일한 대역폭을 제공하며 지름(diameter)은 N/2다.
메시는 2D/3D 격자 구조로 지역성을 활용할 수 있어 슈퍼컴퓨터에 적합하다. 하이퍼큐브는 n차원 큐브 구조로 짧은 지름 (log N)과 높은 대역폭을 제공한다. 토러스는 메시의 양 끝을 연결해 엣지 노드 성능을 개선하고 균일한 연결성을 만든다.
동적 토폴로지는 스위치가 연결 경로를 결정한다. 버스는 단순하고 저비용이지만 병목이 발생해 소규모 시스템에 적합하다. 크로스바는 임의 연결을 허용하고 고성능·저지연을 제공하지만 비용이 O(N^2)다.
다단 상호연결 네트워크(MIN)는 오메가 네트워크와 배뇨 네트워크처럼 비용과 성능의 균형을 고려한다. 팻 트리는 계층적으로 구성되며 상위로 갈수록 대역폭이 증가하는 데이터센터 표준 구조다.
배열 연산에서 가속기가 맡는 역할
벡터 프로세서는 배열 형태의 벡터 데이터에 단일 명령으로 다수의 연산을 수행하는 SIMD 구조다. 벡터 레지스터는 여러 데이터 요소를 저장하고, 벡터 기능 유닛은 파이프라인 연산을 수행한다. 벡터 로드/스토어 유닛은 메모리 접근을 담당하며 스칼라 유닛은 제어와 스칼라 연산을 처리한다.
이 구조는 높은 처리량과 메모리 대역폭 효율, 파이프라인 활용에 강점이 있어 과학 계산에 적합하다. 연속 접근인 Unit stride뿐 아니라 일정 간격의 Non-unit stride, 임의 위치를 다루는 Indexed (Gather/Scatter) 접근도 처리한다.
// 스칼라 연산 (루프)
for (i = 0; i < N; i++)
C[i] = A[i] + B[i];
// 벡터 연산 (단일 명령)
VADD V3, V1, V2 // V3 = V1 + V2 (벡터 덧셈)
GPU(Graphics Processing Unit)는 대규모 병렬 처리에 특화된 프로세서다. 수천 개의 코어, SIMT(Single Instruction, Multiple Thread), 높은 메모리 대역폭, 스레드 레벨 병렬성을 구조적 특징으로 가진다.
GPGPU(General Purpose GPU)는 그래픽 처리 이외의 범용 연산에 GPU를 활용하는 기술이다. CUDA는 NVIDIA 독점 환경, OpenCL은 표준 API, ROCm은 AMD 플랫폼, SYCL은 크로스 플랫폼 모델로 제시된다. 딥러닝·머신러닝, 과학 시뮬레이션, 금융 모델링, 영상 처리가 적용 분야다.
| 항목 | CPU | GPU |
|---|---|---|
| 코어 수 | 수십 개 | 수천 개 |
| 클럭 속도 | 높음 | 낮음 |
| 캐시 크기 | 큼 | 작음 |
| 제어 로직 | 복잡 | 단순 |
| 적합 작업 | 순차/복잡 제어 | 대규모 병렬 |
목적에 맞춘 병렬 가속기
TPU(Tensor Processing Unit)는 Google이 개발한 텐서 연산 전용 가속기다. 행렬 곱셈 유닛(MXU), 8비트 정수 연산 최적화, 높은 에너지 효율, TensorFlow 통합이 특징이다.
NPU(Neural Processing Unit)는 신경망 추론에 특화된 프로세서다. 저전력 고효율, 엣지 디바이스 탑재, 컨볼루션 가속, 양자화 지원을 목표로 한다.
FPGA(Field Programmable Gate Array)는 재구성 가능한 하드웨어로, 맞춤형 병렬 처리를 구성할 수 있다. 하드웨어 프로그래밍, 저지연, 프로토타이핑, 소량 생산에 적합하다는 특성을 가진다.
시스톨릭 어레이(Systolic Array)는 데이터가 규칙적으로 흐르는 동안 연산이 이어지는 구조다. 행렬 연산에 최적화돼 있고 높은 처리량과 낮은 메모리 대역폭 요구를 특징으로 하며, TPU의 핵심 구조다.
속도 향상은 순차 구간과 문제 크기에 좌우된다
암달의 법칙(Amdahl's Law)은 병렬화할 수 있는 부분의 비율이 전체 성능 향상을 제한한다는 점을 설명한다.
Speedup = 1 / ((1-P) + P/N)
- P: 병렬화 가능 비율
- N: 프로세서 수
순차 부분은 병목이 되며, 프로세서를 무한히 늘려도 한계는 남는다. 1-P가 10%면 최대 10배 향상이다.
구스타프슨의 법칙(Gustafson's Law)은 문제 크기가 커질수록 병렬화 효과도 커진다는 관점이다.
Scaled Speedup = N + (1-N) * s
- N: 프로세서 수
- s: 순차 비율
이 법칙은 대규모 문제에 유리하고 약한 확장성 관점에서 실제 슈퍼컴퓨팅에 적합하다.
| 지표 | 정의 | 의미 |
|---|---|---|
| 속도 향상 | T1/TN | 순차 대비 병렬 속도비 |
| 효율 | Speedup/N | 프로세서 활용도 |
| 확장성 | 프로세서 증가 시 성능 | 시스템 확장 능력 |
| 비용 효율 | 성능/비용 | 경제성 |
병렬처리기 설계에서는 Flynn 분류로 연산 형태를 먼저 파악하고, 공유 메모리·분산 메모리·하이브리드 구조 중 확장성과 프로그래밍 모델에 맞는 구성을 선택한다. 벡터 프로세서, GPU, TPU 같은 가속기는 데이터 병렬성이 큰 AI와 과학 계산에서 역할이 크다. 순차 구간의 한계를 보여 주는 암달의 법칙과 문제 크기 확대를 다루는 구스타프슨의 법칙을 함께 고려해야 한다.