스톨 (Stall)
핵심 인사이트 (3줄 요약)
파이프라인에서 명령어 실행을 잠시 멈추는 현상. 데이터 의존성이나 분기로 인해 다음 명령어를 실행할 수 없을 때 발생한다. 스톨 동안 파이프라인에 빈 공간(버블)이 생겨 성능이 저하된다.
📝 기술사 모의답안 (2.5페이지 분량)
📌 예상 문제
"스톨 (Stall)의 개념과 핵심 원리를 설명하고, 비교 분석 및 실무 적용 방안을 기술하시오."
Ⅰ. 개요
1. 개념
스톨(Stall) = 파이프라인이 잠시 멈추는 것
어떤 이유로 다음 단계를 진행할 수 없을 때, CPU는 아무것도 하지 않고 기다려야 한다. 이때 파이프라인에 빈 공간이 생기는데, 이를 버블(Bubble) 또는 **노옵(No-op)**이라고 한다.
비유: "컨베이어 벨트가 멈춤" — 앞 공정이 늦어지면 뒷공정도 대기
Ⅱ. 구성 요소 및 핵심 원리
2. 스톨이 발생하는 이유 (해저드)
| 해저드 종류 | 원인 | 예시 |
|---|---|---|
| 데이터 해저드 | 이전 명령어의 결과가 아직 안 나옴 | ADD R1 후 바로 SUB R1 사용 |
| 제어 해저드 | 분기할지 안 할지 모름 | if 문에서 어디로 갈지 결정 전 |
| 구조 해저드 | 같은 자원을 동시에 쓰려함 | 메모리 동시 접근 |
3. 분기 처리 시 스톨 상세
문제 상황
BEQ R1, R2, label ; 분기 명령어 (분기될지 모름)
ADD R3, R4, R5 ; 다음 명령어 (분기 안 되면 실행)
SUB R6, R7, R8 ; 그 다음...
파이프라인에서의 흐름
분기 명령어(BEQ)가 실행되려면 EX 단계까지 가야 분기 여부를 알 수 있음!
클럭 1: BEQ [IF]
클럭 2: BEQ [ID] ADD [IF] ← ADD를 이미 가져옴 (분기 여부 모름)
클럭 3: BEQ [EX] ADD [ID] SUB [IF] ← 여기서 분기 결정!
클럭 4: BEQ [MEM] ADD [??] SUB [??]
↑
분기하면 ADD, SUB은 실행하면 안 됨!
이미 파이프라인에 들어와 있음 → 문제!
해결 방법별 스톨
방법 1: 무조건 스톨 (가장 단순)
클럭 1: BEQ [IF]
클럭 2: BEQ [ID] [버블] ← 분기 결과 나올 때까지 대기
클럭 3: BEQ [EX] [버블]
클럭 4: BEQ [MEM] (분기 목표)[IF] ← 분기하면 여기서 새로 인출
→ 분기마다 2클럭 손실!
방법 2: 지연 슬롯 (Delay Slot)
클럭 1: BEQ [IF]
클럭 2: BEQ [ID] NOP [IF] ← 지연 슬롯: 무조건 실행되는 명령어
클럭 3: BEQ [EX] NOP [ID] target [IF]
→ 스톨을 없애고 유용한 명령어를 채워 넣음
→ MIPS에서 사용
방법 3: 분기 예측 (Branch Prediction)
예측 성공: 스톨 없음
예측 실패: 파이프라인 플러시 → 스톨 발생
예측 실패 시:
클럭 4: [플러시] [플러시] [플러시] ← 잘못 가져온 명령어 버림
클럭 5: target [IF] ← 올바른 위치에서 다시 시작
4. 데이터 해저드 스톨
문제 상황 (RAW: Read After Write)
ADD R1, R2, R3 ; R1에 결과 저장 (WB 단계에서야 완료)
SUB R4, R1, R5 ; R1을 바로 사용! (아직 R1 값이 없음)
타이밍 분석
클럭1 클럭2 클럭3 클럭4 클럭5
ADD: [IF] [ID] [EX] [MEM] [WB] ← R1은 클럭5에 확정
SUB: [IF] [ID] [EX] ← R1이 클럭3에 필요!
↑
EX 단계에서 R1이 없음 → 스톨 필요!
해결 1: 스톨 (기본)
ADD: [IF] [ID] [EX] [MEM] [WB]
SUB: [IF] [ID] [stall] [stall] [EX]...
↑ 2클럭 대기
해결 2: 포워딩 (Forwarding) — 스톨 감소
EX 단계 결과를 바로 다음 명령어의 EX로 전달
ADD: [IF] [ID] [EX] [MEM] [WB]
↓ 포워딩
SUB: [IF] [ID] [EX] [MEM] [WB]
→ 스톨 0개! (단, 바로 다음 명령어면 1개 스톨 필요할 수 있음)
6. 스톨의 성능 영향
CPI 계산
이상적 CPI = 1 (스톨 없음)
실제 CPI = 1 + 스톨 사이클 수
예:
- 분기 비율: 20%
- 분기당 스톨: 2사이클
- 실제 CPI = 1 + (0.2 × 2) = 1.4
→ 성능 40% 저하!
스톨 비용
현대 CPU (15단계 파이프라인):
- 분기 예측 실패 시: 10~15사이클 손실
- 캐시 미스: 수백 사이클
→ 분기 예측 정확도가 성능의 핵심!
7. 스톨 시각화
정상 파이프라인:
┌─────┬─────┬─────┬─────┬─────┐
│ IF │ ID │ EX │ MEM │ WB │
└─────┴─────┴─────┴─────┴─────┘
스톨 발생:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ IF │ ID │ /// │ /// │ /// │ EX │ ... │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘
↑ 스톨 (버블) — 아무 일도 안 함
8. 기술사 시험 포인트
암기할 것
스톨 = 파이프라인 대기 = 버블 = 노옵
원인 = 해저드 (데이터/제어/구조)
해결 = 포워딩, 분기예측, 지연슬롯
자주 나오는 질문
- 스톨이 발생하는 원인은?
- 분기 명령어에서 스톨이 왜 발생하는가?
- 스톨을 줄이는 방법은?
- 포워딩이 스톨을 어떻게 줄이는가?
Ⅲ. 기술 비교 분석
5. 스톨 vs 플러시
| 구분 | 스톨 (Stall) | 플러시 (Flush) |
|---|---|---|
| 의미 | 잠시 멈춤 | 비우고 다시 |
| 발생 시점 | 데이터 기다릴 때 | 분기 예측 실패 시 |
| 파이프라인 상태 | 유지 | 버림 |
| 복구 | 바로 진행 | 처음부터 다시 |
스톨: [IF][ID][stall][stall][EX]... (기다림)
플러시: [IF][ID] → X X X → 새로운 [IF]... (버림)
Ⅳ. 실무 적용 방안
**스톨 (Stall)**의 실무 적용 시나리오와 고려사항.
Ⅴ. 기대 효과 및 결론
| 효과 영역 | 내용 | 정량적 목표 |
|---|---|---|
| 성능 향상 | 처리 속도·응답 시간 개선 | 기존 대비 20~40% 향상 |
| 비용 절감 | 운영비·인프라 비용 절감 | 연간 15~30% 절감 |
| 품질/안정성 | 가용성·장애 감소 | UpTime 99.9% 이상 |
※ 참고 표준: 해당 기술 관련 NIST / ISO / IEEE / 과기정통부 가이드라인
어린이를 위한 종합 설명
스톨를 쉽게 이해해보자!
파이프라인에서 명령어 실행을 잠시 멈추는 현상. 데이터 의존성이나 분기로 인해 다음 명령어를 실행할 수 없을 때 발생한다. 스톨 동안 파이프라인에 빈 공간(버블)이 생겨 성
왜 필요할까?
기존 방식의 한계를 넘기 위해
어떻게 동작하나?
복잡한 문제 → 스톨 적용 → 더 빠르고 안전한 결과!
핵심 한 줄:
스톨 = 똑똑하게 문제를 해결하는 방법
비유: 스톨은 마치 요리사가 레시피를 따르는 것과 같아. 혼란스러운 재료들을 정해진 순서대로 조합하면 → 맛있는 요리(최적 결과)가 나오지! 🍳