Daca unitatile functionale sunt libere -> aceste instructiuni sunt trimise la unitatile
functionale pentru executie.
-lansare singulara, lansare duala, lansare ordin patru: fiecare thread poate lansa
1, 2 sau 4 instructiuni per ciclu, rezultand numarul de thread-uri 8, 4 sau 2;
Complexitatea hardware pentru modelul cu lansare complet simultana este foarte mare
(deci si costul). Performantele modelelor cu lansare de ordin 4 si chiar 2 sunt apropiate,
dar la un cost mai scazut.
Asigurarea fluxului de instructiuni
Problema importanta: asigurarea ca in fiecare ciclu sa fie suficiente
instructiuni citite din memorie. Solutii:
-unitatea de fetch este divizata pentru citirea de instructiuni de la thread-uri
diferite;
-fetch selectiv: se aplica algoritmi pentru selectarea thread-urilor pentru care se vor
citi instructiuni. Algoritmi:
-BRCOUNT: prioritate maxima thread-ul cu probabilitate minima de
a se afla pe o secventa gresita (se numara instructiunile de salt „branch” => prioritate
maxima thread-ul cu numarul minim de instructiuni “branch”);
-MISSCOUNT: prioritate maxima thread-ul cu numarul minim de
evenimente lipsa in cache;
-ICOUNT: prioritate maxima thread-ul cu numarul minim de
instructiuni in banda de asamblare in segmente anterioare unitatilor functionale;
-IQPQSN: prioritate minima thread-ului care are instructiuni in coada
in ultimele pozitii (introduse recent) => cele mai bune rezultate cu ICOUNT.
-pre-executie: accelerarea thread-urilor prin generarea de noi thread-uri care
realizeaza diferite pre-executii (precitirea datelor si instructiunilor, prezicerea
ramificatiilor, etc.);
-tehnici de paralelizare a buclelor (restructurarea buclelor, fuziunea buclelor,
desfacerea buclelor etc);
-optimizari ale compilatoarelor;
Analiza ariei ocupate in functie de numarul de thread-uri
Burns si Gaudiot -> cresterea liniara a capacitatilor de fetch, decodificare,
redenumire si a numarului de registre pentru redenumire (capacitatea de repartizare
instructiuni) => crestere quadratica a suprafetei ocupate pe chip. Rezultatele (functie de
numarul de thread-uri t):
Bloc functional Aria
Hyperthreading Technology: un procesor fizic apare ca doua procesoare
logice (resursele fizice de executie sunt partajate, iar starea arhitecturala este dublata
pentru cele doua procesoare logice).
Organizarea (doua procesoare fizice, fiecare cu cate doua copii ale starii
arhitecturale => sistemul apare ca si cand ar avea 4 procesoare ):
Implementarea tehnologiei : + 5% dim. chipului si cerinte maxime de putere
performante mult mai mari.
CMP => TLP prin rularea unor secvente complet separate de instructiuni pe
procesoare separate .
Avantaje:
-durata ciclului redusa datorita caracteristicelor naturale de cluster
(fiecare CPU este un mic cluster rapid de componente). S.O. aloca fiecarui CPU un
singur thread de control (nu necesita alocare dinamica de instructiuni), ceea ce
limiteaza exploatarea dinamica a ILP, dar permite ca fiecare CPU sa fie mic si rapid.
Arhitectura de baza:
8 procesoare mici superscalare cu unitate de lansare de dim. 2.
Core-urile:
-complet independente;
-strans integrate cu memoriile cache (accesul la cache intr-un singur ciclu).
2) set de buffere de scriere care pastreaza scrierile speculative pana cand pot fi
executate sigur in cache-ul L2 (garantat sa pastreze numai date nespeculative).
Fiecare thread speculativ are un astfel de buffer. Numai dupa incheierea executiei
thread-urilor bufferele sunt inscrise in L2 si scrierile raman permanente. Daca un thread
speculativ („Me”) citeste din cache-ul L1, se executa cautarea si in bufferele de scriere
ale thread-urilor, in caz de coincidenta se furnizeaza linia din buffer si se seteaza bitul
Modified al liniei (mai optim numai pentru thread-urile i-1 si i). Daca exista
coincidenta in bufferul thread-ului speculativ i+1, se seteaza bitul de preinvalidare al
liniei:
O arhitectura scalabila bazata pe un CMP: Piranha
Schema bloc (Compaq ):
-8 core-uri CPU Alpha, cu lansare o singura instructiune, executie in-order.
-fiecare core CPU conectat direct la cache de instructiuni (iL1) si cache de date
(dL1) de 64 KB, organizare set asociativa de dim. 2, protocol MESI.
-RT (Router);
-IQ (Input Queue);
-OQ (Output Queue);
-PS (Packet Switch).
=> largimea de banda: 32 GB/s (pentru fiecare chip).
O posibila abordare: „tiled architecture” -> imparte pastila de siliciu intr-un numar
mare de blocuri („tiles”) (aproape) identice, interconectate printr-o retea scalabila,
eficienta energetic => simplifica layout-ul si permite o integrare rapida a diferitelor
blocuri.
Arhitectura tera-scale integreaza un numar mare de core-uri de calcul de scop
general impreuna cu motoare de calcul de scop special (unitati de textura, unitati de
umbrire „shader units”, unitati cu functii fixe), elemente de platforma (memorie si
controloare de I/E) si interfata de sistem pentru conectarea unor procesoare multiple si
a altor periferice:
Uncore-ul arhitecturii tera-scale consta din urmatoarele elemente:
-scalabilitate: multe zeci pana la cateva sute de noduri (agenti) -> crestere
subliniara a distantei medii in raport cu numarul de noduri;
Director:
-evidenta starilor copiilor liniilor la nivelul memoriilor cache;
-intrari corespunzatoare liniilor;
-intrare = camp de stare + camp pentru memorarea identitatilor cache-urilor
care au copii ale liniei (pointeri).
Stari:
-I (invalid): niciun cache nu contine copie a liniei;
-S (shared): anumite cache-uri pot avea copii ale blocului in starea Shared;
-X (exclusive): unul din cache-uri poate avea o copie a liniei intr-una din
starile Modified, Exclusive sau Shared.
Informatia de identificare:
-harta completa de biti (un bit pentru fiecare cache);
-harta partiala de biti (un bit pentru un grup de cache-uri);
-set limitat de identitati de cache-uri cu un mecanism de gestionare a
depasirilor.
Arhitectura de memorie
Cresterea numarului de core-uri (puterii de calcul) => cresterea ratei de transfer a
datelor (pentru majoritatea aplicatiilor).Solutii:
-transfer de I/E off-chip cu eficienta de putere si viteza mare;
-acces DRAM cu eficienta de putere si banda larga.
Solutii CMP:
-memorii mai eficiente;
-imbunatatirea gestiunii memoriei de pe chip.
Integrarea DRAM (ex. GDDR) pe chip permite un control mai bun al canalului I/E
si astfel o rata mai mare, in comparatie cu conectarea la un conector DIMM de pe placa
de baza. Solutii recente: „3D stacked SRAM” cu rata mare (exemple: prototipul Intel
tera-scale si cercetarile IBM in domeniul circuitelor integrate 3D).
Proiectul Intel chip multicore - Teraflop
=> septembrie 2006: chip cu 80 core-uri, la 4 GHz, arie de 10x8 core-uri, retea
mesh interna. Performante: 1.28 Tflops.
Proiectul Cell: lansat in anul 2000 de IBM, Sony si Toshiba => arhitectura
„Cell Broadband Engine Architecture” (tip multiprocesor pe cip heterogen). Prima
implementare: Cell BE („Cell Broadband Engine”). Suporta instructiuni scalare,
instructiuni SIMD si furnizeaza un mediu de executie cu fire multiple de inalta
performanta pentru toate aplicatiile.
Fiecare SPE consta din SPU si controller SMF („synergistic memory flow”).
Controllerul SMF transfera datele si realizeaza sincronizarea in paralel cu SPU,
implementand si interfata pentru magistrala interna de interconectare.
Structura SPU:
Operatiile SIMD paralele nu se pot utiliza pentru elemente scalare aliniate arbitrar si
incarcate in registrele vectoriale (b). Este necesar ca datele sa fie aliniate la aceeasi
componenta.
In figura (c) este prezentata compilarea codului scalar pentru a fi executat pe unitatile
SIMD. Realizarea operatiei se bazeaza pe alinierea operandului in componenta cea mai
din stanga, dar un programator sau un compilator poate alinia operandul in orice
pozitie. Pe baza alinierii specificate de adresa scalarului se utilizeaza instructiuni de
rotatie pentru plasarea scalarului in pozitia corecta.
Figura (d) prezinta utilizarea secventei „read-modify-write” pentru memorarea unui
scalar prin intermediul interfetei de memorare pentru date de tip quad-word. Secventa
de operatii este generata de compilator. Inserarea unui scalar intr-un quad-word se face
prin utilizarea unei instructiuni „shuffle” pentru routarea datelor din doua registre de
intrare. Pentru implementarea secventei „read-modify-write” SPU suporta o
instructiune „generate controls for insertion”, care genereaza un cuvant de control care
comanda instructiunea shuffle de inserare a unui octet/halfword/word intr-o pozitie
specificata de adresa de memorie.
Interconectarea procesoarelor Cell se face prin intermediul IOIF (I/O
interface) si BIF (broadband engine interface).