Kim Seon Deok
Scoreboarding 본문
출처
https://wwang.github.io/teaching/slides/Comp_Arch/OoO_Scoreboard.pdf
https://people.eecs.berkeley.edu/~kubitron/courses/cs252-S12/lectures/lec07-dynasched2.pdf
Scoreboarding
CPU -> OoO execution을 수행
ID stage를 2개의 stage로 쪼갬
1. Issue(IS) stage : instruction이 decode되고 function unit에서 실행되기 위해 issue됨
2. Read Operands(RD) stage : register로부터 혹은 다른 function unit으로부터 instruction이 source operand를 read
Issue stage이후 instruction의 state는 scoreboard나 instruction buffer에 저장됨.
MEM stage가 없다. Memory(load/store) unit은 간단하게 arithmetic unit에서 이루어지기 때문에 EXE satge는 memory access를 수행함
scoreboard는 register와 function unit을 control한다.
- IF stage : instruction fetch
- IS stage : issue the instruction, WAW hazard check
- 만약 function unit이 비어있고 동일한 destination register를 가진 다른 active instruction이 없다면 instruction issue
- function unit이 빈 상태가 될 때까지 issue할 수 없다 -> structural hazard 방지
- instruction이 issue되면 stall되어 scoreboard가 waiting 해야 할 수 있다.
- scoreboard가 가득차게 되면 IF stage와 IS stage는 stall 될 수 있다.
- RD stage : source operand 를 쓸 수 있는 지 scoreboard를 체크, RAW hazard check
- 이전에 issue된 instruction에 의해 source operand가 생성되지 않은 경우 source operand 사용 가능
- 현재 write 작업을 수행하려는 active function unit이 없는 경우 source operand 사용 가능
- dynamic하게 RAW hazard를 피하기 위해 RD stage를 out-of-order로 실행
- EX stage & memory access : execute, read/write memory, scoreboard status 업데이트
- WB stage : WAR hazard를 확인하고 만약 WAR hazard가 존재하면 stall
Scoreboard의 주요 component
1. Instruction status bits : instruction이 어떤 stage에 있는 지를 나타냄
2. Functional Unit status bits : fucntion unit의 bit의 상태를 나타내는 bit
- Busy bit : function unit이 active instruction에 의해 사용 중인 지 여부를 나타냄
- Operation field : function unit에서 사용할 작업(MUL, DIV, MOD)을 나타냄
- Fi field : destination register의 ID를 나타냄, instruciton의 result를 이 register에 저장
- Fj, Fk field : source register의 ID를 나타냄, Fj는 첫 번째 source register, Fk는 두 번째 source register
- Qj, Qk field : Fj와 Fk의 source register를 생성하는 function unit의 ID를 나타냄
- Rj, Rk bit : Fj와 Fk가 준비되었지만 아직 read되지 않았음을 나타냄
3. Register results status : Function unit이 각 register에 어떤 값을 write할지를 가리킴
cycle 1
맨 첫번째 instruction을 cycle 1에 issue -> instruction status : 1
Functional unit status을 첫 번째 instruction으로 채움 -> integer unit
첫 번째 instruction의 Fk가 read될 것이기 때문에 Rk는 yes가 됨
cycle 2
맨 첫번째 instruction은 cycle 2에 read operand 수행
두 번째 instruction은 intger function unit을 사용해야 하는데 첫 번째 instruction이 사용하고 있기 때문 issue 될 수 없음
(두 번째 instruction이 issue되게 되면 structural hazard 발생)
cycle 3
맨 첫번째 instruction은 cycle 3에 EXE 수행
Rk는 yes -> no 로 변경 - 첫 번째 instruction의 source operand가 EXE stage에서 consume되었기 때문
cycle 4
맨 첫번째 instruction은 cycle 4에 destination register F6에 WB 수행 -> finish
integer functional unit은 이제 busy한 상태가 아니게 됨
cycle 5
두 번째 instruction을 cycle 5에 integer unit으로 issue
Fk가 read될 것이기 때문에 Rk는 no- > yes 로 변경
cycle 6
두 번째 instruction은 cycle 6에 read operand 수행
세 번째 instruction은 cycle 6에 multi1 unit으로 issue
세 번째 instruction의 Fj는 두 번째 instruction의 integer unit에서의 출력값인데 아직 read할 준비가 되어있지 않기 때문에 세 번째 instruction의 Rj는 no
cycle 7
두 번째 instruction은 cycle 7에 EXE 수행
세 번째 instruction은 source register1로 인해 stall됨
네 번째 instruction add unit으로 issue
네 번째 instruction은 두 번째 instruction의 destination register F2를 사용 -> 아직 read할 준비가 되어있지 않아 Rk는 no
....
'Advanced computer architecture' 카테고리의 다른 글
Speculative executions (0) | 2024.01.19 |
---|---|
Static pipeline with out-of-order execution completion(2) (0) | 2024.01.11 |
Static pipeline with out-of-order execution completion(1) (1) | 2024.01.05 |
[Quantitative approach] ch3.4 Overcoming Data Hazards With Dynamic Scheduling (0) | 2023.12.28 |
[Quantitative approach] appendix C (0) | 2023.12.28 |