콘텐츠로 바로가기

Parallel & Multicore Mechanics

단일 코어의 한계를 넘어 명령어, 데이터, 태스크 수준에서 병렬 처리를 수행하는 물리적 메커니즘을 다루는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

computer-architecture-embedded-systemscomputer-architectureembedded-systemsparallelmulticore-mechanicsarchitecture-hardwarelearningmulticore9 min read

1. Overview

병렬 및 멀티코어 역학(Parallel & Multicore Mechanics, PMM)은 CPU 클록 주파수(Clock Speed) 향상이 전력 및 발열 문제(Power Wall)로 한계에 부딪힌 이후, 하드웨어가 연산 성능을 지속적으로 스케일업(Scale-up)하기 위해 채택한 '동시 처리(Concurrency & Parallelism)'의 물리적 토대를 다룹니다.

이 영역은 무어의 법칙(Moore's Law) 이후 대두된 멀티코어 및 가속기 패러다임을 이해하는 엔지니어링의 핵심입니다. 단일 파이프라인 내부에서 명령어의 순서를 바꾸는 명령어 수준 병렬성(ILP)부터, 거대한 배열을 한 번에 계산하는 벡터 연산(SIMD), 운영체제 스레드를 하드웨어 코어로 매핑하는 스레드 수준 병렬성(TLP), 그리고 코어 간 데이터를 동기화하는 하드웨어 메모리 락(Lock)에 이르기까지 전 방위적인 병렬 처리 메커니즘을 파헤칩니다. 학습자는 단순히 스레드를 여러 개 생성하는 코딩을 넘어, 하드웨어가 제공하는 병렬 자원을 메모리 일관성(Consistency) 파괴나 버스 병목(Bottleneck) 없이 효율적으로 활용할 수 있는 아키텍처 레벨의 소프트웨어 튜닝 역량을 갖춥니다.

2. Scope & Boundaries

In-Scope

  • 명령어 수준 병렬성 (ILP, Instruction-Level Parallelism): 슈퍼스칼라(Superscalar), 비순차 실행(Out-of-Order Execution, OoO), 리오더 버퍼(ROB), 레지스터 르네이밍, 분기 예측(Branch Prediction).
  • 데이터 수준 병렬성 (DLP, Data-Level Parallelism): 벡터 아키텍처(Vector Processor), SIMD(Single Instruction Multiple Data) 확장 명령어 셋(AVX, SSE) 기반 고속 연산.
  • 스레드 수준 병렬성 (TLP) 및 토폴로지: 하이퍼스레딩(SMT), 멀티코어/매니코어(Many-core) 설계, 이종 코어 아키텍처(big.LITTLE), 칩 내부 네트워크(NoC).
  • 멀티프로세서 캐시 일관성 및 동기화: MESI/MOESI 프로토콜, 디렉토리(Directory) 및 스누핑(Snooping) 기반 일관성 제어, 하드웨어 메모리 배리어(Memory Barrier), 원자적 연산(CAS, Compare-And-Swap).

Out-of-Scope

  • GPU 전용 렌더링 파이프라인: 그래픽 렌더링을 위한 셰이더 프로그래밍(GLSL/HLSL), 텍스처 래스터화 유닛 설계 → 12. Human-Computer Interaction & Graphics 영역으로 위임.
  • 운영체제 스레드 스케줄링: OS 커널 레벨의 컨텍스트 스위칭(Context Switching), 타임 슬라이스(Time Slice) 할당, 프로세스 상태 큐 관리 → 03-01. OS Process & Threads 영역으로 위임.
  • 소프트웨어 락/동시성 알고리즘 응용: 데드락(Deadlock) 방지 알고리즘, 세마포어(Semaphore) 및 뮤텍스(Mutex)의 논리적 소프트웨어 사용법 → 03-02. Concurrency Programming04. DSA로 위임.

Boundaries

  • PMM vs Distributed Systems (07): PMM은 '하나의 마더보드 위에서 메모리와 시스템 버스를 물리적으로 공유'하는 밀결합(Tightly-coupled) 병렬성을 다룹니다. 반면 분산 시스템(Distributed Systems)은 '완전히 독립된 머신들이 이더넷 네트워크를 통해 메시지를 주고받는' 소결합(Loosely-coupled) 환경에서의 병렬 처리를 다룹니다.

3. Counterexample

  • 동기화 병목을 모르는 맹목적 멀티스레딩 (Thread Bloat): 빅데이터를 연산할 때 무작정 Thread 객체를 100개 만들어 실행하는 코드를 짜는 것은 PMM적 사고가 아닙니다. 이 방식이 **암달의 법칙(Amdahl's Law)**에 의해 한계에 부딪히며, 코어들이 동일한 캐시 라인을 수정하려 할 때 발생하는 캐시 핑퐁(False Sharing)과 스누핑 대역폭 포화로 인해 싱글 스레드보다 오히려 처리 속도가 급락할 수 있음을 물리적 메커니즘으로 증명하고 회피(Padding, Thread-local storage)할 수 있어야 합니다.
  • 조건문이 가득한 SIMD 강제 적용 (Divergence): 데이터 병렬성(SIMD)만 믿고 내부 루프에 복잡한 if-else 분기문이 섞인 배열 연산을 강제로 AVX 명령어로 처리하려는 시도는 실패합니다. SIMD 하드웨어 유닛은 구조적으로 '하나의 연산을 여러 데이터에 동시 적용'하므로, 분기가 엇갈리면(Divergence) 마스킹 처리로 인해 연산 유닛이 휴면 상태(Idle)에 빠져 성능 이득이 사라진다는 하드웨어적 구조를 인지해야 합니다.

4. Prerequisites

  • 디지털 논리 및 프로세서 물리 (Basic): 5-Stage 기본 파이프라인의 데이터/제어 해저드(Hazard) 원리와 데이터패스 흐름을 완전히 숙지해야 비순차 실행(OoO)을 이해할 수 있습니다. (02-01. DLP)
  • 메모리 시스템 및 저장 물리 (Recommended): 캐시 일관성 프로토콜을 이해하기 위해, SRAM 캐시 계층 구조와 블록(Cache Line) 매핑 지식이 필수적입니다. (02-02. SSP)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 Pipeline & OoO (ILP) 파이프라인 중첩을 넘어서, 하드웨어가 스스로 명령어 순서를 재배치(비순차 실행)하고 분기를 예측하여 코어 유휴 시간을 없애는 원리를 파악합니다. P1/Multi
2 Data Parallelism (SIMD) 단일 명령어로 거대한 배열 데이터 블록을 일괄 처리하는 벡터 프로세서와 SIMD 레지스터 아키텍처를 학습합니다. P1/Multi
3 Multicore & Coherency 다중 코어 환경에서 각자의 L1 캐시가 동일한 메모리 주소를 가리킬 때 발생하는 데이터 충돌을 하드웨어가 어떻게(MESI) 조율하는지 분석합니다. P2
4 Scale Limits & Topology 암달의 법칙을 통해 스케일업의 물리적 한계 임계점을 도출하고, 칩 내부 네트워크(NoC) 및 이종 코어(big.LITTLE) 라우팅을 설계합니다. Industry

6. Learning Topics

Basic

Core Topic 01: 명령어 병렬성과 비순차 마이크로아키텍처 (ILP & Out-of-Order Execution)

  • Why to Learn: 단일 코어 내부의 산술 유닛(ALU)이 메모리 응답을 기다리며 노는 시간을 극한으로 줄이고, 클록당 명령어 처리량(IPC)을 소프트웨어 재컴파일 없이 끌어올리기 위함입니다.
  • What to Learn:
    • Concepts: 슈퍼스칼라(Superscalar), 비순차 실행(OoO), 리오더 버퍼(ROB, Reorder Buffer), 레지스터 르네이밍(Register Renaming).
    • Skills: 데이터 의존성(RAW, WAR, WAW) 회피 기법 분석, 분기 예측기(Branch Predictor) 적중 실패(Misprediction) 패널티 산출.
    • Tools: 명령어 스케줄링 타이밍 다이어그램, 프로파일링 툴(perf).
    • Trade-offs: 비순차 스케줄러 창(Window) 크기를 늘려 얻는 병렬성 탐색 이득 vs 스케줄러 로직 회로가 차지하는 칩 면적 및 전력 소모(Power Wall).
  • How to Learn:
    • 1단계: 순차적 어셈블리 코드 1: A=1; 2: B=2; 3: C=A+B; 4: D=3; 에서 의존성이 없는 4번 명령어(D=3)가 3번(C=A+B)보다 먼저 실행(Out-of-Order)될 수 있는지, 이슈 큐(Issue Queue)와 ROB의 하드웨어 역할을 도식화합니다.
    • 2단계: 배열을 정렬한 후 조건문(if arr[i] < 128)을 실행할 때와 정렬하지 않고 실행할 때의 속도 차이를 C++로 벤치마크하고, 분기 예측(Branch Prediction) 파이프라인 플러시(Flush) 관점에서 결과를 설명합니다.
  • Implement: 입력된 명령어 리스트의 데이터 의존성(RAW/WAR/WAW)을 검사하고, 레지스터 르네이밍을 모사하여 동시에 발급(Issue) 가능한 명령어 묶음을 출력하는 비순차 스케줄러 파이썬 시뮬레이터 작성.

Core Topic 02: 데이터 병렬성과 SIMD 가속 (Data Parallelism & Vectorization)

  • Why to Learn: 머신러닝 모델 추론, 오디오/비디오 인코딩, 빅데이터 행렬 연산 시, 코어 클록 주파수를 높이지 않고도 처리 속도를 4~16배 폭발적으로 가속하기 위해서입니다.
  • What to Learn:
    • Concepts: SIMD(Single Instruction Multiple Data), 벡터 레지스터(Vector Register), 플린의 분류(Flynn's Taxonomy), 루프 언롤링(Loop Unrolling).
    • Skills: 인텔 AVX/SSE 및 ARM NEON 확장 명령어 세트 활용, 메모리 주소 16/32바이트 정렬(Memory Alignment).
    • Tools: C/C++ 하드웨어 Intrinsic 라이브러리, 컴파일러 자동 벡터화(Auto-vectorization) 옵션 확인(GCC -O3, -fopt-info-vec).
    • Trade-offs: SIMD 적용 시 얻는 높은 연산 스루풋 향상 vs 내부 조건 분기(If-else)가 발생할 경우 데이터 플로우가 깨지며(Divergence) 하드웨어 마스킹으로 인해 병렬성이 줄어드는 페널티.
  • How to Learn:
    • 1단계: 1,000만 개 크기의 float 배열 덧셈을 표준 for 루프로 돌렸을 때와, C++ Intrinsic(예: _mm256_add_ps)을 통해 256비트 AVX 레지스터로 8개씩 묶어 처리했을 때의 런타임과 어셈블리 코드를 비교 벤치마크합니다.
    • 2단계: 구조체 배열(AoS: Array of Structures) 포맷보다 배열 구조체(SoA: Structure of Arrays) 포맷이 캐시 연속성 및 SIMD 벡터 로드(Load)에 왜 유리한지 메모리 덤프를 보며 분석합니다.
  • Implement: SIMD Intrinsic 명령어를 직접 사용하여, 고해상도(4K) 흑백 이미지 배열의 픽셀 밝기 값을 병렬로 증가시키고 클리핑(Clipping, 255 초과 방지) 처리를 고속으로 수행하는 이미지 필터 모듈.

Practical

Core Topic 03: 멀티코어 캐시 일관성과 동기화 물리 (Multicore & Coherency)

  • Why to Learn: 다수의 스레드가 동시 다발적으로 데이터를 수정할 때, 하드웨어 기저에서 L1/L2 캐시들이 서로 충돌하지 않도록 동기화를 조율하는 버스(Bus) 메커니즘을 통제하기 위함입니다.
  • What to Learn:
    • Concepts: 하이퍼스레딩(SMT, Simultaneous Multithreading), 캐시 일관성(Cache Coherency), MESI/MOESI 상태 전이 프로토콜, 스누핑(Snooping).
    • Skills: 버스 스누핑에 의한 캐시 무효화(Invalidation) 트래픽 추적, 하드웨어 배리어(Memory Fence)와 원자적 연산(Compare-And-Swap)의 물리적 동작 이해.
    • Tools: 멀티코어 캐시 트래픽 시뮬레이터 (예: Gem5, Valgrind DRD).
    • Trade-offs: 완벽한 스누핑 프로토콜 회로가 제공하는 개발자의 프로그래밍 용이성 보장 vs 코어 개수 16개 이상 확장 시 브로드캐스트 버스 트래픽 잼(Traffic Jam)으로 인한 기하급수적 성능 하락.
  • How to Learn:
    • 1단계: 듀얼 코어 시스템에서 Core 0이 공유 변수 X를 수정하여 캐시 라인이 M(Modified) 상태가 되었을 때, Core 1이 이 변수 X를 읽으려 하면 시스템 버스에서 어떤 신호(Snoop Hit)가 발생하고 캐시 상태가 어떻게 전이되는지 다이어그램으로 그립니다.
    • 2단계: 두 스레드가 서로 독립적인 변수(var1, var2)를 수정하지만 이 변수들이 공교롭게도 같은 64바이트 캐시 라인에 위치할 때(False Sharing) 발생하는 극심한 성능 저하 현상을 코드로 재현하고 회피(Padding)해 봅니다.
  • Implement: MESI 프로토콜의 4가지 상태를 지닌 캐시 블록 객체를 구현하여, 여러 코어가 읽기/쓰기 명령을 내릴 때 상태 전이 로직에 따라 버스 브로드캐스트(Invalidate 등) 카운트를 누적시키는 일관성 시뮬레이터.

Advanced

Core Topic 04: 암달의 법칙과 확장 제약 물리 (Scale Limits & Network-on-Chip)

  • Why to Learn: 병렬 하드웨어 리소스(코어 개수)를 무한정 늘린다고 소프트웨어 성능이 정비례하지 않는 수학적 한계를 인지하고, 전력 예산(Power Budget) 제약 하에서 칩 토폴로지를 최적 설계하기 위함입니다.
  • What to Learn:
    • Concepts: 암달의 법칙(Amdahl's Law), 이종 코어 아키텍처(Heterogeneous Computing, big.LITTLE), 칩 내부 네트워크(NoC, Network-on-Chip).
    • Skills: 스레드 병렬화 한계 임계점(Speedup Limit) 수치적 도출, 링(Ring)/메시(Mesh) 버스 라우팅 토폴로지 분석.
    • Tools: 다중 코어 시스템 아키텍처 토폴로지 분석 툴.
    • Trade-offs: 범용 코어(CPU) 확장에 의한 유연성 및 프로그래밍 용이성 확보 vs 도메인 특화 가속기 코어(ASIC, NPU) 배치를 통한 높은 전성비(Performance-per-Watt) 효율성 간의 선택.
  • How to Learn:
    • 1단계: 프로그램 소스 코드 중 20%가 순차적으로만 실행되어야 하는 동기화 구역(직렬 파트)일 때, 코어를 100개, 1000개 늘려도 이론적 최대 성능 향상이 5배(1 / 0.2)로 수렴한다는 사실을 암달의 법칙 수식으로 명확히 증명합니다.
    • 2단계: 최신 스마트폰 AP(Application Processor) 또는 애플 M시리즈 칩 설계도를 참조하여, 고성능(Performance) 코어와 고효율(Efficiency) 코어가 어떤 링(Ring)/메시(Mesh) 버스 구조를 통해 L3 캐시를 서로 공유하는지 데이터 패킷 흐름을 분석합니다.
  • Implement: 순차 실행 코드의 비율(%)과 투입할 코어 개수(NN), 그리고 스레드 간 동기화 오버헤드 상수(스누핑 딜레이)를 입력받아, 단순 암달의 법칙 예측 곡선과 오버헤드를 반영한 실제 벤치마크 성능 곡선을 나란히 플로팅(Plotting)하는 모델링 스크립트.

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core/misused/legacy)
ILP (명령어 병렬성) 단일 프로세서 내부에서 여러 명령어를 동시에 겹쳐 실행하는 물리적 능력입니다. 기본 성능 모델 Pipelining TLP / DLP 코어가 많아지는 것으로 오해함 P1:CS2023/Parallelism core
SIMD (단일 명령어 다중 데이터) 하나의 명령어로 여러 데이터 요소에 대해 동일한 연산을 동시에 수행하는 기법입니다. 추천 대량 연산 Vector, AVX MIMD 단순 스레드 병렬화로 혼동함 P1:CS2023/Multiprocessing core
Coherence (캐시 일관성) 여러 코어의 캐시에 복사된 동일 주소 데이터가 모두 최신 상태를 유지하도록 하는 성질입니다. 실무 데이터 무결성 MESI Consistency 메모리 일관성과 혼동하기 쉬움 Industry DDI core
Amdahl's Law (암달의 법칙) 프로그램의 병렬화할 수 없는 영역에 의해 전체 성능 향상이 제한된다는 통계적 수치 법칙입니다. 추천 설계 한계 Speedup Gustafson's Law 코어 개수와 비례한다고 오해 SWEBOK core

8. References

Primary References

Secondary References

  • [Computer Architecture: A Quantitative Approach] Hennessy & Patterson — Advanced reference.
  • [A Primer on Memory Consistency and Cache Coherence] Sorin et al. — Deep dive into multi-core logic.

Industry References

  • [Intel 64 and IA-32 Architectures Optimization Reference Manual] — Real-world parallel tuning.
  • [NVIDIA GPGPU Programming Guide] — Foundation for data parallelism.

9. Final Checklist

Primary Checklist

  • 파이프라인의 구조적/데이터 해저드를 식별하고 이를 해결하기 위한 하드웨어 기법을 설명할 수 있는가? (P1)
  • SIMD 명령어와 일반 Scalar 명령어의 하드웨어 실행 유닛 사용 차이를 아는가? (P1)

Secondary Checklist

  • 캐시 일관성 유지를 위해 버스에서 발생하는 신호 부하와 데이터 동기화 비용을 인지하고 있는가?
  • 암달의 법칙을 적용하여 특정 태스크에 대한 멀티코어 확장의 상한 성능을 예측할 수 있는가?

Industry Checklist

  • 멀티코어 환경에서 메모리 배리어(Memory Barrier)가 필요한 물리적 이유를 하드웨어 재배치 관점에서 설명 가능한가? (SFIA)
  • big.LITTLE과 같은 이종 아키텍처 환경에서 전력 효율을 고려한 작업 할당 원리를 이해했는가?

Architecture Hardware

4 / 9