왜 이 소문제를 따로 배우는가
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 두 행으로 원인과 해결을 나눠 씁니다.
해결책은 사용 가능한 path를 근거로 쓴다
forwarding이 비교 stage까지 도달하면 전달하고, 그렇지 않으면 값이 준비될 때까지 stall해야 하므로 구현 조건을 명시해야 합니다.
종이에: value-ready stage와 value-needed stage를 표에 표시한 뒤 forward 또는 stall을 선택합니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
add t3,t0,t1 바로 뒤 beq t3,zero,L이 있는 5-stage pipeline에서 dependency와 해결 방향을 설명하세요.
주어진 것
- add의 destination은 t3입니다.
- beq는 t3를 비교 source로 읽습니다.
- 정확한 stall 수는 branch compare stage와 forwarding 지원에 따라 달라집니다.
- producer와 consumer field를 표시합니다.
값 전달 방향을 증명하기 위해서입니다.
종이 산출물: add.rd=t3 → beq.rs1=t3
- value가 생성되는 stage와 필요한 stage를 표시합니다.
그 시점에 Register File 값이 최신인지 판단하기 위해서입니다.
종이 산출물: producer result ready / consumer compare need
- 지원 경로에 따라 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를 찾으세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·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이라고 표시합니다.
pipeline distance를 확인합니다.
- 왜 하는가
- producer와 consumer가 연속해 있어 bne가 읽거나 비교할 때 t2가 아직 writeback되지 않았을 수 있습니다.
- 종이 산출물
- 연속 instruction 거리 1과 value-ready/value-needed stage를 표시합니다.
- 완료 조건
- 왜 단순 register 이름 일치가 아니라 timing 문제인지 설명합니다.
막혔을 때 단계 힌트·대표 오류
힌트: 공식 p40 snapshot에서 sub와 bne가 동시에 어느 stage에 있는지 보세요.
이 단계의 대표 오류: program order상 sub가 먼저이므로 bne가 자동으로 최신 값을 읽는다고 생각합니다.
forwarding 가능 path가 있으면 forward, 없으면 stall을 선택합니다.
- 왜 하는가
- consumer가 오래된 t2를 사용하지 않게 하는 실제 hardware 대응이 필요합니다.
- 종이 산출물
- 지원 조건별 해결: compare-input forwarding 또는 stall until value available을 적습니다.
- 완료 조건
- 구현 가정 없이 임의의 정확한 stall 수를 단정하지 않습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 공식 문제는 해결 방법 설명을 요구하지만 모든 forwarding 세부를 숫자로 고정하지 않습니다.
이 단계의 대표 오류: 항상 0 stall 또는 항상 2 stall이라고 근거 없이 단정합니다.
branch가 control hazard도 만들 수 있음을 별도로 적습니다.
- 왜 하는가
- t2 RAW가 해결되어도 bne outcome이 정해질 때까지 wrong-path fetch 문제가 남을 수 있습니다.
- 종이 산출물
- Data: sub→bne t2; Control: bne outcome→PC/flush 두 행을 적습니다.
- 완료 조건
- 두 hazard의 원인, 영향, 해결이 서로 분리됩니다.
막혔을 때 단계 힌트·대표 오류
힌트: 하나는 값, 다른 하나는 다음 PC의 불확실성입니다.
이 단계의 대표 오류: branch이므로 모든 문제를 control hazard 한 단어로만 설명합니다.
공식 답을 열기 전 마지막 회상
producer와 consumer 사이에 독립 instruction 하나가 끼면 필요한 stall 수가 어떻게 달라질 수 있나요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
첫 실제 Data Hazard는 `sub t2,t1,x0` → 바로 다음 `bne t2,zero,odd`의 RAW dependency입니다. 구현에 따라 forwarding으로 비교 입력에 전달하거나 필요한 stall을 넣습니다.
왜 이 답이 되는가
bne가 ID/EX에서 t2를 읽을 때 sub의 새 t2가 아직 register file에 writeback되지 않았을 수 있습니다. 이것이 RAW data hazard입니다.
대표 함정
Data Hazard와 branch의 Control Hazard를 한 단어로 뭉개지 마세요.
명령어와 식을 줄 단위로 읽기
본문 속 code를 한 줄씩 분리했습니다. 각 줄에서 source, operation, destination을 표시하세요.
sub t2,t1,x0
bne t2,zero,odd새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
공식 code의 첫 실제 hazard를 producer, consumer, type, 해결의 네 요소로 재구성하세요.
sub의 t2와 bne의 t2를 연결하세요.
제출 후 모델 답 보기
producer는 sub t2,t1,x0, consumer는 bne t2,zero,odd이며 t2에 대한 RAW data hazard입니다. 비교 입력 forwarding이 있으면 전달하고 없으면 최신 t2가 준비될 때까지 stall합니다.
2. 변형 문제
lw t0,0(s1) 바로 뒤 add t2,t0,s2가 있을 때 producer/consumer와 hazard type을 쓰고 일반적인 해결 방향을 제시하세요.
load result t0가 언제 준비되는지 생각하세요.
제출 후 모델 답 보기
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를 분리해 고치세요.
branch outcome 이전에 비교 operand t2가 어디서 오는지 보세요.
제출 후 모델 답 보기
sub가 만든 t2를 bne가 바로 읽으므로 RAW data hazard가 먼저 존재합니다. bne의 다음 PC가 확정되기 전 wrong-path 문제는 별도의 control hazard입니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
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 설명.

