✅데이터 종속성
마지막 네 명령어 모두 레지스터 $2에 있는 첫 번째 명령어 결과에 종속적이다.
- 첫 번째 명령어는 $2에 쓰고 뒤에 나오는 모든 명령어는 $2를 읽는다.
- 같은 클럭 사이클 내에서 읽기와 쓰기가 이루어지면 쓰기가 먼저 끝나서 방금 쓴 값을 읽을 수 있다.
데이터 의존성의 조건은 목적지에 있는 레지스터를 다른 명령어가 쓸 때이다
붙어있거나 한 칸 떨어져 있으면 헤저드 발생, 그 외에는 디펜던스라고 하더라도 헤저드가 발생하지 않는다.
그렇다면 이 프로그램이 파이프라인에서 어떻게 수행될까?🤔
위 표를 보았을 때 위에서 아래로 내려오는 파란 선은 종속성을 나타낸다.
그 중에서 시간상 후방으로 가는 것들이 파이프 데이터 해저드인 것이다.
즉, $2의 올바른 값을 읽을 수 있는 건 add와 sw뿐이다.
💡필요한 결과가 만들어지는 것은 EX 단계이다.
즉, 클럭 사이클 3의 끝이다.
* 이를 통해 and와 or 명령어가 실제로 데이터를 필요로 하는 시점은 각각 EX단계, 즉 클럭 사이클 4와 5를 시작할 때 필요하다.
✅헤저드 조건 (Hazard Conditions)
파이프라인 레지스터의 필드에 이름을 붙이면 종속성을 좀 더 자세히 표시할 수 있다.
이름의 첫 번째 부분(”.”의 왼쪽 부분)은 파이프라인 레지스터 이름이고, 두 번째 부분은 그 레지스터의 필드 이름이다.
바로 붙어있으면 type1 rs rd이면 a가 된다. rt rd이면 b가 된다.
한 칸 떨어져 있으면 type 2
앞의 프로그램을 예시로 들었을 때 sub $2, $1, $3의 결과와 and $12, $2, $5의 첫 번째 피연산자 사이에서 헤저드가 발생하는데, 이런 헤저드는 and 명령어가 EX 단계에 있고 sub 명령어가 MEM 단계에 있을 때 검출될 수 있다. 즉, 헤저드 조건 1a를 만족시킨다.
✅Solution
1. Stalling
2. Insert nop Instructions
3. Code Reordering
4. Forwarding
📌Forwarding (전방전달, 우회)
- 데이터가 사용 가능하면 바로 필요로 하는 유닛에 전달
- 레지스터에 저장할 때까지 기다리지 않고,
- 파이프라인 레지스터에서 직접 값을 읽는다.
- 데이터패스에 멀티플렉서와 새로운 연결 추가
레지스터 파일은 같은 클럭 사이클에 읽고 쓰는 값을 전방전달한다고 가정하면, add 명령어는 지연되지 않고, 그 값은 파이프라인 레지스터 대신에 레지스터 파일에서 나온다.
✅불필요한 포워딩 피하기
1. RegWrite 신호가 활성화되어 있는지 확인하기
EX 단계와 MEM 단계에서 파이프라인 레지스터의 WB 제어 필드를 조사하면 RegWrite 신호가 인가되었는지를 알 수 있다.
2. MIPS의 $0은 항상 상수 0을 가지고 있어서 그 값을 바꿀 수 없다.
파이프라인에 있는 명령어의 목적지가 $0이라면 전방전달을 하면 안 된다.
'2-2 학기 > Computer Organization' 카테고리의 다른 글
[컴퓨터구조] Lec22 The Basic of Caches (0) | 2023.12.19 |
---|---|
[컴퓨터구조] Lec19 Control Hazards (0) | 2023.12.19 |
[컴퓨터구조] Lec16 Pipelined Datapath and Control (1) | 2023.12.19 |
[컴퓨터구조] Lec15 Pipelining (1) | 2023.11.01 |
[컴퓨터구조] Lec12 Datapath Design (0) | 2023.10.30 |