AOR 2 (2) - Pipelining
AOR 2 (2) - Pipelining
arhitektura
CISC (Complex Instruction Set Computers)
Tokom 60-tih i 70-ih god. 20. veka osnovni pravac u
razvoju računara ogledao se u povećanju
kopleksnosti CPU. Ta kompleksnost se ogledala u:
Povećanju broja instrukcija (120-350)
Povećanju kompleksnosti instrukcija
Povećanju mogućih načina adresiranja (npr. MC 68020 je
imao 18 adresnih režima)
Veliki broj specijalizovanih a mali broj registara opšte namene
Instrukcije su različite dužine (od 1 do 11 reči kod MC 68020)
Mikroprogramsko upravljanje (zahteva se velika
mikroprogramska memorija zbog složenih instrukcija)
Razlozi: poboljšanje performansi i pojednostavljenje
pisanja kompilatora
CISC – faze u izvršenju instrukcija
IF – pribavljanje instrukcije (Instruction fetch)
ID – dekodiranje instrukcije (Instruction Decode)
EA – izračunavanje efektivne adrese operanada
OF – pribavljanje operanada (Operand Fetch)
EXE – izvršenje instrukcije (Execution)
Primer Motorola 680X0
18 addressing modes:
Data register direct.
Address register direct.
Operand size:
Immediate. Range from 1 to 32 bits, 1, 2,
Absolute short. 4, 8, 10, or 16 bytes.
Absolute long.
Address register indirect.
Address register indirect with postincrement.
Address register indirect with predecrement. Instruction
Address register indirect with displacement.
Address register indirect with index (8-bit).
Encoding:
Address register indirect with index (base). Instructions are stored in 16-
Memory inderect postindexed.
bit words.
Memory indirect preindexed.
Program counter indirect with index (8-bit). the smallest instruction is 2-
Program counter indirect with index (base). bytes (one word).
Program counter indirect with displacement. The longest instruction is 5
Program counter memory indirect
postindexed.
words (10 bytes) in length.
Program counter memory indirect preindexed.
Primer Intel X86, 386/486/Pentium
(Pipelining)
Protočnost (pipelining)
Protočnost je tehnika projektovanja hardvera kojom
se uvodi konkurentnost u računarski sistem tako što
se neke osnovne funkcije (f) čije se izvršenje često
zahteva dele na niz podfunkcija f1, f2, ..., fk, tako da
budu zadovoljeni sledeći kriterijumi:
Izračunavanje osnovne funkcije f je ekvivalentno
sekvencijalnom izračunavanju podfunkcija f1, f2, ..., fk.
izlazi prethodne podfunkcije predstavaljaju ulaze za sledeću
podfunkciju u nizu podfunkcija koje se izvršavaju
Osim razmene podataka izmedju podfunkcija ne postoji
nikakva druga zavisnost
Može se projektovati hardver za izračunavanje svake
podfunkcije
Vremena potrebna ovim hardverskim jedinicama da obave
individalana izračunavanja su približno jednaka
Protočnost (nast.)
Hardver za izračunavanje bilo koje podfunkcije zove
se stepen protočnog sistema (pipeline stage)
U zavisnosti od načina upravljanja tokom podataka
kroz protočni sistem mogu se razlikovati
asinhroni protočni sistemi
sinhroni protočni sistemi
Asinhroni model – razmenom podataka izmedju dva
susedna stepena upravlja se nekom handshake
procedurom. Hardverski stepeni sadrže memorijske
elemente
data data data data data
...
ready ready ready ... ready ready
ack ack ack
... ack ack
Protočnost (nast.)
Sinhroni model – razmenom podataka upravlja se
pomoću globalnog clk. Hardverski stepeni ne sadrže
memorijske elemente. Zato se izmedju stepena
ubacuju lečevi.
clk
Pranje sušenje
Laza
Treba primetiti da se
između svakog
stepena nalaze
lečevi koji moraju da
zapamte podatke koji
su neophodni za
sledeće stepene
protočnog sistema
Protočni sabirač
Neaka su kašnjenja koja unose pojedini stepeni
T1=60 ns
T2=50 ns
T3=80 ns
T4=50 ns
T5=80 ns
TL=10 ns
Klok perioda protočnog sistema je T=max{60, 50,
80, 50, 50}+10=90ns
Vreme potrbno neprotočnom sabiraču da sabere dva
FP broja iznosi Tnp=60+50+80+50+80=320ns
Vreme potrebno protočnom sabiraču da sabere dva
FP broja iznosi Tpr=5*90=450ns
Gde je dobit od uvodjenja protočnosti?
Ako je potrebno sabrati n parova brojeva
neprotočnom sabiraču će biti potrebno
Tnp=n*320 ns
a protočnom
Tpr=450+(n-1)*90 ns
Za n=10
Tnp=10*320=3200 ns
Tpr=450+9*90=1360 ns
Što je veće n performanse protočnog sistema su
bolje. Za dovoljno veliko n ubrzanje protočnog
sistema jednako je broju stepena, k.
Gantov dijagram
Prikazuje zauzetost pojedinih stepena u vremenu
S5 P1 P2 P3 P4 P5 P6 P7
S4 P1 P2 P3 P4 P5 P6 P7
S3 P1 P2 P3 P4 P5 P6 P7
S2 P1 P2 P3 P4 P5 P6 P7
S1 P1 P2 P3 P4 P5 P6 P7
0 1 2 3 4 5 6 7 8 9 10 t [*90ns]
Klasifikacija protočnih sistema
U odnosu na način povezivanja hardverskih stepena:
Linearni (kaskadna veza izmedju stepena; sabirač iz
prethodnog primera)
Nelinearni – pored kaskadnih veza postoje veze izvedene u
napred i povratne (u nazad)
ulaz
S1
S2
S3
izlaz A
Klasifikacija protočnih sistema
U odnosu na mogućnosti obrade
Jednofunkcijski – protočni sistemi sa fiksno dodeljenom
funkcijom (sabirač iz prethodnog primera)
Višefunkcijski – mogu obavljati više funkcija u isto ili različitim
vremenskim trenucima. Mogu biti
Statički
Dinamički
OP Rs1 Rd Immed
OP – kod operacije
Rs1 – izvorni operand za ALU
- bazni registar za generisanje memorijske adrese kod load i store
- registar čiji se sadržaj testira za slučaj barnch
Rd – polje odredišnog registra za slučaj ALU op. i load
- polje regista čiji se sadržaj pamti u mem. za slučaj store
Rd=0 za branch
Primer I formata instrukcija
rd Imm Rs1
LW R1, 30 (R2) dejstvo R1 Mem[30 +[R2]]
SW 500(R4), R3 dejstvo Mem[500+[R4]] [R3]
ADDI R1,R2,#3 dejstvo R1 [R2]+3
BEQZ R1, ime dejstvo if R1=0 then PC PC+ime
Format instrukcija - R
R format (ALU operacije tipa registar-u registar)
31 26 25 21 20 16 15 11 10 6 5 0
31 26 25 0
OP offset (pomeraj)
A ¬ Regs[Rs1];
B ¬ Regs[Rs2];
Imm ¬ ((IR15)16##IR 15..0 ) sign-extended immediate field of IR
ALUOutput ¬ A + Imm;
Register-Register ALU instruction:
ALUOutput ¬ A func B;
Register-Immediate ALU instruction:
ALUOutput ¬ A op Imm;
Branch:
Branch:
Reg[IR15..11] ¬ ALUOutput;
Reg[IR20..16] ¬ ALUOutput;
Load instruction:
Reg[IR20..16] ¬ LMD;
ID ID/EX←Regs{IF/ID.IR25..21]; ID/EX.B
25..21 ←Regs[IF/ID.IR20..16]; 20..16
ID/EX.NPC←IF/ID.NPC; ID/EX.IR ←IF/ID.IR;
ID/EX.Imm←(IR15)16 ##IR15..0;
WB Regs[MEM/WB.IR15..11]← Regs[MEM/WB.IR20..16] ←
MEM/WB.ALUOutput; MEM/WB.LMD;
or
Regs[MEM/WB.IR20..16]←
MEM/WB.ALUOutput;