You are on page 1of 184

Проточна обрада - pipeline

Садржај
• Увод
• Основни концепти
• Хазарди
– Структурни хазарди
– Хазарди података
– Управљачки хазарди
• Пример: ?

2/184
Увод
• Проточна обрада (Pipeline) је једна од техника
реализације извршавања операција по којој се
преклапа извршавање више операција.

3/184
Увод
• Извршавање операције се може разбити на више
логичких целина које ће се називати фазама
(читање инструкције, формирање адреса
операнада, читање операнада, извршавање
операције, итд…). За извршавање неке фазе
постоји посебан део који ће се називати степен S.
Фаза 1 се извршава у степену S1, фаза 2 у
степену S2, итд. Истовремено се може наћи k
операција у k различитих фаза извршавања.
S1 S2 Sk Rout

ulaz R1 K1 R2 K2  Rk Kk izlaz

4/184
Увод
• Проточна обрада може да буде:
– статички (линеаран) и
– динамички (нелинеаран).
• Код статичке проточне обраде свака операција
пролази кроз исти, фиксни, линеарни низ степени
проточне обраде.
• Код динамичке проточне обраде свака
операција има свој редослед проласка кроз
поједине степене проточне обраде. Стога
динамичка проточна обрада има између својих
степени везе и унапред и уназад.

5/184
Инструкцијска проточна обрада
• У случају инструкцијске проточне обраде
извршавање инструкције се дели на више фаза и
за сваку фазу постоји посебан степен у проточној
обради.
• Инструкција чије је извршавање подељено на k
фаза захтева k степени у проточној обради.
• У идеалном случају у проточној обради се налази
k инструкција свака у различитом степену
проточне обраде и тиме у различитој фази
извршавања.

6/184
Инструкцијска проточна обрада
• Овако идеалну ситуацију је немогуће одржати у
проточној обради због читавог низа различитих
разлога. Разлози који доводе до успоравања
проточне обраде, начини за ублажавање њихових
негативних ефеката и читав низ карактеристичних
ситуација које се јављају код организације
процесора са проточном обрадом биће
илустровани на примеру једног процесора.
Одабрана је једноставна архитектура процесора
да би се избегло превелико усложњавање
проточне обраде. Међутим, она садржи довољно
елемената потребних да се прикажу основни
принципи проточне обраде организације
процесора.
7/184
Архитектура процесора
• Архитектура процесора је load/store типа.
Операнди се из меморије довлаче у регистре
опште намене процесора инструкцијом load.
• Резултати се враћају у меморију инструкцијом
store.
• Операције се специфицирају инструкцијама
троадресног формата при чему су два изворишна
операнда или два регистра опште намене или
регистар опште намене и непосредна величина, а
одредиште регистар опште намене процесора.

8/184
Архитектура процесора
• Регистри - Постоје 32 32-битна регистра опште
намене за рад са целобројним величинама (GPR)
означена са R0 до R31. Вредност регистра R0 је
увек нула.
• Типови података - целобројне величине дужине
8, 16 и 32 бита. У процесору све операције се
извршавају над 32-битним целобројним
величинама. Због тога се 8-битни и 16-битни
подаци приликом довлачења у регистре
инструкцијом load проширују (нулама или знаком).

9/184
Архитектура процесора
• Формати инструкција - Све инструкције су
фиксне дужине 32 бита, па се због бајтовског
адресирања садржај регистра PC при очитавању
инструкције увећава за 4.

10/184
Архитектура процесора
• Адресирање - Меморијским локацијама се једино
приступа помоћу load и store инструкција. Адреса
меморијске локације се увек добија сабирањем
садржаја једног од регистара GPR и 16-битног
помераја.
(регистарко индиректно са померајем, за R0 –
меморијско директно, за померај 0, регистарско
индиректно)
• У случају преосталих инструкција одговарајуће
операције се реализују над садржајима два
регистра или над садржајем регистра и
непосредном величином, а резултат иде у
регистар.
(регистарско и непосредно адресирање)
11/184
Архитектура процесора

12/184
Организација процесора без pipeline

4 M
u
ADD
x
Branch
taken
Zero Cond
PC NPC
rs1

M
rs2 u
Instruction IR A
IR x
Memory Registers ALU
rd ALU output
M
B Data M
u LMD
x Memory u
x

16 32
\ Extend \ imm

13/184
Организација процесора без pipeline
• 1) IF—instruction fetch
– IRMem[PC];
– NPCPC + 4;
• 2) ID—instruction decode and register fetch
– ARegs[IR6..10];
– B Regs[IR11..15];
– Imm((IR16)16##IR16..31);

14/184
Организација процесора без pipeline
3) EX—execution and effective address calculation
– 3.1) load и store инструкције
• ALUOUT А  Imm;
• cond0;
– 3.2) Аритметичке, логичке и релационе - Типа R
• ALUOUTА func B;
• cond0;
– 3.3) Аритметичке, логичке и релационе - Типа I
• ALUOUTА op Imm;
• cond0;
– 3.4) Померачке инструкције
• ALUOUTоп А;
• cond0;
– 3.5) branch инструкције
• ALUOUTNPC  Imm;
• cond(А op 0); 15/184
Организација процесора без pipeline
4) MEM—memory access and branch completion
– 4.1) load/store инструкције
• LMDMem[ALUOUT]; за load
• Mem[ALUOUT]B; за store
– 4.2) Све инструкције
• if (cond) then PCALUOUT else PCNPC
5) WB—write back
– 5.1) ALU инструкције Типа R
Regs[IR16..20]ALUOUT;
– 5.2) ALU инструкције Типа I
Regs[IR11..15] ALUOUT;
– 5.3) load инструкција
Regs[IR11..15] LMD;

16/184
Организација процесора - pipeline

инструкција сигнал такта


1 2 3 4 5 6 7 8 9
i IF ID EX MEM WB
i1 IF ID EX MEM WB
i2 IF ID EX MEM WB
i3 IF ID EX MEM WB
i4 IF ID EX MEM WB

17/184
Организација процесора - pipeline
• Проблеми који могу да настану:
– Организација меморије.
– Регистарски фајл Registers.
– Ажурирање вредности регистра PC.

18/184
Организација меморије
• Коришћење одвојених меморија
Instruction Memory и Data Memory. Оне се обично
реализују као посебне кеш меморије за
инструкције и податке. Коришћењем посебних кеш
меморија елиминише се конфликт који би настајао
у случају постојања само једне кад год би се у
степену MEM нашла load или store инструкција.
Тада би из степена MEM било обраћање ради
читања или уписа податка, а из степена IF ради
читања инструкције.

19/184
Регистарски фајл Registers
• Из степена ID читају се два регистра, а из степена
WB врши упис. Ове операције су скоро стално
присутне, па се за реализацију регистарског фајла
обично користе такви меморијски елементи који
омогућавају истовремено читање два регистра и
упис трећег.

20/184
Ажурирање вредности регистра PC
• Да би се стартовала нова инструкција на сваки
такт, вредност регистра PC мора да се увећа за 4
и та вредност упише у регистар PC на сваки такт.
Формирање вредности PC увећане за 4 на излазу
јединице Add се реализује паралелно са читањем
инструкције према вредности регистра PC. На
сигнал такта се истовремено уписују у регистар
PC увећана вредност PC-ја и у регистар IR
очитана инструкција. Проблем настаје због branch
инструкција које такође мењају вредност регистра
PC, али тек у степену MEM. Када branch
инструкција дође у степен MEM у коме евентуално
скок треба да се реализује у случају да је услов за
скок испуњен јављају се два проблема.
21/184
Ажурирање вредности регистра PC
• Први је да скок треба направити релативно у
односу на вредност регистра PC branch
инструкције увећан за 4, а тада је у регистру NPC
вредност PC-ја branch инструкције увећан за 12.
• Други је да се у степенима IF, ID и EX налазе
погрешне инструкције. Ови проблеми који настају
код branch инструкција посебно се касније
разматрају.

22/184
Организација процесора - pipeline

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

23/184
Организација процесора - pipeline
степен инструкција
IF све инструкције
IF/ID.IR  Mem[PC]; IF/ID.NPC, PC  (if EX/MEM.cond then {EX/MEM.ALUOUT} else {PC  4});
ID све инструкције
ID/EX.А  Regs[IF/ID.IR6…10]; ID/EX.B  Regs[IF/ID.IR11…15];
ID/EX.NPC  IF/ID.NPC; ID/EX.IR  IF/ID.IR; ID/EX.Imm  (IF/ID.IR16)16 ## IF/ID.IR16…31;
EX ALU инструкције
EX/MEM.IR  ID/EX.IR; EX/MEM.ALUOUT  ID/EX.А func ID/EX.B;
или
EX/MEM.ALUOUT  ID/EX.А op ID/EX.Imm;
EX/MEM.cond  0;
load/store инструкције
EX/MEM.IR  ID/EX.IR; EX/MEM.ALUOUT  ID/EX.А  ID/EX.Imm;
EX/MEM.cond  0; EX/MEM.B  ID/EX.B;
branch инструкције
EX/MEM.ALUOUT  ID/EX.NPC  ID/EX.Imm; EX/MEM.cond  (ID/EX.А op 0);
MEM ALU инструкције
MEM/WB.IR  EX/MEM.IR; MEM/WB.ALUOUT  EX/MEM.ALUOUT;
load/store инструкције
MEM/WB.IR  EX/MEM.IR; MEM/WB.LMD  Mem[EX/MEM.ALUOUT] или
Mem[EX/MEM.ALUOUT]  EX/MEM.B;
WB ALU инструкције
Regs[MEM/WB.IR16…20]  MEM/WB.ALUOUT; или
Regs[MEM/WB.IR11…15]  MEM/WB.ALUOUT;
load инструкције
Regs[MEM/WB.IR11…15]  MEM/WB.LMD;

24/184
Хазарди у проточној обради
• Постоје три врсте хазарда:
– структурални хазарди,
– хазарди података и
– управљачки хазарди.

25/184
Хазарди у проточној обради
Структурални хазарди настају због потребе да се
истовремено приступи истом ресурсу од стране
инструкција које се налазе у различитим
степенима pipeline-а.
Хазарди података настају када је приступ неком
податку од стране неке инструкције у неком
степену pipeline-а условљено претходним
приступом том истом податку од стране неке
претходне инструкције из неког другог степена
pipeline-а.
Управљачки хазарди настају због скокова и других
инструкција које мењају вредност програмског
бројача PC.
26/184
Хазарди у проточној обради
У случају хазарда инструкција се зауставља у неком
степену pipeline-а онолико периода сигнала такта
колико је потребно да се узрок хазарда отклони.
Заустављање неке инструкције у неком степену
pipeline-а зауставља и инструкције које су иза ње
у pipeline-у. Тиме се зауставља и убацивање
нових инструкција у pipeline. Инструкцијама које су
испред ње у pipeline-у може се дозволити да
продуже са извршавањем. Због тога је директна
последица појављивања хазарда то да је
убрзавање извршавања програма у pipeline
процесору лошије од оног које би теоретски могло
да се постигне.

27/184
Структурални хазарди
Структурални хазард настаје када две инструкције
које се налазе у различитим степенима треба да
приступе истом ресурсу.
Пример: систем у коме се користи иста меморија и
за инструкције и за податке. Хазард би се десио
када би load или store инструкција дошла у
степен MEM у коме би се читао или уписивао
податак у меморију.

28/184
Структурални хазарди
Решење 1: Заустављање. Очитавање нове
инструкције и убацивање у степен IF не би могло
да се реализује и било би одложено за једну
периоду сигнала такта (stall). Све остале
инструкције би се нормално извршавале.
број периода сигнала такта

Instruction 1 2 3 4 5 6 7 8 9

load instruction IF ID EX MEM WB

instruction i  1 IF ID EX MEM WB

instruction i  2 IF ID EX MEM WB

instruction i  3 stall IF ID EX MEM WB

instruction i  4 stall IF ID EX MEM

29/184
Структурални хазарди
Решење 2: Начин за комплетно елиминисање овог
структуралног хазарда је подела меморије на
посебне меморије за инструкције и податке.

30/184
Структурални хазарди
Код сложенијих процесора могу се јавити
структурални хазарди и код приступа другим
ресурсима. Уколико би се разматрала аритметика
у покретном зарезу, множење и дељење
целобројних величина фаза EX извршавала би се
више тактова. Да то не би кочило pipeline степен
EX може да се реализује као паралелна веза
више функционалних јединица. Када нека
инструкција дође до своје фазе EX шаље се у
одговарајућу EX функционалну јединицу у којој се
извршава у онолико тактова колико јој је
потребно.

31/184
Структурални хазарди
EX
integer
unit

EX
FP/integer
multiply

IF ID MEM WB

EX
FP
adder

EX
FP/integer
divide

Степен EX реализован као паралелна веза више функционалних јединица


32/184
Хазарди података
Хазард података се јавља код процесора са pipeline
организацијом због измењеног редоследа
приступа подацима у односу на редослед
приступа подацима код процесора без pipeline
организације.
Ово је последица чињенице да се код pipeline
процесора преклапа извршавање различитих
фаза више инструкција.
Код процесора који немају pipeline организацију
инструкције се извршавају секвенцијално, па се
тек по извршавању свих фаза једне инструкције
креће са извршавањем фазе прве следеће.

33/184
Хазарди података
add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF
sub R4, R5, R1
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
34/184
Хазарди података
sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID
sub R4, R5, R1 IF
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
35/184
Хазарди података Прочитан неисправан податак!
and R6, R1, R7 sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX
sub R4, R5, R1 IF ID
and R6, R1, R7 IF
or R8, R1, R9
xor R10, R1, R11
36/184
Хазарди података Прочитан неисправан податак!
or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM
sub R4, R5, R1 IF ID EX
and R6, R1, R7 IF ID
or R8, R1, R9 IF
xor R10, R1, R11
37/184
Хазарди података Прочитан неисправан податак!
xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM
and R6, R1, R7 IF ID EX
or R8, R1, R9 IF ID
xor R10, R1, R11 IF
38/184
Хазарди података Прочитан исправан податак!
??? xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM WB
and R6, R1, R7 IF ID EX MEM
or R8, R1, R9 IF ID EX
xor R10, R1, R11 IF ID
39/184
Хазарди података
• Пример:
– add R1, R2, R3
– sub R4, R5, R1
– and R6, R1, R7
– or R8, R1, R9
– xor R10, R1, R11
1 2 3 4 5 6 7 8 9
add R1, R2, R3 IF ID EX MEM WB*
sub R4, R5, R1 IF ID** EX MEM WB
and R6, R1, R7 IF ID** EX MEM WB
or R8, R1, R9 IF ID** EX MEM WB
xor R10, R1, R11 IF ID*** EX MEM WB

Легенда:
*—add уписује у R1
**—sub, and, or читају погрешну вредност из R1
***—xor чита коректну вредност из R1

40/184
Хазарди података
Посматраће се две инструкције i и ј, при чему се
инструкција i јавља пре инструкције ј. Могући
хазарди података су:
– RAW (read after write).
– WAR (write after read).
– WAW (write after write).

• Треба запазити да случај RAR (read after read)


није хазард.

41/184
Хазарди података
• RAW (read after write)—инструкција ј покушава да
чита податак пре него што инструкција i упише,
тако да инструкција ј добија некоректно стару
вредност. Ово је најчешћи тип хазарда података
који је до сада и једино размотрен.

42/184
Хазарди података
• WAR (write after read)—инструкција ј покушава да
упише пре него што инструкција i чита, па
инструкција i некоректно добија нову вредност. У
посматраном pipeline-у ово не може да се деси
зато што се читање обавља у једном од почетних
степени pipeline-а и то степену ID, а упис у једном
од последњих степени pipeline-а и то степену WB.

43/184
Хазарди података
• WAW (write after write)—инструкција ј покушава да
упише неки податак пре него што је он најпре
уписан инструкцијом i. Овде се уписивање
извршава по погрешном редоследу па у операнду
остаје вредност уписана инструкцијом i уместо
инструкцијом ј. Овај хазард постоји у
pipeline-овима у којима се може уписивати из
више степени, што није случај у посматраном
pipeline-у у коме се може уписивати само из
степена WB.

44/184
Заустављање - RAW
Најједноставнији начин да се овај хазард података
реши је заустављање инструкције којој је
потребан податак све док так податак не буде
доступан.

45/184
Заустављање - RAW
add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF
sub R4, R5, R1
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
46/184
Заустављање - RAW
sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID
sub R4, R5, R1 IF
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
47/184
Заустављање - RAW
stall sub R4, R5, R1 add R1, R2, R3
stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX
sub R4, R5, R1 IF stall
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
48/184
Заустављање - RAW
stall sub R4, R5, R1 nop add R1, R2, R3
stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM
sub R4, R5, R1 IF stall stall
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
49/184
Заустављање - RAW
stall sub R4, R5, R1 nop nop add R1, R2, R3
stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
50/184
Заустављање - RAW
and R6, R1, R7 sub R4, R5, R1 nop nop nop

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID
and R6, R1, R7 IF
or R8, R1, R9
xor R10, R1, R11
51/184
Заустављање - RAW
or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1 nop nop

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX
and R6, R1, R7 IF ID
or R8, R1, R9 IF
xor R10, R1, R11
52/184
Заустављање - RAW
xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1 nop

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX MEM
and R6, R1, R7 IF ID EX
or R8, R1, R9 IF ID
xor R10, R1, R11 IF
53/184
Заустављање - RAW
??? xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX MEM WB
and R6, R1, R7 IF ID EX MEM
or R8, R1, R9 IF ID EX
xor R10, R1, R11 IF ID
54/184
Заустављање - RAW
??? ??? xor R10, R1, R11or R8, R1, R9 and R6, R1, R7

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM
xor R10, R1, R11 IF ID EX
55/184
Заустављање - RAW
??? ??? ??? xor R10, R1, R11 or R8, R1, R9

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM WB
xor R10, R1, R11 IF ID EX MEM
56/184
Заустављање - RAW
??? ??? ??? ??? xor R10, R1, R11

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM WB
xor R10, R1, R11 IF ID EX MEM WB
57/184
Заустављање - RAW

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10 11 12
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF stall stall stall ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM WB
xor R10, R1, R11 IF ID EX MEM WB
58/184
Прослеђивање
Хазард типа RAW се може хардверски елиминисати
техником прослеђивања (forwarding, bypassing,
short-circuiting). Податак може да се прослеђује из
више различитих степени проточне обрада у више
различитих степени проточне обраде.

Резултат са излаза јединице ALU степена EX се


заједно са још неким информацијама из pipeline
регистра ID/EX степена EX на сигнал такта шаље
у pipeline регистар EX/MEM степена MEM.
Излаз регистра EX/MEM.ALUOUT се води не само на
улазе pipeline регистра MEM/WB.ALUOUT степена
WB већ у друге степене проточне обраде.
59/184
Прослеђивање
Из регистра EX/MEM:
Резултат са излаза јединице ALU степена EX се
заједно са још неким информацијама из pipeline
регистра ID/EX степена EX на сигнал такта шаље
у pipeline регистар EX/MEM степена MEM. Излаз
регистра EX/MEM.ALUOUT се води не само на
улазе pipeline регистра MEM/WB.ALUOUT степена
WB се преко мултиплексера МX1 и МX2 води и на
улазе ALU.

60/184
Хазарди података
Из регистра EX/MEM:
Уколико хардвер за прослеђивање открије да
инструкција која је тренутно у степену MEM треба
да свој резултат упише у регистар који је
изворишни за инструкцију која се налази у степену
EX, он селектује као операнд за ALU не вредност
очитану из регистарског фајла Registers и која се
налази у регистру ID/EX.А већ вредност
прослеђену од претходне инструкције преко
регистра EX/MEM.ALUOUT.

...

61/184
Хазарди података
add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF
sub R4, R5, R1
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
62/184
Хазарди података
sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID
sub R4, R5, R1 IF
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
63/184
Хазарди података Прочитан неисправан податак!
and R6, R1, R7 sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX
sub R4, R5, R1 IF ID
and R6, R1, R7 IF
or R8, R1, R9
xor R10, R1, R11
64/184
Хазарди података Прочитан неисправан податак!
or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

EX/MEM.ALUOUT уместо ID/EX.B

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM
sub R4, R5, R1 IF ID EX
and R6, R1, R7 IF ID
or R8, R1, R9 IF
xor R10, R1, R11
65/184
Хазарди података Прочитан неисправан податак!
xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1 add R1, R2, R3

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

MEM/WB.ALUOUT уместо ID/EX.A

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM
and R6, R1, R7 IF ID EX
or R8, R1, R9 IF ID
xor R10, R1, R11 IF
66/184
Хазарди података Прочитан исправан податак!
??? xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7 sub R4, R5, R1

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

add R1, R2, R3


taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

RTMP.RES уместо ID/EX.A

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM WB
and R6, R1, R7 IF ID EX MEM
or R8, R1, R9 IF ID EX
xor R10, R1, R11 IF ID
67/184
Хазарди података
??? ??? xor R10, R1, R11 or R8, R1, R9 and R6, R1, R7

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

sub R4, R5, R1


taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM
xor R10, R1, R11 IF ID EX
68/184
Хазарди података
??? ??? ??? xor R10, R1, R11 or R8, R1, R9

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

and R6, R1, R7


taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM WB
xor R10, R1, R11 IF ID EX MEM
69/184
Хазарди података
??? ??? ??? ??? xor R10, R1, R11

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

or R8, R1, R9
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM WB
xor R10, R1, R11 IF ID EX MEM WB
70/184
Хазарди података
??? ??? ??? ??? ???

RID R EX R MEM R WB
4 M
u
ADD
x

xor R10, R1, R11


Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R1 IF ID EX MEM WB
and R6, R1, R7 IF ID EX MEM WB
or R8, R1, R9 IF ID EX MEM WB
xor R10, R1, R11 IF ID EX MEM WB
71/184
Хазарди података

EX/MEM.ALUOUT уместо ID/EX.A


MEM/WB.ALUOUT уместо ID/EX.A
addR1, R2, R3 IF ID EX MEM WB
RTMP.RES уместо ID/EX.A
sub R4, R5, R1 IF ID EX MEM WB

andR6, R1, R7 IF ID EX MEM WB

or R8, R1, R9 IF ID EX MEM WB

xor R10, R1, R11 IF ID EX MEM WB

72/184
Хазарди података

rs1  rs2  rd  IF/ID


ID
Registers

rs1 A  B rs2  rd  ID/EX

EX MX1 MX2

ALU

 ALUOUT  rd  EX/MEM

MEM

 ALUOUT  rd  MEM/WB
WB

 ALUOUT  rd  RTMP

Хардвер за прослеђивање резултата три инструкције – принципска шема


73/184
Хазарди података
• Пример:
– add R1, R2, R3
– lw R4, 0(R1) EX/MEM.ALUOUT уместо ID/EX.A
– sw 12(R1), R4 MEM/WB.ALUOUT уместо ID/EX.A
MEM/WB.LMD уместо EX/MEM.B

1 2 3 4 5 6 7
add R1, R2, R3 IF ID EX MEM WB
lw R4, 0(R1) IF ID EX MEM WB
sw 12(R1), R4 IF ID EX MEM WB

R1 R4

74/184
Хазарди података
• Пример:
– add R1, R2, R3
– sw 0(R4), R1

MEM/WB.ALUOUT уместо EX/MEM.B

1 2 3 4 5 6
add R1, R2, R3 IF ID EX MEM WB
sw 0(R4), R1 IF ID EX MEM WB

R1

75/184
Хазарди података
• Пример:
– add R1, R2, R3
– beqz R1, 50
EX/MEM.ALUOUT уместо ID/EX.A

1 2 3 4 5 6
add R1, R2, R3 IF ID EX MEM WB
beqz R1, 50 IF ID EX MEM WB

R1

76/184
Хазарди података
• Пример:
– add R1, R2, R3
– sub R4, R5, R6
– bneq R1, 50 MEM/WB.ALUOUT уместо ID/EX.A

1 2 3 4 5 6 7
add R1, R2, R3 IF ID EX MEM WB
sub R4, R5, R6 IF ID EX MEM WB
bneq R1, 50 IF ID EX MEM WB

R1

77/184
Хазарди података
• Пример:
– add R1, R2, R3
– beqz R1, 50
MEM/WB.LMD уместо ID/EX.A

1 2 3 4 5 6 7
lw R1, 0(R2) IF ID EX MEM WB
sub R3, R4, R5 IF ID EX MEM WB
beqz R1, 50 IF ID EX MEM WB

R1

78/184
Хазарди података
Хазард података се јавља када неком податку
приступају две инструкције које су довољно близу
да се преклапањем њиховог извршавања због
pipeline-а мења редослед приступа том податку од
стране те две инструкције.
До сада размотрени хазарди података се односе на
приступ регистрима. Међутим, хазарди података
постоје и код приступа меморијским локацијама. У
разматраном процесору организације они не могу
да се јаве јер pipeline организација не мења
редослед приступа меморијским локацијама у
односу на онај који би био за случај процесора са
секвенцијалним извршавањем инструкција.

79/184
Хазарди података
• Напомена: Погледати следеће секвенце:
– add R1, R2, R3
– sub R5, R6, R7
– sw 0(R8), R1
– и
– lw R1, 0(R2)
– sw 0(R5), R6
– sw 0(R8), R1

80/184
Заустављање
Заустављање pipeline-а као једини начин
обезбеђивања коректног извршавања инструкција
(pipeline stall, pipeline interlocks)
Постоје неке ситуације RAW хазарда података када
је једини начин да се обезбеди коректно
извршавање инструкција у pipeline-у заустављање
pipeline-а.
Пример:
– lw R1, 32(R6)
– add R4, R1, R7
– sub R5, R1, R8
– and R6, R1, R7

81/184
Заустављање
Инструкција lw има податак у регистру MEM/WB.LMD
тек на крају своје фазе MEM. Ова фаза се
извршава у истој периоди сигнала такта као и фаза
EX инструкције add. Међутим, инструкцији add је
податак од инструкције lw потребан на почетку
фазе EX. Види се да не постоји начин да он стигне
за инструкцију add макар се користила техника
прослеђивања садржаја регистра MEM/WB.LMD на
улазе јединице ALU. Тек за инструкцију sub
податак од инструкције lw се може из регистра
MEM/WB.LMD проследити на улаз јединице ALU.
Инструкција and га добија преко регистарског фајла
Registers, јер га инструкција lw уписује у регистар
R1 у првој половини фазе WB, а инструкција and
чита у другој половини фазе ID. 82/184
Хазарди података
lw R1, 32(R6)

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF
add R4, R1, R7
sub R5, R1, R8
and 6, R1, R7

83/184
Хазарди података
add R4, R1, R7 lw R1, 32(R6)

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID
add R4, R1, R7 IF
sub R5, R1, R8
and R6, R1, R7

84/184
Хазарди података Прочитан неисправан податак!
and R6, R1, R7 add R4, R1, R7 lw R1, 32(R6)

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX
add R4, R1, R7 IF ID
sub R5, R1, R8 IF
and R6, R1, R7

85/184
Хазарди података Податак није доступан
and R6, R1, R7 sub R5, R1, R8 add R4, R1, R7 lw R1, 32(R6)
stall stall stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM
add R4, R1, R7 IF ID stall
sub R5, R1, R8 IF stall
and R6, R1, R7 stall

86/184
Хазарди података Прочитан неисправан податак!
and R6, R1, R7 sub R5, R1, R8 add R4, R1, R7 nop lw R1, 32(R6)

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

MEM/WB.LMD уместо ID/EX.A

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX
sub R5, R1, R8 IF stall ID
and R6, R1, R7 stall IF

87/184
Хазарди података Прочитан исправан податак!
??? and R6, R1, R7 sub R5, R1, R8 add R4, R1, R7 nop

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken

lw R1, 32(R6)
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

RTMP.RES уместо ID/EX.A

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX MEM
sub R5, R1, R8 IF stall ID EX
and R6, R1, R7 stall IF ID

88/184
Хазарди података
??? ??? and R6, R1, R7 sub R5, R1, R8 add R4, R1, R7

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

nop
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX MEM WB
sub R5, R1, R8 IF stall ID EX MEM
and R6, R1, R7 stall IF ID EX

89/184
Хазарди података
??? ??? ??? and R6, R1, R7 sub R5, R1, R8

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

add R4, R1, R7


taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX MEM WB
sub R5, R1, R8 IF stall ID EX MEM WB
and R6, R1, R7 stall IF ID EX MEM

90/184
Хазарди података
??? ??? ??? ??? and R6, R1, R7

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

sub R5, R1, R8


taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX MEM WB
sub R5, R1, R8 IF stall ID EX MEM WB
and R6, R1, R7 stall IF ID EX MEM WB

91/184
Хазарди података
??? ??? ??? ??? ???

RID R EX R MEM R WB
4 M
u
ADD
x
Branch

and R6, R1, R7


taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX MEM WB
sub R5, R1, R8 IF stall ID EX MEM WB
and R6, R1, R7 stall IF ID EX MEM WB

92/184
Заустављање
• Пример:
– lw R1, 32(R6)
– add R4, R1, R7 MEM/WB.LMD уместо ID/EX.A
– sub R5, R1, R8 RTMP.RES уместо ID/EX.A
– and 6, R1, R7
lw R1, 32(R6) IF ID EX MEM WB
add R4, R1, R7 IF ID stall EX MEM WB
sub R5, R1, R8 IF stall ID EX MEM WB
and 6, R1, R7 stall IF ID EX MEM WB

93/184
Заустављање
• Пример:
– lw R1, 0(R2)
– beqz R1, 50 MEM/WB.LMD уместо ID/EX.A

lw R1, 0(R2) IF ID EX MEM WB


beqz R1,50 IF ID stall EX MEM WB

94/184
Хазарди података

Хардвер за прослеђивање резултата EX-A


95/184
Хазарди података

Хардвер за прослеђивање резултата EX-B


96/184
Хазарди података

Хардвер за прослеђивање резултата три инструкције – принципска шема


97/184
Закашњено пуњење (delayed load)
Има више ситуација када је једини начин да се
елиминише RAW хазард података заустављање
pipeline-а. Један од типичних примера за то је
извршавање инструкција генерисаних на
уобичајени начин за израз A  B  C. Овде се
захтева заустављање pipeline-а због друге
инструкције lw, која садржај C пуни у регистар R2

RTMP.RES уместо ID/EX.A


MEM/WB.LMD уместо ID/EX.B

lw R1, b IF ID EX MEM WB
lw R2, c IF ID EX MEM WB
add R3, R1, R2 IF ID stall EX MEM WB
sw a, R3 IF stall ID EX MEM WB
98/184
Закашњено пуњење (delayed load)
• Један од начина да се ова врста хазарда
података избегне без заустављања pipeline-а је да
преводилац преуреди генерисане инструкције на
такав начин да се избегне да иза инструкције lw
буде одмах инструкција која као извориште има
регистар који је одредиште за инструкцију lw.

99/184
Закашњено пуњење (delayed load)
• Пример:
– A  B  C;
– D  E  F;
• Две могуће ситуације заустављања pipeline-а због
инструкције lw и то:
• lw Rc, c и add Ra, Rb, Rc и
• lw Rf, f и add Rd, Re, R
lw Rb , b
lw Rc, c
lw Re, e
add Ra , Rb , Rc } ove dve instrukcije su zamenile mesta
lw Rf , f
sw a, Ra } ove dve instrukcije su zamenile mesta
add R d , R e, R f
sw d, Rd
100/184
Закашњено пуњење (delayed load)
Ова техника је сасвим добра, тако да неки
процесори уместо хардверски софтверски се
штите од овог хазарда података. Ако не може да
се нађе ни једна друга инструкција, онда се код
таквих процесора ради спречавања овог хазарда
података ставља инструкција nop.

101/184
Истовремени упис и читање
Ради смањивања сложености хардвера процесора
пожељно је смањити број инструкција које се на
овакав начин прослеђују. Тај број би се могао
смањити са три на два уколико би се у току
трајања једне периоде сигнала такта реализовао
и упис и читање из регистар фајла Registers.
Узеће се да се у првој половини фазе WB уписује
у регистарски фајл Registers, а у другој половини
фазе ID чита из регистарског фајла Registers.

102/184
Истовремени упис и читање

add R1, R2, R3 IF ID EX MEM WB


R W

sub R4, R1, R5 IF ID EX MEM WB


R W

and R6, R1, R7 IF ID EX MEM WB


R W

or R8, R1, R9 IF ID EX MEM WB


R W

103/184
Управљачки хазарди
Управљачки хазарди представљају ситуације које се
јављају у pipeline процесорима приликом
извршавања инструкција условног скока, када
треба зауставити pipeline одређен број сигнала
такта док се не одлучи да ли ће бити скок или не и
тиме се добије вредност PC-ја са које треба
очитати следећу инструкцију. Број периода
сигнала такта који се мора сачекати да би се
утврдила нова вредност PC-ја се назива branch
delay.

104/184
Заустављање
У случају усвојеног процесора pipeline организације
тек када branch инструкција стигне у степен MEM
се зна да ли ће бити скока или не и коју вредност
сигналом такта на крају фазе MEM треба уписати
у регистар PC. То је
– или срачуната адреса инструкције на коју се скаче, која
се налази у регистру EX/MEM.ALUOUT,
– или адреса прве следеће инструкције иза инструкције
скока, која се налази у регистру EX/MEM.NPC.
Селекција једне од ове две вредности се врши
сигналом EX/MEM.cond.

105/184
Заустављање
У општем случају за сваку branch инструкцију треба
сачекати њено комплетирање фазе MEM, па тек
онда кренути са убацивањем нових инструкција у
степен pipeline-а. То значи заустављање pipeline-а
за три такта. Због тога када branch инструкција
стигне у степен MEM, у степенима EX, ID и IF
нема инструкција. Сигналом такта на крају фазе
MEM branch инструкције у регистар PC се уписује
коректна адреса инструкције са којом треба
продужити извршавање инструкција после branch
инструкције, па се тек тада у степен IF pipeline
убацује нова инструкција.

106/184
Заустављање
branch

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF
инстр. i  1

107/184
Заустављање
инстр. i  1 branch
stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF ID
инстр. i  1
stall

108/184
Заустављање Одређивање да ли се скаче!
инстр. i  1 nop branch
stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF ID EX
инстр. i  1
stall stall

109/184
Заустављање Селекција следеће инструкције!
инстр. i  1 nop nop brach
stall
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF ID EX MEM
инстр. i  1
stall stall stall

110/184
Заустављање
инстр. i  1 или nop nop nop branch
инстр. са адр. скока
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF ID EX MEM WB
инстр. i  1 или
stall stall stall IF
инстр. са адр. скока

111/184
Заустављање
??? инстр. i  1 или nop nop nop
инстр. са адр. скока
RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF ID EX MEM WB
инстр. i  1 или
stall stall stall IF ID
инстр. са адр. скока

112/184
Заустављање

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
branch IF ID EX MEM WB
инстр. i  1 или
stall stall stall IF ID EX MEM WB
инстр. са адр. скока
инстр. i  2 или
stall stall stall IF ID EX MEM WB
инстр. са адр. скока  1
инстр. i  3 или
stall stall stall IF ID EX MEM
инстр. са адр. скока  2
113/184
Заустављање
У зависности од тога да ли се као резултат
извршавања branch инструкције у регистар PC
уписује адреса инструкције на коју се скаче или
адреса прве следеће инструкције после branch
инструкције, каже се да је:
– или branch taken (скок направљен)
– или branch not taken (скок није направљен).

114/184
Заустављање - branch taken
Међутим оно што се стварно дешава изгледа нешто
мало другачије. За посматрани процесор
инструкција иза branch инструкције се очитава јер
се за i-ту инструкцију открива да је branch тек
када дође у степен ID. Тада се очитана
инструкција зауставља док се у степену MEM за
инструкцију branch не одлучи да ли је branch
taken или branch not taken.

115/184
Заустављање - branch taken
Ако је branch taken, очитана инструкција у степену
IF се игнорише, јер је очитана са погрешне
адресе, па се поново очитава инструкција са
адресе скока.

инстр. i (branch) IF ID EX MEM WB


инстр. са адр. скока IF stall stall IF ID EX MEM WB
инстр. са адр. скока  1 stall stall stall IF ID EX MEM WB
инстр. са адр. скока  2 stall stall stall IF ID EX MEM
инстр. са адр. скока  3 stall stall stall IF ID EX
инстр. са адр. скока  4 stall stall stall IF ID
инстр. са адр. скока  5 stall stall stall IF

116/184
Заустављање - branch not taken
Ако је branch not taken нема потребе поново
очитавати инструкцију јер је добра инструкција у
степену IF, па она може да иде у степен ID.

инстр. i (branch) IF ID EX MEM WB


инстр. i  1 IF stall stall ID EX MEM WB
инстр. i  2 stall stall IF ID EX MEM WB
инстр. i  3 stall stall IF ID EX MEM WB
инстр. i  4 stall stall IF ID EX MEM
инстр. i  5 stall stall IF ID EX
инстр. i  6 stall stall IF ID

117/184
Заустављање - губици
Као резултат у усвојеном процесору pipeline
организације код branch инструкција се губе:
– три такта, ако је branch taken,
– два такта, ако је branch not taken.

118/184
Избор степена у коме се реализује скок
Губитак три или два такта за сваки branch taken
значајно утиче на успоравање pipeline-а. Број
изгубљених тактова у оваквим ситуацијама се
може смањити ако би се утврђивање да ли је за
branch инструкцију branch taken или branch not
taken реализовало у неком од ранијих степени
pipeline-а и уколико би се срачунавање адресе
инструкције на коју се скаче, такође, реализовало
у неком од ранијих степени pipeline-а.
У општем случају побољшања су већа уколико је то
урађено што је могуће раније у pipeline-у.

119/184
Избор степена у коме се реализује скок
Утврђивање да ли је за branch инструкцију branch
taken или branch not taken се реализује на
основу провере у јединици Zero? степена EX да
ли је садржај специфицираног регистра нула или
не. Тако да у овом степену може да се одреди и
селекција наредне инструкције.

120/184
Избор степена у коме се реализује скок
Из MEM у EX

RID R EX R MEM R WB
4 M
u
ADD
x
Branch
taken
Zero
PC
rs1

M
rs2 u
Instruction IR
x
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

121/184
Избор степена у коме се реализује скок
Утврђивање може најраније да се реализује у
степену ID у коме се први пут у регистру IF/ID.IR
појављује очитана инструкција и утврђује се да је
реч о branch инструкцији.
Поред тога у степену ID се из регистарског фајла
Registers чита регистар који користи јединица
Zero?.

122/184
Избор степена у коме се реализује скок
Стога би уштеда једног такта код branch инструкција
била постигнута уколико би се јединица Zero?
пребацила из степена EX у степен ID.
Заједно са овим у степену ID треба утврдити адресу
скока. Она се може утврдити у степену ID у коме
је померај потребан за срачунавање адресе скока
расположив на излазу јединице Sign extend.
Срачунавање адресе скока захтева додатни
сабирач у степену ID, због тога што се јединица
ALU, која је између осталог била коришћена за
срачунавање адресе скока, налази у степену EX.

123/184
Избор степена у коме се реализује скок

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

124/184
Организација процесора - pipeline
степен Инструкција
IF IF/ID.IR  Mem[PC];
IF/ID.NPC, PC  (if (((IF/ID.IR0…5 eql beql) and (Regs(IF/ID.IR6…10 eql 0))or
((IF/ID.IR0…5 eql bneq) and (Regs(IF/ID.IR6…10 neq 0)))
then {NPC  ((IF/ID.IR16)16 ## IF/ID.IR16…31)}else {PC  4});
ID ID/EX.А  Regs[IF/ID.IR6…10]; ID/EX.B  Regs[IF/ID.IR11…15];
ID/EX.IR  IF/ID.IR; ID/EX.Imm  (IF/ID.IR16)16 ## IF/ID.IR16…31;
EX ALU инструкције
EX/MEM.IR  ID/EX.IR;
EX/MEM.ALUOUT  ID/EX.А func ID/EX.B; или
EX/MEM.ALUOUT  ID/EX.А func ID/EX.Imm;
load/store инструкције
EX/MEM.IRID/EX.IR;EX/MEM.ALUOUTID/EX.АID/EX.Imm;EX/MEM.BID/EX.B;
MEM ALU инструкције
MEM/WB.IR  EX/MEM.IR; MEM/WB.ALUOUT  EX/MEM.ALUOUT;
load/store инструкције
MEM/WB.IR  EX/MEM.IR;
MEM/WB.LMD  Mem[EX/MEM.ALUOUT] или
Mem[EX/MEM.ALUOUT]  EX/MEM.B;
WB ALU инструкције
Regs[MEM/WB.IR16…20]  MEM/WB.ALUOUT; или
Regs[MEM/WB.IR11…15]  MEM/WB.ALUOUT;
store инструкција 125/184
Regs[MEM/WB.IR ]  MEM/WB.LMD;
Хазарди података - додатни
add R1, R2, R3

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF
beqz R1, 50

126/184
Хазарди података - додатни
beqz R1, 50 add R1, R2, R3
Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID
beqz R1, 50 IF

127/184
Хазарди података - додатни
Податак недоступан!
??? beqz R1, 50 add R1, R2, R3

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX
beqz R1, 50 IF stall

128/184
Хазарди података - додатни
??? beqz R1, 50 nop add R4, R1, R7

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

EX/MEM.ALUOUT уместо A

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM
beqz R1, 50 IF stall ID

129/184
Хазарди података - додатни
??? ??? beqz R1, 50 nop add R1, R2, R3

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
beqz R1, 50 IF stall ID EX

130/184
Хазарди података - додатни
??? ??? ??? beqz R1, 50 nop

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
beqz R1, 50 IF stall ID EX MEM

131/184
Хазарди података - додатни
??? ??? ??? ??? beqz R1, 50

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
beqz R1, 50 IF stall ID EX MEM WB

132/184
Хазарди података - додатни

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
add R1, R2, R3 IF ID EX MEM WB
beqz R1, 50 IF stall ID EX MEM WB

133/184
Хазарди података - додатни

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9 10
lw R1, 0(R2)
beqz R1, 50

134/184
Хазарди података - додатни

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

MEM/WB.LMD уместо A

1 2 3 4 5 6 7 8 9 10
lw R1, 0(R2) IF ID EX MEM WB
beqz R1, 50 IF stall stall ID EX MEM WB

135/184
Смањивање последица због скокова
Има више метода за смањивање последица које
могу да настану у pipeline-у због скокова. Тим
методама се прави предвиђање како ће се
програм понашати код инструкција скока. На
основу тога се као прва инструкција после
инструкције скока очитава или инструкција са
адресе скока или прва следећа инструкција.
Методе предвиђања се сврставају у
– статичке и
– динамичке.

136/184
Смањивање последица због скокова
У случају статичких метода предвиђање за сваки
скок је увек исто за време комплетног
извршавања програма.
У случају динамичких метода предвиђање се мења у
току извршавања програма, на основу претходног
понашања програма.

137/184
Статичко предвиђање
У овом поглављу се разматрају четири статичке
методе понашања при скоковима у pipeline-у:
– заустављање,
– предвиђање нема скока (not taken),
– предвиђање има скока (taken) и
– закашњен скок (delayed branch).

Прве три методе су хардверске, док је четврта


метода софтверска.

138/184
Заустављање
Најједноставнија метода понашања при скоку је
заустављање pipeline-а чиме се очитавање прве
следеће инструкције иза инструкције скока
зауставља онолико периода сигнала такта колико
је потребно да се утврди следећа вредност PC-ја.
Ова метода је веома једноставна за реализацију.

139/184
Предвиђање нема скока
Могућа метода понашања при скоку је да се увек
предвиди да неће бити скока. Код ове методе
хардвер продужава са очитавањем и
извршавањем инструкција иза инструкције скока
као да скока неће бити, при чему се мора водити
рачуна о томе да инструкције иза инструкције
скока не смеју да мењају стање у процесору све
док исход инструкције скока није познат.
– У случају да нема скока продужава се са извршавањем
очитаних инструкција, јер се у pipeline-у налазе коректне
инструкције.
– У случају да има скока треба зауставити pipeline и
испрати га (flush) од погрешних инструкција.

140/184
Предвиђање нема скока - исправно

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9
инстр. i (branch not taken) IF ID EX MEM WB
инстр. i  1 IF ID EX MEM WB
инстр. i  2 IF ID EX MEM WB
инстр. i  3 IF ID EX MEM WB
инстр. i  4 IF ID EX MEM WB

141/184
Предвиђање нема скока - неисправно

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9
инстр. i (branch taken) IF ID EX MEM WB
инстр. i  1 IF idle idle idle idle
инстр. са адр. скока IF ID EX MEM WB
инстр. са адр. скока  1 IF ID EX MEM WB
инстр. са адр. скока  2 IF ID EX MEM WB

142/184
Предвиђање нема скока - губици
Као резултат у процесору код кога се одлука о скоку
доноси у степену ID код branch инструкција се
губе:
– нула тактова, ако је предвиђање било исправно,
– један такт, ако је предвиђање није било исправно.

Као резултат у процесору код кога се одлука о скоку


доноси у степену MEM код branch инструкција се
губе:
– нула тактова, ако је предвиђање било исправно,
– три такта, ако је предвиђање није било исправно.

143/184
Предвиђање има скока
Могућа метода понашања при скоку је да се увек
предвиди да ће бити скока. Код ове методе чим се
декодује инструкција скока и срачуна адреса
скока, предвиђа се да ће бити скок, па се почиње
са очитавањем и извршавањем инструкција од
инструкције на коју се предвиђа да ће се скочити.
Када се утврди да ли је заиста скок направљен:
– Ако је скок направљен у pipeline-у су коректне
инструкције, па треба продужити са очитавањем и
извршавањем инструкција.
– Ако скок није направљен, треба очистити pipeline од
инструкција иза инструкције скока, јер су погрешне, и
кренути са кораком IF прве инструкције иза инструкције
скока.

144/184
Предвиђање нема скока - губици
У случају модификованог процесора pipeline
организације ова метода нема смисла, јер се у
степену ID декодује инструкција скока, утврђује
адреса скока и одлучује да ли треба направити
скок или не.
Ова метода нема смисла ни код првобитне
варијанте разматраног процесора pipeline
организације. Код ње се у степену ID декодује
инструкција скока, а адреса скока утврђује у
степену MEM. Међутим, у истом степену се и
одлучује да ли има или нема скока, па опет ова
метода предвиђања нема смисла.

145/184
Предвиђање нема скока - губици
Ова метода би имала смисла уколико би се, на
пример, у степену ID не само декодовала
инструкција скока, већ и утврђивала адреса скока,
а тек у степену MEM одлучивало да ли има или
нема скока.

146/184
Предвиђање има скока - исправно

RID R EX R MEM R WB
4 M
ADD
u
ADD
x
Branch
taken
Zero
PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32 32
\ Extend \ \

1 2 3 4 5 6 7 8 9
инстр. i (branch taken) IF ID EX MEM WB
инстр. i  1 IF idle idle idle idle
инстр. са адр. скока IF ID EX MEM WB
инстр. са адр. скока  1 IF ID EX MEM WB
инстр. са адр. скока  2 IF ID EX MEM WB

147/184
Предвиђање има скока - неисправно

RID R EX R MEM R WB
4 M
ADD
u
ADD
x
Branch
taken
Zero
PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32 32
\ Extend \ \

1 2 3 4 5 6 7 8 9 10
инстр. i (branch not taken) IF ID EX MEM WB
инстр. i  1 IF idle idle idle idle
инстр. са адр. скока IF ID idle idle idle
инстр. са адр. скока  1 IF idle idle idle idle
инстр. i  1 IF ID EX MEM WB
инстр. i  2 IF ID EX MEM WB

148/184
Предвиђање има скока - губици
Као резултат у процесору код кога се адреса скока
срачунава у степену ID а одлука о скоку доноси у
степену МЕМ код branch инструкција се губе:
– један такт, ако је предвиђање било исправно,
– три такта, ако је предвиђање није било исправно.

149/184
Закашњен скок (delayed branch)
Код неких процесора негативни ефекти управљачког
хазарда се ублажавају или елиминишу
коришћењем софтверске методе закашњени скок
(delayed branch).
Код ове методе се током превођења иза инструкције
скока ставља онолико инструкција колико би
периода сигнала такта требало зауставити
pipeline док се не донесе одлука о томе која ће се
следећа инструкција иза инструкције скока
извршавати. То морају да буду инструкције које
треба извршити без обзира на то да ли је као
резултат извршења инструкције скока скок
направљен или не.

150/184
Закашњен скок (delayed branch)
Ова метода, слично као и техника закашњеног
пуњења (delayed load), захтева да у време
превођења преводилац нађе инструкције које
може да смести иза инструкције скока.
У случају да се одлучивање о скоку реализује у
степену ID, па би заустављање pipeline-а било
једна или ниједна периода сигнала такта. Стога би
при коришћењу ове методе требало убацити једну
инструкцију.
У случају да се одлучивање о скоку реализује у
степену MEM, па би заустављање pipeline-а било
три или две периоде сигнала такта. Стога би при
коришћењу ове методе требало убацити три
инструкције.
151/184
Закашњен скок (delayed branch)

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9
инстр. i (branch not taken) IF ID EX MEM WB
инстр. i  1 IF ID EX MEM WB
инстр. i  2 IF ID EX MEM WB
инстр. i  3 IF ID EX MEM WB
инстр. i  4 IF ID EX MEM WB

152/184
Закашњен скок (delayed branch)

Branch
RID taken R EX R MEM R WB
4 M
ADD
u
ADD Zero
x

PC
rs1

rs2
Instruction IR
Memory Registers ALU
R WB .rd
M
Data M
u
x Memory u
x

16 32
\ Extend \

1 2 3 4 5 6 7 8 9
инстр. i (branch taken) IF ID EX MEM WB
инстр. i  1 IF ID EX MEM WB
инстр. са адр. скока IF ID EX MEM WB
инстр. са адр. скока  1 IF ID EX MEM WB
инстр. са адр. скока  2 IF ID EX MEM WB

153/184
Закашњен скок (delayed branch)
• Пример: From before
– add R1, R2, R3
– beqz R2, name
– nop
– ...
– name:
• Применом наведене технике:
– beqz R2, name
– add R1, R2, R3
– ...
– name:
• Ово је најједноставнији случај када постоји
независна инструкција чије извршавање не утиче
на условни скок.
154/184
Закашњен скок (delayed branch)
• Пример: From target
– name: sub R4, R5, R6
– …
– add R1, R2, R3
– beqz R1, name
– nop
• Применом наведене технике:
– sub R4, R5, R6
– name:
– …
– add R1, R2, R3
– beqz R1, name
– sub R4, R5, R6

155/184
Закашњен скок (delayed branch)
• Пример: From fall-through
– add R1, R2, R3
– beqz R2, name
– nop
– or R7, R8, R9
– name: sub R4, R5, R6
• Применом наведене технике:
– add R1, R2, R3
– beqz R2, name
– or R7, R8, R9
– name: sub R4, R5, R6

156/184
Закашњен скок (delayed branch)
Прва техника From before може да се примени
уколико постоје независне инструкције.
Технике From target и From fall-through се користе
када технике From before не може да се примени,
али овде треба бити опрезан. Како би ове две
технике биле применљиве потребно је да
премештена инструкција не утиче на резултат
уколико се не оде на жељено место. Под овим се
подразумева да ће посао који је дата инструкција
извршила бити протраћен али ипак коректан.

157/184
Динамичко предвиђање
Динамичко предвиђање скокова захтева постојање
посебне јединице која ће динамички предвиђати
да ли ће скок бити направљен или не. За разлику
од хардверских техника које то раде статички,
увек предвиђајући да ће скок бити направљен
(taken) или да неће бити направљен (not taken),
јединица за динамичко предвиђање скокова мења
своје предвиђање у току самог извршавања
програма.
Овде треба водити рачуна о два појма:
– јединица за динамичко предвиђање
– шемама за предвиђање.

158/184
Јединица за динамичко предвиђање
Јединица са кешом предвиђања има структуру која
је јако слична са структуром кеш меморије. У
одговарајућем улазу RAM дела налази се
предвиђена вредност за PC и бит(и) предвиђања.
Предвиђена вредност за PC је адреса прве
следеће инструкције иза инструкције скока
уколико је предвиђања нула и адреса скока
уколико је предвиђања један.

159/184
Јединица са кешом предвиђања

adresa instrukcije
koja se èita

adrese instrukcija skoka predviðen PC bitovi predviðanja


M0

  

 n1

asocijativni deo RAM

Кеш за предвиђање скокова асоцијативне реализације

160/184
Јединица са кешом предвиђања
• Кад год се у степену IF чита нека инструкција
адреса те инструкције се води на улазе кеша
предвиђања и врши се провера да ли се налази
та вредност. Могуће су следеће реализације:
– Ако се не налази, то значи или да није реч о инструкцији
скока или је реч о инструкцији скока која до сада није
извршавана, па се продужава са секвенцијалним
очитавањем инструкција.

Могуће је комбиновати са статичким предвиђањем да скока неће бити!

161/184
Јединица са кешом предвиђања
– Ако се налази то значи да је инструкција која се чита
инструкција скока која је већ била извршавана, па за њу
постоји предвиђање да ли ће бити скока или не. Тада се
из RAM дела кеша добијају предвиђена вредност за PC и
бит(и) предвиђања. На исти сигнал такта се очитана
инструкција пребацује из степена IF у степен ID и
предвиђена вредност за PC уписује у PC. Треба уочити
да се са инструкцијом скока од степена IF, преко степена
ID и EX до степена MEM вуку и бит(и) предвиђања и
адреса инструкције скока. У степену MEM се за
инструкцију скока утврђује да ли скока има или не. Тада
• треба ажурирати кеш меморију и
• видети да ли су инструкције иза те инструкције добре.

162/184
Јединица са кешом предвиђања

Tag Data
Memory Memory
Branch
Address
Branch
Condition
RID
4 M
M u
u x
ADD x

PC

Instruction IR
Memory

163/184
Јединица са кешом предвиђања
• Ажурирање кеш меморије може да захтева:
– ако нема тог улаза—уношење комплетних информација,
– ако има тог улаза—ажурирање бита предвиђања и
можда предвиђене вредности за PC ако дође до промене
предвиђања.

Вишеструк приступ кешу за предвиђање (нови структурни хазард!):


•фаза у којој је одређено има ли скока или не и
•фаза дохватања инструкције
Решења:
•Кеш меморија са вишеструким приступом
•Заустављање проточне обраде
•Коришћење статичког предвиђања

164/184
Јединица са кешом предвиђања
• Видети да ли су инструкције иза те
инструкције добре захтева:
– ако за ту инструкцију није било улаза у кеш меморији па
није било предвиђања:
• скок направљен—испире се,
• скок није направљен—у реду;
– ако је за ту инструкцију био улаз у кеш меморији па је
било предвиђања:
• погрешно предвиђено—испире се,
• добро предвиђено—у реду.

165/184
Јединица са кешом предвиђања
• Треба напоменути да се може јавити и ситуација
да се у степену MEM нађе нека инструкција скока
која се до тог тренутка није појављивала, па се не
налази у кешу за предвиђање, и да су сви улази
кеша за предвиђање попуњени. Тада се применом
неког од алгоритама замене из кеша предвиђања
избацује нека од инструкција скока и тиме ствара
простор за убацивање дате инструкције скока.

166/184
Јединица са кешом предвиђања
• У размотреном кешу за предвиђање налазе се
извршене инструкције скока без обзира на то да
ли је скок направљен или не. Могућа је и
варијанта реализације кеша за предвиђање код
које се у кешу предвиђања налазе инструкције
скока само уколико је скок направљен. То захтева
да се инструкције скока убацују у кеш за
предвиђање кад год је скок направљен и да се
избацују из за предвиђање кад год скок није
направљен.

167/184
Шеме за предвиђање
• Предвиђање са једним битом.
• Предвиђање са два бита.
• Предвиђање са више бита.
• Корелисана шема за предвиђање.

168/184
Предвиђање са једним битом
Предвиђање са једним битом је најједноставнија
шема за предвиђање.
not taken taken

taken
predict
predict
not
taken
taken

not taken
Почетно стање

• Добре стране: хардвер за реализацију је


једноставан.
• Лоше стране: недостатак у петљама где се скок,
сем када се излази из петље, стално прави.
169/184
Предвиђање са једним битом
Иако се овде скок само једанпут не прави, ова
техника ће два пута погрешно предвидети. Код
првог проласка кроз петљу када се прође кроз
инструкцију скока погрешно ће се предвидети да
неће бити скока а направиће се скок и поставиће
се бит предвиђања. Код сваког следећег проласка
постављен бит предвиђања коректно ће
предвидети скок. Код последњег проласка кроз
петљу предвидеће се погрешно скок, јер се тада
излази из петље, и инвертоваће се бит
предвиђања. Код новог уласка у петљу, и то код
првог проласка, поново ће бити предвиђање да
неће бити скока.

170/184
Предвиђање са два бита
Предвиђање са два бита мења предвиђање након
два промашена. taken

not taken
predict taken predict taken
(strong) (weak)
taken

taken not taken

predict not not taken predict not


taken taken
(weak) taken (strong)
Постоји више варијанти
poèetno шеме са два бита!
stanje not taken

• Добре стране: боље предвиђање него са 1 битом.


• Лоше стране: не погађа увек.
171/184
Предвиђање са два бита
После два или више направљених скокова (taken) снажно
препоручивати (predict taken—strong) да се следећи
пут направи скок. После првог ненаправљеног скока
(not taken) још увек ће се али нешто слабије (predict
taken—weak) препоручивати да се следећи пут
направи скок. После два узастопна ненаправљена
скока (not taken) следећи пут ће се снажно
препоручивати (predict not taken—strong) да се
следећи пут не прави скок. После првог направљеног
скока још увек ће се али слабије препоручивати (predict
not taken—weak) да се следећи пут не прави скок.
После два узастопна направљена скока поново ће се
снажно препоручивати (predict taken—strong) да се
следећи пут прави скок.
172/184
Предвиђање са више бита
Двобитна шема за предвиђање је најједноставнији
случај једне општије шеме за предвиђање која
има n-битни бројач (saturating counter).
У случају n-битног бројача, бројач може да има
вредности у опсегу 0 до 2n-1. Када бројач има
вредност већу или једнаку половини максималне
вредности (2n-1), предвиђање је taken, док је у
супротном случају not taken.
Студије n-битних шема за предвиђање указују да
оне дају незнатно боље резултате него 2-битне
шеме за предвиђање. Због тога се данас 2-битне
шеме за предвиђање далеко више користе него
општије n-битне шеме за предвиђање.
173/184
Корелисана шема за предвиђање
Посебне шеме за предвиђање су корелисане шеме
које гледају понашање и текуће инструкције скока
и претходних инструкција скока.
Једна од тих шема се зове (1,1) шема за
предвиђање. Ова шема користи понашање на
задњој инструкцији скока за избор једне од две
јединице за предвиђање са 1-битном шемом за
предвиђање. Једна јединица се користи за случај
да на задњој извршеној инструкцији скока није
направљен скок, а друга за случај да је скок
направљен.

174/184
Корелисана шема за предвиђање
У општем случају (m,n) шема за предвиђање
користи понашање на задњих m инструкција скока
за избор једне од DM јединица за предвиђање, при
чему јединице користе n-битне шеме за
предвиђање. Овде је потребан и један m-битни
померачки регистар који бележи понашање на
задњих m инструкција скокова, при чему сваки бит
вредностима нула и један одређује да ли скок није
направљен или је направљен. Тренутна вредност
овог померачког регистра се користи за селекцију
једне од 2m јединица за предвиђање.

175/184
Прекиди
• Прекиди од периферија
• Позиви оперативном систему
• Прекид после сваке инструкције
• Заустављање (Breakpoint)
• Аритметичка грешка (дељење нулом, прекорачење)
• Страница није у меморији (Page fault)
• Права приступа страници
• Непостојећа инструкција
• Грешка у раду процесора
• Грешка у раду система

176/184
Прекиди
• Унутрашњи прекиди који могу да настану током
извршавања инструкције
Фаза извршавања Могући прекиди
IF Страница није у меморији; права приступа страници
ID Непостојећа или недозвољена инструкција
EX Аритметичка грешка
MEM Страница није у меморији; права приступа страници
WB -

177/184
Прекиди – могућа имплементација
• Поред програмски доступних регистара опште
намене R0 до R31 и програмског бројача PC, у
процесору постоји и програмска статусна реч
ISCP (Interrupt Status and Control Register).
Регистар ISCP је дужине 32 бита.
• Регистри R0, R29, R30 и R31 имају посебне улоге.
– Регистар R0 увек има вредност 0,
– Регистар R29 се користи као указивач на врх стека,
– У регистру R30 се чува адреса повратка приликом
позива потпрограма
– У регистру R31 се чува адреса повратка приликом
покретања опслуживања прекида.

178/184
Прекиди – могућа имплементација
• ISCP:
– GM –дозволу или забрану свих прекида,
– INI – индикатор иницијализације процесора,
– TRAP – индикатор софтверског прекида int,
– UOE – индикатор погрешног кода операције,
– ARE – индикатор прекорачења,
– NMI – индикатор захтева за немаскирајући прекид,
– MI – индикатор захтева за маскирајући прекид,
– MASK – маска за дозволу/забрану маскирајућих прекида,
– TRM – индикатор прекидa после сваке инструкције и
– INC – индикатор да прекидна рутина треба да
инкрементира адресу повратка.

179/184
Прекиди – могућа имплементација

i jedinicama
Instruction

ka p. r. RID
PCache i
Memory
PC

iz jedinice
PCache
mr 32
PPC
CL
"1"
32
32 32 ADD 0
PC 0
1
MP 32 32
2
32
OPC 3 MP 32
LD 1 NEW
0 32 4
RMEM.ALUOUT PC
5
iz jedinice

32
adresa prekidne rutine 6
Stall

CLK1 7
0 12
RMEM.PC
iz jedinice
PCache

CHIT

RMEM.COND TNT
"1" 0
1
NTT 2
RMEM.CHIT 0
3
4
CD 1
RMEM.JUMP 2
5
6
iz jedinice

7
Prekid

PREKID

ka jedinici
PCache
TNT
NTT
RMEM.TRAP

180/184
Прекиди – могућа имплементација

RMEM.VALID

RMEM.TRM
RMEM.INTM
RMEM.INTGM
RMEM.MOVI2S
PREKID
RMEM.TRAP ka p.r. RMEM
RMEM.UOE i jed. NewPC i Stall
RMEM.ARE

GM INI TRAP UOE ARE NMI MI MASK TRM INC

blok ISCR

181/184
Hyper-Threading
инструкција сигнал такта
1 2 3 4 5 6 7 8 9
P1 i IF ID EX MEM WB
P2 j IF ID EX MEM WB
P1 i  1 IF ID EX MEM WB
P2 j  1 IF ID EX MEM WB
P1 i  2 IF ID EX MEM WB
P2 j  2 IF ID EX MEM

• Како би се разрешили проблеми хазарда између


инструкција истог програма наизменично се
пустају инструкције различитих програма
• Логички процесори деле скоро све делове,
потребно је обезбедити више сетова регистара

182/184
Superscalar
инструкција сигнал такта
1 2 3 4 5 6 7 8 9
i IF ID EX MEM WB
i1 IF ID EX MEM WB
i2 IF ID EX MEM WB
i3 IF ID EX MEM WB
i4 IF ID EX MEM WB
i5 IF ID EX MEM WB

• Започињу више од једне инструкције истовремено


(могу да се прелазе у исти степен истовремену)
• Број паралелних инструкција зависи од
претходних инструкција
• Редослед инструкција се често хардверски мења

183/184
Питања?

Електротехнички Факултет
Универзитет у Београду

You might also like