병렬 컴퓨터 아키텍처와 확장성의 이해
병렬 컴퓨터의 분류와 메모리 구조, SIMD·GPU 가속, 성능 법칙과 병렬 프로그래밍 모델을 체계적으로 정리한다.
2026-08-14 · 최초 발행 2026-01-06
단일 처리 성능의 한계를 넘는 병렬성
병렬 컴퓨터는 여러 프로세서 또는 처리 코어가 하나의 문제를 함께 처리하는 시스템이다. 단일 프로세서의 클럭 속도만으로 성능을 끌어올리기 어려워지면서, 대규모 데이터와 복잡한 계산을 다루는 방식은 병렬성 활용으로 옮겨갔다.
병렬 처리는 성능뿐 아니라 전력 효율과 처리량에도 영향을 준다. 다수의 저전력 코어를 조합해 높은 성능을 내고, 동시에 여러 작업을 처리할 수 있기 때문이다.
병렬성은 구현 위치에 따라 나뉜다.
- 비트 수준 병렬성은 데이터 경로 폭을 8bit에서 64bit로 넓히는 방식이다.
- 명령어 수준 병렬성은 파이프라인, 슈퍼스칼라, VLIW로 구현한다.
- 데이터 수준 병렬성은 SIMD, 벡터 프로세서, GPU에서 활용한다.
- 작업 수준 병렬성은 멀티코어, 멀티프로세서, 분산 시스템에서 나타난다.
병렬 프로그램은 처리 요소를 늘리는 것만으로 최적화되지 않는다. 부하 균형, 동기화, 통신 오버헤드, 메모리 일관성이 함께 관리되어야 한다.
명령과 데이터 흐름으로 보는 병렬 컴퓨터 분류
Flynn의 분류 체계는 명령어 흐름과 데이터 흐름의 수로 병렬 컴퓨터를 구분한다.
- SISD(Single Instruction, Single Data)는 전통적인 순차 컴퓨터다.
- SIMD(Single Instruction, Multiple Data)는 벡터 프로세서와 GPU에 사용된다.
- MISD(Multiple Instruction, Single Data)는 폴트 톨러런트 시스템에 쓰이며 드물다.
- MIMD(Multiple Instruction, Multiple Data)는 멀티코어와 클러스터의 형태로 구현된다.
메모리 구조도 중요한 분류 기준이다. 공유 메모리 시스템은 모든 프로세서가 단일 주소 공간을 공유한다. 분산 메모리 시스템에서는 각 프로세서가 독립 메모리를 갖는다. 하이브리드 시스템은 노드 안에서는 메모리를 공유하고, 노드 사이에서는 분산 메모리 방식으로 동작한다.
결합 강도에 따라서는 다음과 같이 구분할 수 있다.
강결합 (Tightly Coupled)
- SMP (Symmetric Multiprocessing)
- UMA (Uniform Memory Access)
- 낮은 통신 지연
약결합 (Loosely Coupled)
- 클러스터 시스템
- 분산 컴퓨팅
- 네트워크 통신
공유 메모리에서는 접근 위치와 캐시 상태가 성능을 좌우한다
UMA(Uniform Memory Access)는 모든 프로세서가 메모리에 같은 접근 시간으로 도달하는 구조다. 공통 시스템 버스로 메모리를 연결하며, 버스 경합 때문에 8-16 코어에서 확장성 제약이 생긴다. 데스크톱 멀티코어 프로세서가 적용 사례다.
NUMA(Non-Uniform Memory Access)는 로컬 메모리와 원격 메모리를 나누는 계층형 구조다. 수백 개 코어까지 확장할 수 있으며, 로컬 메모리 접근을 우선해 지역성을 최적화한다. 서버급 멀티소켓 시스템에서 사용된다.
공유 메모리에서는 캐시 일관성도 관리해야 한다. MESI 프로토콜은 Modified, Exclusive, Shared, Invalid 상태를 관리한다. 스누핑 기반 방식은 버스 트래픽을 감시해 일관성을 유지하고, 디렉토리 기반 방식은 중앙 디렉토리로 캐시 상태를 추적하며 NUMA에 사용된다.
분산 메모리는 통신 자체가 프로그램의 일부다
분산 메모리 시스템의 각 노드는 독립 주소 공간과 자체 메모리를 가진다. 데이터 교환은 명시적으로 처리해야 하며, 프로그래머가 통신을 직접 관리한다. 수천 개 노드까지 확장할 수 있고, MPI(Message Passing Interface)가 대표적인 통신 라이브러리 표준이다.
노드 사이를 연결하는 인터커넥트는 구조마다 비용과 확장성의 특성이 다르다.
- 버스는 단순하지만 확장성에 제한이 있다.
- 크로스바는 완전 연결 구조이며 비용은 O(N²)이다.
- 메시 토폴로지는 2D/3D 그리드로 연결한다.
- 토러스는 메시 구조에 랩어라운드를 추가한다.
- 하이퍼큐브는 지름이 log N이고 비용은 O(N log N)이다.
- 팻트리는 계층형 스위치 구조로 높은 대역폭을 제공한다.
같은 연산을 데이터 묶음에 적용하는 SIMD와 벡터 처리
벡터 프로세서는 여러 데이터 요소를 담는 광폭 벡터 레지스터를 사용한다. 하나의 벡터 명령어가 모든 요소에 같은 연산을 적용하므로 반복 제어 오버헤드를 줄이고 파이프라인 효율을 높일 수 있다. 메모리 대역폭은 스트라이드 접근과 프리페치 최적화의 영향을 받는다.
x86 SSE/AVX는 128/256/512비트 벡터 레지스터를 제공하며, ARM NEON은 모바일 및 임베디드 환경의 SIMD 확장이다. RISC-V V는 가변 길이 벡터 확장에 해당한다. 이러한 방식은 멀티미디어, 과학 계산, 암호화에 적용된다.
스칼라 코드:
for (i = 0; i < 1000; i++)
C[i] = A[i] + B[i];
벡터 코드 (의사코드):
for (i = 0; i < 1000; i += VECTOR_LENGTH)
V_C[i] = V_A[i] + V_B[i]; // 8-16 요소 동시 처리
GPU와 가속기는 대규모 데이터 병렬 작업에 맞춘다
GPU는 수천 개의 간단한 코어로 대규모 병렬성을 제공하며, SIMT(Single Instruction, Multiple Threads) 모델을 사용한다. 메모리는 글로벌, 공유, 레지스터 계층으로 나뉘고, 워프 또는 웨이는 32-64 스레드를 하나의 그룹으로 실행한다.
CUDA와 OpenCL에서는 병렬 실행할 코드 블록을 커널 함수로 작성한다. 스레드는 Grid → Block → Thread 계층으로 구성되며, 호스트와 디바이스 사이의 메모리 전송은 명시적으로 관리한다. 블록 안에서는 스레드 동기화도 지원한다.
CPU vs GPU (이론 성능 비교)
- CPU: ~1 TFLOPS, 100GB/s 메모리 대역폭
- GPU: ~10-30 TFLOPS, 500-1000GB/s 메모리 대역폭
- 적합 작업: 데이터 병렬성 높은 규칙적 계산
- 부적합 작업: 복잡한 제어 흐름, 불규칙 메모리 접근
가속비는 순차 구간과 문제 크기에 의해 제한된다
Amdahl의 법칙은 병렬화할 수 없는 순차 부분이 전체 성능 한계를 결정한다는 관점이다.
병렬 가속비 = 1 / [(1 - P) + P / N]
- P: 병렬화 가능한 부분의 비율
- N: 프로세서 수
- 순차 부분이 성능 한계 결정
Gustafson의 법칙은 프로세서 수에 따라 문제 크기가 증가하는 상황을 다룬다. 이 관점에서는 강한 확장성보다 약한 확장성이 현실적이다.
병렬 가속비 = N - (1 - P) × (N - 1)
- 문제 크기가 프로세서 수에 따라 증가
- 강한 확장성보다 약한 확장성이 현실적
병렬 효율은 가속비 / 프로세서 수 × 100%로 계산한다. 강한 확장성은 문제 크기를 고정한 채 프로세서를 늘리는 경우이며, 약한 확장성은 프로세서당 작업량을 일정하게 유지한다.
메모리 모델에 맞춰 프로그래밍 방식을 고른다
공유 메모리 프로그래밍에는 Pthreads, OpenMP, TBB(Threading Building Blocks)가 있다. Pthreads는 POSIX 스레드 API이고, OpenMP는 #pragma omp parallel 같은 지시어 기반 병렬화를 제공한다. TBB는 C++의 고수준 병렬 패턴을 제공한다. 동기화에는 Mutex, Semaphore, Barrier, Atomic Operations를 사용한다.
분산 메모리 프로그래밍에서는 MPI의 MPI_Send, MPI_Recv로 메시지를 주고받는다. Broadcast, Scatter, Gather, Reduce 같은 집합 통신을 사용하며, 통신자 그룹으로 프로세스 그룹과 토폴로지를 정의한다. 논블로킹 전송은 통신과 계산을 겹칠 수 있게 한다.
MPI + OpenMP 모델:
- 노드 간: MPI로 분산 메모리 통신
- 노드 내: OpenMP로 공유 메모리 병렬화
- 계층적 병렬성 활용
이기종 처리와 메모리 중심 구조의 변화
이기종 컴퓨팅은 CPU와 GPU의 협업, FPGA 통합, TPU·NPU 같은 AI 가속기를 포함한다. CUDA Unified Memory와 HIP는 통합 메모리와 관련된다.
메모리 중심 컴퓨팅에서는 HBM(High Bandwidth Memory)의 3D 적층 메모리, CXL(Compute Express Link)의 메모리 풀링 및 공유, 메모리 내부에서 연산하는 Processing-in-Memory, 데이터 이동을 줄이는 Near-Data Processing이 주요 요소다.
엑사스케일 컴퓨팅은 10¹⁸ FLOPS(엑사플롭스)를 달성하는 슈퍼컴퓨터를 다룬다. 성능당 전력 소비를 줄이고 대규모 시스템의 장애에 대응하는 탄력적 복원력이 필요하다. 기후 모델링, 분자 시뮬레이션, AI 학습이 적용 분야다.
병렬 컴퓨터의 효과는 처리 요소 수보다 작업 분할, 데이터 이동, 동기화 비용, 그리고 선택한 프로그래밍 모델에 달려 있다. 멀티코어부터 수만 개 노드의 슈퍼컴퓨터까지 아키텍처가 달라지는 만큼, 하드웨어 구조에 맞는 병렬성의 계층을 선택해야 한다.