Skip to Content
독학사독학사 4단계통합컴퓨터시스템07. 파이프라인 해저드와 처리 2

이번 문서의 목표: 이 파일을 다 읽으면 데이터 해저드와 제어 해저드가 발생하는 비율과 스톨 비용이 주어졌을 때 유효 CPI(effective CPI)를 계산하고, 포워딩과 분기 예측이 그 유효 CPI를 각각 얼마나 낮추는지 숫자로 비교할 수 있다.

이 편에서 다시 짚어야 할 것과 새로 풀어야 할 것

구조적·데이터·제어 해저드의 정의와 발생 원인, 포워딩·스톨·분기 예측이라는 해결 기법의 개념은 이미 독학사 2단계 컴퓨터구조 19편에서 다뤘다. 그 편은 “해저드가 왜 발생하는가”와 “어떤 기법으로 완화하는가”까지만 정성적으로 설명했고, “그래서 성능이 정확히 얼마나 떨어지고, 완화 기법을 쓰면 얼마나 회복되는가”는 다루지 않았다. 이 편은 07편에서 세운 “실행시간 = 명령어 수 × CPI × 클록 주기” 공식 위에, 해저드가 만드는 추가 스톨(stall) 비용을 CPI에 정량적으로 얹어 계산한다.

요약 복습

쉽게 말하면: 해저드는 파이프라인이 매끄럽게 흐르지 못하고 멈추거나 잘못된 명령어를 처리할 뻔하는 상황이다.

해저드 종류발생 원인대표 해결책자세히 다루는 편
구조적 해저드두 단계가 같은 하드웨어 자원을 동시에 요구자원 분리2단계 컴퓨터구조 19편
데이터 해저드뒤 명령어가 앞 명령어의 미완성 결과값에 의존포워딩(forwarding), 스톨(stall)2단계 컴퓨터구조 19편
제어 해저드분기 여부가 늦게 확정돼 뒤 명령어를 잘못 인출분기 예측(branch prediction), 지연2단계 컴퓨터구조 19편

유효 CPI: 이상적인 CPI에 스톨 비용을 더하기

쉽게 말하면: 파이프라인이 한 치의 걸림 없이 흐르면 CPI는 1이지만, 실제로는 해저드 때문에 명령어마다 평균적으로 조금씩 추가 클록이 더 든다. 그 추가분을 다 더한 값이 유효 CPI다.

유효 CPI(effective CPI)는 이상적인 CPI(파이프라인이 완벽하게 채워졌을 때의 값, 보통 1)에 해저드로 인한 평균 스톨 클록 수를 더한 값이다.

CPI유효=CPI이상+(해저드 종류별 발생 비율×해저드 1회당 스톨 클록 수)\text{CPI}_{\text{유효}} = \text{CPI}_{\text{이상}} + \sum(\text{해저드 종류별 발생 비율} \times \text{해저드 1회당 스톨 클록 수})
  • CPI이상\text{CPI}_{\text{이상}}: 해저드가 전혀 없을 때의 CPI(이 편에서는 1로 둔다)
  • 해저드 종류별 발생 비율: 전체 명령어 중 그 해저드가 발생하는 명령어의 비율(0~1)
  • 해저드 1회당 스톨 클록 수: 그 해저드가 발생했을 때 파이프라인이 추가로 멈추는 클록 수(스톨 페널티, stall penalty)

예제: 데이터 해저드와 제어 해저드가 함께 있는 경우

어떤 5단계 파이프라인에서 다음 조건이 주어졌다.

  • 전체 명령어의 20퍼센트(비율 0.20)가 데이터 해저드를 일으키며, 포워딩 없이 처리하면 1회당 1클록의 스톨이 필요하다.
  • 전체 명령어의 15퍼센트(비율 0.15)가 분기 명령어이며, 분기 예측 없이 처리하면 1회당 2클록의 스톨(분기 페널티, branch penalty)이 필요하다.

1단계: 데이터 해저드로 인한 평균 스톨 클록 수를 구한다.

0.20×1=0.20클록/명령어0.20 \times 1 = 0.20\text{클록/명령어}

2단계: 제어 해저드로 인한 평균 스톨 클록 수를 구한다.

0.15×2=0.30클록/명령어0.15 \times 2 = 0.30\text{클록/명령어}

3단계: 이상적인 CPI에 두 스톨 비용을 더한다.

CPI유효=1+0.20+0.30=1.50\text{CPI}_{\text{유효}} = 1 + 0.20 + 0.30 = 1.50

결과 해석: 이상적으로는 CPI가 1이어야 하지만, 데이터 해저드와 제어 해저드 때문에 명령어 하나당 평균 0.5클록이 더 걸려 실제 CPI는 1.50이다. 07편의 공식에 대입하면, 이 CPI 증가분은 그대로 실행시간 증가로 이어진다. 이상적인 경우 대비 실행시간이 몇 퍼센트 늘었는지는 CPI의 증가 비율로 바로 알 수 있다.

1.5011×100=50퍼센트\frac{1.50 - 1}{1} \times 100 = 50\text{퍼센트}

즉 해저드 때문에 실행시간이 이상적인 경우보다 약 50퍼센트(50%) 더 걸린다.

시험 함정: 유효 CPI를 구할 때 “발생 비율”과 “스톨 클록 수”를 곱하지 않고 그냥 더해 버리는 실수가 잦다. 예를 들어 데이터 해저드 항을 0.20+1=1.200.20+1=1.20으로 계산하면 틀린다. 발생 비율(전체 명령어 중 몇 퍼센트가 그 해저드를 겪는지)과 1회당 비용(그 해저드 하나가 몇 클록을 잡아먹는지)은 반드시 곱셈으로 결합해야 “명령어 하나당 평균 몇 클록이 추가되는가”라는 단위가 맞는다.

포워딩을 적용하면 유효 CPI가 어떻게 바뀌는가

쉽게 말하면: 포워딩은 계산 결과를 레지스터에 완전히 쓰기 전에 필요한 곳으로 바로 전달해 주는 기법이므로, 완전히 적용되면 데이터 해저드로 인한 스톨을 거의 없앨 수 있다.

같은 조건에서 완전 포워딩(full forwarding)을 도입해 데이터 해저드로 인한 스톨을 0으로 만들었다고 하자(제어 해저드 조건은 그대로 유지).

1단계: 데이터 해저드로 인한 스톨을 0으로 갱신한다.

0.20×0=00.20 \times 0 = 0

2단계: 제어 해저드 항은 그대로 둔다.

0.15×2=0.300.15 \times 2 = 0.30

3단계: 새로운 유효 CPI를 구한다.

CPI유효,포워딩=1+0+0.30=1.30\text{CPI}_{\text{유효,포워딩}} = 1 + 0 + 0.30 = 1.30

결과 해석: 포워딩 도입으로 유효 CPI가 1.50에서 1.30으로 낮아졌다. 개선율로 보면 다음과 같다.

1.501.301.50×10013.3퍼센트\frac{1.50 - 1.30}{1.50} \times 100 \approx 13.3\text{퍼센트}

포워딩만으로 실행시간을 약 13.3퍼센트(13.3%) 줄일 수 있다는 뜻이다.

분기 예측을 적용하면 유효 CPI가 어떻게 바뀌는가

쉽게 말하면: 분기 예측이 맞으면 스톨이 아예 없고, 틀렸을 때만 스톨(분기 페널티)이 발생한다. 그래서 예측 적중률이 높을수록 평균 스톨 비용이 줄어든다.

분기 예측을 도입해 예측 적중률이 90퍼센트(0.90)라고 하자. 이는 분기 명령어 중 10퍼센트(0.10)만 예측이 틀려서 분기 페널티(2클록)를 그대로 겪는다는 뜻이다.

1단계: 분기 예측 실패율을 구한다.

10.90=0.101 - 0.90 = 0.10

2단계: 제어 해저드로 인한 평균 스톨 클록 수를 다시 구한다. 이번에는 “분기 명령어 비율 × 예측 실패율 × 분기 페널티”를 곱한다.

0.15×0.10×2=0.03클록/명령어0.15 \times 0.10 \times 2 = 0.03\text{클록/명령어}

3단계: 포워딩까지 함께 적용된 유효 CPI를 구한다.

CPI유효,포워딩+분기예측=1+0+0.03=1.03\text{CPI}_{\text{유효,포워딩+분기예측}} = 1 + 0 + 0.03 = 1.03

결과 해석: 포워딩과 분기 예측을 모두 적용하면 유효 CPI가 1.50(아무 대책 없음) → 1.30(포워딩만) → 1.03(포워딩+분기 예측)까지 이상적인 값 1에 가깝게 회복된다. 분기 예측의 효과가 특히 큰 이유는, 예측이 맞을 때는 페널티가 아예 0이 되기 때문이다 — 분기 예측 없이 매번 2클록의 페널티를 감수하던 것과 비교하면 개선 폭이 크다.

적용 기법데이터 해저드 스톨제어 해저드 스톨유효 CPI이상적 CPI 대비 증가율
대책 없음0.200.301.5050퍼센트
포워딩만 적용00.301.3030퍼센트
포워딩 + 분기 예측(적중률 90퍼센트)00.031.033퍼센트

시험 함정: “분기 예측 적중률이 100퍼센트가 아니면 분기 예측은 의미가 없다”는 진술은 틀렸다. 위 표에서 보듯 적중률 90퍼센트만으로도 제어 해저드로 인한 스톨 비용이 0.30에서 0.03으로 10분의 1로 줄었다. 예측이 완벽하지 않아도 실패했을 때만 페널티를 물기 때문에, 적중률이 높을수록 평균 비용은 급격히 줄어든다.

해저드 대응 기법 비교

쉽게 말하면: 네 가지 대응 기법은 겨냥하는 해저드 종류, 필요한 추가 하드웨어, 남는 비용이 서로 다르다.

기법겨냥하는 해저드필요한 하드웨어남는 비용
스톨(stall)/버블(bubble) 삽입데이터 해저드별도 하드웨어 없이 제어 로직만으로 가능삽입한 스톨만큼 항상 지연 발생
포워딩(forwarding)데이터 해저드ALU 출력을 다음 단계 입력으로 되돌리는 전용 배선일부 상황(연속된 메모리 적재 뒤 바로 사용 등)은 포워딩만으로 완전히 해결되지 않을 수 있음
분기 예측(branch prediction)제어 해저드과거 분기 결과를 기억하는 예측기 회로예측 실패 시 분기 페널티(잘못 인출한 명령어를 지우는 flush) 그대로 발생
지연 분기(delayed branch)제어 해저드컴파일러가 분기 뒤에 항상 실행해도 되는 명령어를 채워 넣는 방식채워 넣을 명령어가 없으면 그 자리에 무의미한 명령어(NOP)를 넣어야 함

자주 틀리는 점

  • 유효 CPI 계산에서 발생 비율과 스톨 클록 수를 곱하지 않고 더한다.
  • 분기 예측 실패율(1 - 적중률)을 적중률 자체로 착각해 계산 부호를 반대로 쓴다.
  • 포워딩이 모든 데이터 해저드를 항상 완전히 없앤다고 단정한다. 적재(load) 명령어 바로 다음 명령어가 그 값을 즉시 쓰는 경우처럼, 포워딩만으로는 해결되지 않아 최소 1클록의 스톨이 남는 상황(load-use 해저드)도 있다는 점을 서술형에서 함께 언급하는 것이 안전하다.

핵심 정리

  • 해저드의 정의·종류·정성적 해결책은 2단계 컴퓨터구조에서 이미 다뤘으므로, 이 편은 요약과 링크로 대신하고 유효 CPI라는 정량적 계산에 집중한다.
  • 유효 CPI = 이상적 CPI + Σ(해저드 발생 비율 × 1회당 스톨 클록 수)이며, 발생 비율과 스톨 비용은 반드시 곱해서 더한다.
  • 완전 포워딩은 데이터 해저드로 인한 스톨을 0으로 만들 수 있고, 분기 예측은 적중률만큼 제어 해저드 스톨을 줄인다 — 예측이 완벽하지 않아도 큰 개선 효과를 낸다.
  • 스톨/버블, 포워딩, 분기 예측, 지연 분기는 겨냥하는 해저드 종류와 필요한 하드웨어, 남는 비용이 서로 다르므로 “무엇을 위한 기법인가”를 먼저 구분해야 한다.

마무리 복습

문제 14지선다
데이터 해저드 발생 비율 0.25, 1회당 스톨 1클록, 제어 해저드 발생 비율 0.10, 1회당 스톨 3클록, 이상적 CPI 1일 때 유효 CPI는?
문제 24지선다
완전 포워딩을 적용하면 유효 CPI 계산식에서 어떤 항이 0이 되는가?
문제 34지선다
분기 명령어 비율이 0.20이고 분기 페널티가 4클록일 때, 분기 예측 적중률이 80퍼센트라면 제어 해저드로 인한 평균 스톨 클록 수는?
문제 44지선다
분기 예측 적중률을 90퍼센트에서 99퍼센트로 높였을 때 나타나는 효과로 옳은 것은?
문제 54지선다
스톨(버블) 삽입과 포워딩을 비교한 설명으로 옳지 않은 것은?
문제 64지선다
이상적 CPI가 1인 파이프라인에서 데이터 해저드로 인한 스톨 항이 0.30, 제어 해저드로 인한 스톨 항이 0.20일 때, 이상적인 경우 대비 실행시간 증가율은?

참고 자료

Last updated on