Sunteți pe pagina 1din 37

Operarea in Banda de Asamblare Exemplu: Spalatorie de rufe A, B, C, D au cate un pachet de rufe pentru spalat, uscat, calcat, impachetat

Masina de Spalat este ocupata 30 pentru fiecare pachet de rufe

Masina de Uscat este ocupata 30 pentru fiecare pachet de rufe

Echipamentul de Calcat este ocupata30 pentru fiecare pachet de rufe

Manipulantul necesita 30 pentru a plasa rufele fiecarui client in pachete distincte

Operare Secventiala

Operarea Secventiala necesita 8 ore pentru 4 pachete/sarcini de lucru Cat va dura operarea in cazul Benzii de Asamblare?

Operarea in Banda de Asamblare va dura 3,5 ore, pentru 4 sarcini de lucru:

Observatii privind Operarea in Banda de Asamblare Banda de Asamblare nu micsoreaza latenta (latency) unei singure lucrari/task; ea mareste productivitatea (througput) pentru intreaga sarcina de lucru Lucrarile multiple simultane utilizeaza resurse diferite Cresterea potentiala de viteza = numarul de etaje/segmente/sectiuni ale Benzii de Asamblare Rata Benzii de Asamblare este limitata de segmentul cel mai lent Segmentele neechilibrate ca lungime/timp de operare reduc viteza de lucru Timpul de umplere (fill) al benzii si timpul de golire al benzii reduc cresterea de viteza In cazul unor dependente trebuie sa se introduca activitati nule (stall)

Cele cinci segmente pentru Incarca/Load

Ifetch: Citirea Instructiunii - Citeste Instructiunea din Memoria de Instructiuni Reg/Dec: Citeste din Registrele Generale si Decodifica Instructiunea Exec: Calculeaza adresa pentru Memoria de date Mem: Citeste Data din Memoria de Date WR: scrie data inapoi intr-unul dintre Registrele Generale

Banda de Asamblare - Mareste performanta prin cresterea productivitatii instructiunilor

In mod ideal cresterea de viteza este egala cu numarul de segmente ale Benzii de Asamblare. Se intampla acest lucru in realitate? Ideea de Baza:

Ce trebuie adaugat pentru a sectiona Unitatea de Executie?

Reprezentarea grafica a Benzilor de Asamblare:

Intrebari- Discutii: Cate cicluri sunt necesare pentru executia codului dat: Ce efectueaza UAL pe durata ciclului 4? Folositi aceasta reprezentare pentru a intelege Unitatile de Executie

Reprezentarea conventionala a Executiei in Banda de Asamblare

Operarea intr-un Singur Ciclu, in mai Multe Cicluri si in Banda de Asamblare

De ce este necesara Banda de Asamblare? Se presupune ca se executa 100 de instructiuni Operarea intr-un Singur Ciclu: 45ns/ciclu x 1CPI x 100 inst = 4500ns

Operarea in mai Multe Cicluri: 10ns/ciclu x 4,6 CPI (datorita mix-ului de instructiuni) x 100 inst = 4600ns

Operarea in Banda de Asamblare ideala: 10ns/ciclu x ( 1 CPI x 100 inst + 4 ciclur pt. golire) = 1040 ns

De ce Banda de Asamblare? Pentru ca resursele sunt prezente exista!

Operarea in Banda de asamblare poate conduce la dificultati: Hazarde Hazarde Structurale: Incercarea de a folosi simultan aceeasi resursa in doua moduri diferite - exemplu: combinatia masina de spalat/uscat va reprezenta un hazard structural sau echipament de calcat ocupat. Hazarde de Date: Incrcarea de a folosi un obiect/data inainte de a fi generat/generata - Exemplu: o soseta dintr-o pereche in uscator iar alta in masina de spalat - instructiunea curenta depinde de rezultatul instructiunii precedentecare se afla in Banda de Asamblare Hazarde de Control: incercarile de a lua decizii inaintea evaluarii conditiilor Exemplu: spalarea echipamentului de footbal necesita un anumit nivel al detergentului; trebuie examinate dupa uscare inaintea incarcarii urmatoare - Instructiunile de ramificare Hazardele se pot rezolva prin asteptare - Unitatea de Comanda Hardware trebuie sa detecteze hazardul si sa ia masuri (intarzieri) pentru rezolvarea lui

O singura Memorie conduce la Hazard structural:

Detectarea se realizeaza usor in acest caz: jumatatea din dreapta marcata = citeste jumatatea din stanga = scrie

Hazardele structurale limiteaza performantele Exemplu: daca avem 1,3 accese la memorie pe instructiune si numai un singur acces pe ciclu atunci: CPI mediu 1,3 in caz contrar resursa este utilizata mai mult de 100%

Solutia pentru Controlul Hazardului Stall: asteapta pana decizia este clara: este posibil ca decizia sa fie amanata pana in sectiunea a-doua prin adaugarea de hardware pentru a verifica registrele al caror continut este citit.

Impact: 2 cicluri de ceas pentru instructiunea de ramificare => lenta

Solutia pentru Hazardele de Control Predictie: se presupune o directie si apoi se revine daca directia nu a fost corecta - Predictia nu este considerata

Impact: O perioada de ceas pe instructiunea de ramificare daca este corect, doua perioade de ceas daca este fals ( corect >> 50% din timp) O schema mult mai dinamica: istoria ramificarii corecte (>>90%)

Solutia pentru Hazardele de Control Redefinirea comportarii ramificarii (necesita pozitii dupa urmatoarea instructiune): ramificarea intarziata

Impact: Zero cicluri de ceas pentru instructiunea de ramificare daca se gaseste o instructiune pentru a putea fi plasata in slot-ul respectiv

Este mai putin utila in cazul lansarii mai multor instructiuni pe un ciclu de ceas

Hazarde de Date pe r1 add r1 ,r2,r3 sub r4, r1 ,r3 and r6, r1 ,r7 or r8, r1 ,r9 xor r10, r1 ,r11 Dependentele inapoi/in revers (in timp) conduc la hazarde:

Solutia pentru Hazardele de Control Transfera inainte (Forward) rezultatul de la o sectiune la alta

sau OK daca citire/scriere sunt definite corect

Fortarea in avans (Bypassing): Ce se poate spune despre Incarcari? Dependentele in revers in timp sunt hazarde

Nu se pot solutiona prin fortarea in avans (Forwarding) Trebuie sa se intarzie/stall instructiunea in functie de incarcari

Proiectarea unui Procesor cu Banda de Asamblare Se vor reexamina Unitatile de Ececutie si de Comanda Se vor asocia resursele cu starile Se vor lua masuri ca fluxurile sa nu intre in conflict sau se vor gasi solutii Plaseaza controlul in sectiunea corespunzatoare.

Unitate de executie in Banda de Asamblare

Procesor cu Banda de Asamblare Ce se va intampla in cazul in care se va lansa o noua instructiune in fiecare ciclu?

Comanda si Unitatea de Executie

Instructiunea Incarca-Load in Banda de Asamblare

Cele cinci Unitati Functionale Independente in Banda de Asamblare de mai sus sunt:

Memoria de Instructiuni pentru Segmentul Ifetch Porturile de iesire (busA si busB) ale Registrelor Generale pentru segmentul Reg/Dec UAL pentru segmentul Exec Memoria de Date pentru segmentul Mem Portul de intrare (bus W) Write, pentru segmentul Wr

Cele patru Segmnete ale instructiunilor de tip R:

Ifetch: Citeste Instructiunea Citeste Instructiunea din Memoria der Instructiuni

Reg/Dec: Citeste Registrele si Decodifica Instructiunea Exec: UAL opereaza cu continuturile a doua registre Se actualizeaza PC

WR: Scrie/Stocheaza iesirea UAL inapoi in registrele generale

Plasarea in Banda de Asamblare a Instructiunilor de tip R si Incarcare

Exista un conflict in Banda de Asamblare sau un Hazard Structural


-

Doua instructiuni incearca sa scrie in acelasi registru general simultan Pentru Registrele Generale exista un singur port de scriere

Observatie Importanta - Fiecare unitate functionala poate fi utilizata o singura data in cadrul unei instructiuni Fiecare unitate functionala trebuie utilizata in acelasi segment pentru toate instructiunile Instructiunea de Incarcare utilizeaza Portul de Scriere (Write) al Registrelor Generale in segmentul cinci

Instructiunile de tip R utilizeaza Portul de Scriere (Write) al Registrelor Generale in segmentul patru

Sunt doua modalitati pentru rezolvarea hazardului in Banda de Asamblare

Solutia 1: Se insereaza un NOP - Bula (Bubble) in Banda de Asamblare

Se insereaza un nop In Banda de Asamblare pentru a preintampina doua scrieri in acelasi ciclu Comanda complexa Se pierde citirea Instructiunii si se creeaza posibilitatea scrierii in Registrele Generale

In ciclul 6 nu se lanseaza nici o instructiune

Solutia 2: Se intarzie Scrierea pentru Instructiunea de tip R cu Un ciclu - Intarzie scrierea registrului destinatie, de catre instructiunea de tip R, cu un ciclu Instructiunile de tip R utilizeaza, de asemenea, portul de scriere al Registrelor Generale, in segmentul 5 Segmentul Mem este neoperational

Unitatile de Comanda si Executie modificate:

Cele patru segmente ale Instructiunii Memoreaza Store

Ifetch: Citeste Instructiunea Citeste instructiunea din Memoria de Instructiuni

Reg/Dec: Citeste Registrele Generale si Decodifica Instructiunea Exec: Calculeaza adresa de memorie Mem: Scrie data in Memoria de Date

Cele trei segmente ale instructiunii de ramificare Beq:

Ifetch: Citeste Instructiunea Citeste Instructiunea din Memoria de Instructiuni

Reg/Dec: Citeste Registrele Generale si Decodifica Instructiunea

Exec: Compara cei doi operanzi din registre Selecteaza adresa tinta corecta Forteaza adresa in PC

Diagrama Comenzii:

Unitatea de Executie si Comanda permanenta a Datelor

Fie programul de mai jos in care adresele sunt in octal 10 lw r1, r2(35) 14 addI r2, r2, 3 20 sub r3, r4, r5 24 beq r6, r7, 100 30 ori r8, r9, 17 34 add r10, r11, r12 100 and r13, r14, 15

Rezumat privind Operarea in Banda de Asamblare Elementele care faciliteaza implementarea Benzii de Asamblare: - Toate Instructiunile au aceeasi lungime Numarul formatelor de instructiuni este redus

- Operanzii din memorie apar numai in instructiunile Incarca si Memoreaza Elementele care complica Operarea in Banda de Asamblare: - hazardele structurale: in conditiile unei singure memorii - hazardele de date: o instructiune depinde de instructiunea precedenta Se va construi o Banda simpla de Asamblare si se vor examina problemele de mai sus Se vor examina procesoarele moderne si se vor evidentia dificultatile de rezolvat - gestiunea/manipularea exceptiilor - incercarea de a creste performanta executand instructiunile in alta ordine etc Banda de Asamblare reprezinta un concept fundamental - pasi multiplii care utilizeaza resurse distincte Se folosesc capabilitatile Unitatii de Executie prin prelucrarea instructiunii in Banda de Asamblare - se lanseaza urmatoarea instructiune in timp ce se se executa instructiunea curenta este limitata de lungimea/durata celui mai lent segment (plus incarcarea/descarcarea-golirea) detecteaza si rezolva hazardele

Trecerea in revista a Principiilor Benzii de Asamblare Banda de Asamblare transfera controlul spre sectiunile spre care se deplaseaza datele Fortarea in avans/Nop-urile (Stalls) sunt asigurate de catre controlul local Hazardele limiteaza performantele Hazardele structurale: necesita mai multe resurse hardware Hazardele de date: necesita fortarea in avans, planificarea de catre compilator Hazardele de control: evaluarea timpurie & PC, ramificarea intarziata, predictie

Cresterea lungimii Benzii de Asamblare creste impactul hazardelor; Banda de Asamblare creste largimea de banda a instructiunii si nu latenta

Compilatoarele reduc costurile hazardelor de control si de date: Incarca slot-urile de intarziere Slot-urile de intarziere pentru ramificare Prevederea/Predictia ramificarii

Hazardele Benzii de Asamblare

Recapitulare: Hazarde de Date: Se vor evita solutii de tip prin proiectare: Se elimina WAR prin citirea in avans a operanzilor in Banda de Asamblare Se elimina WAW prin efectuarea tuturor WB-urilor in ordine (ultimul etaj, static)

Se detecteaza si se rezolva celelalte care mai raman Stagneaza sau forteaza in avans (daca este posibil)

Recapitulare: Problema Exceptiilor/Intreruperilor: Exceptii/Intreruperi: 5 instructiuni se executa intr-o Banda de Asamblare cu 5 segmente: - Cum se poate stopa Banda de Asamblare? - Restart? - Ce a provocat intreruperea? Segmentul : IF Problemele care conduc la intreruperi: Eroare de pagina la citirea instructiunii; accesul nealiniat la memorie; violarea protectiei memoriei ID EX MEM Cod de operatie nedefinit sau ilegal Exceptie aritmetica Eroare de pagina la citirea datei; accesul nealiniat la memorie; violarea protectiei memoriei; eroare la memorie Incarca/Load cu eroare de pagina de date, Aduna/Add cu eroare de pagina de instructiune? Solutia 1: vector intrerupere/instructiune, verifica ultimul segment Solutia 2: intrerupere, daca este posibil, restarteaza totul incomplet

Problemele care vor fi discutate in continuare: Banda de Asamblare pentru MIPS R3000 Banda de Asamblare evoluata SuperScalar, VLIW/EPIC

MIPS R3000: Organizarea ceasului:

Ceas bifazic, fara suprapuneri Segmentul Benzii de Asamblare consta in doua latch-uri (controlate pe nivel)

MIPS R3000: Banda de Asamblare pentru Instructiuni:

Hazardul de Date in r1 (reluare):

In Banda de Asamblare MIPS R3000 nu mai este necesara fortarea inainte de la segmentul WB MIPS R3000 Operatii multicicluri:

Aspecte privind Proiectarea benzii de Asamblare

Superscalar Simplu. Lansarea de instructiuni separate: Int si FP

Obtinerea unui CPI < 1: Lansarea mai multor Instructiuni/ciclu Doua solutii principale: Superscalar si VLIW (Very Long Instruction Word) Superscalar: numarul de instructiuni/ciclu variaza intre 1 si 6 - Paralelismul si dependentele determinate se rezolva prin hardware - IBM PowerPC 604, Sun UltraSparc, DEC Alpha 21164, HP 7100 VLIW: numar fix de instructiuni (16), paralelismul fiind determinat de catre compilator: - Paralelismul este prezent; compilatorul trebuie sa programeze intarzierile pentru obtinerea unor rezultate corecte EPIC (Explicit Parallel Instruction Computer)/Intel Pachete de 128 de biti continand 3 instructiuni (se pot executa secvential) Se pot lega pachetele de cate 128 de biti impreuna pentru a permite un paralelism accentuat Compilatorul determina paralelismul, hardware-ul verifica dependentele si forteaza in avans sau introduce nop Obtinerea unui CPI < 1: Lansarea mai multor Instructiuni/Ciclu DLX Superscalar: 2 instructiuni, 1 FP si 1 oricare -

Citeste 64 biti/ciclu de ceas; Int la stanga, FP ladreapta

A doua instructiune poate fi lansata numai dac prima instructiune este lansata Mai multe porturi pentru registrele FP in vederea efectuarii pe perechi a operatiilor FP load si FP op

O intarziere de un ciclu incarca/Load se expandeaza in 3 instructiuni intr-un Superscalar (SS) instructiunile din jumatatea dreapta nu-l pot utiliza si nici instructiunile din urmatorul slot/jeton

Ciclurile Debuclate care minimizeaza Nop-urile/Stalls pentru Scalar

Ciclurile Debuclate pentru Superscalar:

Organizarea prelucrarii in Banda de Asamblare prin software: Observatie: daca iteratiile in cadrul ciclurilor sunt independente, atunci se poate realiza ILP ( Instruction Loop Pipelining) prin preluarea instructiunilor din diferite iteratii Banda de Asamblare prin Software: reorganizarea ciclurilor astfel incat fiecare iteratie este realizata din instructiuni selectate din diferite iteratii ale ciclului original (solutia Tomasulo in Software)

Organizarea prelucrarii in Banda de Asamblare prin software: Exemplu

Limitarile organizarii Superscalare: In timp ce partitionarea Int/FP este simpla pentru hardware, obtinerea unui CPI = 0,5 se realizeaza numai pentru programele cu: - exact 50% operatii FP - fara hazarde Daca se lanseaza mai multe instructiuni in acelasi timp apar dificultati mari in decodificare si lansare - chiar pentru un scalar 2 => examinarea a doua coduri de operatie, a sase specificatori de registre si a decide daca se lanseaza una sau doua instructiuni VLIW: compromis legat de spatiul pentru instructiune si decodificarea simpla - Instructiunea cu lungime mare ofera posibilitati pentru multe operatii - Prin definitie, toate operatiile pe care un compilator le plaseaza intr-un cuvant instructiune se pot executa in paralel - Exemplu: 2 operatii cu intregi, 2 operatii FP, 2 accese la memorie, 1 ramificare - 16 pana la 24 biti pe camp => lungimea cuvantului instructiunie de 7*16 sau 112 biti la 7*24 sau 168 biti Este necesara o tehnica de compilare care poate planifica mai multe ramificari

Debuclarea ciclurilor in VLIW:

Debuclarea de 7 ori pentru a evita intarzierile 7 rezultate in 9 cicluri de ceas sau 1,3 cicluri de ceas pe iteratie Pentru VLIW sunt necesare mai multe registre (EPIC => 128 int + 128 FP)

Trasarea Planificarii Paralelismul pe ramificarile IF in raport cu ramificarile LOOP Doi pasi: - Trasarea selectiei: gasirea unei secvente de blocuri de baza (trasare) a unei secvente (predictie statistica) lungi de cod unicursal Trasarea compactarii: fortarea trasarii in cateva instructiuni VLIW este necesara pastrarea codului in cazul unei predictii eronate Scheme Hardware: Paralelismul Instructiunilor De ce in hardware in timpul executiei? Functioneaza atunci cand dependenta reala nu este cunoscuta la momentul compilarii Compilatorul este mai simplu Codul pentru o masina se executa bine si pa alta masina - Ideea de baza: Permite efectuarea instructiunilor aflate in spatele lui stall

- Permite executia in afara ordinii => terminarea in afara ordinii


-

Segmentul ID este verificat atat pentru dependentele structurale, cat si pentru cele de date

Schemele Hardware: Paralelismul Instructiunilor: Executia in afara ordinii divizeaza segmentul ID: 1. Lansare: decodifica instructiunile, verifica existenta hazardelor structurale 2. Citeste operanzii: asteapta pana cand nu se mai inregistreaza hazarde de date si apoi citeste operanzii Tabelele de scor (Scoreboards) permit executia instructiunilor atungi cand se indeplinesc conditiile 1 si 2. CDC 6600: lansare in ordine, executie in afara ordinii, terminare in afara ordinii

Implicatiile Tabelei de Scor: Terminarea in afara ordinii => hazarde WAR, WAW? Solutii pentru WAR: - Plaseaza in cozi atat operatia cat si copiile operanzilor sai - Citeste registrele numai pe durata segmentului Citeste Operanzii Pentru WAW trebuie detectat hazardul: nop pana cand altele se termina Trebuie sa fie mai multe instructiuni in faza de executie => unitati de executie multiple sau unitati de executie in Banda de Asamblare Tabela de scor pastreaza evidenta dependentelor, a starilor sau operatiilor Tabela de scor inlocuieste ID, EX, WB cu 4 segmente

Performantele Dinamice ale organizarii Superscalare

Predictia Dinamica a Ramificarii Solutie: o schema cu 2 biti care modifica predictia daca aceasta este eronata de doua ori.

Acuratetea BHT (Tabela Istoriei Ramificarilor) ` Predictie eronata datorita aprecierii eronate pentru acea ramificare obtinerii istoriei ramificarii pentru o ramificare eronata cand se indexeaza tabela

o tabela cu 4096 de intrari pentru diverse programe asigura intre 1% predictii eronate (nasa7, tomcatv) si 18% (eqntoott), cu spice (5 si gcc 12%

tabela cu 4096 de intrari este la fel de avantajoasa ca si o tabela cu numar infinit de intrari, dar 4096 intrari implica mult hardware

Adresa este necesara in acelasi moment in care este necesar rezultatul predictiei Tamponul Ramificatiei Tinta (BTB Branch Target Buffer): Adresa indexului ramificatiei pentru a obtine rezultatul predictiei si adresa (daca este efectuata) - Nota: trebuie efectuata verificarea pentru potrivire acum, intrucat nu se poate utiliza o adresa incorecta de ramificare

Adresele instructiunii de revenire sunt determinate cu ajutorul stivei

Predictia Dinamica a Ramificatiei - Rezumat: - Tabela Istoriei Ramificarilor (BHT Branch History Table): 2 biti pentru acuratetea buclei Tamponul Ramificatiei Tinta (BTB Branch Target Buffer): include adresa de ramificare si predictia Suportul Hardware pentru mai mult Paralelism la Nivelul Instructiunilor Speculativ: permite unei instructiuni sa lanseze ceea ce este dependent de ramificatia prezisa fara alte consecinte (inclusiv exceptiile) daca ramificarea nu este efectuata (undo hardware) Adesea se incearca combinarea cu planificarea dinamica Separarea rezultatelor baipasarii/ocolirii sperculative de cele ale ale ocolirii reale cand instructiunea nu mai este speculativa scrie rezultatul (acorda incredere instructiunii) executa in afara ordinii dar acorda incredere in ordine

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