스톨 (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. 기술사 시험 포인트

암기할 것

스톨 = 파이프라인 대기 = 버블 = 노옵
원인 = 해저드 (데이터/제어/구조)
해결 = 포워딩, 분기예측, 지연슬롯

자주 나오는 질문

  1. 스톨이 발생하는 원인은?
  2. 분기 명령어에서 스톨이 왜 발생하는가?
  3. 스톨을 줄이는 방법은?
  4. 포워딩이 스톨을 어떻게 줄이는가?


Ⅲ. 기술 비교 분석

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 / 과기정통부 가이드라인


어린이를 위한 종합 설명

스톨를 쉽게 이해해보자!

파이프라인에서 명령어 실행을 잠시 멈추는 현상. 데이터 의존성이나 분기로 인해 다음 명령어를 실행할 수 없을 때 발생한다. 스톨 동안 파이프라인에 빈 공간(버블)이 생겨 성

왜 필요할까?
  기존 방식의 한계를 넘기 위해

어떻게 동작하나?
  복잡한 문제 → 스톨 적용 → 더 빠르고 안전한 결과!

핵심 한 줄:
  스톨 = 똑똑하게 문제를 해결하는 방법

비유: 스톨은 마치 요리사가 레시피를 따르는 것과 같아. 혼란스러운 재료들을 정해진 순서대로 조합하면 → 맛있는 요리(최적 결과)가 나오지! 🍳