반응형
컴퓨터구조 시험에서 "CPU 처리 속도를 극대화하는 하드웨어 병렬성"에 대해 물어볼 때 가장 핵심이 되는 기법이 바로 파이프라이닝(Pipelining)입니다.
"하나의 명령어가 끝나지 않았는데 다음 명령어를 동시에 실행할 수 있을까?"
"파이프라인 해저드(Hazard)가 발생하면 CPU는 어떻게 이를 해결할까?"
파이프라이닝의 비유적 개념부터 대표적인 RISC 5단계 파이프라인, 성능 향상 계산 원리, 그리고 시험 단골 계산/서술형 문제인 3가지 해저드(Hazard)의 발생 원인과 해결 방법까지 깔끔하게 정리해 드립니다!
1. 파이프라이닝(Pipelining)이란?
파이프라이닝은 하나의 명령어를 여러 단계로 나누고, 각 단계를 독립적인 하드웨어 모듈이 처리하도록 하여 여러 명령어를 중첩(Overlap)되게 병렬로 실행하는 기법입니다.
- 세탁소 비유:
- 비파이프라인 방식: 세탁(1시간) -> 건조(1시간) -> 다림질(1시간)을 끝내서 손님 A의 옷을 마친 뒤에야 손님 B의 세탁을 시작함. (총 3시간 소요)
- 파이프라인 방식: 손님 A의 세탁이 끝나고 건조로 넘어가면, 건조되는 동안 손님 B의 세탁을 즉시 시작함. (각 단계의 하드웨어 가동률 극대화)

2. 대표적인 RISC 5단계 파이프라인 (★시험 단골)
컴퓨터구조 시험에서 가장 기본이 되는 MIPS/RISC 5단계 파이프라인 구조입니다.
- IF (Instruction Fetch): 메모리로부터 실행할 명령어를 가져옴
- ID (Instruction Decode / Register Read): 명령어를 해독하고 필요한 레지스터 값을 읽음
- EX (Execute / Address Calculation): ALU를 통해 산술/논리 연산을 수행하거나 메모리 주소를 계산함
- MEM (Memory Access): 데이터 메모리에 접근하여 값을 읽거나 씀 (Load/Store 명령어)
- 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) |
반응형
'전공과목 > 컴퓨터 구조' 카테고리의 다른 글
| [컴퓨터구조] 메모리 계층 구조(Memory Hierarchy)와 캐시 메모리 원리 완전 정리 (시험 단골 주제) (0) | 2026.08.14 |
|---|---|
| [컴퓨터구조] 메모리 계층 구조(Memory Hierarchy)와 캐시 메모리 원리 완전 정리 (시험 단골 주제) (0) | 2026.08.13 |
| 컴퓨터 구조란? (1) | 2024.08.23 |