UNIT-SPECIFIC ACTIVE LESSON · 7c-2

첫 실제 hazard: t2→bne

`sub t2,t1,x0`와 `bne t2,zero,odd` 사이의 첫 hazard와 그 순간의 pipeline 배치를 찾으세요.

학습 목표: 첫 실제 hazard 시점의 producer sub와 consumer bne를 찾아 RAW dependency, pipeline stage 배치, 가능한 forwarding/stall 해결을 구분해 설명할 수 있다.
공식 근거 범위: Probeklausur.pdf 시험 p15 7c의 첫 hazard stage diagram과 code, Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p40 하단의 bne/sub hazard 설명.

왜 이 소문제를 따로 배우는가

hazard 이름만 쓰면 어느 값이 언제 부족한지 증명하지 못합니다. producer rd, consumer rs, snapshot stage, 해결 경로를 한 묶음으로 제시해야 합니다.

이 페이지는 Aufgabe 7의 공통 템플릿이 아니라 7c-2 첫 실제 hazard: t2→bne에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 7 개념 수업을 먼저 읽으세요.

이 소문제에서 실제로 쓰는 용어

정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.

producer
뒤 instruction이 필요로 하는 새 register 값을 계산하는 앞 instruction입니다.이 소문제에서: sub t2,t1,x0를 t2 producer로 표시할 때 사용합니다.
consumer
앞 instruction의 새 값을 source operand로 읽어야 하는 뒤 instruction입니다.이 소문제에서: bne t2,zero,odd를 t2 consumer로 표시할 때 사용합니다.
forwarding
아직 Register File에 writeback되지 않은 결과를 pipeline 내부 경로로 필요한 stage에 직접 전달하는 방법입니다.이 소문제에서: 구현이 지원하면 t2 비교 입력을 기다리지 않고 공급하는 해결책으로 사용합니다.
stall
필요한 값이 사용 가능해질 때까지 consumer 진행을 멈추고 bubble을 넣는 방법입니다.이 소문제에서: 적절한 forwarding이 없을 때 RAW hazard를 해결하는 방법으로 사용합니다.

이 소문제 전용 규칙과 종이 작업

RAW는 rd와 rs의 방향 있는 관계다

앞 sub의 rd=t2가 뒤 bne의 rs1=t2와 같아야 하며 반대 순서나 단순 이름 반복만으로는 같은 의미가 아닙니다.

종이에: sub.rd=t2 → bne.rs1=t2 방향 화살표를 그립니다.

data hazard와 control hazard를 분리한다

bne가 t2를 기다리는 것은 data hazard이고 branch outcome 뒤 wrong path를 처리하는 것은 별도 control hazard입니다.

종이에: RAW/t2와 branch/PC 두 행으로 원인과 해결을 나눠 씁니다.

공식 상자는 pipeline register 기준으로 읽는다

공식 p40의 네 상자는 IF/ID, ID/EX, EX/MEM, MEM/WB 내용을 나타냅니다. 따라서 bne는 Decode, sub는 Execute에 있고, 강의의 branch-in-EX model에서는 다음 cycle에 sub 결과를 M→E로 forwarding하므로 data stall은 0 cycle입니다.

종이에: IF=slli를 상자 밖에 적고 ID=bne, EX=sub, MEM=li, WB=addi를 표로 만든 뒤 sub M→bne E 화살표를 그립니다.

Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.

이 소문제 전용 작은 예제

add t3,t0,t1 바로 뒤 beq t3,zero,L이 있는 5-stage pipeline에서 dependency와 해결 방향을 설명하세요.

주어진 것

  • add의 destination은 t3입니다.
  • beq는 t3를 비교 source로 읽습니다.
  • 정확한 stall 수는 branch compare stage와 forwarding 지원에 따라 달라집니다.
  1. producer와 consumer field를 표시합니다.

    값 전달 방향을 증명하기 위해서입니다.

    종이 산출물: add.rd=t3 → beq.rs1=t3

  2. value가 생성되는 stage와 필요한 stage를 표시합니다.

    그 시점에 Register File 값이 최신인지 판단하기 위해서입니다.

    종이 산출물: producer result ready / consumer compare need

  3. 지원 경로에 따라 forwarding 또는 stall을 제시합니다.

    오래된 t3로 branch condition을 계산하지 않게 해야 합니다.

    종이 산출물: compare forwarding 지원: forward; 미지원: stall until available

예제 답과 독립 검산 보기

add t3→beq t3 사이에 RAW data hazard가 있습니다. branch 비교 입력으로 forwarding할 수 있으면 전달하고, 없으면 최신 t3가 사용 가능할 때까지 stall합니다.

독립 검산: branch의 control hazard를 RAW 해결과 같은 문제로 합치지 않았는지 확인합니다.

이제 실제 시험 문제를 micro-work로 풀기

공식 시험이 요구하는 것

`sub t2,t1,x0`와 `bne t2,zero,odd` 사이의 첫 hazard와 그 순간의 pipeline 배치를 찾으세요.

공식 답을 보기 전, 내 답 먼저 남기기

완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.

각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.

producer의 rd=t2를 표시합니다.

왜 하는가
sub t2,t1,x0가 실제 architectural value를 만드는 첫 후보임을 확정해야 합니다.
종이 산출물
sub: rd=t2, result=t1-0을 적습니다.
완료 조건
앞의 x0 write와 달리 t2 write가 관찰 가능함을 설명합니다.
막혔을 때 단계 힌트·대표 오류

힌트: x0 관련 false dependency를 제거한 다음 destination을 보세요.

이 단계의 대표 오류: sub의 x0를 destination으로 잘못 읽습니다.

consumer의 rs1=t2를 표시합니다.

왜 하는가
바로 다음 bne가 새 t2로 equality/inequality를 판단하므로 producer 결과를 필요로 합니다.
종이 산출물
bne: rs1=t2, rs2=zero를 적습니다.
완료 조건
sub.rd와 bne.rs가 정확히 일치합니다.
막혔을 때 단계 힌트·대표 오류

힌트: branch에는 rd가 없고 두 비교 source만 있습니다.

이 단계의 대표 오류: bne의 t2를 destination이라고 표시합니다.

공식 p40의 네 상자를 pipeline register와 stage 의미에 대응시킵니다.

왜 하는가
첫 상자는 현재 Fetch instruction이 아니라 IF/ID에 저장되어 Decode로 들어가는 bne이므로, 이를 Fetch로 부르면 hazard 시점이 한 cycle 어긋납니다.
종이 산출물
공식 상자 IF/ID=bne, ID/EX=sub, EX/MEM=li, MEM/WB=addi x0,x0,10. Stage 표 IF=slli, ID=bne, EX=sub, MEM=li, WB=addi를 적습니다.
완료 조건
공식 네 상자와 표준 다섯 stage를 모두 빠짐없이 설명합니다.
막혔을 때 단계 힌트·대표 오류

힌트: IF/ID register의 출력은 Decode stage가 읽습니다.

이 단계의 대표 오류: 왼쪽 첫 상자의 bne를 Fetch라고 불러 아직 t2를 필요로 하지 않는 시점에 hazard가 발생했다고 설명합니다.

강의의 branch-in-EX forwarding 경로로 RAW를 해결합니다.

왜 하는가
sub의 ALU 결과는 EX가 끝나면 EX/MEM에 있고, 바로 다음 cycle bne가 EX에서 비교할 때 M→E forwarding으로 최신 t2를 받을 수 있습니다.
종이 산출물
cycle n: sub=EX, bne=ID; cycle n+1: sub=MEM, bne=EX, M→E forwarding(ForwardAE/ForwardBE의 M 경로 선택)을 적습니다. Forwarding 미지원 시에는 stall이라고 덧붙입니다.
완료 조건
강의 model에서는 data stall 없이 forwarding 가능함과, forwarding 없는 구현의 stall 필요성을 구분합니다.
막혔을 때 단계 힌트·대표 오류

힌트: Vorlesung Teil 2의 arithmetic result M/W→E forwarding을 사용하세요.

이 단계의 대표 오류: Register File writeback까지 무조건 기다리거나, 반대로 forwarding 경로를 그리지 않고 0 stall이라고만 씁니다.

branch가 control hazard도 만들 수 있음을 별도로 적습니다.

왜 하는가
t2 RAW가 해결되어도 bne outcome이 정해질 때까지 wrong-path fetch 문제가 남을 수 있습니다.
종이 산출물
Data: sub→bne t2, M→E, 0 stall; Control: taken이면 강의 회로의 두 younger slot flush를 적습니다. 이 code에서는 slli가 실제 wrong-path이고 target instruction은 다시 fetch될 수 있다고 구분합니다.
완료 조건
두 hazard의 원인, 영향, 해결이 서로 분리됩니다.
막혔을 때 단계 힌트·대표 오류

힌트: 하나는 값, 다른 하나는 다음 PC의 불확실성입니다.

이 단계의 대표 오류: branch이므로 모든 문제를 control hazard 한 단어로만 설명합니다.

공식 답을 열기 전 마지막 회상

producer와 consumer 사이에 독립 instruction 하나가 끼면 forwarding/stall 조건이 어떻게 달라지는지 설명해 보세요.

내 풀이 후 공식 결론·이유·대표 함정 확인

공식 결론

공식 p40 상자(IF/ID→MEM/WB)는 `bne t2,zero,odd` | `sub t2,t1,x0` | `li t4,42` | `addi x0,x0,10`입니다. Stage 의미로는 IF=`slli t3,a0,2`(공식 네 상자 밖), ID=`bne`, EX=`sub`, MEM=`li`, WB=`addi x0,x0,10`입니다. `sub→bne`는 t2에 대한 RAW Data Hazard이고, 강의의 branch-in-EX/forwarding model에서는 다음 cycle에 sub의 ALU 결과를 M→E로 전달하므로 data stall은 0 cycle입니다. 분기가 taken이면 별도로 강의 회로의 두 younger slot을 flush합니다(이 code에서는 `slli`가 실제 wrong-path이며 target instruction은 flush 후 다시 fetch될 수 있습니다).

왜 이 답이 되는가

첫 실제 dependency는 `sub`가 만드는 t2를 바로 다음 `bne`가 읽는 RAW입니다. 공식 p40의 네 상자는 pipeline register 기준 IF/ID→MEM/WB 순서이며, 각각 bne, sub, li, addi x0,x0,10을 담습니다. 따라서 stage 의미로는 ID=bne, EX=sub, MEM=li, WB=addi이고, 동시에 다음 `slli`가 IF에 있을 수 있습니다.

대표 함정

공식 도식의 첫 상자를 Fetch라고 부르면 hazard 발생 시점이 한 cycle 어긋납니다. 상자는 IF/ID register의 내용, 즉 Decode에 들어가는 bne를 표시합니다. Data Hazard와 branch의 Control Hazard도 분리하세요.

7c-2에서 정확히 무엇에 답하는가

이 소문제의 답안 대상: `sub t2,t1,x0`와 `bne t2,zero,odd` 사이의 첫 hazard와 그 순간의 pipeline 배치를 찾으세요.

  1. producer의 rd=t2를 표시합니다.
    판단 이유: sub t2,t1,x0가 실제 architectural value를 만드는 첫 후보임을 확정해야 합니다.
    답안지에 남길 중간 결과: sub: rd=t2, result=t1-0을 적습니다.
  2. consumer의 rs1=t2를 표시합니다.
    판단 이유: 바로 다음 bne가 새 t2로 equality/inequality를 판단하므로 producer 결과를 필요로 합니다.
    답안지에 남길 중간 결과: bne: rs1=t2, rs2=zero를 적습니다.
  3. 공식 p40의 네 상자를 pipeline register와 stage 의미에 대응시킵니다.
    판단 이유: 첫 상자는 현재 Fetch instruction이 아니라 IF/ID에 저장되어 Decode로 들어가는 bne이므로, 이를 Fetch로 부르면 hazard 시점이 한 cycle 어긋납니다.
    답안지에 남길 중간 결과: 공식 상자 IF/ID=bne, ID/EX=sub, EX/MEM=li, MEM/WB=addi x0,x0,10. Stage 표 IF=slli, ID=bne, EX=sub, MEM=li, WB=addi를 적습니다.
  4. 강의의 branch-in-EX forwarding 경로로 RAW를 해결합니다.
    판단 이유: sub의 ALU 결과는 EX가 끝나면 EX/MEM에 있고, 바로 다음 cycle bne가 EX에서 비교할 때 M→E forwarding으로 최신 t2를 받을 수 있습니다.
    답안지에 남길 중간 결과: cycle n: sub=EX, bne=ID; cycle n+1: sub=MEM, bne=EX, M→E forwarding(ForwardAE/ForwardBE의 M 경로 선택)을 적습니다. Forwarding 미지원 시에는 stall이라고 덧붙입니다.
  5. branch가 control hazard도 만들 수 있음을 별도로 적습니다.
    판단 이유: t2 RAW가 해결되어도 bne outcome이 정해질 때까지 wrong-path fetch 문제가 남을 수 있습니다.
    답안지에 남길 중간 결과: Data: sub→bne t2, M→E, 0 stall; Control: taken이면 강의 회로의 두 younger slot flush를 적습니다. 이 code에서는 slli가 실제 wrong-path이고 target instruction은 다시 fetch될 수 있다고 구분합니다.

따라서 도출되는 공식 답: 공식 p40 상자(IF/ID→MEM/WB)는 `bne t2,zero,odd` | `sub t2,t1,x0` | `li t4,42` | `addi x0,x0,10`입니다. Stage 의미로는 IF=`slli t3,a0,2`(공식 네 상자 밖), ID=`bne`, EX=`sub`, MEM=`li`, WB=`addi x0,x0,10`입니다. `sub→bne`는 t2에 대한 RAW Data Hazard이고, 강의의 branch-in-EX/forwarding model에서는 다음 cycle에 sub의 ALU 결과를 M→E로 전달하므로 data stall은 0 cycle입니다. 분기가 taken이면 별도로 강의 회로의 두 younger slot을 flush합니다(이 code에서는 `slli`가 실제 wrong-path이며 target instruction은 flush 후 다시 fetch될 수 있습니다).

답이 이어지는 핵심 인과: 첫 실제 dependency는 `sub`가 만드는 t2를 바로 다음 `bne`가 읽는 RAW입니다. 공식 p40의 네 상자는 pipeline register 기준 IF/ID→MEM/WB 순서이며, 각각 bne, sub, li, addi x0,x0,10을 담습니다. 따라서 stage 의미로는 ID=bne, EX=sub, MEM=li, WB=addi이고, 동시에 다음 `slli`가 IF에 있을 수 있습니다.

이 답에 붙는 주의: 공식 도식의 첫 상자를 Fetch라고 부르면 hazard 발생 시점이 한 cycle 어긋납니다. 상자는 IF/ID register의 내용, 즉 Decode에 들어가는 bne를 표시합니다. Data Hazard와 branch의 Control Hazard도 분리하세요.

명령어와 식을 줄 단위로 읽기

본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.

sub t2,t1,x0
bne t2,zero,odd
sub
bne
slli
li t4,42
addi x0,x0,10
slli t3,a0,2
li
sub→bne

새 문제로 전이하기

세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.

1. 개념 재구성

공식 code의 첫 실제 hazard를 producer, consumer, type, 해결의 네 요소로 재구성하세요.

제출 후 모델 답 보기

producer는 sub t2,t1,x0, consumer는 bne t2,zero,odd이며 t2에 대한 RAW data hazard입니다. 강의의 branch-in-EX pipeline에서는 sub가 MEM, bne가 EX가 되는 다음 cycle에 M→E forwarding으로 해결하고, forwarding이 없는 구현은 최신 t2가 준비될 때까지 stall합니다.

2. 변형 문제

lw t0,0(s1) 바로 뒤 add t2,t0,s2가 있을 때 producer/consumer와 hazard type을 쓰고 일반적인 해결 방향을 제시하세요.

제출 후 모델 답 보기

producer는 lw의 rd=t0이고 consumer는 add의 rs1=t0이므로 load-use RAW hazard입니다. memory read 결과 forwarding이 제때 가능하지 않으면 stall을 넣고, 가능한 시점에 t0를 forward합니다.

3. 오류 진단

학생이 'bne이므로 이 pair는 control hazard일 뿐 data hazard는 없다'고 했습니다. 두 hazard를 분리해 고치세요.

제출 후 모델 답 보기

sub가 만든 t2를 bne가 바로 읽으므로 RAW data hazard가 먼저 존재합니다. bne의 다음 PC가 확정되기 전 wrong-path 문제는 별도의 control hazard입니다.

이 소문제를 끝냈다고 말할 수 있는 기준

이 소문제의 정확한 공식 페이지와 대조하기

왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.

7c-2 관련 공식 시험 또는 해설 페이지
exam-p15.png · 클릭해 원본 크기로 확인
7c-2 관련 공식 시험 또는 해설 페이지
solution-p40.png · 클릭해 원본 크기로 확인

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p14–15 · 공식 해설 p39–40 · Probeklausur.pdf 시험 p15 7c의 첫 hazard stage diagram과 code, Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p40 하단의 bne/sub hazard 설명.