Sunteți pe pagina 1din 14

În cele mai multe instanțe al RTN existența unei semicoloane implică , ca expresia din partea

dreaptă a semicoloanei să fie evaluată după cea din partea stângă, în general pe durata urmatorului
ciclu de ceas. Un metodă mai eficientă pentru a scrie RTN- ul este lasată pentru un exercițiu.

Va fi necesar un hardware suplimentar pentru detectarea altot hazarde de date și pentru a


expedia datele corespunzătoare. Este posibil pentru unele hazarde să fie nevoie de expediere de date.

5.2.3 Hazardele Write after Write (WAW) și Write after Read(WAR)

Hazardele de date despre care am discutat până acum sunt cunoscute ca și ” citește după
scriere”, sau hazarde RAW. Această frază se referă la faptul că un obiect dată poate fi citit de o
instrucțiune după ce a fost scrisă de o instrucțiune precedentă. Într-un aparat ce are o singură
magistrală, unde instrucțiunile sunt executate în ordinea în care acestea apar în fluxul de instrucțiuni,
aceasta este singurul tip de hazard ce poate să apară. În aparatele în care instrucțiunile pot fi executate
paralel sau din comandă există posibilitatea să apară două hazarde suplimentare: hazardele scriere
după scriere, WAW, și hazardele scriere după citire, WAR.

Dacă considerăm cele trei perechi de instrucțiuni mai jos, unde secvența instrucțiunii originale
execută instrucțiunea 1, apoi instrucțiunea 2:

RAW WAW WAR

1. add r0, r1, r2 1. add r0, r1, r2 1. add r0, r1, r2


2. sub r4, r3, r0 2. sub r4, r3, r0 2. sub r4, r3, r0

 În exemplul RAW observăm un hazard între citirea lui r0 de către instrucțiunea 1 după
ce instrucțiunea 1 l-a scris, așa cum am discutat pe larg mai sus.
 În exemplul WAW, se presupune că cele două instrucțiuni au fost executate de un
aparat ce poate reordona instrucțiunile astfel încât să fie executate din comandă. În
acest caz, unitatea de control trebuie să se asigure că instrucțiunea sub scrie în r0 după
ce instrucțiunea add a scris în r0, altfel r0 va avea o valoare incorectă după executarea
celor două instrucțiuni.
 De asemenea in exemplul WAR, un aparat ce poate reordona instrucțiunile astfel încât
să fie executate din comandă trebuie să se asigure că instrucțiunea sub scrie în r0 după
ce instrucțiunea add a citit variabila r0, altfel instrucțiunea add va citi o valoare incorectă
din r0.

Nu se poate face nimic pentru a ”rezolva” hazardul RAW înafară de a trasmite rezultatul

următoarei instrucțiuni pentru actualizarea dosarului registru. Deoarece trăim într-un univers
cauză-și –efect, rezultatul nu poate fi folosit înainte ca acesta să fie calculat.

Celelalte două hazarde se datorează faptului că cele două instrucțiuni au același registru de
destinație (WAW) sau au un registru al destinației ce este același cu registrul sursă al instrucțiunii de mai
sus (WAR). În ambele cazuri hazardele pot fi evitate fie prin redenumirea unuia dintre regiștri dacă un
registru de schimb este disponibil, sau prin salvarea rezultatului celei de a doua instrucțiuni într- un
registru temporar pâna când prima instrucțiune a fost executată.

5.2.4 Excepțiile și structura de tip magistrală

Excepțiile și externe trebuie întotdeauna luate în considerare atunci când este realizată structura de tip
magistrală(cascadă).Mecanismul de manipulare al excepțiilor din aparatele puternice de tip cascadă, în
special cele care au magistrale multiple – așa numitele emisie multiplă de instrucțiuni, sau aparatele
superscalare – pot deveni extrem de complexe. Sub anumite condiții în aparatele de acest tip,
realizatorii au abandonat orice pretenție de a fi capabili să sorteze lucrurile ce durează și după excepție
astfel încât aparatul să poată continua execuția într-o ordine. Excepțiile de acest tip sunt politicos
menționate ca și excepții imprecise, ceea ce înseamnă că nimeni nu știe exact ce s-a îtâmplat cu
interiorul magistralei pe durata manipulării excepției.

În conformitate cu cele mai multe condiții aceste aparate implementează excepțiile precise. În
manipularea acestora sunt foarte clar definite reguli referitoare la ce se va întâmpla cu instrucțiunile din
conductă înainte, pe timpul și după ce excepția este procesată. Excepțiile externe sunt de obicei luate
pentru a avea loc imediat după instrucțiunea care a intrat pe conductă, așa ca trebuie salvat PC – ul;
noul PC care reflectă adresa vectorului excepției trebuie încărcat în PC, și instrucțiunilor din conductă le
este permis să fie complete înainte ca excepția să fie luată. Pe de altă parte, o excepție internă s-ar fi
putut mări de către o instrucțiune în mijlocul execuției: De exemplu, o excepție divizibilă la zero ar
putea interveni în etajul ALU al conductei. În acest caz le este permis instrucțiunilor din fața celei defecte
să termine execuția. Cum să ne ocupăm de instrucțiunea care a cauzat excepția este problematic. În
mod ideal conținuturile regiștrilor din această fază ar fi salvați pentru o următoare analiză, și
instrucțiunea lăsată deoparte și înlocuită cu o nop. Instrucțiunile din conductă ce se află după cea care a
cauzăt excepția pot fi restartate după ce tratarea excepției s-a încheiat.

5.2.5 Performanță și design

Să facem acum câteva estimări cantitative despre îmbunătățiri ale performanței ce poate fi obținută în
design-ul de tip magistrală. Presupunând că pentru o primă aproximare perioadele ceasului sunt
aceleași atât pentru design- urile de tip magistrală cât și pentru cele care nu folosesc acest tip de design,
ecuația măririi de viteză cu și fără o îmbunătățire a performanței, în acest caz este

(IC x CPI x τ ) w /0−( IC x CPI x) s CPI w/0−CPI w


% Speedup = x 100 = x 100 [Eq. 5. 1]
(IC x CPI x τ )w CPIw

Dacă media CPI pentru un design care nu folosește tipul magistrală este 5, și design- ul tip magistrală
poate elibera și completa o instrucțiune pe ceas, atunci obținem

CPI w/0−CPI w 5−1


% Speedup = x 100= x 100=400 % [Eq. 5. 2]
CPIw 1

o accelerare dramatică.
Presupunem că avem o oprire în cascadă pentru fiecare din cele patru instrucțiuni ce sunt eliberate.
Acest lucru înseamnă 5 perioade pentru patru instrucțiuni, sau 5/4=1,25 CPI. În acest moment
accelerarea devine

CPI w/0−CPI w 5−1,25


% Speedup = x 100= x 100=300 %. [Eq. 5. 3]
CPIw 1,25

Concepte cheie: Procesul design-ului cascadă

Procesul design-ului cascadă implică un număr important de pași care încep cu analiza setului de
instrucțiuni și continuă cu treptele design-ului tip cascadă propus:

 Partiția setului de instrucțiuni în clase potrivite modului în care vor utilizata varietatea etajelor
magistralei.
 Încadrarea fiecărei instrucțiuni a clasei în etejele magistralei.
 Proiectarea unui pachet de date de tip magistrală unificat, incluzând numărul și marimea
regiștrilor magistralei ce vor găzdui toate clasele de instrucțiuni.
 Adăugarea multiplexoarelor si controlarea semnalelor pentru a utiliza etajele magistralei.
 Adăugarea de echipamente hardware pentru a manevra hazardele magistralei.

5.3 Nivelul instrucțiunilor Paralelism

Există două moduri fundamentale de a mări viteza unui procesor de execuție a instrucțiunilor:

prin mărirea vitezei ceasului, ceea ce conduce la micșorarea globală a timpului de excuție pe
instrucțiune, sau prin mărirea numărului de instrucțiuni ce sunt executate simultan. Prima tehnică
implică tehnologia IC și nu mai este folosită . Cea de a doua metodă este arhitecturală, și cea mai folosită
în design-ul logic. Am întâlnit deja un astfel de exemplu: nivelul instrucțiunii de tip cascadă. Într-un
processor de tip cascadă, expedierea, ramura de predicție și alte optimizări au în vedere idealul de
viteză maximă de rezolvare a problemei unei instrucțiuni (sau completare) pe ciclu de ceas. Această
rată maximă de o problemă pe tic este deobicei numită limita Flynn. Pentru ca un procesor să
depășească această limitare de viteză, trebuie ca mai mult de o intrucțiune să fie executată în același
moment al ceasului. Pentru ca emisia de instrucțiuni să fie executată correct intre ele nu trebuie să
existe nici o dependență. Proprietatea corespunzătoare a programului este numită nivel de instrucțiuni
paralele (instruction-level parallelism) ILP.

Există două moduri de a exploata ILP astfel încât să mărească viteza de procesare. Multi emisia
statică, sau VLIW(very long instruction word) design compilatorul sau design-erul identifică instrucțiuni
independente și le asamblează în câteva cuvinte de instrucțiuni ce pot fi preluate din memorie într-un
singur ciclu și emisia componentă de instrucțiuni în multiple magistrale în aceiași perioadă a ceasului. În
emisia dinamică, sau superscalară multiple instrucțiuni sunt preluate simultan pentru a umple buffer-ul
de instrucțiuni. Instrucțiunile din buffer sunt apoi examinate de către hardware la fiecare perioadă
pentru a determina care pot fi emise simultan în magistralele disponibile. Termenul superscalar provine
din diferența dintre vector și arhitecturile superscalare. Un aparat vectorial poate efectua multiple
operații aritmetice în paralel pe difetire componente al unui vector, spre deosebire de un aparat scalar
ce poate efectua o singură instructiune o dată.

5.3.1 Abordări generale asupra ILP

Aceste magistrale multiple ce sunt necesare pentru a excecuta mai multe instrucțiuni în paralel pot fi
identice sau specializate pentru diferite tipuri de instrucțiuni. Tipic procesoarele multi-issue împart
instrucțiunile în trei clase: întreg, floating point(virgulă mobilă), și branch(ramură), și au una sau mai
multe unități întregi (IUs), floating point (FPUs) și unități branch(BPUs). În mod separat unitățile de
încărcare și înmagazinare (LSUs) pot fi rezervate operațiilor cu memorie. Procesoarele highend pot chiar
concura cu computerele vectoriale prin includerea unităților de procesare vectorială (VPUs), ce pot
procesa multiple cuvinte de date în paralel. Două exemple ar fi unitatea Motorola Altivec și unitatea
Intel MMX.

Procesoarele multi-emitoare statice și dinamice reprezintă două extreme în care toate analizele
de dependență sunt realizate, respectiv, la timpul de compilare de către un program compilator sau în
timpul rulării de către partea hardware. Ambele tehnici au avantaje și dezavantaje, un amestec între
cele două este comun. Un avantaj al procesoarele statice de acest tip îl reprezintă faptul că, compilatorul
examinează mai multe instrucțiuni și eventual transformarea codului pentru a extrage multiple
instrucțiuni independente pentru a fi plasate într-o instrucțiune cuvânt lung. Un dezavantaj este acela că
ieșirile datelor dependente de ramificație nu sunt cunoscute în timpul compilării și analiza este limitată
de faptul că orice întrerupere este posibilă. Cele de tip dinamic au avantajul accesului la informațiile
despre timpul de rulare cum ar fi calea ramurei dar au dezavantajul ca implementările hardware practice
pot inițializa și analiza un număr limitat de instrucțiuni în același timp.

Aparatele multi-issue de tip dinamic. Acest tip de aparate încarcă instrucțiunile într-un cache și
eliberează decizii cu privire la care instrucțiune poate fi eliberată în care magistrală în timpul rulării.
Acest lucru solicită considerabil procesorul. La ambele circuite logice a crescut complexitatea de a lua
decizii cu privire la care instrucțiune să fie emisă în care magistrală, de a ține contabilitatea logică pentru
a căuta locația instrucțiunilor și a operanzilor și a dependențelor. Pe de altă parte, compilatoarele de
care au nevoie acest tip de aparat au nevoie doar de instrucțiuni de aranjare astfel încât să dea
randamentul unui program corect. Acest lucru înseamnă că diferite microarhitecturi ale unei ISA dată nu
necesită mdificări ale compilatorului. Astfel programele compilate pentru arhitectura Intel x86 vor rula
acum pe toți membrii familiei Intel x86 și la fel de bine pe procesoarele AMD sau altele.

Aparatele multi-issue de tip static. Acest tip de aparate se bazează pe compilator pentru a face toate
instrucțiunile să programeze decizii în timpul compilării. Singura decizie diin timpul rulării ce trebuie
făcută este în cauză cu dependențele introduse de standuri și ramuri. Astfel rezultă un procesor cu o
complexitate redusă și o suprafață mai mică pentru chip-urile ce trebuie să se ocupe de emisia
instrucțiunilor, și astfel există o suprafață mai mare rezervată altor tipuri de chip. O parte din informația
referitoare la microarhitectura procesoarelor ete mutată inapoi în compilator. Deciziile privitoare la
emisia instrucțiunilor trebuie făcute o singură dată, în timpul compilării. Dar aceasta ridică o intrebare
importantă: Ce se întâmplă când microarhitectura este modificată pentru a include sporiri sau când un
alt producător vrea să dezvolte un alt chip cu aceiași ISA dar cu o microarhitectură diferită? Există
posibilitatea includerii felexibilității în compilator pentru acomodarea unor microarhitecturi noi sau
diferită, și în noile microarhitecturi pentru acomodarea programelor ce sunt compilate de către
compilatoarele ”moștenite”, oricare ar fi mijlocul de realizare nu este o soluție ideală. Pentru fiecare
microarhitectură trebuie dezvoltate compilatoare noi sau modificate pentru a putea profita de noile
proprietăți. Mai mult de atât, adăugarea la compilator de complexități suplimentare crește posibilitatea
de apariție a bug-urilor de compilare.

5.3.2 Multi-issue static -Aparate VLIW

Așa cum sugerează numele, aparatele vliw se bazează pe instrucțiunea de tip cuvânt larg, cel puțin 64 și
până la 128 biți. Fiecare cuvânt conține câmpuri pentru a controla rutarea de date la fișiere de registre
multiple și unități de execuție. Aceasta oferă compilatorului mult mai mult control asupra operațiilor cu
date. Întrucât unitatea de control a procesorului superscalar trebuie sa emită instrucțiuni decizionale pe
baza unei mici sume de informație locală ( ce conține instrucțiunea coadă), aparatul VLIW are
proprietatea de a face aceste decizii de ordine a instrucțiunilor în timpul compilării, astfel permite
optimizarea și minimizarea hazardelor și a standurilor de rezultate. Acesta poate fi un avantaj major în
execuția codului dormat din linie continuă, dar are un dezavantaj în manevrarea cu instrucțiuni de tip
branch(ramură), deoarece nu este atât de avantajos avertizarea instrucțiunilor de tip branch, care
rezultă în standuri mai lungi și mai frecvente. Exemple de aparate VLIW din comerț sunt Multiflow, KSR-
1, Tera, Intel i860 și Apollo DN10000.

Exemplul 5.2 Proiectarea unei versiuni VLIW dual-issue a SRC exempul nostru al unui aparat VLIW
este un SRC cu două instrucțiuni pe 32 de biți pe cuvânt de 64- biți, static programate de către
compilator. Instrucțiunile dintr-un cuvânt sunt simultan emise în două magistrale. În figura 5.16 sunt
prezentate dou magistrale și instrucțiunile ce pot fi executate de fiecare.

Sunt posibile mai multe alegeri pentru comportamentul și funcționalitatea celor două
magistrale, dar noi vom face câteva alegeri arbitrare și rezonabile:

 Pentru evita folosirea operațiilor multiple de memorie pe ciclu, doar Pipeline 1 va executa
încărcări și memorări. După cum vom vedea în capitolul 6, un schimbător rapid este cel mai
scump circuit aritmetic din SRC. Având în vedere faptul că schimbările sunt rare comparativ cu
alte instrucțiuni, aceasta sugerează limitarea operațiilor de schimbare către Pipeline 2.
 Ambele magistrale pot efectua adunarea și scăderea intreagă și operații logice.
 O singură ramură(branch) pe instrucțiune este permisă, fiind procesată în Pipeline 2.
 Operanzii din magistrale transmiși oriunde este posibil.
 Magistralele lucrează similar cu proiectarea magistralei din Secțiunea 5.1 cu excepția unui etaj
suplimentar introdus pentru schimbarea instrucțiunilor și pentru lipsa unui slot pentru ramura
de întârziere.
Stage Instruction Fetch
Pipeline 1 Pipeline 2
1 Instruction 1 Instruction 2

Decode and Decode, operand


2 operand read read, and branch

3 ALU operation ALU operation

4 Memory access Shift operations

5 Register write Register write

Instrucțiuni executate în oricare Instrucțiunile


Instrucțiunile magistralei 1
dintre magistrale magistralei 2

ld, ldr, st, str la, lar, add, addi, sub, neg, srr, shra, shl, shc,
and, andi, or, ori, not, nop, br, brl
stop

Fig 5. 16 Structura unei magistrale SRC duală

Folosirea fișierelor de registre. Emiterea a două instrucțiuni poate produce pâna la patru citiri și
două scrieri în fișierul registru la fiecare ciclu, două citiri și o scriere pentru fiecare magistrală. Aceasta
poate crește până la cinci citiri și o scriere dacă instrcțiunea din Pipeline 1 este una de stocare. Pentru a
realiza aceasta pot fi procurate port-uri suplimentare pentru citire și scriere pentru a crește activitatea
fișierului registru, așa cum a fost făcut la fișierele registru design-urilor de două și trei bus-uri din
Capitolul 4. Altfel, s-ar putea duplica fișierul registru, scriind simultan ambele copii ale registrului dar
citindu-le independent. Cele două tehnici sunt ușor de combinat. (Devine responsabilitatea
compilatorului de a evita programarea a două instrucțiuni ce scriu în același registru în același cuvânt de
instrucțiune). Am făcut simpla presupunere că registrul este proiectat în așa fel încât o valoare scrisă la
etajul 5 într-un registru de rezultate este imediat disponibilă pentru o instrucțiune ce este emisă de
către etajul 2 către etajul 3 fără a fi nevoie de trecerea unui ciclu peste registru.

Dependențele și expedierea. Pentru a avea mai mult decât o emitere de instrucțiune pe tick,
expedierea poate fi aplicată oriunde este posibil. Sunt multe instrucțiuni simple în cele două magistrale
pentru stagnarea emiterii instrucțiunii pe o dependență pentru a fi o alegere sensibilă. Stagnările apar
doar când structura magistrală face expedierea imposibilă. Nu este niciun slot de întârziere în această
implementare.(Întârzierea ramurei ar trebui să se elimine singură, dar aceasta este făcută de către
tehnicile de predicție a ramurei. )
Exemple de programare. În figura 5.17a este prezentată versiunea scalară a programului SRC ce
calculează elementele seriei Fibonacci prezentate în Capitolul 2. Figura 5.17b prezintă același program
rescris pentru versiunea SRC-ului de tip dual-issue static. Sunt câteva caracteristici interesante ale
acestei versiuni paralelizată.

1. Lungimea totală a programului a fost redusă de la 11 linii la 9. Bucla, unde programul va petrece
cel mai mult timp, a fost redusă doar de la 7 linii la 6. Aceasta fiind cauzată de faptul că
magistrala 2 nu poate avea acces la memorie. Dacă această limitare ar fi fost redusă, amble
încărcări ar fi putut avea loc la linia 3. ADDI de la linia 3 ar fi putut fi mutată mai jos la linia 4,
linia 5 ar fi fost eliminată.
2. Aceste încărcări încă trebuie separate datorită hazard-ului dintr load ca scriere și alu ca citire.
Vezi tabelul 5.1.
3. În același fel stocarea dela linia 7 trebuie separată de cea de la add din linia 6 datorită
semanticii de calculare a valorii nedefinită și folosirea ei într-o instrucțiune în același cuvânt
wide.

Ca un exemplu mai complex, Figura 5.18 prezintă transformarea unui cod SRC secvențial luat din Figura
8.10, în două instrucțiuni pe cuvânt de cod pentru un SRC dual-issue.

(a) Program pentru o versiune scalară a unui SRC

;fib.asm. Calculează numerele Fibonacci

;Secvența Fibonacci este definită după cum urmează

;fib(1)=1,fib(2)=1,

;fib(n)=fib(n-1) + fib(n-2) n>2

cnt: equ 8 ;Numarul de calculari dupa primele doua

.org 0 ;Stocheaza secventa la adresa 0

seq: .dc 1 ;Initializeaza primul nr Fibonacci

next: .dc 1 ;Initializaeaza al 2-lea nr Fibonacci

ans: .dw cnt ;Locul de stocare pt urmatoarele 8 nr Fibonacci

.org ox1000 ;Incepe ass'y de la adresa hexa 1000

lar r31,loop ;adresele branch

la r0, cnt ;Init numararea

la r1, seq ;Initializeaza r1 la indexul lui seq[0]

loop: ld r2, seq(r1) ;Preia fib(n-2)

ld r3, next(r1) ;Preia fib(n-1)


add r2, r2, r3 ;calculeaza fib(n)

st r2, ans(r1) ;Stocheaza fib(n)

addi r0,r1,4 ;Incrementeaza index

brnzr31,r0,-1 ;decrementeaza numararea

stop

(b) Program pentru versiunea dual-issue a SRC

Pipeline1 Pipeline2 Line #

lar r31, loop la r0,cnt 1


la r1, seq nop 2
loop: ld r2, seq(r1) addi r0,r0,-1 3
ld r3, next(r1) nop 4
nop nop 5
nop add r2,r2,r3 6
st r2, ans(r1) nop 7
addi r1, r1,4 brrnz r31, r0 8
stop nop 9

Fig. 5.17 Program SRC pentru calcularea seriilor Fibonacci

În studierea acestui exemplu cititorul ar trebuie să se concentreze pe dependențele induse de registru și


de citirile si scrierile de memorie decât pe ințelesul programului, care va fi discutat detaliat în Capitolul
8.

Două instrucțiuni pot fi concentrate în același cuvânt dacă operanzii de citire si scriere sunt
independenți , și dacă pot fi repartizați în magistrale separate. Depinzând de cât de deștept este
compilatorul, pot fi folosite alte transformări pentru imbunătățirea micșorării codului decât simple
analize ale dependențelor. În Figura 5.18 sunt următoarele exemple:

 Constanta R6 este încărcată în mod repetat pentru a-și muta instrucțiunea în bucla exterioară.
 Instrucțiunea ld r0,Done(r2) a fost copiată pentru a salva un ciclu în bucla interioară.
 Registrul R0 a fost înlocuit de R7 pentru a prelua constanta -1 pentru a o stoca după ramura
condițională.
 Constanta de propagare combinată R0<-R2 +8 -256 în R0<-R2-248 pentru a schimba două
instrucțiuni dependente în două independente.
Single Issue Pipeline 1 Pipeline2
Driver: lar r4,Next Driver: lar r4,Next lar r5,Check
lar r5,check
lar r6,Start Start: lar r6,Start la r2,0 *1
Start: la r2,0
la r3,1 ld r0,Done(r2) la r3,1 *2
Check: ld r0,Done(r2) Check: ld r0,CICTL(r2) brmi r4,r0
brmi r4,r0
la r3,0 la r3,0 brpl r4,r0
ld r0,CICTL(r2)
bprl r4,r0
ld r0,CIN(r2) ld r1,Bufp(r2) la r7,-1 *3
ld r1,Bufp(r2)
st r0,0(r1) ld r0,CIN(r2) addi r1,r1,4
addi r1,r1,4
st r1,Bufp(r2) st ro,o(r1) addi r0,r0,-CR
addi r0,r0,-CR
brnz r4,r0 st r1,Bufp(r2) brnz r4,r0
la r0,-1
st r0,Done(r2) st r7,Done(r2) nop
Next: addi r2,r2,8 Next: addi r2,r2,8 addi r0,r2,-248 *4
addi r0,r2,-256
brnz r5,r0 ld r0,Done(r2) brnz r5,r0 *2
brzr r6,r3 nop brzr r6,r3

Fig. 5. 18 Compilatorul de transformare al unui program SRC pentru un SRC dual-issue

Expedierea în SRC-ul dual-issue. Având în vedere două instrucțiuni pe cuvânt de cod,


hardware-ul SRC dual-issue trebuie să indeplinească orice expediere necesară stagnarea emisiei
a două cuvinte de instrucțiune dacă expedierea unuia dintre operanzi este imposibilă.
Expedierea poate avea loc în una dintre cele două magistrale sau între magistrale. Figura 5. 19
prezintă câteva detalii ale celor două magistrale ale procesorului SRC. Multiplexoare (MI, NI)
pentru fiecare magistrală, etaj și operand permite ca operandul să fie preluat din fluxul normal
al magistralei sau de oriunde un rezultat de expediere este disponibil. Apar patru rezultate, A, B,
C, și D, corespunzând locurilor unde noile valori de registre ar putea fi produse.

Tabele și structuri de date. Controlul expedierii și a stagnării în SRC-ul dual-issue este bazat
pe patru structuri de date, două tabele statice de informații despre dependențele de instrucțiuni
și două tabele dinamice care descriu rezultatele și operanzii instrucțiunilor ce sunt emise dar nu
sunt completate. Tabelele statice sunt folosite de către compilator în repartizarea instrucțiunilor
în instrucțiunea cuvânt emisie dublă. Tabelele dinamice sunt folosite în timpul rulării pentru a
controla expedierea operanzilor.
Prima tabelă statică descrie disponibilitatea a valorilor rezultatelor fiecărei instrucțiuni
așa cum este parcursă prin maistrală. Informația din această tabelă este similară intrărilor din
primul rând al tabelului 5. 1 ”Write to Register File/Data Available/Earliest” , modficate pentru
design-ul cu două magistrale. Spre exemplu dacă ne referim la acel tabel și figura 5. 19,
rezultatul unui add este disponibil prima dată la etajul 3 fie pentru bus-ul A sau C, depinzând
dacă instrucțiunea este in Pipeline 1 sau Pipeline 2. Un ciclu mai târziu rezultatul va fi disponibil
la etajul 4 (bus B sau D). Datorită simplei presupuneri că operanzii sunt disponibili în fișierul
registru (RF) cât mai repede pentru a fi scriși în etajul 5, nu este necesară nicio expediere din
etajul 5. De asemenea, rezultatul unui ld nu este disponibil până la etajul 4 și permis doar în
magistrala 1 (bus B).
A doua tabelă statică descrie pentru fiecare operand al fiecărei instrucțiuni unde este
necesar cel mai târziu pentru a lua parte la execuția instrucțiunii. Informația din această tabelă
este similară intrărilor din prima coloană a tabelului 5.1, cu modificările necesare design-ului
pentru două magistrale. Ca exemplu, instrucțiunea st ra, rb(c2), necesită ca valoarea rb să fie
disponibilă la ieșirea multiplexorului M1 din etajul 3 dar poate aștepta până la etajul 4 pentru ca
valoarea ra să fie disponibilă la ieșirea lui M5.
Prima tabelă dinamică, tabela de status a registrului, descrie locația fiecărui operand
pentru fiecare instrucțiune din etajul 2. Această locație se va afla în fieșierul registru cu excepția
cazului în care operandul este produs de o instrucțiune ce încă se află stagiul de emise în
magistrală în fața instrucțiunii ce are nevoie de operand. Pentru acești operanzi tabela descrie
primul etaj și timpul la care valoarea operandului este disponibilă pentru expediere și unde este
disponibil pentru cicluri ulterioare până când instrucțiunea iși părăsește magistrala.
Instruction Fetch PC

Decode and operand fetch Decode and operand fetch PC update

op/mux/ra P1 P2 P3 op/mux/ra Q1 Q2

M1 M2 M3 N1 N2

ALU operation ALU operation


op/mux/ra Bus A A1 op/mux/ra Bus C C1

M4 M5 N4 N5

Bus B
Memory Acces Shifter
op/ra Bus B op/ra Bus D

Result write Result write

Fig 5.19
Stage Issue Location*
Instruction word
time
Instruction 1 Instruction 2
5 t-2 add r6,r4,r4 shc r7,r1,8
4 t-1 addi r5,r3,16 lar r8,12
3 t st r8,4(r7) sub r9,r5,r6
Register
R4 RF
R5 (A,t);(B,t+1)
R6 (B,t);(RF,t+1)
R7 (D,t);(RF,t+1)
R8 (C,t);(D,t+1)
R9 RF
*Bus A,B;C;D sau fișier registru (RF)

(a) Instrucțiuni emise


(b) Tabel dinamic 1: Tabel de status
al fișierului registru din etajul 3

(c)Tabelă dinamică 2: Coduri Op și setările multiplexorului emise la timpul t


Pipeline 1 Pipeline 2
st M1=D, M2=P2, M3=C, M5= A1 sub N1=A, N2=B, N4=C, N5=d

Fig 5.20 Informații dinamice pentru exemple de instrucțiuni dintr-un SRC dual-issue

În acest exemplu de aparat simplu, instrucțiunile sunt încărcate în etajul 2, etajul de decodare. În
ciclurile ulterioare de ceas ele continuă în etajul 3 și apoi în etajul 4. Deoarece, în etajul 5 orice valori
scrise în registrul de fișiere sunt imediat disponibile, expedierea poate avea loc doar de la etajul 3 sau
etajul 4. Noi informații despre statutul registrului sunt setate când o instrucțiune ce îl are ca rezultat este
emisă și este actualizată la fiecare ciclu până când instrucțiunea este completă. Pentru exemplu, pentru
sub ra, rb, rc emisă în magistrala 2, variabila ra este disponibilă bus-ului C la sfârșitul ciclului următor și
la bus-ul D la sfârșitul următorului ciclu. Pentru shr ra, rb, 5 valoarea ra nu este disponibilă în ciclul ce
urmează după emitere dar este disponibilă pe bus-ul D în următorul ciclu.

A doua tabelă dinamică descrie, pentru fiecare instrucțiune incompletă, cum fiecare operand
multiplexor al ei ar trebuie setat pentru a obține valoarea corectă din fișierul registru sau din expediere.
Această este construită din tabela statică ce descrie operanzii instrucțiunilor și cea cu statutul fișierului
registru. Dacă valoarea de rezultat a unui registru nu este disponibilă pentru expediere de către ciclul în
care este necesară ca și operand, setările multiplexorului nu pot fi construite, și instrucțiunea trebuie
oprită până când operanzii sunt disponibili.
Figura 5. 20 prezintă informația dinamică pentru pentru o secvență de trei cuvinte de
instrucțiuni la timpul t, (Figura 5.20a) când a treia pereche de instrucțiuni (st, sub) este emisă în etajul 3
(etajul ALU) al celor 2 magistrale. Setările multiplexorului (Figura 5.20c) pentru instrucțiunile emise la
timpul t sunt construite din tabela cu informații despre statusul registrului (Figura 5.20b), construite din
instrucțiunile emise la t-1 și t-2 și și actualizate la tick-uri ulterioare, și din informația statică despre
ultimul etaj unde operanzii sunt necesari diferitelor instrucțiuni. Trecerea operanzilor este ilustrată în
figura 5.21. Primul operand al st este R7, și tabela de status al registrului arată că este disponibil la bus-
ul D la un tic de ceas, așa că multiplexorul M1 este setat la D. Al doilea operand este constanta
domeniu din etajul de decodificare, așa că M2=P2. Al treilea operand, registrul ce trebuie stocat, este
R8, disponibil la bus-ul C la timpul t , deci M3=C. Multiplexoarele etajului 4 pentru magistrala 1 sunt
setate pentru flux normal al magistrale, M4=A și M5=A1. Primul și al doilea operand al instrucțiunii sub
emisă în magistrala 2 la timpul t se găsesc din tabelul de status pentru a fi disponibili la bus-urile A și B,
deci N1=A și N2=B. O singură cale către etajul 4 este folosită de sub, așa că N4=D și N5=d nu sunt
importante.

5.3.3 Multii-emisii dinamice- Arhitecturi superscalare

În arhitecturile superscalare sunt folosite de asemenea mai multe magistrale, și mai multe
instrucțiuni sunt emise în timpul unui ciclu de ceas. Selecția instrucțiunilor ce vor fi emise simultan este
făcută de către partea hardware în timpul de rulare în loc să fie determinată de către compilator.
Instrucțiuni multiple sunt preluate în paralel din memorie într-o instrucțiune buffer. Apoi , la fiecare ciclu
de ceas, controlul de emitere examinează dependențele printre instrucțiunile din buffer și cele care sunt
deja emise dar incomplete pentru a selecta cât mai multe instrucțiuni spre a fi emise în magistralele
disponibile. Expedierea poate fi făcută de același mecanism ca și multi-emisia statică odată ce a fost și
un timp de rulare în acest caz. Cu N instrucțiuni buffer și M magistrale, pot fi emise până la M
instrucțiuni pe ciclu de ceas, dar dependențele ar putea reduce acest număr.

Cu multi-emisia dinamică, ar fi posibilă emiterea unei ramuri condițională din bufferul de


instrucțiuni, și când testul este rezolvat, posibil la următorul tic, să se emită o instrucțiune
premergătoare ramurei simultan cu cea care o urmează. Acest lucru ar fi imposibil folosind multi-
emiterea statică. Pe de altă parte, cele N buffere de instrucțiuni înseamnă că instrucțiuni secvențiale
separate de de mai mult decât N nu sunt alese pentru emiterea simultană.
Instruction Fetch PC

Decode and operand fetch Decode and operand fetch


St r8 4 r7 Sub r9 r5 r6
op/mux/ra P1 P2 P3 op/mux/ra Q1 Q2

M1 M2 M3 N1 N2

ALU operation ALU operation


addi r5 lar r8
op/mux/ra Bus A A1 op/mux/ra Bus C C1

M4 M5 N4 N5

Memory acces Bus B Shifter


addi r6 shc r7
op/ra Bus B op/ra Bus D

Result write Result write

Fig 5.21 Cursul operanzilor în instrucțiunile t r8, r(r7) din Pipeline 2, Etajul 2

S-ar putea să vă placă și