UNIT-SPECIFIC ACTIVE LESSON · 7c-1

가짜 dependency 제거: x0

`addi x0,...` 두 줄이 hazard를 만드는지 판단하세요.

학습 목표: x0를 destination으로 하는 instruction의 write가 architectural dependency를 만들지 않음을 rd/rs 집합으로 증명할 수 있다.
공식 근거 범위: Probeklausur.pdf 시험 p15 7c의 hazard code와 Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p40의 x0 설명.

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

register 이름이 반복된다는 이유만으로 hazard를 표시하면 첫 실제 hazard 위치를 놓칩니다. x0의 특수 규칙을 먼저 적용해야 false dependency를 제거할 수 있습니다.

이 페이지는 Aufgabe 7의 공통 템플릿이 아니라 7c-1 가짜 dependency 제거: x0에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 7 개념 수업을 먼저 읽으세요.

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

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

x0
읽으면 항상 0이고 write 결과는 버려지는 RISC-V zero register입니다.이 소문제에서: 두 addi x0 instruction이 실제 값을 생산하지 않는다고 판정할 때 사용합니다.
architectural write
이후 instruction이 관찰할 수 있도록 register state를 실제로 바꾸는 write입니다.이 소문제에서: rd=x0인 write를 dependency producer에서 제외할 때 사용합니다.
RAW dependency
앞 instruction의 실제 destination 값을 뒤 instruction이 source로 읽어야 하는 관계입니다.이 소문제에서: text상 같은 register와 진짜 data hazard를 구분할 때 사용합니다.
false dependency
표면적으로 register 이름이 겹치지만 architectural data 전달이 필요하지 않은 관계입니다.이 소문제에서: x0 write 뒤 x0 read를 hazard로 세지 않을 때 사용합니다.

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

producer가 실제 state를 쓰는지 먼저 본다

RAW는 앞 instruction이 관찰 가능한 새 값을 만들어야 성립하며 rd=x0 write는 그 조건을 만족하지 않습니다.

종이에: 각 instruction의 rd 옆에 architectural write yes/no를 표시합니다.

x0 read는 항상 constant 0이다

뒤 instruction이 x0를 source로 사용해도 앞 instruction 결과를 기다리는 것이 아니라 ISA constant를 읽습니다.

종이에: rs=x0를 value 0으로 치환하고 producer 화살표를 그리지 않습니다.

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

이 소문제 전용 작은 예제

add x0,t1,t2 다음에 sub t3,x0,t4가 올 때 RAW hazard가 있는지 판정하세요.

주어진 것

  • x0에 대한 write는 버려집니다.
  • sub의 x0 source 값은 항상 0입니다.
  • RAW에는 실제 producer 값이 필요합니다.
  1. 첫 instruction의 destination을 적습니다.

    producer 후보를 확인하기 위해서입니다.

    종이 산출물: rd=x0, architectural write=no

  2. 둘째 instruction의 source를 적습니다.

    어떤 이전 값이 필요한지 확인하기 위해서입니다.

    종이 산출물: rs1=x0(constant 0), rs2=t4

  3. 실제 producer→consumer 값 전달이 있는지 판정합니다.

    x0는 앞 add 결과가 아니라 constant 0을 제공하기 때문입니다.

    종이 산출물: RAW 없음

예제 답과 독립 검산 보기

RAW hazard가 없습니다. 첫 instruction의 x0 write는 버려지고 둘째 instruction은 항상 0을 읽습니다.

독립 검산: 첫 instruction을 삭제해도 둘째 instruction의 x0 입력이 변하지 않는지 생각합니다.

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

공식 시험이 요구하는 것

`addi x0,...` 두 줄이 hazard를 만드는지 판단하세요.

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

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

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

각 instruction의 실제 destination을 표시합니다.

왜 하는가
hazard 탐색은 먼저 producer의 rd를 확정해야 source와 비교할 수 있습니다.
종이 산출물
두 addi의 rd=x0를 표시합니다.
완료 조건
syntax의 첫 register와 실제 architectural destination 의미를 분리합니다.
막혔을 때 단계 힌트·대표 오류

힌트: 두 번째 operand가 아니라 instruction의 rd field를 보세요.

이 단계의 대표 오류: a0나 x0 source를 destination으로 잘못 표시합니다.

destination=x0이면 architectural write가 없다고 표시합니다.

왜 하는가
RISC-V는 x0 write를 버리므로 새 register value가 pipeline 밖에서 관찰되지 않습니다.
종이 산출물
rd=x0 → write discarded → producer 아님을 적습니다.
완료 조건
x0 write가 RegWrite control과 무관하게 architectural state를 바꾸지 않음을 설명합니다.
막혔을 때 단계 힌트·대표 오류

힌트: x0를 읽으면 언제나 어떤 값인지 떠올리세요.

이 단계의 대표 오류: ALU가 결과를 계산했으므로 x0의 값도 잠시 바뀐다고 생각합니다.

후속 instruction의 source와 대조합니다.

왜 하는가
text상 x0가 반복되어도 후속 source는 앞 결과가 아니라 constant 0이므로 기다릴 dependency가 없습니다.
종이 산출물
producer set에서 x0를 제거하고 rs 집합과 교집합이 없음을 적습니다.
완료 조건
첫 실제 hazard 탐색을 다음 instruction들로 계속할 수 있습니다.
막혔을 때 단계 힌트·대표 오류

힌트: 앞 instruction을 nop으로 바꿔도 후속 x0 값이 같은지 확인하세요.

이 단계의 대표 오류: 같은 이름 x0가 연속 등장한다는 이유만으로 RAW 화살표를 그립니다.

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

`add x0,t1,t2` 뒤 `sub t3,x0,t4`는 왜 RAW hazard가 아닌가요?

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

공식 결론

`addi x0,a0,5`와 `addi x0,x0,10`은 x0 값을 바꾸지 않으므로 이 write 때문에 Data Hazard가 생기지 않습니다.

왜 이 답이 되는가

RISC-V x0 write는 버려집니다. 다음 instruction이 x0를 읽어도 값은 항상 0이므로 앞의 addi 결과를 기다릴 이유가 없습니다.

대표 함정

text상 register 이름이 같다는 이유만으로 dependency를 선언하지 마세요.

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

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

addi x0,...
addi x0,a0,5
addi x0,x0,10

새 문제로 전이하기

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

1. 개념 재구성

RAW hazard가 성립하기 위한 producer와 consumer 조건을 x0 예외와 함께 재구성하세요.

제출 후 모델 답 보기

앞 instruction이 x0가 아닌 rd에 관찰 가능한 값을 쓰고 뒤 instruction이 그 rd를 source로 읽어야 RAW가 성립합니다. rd=x0 write는 producer가 아닙니다.

2. 변형 문제

addi x0,s1,5; add t2,x0,s2; sub t3,t2,s3에서 첫 RAW hazard는 어느 pair입니까?

제출 후 모델 답 보기

addi x0→add 사이에는 RAW가 없고, 첫 RAW는 add가 만든 t2를 바로 읽는 sub이므로 add t2,x0,s2 → sub t3,t2,s3입니다.

3. 오류 진단

학생이 addi x0,a0,5 뒤 addi x0,x0,10에서 x0 RAW hazard가 있다고 했습니다. 교정하세요.

제출 후 모델 답 보기

두 instruction 모두 x0에 쓰려는 결과가 버려지고 x0 read는 항상 0이므로 RAW hazard가 없습니다.

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

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

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

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

Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p14–15 · 공식 해설 p39–40 · Probeklausur.pdf 시험 p15 7c의 hazard code와 Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p40의 x0 설명.