본문 바로가기
전공과목/컴퓨터 구조

[컴퓨터구조] CPU 파이프라이닝(Pipelining) 개념, 성능 향상 원리, 파이프라인 해저드 3종 완벽 정리

by 아임코딩 2026. 8. 21.
반응형

컴퓨터구조 시험에서 "CPU 처리 속도를 극대화하는 하드웨어 병렬성"에 대해 물어볼 때 가장 핵심이 되는 기법이 바로 파이프라이닝(Pipelining)입니다.

"하나의 명령어가 끝나지 않았는데 다음 명령어를 동시에 실행할 수 있을까?"

"파이프라인 해저드(Hazard)가 발생하면 CPU는 어떻게 이를 해결할까?"

파이프라이닝의 비유적 개념부터 대표적인 RISC 5단계 파이프라인, 성능 향상 계산 원리, 그리고 시험 단골 계산/서술형 문제인 3가지 해저드(Hazard)의 발생 원인과 해결 방법까지 깔끔하게 정리해 드립니다!

1. 파이프라이닝(Pipelining)이란?

파이프라이닝하나의 명령어를 여러 단계로 나누고, 각 단계를 독립적인 하드웨어 모듈이 처리하도록 하여 여러 명령어를 중첩(Overlap)되게 병렬로 실행하는 기법입니다.

  • 세탁소 비유:
    • 비파이프라인 방식: 세탁(1시간) -> 건조(1시간) -> 다림질(1시간)을 끝내서 손님 A의 옷을 마친 뒤에야 손님 B의 세탁을 시작함. (총 3시간 소요)
    • 파이프라인 방식: 손님 A의 세탁이 끝나고 건조로 넘어가면, 건조되는 동안 손님 B의 세탁을 즉시 시작함. (각 단계의 하드웨어 가동률 극대화)

클럭 주기에 따라 중첩되어 실행되는 5단계 CPU 파이프라이닝 과정. 출처: GeeksforGeeks

2. 대표적인 RISC 5단계 파이프라인 (★시험 단골)

컴퓨터구조 시험에서 가장 기본이 되는 MIPS/RISC 5단계 파이프라인 구조입니다.

  1. IF (Instruction Fetch): 메모리로부터 실행할 명령어를 가져옴
  2. ID (Instruction Decode / Register Read): 명령어를 해독하고 필요한 레지스터 값을 읽음
  3. EX (Execute / Address Calculation): ALU를 통해 산술/논리 연산을 수행하거나 메모리 주소를 계산함
  4. MEM (Memory Access): 데이터 메모리에 접근하여 값을 읽거나 씀 (Load/Store 명령어)
  5. WB (Write Back): 연산된 최종 결과값을 다시 레지스터에 기록함

3. 파이프라이닝의 성능 향상 원리

파이프라이닝은 단일 명령어 하나를 처리하는 시간(Latency) 자체를 줄여주는 것은 아닙니다. 대신 단위 시간당 처리하는 명령어의 개수인 처리량(Throughput)을 대폭 늘려줍니다.

  • 이상적인 속도 향상(Speedup) 공식:
    • 파이프라인 단계 수를 k개라고 할 때, 명령어 수가 아주 많아지면 이상적인 속도 향상 비율은 최대 k배에 수렴합니다.
    • 예: 5단계 파이프라인 처리 시, 비파이프라인 방식에 비해 최대 5배 가까이 빠른 명령어 처리량을 얻을 수 있습니다.

4. 파이프라인 성능의 걸림돌: 파이프라인 해저드 (Pipeline Hazard)

이상적으로는 매 클럭마다 1개의 명령어가 완료되어야 하지만, 실제로는 여러 이유로 파이프라인이 멈추는 지연(Stall / Bubble) 현상이 발생합니다. 이를 해저드(Hazard)라고 하며, 시험 단골 1순위 주제입니다.

1️⃣ 구조적 해저드 (Structural Hazard)

  • 원인: 서로 다른 단계에 있는 두 개 이상의 명령어가 동시에 동일한 하드웨어 자원을 사용하려고 충돌할 때 발생합니다.
  • 대표 예시: 1번째 명령어가 MEM 단계에서 메모리를 읽고 있는데, 4번째 명령어가 IF 단계에서 명령어를 가져오기 위해 동일한 메모리에 접근하려는 경우.
  • 해결책:
    • 하드웨어 자원 추가 설치 (예: 명령어 전용 메모리/캐시와 데이터 전용 메모리/캐시 분리 -> Harvard Architecture 적용).

2️⃣ 데이터 해저드 (Data Hazard)

  • 원인: 이전 명령어의 연산 결과가 레지스터에 아직 기록되지 않았는데(WB 미완료), 다음 명령어가 그 값을 읽어서 사용하려 할 때(RAW: Read-After-Write) 발생합니다.
  • 해결책:
    • 파이프라인 포워딩 (Forwarding / Bypassing): WB 단계까지 기다리지 않고, EX 단계나 MEM 단계에서 연산된 결과를 전용 하드웨어 회로를 통해 다음 명령어의 연산 입력으로 직접 전달해 줍니다.
    • 지연(Stall) 삽입: 포워딩으로 해결이 불가능한 경우(예: Load 명령어 직후 바로 연산하는 Load-Use Hazard)에는 NOP(No Operation) 버블을 삽입하여 1클럭 지연시킵니다.

3️⃣ 제어 해저드 (Control Hazard)

  • 원인: 조건 분기 명령어(Branch / Jump)를 만났을 때, 분기 성공 여부와 목적지 주소가 결정되기 전에 다음 명령어를 미리 파이프라인에 가져와서 발생합니다.
  • 해결책:
    • 분기 예측 (Branch Prediction): 분기가 성공할지 실패할지 미리 예측(정적/동적)하여 명령어를 미리 실행하고, 예측이 틀렸을 때만 파이프라인을 비움(Flush).
    • 지연 분기 (Delayed Branch): 분기 명령어 바로 뒤에 분기 여부와 상관없이 항상 실행해야 하는 무관한 명령어를 배치하도록 컴파일러가 조정.

5. 한눈에 끝내는 핵심 요약표 (★시험 필수)

해저드 종류 주요 원인 핵심 해결 기법
구조적 해저드 (Structural) 동일한 하드웨어 자원에 동시 접근 충돌 하드웨어 분리 (명령어/데이터 캐시 분리)
데이터 해저드 (Data) 이전 명령어의 결과를 바로 읽어 사용하려 함 (RAW) 포워딩 (Forwarding), 지연(Stall) 삽입
제어 해저드 (Control) 분기 명령어(Branch)로 인한 다음 실행 주소 불확실성 분기 예측 (Branch Prediction), 파이프라인 플러시(Flush)
반응형