본문 바로가기
CS(Computer Science)/컴퓨터구조

10. 파이프라인 (3)

by 동욷 2023. 6. 4.

Pipeline Performace

-> 100ps for register read or write (ID, WB)

-> 200ps for other stages (IF, EX, MEM)

 

Instruction IF ID EX MEM WB Total time
lw 200ps 100ps 200ps 200ps 100ps 800ps
sw 200ps 100ps 200ps 200ps   700ps
R-format 200ps 100ps 200ps   100ps 600ps
beq 200ps 100ps 200ps     500ps

 

Pipeline SpeedUp

만약 모든 stage의 시간이 똑같다라면

-> Time between instrunctions(pipelined) = Time between instructions(non-pipelined) / Number of stages

똑같지 않다면(MIPS)

-> 가장 긴 stage의 시간으로 clock period 결정 (MIPS의 경우 Critical path = lw)

 

Speedup은 처리량을 증폭 시킨다 (지연시간은 감소되지 않는다)

 

 

MIPS가 pipelining에 최적화인 이유

 

1) 모든 instruction이 32bit이다

-> fetch decode를 one cycle안에 하기 쉬움

 

2) instuction format이 적다

-> decode, read register를 한 단계에 가능

 

3) Load/Store addressing

-> 3번째 단계에서 address calculate , 4번째 단계에서 access memory

 

4) Memory operands Alignment

-> Memory access 는 only one cycle

 

 

 

 Branch Prediction

- pipeline이 길어질수록 branch outcome을 예측하기 어려워짐

- 예측이 틀렸을 경우에만 stall

=> 간단한 해결책 : 무조건 branch가 no taken되었다고 가정하고 PC + 4로 지정 , 만약 예측이 틀렷을 경우(branch가 taken이 된 경우)에는 pipeline에서 실행중이던 instruction 없애고 PC값을 새로 지정해줌

 

실용적인 해결책

1) Static branch prediction

-> 전형적인 branch behavior에 기반

-> loop와 if문 branch

-> branch가 taken 되면 Predict backward

-> branch가 not taken되면 Predict forward

 

 

2) Dynamic branch prediction

 -> h/w가 actual branch behavior를 측정 (각 브랜치의 최근 상태를 기록)

 -> 경향에 따라 미래 상태를 예측 (만약 틀리면 re-fetching , update history 할동안 stall)

 

 

 

Register Forwarding 조건

RS 

default (No forwarding) : ForwardA = 00

 

EX hazard

=> EX/MEM.RegWrite and EX/MEM.RegisterRD != 0 and (EX/MEM.RegisterRd = ID/EX.RegisterRs) : ForwardA = 10

첫번째 ALU operand가 이전의 ALU result로부터 forwarded

 

MEM hazard

=> MEM/WB.RegWrite and MEM/WB.RegisterRd != 0 and (MEM/WB.RegisterRd = ID/EX.RegisterRs) : ForwardA = 01

두번째 ALU operand가 data memory나 이전 ALU result로부터 forwarded

 

 

 

Double Data hazard

-> 가장 최근의 것을 사용하고자 하는 경우에 발생 가능함

 

Revised Register Forwarding 조건

 

EX hazard

=> EX/MEM.RegWrite and EX/MEM.RegisterRd !=0 and (EX/MEM.RegisterRd = ID/EX.RegisterRs) : ForwardA = 10

 

MEM hazard

=> MEM/WB.RegWrite and MEM/WB.RegisterRd != 0 and not(EX hazard 발생 조건) and (MEM/WB.RegisterRd = ID/EX.RegisterRs) : ForwardA = 01

 

 

 

Data Hazard for Branches

 

1) 만약 비교하는 register가 ALU 연산 결과의 목적지 register 이거나 2번째 이전의 load된 명령어의 register 일 경우

beq 이전에 1 stall cycle

 

 

2) 만약 비교하는 register가 바로 이전에 load된 명령어의 register 인 경우

beq 이전에 2 stall cycle

 

 

 

Add Bubble

1) EX, MEM, WB 단계는 아무 작업도 하지 않음  : 모든 control signal = 0

2) ID 단계를 1 more cycle : IF/ID Write Signal = 0 (IF/ID pipeline register 변경 x)

3) IF 단계를 1 more cycle : PCWrite Signal = 0 (PC 변경 x)

 

 

1비트 분기 예측  : NT(not taken) , T(taken)

 

 

2비트 분기 예측 : NT(00) : strongly predict not taken , NT(01) : weakly predict not taken , T(10) : weakly predict taken, T(11) : strongly predict taken

 

 

Branch prediction buffer

=> sizeof(instruction memory) >> sizeof(prediction buffer)

=> multiple instructions 들이 single entry로 사상됨

=> Aliasing 발생

 

 

 

Branch Target 계산

=> predictor로 Branch를 예측하였다 하더라도, target address를 계산하여야 함

=> taken branch에 1-cycle penalty 

 

Branch Target buffer

=> target address의 Cache

=> instruction이 fetch 될때 PC에 의해 인덱스

 

 

 

ILP (Instruction - Level Parallelism)

pipelining : 병렬적으로 다수의 instruction들을 수행

 

ILP를 늘리기 위해서는

1) Deeper Pipeline : 각 단계 당 작업량 감소 => clock cycle 짧아짐

2) Multiple Issue 

=> clock cycle 당 multiple instructions

=> pipeline 단계를 복사

=> CPI < 1, 그래서 Instructions Per Cycle(IPC) 사용

 

 

 

Static Dual Issue MIPS

2개의 issue packets

1) One ALU/branch instruction

2) One load/store instruction

64-bit 정렬됨

=> ALU branch 후 load/store

=> 안쓰는 instruction은 nop

 

Multiple Issue

1) Static multiple issue

- Compiler가 instruction들이 같이 issued 되게 묶음

- 묶음이 issue slot에 담김

- Compiler가 hazard를 발견하고 회피함

 

2) Dynamic multiple issue

- CPU가 instruction stream을 조사하여 각 cycle에 issue할 instruction을 선택

- Compiler는 reordering instruction을 통해 지원함

- CPU가 실행 시간에 향상된 기술로 hazard 해결

 

 

CPU 종류

 

1)cycle당 issued 되는 instructions의 수

 

Single issue

 

Multiple issue   - Static

                         - Dynamic (superscalar)

 

 

2) Instruction execution scheduling

 

Static scheduling (in-order)

Dynamic scheduling (out-of-order)

 

 

 

 

 

728x90

'CS(Computer Science) > 컴퓨터구조' 카테고리의 다른 글

11. 메모리 구조 (2)  (0) 2023.06.04
11. 메모리 구조(1)  (0) 2023.06.04
10. 파이프라인 (2)  (0) 2023.06.04
10. 파이프라인 (1)  (0) 2023.06.04
9. 프로세서 (3)  (0) 2023.06.04