Documente Academic
Documente Profesional
Documente Cultură
iacob55@yahoo.com
EF 202
Cuprins
Noiuni introductive despre calculatoarele paralele
Masini paralele si modele de programare
Clasificarea calculatoarelor paralele
Tipuri de calculatoare paralele
Performane ale calculatoarelor paralele
Programe paralele
Retele de interconectare
Proprietati ale retelelor de interconectare
Retele statice
Retele dinamice
Retele pe un cip
Retele de sortare
Retele dictionar si de cautare
Multiprocesoare
Organizare generala
Modele de consistenta pentru memoria partajata
Coerenta memoriilor cache
Proiectarea multiprocesoarelor cu supraveghere
Multiprocesoare cu acces uniform la memorie (UMA)
Organizare generala
Specificaia multiprocesor Intel
Sistem multiprocesor cu microprocesoare Intel Pentium
Gestionarea procesoarelor multiple in arhitecturile Intel 64 si IA-32
Multiprocesoare UMA bazate pe comutatoare gril
Multiprocesoare UMA bazate pe reele de comutatoare cu mai multe trepte
Multicalculatoare
Organizare general
Transferul de mesaje la multicalculatoare
Arhitecturi de routere
Proiectarea unui router pentru topologie 2D
Procesoare masiv paralele (MPP): sistemele IBM SP, Blue Gene/L
Sisteme cu transputere
Clustere de statii de lucru
Programarea multicalculatoarelor
Occam
Aplicatii paralele pe hipercub
MPI
PVM
Sisteme SIMD
Procesoare matriciale
Procesoare vectoriale
Sisteme sistolice VLSI
Modul de notare:
Laborator:
Teme de casa:
Examen:
25 puncte
25 puncte
50 puncte
-pentru intrarea in examen este obligatoriu obtinerea unui punctaj de minim 25 puncte;
-pentru promovarea examenului este necesar sa se obtina minim 25 de puncte la
examen.
http://acs.pub.ro/system/files/Decizie_CF_iunie_2013.pdf
1) Articolul 16. (1) din Regulamentul privind organizarea i desfurarea procesului de
nvmnt universitar de licen n Universitatea POLITEHNICA din Bucureti, 2013,
se completeaza cu:
Condiiile de promovare votate in Consiliul Facultii de Automatic i Calculatoare
sunt urmtoarele:
Minim 50% (minim nota 5) din punctajul acordat pentru activitile de pe parcursul
semestrului;
Minim 50% (minim nota 5) din punctajul acordat pentru examen, care poate fi compus
din parial - lucrare de degrevare - i examen final sau numai examen final.
f ( A[i ])
i 0
Solutia generala:
n/p taskuri
p procesoare (procese).
Exemple: Cray T3E (poate fi incadrat si in aceasta categorie), IBM SP2, NOW,
Millenium.
Procesor 2
xlocal = f(A[2])
send xlocal, proc1
receive xremote, proc1
s = xlocal + xremote
Procesor 1
xlocal = f(A[1])
send xlocal, proc2
receive xremote, proc2
s = xlocal + xremote
Procesor 2
xlocal = f(A[2])
receive xremote, proc1
send xlocal, proc1
s = xlocal + xremote
sau:
Modelul PRAM (Parallel RAM) pentru un calculator paralel cu cost suplimentar nul de
sincronizare si acces la memorie (Fortune si Wylie):
Algoritmul paralel:
forall (0<= i<n)
forall (0<= j<n)
forall (0<=k<n) {
c[i][j]=0.0;
c[i][j] =a[i][k]*b[k][j];
}
Timpul de executie paralela Tp = O(1) => accelerarea S = O(n3) si eficienta E = 1.
Algoritmul:
forall (0<= i<n)
forall (0<= j<n)
forall (0<=k<n) {
v[i][j][k] =a[i][k]*b[k][j];
for (m=0; m<log2n; m++)
if (k % 2m+1 ==0)
v[i][j][k]+=v[i][j][k+2m];
}
Fiecare procesor executa un pas de calcul si log2n pasi pentru reducerea paralela
=> timpul de executie este:
Tp = 1 + log2n = O(log2n)
fiind cuprins intre O(n3) in cadrul algoritmului secvential si O(1) in algoritmul CRCW.
Accelerarea si eficienta:
S = O(n3/log2n)
E = O(1/log2n)
Calculatoare de masive
(array processors)
Sisteme multiprocesor
CMP
CMP (Chip Multiprocessors) => TLP (thread-level parallelism) prin
rularea unor secvente complet separate de instructiuni pe procesoare separate.
Utilizeaza core-uri relativ simple pentru thread singular, dar executa thread-uri
multiple in paralel pe core-uri multiple.
simplitatea proiectului;
frecventa mai mare a ceasului;
scaderea timpului consumat cu validarea proiectului.
Scurt istoric CMP
Primul multicore de scop general: 2005 Intel Duo (doua nuclee Pentium M pe
un singur cip).
AMD Opteron dual-core: memorii cache L2 separate, dar o interfata comuna la
controllerul de memorie si la HyperTransport.
Niagara SPARC: opt nuclee simetrice multithread cu patru procesoare logice
fiecare.
Prima arhitectura CMP: L. Hammond, B. A. Nayfeh, and K. Olukotun, A
single-chip multiprocessor,, Computer, vol. 30, no. 9, pp. 7985, Sep. 1997:
Masuratori de performanta
Factorul ctig de vitez
Principiul mediei armonice ponderate
Legea lui Amdahl
Limitri ale calculului paralel
Masuratori de performanta
6
6
6
T
10
CPI
10
C
10
unde
IC : numar instructiuni pentru program (instruction count);
T : timp de executie pentru program in secunde;
f : frecventa ceasului in Hz, egala cu 1/ ( perioada ceasului in secunde);
CPI : cicluri per instructiune (perioade de ceas necesare pentru executia unei
instructiuni);
C : numar de cicluri necesare pentru executia unui program.
Au fost utilizate relatiile:
C
CPI
IC
T C
C
CPI
I C CPI I C
f
f
Aproximarea cu rata MIPS sau rata Mflops nu tine seama de penalizarile cauzate de
accesul la memorie, latenta comunicatiei, overhead-ul sistemului.
W DOP (t )dt
t1
W i ti
i 1
t
i 1
t 2 t1
Paralelism mediu
Paralelismul mediu A (average paralellism):
t
1 2
A
DOP (t )dt
t 2 t1 t1
n
n
A i ti / ti
i 1
i 1
Solutie
A = DOPi*ti / ti =
(1x5+2x3+3x4+4x6+5x2+6x2+8x3)/(5+3+4+6+2+2+3)=93/25=3.72
Tn
i 1
i
f i d i i 1
n
T1
n
n
n
1 ln n
Tn
i 1 i
W Wi
Wi i ti
i 1
t i (1)
Wi
ti (k )
Wi
k
k i
t i ( )
Wi
i
1 i n
-timpul de raspuns:
n
Wi
i 1
T (1) ti (1)
i 1
n
Wi
i 1 i
T ( ) t i ( )
i 1
T (1)
S
T ( )
W
i 1
n
Wi
i 1 i
i t
i 1
n
i ti
i
i 1
i t
i 1
n
t
i 1
Ra
R
i 1
n
(s-a presupus ponderea 1/n pentru fiecare din cele n programe).
R f i Ri
*
a
i 1
Rg Ri1/ n
i 1
Rg* Ri f i
i 1
1
Ti
Ri
-timpul mediu (aritmetic) de executie per instructiune:
1 n
1 n 1
Ta Ti
n i 1
n i 1 Ri
=> rata de executie medie armonica este inversul timpului mediu:
Rh
n
n
i 1
1
Ri
Rh
i 1
fi
Ri
m mi
Tn mi ti
i 1
i 1
m
R
Tn
*
h
1
n
n
mi
mi ti
ti
i 1
i 1 m
mi
fi
m
mi
fi
;
m
Rata globala a masinii:
Rh*
1;
1
n
i 1
f i ti
1
n
i 1
fi
Ri
1
Ri
ti
Dac f reprezint fracia rezultatelor generate cu rata RH i 1-f este fracia rezultatelor
generate cu rata RL, ecuaia mediei armonice ponderate devine:
R( f )
f
RH
1
1 f
RL
Solutie
Deoarece se considera numai doua rate de executie (secvential si paralel) se va utiliza
legea lui Amdahl, in care:
RH = 100
RL = 1
f = 0.9
1f = 0.1
1
1
R
9.17 MFLOPS
f
1 f
0.9 0.1
RH
RL
100 1
1
T1
1
R1
Ti
1
1
Ri
i
T1
S *
T
*
h
fi
i 1 Ri
unde T* = 1/Rh* este timpul mediu armonic de executie pentru cele n moduri de
executie.
1
n
S
1 f f 1 f f n(1 f ) f
R1 Rn
1
n
*
h
S ( n)
T (1)
T ( n)
E ( n)
S ( n)
T (1)
n
n T ( n)
-eficienta:
O ( n)
R ( n)
O(1)
Evident 1R(n) n.
-utilizarea:
U ( n) R ( n) E ( n)
O ( n)
n T ( n)
S ( n) E ( n)
T 3 (1)
Q ( n)
R ( n)
n T 2 ( n) O ( n)
deoarece E(n) 1, 1R(n) n => Q(n) este limitat superior de S(n).
Execuia secvenial a celor N taskuri, fiecare necesitnd un timp t are loc ntr-un
timp total T1 = N t.
ntr-un sistem paralel:
-fiecare task necesit (t+to) uniti de timp, n loc de t.
-N taskuri pe n procesoare numr pai paraleli (raportul celular) = N/n.
Timpul de execuie paralel:
TN , n
N
t s (t to )
n
Factorul de accelerare:
S N ,n
T1
TN ,n
Nt
1
to
N
N
t s (t to )
(1 )
ts n
t
n
Nt
N
E N ,n
S N ,n
n
TOP 500 iunie 2013 (Rmax si Rpeak in TFlops, Power in KW pentru intregul sistem).
5. PROGRAME PARALELE
=> cu cat stelele sunt mai indepartate de steaua curenta cu atat grupurile de
aproximare pot fi mai mari.
Caracteristici:
1) Distributia de stele neregulata (galaxiile mai dense in anumite zone si mai
imprastiate in altele).
2) Distributia se modifica in timp (evolutia in timp).
=> structura neregulata si dinamica a sistemului de galaxii
(implementare dificila pe un sistem paralel).
Paralelizarea programelor
Algoritm secvential pentru rezolvarea unei probleme => programul paralel.
Este necesar:
-sa se identifice activitatile (incluzand calcule, accesul la date si operatii de
I/E) care pot fi efectuate in paralel;
-sa se imparta activitatea si eventual si datele intre procese;
-sa se gestioneze accesul datelor, comunicatia si sincronizarea;
Scop: micsorarea timpului de calcul => factorul de accelerare S=T(1)/T(n).
(limita 2).
Actualizarile se fac imediat (un punct va vedea valorile noi la vecinii sus si
stanga si valorile vechi la vecinii jos si dreapta).
Se calculeaza de asemenea si diferenta dintre valoarea veche si valoarea noua
pentru fiecare punct. Daca diferenta medie peste toate elementele este mai mica decat o
valoare predefinita solutia a convers si se incheie algoritmul, altfel se continua cu un
nou pas.
Algoritmul secvential:
1) Descompunerea.
-studierea buclelor: daca iteratiile pot fi executate in paralel (aici nu exista
concurenta: datele utilizate in iteratia curenta sunt actualizate in iteratia precedenta, deci
iteratiile nu se pot executa in paralel).
-examinarea dependentelor fundamentale. Ordinea de actualizare a punctelor
gridului este stanga->dreapta si sus->jos, deci punctele de pe antidiagonala (diagonala
secundara, NE->SV) sunt independente din p.d.v. al calculului si deci pot fi calculate in
paralel. Dezavantaje: prea multe puncte de sincronizare si incarcarea este dezechilibrata
(procese cu numar de puncte intre 1 si n).
2) Asignarea. Solutia statica (cea mai simpla): se asigneaza cate un bloc compact de
randuri la un proces (asignare de blocuri), astfel incat randul i este asignat procesului
Concluzii:
-descompunerea si asignarea sunt asemanatoare in cele doua modele
importante, cu memorie partajata si in transfer de mesaje;
-orchestrarea este diferita (structuri de date, accesul/denumirea datelor,
comunicatia, sincronizarea).
Diferente:
RETELE DE INTERCONECTARE
5) Simplicitate. Solutiile simple conduc de multe ori la frecvente mai mari ale
ceasului si deci si performante mai mari. O structura simpla poate fi usor
inteleasa de utilizator si deci mai bine exploatata.
6) Distanta. Distanta dintre componente si solutiile de impachetare duc la
diferite solutii pentru retelele de interconectare: fire de cupru (multicalculatoare),
legaturi optice (NOW).
7) Fiabilitate si reparabilitate.
8) Constrangeri de cost.
Marimi caracteristice
O retea - graf cu un numar finit de noduri, conectate prin arce orientate sau
neorientate.
Lungimea firului (canalului) intre noduri poate afecta latenta semnalului, alunecarea
ceasului si cerintele de alimentare.
Functiile de rutare a datelor sunt utilizate pentru transferul de date intre elementele
de prelucrare, fiind implementate in routere hardware. Exemple: deplasare (shifting),
rotatie, permutatie (unu la unu), broadcast (unu la toate), multicast (unu la mai
multe), shuffle, etc.
-calcul de semigrup;
-calcul de prefixe paralele;
-rutare de pachete;
-broadcasting si versiunea mai generala multicasting;
-sortarea inregistrarilor in ordine crescatoare/ descrescatoare a cheilor.
Calcul de semigrup.
Fie un operator binar asociativ:
(x y) z = x (y z)
pentru x, y, z S.
Un semigrup este perechea (S, ).
Calcul de semigrup: considerand o lista de n valori x0, x1, ... , xn-1, calculeaza x0
x1 ... xn-1.
Operatorul poate sa fie +, x, , U, max, min.
Operatorul poate sa fie comutativ sau nu (foarte important, caci algoritmul
paralel poate sa calculeze bucati din expresie, iar apoi bucatile trebuie combinate in
ordinea stanga-dreapta).
RETELE STATICE
Retea liniara
Inel. Inel cu coarde
Barrel shifter
Arbore si stea
Arbore gros
Retea plasa. Tor
Retele sistolice
Hipercuburi
Cicluri cub-conectate
Retea n-cub de baza k
Retea liniara
retea unidimensionala care conecteaza N noduri prin N-1 legaturi.
Algoritm din categoria calcul de prefixe paralele: fiecare procesor detine cate
o valoare initiala si in etape succesive procesorul curent preia valoarea de la vecinul
stang, aduna cu valoarea proprie si trimite la vecinul drept.
Broadcast:
-procesorul sursa i doreste sa trimita o valoare a la toate procesoarele
=> trimite mesaje:
- rbcast(a) procesorului din dreapta;
-lbcast(a) procesorului din stanga.
-un procesor receptionand rbcast(a) copiaza local valoarea lui a
=> trimite mesaj rbcast(a) catre vecinul din dreapta.
O(N) = N2/2
=>
S(N) = log2 N
E(N) = (log2N)/N
=>
R(N) = N/(2log2N)
U(N) = 1/2
Q(N) = 2(log2N)3/N2
Barrel shifter
Intr-o retea de dimensiune N=2n , nodul i este conectat la nodul j, daca distanta
dintre nodurile j si i =2r, pentru r=0, 1, 2, ..., n-1. Gradul de nod este d=2n-1 si
diametrul D=n/2.
Exemplu: retea barrel shifter cu N=8 (n=3).
Arbore si stea
-arbore complet echilibrat avand k niveluri => N = 2k 1 noduri;
-grad maxim de nod d = 3;
-diametrul D = 2(k - 1) (lungimea caii care leaga doua frunze cu radacina ca
unic ascendent comun).
Steaua este un arbore cu doua niveluri, grad de nod maxim d = N-1 (nodul
central) si diametrul D = 2.
Arbore gros
Arborele gros (fat tree) propus de Leiserson in 1985 => largimea de canal
creste de la frunze spre radacina.
sau
-numar de dimensiuni k
-numar de noduri dintr-o dimensiune n
- reteaua mesh Illiac: dimensiune n*n => diametru D=n-1 (jumatate din
diametrul mesh-ului pur).
Torul
-varianta de mesh (diametru si mai mic - combina inelul si meshul);
-conexiuni de inel dupa fiecare linie si coloana.
Retele sistolice
- implementeaza algoritmi ficsi.
Hipercuburi
=> hipercub de dimensiune n are N = 2n noduri (2 noduri / dimensiune);
-grad nod d = n si diametru D = n;
-fiecare nod: ci de comunicaie directe i separate ctre n alte noduri
(muchiile cubului);
-fiecare nod: adres n bii (2n adrese distincte).
n=4
n=5
Exemple:
-cubul cosmic Caltech, dimensiune n=6 i N=64 de procesoare;
-sisteme comerciale: NCUBE, Intel i FPS - Floating Point System
(memoria distribuit ntre noduri, numai cu memorie local la fiecare nod).
Avantaje:
-fiecare procesor cu memoria sa local i canalele directe de
comunicaie => problema gtuirii sistemului este mai puin important!
Dezavantaj:
-sisteme hipercub comerciale - comunicaie direct interprocesor
serial => limiteaza productivitatea!
Cicluri cub-conectate
=> ciclurile cub-conectate (CCC cube connected cycles) - modificare a
arhitecturii hipercub.
Exemplu: hipercub de dimensiune 3 => ciclu cub-conectat de dimensiune 3.
Datele sunt transferate intre doua noduri vecine intr-o perioada de ceas !
RETELE DINAMICE
Magistrale
Comutatoare grila
Retele multinivel
Magistrale
-una sau mai multe magistrale pentru inteconectarea componentelor;
-organizarea general: magistral multiplexat n timp cu n procesoare, m
module de memorie partajat i d dispozitive de I/E (partajate ntre procesoarele
sistemului).
Avantaj:
Comutatoare grila
=> un comutator gril (crossbar switch) conecteaza simultan oricare
procesor sau procesor de I/E la oricare modul liber de memorie partajat.
Organizarea general:
Tehnologia VLSI permite integrarea intr-un cip a unui numar foarte mare de switch-uri
(mii), dar numarul de pini limiteaza numarul de switch-uri la cateva sute.
Avantaj: productivitate mare prin ci de comunicaie concurente multiple.
Dezavantaj: cost mare i logica complex.
Exemplu: un sistem cu n procesoare i n module de memorie partajate => n2
puncte de intersecie, deci cost O(n2 ) !
Varianta:
Retele multinivel
-n sistemele multiprocesor mari;
-interconectare mai general procesor-procesor i procesor memorie.
Se considera N intrari si M iesiri, g etaje G0 Gg-1, fiecare etaj Gi cu wi switchuri de dimensiune ai,j x bi,j (1 j wi). Astfel etajul Gi are pi intrari si qi iesiri, unde:
wi
pi ai , j
j 1
wi
qi bi , j
j 1
Conexiunea intre doua etaje adiacente Gi-1 si Gi, notata Ci, defineste tiparul de
conexiune pentru pi = qi-1 legaturi (p0 = N si qg-1 = M). Astfel, o retea multinivel poate fi
reprezentata:
C0(N) G0(w0) C1(p1) G1(w1)... Cg-1(pg-1) Gg-1(wg-1) Cg(M)
Numrul de intrri : N = r n
(r = numr de comutatoare gril din primul i ultimul nivel, n = numr de intrri n
fiecare comutator de pe primul nivel).
=> reeaua are mai puin dect N2 puncte de intersecie pentru N24 i, n general,
necesit
O ( Ne
log N
puncte de intersecie.
=> pentru m2n-1 reeaua Clos cu trei etaje este strict fr blocare.
numr procesoare N => numr de niveluri log2N, numr blocuri de interschimb N/2
pentru fiecare nivel.
numr total blocuri de interschimb (N/2)log2N (n comparaie cu N2 numrul de
puncte de intersecie ale unui comutator gril).
1 (001)
5 (101)
2 (010)
6 (110)
3 (011)
7 (111)
1 (001)
3 (011)
4 (100)
6 (110)
5 (101)
7 (111)
2 (010)
3 (011)
4 (100)
5 (101)
6 (110)
7 (111)
Legaturi hipercub pentru N=8 de ordin 2 (a), de ordin 1 (b) si de ordin 0 (c).
Retea omega
Pentru N intrri, notate cu i=0, 1, 2, , N-1, funcia de conexiune shuffle (amestecare
a crilor de joc):
sh ( i ) = ( 2 i + 2 i / N ) mod N
Exemplu: pentru o conexiune shuffle cu un singur nivel (N=8):
sh ( 0 ) = ( 0 + 0 / 8 ) mod 8 = ( 0 + 0) mod 8 = 0 mod 8 = 0
sh ( 1 ) = (2 + 2 / 8 ) mod 8 = ( 2 + 0) mod 8 = 2 mod 8 = 2
sh ( 2 ) = ( 4 + 4 / 8 ) mod 8 = ( 4 + 0) mod 8 = 4 mod 8 = 4
sh ( 3 ) = ( 6 + 6 / 8 ) mod 8 = ( 6 + 0) mod 8 = 6 mod 8 = 6
sh ( 4 ) = ( 8 + 8 / 8 ) mod 8 = ( 8 + 1) mod 8 = 9 mod 8 = 1
sh ( 5 ) = ( 10 + 10 / 8 ) mod 8 = ( 10 + 1) mod 8 = 11 mod 8 = 3
sh ( 6 ) = ( 12 + 12 / 8 ) mod 8 = ( 12 + 1) mod 8 = 13 mod 8 = 5
sh ( 7 ) = ( 14 + 14 / 8 ) mod 8 = ( 14 + 1) mod 8 = 15 mod 8 = 7
Conexiunea shuffle poate fi definita si prin relatia:
Retea butterfly
-pentru o etichet binar bm-1 . . . b1 b0, funcia butterfly de ordinul k, notat Bk,
este definit pentru k = 1, 2, , m-1 :
Bk ( bm-1 . . . bk+1 bk bk-1 . . . b1 b0 ) = bm-1 . . . bk+1 b0 bk-1 . . . b1 bk
Exemplu: funcia butterfly pentru m = 2, eticheta binar b1b0, k=1 este:
B1 (b1b0 ) = b0b1
avnd valorile:
B1 ( 0 0 ) = 0 0
B1 ( 0 1 ) = 1 0
B1 ( 1 0 ) = 0 1
B1 ( 1 1 ) = 1 1
-cascadarea a dou reele butterfly identice => comutator 4x4 BBN (Bolt,
Beranek i Newmann) Butterfly:
Interconexiunile Butterfly pentru 8 intrari si 8 iesiri de ordin 2 (a), ordin 1 (b) si ordin
(0):
Retea baseline
=> generare recursiva: primul nivel contine un bloc N*N (N intrari si N iesiri),
al doilea nivel contine doua blocuri N/2*N/2, . . . , in final se obtin N/2 blocuri de
dimensiune 2*2 (comutatoarele 2x2 au numai doua stari stabile: conexiune directa si
conexiune inversa).
Retea butterfly:
Retea multinivel:
C1-C4 butterfly,
C0 shuffle
Retea Omega:
In cazul cel mai defavorabil pentru o retea cu n etaje sunt traversate 2n-1 etaje.
Retele hibride
Retelele hibride combina mecanisme ale retelelor "shared-medium" cu cele ale
retelelor directe sau indirecte.
1) Magistrale backplane multiple: rezolva dezavantajele retelelor "sharedmedium (suporta un numar mic de dispozitive, au distanta limitata si nu sunt scalabile,
pentru dezvoltarea de sisteme mari).
2) Retele ierarhice: diferitele magistrale sunt conectate prin routere si bridgeuri. Exemplu: magistrale ierarhice cu doua niveluri:
Avantaje: topologia are un diametru foarte mic si distanta medie dintre noduri scaleaza
foarte bine cu dimensiunea retelei. Dezavantaj: largimea de banda nu scaleaza foarte
bine. Solutie: inlocuirea magistralei singulare conectand nodurile de pe o dimensiune
printr-un set de k magistrale (k = numarul de noduri de pe dimensiunea respectiva).
RETELE PE UN CIP
Componentele NOC:
intarziere mare.
In practica: retele mai performante. Exemplu: retele Batcher: odd-even mergesort,
bitonic sort si Shell sort.
oncurenta de pachete -> buffere pentru memorarea pachetelor de prioritate mai mica.
Tipuri de concurenta intre pachetele de intrare:
-concurenta de destinatie (dependenta de aplicatie): doua sau mai multe pachete din
porturile de intrare necesita acelasi port destinatie. Presupunere: arbitrul a rezolvat deja
acest tip de concurenta inainte ca unitatea de intrare sa livreze pachetele plasei de
switch-uri.
-concurenta de interconectare (blocare interna): in interiorul plasei de circuite aceeasi
legatura trebuie partajata de pachete cu destinatii diferite. Apare in interiorul retelelor de
switch-uri si depinde de arhitectura.
Fiecare buffer: informatie de control -> lungimea cozii (codificata binar) -> logica
combinationala (alocator) pentru implementarea algoritmului de rutare.
RETELE DE SORTARE
Retele de sortare
Retea de sortare: circuit care primeste n intrari x0, x1, x2, ... , xn-1 si produce o
permutare a acestora y0, y1, y2, ... , yn-1 astfel incat y0 y1 y2 ... yn-1.
Implementarea unui modul de sortare 2x2 pentru numere fara semn: un comparator si
doua multiplexoare 2:1:
In cazul unui numar mare de valori de sortat sau valori pe multi biti se pot utiliza si
module de sortare seriale:
Pe baza modulelor de sortare 2x2 se pot realiza circuite de sortare mai mari. Exemplu:
circuit de sortare 4x4:
Algoritm recursiv bazat pe sortarea cu selectie: se selecteaza cea mai mare valoare si se
furnizeaza la iesirea yn-1, apoi se sorteaza celelalte n-1 valori ramase.
Algoritmii sunt ineficienti: se asteapta cost O(n log n) si intarziere O(log n),
aceste valori corespunzand intr-un algoritm de sortare la numarul de parametrii,
respectiv la numarul minim de comparatii. Rezulta pentru produsul cost x
intarziere O(n log2 n).
O solutie: circuite de sortare AKS (Ajtai, Komlos, Szemeredi),
prezinta interes teoretic (utilizeaza constante mari pe patru cifre).
Alte solutii: utilizeaza valori de intrare partial sortate sau furnizeaza
iesiri partial sortate.
Solutii practice de circuite de sortare: Batcher (si altii), avand cost O(n
log2 n) si intarziere O(log2 n).
x0 x1 x2 ... xm-1
y0 y1 y2 ... ym'-1
daca m = 0 sau m' = 0 nu se face nimic;
daca m = m' = 1 este necesar un singur comparator pentru fuzionare;
daca mm'>1 fuzionarea impar-par se face fuzionand separat elementele de indici pari si
impari din cele doua liste.
Astfel, din:
x0, x2, x4, ... , x2m/2 -2
y0, y2, y4, ... , y2m'/2 -2 se obtine:
v0, v1, v2, ... , vm/2 +m'/2 -1
iar din:
x1, x3, x5, ... , x2m/2 -1
y1, y3, y5, ... , y2m'/2 -1 se obtine:
w0, w1, w2, ... , wm/2 +m'/2 -1
Se compara-interschimba perechile w0: v1, w1: v2, w2: v3,.... (v0 nu trebuie
comparat, este cel mai mic), obtinand o secventa ordonata.
Un circuit de fuzionare par-impar Batcher (m, m), unde m este putere a lui 2 se
caracterizeaza prin urmatoarele valori pentru cost si intarziere:
C(m) = 2 C(m/2) + m 1 = (m - 1) + 2(m/2 1) + 4(m/4 1) + ... = m log2m + 1
D(m) = D(m/2) + 1 = log2m + 1
Cost x Delay = O(m log2m)
Dispunand de un circuit eficient de fuzionare se poate proiecta un circuit de
sortare de dimensiune n cu doua circuite de sortare de dimensiune n/2 si un circuit
de fuzionare (n/2, n/2).
(vezi figura urmatoare)
Costul:
=>
Arborele cu cerculete executa broadcast pentru operatiile dictionar introduse prin nodul
radacina de intrare catre toate nodurile frunza care detin inregistrarile. Arborele cu
triunghiuri combina rezultatele operatiilor individuale intr-un rezultat global furnizat
prin nodul radacina de iesire. Intr-o implementare hardware cei doi arbori pot fi
fuzionati intr-unul singur.
In cazul operatiei de stergere este necesara o a doua faza dupa furnizarea ID-ului
nodului care a sters inregistrarea, pentru actualizarea contoarelor. Rezulta o intarziere
intre o stergere si refolosirea spatiului respectiv
Varianta: unitate in banda de asamblare avand q segmente. Chiar daca perioada de ceas
poate fi mai mica, o intrare poate fi furnizata la fiecare q tacturi de ceas. Din cauza
overhead-ului de memorare a rezultatelor intermediare unitatea in banda de asamblare
scade viteza calculului.
Retea Brent-Kung
Printr-o prima abordare "divide-and-conquer" (considerand p putere a lui 2): se
imparte problema in doua subprobleme, calculul rezultatelor indici impari s1, s3, s5, ... si
calculul rezultatelor indici pari s0, s2, s4, ....
Prima subproblema: perechi de valori de intrare consecutive (x0 si x1, x2 si x3, etc.)
se combina pentru a obtine o lista cu lungimea jumatate decat cea initiala. Aplicand
calcul de prefixe paralele se obtin rezultatele corecte cu indici impari.
A doua subproblema: se combina fiecare valoare de intrare cu indice par cu
rezultatul de indice impar precedent (x2 si s1, x4 si s3, etc.). Schema:
Retea Kogge-Stone
O a doua abordare"divide-and-conquer" vede lista de intrare ca fiind compusa din doua
subliste, sublista valorilor cu indici impari x1, x3, x5, ... si sublista valorilor cu indici pari
x0, x2, x4, .... Se executa calculul de prefixe paralele separat pe fiecare sublista, iar
rezultatele finale se obtin prin combinatii de perechi de rezultate partiale adiacente intrun singur pas PRAM.
Exemple de implementare
Se considera implementari cu 16 intrari ale retelelor Brent-Kung:
Kogge-Stone:
este cea mai rapida solutie de implementare a calculului de prefixe paralele, dar costul
poate fi prohibitiv pentru n mare.
yi x j
j 0
ij
n
1
1
y0 1
y 1
2
n
n
1
... ... ...
...
n 1
2 ( n 1)
y
1
n
n
n 1
x0
n 1
... n x1
...
... ...
( n 1) 2
... n
x n 1
...
1 n 1 ij
xi n y j
n j 0
yi nij x j
j 0
ij
n xj
j par ( 2 r )
ij
n xj
j impar( 2 r 1)
n / 21
n / 21
r 0
r 0
ir
i
n / 2 2r n
ir
n / 2 x2r1
unde s-a utilizat identitatea n/2 = n2. Cei doi termeni din ultima expresie reprezinta
DFT de n/2 puncte fiecare si se pot scrie:
x0
x
u Fn / 2 2
...
xn2
x1
x
v Fn / 2 3
...
x n 1
Astfel:
yi
i
u
n vi n / 2
i n / 2
u i ni vi
0 i n/2
n/2 i n
sau
y i n / 2 u i ni n / 2 vi
Daca cele doua transformari de n/2 puncte se pot realiza in paralel si operatiile de
inmultire-adunare se pot executa de asemenea in paralel, atunci:
T(n) = T(n/2) + 1 = log2n
(unitatea de timp corespune unei operatii de inmultire-adunare).
Avantaj: simplitate si interconexiuni identice intre etaje. Iesirile sunt obtinute in ordinea
cu inversarea-bitilor.
Exista si retele mai simple avand un cost mai mic intr-o implementare VLSI: reteaua
Yeh si Parhami, obtinuta din reteaua shuffle-exchange prin inlaturarea unor conexiuni:
Pentru valori mari ale lui n reteaua butterfly devine complexa. O solutie: proiectarea
circuitului in directia orizontala a.i. un singur nod inmultire-adunare sa efectueze in pasi
succesivi de timp functia tuturor nodurilor dintr-un rand:
Singura coloana de noduri inmultire-adunare joaca rolul coloanelor multiple din schema
initiala, rezultatele partiale fiind salvate in registre pentru utilizare la urmatorul pas de
timp. Costul solutiei se reduce de la O(n logn) la O(n), fara crestere semnificativa a
intarzierii.
O alta solutie si mai economica: proiectarea retelei initiale pe verticala (in loc de
proiectare pe orizontala).
MULTIPROCESOARE
ORGANIZARE GENERALA
MODELE DE CONSISTENTA PENTRU MEMORIA
PARTAJATA
COERENTA MEMORIILOR CACHE
PROIECTAREA MULTIPROCESOARELOR CU
SUPRAVEGHERE
ORGANIZARE GENERALA
Sistemele multiprocesor caracterizate prin :
-un multiprocesor este un singur calculator care include mai multe procesoare i un
singur spaiu de memorie adresabil de acestea;
-procesoarele pot comunica i coopera la diferite niveluri pentru rezolvarea unei
probleme date;
-un multiprocesor este controlat de un singur sistem de operare integrat, care
permite interaciunea ntre procesoare i programele lor la nivel de proces, set de date i
chiar date elementare.
Exist dou modele arhitecturale de baz pentru sistemele multiprocesor:
-multiprocesoare slab cuplate LCM (Loosely Coupled Multiprocessors);
-multiprocesoare strns cuplate TCM (Tightly Coupled Multiprocessors).
-consistena strict;
-consistena secvenial;
-consistena de procesor;
-consistena slab;
-consistena la eliberare.
-model comod;
-greu de implementat: nu permite memorie cache sau date duplicate;
write 100
write 200
read x
read x
read x
read x
=> o anumit ordine, dar dac P3 citete din locatia x valorile 100, 200 (n
aceast ordine), => cu siguran i P4 va citi tot valorile 100, 200 (n aceeai ordine).
P2
(initial Flag1=Flag2=0)
Flag1=1
if(Flag2==0)
sectiune critica
Flag2=1
if(Flag1==0)
sectiune critica
P2
(initial A=B=0)
P3
A=1
if(A==1)
B=1
if(B==1)
reg=A
Exemplu:
P1
P2
Data=2000
while (Head==0){;}
Head=1
... =Data
Un sistem secvential consistent garanteaza ca citirea variabilei Data de catre P2 va
intoarce valoarea inscrisa de P1. Dar permitand suprapunerea scrierilor procesorului P1 se
poate incalca consistenta secventiala. Daca Data si Head sunt in module diferite si
scrierea lui Head este plasata in reteaua de interconectare inainte de Data, scrierile se pot
incheia in alta ordine decat cea din program, ceea ce face ca celalalt procesor sa gaseasca
Head==1 (valoarea noua) si Data==valoarea veche.
Probleme:
a) Coerenta memoriilor cache: prezenta de copii multiple necesita
un mecanism care sa propage cea mai noua valoare scrisa la toate copiile din
cacheuri (protocol de coerenta a memoriile cache);
b) Detectarea incheierii operatiilor de scriere: detectarea incheierii
unei operatii de scriere necesita mai multe tranzactii in prezenta datelor
replicate;
c) Mentinerea iluziei de atomicitate pentru scrieri: propagarea
modificarilor la copii multiple este inevitabil o operatie non-atomica, pentru
care (deci pentru scrieri) trebuie sa se furnizeze iluzia atomicitatii in raport
cu alte operatii.
P3
if(B==1)
reg=A
Se poate incalca consistenta secvetiala daca:
-P2 citeste valoarea noua a lui A inainte ca actualizarea lui A sa ajunga la P3;
-actualizarea lui P2 asupra variabilei B ajunge la P3 inainte de actualizarea lui
A;
-P3 citeste noua valoare a lui B, apoi incearca sa citeasca A din propriul cache
(inainte sa primeasca actualizarea lui A).
=> P2 si P3 observa scrierea lui A la momente diferite, facand
scrierea neatomica (apare in schemele cu invalidare).
=> Pentru prevenirea incalcarii consistentei: interzicerea citirii unei valori nou
scrise pana ce toate copiile din cacheuri au confirmat receptia mesajului de invalidare
sau de actualizare generate de scriere.
300
.....
pct.sinc.
pct.sinc.
-procesorul P2 poate vedea valorile 100, 200;
-procesorul P3 poate vedea valorile 200, 100;
=> dar ambele vd succesiunea 100, 300 i 200, 300.
3) Dance hall
4) Memorie distribuit :
Caracteristici:
-propagarea scrierii: valoarea scrisa trebuie sa devina vizibila altor procesoare;
-serializarea scrierii: scrierile in locatia respectiva trebuie sa fie vazute in
aceeasi ordine de toate procesoarele.
Solutii:
a) bazate software: in clustere de statii de lucru (PC-uri) extinzand sistemul de
memorie virtuala;
b) bazate hardware - variante:
-scheme de supraveghere: broadcast pentru observarea intregului trafic de
coerenta (sisteme pe magistrala si sisteme cu numar mic de procesoare, exemplu: SGI
Challange);
-scheme de directoare: informatii centralizate pentru evitarea broadcastului
(sisteme cu numar mare de procesoare. exemplu: SGI Origin 2000).
Protocoale write-through
1) Protocol VI simplu cu invalidare pentru memorie cache write through,
varianta write no allocate.
Exemplu: se considera un sistem multiprocesor bazat pe magistrala cu protocol writethrough in care fiecare procesor lucreaza la frecventa de 1GHz, 1CPI (un ciclu per
instructiune), iar 15% din program sunt instructiuni de scriere in memorie de cuvinte pe
8 octeti.
fiecare procesor executa 15*107 instructiuni de memorare pe secunda (1.2
Gocteti/sec)
magistrala 2 Gocteti/sec => magistrala poate suporta numai un singur procesor, fara sa
se satureze!
Solutia write-through nu este indicata pentru SMP-uri! Memoriile cache write-back
reduc accesele la magistrala!
Protocoalele write-back:
-protocoale cu invalidare:
-protocoale cu actualizare.
3) Protocol ESI write-back cu invalidare. Un bloc poate sa fie intruna din urmatoarele stari:
a) la nivelul memoriei partajate:
-Clean: valid intr-un subset de memorii cache si in memoria partajata;
-Dirty: intr-o singura memorie cache;
-nu se gaseste in nicio memorie cache.
b) la nivelul memoriei cache:
-I (invalid): blocul nu este valid in memoria cache curenta (se
gaseste in alt cache sau in memoria partajata);
-E (exclusiv): blocul este valid numai in memoria cache a
procesorului curent;
-S (shared): blocul este valid in una sau mai multe memorii cache.
Diagrama de tranzitii cuprinde actiuni initiate de un procesor si
actiuni initiate de pe magistrala. Evenimentele lipsa de cache la citire
(ReadMiss) produc operatii de supraveghere de catre toate memoriile cache.
Scrierile in blocuri curate sunt tratate ca eveniente lipsa de cache la scriere
(WriteMiss).
Diagrama procesor:
Diagrama magistrala:
Diagrama combinata:
P1Wr
10A1
P1Rd
A1
P2Rd
A1
stare
E
P1
adresa
A1
valoare
10
A1
10
S
P2Wr
20A1
P2Wr
40A2
A1
stare
P2
adresa
A1
RdMs
P2
A1
A1
A1
WrBk
RdData
WrMs
P1
P2
P2
A1
A1
A1
WrMs
P2
A2
WrBk
P2
A1
valoare
10
S
E
A2
10
20
40
actiune
WrMs
Mag.
proc.
adresa
P1
A1
valoare
10
10
Mem.
adresa valoare
10
10
10
10
20
20
Dezavantaj:
-scrieri multiple ale aceluiasi procesor genereaza tranzactii multiple de
actualizare.
PROIECTAREA MULTIPROCESOARELOR CU
SUPRAVEGHERE
Memorii cache cu un singur nivel si magistrala atomica
Probleme:
1) proiectarea memoriei cache: asigura accesul procesorului si al agentului de
supraveghere la taguri;
2) rezultatele supravegherii din partea controloarelor de cache raportate ca
parte a tranzactiei pe magistrala (cand si cum?);
3) chiar daca magistrala este atomica, actiunile pentru o cerere procesor
implica si alte resurse, de exemplu controloarele cache, care nu sunt atomice;
4) operatiile de actualizare "write-back" introduc conditii asupra competitiei
pentru magistrala.
1)
ORGANIZARE GENERALA
Organizarea general a unui sistem multiprocesor cu acces uniform la memorie UMA
(Uniform Memory Access):
Procesoarele sistemului
-procesor BSP (Bootstrap Processor);
-procesoare de aplicaii AP (Application Processors).
Dispozitivele APIC
APIC: arhitectur distribuit => funciile de control ntreruperi:
-unitatea local;
-unitatea de I/E (comunic prin magistrala ICC - Interrupt Controller
Communications Bus).
ntr-un sistem MP: uniti APIC locale i de I/E multiple => avantaje:
-descarc traficul legat de ntreruperi de pe magistrala de memorie , care astfel
rmne la dispoziia procesoarelor;
-preiau de la procesoare o parte din ncrcarea prelucrrii ntreruperilor.
Unitile APIC locale -> ntreruperi interprocesor (IPI InterProcessor Interrupts).
-fiecare APIC local: registru de identificare (Local Unit ID Register);
-fiecare APIC de I/E: registru de identificare (I/O Unit ID Register).
Implementare:
-unitile APIC locale i de I/E -> Intel 82489DX;
-APIC-urile locale -> procesoare (exemplu: incepand cu Intel Pentium 735/90,
815/100);
-APIC-urile de I/E -> set de cipuri de I/E (exemplu: Intel 82430 PCI-EISA
Bridge Chipset).
Memoria sistemului
Sistemul: arhitectura de memorie AT standard => ntreaga memorie : alocat ca
memorie sistem (exceptnd adresele 0A_0000h-0F_FFFFh i 0FFFE_0000h0FFFF_FFFFh, zone rezervate pentru dispozitive de I/E i BIOS).
Sistemul MP simetric => o rat mare de transfer pe magistrala memoriei (n
funcie de numrul de procesoare).
BIOS
Sistem uniprocesor -> functii BIOS :
-testeaz componentele sistemului;
-construiete tabelele de configurare utilizate de sistemul de operare;
-iniializeaz procesorul i restul sistemului la o stare cunoscut;
-n timpul rulrii furnizeaz servicii orientate spre dispozitive.
Sistem MP -> BIOS execut urmtoarele funcii adiionale:
-furnizeaz informaiile de configurare ctre S.O:, care identific toate
procesoarele i alte componente multiprocesor din sistem;
-iniializeaz toate procesoarele i restul componentelor multiprocesor la o
stare cunoscut.
Modul PIC
Tabela de configuraie MP
Structurile de date pentru configuraia MP au urmtoarea organizare general:
unde:
-SIGNATURE (_MP_) se utilizeaz drept cheie de cutare a structurii;
-PYSICAL ADDRESS POINTER este adresa de nceput a tabelei de
configurare MP sau este 000 dac tabela nu exist;
-LENGTH reprezint lungimea structurii, n paragrafe (de 16 octei), structura
avnd lungimea de un paragraf;
-SPEC_REV este numrul de versiune al specificaiei MP (exemplu valoarea
01h pentru versiunea 1.1, sau valoarea 04h pentru versiunea 1.4);
-MP FEATURE INFORMATION
-BYTE 1 codific tipul de configuraie MP; dac =0 tabela de
configuraie este prezent, dac 0 atunci indic tipul de configuraie implicit;
-BYTE 2 are biii 0-6 rezervai pentru dezvoltri ulterioare, bitul 7
semnific IMCR (dac =0 este implementat modul Virtual Wire, dac=1 IMCR este
prezent i este implementat modul PIC);
-BYTES 3-5 sunt rezervai pentru dezvoltri ulterioare(=0).
SISTEM MULTIPROCESOR CU
MICROPROCESOARE INTEL PENTIUM
Agenii de cerere:
-simetrici (procesoarele), avnd prioriti egale (pot fi maxim patru);
-prioritari (unul sau mai muli), prioriti mai mari dect agenii simetrici.
Faza de cerere
Grupul de semnale de cerere :
-A[35:3]# (Address): magistrala de adrese de memorie sau de I/E, aliniat
quadword;
-AP[1:0]# (Address Parity): biii de paritate par ai adresei;
-REQ[4:0]# (Request): liniile de cerere de magistral;
-RP# (Request Parity): bit de paritate par pentru liniile de cereri i ADS#;
-ADS# (Address Strobe): semnal de validare a liniilor de adres, activat de
agentul care a lansat cererea.
-DSZ (Data Size) reprezint mrimea magistralei de date (00b pentru Pentium
Pro, magistrala pe 64 de bii);
-LEN (Length) este lungimea transferului de date, astfel:
00b: quadword, sau subset de quadword (specificare cu Byte Enable);
01b: dublu quadword (16 octei), utilizat de ali ageni dect
procesoarele (puntea);
10b: patru quadword (32 de octei);
11b: rezervat.
-ASZ (Address Space Size) indic dimensiunea spaiului de adres, astfel:
00b: adresa de memorie n intervalul 04GB-1;
01b: adresa de memorie n intervalul 4GB64GB-1;
1Xb: rezervat.
Faza de eroare
Toi agenii memoreaz pachetele de cerere A i B pe ciclurile de ceas 2 i 3:
-faza de cerere ciclurile 1 i 2;
-faza de eroare ciclurile 3 i 4.
Desfasurarea fazei de eroare:
-toi agenii verific paritatea AP[1:0]# i RP#, n ciclurile 2, respectiv 3;
-la detectarea unei erori, n oricare pachet => activeaz semnalul AERR# n
ciclul 4, pentru o perioad de ceas (acest semnal fiind de tipul open drain poate fi
comandat de mai multe dispozitive).
Faza de supraveghere
n faza de supraveghere, agentul de cerere eantioneaz semnalele de supraveghere
pentru a determina:
-dac agentul de rspuns adresat intenioneaz s completeze tranzacia
imediat sau dac tranzacia va fi rencercat sau terminarea ei amnat la un moment de
timp ulterior;
-dac tranzacia este o citire sau scriere de memorie pe care agentul de rspuns
o va ncheia imediat, determin dac vreo alt memorie cache are o copie a liniei, iar n
caz afirmativ, care va fi starea liniei (curat sau modificat) la ncheierea tranzaciei.
Semnalele de supraveghere sunt:
-HIT# i HITM# utilizate de agenii de supraveghere pentru a furniza
rezultatul supravegherii memoriilor cache sau pentru a bloca ncheierea fazei de
supraveghere dac unul sau mai muli ageni de supraveghere nu sunt gata s livreze
rezultatul supravegherii. Semnalele HIT# i HITM# sunt activate de ageni multipli
pentru a bloca ncheierea fazei de supraveghere pn ce rezultatul supravegherii este
disponibil. n acest moment, nici un agent nu mai comand ambele linii: fie nu comand
nicio linie (pentru un insucces), fie comand numai HIT# (pentru succes n starea E sau
S a unei linii de cache) sau numai HITM# (pentru succes la o linie modificat);
-DEFER# este activat de agentul de rspuns, numai n timpul fazei de
supraveghere, pentru a indica rencercarea sau un rspuns amnat ctre agentul de
cerere.
HIT#=1, HITM#=0, DEFER#=0: succes pentru o linie curat n unul sau mai
multe memorii cache.
HIT#=1, HITM#=0, DEFER#=1: tranzacia este amnat, semnalul HIT#
fiind ignorat.
HIT#=1, HITM#=1, DEFER#=0: Cel puin un agent de supraveghere nu poate
livra nc rezultatul supravegherii, rezultnd astfel, o blocare de supraveghere. Agentul
de cerere ateapt dou cicluri de ceas nainte de a eantiona din nou rezultatul
supravegherii, pn cnd apare un rezultat corect.
HIT#=1, HITM#=1, DEFER#=1: analog cazului anterior, dar DEFER# este
ignorat.
Faza de rspuns
n faza de rspuns, agentul de rspuns trebuie s indice agentului de cerere, dac:
-va servi imediat cererea;
-nu o va servi imediat, dar o va servi mai trziu;
-o va servi off-line i va reveni cu ncheierea mai trziu;
-este defect i nu va putea deservi cererea;
-un agent de supraveghere are o copie modificat a liniei i va furniza linia
ctre controlorul de memorie.
Grupul semnalelor fazei de rspuns :
-RS[2:0]# (Response): furnizeaz rspunsul ctre agentul de cerere;
-RSP# (Response Bus Parity): furnizeaz bitul de paritate pentru RS[2:0]#,
astfel nct s foreze un numr par de zerouri pentru RS[2:0]# i RSP#;
-TRDY# (Target Ready): indic agent de rspuns gata s accepte date de
scriere de la agentul de cerere sau un agent de supraveghere.
Faza de date
Grupul semnalelor fazei de date :
-DBSY# (Data Busy): activat de agentul care va furniza datele pe magistrala
de date, care poate fi agentul de rspuns la o citire, agentul de cerere la o scriere sau
agentul de supraveghere la un succes pe o linie modificat, cnd preia controlul
magistralei de date;
-DRDY# (Data Ready): activat de agentul care furnizeaz datele pentru a le
valida;
-D[63:0]# (Data): reprezint magistrala de date cu opt ci pentru a transfera un
quadword;
-DEP[7:0]# (Data ECC/Parity): reprezint biii de protecie ECC/paritate a
magistralei de date (utilizai ca bii ECC permit corectarea erorilor de un singur bit i
detectarea erorilor de doi bii, fiecare bit de control fiind legat la una din cele opt ci de
date).
Tranzacii de I/E
APIC
APIC local (Advanced Programmable Interrupt Controller) de la familia P6,
Pentium 4, Intel Xeon si procesoarele mai recente Intel 64 si IA-32 -> doua functii
importante:
-primeste intreruperi de la pinii de intrerupere ai procesorului, de la surse interne si de
la un I/O APIC (sau alt controller extern de intreruperi) si le trimite la core-ul procesor
pentru gestionare;
-in sisteme MP trimite si receptioneaza mesaje de intreruperi interprocesor (IPIinterprocessor interrupt) la / de la celelalte procesoare logice pe magistrala sistem
(mesajele IPI pot fi utilizate pentru distribuirea intreruperilor printre procesoare sau
pentru executia unor functii sistem ca bootarea procesoarelor, distribuirea lucrului la
procesoare, etc).
Un procesor poate genera un IPI prin programarea registrului ICR (interrupt command
register). O scriere in ICR => generarea si lansarea unui mesaj pe magistrala sistem
(pentru procesoarele Pentium 4 si Xeon) sau pe magistrala APIC (pentru Pentium si
familia P6).
I/O APIC face parte din setul de cipuri sistem Intel. Primeste intreruperi externe din
sistem si echipamentele de I/E si le transmite la APIC local ca mesaje IPI. In sisteme
MP dispune de un mecanism de livrare a intreruperilor la APIC-urile locale ale unor
procesoare selectate sau unui grup de procesoare.
Paralelism:
-paralelism la nivel de instructiuni (ILP instruction-level of
parallelism): procesoarele au hardware special pentru identificarea dinamica a
instructiunilor independente care pot fi lansate in acelasi ciclu (se utilizeaza un rezervor
de instructiuni);
-paralelism la nivel de thread-uri (TLP thread-level parallelism):
executia in paralel a mai multor thread-uri.
Arhitectura Hirata
Modelele Tullsen
Modele Tullsen (University of California, San Diego) pentru SMT
(complexitati hardware diferite) cu 10 unitati functionale, permitand lansarea a 8
instructiuni pe ciclu:
-multithreading de granulatie fina: in fiecare ciclu un singur thread lanseaza
instructiuni (impiedica pierderea verticala, dar nu si cea orizontala);
Performante:
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.
Aria
O (t*log (t))
O (t)
O (t)
O (t)
O (log (t))
O (log (t))
O (log (t))
CMP
CMP : chip multiprocessor sau multi-core
=> TLP prin rularea unor secvente complet separate de instructiuni pe
procesoare separate.
Avantaje:
-durata ciclului redusa: fiecare CPU este mic si rapid (S.O. aloca
fiecarui CPU un singur thread de control);
-utilizarea unui grup de procesoare mici, identice => costul de
proiectare si verificare este scazut;
-arhitectura CMP este mai putin sensibila la o slaba organizare de date
si gestiune a comunicatiilor, deoarece intarzierile in comunicatii sunt mici si rata de
transfer este mare.
Arhitecturi:
-CMP omogen: toate procesoarele sunt de acelasi tip;
-CMP heterogen: contine procesoare de tipuri diferite (disponibil in
special sub forma multiprocessor systems-on-chip MPSoC).
Utilizeaza core-uri relativ simple pentru thread singular, dar executa thread-uri
multiple in paralel pe core-uri multiple.
simplitatea proiectului;
frecventa mai mare a ceasului;
scaderea timpului consumat cu validarea proiectului.
Primul multicore de scop general: 2005 Intel Duo (doua nuclee Pentium M pe
un singur cip). Procesoarele partajau memoria cache L2 si logica de gestiune a puterii.
AMD Opteron dual-core: memorii cache L2 separate, dar o interfata comuna
procesoare - controller de memorie si HyperTransport.
Niagara SPARC: opt nuclee simetrice multithread cu patru procesoare logice
fiecare.
Prima arhitectura CMP de baza propusa de L. Hammond, B. A. Nayfeh, and K.
Olukotun, A single-chip multiprocessor,, Computer, vol. 30, no. 9, pp. 7985, Sep.
1997:
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 (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:
Un motor:
Arhitecturi tera-scalare
Necesitatea arhitecturilor tera-scalare:
-impunerea procesoarelor duale in ultimii ani;
-tendinta de crestere a numarului de core-uri;
-tehnicile SMP permit integrarea unor PE-uri (Processing Engine) mici pe
cip.
Reteaua de interconectare
Cerinte:
-scalabilitate: multe zeci pana la cateva sute de noduri (agenti) -> crestere
subliniara a distantei medii in raport cu numarul de noduri;
-partitionabilitate: topologia arhitecturii partitionata dinamic pentru a permite
performanta si izolarea defectelelor;
-toleranta la defecte: degradare eleganta la defecte;
-validare si testare: furnizeaza suport pentru testare si validare -> se prefera
rutarea deadlock-free fata de deadlock-recovery;
-regularitate: se obtine simetrie fizica;
-flexibilitate si proiectare prietenoasa: cu un efort minim de reproiectare sa se
satisfaca un segment larg de pe piata.
3) Partitionare pentru izolarea performantelor: se pot realiza mai multe partitii pe cip,
fiecare cu cate o fractie din numarul total de unitati de calcul, unitati de scop special si
alte elemente de platforma, fiecare partitie fiind utilizata intr-o aplicatie precisa:
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 cip.
Exemplu: DRAM incorporat permite cresterea densitatii de memorie on-chip in
comparatie cu SRAM. In plus, gestiunea eficienta a memoriei de pe cip prin evitarea
datelor duplicate in ierarhia de cache-uri => cresterea capacitatii de pe cip.
Integrarea DRAM (ex. GDDR) pe cip 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).
Procesorul:
-ultimul nivel de memorie cache LLC (Last Level Cache) este partajat intre nuclee,
grafica si media:
-driverul de grafica controleaza care streamuri sunt in cache / coerente;
-orice agent poate accesa toate datele in LLC independent de cine a alocat
linia, dar dupa verificarea intervalului de memorie;
-in arhitecturile precedente Nehalem / Westmere fiecare core (din 2, 4 sau 6) poseda
cale privata la cache L3 => aprox 1000 fire / core;
-in arhitectura Sandy Bridge toate nucleele, GPU si motorul de transcodare video
("System Agent" ~ North Bridge) partajeaza cache-ul L3 printr-o interconectare in inel
compusa din 4 inele:
-Data Ring (32 octeti);
-Request Ring;
-Acknowledge Ring;
-Snoop Ring;
cu arbitrare distribuita. Avantaj: scalabilitate!
GPU
-GPU are aceleasi "drepturi" ca si nucleele din p.d.v. al accesului la cache-ul L3:
-driverul de grafica controleaza datele din L3 pentru afisare;
-se poate seta cantitatea de memorie cache utilizabila de GPU;
-GPUutilizeaza hardware pentru functii fixe:
=> eficienta din p.d.v. performante / putere / arie ocupata;
=> scadere de flexibilitate;
(spre deosebire de GPU NVIDIA proiectate cat mai programabile)
Q67 este in principiu un hub I/E (PCH "Platform Controller Hub"), deoarece
functiile Northbridge-ului sunt integrate chiar in procesor.
Caracteristici sistem:
-conectivitate procesor PCI Express 2.0 x16 (16 lanes, un "lane" ~ doua perechi de
semnale diferentiale, deci 4 fire, o pereche pentru transmisie si cealalta pentru receptie,
transferul facandu-se serial la nivel de octeti);
-Q67 furnizeaza inca 8 lane-uri PCI Express 2.0;
-procesorul conectat la PCH prin 4 "lanes" DMI ("Direct Media Interface") fiecare
asigurand 5 Gb/s. Tipuri de trafic:
-DMI -> DRAM;
-DMI -> core;
-core -> DMI.
Conectare memorie:
-doua canale DDR3 cu maxim 2 SO-DIMM-uri ("small outline dual in-line memory
module", aprox dintr-un DIMM obisnuit) sau UDIMM-uri ("unregistered DIMM"
sau "unbuffered DIMM" ofera cu un singur UDIMM / canal o rata usor crescuta de
transfer, dar la doua sau mai multe UDIMM-uri rata scade sub cea oferita de RDIMMuri "registered DIMM");
-largime canal 64 biti
Manageability
-functii de gestiune a sistemului (raportare de erori, diagnosticarea sistemului,
recuperare din blocari sistem):
-TCO ("total cost ownership") timer: prima expirare a timerului utilizata pentru
refacere din blocare software, iar a doua expirare, refacere din blocare hardware;
-Processor Present Indicator: PCH verifica daca procesorul executa primul
fetch dupa reset, altfel reboot-eaza sistemul;
-ECC Error Reporting: la detectarea unei erori ECC controllerul host trimite
mesaj la PCH, care va genera o intrerupere;
-Function Disable: PCH poate dezactiva functii integrate: LAN, USB, LPC,
Intel HD Audio, SATA, PCI Express sau SMBus;
-Intruder Detect: PCH genereaza intrerupere la deschiderea capacului
sistemului;
System Management Bus (SMBus 2.0)
-interfata SMBus Host pentru comunicatie cu slave-uri SMBus (compatibil cu
majoritatea dispozitivelor I2C, cum sunt sursa de alimentare, bateria reincarcabila,
supraveghere temperatura, ventilatoare);
Placa de baza
Intel Desktop
Board DQ67SW
unde:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
AA
BB
CC
DD
EE
FF
Proiectul Cell
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.
Cell furnizeaza paralelism la toate nivelurile de abstractizare sistem:
-paralelism la nivel de fire de executie: proiect multi-core;
-paralelism la nivel de instructiuni: planificare statica;
-paralelism de date: instructiuni pentru date paralele.
Structura SPU:
Executia operatiilor scalare se face utilizand caile largi de date SIMD (scalar
layering). Pentru exemplificare se considera executia operatiilor SIMD pe un vector de
patru elemente de un cuvant fiecare. O instructiune SIMD se realizeaza prin executia in
paralel a aceleiasi operatii pe toate elementele vectorului (a).
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.
Configuratie cu doua noduri cate o interfata IOIF si un port configurat BIF pentru
conectarea nodurilor:
MicroBlaze
Prezentare generala MicroBlaze
MicroBlaze (nucleu soft de procesor incorporat) este un RISC (Harvard
Reduced Instruction Set Computer) pentru implementare in FPGA-uri (Field
Programmable Gate Arrays) Xilinx cu instrumentele software Xilinx EDK (Embedded
Development Kit). Schema bloc:
-magistrale separate pentru instructiuni si date de 32 biti functionand in paralel pentru
acces pe cip sau in exterior;
-componente principale:
-32 registre de scop general de 32 biti;
-ALU;
-unitate de deplasare (Shift);
-doua niveluri de intrerupere.
-optional (marcat cu gri) se poate completa cu:
-barrel shifter;
-unitate de impartire;
-unitate de inmultire;
-unitate de v.m. simpla precizie (FPU);
-cache-uri de instructiuni si date;
-unitate de gestionare a memoriei (MMU).
=> flexibilitate pentru a adapta complexitatea procesorului la cerintele aplicatiei!
Formatele instructiunilor
Suporta doua formate de instructiuni: Tip A (pentru instructiuni registru registru) si Tip B (pentru instructiuni registru-valoare imediata).
Tip A
Tip B
Caracteristici multiprocesor
Sincronizare prin semafor
MicroBlaze furnizeaza pentru implementarea operatiilor de tip semafor doua
instructiuni LWX (Load Word Exclusive) si SWX (Store Word Exclusive) (permit
implementarea test&set, compare&swap, exchange memory, fetch&add, spinlocks).
Aceste instructiuni sunt utilizate tipic de programele sistem, apelate de catre programele
de aplicatii.
LWX incarca un semafor din memorie, cauzand setarea rezervarii (rezervarea
memorata intern de catre procesor). Programul calculeaza un rezultat bazat pe valoarea
semaforului si memoreaza conditionat (pe baza existentei rezervarii stabilite de
instructiunea LWX precedenta) rezultatul in aceeasi locatie de memorie cu instructiunea
SWX:
-daca exista rezervarea la momentul executiei instructiunii SWX, memorarea
se efectueaza si MSR[C]0, este bitul MSR[29] cu semnificatia: Arithmetic Carry
0 = No Carry (Borrow)
1 = Carry (No Borrow);
-daca rezervarea nu exista, locatia de memorie nu este modificata, iar
MSR[C]1;
Daca memorarea se executa cu succes => secventa intre citirea semaforului si
inscrierea semaforului apare ca fiind executata atomic (niciun alt dispozitiv nu a
modificat semaforul).
lwx r5,r3,r0
bnei r5,next
addik r5,r5,1
swx r5,r3,r0
addic r5,r0,0
bnei r5,loop
.
Equal)
next:
loop:
lw r5,r3,r0
bnei r5,loop
lwx r5,r3,r0
bnei r5,loop
addik r5,r5,1
swx r5,r3,r0
addic r5,r0,0
bnei r5,loop
Operare lockstep
Doua sau mai multe nuclee MicroBlaze identice executa acelasi
program, iar prin compararea iesirilor furnizate de nuclee se pot detecta
incercarile de falsificare ("tampering attempts"), defecte tranzitorii sau defecte
hardware permanente.
Configuratia sistemului: un singur nucleu este setat master, celelalte
nuclee sunt setate slave. Nucleul master controleaza semnalele de iesire si
gestioneaza functionalitatea "debug".
Portul Lockstep_Master_Out de la master este conectat la portul
Lockstep_Slave_In de la slave (slave-uri).
Protectie la falsificare
Detectarea erorilor
Sistemul detecteaza erorile tranzitorii si permanente, important in
aplicatii tolerante la defecte. Se utilizeaza un comparator care semnaleaza
aparitia unei erori (iesirile celor doua nuclee nu sunt identice), caz in care cele
doua procesoare sunt oprite pentru a nu propaga eroarea.
Ca in sistemul precedent, master controleaza perifericele, slave primeste
doar semnale de intrare (nu furnizeaza semnale de iesire in exterior).
Sisteme multiprocesor
Exemplu: sistem cu doua procesoare care pot comunica prin mai multe cai
posibile.
-memorie interna BRAM dual port, partajata intre cele doua procesoare, permitand
schimb de cantitati mari de date (ordinul kB);
-doua nuclee XPS Mailbox si XPS Mutex furnizand solutii simple de comunicatie
intre procesoare;
-bridge PLBv46 la PLBv46 conectand cele doua magistrale sistem (permite
partajarea unui periferic care nu este multiport).
Varianta mai economica: plasarea procesoarelor pe o singura magistrala
sistem:
=> economie prin eliminarea unei magistrale si utilizarea de dispozitive
IP uniport;
=> sistem mai putin determinist;
=> creste incarcarea pe magistrala.
Comunicatie si sincronizare
Memorie partajata
-toate procesoarele pot accesa direct memoria partajata;
-comunicatia se realizeaza prin instructiuni load si store;
-accesul la memoria partajata trebuie sincronizata printr-un protocol
hardware/software;
-permite transfer de blocuri mari de date (kB);
-memoria partajata poate fi realizata in exteriorul cipului;
-memoria partajata externa se implementeaza prin controllerul de memorie
MPMC: fiecare port este mapat in aceeasi zona de adrese;
Mailbox
Xilinx furnizeaza nucleul de comunicatie interprocesor XPS Mailbox:
-fiecare mailbox are o pereche de cozi FIFO (pentru transmisie si pentru receptie),
lungimea configurabila de catre utilizator;
-functionare
a) sincrona: receiverul interogheaza permanent mailboxul pentru date noi;
b) asincrona: mailboxul trimite o intrerupere (linia IRQ) catre receiver la
sosirea datelor;
-un mailbox dispune de o pereche de interfete pentru conectarea procesoarelor
(chiar daca se pot conecta mai multe procesoare la un mailbox, se recomanda
conectarea a numai doua procesoare);
-utilizare pentru mesaje scurte si medii (pana la sute de octeti);
-transfer: fiecare procesor scrie/citeste un mesaj intreg in/din mailbox => consuma
multe cicluri;
-dezvoltare viitoare: utilizarea DMA;
Sincronizare
Tehnicile de sincronizare de tip semafoare si mutex bazate software necesita
operatii atomice read-modify-write, indisponibile la MicroBlaze.
Protocolul:
-valoare initiala mutex = 1 (unlocked);
Depanare
Arhitecturi GPU
GPU (Graphics Processing Unit) lansat de NVIDIA in 1999 permite
accelerarea unei varietati de aplicatii paralele, in primul rand cele grafice, dar si de scop
general (in acest caz GPGPU General Purpose GPU).
Din cauza unor inconveniente legate de GPGPU (cunostinte detaliate API si
GPU, exprimarea problemelor in coordonate de varfuri, texturi, iar scrieri/citiri cu
memoria nu erau suportate, fara suport de dubla precizie), NVIDIA a introdus doua
tehnologii cheie:
-arhitectura de calcul si grafica G80 (prima data in GPU-urile GeForce 8800,
Quadro FX 5600 si Tesla C870);
-CUDA (Compute Unified Device Architecture), arhitectura software si
hardware permitand programarea GPU cu o varietate de limbaje de programare de nivel
inalt.
Arhitectura G80
(1)
Microsoft DirectCompute este un API suportand prelucrare de scop general pe GPU-uri sub
Microsoft Windows Vista si Windows 7. DirectCompute face parte din colectia de API-uri Microsoft
DirectX.
CPU:
-optimizat pentru executia de cod secvential;
-logica control complexa permitand executia in paralel de instructiuni de la un
singur thread, chiar si out-of-order;
-memorii cache mari pentru reducerea latentei accesului la date si instructiuni;
-rata de transfer cu memoria la un GPU 10x;
GPU:
-memorii cache mici, lasand o arie mai mare pentru calcule performante v.m.;
-nu este optimizat pentru anumite tipuri de prelucrari => majoritatea
aplicatiilor vor utiliza CPU (portiunile secventiale ale aplicatiei) si GPU (portiunile
numeric intensive) => NVIDIA a introdus in 2007 modelul de programare CUDA
pentru a suporta executia unitara CPU/GPU a unei aplicatii.
Organizarea de baza:
-arie de SM-uri (Streaming Multiprocesor), doua SM-uri formand un bloc constructiv
(numarul de SM-uri dintr-un bloc poate sa varieze);
-fiecare SM contine un numar de SP-uri (Streaming Processor), care partajeaza logica
de control si cache-ul de instructiuni;
-G80: 128 SP-uri (16 SM x 8 SP), fiecare SP cu unitate inmultire-adunare si o
unitate de inmultire suplimentara;
-GT200: 240 SP-uri;
-G80 suporta 768 thread-uri / SM, in total aprox. 12000 thread-uri;
-GT200 suporta 1024 thread-uri/SM, in total aprox.30000 thread-uri;
(un procesor clasic dual-core sau quad-core suporta 2-4 thread-uri /core);
-memoria globala, externa GPU, este de tip GDDR DRAM ("graphics double data rate
DRAM"), diferita de memoria sistem;
-pentru aplicatii grafice contine imagini video si informatii de texura pentru
generare ("rendering") 3D;
-pentru calcule functioneaza ca o memorie off-chip de banda foarte larga.
Multi-core DSP
Conceptul DSP introdus la mijlocul anilor 1970, permitand prelucrari
matematice complexe in timp real, pe baza unor caracteristici arhitecturale ca:
-magistrale de date duale/multiple;
-instructiuni complexe intr-un singur ciclu;
-unitati de inmultire hardware performante;
-instructiuni speciale pentru gestiunea constructiilor de prelucrari de semnale.
Cresterea performantelor DSP => dezvoltarea de aplicatii in timp real mai
sofisticate, in domenii ca voce, audio, imagini, video.
Constatare: majoritatea utilizatorilor de DSP folosea in sistemele lor mai multe
procesoare, in loc de unul singur pentru rezolvarea problemelor.
Un pas intermediar: TI a creat in TMS320C40 porturile necesare pentru
plasarea impreuna a mai multor procesoare intr-o matrice de elemente de prelucrare.
-periferice:
-patru "lanes" SRIO (Serial Rapid IO);
-PCIe;
-HyperLink suportand conexiuni cu alte dispozitive avand arhitectura
KeyStone;
-Gigabit Ethernet cu operare 10/100/1000 Mbps;
-interfata DDR3 64 biti cu 8 GB spatiu adresabil;
-interfata UART;
-interfata I2C (Inter-Integrated Circuit);
-GPIO (General-Purpose Input/Output) 16 pini;
-intefata SPI (Serial Peripheral Interface);
-module semafor;
-16 timers 64 biti;
-3 PLL-uri pe cip;
Arhitectura KeyStone
-integreaza nuclee RISC si DSP cu coprocesoare specifice aplicatiei si de I/E;
-acces neblocant la toate nucleele de prelucrare, periferice, coprocesoare, I/E prin patru
elemente principale hardware:
-Multicore Navigator (trimite taskurile la hardware-ul corespunzator
disponibil);
-TeraNet (transfer de pachete);
-Multicore Shared Memory Controller (acces direct al nucleelor la memoria
partajata, fara utilizare TeraNet);
-HyperLink (interconectare la nivel de cipuri pentru lucrul in tandem al S0Curilor).
-memorie on-chip:
-32 KB cache L1 pentru program si 32 KB cache L1 pentru date / nucleu;
-512 KB / nucleu memorie dedicata configurabila ca memorie RAM mapata
sau cache;
-4096 KB memorie partajata MSM ("Multicore Shared Memory") ca memorie
cache L2 sau L3;
-detectie si corectie de erori;
-interfata de memorie externa DDR-3 64 biti EMIF ("External Memory Interface");
-multitudine de interfete standard (PCI Express, Gigabit Ethernet, I2C, UART, TSIP
Telecom Serial Interface Port, EMIF 16 biti, GPIO, etc);
Structura nucleului:
Memory Protection:
-S.O. defineste cine poate accesa L1D, L1P si L2;
-impartire pe pagini (16 pagini x 2KB pentru L1P si L1D, 32 pagini x 16 KB
pentru L2);
-controllerele de memorie contin registre specificand permisiunile de acces la
paginile de memorie;
-acces:
-utilizator / supervizor cu drepturi de citire, scriere, executie;
-local (DSP) / global (initat de DMA);
-accesele neautorizate -> intrerupere;
-blocheaza accesul (citire returneaza 0, scriere ignorata);
-memoreaza info initiator (ID, adresa, tip acces);
Controller de memorie
-interfateaza memorie SDRAM DDR3;
-adresa 33 biti -> spatiu 8 GB;
-magistrala date 16/32/64 biti;
-1/2/4/8 bancuri;
-mod "self-refresh";
Semnale importante:
-DDRD [63:0] magistrala bidirectionala de date;
-DDRCB [7:0] biti verificare ECC;
-DDRA [15:0] adresa;
-DDRCE0,1 "chip enable";
-DDR3CLKOUTP [1:0]/DDR3CLKOUTN [1:0] ceas diferential;
-DDRDQSP [8:0]/DDRDQSN [8:0] strobe diferential date;
etc.
Controllerul transmite comenzi catre SDRAM, cum sunt:
-ACT activeaza banc si rand (se transmite inainte de o operatie de citire sau scriere);
-DES deselecteaza dispozitiv;
-NOP;
-RD furnizeaza adresa de coloana de start si incepe operatia de citire;
-REF autorefresh;
-WR furnizeaza adresa de coloana de start si incepe operatia de scriere;
Comenzile sunt codificate prin nivelurile semnalelelor de control.
Operatia de citire:
Operatia de scriere:
Timer64P
-poate fi configurat utilizand bitii de mod (TIMMODE) din registrul
TGCR ("timer global control register"):
-timer scop general GP ("general purpose") pe 64 biti;
-timere duale de 32 biti TIMLO si TIMHI;
-timer watchdog.
-un pin intrare TINPL si un pin de iesire TOUTL, cu functii controlate prin registrul
TCR ("timer control register");
Dintre modurile de functionare:
Exemplu: modul timer scop general pe 64 biti.
-cozi FIFO pentru receptie si transmisie de 16 octeti, plus biti aditionali de eroare
pentru receptie;
-conversii serie/paralel si paralel/serie a datelor;
-citirea in orice moment a starii UART;
-capabiltati de control si generare intrerupere;
-generator de baud programabil pentru selectarea ratei de comunicatie.
unde
-Owner (acces R): ID-ul nucleului detinator al semaforului (FREE=0) sau zero
(FREE=1);
-Free (acces RW):
0:
R: semaforul nu este atribuit nucleului care a facut cererea;
W: cererea trecuta in coada;
1:
R: semaforul este atribuit nucleului care a facut cererea;
W: semaforul este setat liber;
-Reserved: campuri rezervate.
Nu se genereaza intreruperi pentru atribuirea semaforului (SEMINTi).
Citirea starii unui semafor. Fara a cere semaforul un nucleu poate citi starea
acestuia prin citirea registrului SEM_QUERY (structura asemanatoare cu cea a
registrului SEM_DIRECT).
Gestionarea erorilor. Patru tipuri de erori:
-Already Free Error: incercarea de eliberare a unui semafor liber;
-Illegal Free Error: incercarea de eliberare a unui semafor de catre un nucleu
care nu-l detine;
-Already Own Error: incercarea de acaparare a unui semafor deja detinut de
nucleu;
-Already Requested Error: lansarea unei noi cereri de acaparare a unui semafor
pentru care nucleul are deja o cerere in coada.
La aparitia unei erori registrul SEMERR este actualizat cu numarul codului de
eroare (0-63) si ID-ul nucleului care a generat eroarea.
unde
-Faultid: ID-ul nucleului care a generat eroarea;
-SEMNUM: numarul semaforului asociat cu eroarea;
-ERR: codul de eroare:
-00h: No Error;
-01h: Already Free Error;
-02h: Illegal Free Error;
-03h: Already Own Error;
-04h: Already Requested Error.
Registrul SEMERR poate fi sters inscriind valoarea 1 in registrul SEMERR_CLEAR.
Intreruperi. Modulul semafor poate genera doua tipuri de intreruperi:
-Semaphore Grant Interrupt (SEMINTn);
-Semaphore Error Interrupt (SEMERRn).
(fiecare cu linii independente, capabile sa adreseze oricare nucleu)
SEMINTn se genereaza la atribuirea unui semafor pentru o cerere aflata in
asteptare.
SEMERRn se genereaza la detectarea unei conditii de eroare.
Istoric MPSoCs
Primul MPSoC a fost Lucent Daytona (Lucent Technologies), proiectat pentru
statii de baza wireless, in care se efectueaza prelucrari identice de semnale pe un numar
de canale:
-arhitectura simetrica;
-patru CPU bazate SPARC V8 (RISC 32 biti & SIMD 64 biti) conectate la o magistrala
de mare viteza;
-fiecare CPU memorie cache 8KB;
-memoriile cache supravegheaza magistrala pentru a asigura coerenta;
-procesoarele partajeaza un spatiu comun de adrese de memorie;
-cip 200 mm2 proces CMOS 0.25 m 3.3 V 100 MHz.
Exemplu: implementarea unui codor MPEG2 utilizand comunicare punct-lapunct, cu 7 noduri si 10 conexiuni:
-IP core(1);
-solutia traditionala in MPSoC;
-avantajul major este simplitatea => cost scazut de proiectare si suprafata mica ocupata;
-dezavantaj: rata limitata de transfer intre module;
-solutie aplicabila pentru un numar redus de procesoare.
IP core (Intellectual Property core)este un bloc de logica sau date utilizat in realizarea unui FPGA (Field Programmable Gate Array)sau
ASIC (Application-Specific Integrated Circuit) pentru un produs. Ulterior, blocul poate fi reutilizat si pentru alte produse, ca parte a EDA
(Electronic Design Automation). IP core trebuie sa fie portabil pentru a putea fi inserat in tehnologia altui producator. Exemple de IP cores:
UART (Universal Asynchronous Receiver/Transmitter), CPU, cotroller Ethernet, interfete PCI, etc.
(1)
IBM CoreConnect
AMBA de la ARM
-ARM: www.arm.com;
-proiectat pentru familia de procesoare ARM;
-protocoale pentru trei magistrale:
-AHB Advanced High Performance Bus;
-ASB Advanced System Bus;
-APB Advanced Peripheral Bus (proiectat pentru tranzactii de performanta
scazuta cu perifericele);
-bridge: conexiune intre doua entitati operand cu protocoale diferite si/sau frecvente
diferite => adapteaza protocoalele, asigurand sincronizarea si bufferarea;
-un nod de calcul este alcatuit din procesor Motorola PowerPC (MPC) 750 si
memorie cache de instructiuni si date;
-fiecare procesor are o magistrala dedicata (CPU Bus X), iar sistemul dispune de
o magistrala globala partajata;
-doua registre, DONE_OP si DONE_RV, pentru dialogul intre procesoare:
fiecare procesor seteaza un indicator in aceste registre dupa prelucrarea datei sau
receptia datei de la procesorul corespondent;
-accesul unui procesor la modulele de memorie se face prin magistrala globala;
-BB_x (Bus Bridge) permit accesul procesoarelor la modulele de memorie;
Exemplul 1 de comunicare: MPC 750_A scrie in SRAM_A => BB_1
realizeaza conexiunea procesorului A la memorie, in timp ce BB_2 si BB_8
blocheaza accesul la SRAM_A de la oricare alt procesor.
Exemplul 2 de comunicare: MPC 750_B citeste de la SRAM_A: BB_1
deconecteaza CPU Bus A de la SRAM_A, BB_2 si BB_3 conecteaza CPU Bus
B la Global Bus si SRAM_A.
unde
PE: procesor;
IP: IP unit;
HW: unitate de accelerare.
PE1 si PE2 pot comunica direct sau utilizand memoria partajata, utilizand protocolul
magistralei Bus 1. Alte comunicatii se realizeaza prin intermediul puntilor, de exemplu
Bridge 1 executa translatare intre trei protocoale Bus 1, Bus 2 si Bus 3.
=> in schemele complexe MPSoC comunicatiile influenteaza semnificativ
performantele globale ale sistemului.
-in comunicatia directa ruta dintre Sender si Receiver contine o singura magistrala;
-in comunicatia indirecta ruta contine memoria partajata si/sau modul punte;
-indicatorii specifica starea ready a proceselor:
-doi indicatori, cate unul pentru fiecare proces Sender si Receiver;
-un singur flag: daca setat un singur proces este ready, daca resetat, fie
ambele procese sunt ready, fie niciunul; poate fi localizat in Sender, Receiver sau in
memoria partajata;
Comunicatie directa:
Transferul de date se face prin citirea din / scrierea in registre locale sau memorie
locala. Procesul transmitator trebuie sa incarce registrul de date cu data inainte sau in
timpul sincronizarii, dupa care operatia bus write sau bus read (in functie de
transfer initiat de Sender sau respectiv de Receiver) copiaza data in celalalt registru.
Comunicatia indirecta:
Ambele procese acceseaza memoria partajata prin rutine read( ) si write( ), incapsulate
in canalul de magistrala partajata. Procesul 2 trebuie sa astepte scrierea datei in
memoria partajata de catre Procesul 1 inainte de a o citi.
a) Comunicatie directa
Necesita in cazul general doi indicatori de sincronizare, cate unul
pentru fiecare proces (0=proces not ready, 1=proces ready). Indicatorul local
unui proces semnalizeaza disponibilitatea celuilalt proces in comunicatie,
astfel fiecare proces poate testa starea celuilalt procesul printr-o citire locala,
fara accesul la magistrala.
Diagrama sincronizarii in cele doua procese, Sender si Receiver:
In cazul in care cele doua procese ruleaza pe acelasi procesor, comunicatia este
gestionata de S.O.
In cazul proceselor ruland pe procesoare distincte, daca au aceleasi drepturi de
acces la magistrala, comunicatia se desfasoara ca mai sus.
In multe scheme de gestiune a magistralei modulele sunt impartite in module
master si module slave. Astfel daca Sender este master, acesta va initia o operatie
Write Data, sau daca Receiver este master, acesta va initia o operatie Read Data.
b) Comunicatie indirecta
Intre Sender si Receiver exista o memorie partajata. Nu mai este necesar ca
cele doua procese sa fie ready simultan, ci data sa fie ready pentru scriere cand Sender
este ready, respectiv data sa fie ready pentru citire cand Receiver este ready.
Se utilizeaza un singur indicator FD:
FD=0 data este ready pentru scriere;
FD=1 data este ready pentru citire.
Scrierea precede citirea => Sender seteaza FD, Receiver reseteaza FD.
Pentru procese locale: comunicatia gestionata de S.O. (folosind mecanisme tip
mutex, locks).
MULTIPROCESOARE NC-NUMA
NC-NUMA (NonCoherent NUMA). Exemplu: Cm* de la Carnegie Mellon University
(procesoare LSI-11),
MULTIPROCESOARE COMA
Probleme:
-localizarea liniilor de memorie cache;
-eliminarea unei linii dintr-o memorie cache n cazul n care aceasta este ultima
copie.
Solutii:
-localizarea liniilor de cache: harta de bii (un bit pentru fiecare linie, care s
indice dac linia respectiv este sau nu prezent n memoria cache);
-localizarea liniilor aflate la distan: atribuirea fiecrei linii unei maini gazd,
nu n raport cu localizarea fizic a liniilor (liniile pot migra n cadrul sistemului), ci n
raport cu localizarea directoarelor liniilor, care rmn n poziii fixe;
-pot fi mai multe copii ale unei linii cache n noduri diferite -> unele copii pot
fi eliminate pentru aducerea altor linii n nodurile respective => ultima copie a liniei s
nu fie tears! Soluie: evidena copiilor unei linii la nivelul catalogului de pe nodul
gazd (la eliminarea unei linii din memoria cache se face acces la catalogul gazd i
dac aceasta este ultima linie => transferat ntr-un alt nod) sau una din copii marcat
copie principal (nu va fi tears niciodat).
MULTIPROCESOARE CC-NUMA
NUMA cu memorie cache coerent CC-NUMA (Cache Coherent
NUMA): coerena memoriilor cache prin utilizarea unor cataloage
(multiprocesoare bazate pe cataloage sau directory-based multiprocessors).
Baz de date cu informaii despre locul i starea fiecrei linii (bloc) de
cache. La referirea unei linii cache, baza de date este interogat pentru a afla
unde se gsete i dac aceasta este valid sau modificat.
Interogarea bazei de date la fiecare instruciune de referire la memorie
=> implementare cu hardware extrem de rapid.
reduce traficul global pe magistrala (memoria contine datele locale si o parte utila a
datelor partajate).
micsoreaza latenta (accesele locale sunt mai rapide).
Encore Gigamax:
(etc.)
Varianta la solutia b2) : ierarhia de inele (exemplu: KSR). Supravegherea la
cereri se face pe un inel. Legatura punct la punct a inelului implica o rata de transfer
mai mare decat magistralele, dar si o intarziere mai mare.
Schema de baza:
La un eveniment lipsa de cache la citire pentru un bloc in starea Dirty aflat la un nod
care nu este Requestor sau nodul care detine informatiile de director:
Eveniment lipsa in cache la o scriere pentru un bloc care se gaseste in starea Shared in
doua noduri (literele suplimentare suprapunere):
Organizarea directoarelor
Scheme de directoare (in functie de sursa informatiilor din director):
-centralizate.
-distribuite:
-ierarhice.
-neierarhice (in functie de localizarea copiilor):
-bazate pe memorie;
-bazate pe cache.
Schemele centralizate sunt usor de implementat , dar nu sunt scalabile.
Schemele distribuite neierarhice au directoarele implementate alaturi de memorie,
iar localizarea directorului se bazeaza pe informatiile de adresa din cuvantul curent.
Scheme ierarhice
=> directorul: structura de date ierarhica
-frunzele sunt noduri de prelucrare;
-nodurile interne: informatii de stare a directorului (intrarea de
director a unui nod pentru un bloc specifica daca fiecare subarbore are blocul in cache
(bit de prezenta) si daca este in starea modificat (dirty))
Pentru gasirea informatiilor de director -> trimite un mesaj search catre
nodul parinte.
Asemanarea cu schemele de supraveghere ierarhica, dar aici se trimit mesaje
intre nodurile fiu si parinte.
Overhead
64
12.5%
256
50%
1024
200%
Optimizari:
-cresterea dimensiunii blocului de cache => reduce
overhead-ul prin micsorarea spatiului de memorie ocupat de director;
O alt cerere de la nodul 20 -> la nodul 36 pentru linia 2 (bit de control 1, in memoria
cache a nodului 82) => n tabela nodului 36 se actualizeaz informaia pentru linia 2 ->
mesaj nodul 82 pentru a furniza nodului 20 linia.
Soluie: pentru fiecare intrare n tabel m cmpuri (plasarea liniei respective n maxim
m noduri simultan).
Alt soluie: harta de bii (256 bii), specifica dac o anumit linie se gsete sau nu n
cele 256 de noduri ale sistemului => memoria cataloage = 50% din memoria util (256
bii pentru evidena a 64 octei = 512 bii).
Alt soluie: lista nlnuita pentru fiecare linie de cache (numerele de noduri n care se
gsete linia respectiv) => spaiu suplimentar pentru legturile listei nlnuite i
parcurgerea de fiecare dat a unei astfel de liste!
Probleme:
-marcarea liniilor cache dac sunt curate sau modificate => cerere de citire
ctre un nod avnd linia modificata -> nodul care conine o copie curat;
-la scriere -> toate nodurile care dein copii ale liniei respective;
-cereri simultane de scriere n aceeai linie cache.
Multiprocesorul DASH
DASH (Directory Architecture for Shared Memory)
sisteme comerciale (exemplu: SGI Origin 2000).
=> informatiile despre copii distribuite printre chiar copiile respective in memoriile
cache,
-fiecare copie indica catre copia urmatoare => lista inlantuita distribuita.
-in nodul home exista un pointer la prima copie a blocului.
Operatie de scriere:
-traficul este proportional cu numarul de noduri care detin copii ale blocului;
-invalidarea se face in paralel.
Exemple: Scalable Coerent Interface (SCI IEEE standard), Sequent NUMA-Q.
Caracteristici de baza:
-controllerul de memorie DDR integrat;
-conectarea procesorului la alte procesoare prin legaturi HyperTransport.
Arhitectura x86-64:
-arhitectura AMD x86-64 suporta adrese virtuale pe 64 biti si adrese fizice pe
52 biti (Opteron suporta adrese virtuale pe 48 biti si adrese fizice pe 40 biti);
-extinde toate instructiunile logice si aritmetice pe intregi la 64 biti, inclusiv
inmultirea pe 64 biti cu rezultat pe 128 biti;
-dubleaza numarul de registre intregi de scop general (GPR general-purpose
registers) si registre SSE (streaming SIMD extension) de la 8 la 16.
-modelul de programare:
Structura core-ului
Caracteristici:
-instructiunile x86-64 de lungime variabila sunt convertite in microops de
lungime fixa si trimise la doua planificatoare: unul pentru intregi si celalalt pentru
virgula mobila si multimedia (MMX, SSE, SSE2, 3Dnow! extensie a setului x86 cu
adaugarea de instructiuni SIMD), in plus micro-ops de citire/scriere la unitatea
load/store;
-trei unitati de executie pentru intregi;
-trei unitati de generare de adrese;
-trei unitati de v.m. si multimedia;
-doua unitati load/store;
-memorii cache L1 pentru date si cod fiecare de 64 KB, de tip set-asociativ
dimensiune 2 si blocuri de 64 octeti;
-memorie cache L2 de 1 MB de tip set asociativ dimensiune 16, utilizand un
algoritm LRU de inlocuire a blocurilor si algoritm MOESI (modified, owner, exclusive,
shared, invalid) de coerenta;
unidoua
procesor proc.
patru
proc.
Numar de DIMM-uri
16
32
16
32
64
Diametru
5.3
10.67
15.59
Rata/procesor (GB/s)
5.3
5.3
3.9
5.3
7.06
11.23
5.3
3.53
2.8
-JOIN ateapt terminarea unui proces creat anterior: JOIN J, decrementeaz contorul
de la adresa J cu 1; dac rezultatul decrementrii este zero, procesul de la adresa J+1
este iniiat, altfel procesorul care execut JOIN este eliberat. Deci, toate procesele
execut n final o instruciune JOIN, exceptnd ultimul proces.
S0;
cobegin S1; S2; ; Sn coend;
Sn+1
end
Graf de preceden:
S1;
begin S2; cobegin S3; S4; S5 coend S6 end;
S7
coend;
S8
end
Organigrama implementarii:
Exemplu: nmulirea matrice vector, CA*B, unde A este o matrice n*n, iar
B i C sunt vectori coloan n*1, pentru un n foarte mare. Algoritmul utilizeaz
instruciunea parfor pentru a genera p procese independente (cu p divide pe n, n/p=s).
parfor i 1 until p do
begin
for j (i-1)s+1 until si do
begin
C[j] 0;
for k 1 until n do
C[j] C[j] + A[j,k]*B[k]
end
end
Thread-uri in Windows
Thread-ul = unitate de baza de utilizare a UCP, avand o stare redusa.
Starea redusa <= gruparea unui numar de thread-uri corelate intre ele in cadrul unui
task, pentru a partaja diferite resurse de calcul (memoria, fisiere, etc.).
Crearea thread-urilor
Un proces incepe cu executia unui singur thread, din care se pot crea noi
thread-uri:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
unde:
lpThreadAttributes = pointer la o structura care contine un descriptor de
securitate. Daca descriptorul de securitate este NULL, handle-ul thread-ului are toate
privilegiile de acces care i se adreseaza si nu va fi mostenit de nici un subproces.
dwStackSize = dimensiunea stivei in octeti. Daca este NULL atunci are
dimensiunea stivei thread-ului initial al procesului.
lpStartAddress = adresa functiei cu care incepe executia noului thread. Functia
trebuie sa aibe un argument si sa returneze un cod de iesire la terminare.
lpParameter = parametrul furnizat acestei functii. Daca functia necesita mai
multi parametri, acestea se incorporeaza intr-o singura structura de date si se furnizeaza
un pointer la aceasta structura.
dwCreationFlags = specifica daca thread-ul trebuie sa inceapa executia
imediat sau nu. Daca acest parametru este 0 atunci se incepe imediat executia threadului; daca are valoarea CREATE_SUSPEND, thread-ul este creat, imediat suspendat si
nu se executa decat la apelul functiei ResumeThread cu handle-ul sau ca parametru.
lpThreadId = furnizeaza identificatorul thread-ului la crearea sa. Programatorul
creaza o locatie DWORD si furnizeaza un pointer la aceasta locatie.
Functia CreateThread => handle valid la crearea cu succes a unui nou thread sau 0 la
insucces. In caz de esec: apel GetLastError => codul de eroare. Exemplu:
HANDLE hThread1, hRedPen;
DWORD ThreadID1, ErrorCode;
void ThreadProc (HANDLE hDrawPen);
hThread1 = CreateThread (
NULL,
//fara atribute de securitate
0,
//dimensiune stiva implicita
(LPTHREAD_START_ROUTINE)ThreadProc,
//start thread
hRedPen,
//argument pentru noul thread
(LPDWORD)&ThreadID1
//ID-ul thread-ului
);
if (hThread1==0) {
ErrorCode = GetLastError();
//handle eroare
}
Terminarea thread-urilor
Un thread isi incheie executia proprie:
void ExitThread(
DWORD dwExitCode
);
Excludere mutuala
Accesul la o variabila partajata pentru actualizare ~ sectiune critica (o secventa de
instructiuni care este executata complet numai de un singur proces, inainte ca un alt
proces sa acceseze acea sectiune critica).
O problem important: dou sau mai multe procese concurente partajeaz date care
sunt modificabile => segmente de program -> seciuni critice.
Supoziii privind seciunile critice:
Excludere mutual: cel mult un singur proces se poate afla ntr-o seciune
critic la un moment dat.
Terminare: seciunea critic este executat ntr-un timp finit.
Planificare echilibrat: un proces ateptnd intrarea n seciunea critic o va
face ntr-un timp finit.
Accesul mutual exclusiv la un set de variabile partajate se poate realiza prin diferite
construcii, printre care: MUTEXBEGIN i MUTEXEND.
Notaia pentru a declara un set de variabile ca fiind partajate de un tip T:
var v : shared T;
O seciune critic controlat de variabila partajat v :
csect v do S;
asociaz o instruciune S cu o variabil partajat v => S trebuie s aib acces exclusiv la
v.
........
csect w do S;
........
end
Pericolul blocrii: unul sau mai multe procese ateapt pentru evenimente care nu se
produc niciodat. Exemplu: dou procese concurente P1 i P2 intr concomitent n
seciuni critice exterioare controlate de variabilele v i w:
cobegin
P1:
csect v do csect w do S1;
P2:
csect w do csect v do S2
coend
:invalidarea intreruperilor
sectiune critica
ei
;validarea intreruperilor
:invalidarea intreruperilor
;oprire procesor si blocare sistem
Evenimente
Cnd un proces ateapt pentru un eveniment execuia urmtoarelor sale operaii se
amn pn cand un alt proces semnaleaz producerea evenimentului.
Exemplu: doua procese ciclice (operaiile concurente wait i signal acceseaz aceeai
variabil partajat e de tip eveniment):
var e : shared event;
cobegin
cycle sender
begin
. . . signal(e) ; . . .
end;
cycle receiver
begin
. . . wait(e) ; . . .
end
coend
Instructiunea TestAndSet
Operaia LOCK :
var x: shared integer;
LOCK(x):
begin
var y: integer;
y x;
while y=1 do y x; //ateapt pn deschis//
x 1 //ocup//
end
Implementarea operaiei UNLOCK este urmtoarea:
UNLOCK(x): x 0;
Mecanismul LOCK nesatisfctor: dou sau mai multe procese pot gsi x=0 i
intra simultan n seciunea critic, nainte de a face x1.
Solutia: instruciuni speciale! Exemplu: TEST_AND_SET(x), care testeaz i seteaz o
variabil partajat ntr-un singur ciclu de memorie de tipul read-modify-write:
=> utilizarea instruciunii CAS pentru a actualiza P s indice ultimul nod ataat
(CAS asigur c starea logic a programului ntrerupt, variabila P, este meninut la
reluarea programului, altfel P este setat la valoarea cea mai recent a lui TAIL:
procedure ENQUEUE(X);
var P: pointer; //P este local fiecrui apel al procedurii//
begin
LINK(X) ; //termin legtura ultimului nod//
P TAIL;
repeat CAS P, X, TAIL until TAIL = X;
LINK(P) X //ataeaz noul nod la coad//
end
Primitiva Fetch&Add
Primitiv care permite o anumit form de concuren a accesului la o locaie
de memorie: fetch-and-add, F&A(X,e), unde X este o variabil partajat ntreag, iar e
este o expresie ntreag. Primitiva ntoarce vechea valoare a lui X (Y) i nlocuiete
coninutul locaiei de memorie prin suma Y+x, ntr-o singur operaie indivizibil!
Mai multe operaii iniiate simultan de diferite procesoare => efectul final este acelai
indiferent de ordine, dar valorile intermediare ale lui X specific poziia n cadrul
ordinii.
Exemplu: dou procese P1 i P2, care execut fiecare:
P1:
P2:
S1 F&A(X,e1);
S2 F&A(X,e2);
Se presupune c exist dou cereri simultane, P1 avnd prioritate mai mare dect P2.
SEMAFOARE
Primitivele P i V (Dijkstra): operaii indivizibile care opereaz pe o variabil
semafor (indic numrul de procese care ncearc s intre n seciunea critic).
var s: semaphore;
P(s):
MUTEXBEGIN(s)
s s-1;
if s < 0 then
begin
Blocheaz procesul executnd P(s) i-l introduce
ntr-o coad FIFO asociat semaforului s;
Reia procesul gata de prioritatea cea mai mare
end
MUTEXEND;
V(s):
MUTEXBEGIN(s)
s s+1;
if s 0 then
begin
Dac exist un proces inactiv asociat cu semaforul s, atunci
activeaz procesul blocat cu prioritatea cea mai mare
asociat cu s i-l introduce ntr-o list de procese gata
end
MUTEXEND
Dac s = 0 / 1 => semafor binar (un singur proces la un moment dat este n seciunea
critic). Dac s = o valoare numeric ntreag => semafor numrtor.
Utilizare comun : procese concurente schimba date n timpul execuiei.
-empty i full => starea tamponului (tampon vid, respectiv tampon plin) => de
fapt, empty indic productorului numrul de locaii disponibile, full indic
consumatorului numrul de locaii de consumat;
-productorul i consumatorul se suspend dac empty=0, respectiv full=0.
shared record
begin
var p, c: integer;
var empty, full: semaphor;
var BUFFER[0:n-1]: message
end;
initial empty = n; full = 0; p = 0; c = 0;
cobegin
Producer:
begin
var m: message;
cycle
begin
produce un mesaj m;
P(empty);
p (p+1) mod n;
BUFFER[p] m;
V(full)
end
end;
Consumer:
coend
begin
var m: message;
cycle
begin
P(full);
c (c+1) mod n;
m BUFFER[c];
V(empty);
consum mesajul m
end
end
SEMAFOARE IN WINDOWS
Crearea unui semafor :
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);
unde:
lpSemaphoreAttributes = pointer specificand un descriptor de securitate a
semaforului. Daca este NULL, atunci semaforul nu va avea descriptor de securitate.
lInitialCount = valoarea initiala a contorului asociat semaforului. Se poate
initializa cu 0 pentru a impiedica preluarea acestuia de vreun thread in timpul
initializarii programului.
lMaximumCount = este numarul maxim de thread-uri concurente care pot
prelua semaforul fara sa fie blocate.
lpName = numele semaforului.
unde:
hHandle = handle-ul obiectului de sincronizare pentru care se asteapta;
dwMilliseconds = timeout, care poate fi 0, INFINITE (-1) sau o valoare
pozitiva, in milisecunde. Daca obiectul este signaled, functia intoarce 0 (succes), iar
daca este not-signaled functia se blocheaza pana ce obiectul devine disponibil sau
expira timpul de timeout. In cazul expirarii timpului de timeout functia intoarce starea
WAIT_TIMEOUT. Daca intoarce WAIT_ABANDONED inseamna ca un thread s-a
terminat fara se aelibereze obiectul de sincronizare. Daca intoarce valoarea 1, se
apeleaza functia GetLastError.
DWORD WaitForMultipleObjects(
DWORD nCount,
const HANDLE* lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
unde:
nCount = numarul de obiecte din tablou pentru care se asteapta;
lpHandles = pointer la un tablou de handle-uri de obiecte pentru care se
asteapta;
bWaitAll daca are valoarea TRUE asteapta ca toate obiectele sa fie in starea
signaled, iar daca are valoarea FALSE functia revine daca oricare obiect ajunge in
starea signaled. Pentru un apel wait-any functia intoarce indexul obiectului in starea
signaled, o valoare intre 0 si nCount 1.
dwMilliseconds = durata timeout in ms.
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
LPLONG lpPreviousCount
);
unde:
hSemaphore = handle-ul semaforului care se elibereaza;
lReleaseCount = increment la valoarea curenta a contorului asociat
semaforului;
lpPreviousCount = optional, pointer la o variabila care primeste ultima valoare
a semaforului.
Mutex
Mutex (mutual exclusion): asigura dreptul exclusiv de utilizare a unei
resurse. Operatii cu mutex:
-acces (obtinere) la mutex (lock).
-daca mutex liber -> se ocupa mutex si se intoarce imediat controlul la
procesul apelant, intr-o operatie atomica;
-daca mutex ocupat -> procesul apelant trebuie sa astepte eliberarea acestuia.
Protocolul de asteptare : sleep-wait sau busy wait/sleep-wait.
-eliberare mutex (unlock sau release) cand procesul a terminat accesul la
resursa partajata.
unde:
Preluarea mutex: una din cele doua functii wait. Dupa preluarea mutex, threadul executa codul din regiunea protejata de mutex. Pentru eliberarea mutex:
BOOL ReleaseMutex(
HANDLE hMutex
);
HANDLE hMutex;
char * szMutexName=mutex1;
hMutex=CreateMutex(NULL,FALSE,szMutexName):
if (hMutex==NULL) {
..... //eroare de handle
}
.....
if (WaitForSingleObject(hMutex,INFINITE)!=0) {
..... //eroare de handle
else { //incepe sectiunea critica
.....
ReleaseMutex(hMutex); //sfarsit sectiune critica, elibereaza
mutex
}
unde:
lpEventAttributes = pointer specificand atributul de securitate, indicand daca
procesele create ulterior vor mosteni handle-ul.
bManualReset = indica tipul obiectului care va fi creat. Daca TRUE, atunci
obiectul este cu resetare manuala (se apeleaza explicit SetEvent pentru a-l trece in starea
signaled si ResetEvent pentru a-l trece in starea not-signaled. Daca FALSE, atunci
obiectul este cu resetare automata: apelul SetEvent il trece in stare signaled, lasand un
thread in asteptare sa ruleze, apoi reseteaza automat obiectul in starea not-signaled.
bInitialState = reprezinta starea initiala signaled sau not-signaled.
LpName= numele evenimentului.
Considernd T1, T2, T3 instruciuni ale unui program secvenial, dac execuia lui T3
este independent de ordinea de execuie a instruciunilor T1 i T2, atunci exist
paralelism ntre T1 i T2.
X(A+B)*(AB)
Y ( C D ) * ( C + D )-1
ZX+Y
cobegin
X ( A + B ) * ( A B );
Y ( C D ) * ( C + D )-1
coend;
ZX+Y
end
OpenMP
OpenMP : API (Application Program Interface) utilizat pentru a controla
explicit paralelismul cu memorie partajata si fire multiple de executie.
Componente:
-directive compilator;
-functii runtime de biblioteca;
-variabile de mediu.
OpenMP este disponibil pentru C/C++ si Fortran. Exista implementari pe o multitudine
de platforme, inclusiv Unix si Windows.
Model de programare
Program OpenMP incepe cu un proces singular (thread master) -> secvential ->
constructie de regiune paralela (FORK) -> mai multe thread-uri in paralel -> JOIN ->
thread-ul master, etc.
Numarul de thread-uri : se poate modifica dinamic.
Structura unui program OpenMP :
#include <omp.h>
void main ( )
{
int var1, var2, var3;
..... cod secvential .....
//incepe sectiunea paralela => FORK
#pragma omp parallel private (var1, var2) shared (var3)
{
..... sectiune paralela executata de toate thread-urile .....
//toate thread-urile => JOIN => thread master
}
..... reia cod secvential .....
}
unde clauzele pot fi plasate in orice ordine si se pot chiar repeta. Liniile directive lungi
se pot continua pe randul urmator cu \.
Aceasta directiva imparte regiunea de cod intre thread-urile membre, fara insa
sa lanseze noi thread-uri.
Constructiile de partajare a lucrului sunt:
-for;
-sections;
-single.
O constructie de partajare a lucrului trebuie inclusa dinamic intr-o regiune paralela
pentru a fi executata in paralel.
Directiva for
Partajeaza iteratiile unei bucle for intre thread-urile setului (reprezinta un tip de
paralelism de date):
Clauza schedule, in functie de tip, descrie cum se impart iteratiile buclei for intre
thread-urile din set:
-static: iteratiile se impart in sectiuni de dimensiune chunk si asignate static
thread-urilor (daca nu se specifica chunk, iteratiile se impart in mod egal).
-dynamic: iteratiile se impart in sectiuni de dimensiune chunk si se asigneaza
dinamic thread-urilor. Cand un thread termina bucata sa, acesta este asignat dinamic la
o alta bucata din totalul de iteratii (valoarea implicita chunk=1).
-guided: dimensiunea bucatii este redusa exponential cu fiecare bucata
repartizata din totalul iteratiilor. Dimensiunea bucatii reprezinta numarul minim de
iteratii de repartizat de fiecare data (implicit chunk=1).
-runtime: decizia de repartizare este amanata pana in timpul executiei, fiind
determinata de variabila de mediu OMP_SCHEDULE (nu se specifica dimensiune
chunk).
Clauza ordered trebuie sa fie prezenta cand sunt incluse in directiva for si
directive ordered.
Clauza nowait indica faptul ca thread-ul nu se sincronizeaza la sfarsitul buclei
paralele.
Directiva sections
Imparte lucrul in sectiuni discrete separate, fiecare sectiune fiind executata de
un thread, pentru implementarea unui paralelism functional.
Fiecare sectiune section se executa o singura data de catre un singur thread, sectiuni
diferite vor fi executate de thread-uri diferite. Exista bariera implicita la sfarsit, numai
daca nu se utilizeaza nowait.
Exemplu: adunarea a doi vectori, primele n/2 iteratii fiind distribuite primului
thread, iar restul la un al doilea thread.
Directiva single
Directive de sincronizare
Directiva master
Directiva critical
Specifica o regiune de cod care trebuie executata numai de un singur thread la
un moment dat.
Directiva barrier
Sincronizeaza toate thread-urile din set. Forma generala:
#pragma omp barrier newline
Aceasta directiva trebuie sa fie intalnita de catre toate thread-urile din set, sau
de niciunul. Un thread care atinge bariera va astepta pana ce toate celelalte thread-uri
ating bariera, dupa care se continua executia paralela. Exemplu:
Directiva atomic
Alte directive
Clauze
Clauza private declara variabilele din lista ca fiind private fiecarui thread:
private (lista)
Clauza shared declara variabilele din lista ca fiind partajate intre toate threadurile:
shared (lista)
Clauza default permite utilizatorului sa specifice domeniul implicit al
variabilelor din extinderea lexicala a unei regiuni paralele:
default (shared | none)
Functii
OpenMP defineste un API pentru apeluri de functii din biblioteca, care executa
o varietate de operatii:
-functii legate de numarul de thread-uri;
-functii de zavorare (semafoare);
-functii de stabilire a mediului de executie.
Variabila de zavorare trebuie sa fie de tipul omp_lock_t sau omp_nest_lock_t, depinzand
de functia utilizata.
int omp_get_num_threads(void)
returneaza numarul de thread-uri din set in regiunea paralela.
int omp_get_max_threads(void)
returneaza valoarea maxima care poate fi furnizata de un apel al functiei
omp_get_num_threads.
int omp_get_thread_num(void)
returneaza identificatorul de thread in cadrul setului, fiind o valoare cuprinsa intre 0 si
omp_get_num_threads 1. Masterul primeste identificatorul 0.
int omp_get_num_procs(void)
returneaza numarul de procesoare disponibile programului.
int omp_in_parallel(void)
returneaza un intreg 0 (adevarat) daca sectiunea de cod care se executa este paralela,
respectiv un intreg = 0 (fals) daca sectiunea nu este paralela.
=> OpenMP adauga un numar mic de linii de cod la solutia secventiala (2-4
linii)!
Intel Cilk Plus furnizeaza doua constructii pentru paralelism la nivel de taskuri:
-doua cuvinte cheie: _Cilk_spawn si _Cilk_sync;
-_Cilk_for.
Notatia tablourilor
unde:
array_base este o expresie tablou permisa in C/C++, incluzand tablouri si
pointeri;
start este primul element de tablou caruia i se aplica sectiunea;
length furnizeaza numarul de elemente de tablou;
stride este un increment intre elemente, optional, valoarea implicita 1.
Se poate aplica si tablourilor multidimensionale, de exemplu:
a[0:5][3][0:8:2]
__declspec(vector)
float v_add(float x1, float x2)
{
return x1+x2;
}
apel:
for (int j = 0; j < N; ++j) {
res[j] = v_add(a[j],b[j]);
}
Nodul este un punct unde se intalnesc trei sau mai multe fire. Cilk are
doua tipuri de noduri: noduri spawn si noduri sync.
Exemplu: patru fire (1, 2, 3, 4), un nod spawn (A) si un nod sync (B).
Un nod spawn are exact un fir de intrare si doua fire de iesire. Un nod sync are doua sau
mai multe fire de intrare si un fir de iesire.
Exemplu:
executa!
Un alt concept este durata (span), numita si lungimea caii critice, ca fiind
calea cea mai costisitoare de la inceputul programului pana la sfarsit. Pentru exemplul
considerat, durata este 68 ms (reprezinta timpul de executie al programului in conditii
ideale, fara overhead de planificare, numar infinit de procesoare).
Notatii:
MULTICALCULATOARE
(1/2)
ORGANIZARE GENERAL
TRANSFERUL DE MESAJE LA MULTICALCULATOARE
ARHITECTURI DE ROUTERE
PROIECTAREA UNUI ROUTER PENTRU TOPOLOGIE 2D
ORGANIZARE GENERAL
Multicalculatoarele = sisteme MIMD (Multiple Instruction Multiple Data)
comunicaia - transfer de mesaje.
=> rezolv limitri ale multiprocesoarelor:
-scalabilitate redus: multiprocesoare numr redus de procesoare: 64 de
procesoare la ENTERPRISE 10000, 256 de procesoare la NUMA-Q =>
multicalculatoare numr mare de procesoare : 2048 de procesoare la Cray T3E, sau
9152 de procesoare la Intel/Sandia Option Red;
-concuren crescut la memoria partajat => multicalculatoarele dispun de
module de memorie proprii fiecrui procesor, comunicatie prin send i receive.
unde:
-router: implementeaza protocolul de comunicatie de nivel scazut, continand
switch-uri, buffere si o unitate de rutare si arbitrare;
-canale externe: interconecteaza routerele si defineste topologia retelei de
interconectare;
-canale interne: conecteaza routerul la nodul de prelucrare local si
implementeaza interfata HW fizica dintre ele.
unde
-LC (link controller): controlor de legatura;
-unitatea de rutare si arbitrare: implementeaza algoritmul de rutare si
protocolul de control al fluxului de pachete, rezolvand conflictele intre cereri simultane
pentru aceeasi legatura de iesire (algoritmi de tip round-robin, prioritati fixe sau
primul sosit primul servit).
TRANSFERUL DE MESAJE LA
MULTICALCULATOARE
Formatul mesajelor
Scheme de rutare a mesajelor
Analiza latentei
Canale virtuale. Blocare.
Rezolvarea coliziunii pachetelor
Algoritmi de rutare
Arhitecturi de routere
Operatiile send si receive
Protocoale pentru transfer de mesaje
Soluii de interpretare a informaiilor din tranzacia prin reea
Formatul mesajelor
Mesajul = unitatea logica de comunicare intre noduri - numar arbitrar de
pachete de lungime fixa (=> lungime variabila).
La randul sau un flit poate fi divizat in phit-uri, un astfel de phit fiind cea mai mica
unitate fizica de informatie la nivelul fizic care este transferata de-a lungul unei legaturi
fizice intr-un ciclu.
Routerul R1 activeaza semnalul RQ indicand plasarea datelor pe liniile Data (un phit).
Routerul R2 raspunde cu ACK la preluarea datelor, care in continuare produce
dezactivarea RQ, iar apoi dezactivarea ACK (reprezinta un ciclu elementar pentru
transferul unui phit). In continuare se poate initia un nou transfer.
2) Protocol sincron:
Controlul fluxului de date pe canalul fizic poate fi si sincron. Se transmite un
semnal de ceas, ambele fronturi ale ceasului valideaza datele. Exemple: Intel iPSC/2 si
iPSC/860.
unde:
-ts timpul de lansare (startup) componenta comuna tuturor tehnicilor de
comunicatie (sec);
-tm intarzierea prin canal, intre doua routere adiacente (sec/flit);
-tr timpul de decizie a routerului (sec);
-tw intarziere de comutare a routerului dupa luarea deciziei de rutare (sec/phit).
Se noteaza:
-w latimea canalului: numarul de biti ai canalului fizic
care pot fi transmisi simultan intre doua routere adiacente
(dimensiunea unui phit);
- rata canalului: rata de varf a canalului in biti/sec care
se pot transfera pe fiecare fir intr-un canal fizic;
-B largimea de banda a canalului: B= in phits/sec, sau
se mai poate defini B=w in biti/sec;
Exemplu: hipercub binar JPL Mark III, cu 2048 noduri in configuratie maxima,
structura sondei de rutare:
Bitii 12-15 si bit 0 indica tehnica de comutatie utilizata (aici, algoritm de rutare de cale
fixa), biti 1-11 identifica adresa destinatie , iar campul LEN specifica lungimea
pachetului in unitati de 192 octeti (implementarea curenta limiteaza la 384 octeti). In
cazul unei rutari adaptive, pachetele pot ajunge la destinatie intr-o alta ordine, iar in
acest caz headerul trebuie sa contina informatii de secventiere pentru reconstruirea
mesajului la destinatie.
-nu se pot intretese sau multiplexa transmisii de pachete diferite, fara un suport
arhitectural aditional;
-daca headerul nu poate inainta (din cauza ocuparii canalelor de iesire) =>
intregul lant de flituri este blocat, ocupand bufferele de flit din routerele de pe cale,
blocand astfel alte posibile comunicatii.
tSF = ts + d M tm
tCS = tVCT = tWH == ts + d td + M tm
unde td = tr + tw. Deoarece d td << M tm (dimensiune mare a mesajului, cateva sute de
flituri), in situatiile fara conflict de comunicatie in cadrul tehnicilor VCT, CS si WH nu
conteaza lungimea drumului, iar SF este senzitiva fata de distanta.
TSF
( d 1)
B
TWH
L
F
d
B
B
Situatia de blocare de tip buffer (buffer deadlock) intr-o retea store-andforward apare din cauza unei asteptari circulare:
Algoritmi de rutare
Tipuri de comunicatie
In retelele de multicalculatoare exista doua mari categorii de comunicatie:
a) comunicatie unu-la-unu (unicast) se transmit mesaje punct-la punct;
surse pachete
destinatii pachete
cai de rutare
Tipuri:
-comunicatie de pereche singulara (izolata): nu exista probleme de deadlock,
congestie, etc. Se pot utiliza algoritmi de calea cea mai scurta;
-mai multe comunicatii unu-la-unu simultan: mai multe perechi de noduri
schimba informatie simultan;
-permutare: fiecare nod este sursa pentru un mesaj si destinatie pentru alt
mesaj in acelasi timp (impune o permutare intre noduri).
b) comunicatii colective:
-comunicatia unu-la-mai multi sau difuziunea (aceeasi informatie one to
many multicast, iar daca informatia trimisa la noduri difera scatter);
-comunicatia unu-la-toti (broadcast);
-comunicatia mai-multi-la-unul (gather);
-comunicatia mai multi la mai multi (many-to-many conference, many-tomany broadcast, scatter-gather).
Exista si unele operatii speciale :
-compactarea datelor sau impachetarea;
-RAW (random-access write) emuland scrierea concurenta CW de la
modelul teoretic PRAM pentru p procesoare;
-RAR (random-access read) emuland citirea concurenta CR de la modelul
PRAM pentru p procesoare.
Solutii de rutare:
Rutarea distribuita: functia de rutare calculata in routere sau noduri pe masura
ce pachetele se deplaseaza prin retea.
-header-ul contine numai adresa de destinatie utilizata de router pentru
selectarea canalelor de iesire;
-utilizata in topologii regulate si simetrice (toate routerele utilizeaza acelasi
algoritm de rutare).
Tshearsort
p
p
log 2 r
r
r
r
unde r este numarul de randuri, p este numarul total de noduri din retea (reteaua
poate sa fie si dreptunghiulara), iar pentru o retea mesh de dimensiune
p p
timpul necesar este:
Tshearsort
p log 2 p 1
Exemplu.
r s d
vs
pentru i = 0, n-1 executa
daca ri = 1 atunci
vv
2i
r = r3r2r1r0 = s
initial v = s = 0110
Parametrii de eficienta:
-traficul de canal (la un moment dat sau pe un interval de timp) = numarul de
canale utilizate pentru transferul mesajului implicat;
-latenta de comunicatie = timpul cel mai lung de livrare a unui pachet.
=> solutie specifica mecanismului store and forward => trafic = 7, latenta =4.
Algoritmul:
Pas 1) de la nivelul 0 se obtin n fii (4 fii) prin inversarea cate unui bit (fiu 0 bit 0,
fiu bit 1, ...).
Pas 2) Fiecare fiu k are k succesori, obtinuti prin inversarea cate unui bit 0, 1,..., k1. Astfel:
fiu 0 => 0 succesori;
fiu 1 => 1 succesor, inversarea bit 0 => fiu 0;
fiu 2 => 2 succesori, inversarea bit 0 => fiu 0;
inversarea bit 1 => fiu 1;
.......
.....................
pana cand pe ultimul nivel un singur nod nu are niciun succesor.
Rutarea plan adaptiva restrictioneaza pachetul sa fie rutat in planul A0, apoi in A1, etc
(exemple pentru 3D si 4D).
Un plan Ai este format din doua dimensiuni di si di+1, in total (n-1) planuri. Planurile Ai
si Ai+1 partajeaza dimensiunea di+1. Reguli:
-daca in timpul rutarii in planul Ai offsetul din dimensiunea di se reduce la 0,
atunci rutarea continua imediat in planul Ai+1;
-daca offsetul din dimensiunea di+1 se reduce la 0 in timpul rutarii in planul Ai
rutarea continua exclusiv in dimensiunea di pana se obtine si pentru di offset 0, iar
planul Ai+1 poate fi sarit.
Pentru a evita blocarea setul de canale virtuale din Ai este impartit in doua
clase: (a) retea de crestere formata din canalele di,2+ si di+1,0 (b) retea de descrestere
formata din canalele di,2- si di+1,1. Pachete traversand dimensiunea di in directia pozitiva
sunt rutate in reteaua de crestere, iar cele in directia negativa sunt rutate in reteaua de
descrestere. Deoarece nu exista cuplari intre retele de crestere si descrestere ale planului
Ai, iar planurile sunt traversate in ordine rezulta ca nu exista dependente ciclice intre
canale, deci rutarea plan-adaptiva este "deadlock-free".
In cadrul algoritmului se face rutarea mai intai spre vest (daca este necesar), iar apoi
adaptiv sud, est si nord.
unde Select() este functia care returneaza un canal liber (daca exista) din setul de canale
furnizate ca argument.
Exemplu: trei cai de rutare pentru algoritmul west-first. Canalele marcate ca
nedisponibile sunt fie defecte, fie utilizate de alte pachete. O cale este minimala, iar
celelalte doua sunt neminimale, rezultate din rutare in jurul canalelor nedisponibile.
Ciclurile sunt evitate, rutarea west-first este "deadlock-free". Pentru rutare minimala,
algoritmul este complet adaptiv, daca destinatia este in partea dreapta (est) fata de sursa,
altfel este determinista. Daca se permite rutarea nonminimala, algoritmul este adaptiv in
ambele cazuri. Totusi, nu este complet adaptiv.
Rutare P-cub
Pe baza algoritmului "turn-west" se pot dezvolta si alti algoritmi de rutare
partial adaptivi pentru retele mesh n-dimensionale, n-cuburi de baza k si hipercuburi.
Pentru hipercuburi a fost dezvoltat algoritmul de rutare P-cub.
Se considera s = sn-1 sn-2 ... s0 si d = dn-1 dn-2 ... d0 nodurile sursa si destinatie
intr-un hipercub binar n-dimensional. Fie E multimea indicilor de dimensiune prin care
difera s si d astfel, iE daca si di. E este impartit in doua multimi disjuncte E0 si E1,
astfel iE0 daca si = 0 si di = 1 , respectiv jE1 daca sj = 1 si dj = 0. Conceptul
fundamental: rutarea P-cub este impartita in doua faze: in prima faza un pachet este
rutat prin dimensiunile din E0 in orice ordine, iar in faza a doua pachetul este rutat prin
dimensiunile din E1 in orice ordine. Bucla for calculeaza seturile E0 si E1 la fiecare nod
intermediar sau la nodul sursa. Functia digit() calculeaza valoarea bitului intr-o pozitie
data.
Arhitecturi de routere
Arhitectura este determinata de tehnica de comutatie utilizata, majoritatea
multicalculatoarelor utilizand variante "virtual cut-through switching", "wormhole
switching", "buffered wormhole switching".
Chien a dezvoltat un model abstract de router pentru rutare wormhole in ncuburi de baza k.
unde
LC (link controller)
VC (virtual channel controller): controleaza multiplexarea canalelor virtuale in
canale fizice.
Observatii.
-(a) si (b) maximizeaza largimea canalului (toate conexiunile utilizate pentru a
transmite date);
-(b) necesita retea tor (sau ceva similar) pentru a asigura comunicatiile intre
toate nodurile;
-(b) dubleaza distanta medie intre noduri (crescand componenta de distanta din
intarzierea mesajului);
-(c) transfer rapid, dar utilizare completa daca se transmit date in ambele
directii.
Exemplu: modul de operare a unui canal fizic la Network Design Frame care
suporta doua canale virtuale. Utilizeaza canale fizice half-duplex.
Routere wormhole
de la procesor
local
catre procesor
local
AD = address decoder;
IFC = internal flow control;
PAR = planar-adaptive router;
VC = virtual channel controller;
XFC = external flow control.
-fiecare crossbar furnizeaza comutarea pentru reteaua de crestere sau reteaua de
descrestere, mesajul circuland intr-una sau cealalta.
Tehnica se poate generaliza permitand un grad mai inalt de adaptabilitate sau
marind numarul de dimensiuni in care rutarea adaptiva este permisa (solutia precedenta
permite rutarea adptiva in doua dimensiuni, dar de exemplu se poate realiza
adaptabilitate 3D intr-o retea 5D). Astfel de routere se numesc routere f-flat (f =
numarul de dimensiuni in care rutarea adaptiva este permisa) => complexitatea
routerelor creste cu marirea lui f.
-partea catre router din interfata utilizeaza portiuni din arhitectura routerului configurate
ca port triplu: un port pentru receptia si transmisia mesajelor, iar celelalte doua pentru
conectarea la alte routere => flexibilitate permitand realizarea de constructii cu
topologii mai complicate.
-un canal virtual de iesire: 384 biti;
-un canal virtual de intrare: 256 biti;
-RMA ("Remote Memory Access" engine) are acces la o tabela de mapare rezidenta in
memorie care mapeaza adresele procesorului in adrese ale nodurilor la distanta: sunt
create mesaje de cerere pentru acces la distanta, iar pentru servirea cererilor sosite de la
distanta sunt create mesaje de raspuns. RMA furnizeaza suport pentru operatii atomice
accesibile la distanta, exemplu "read&clear" (implementarea operatiilor de
sincronizare);
-interfata DMA: suporta opt canale si cozile corespunzatoare de comanda (cate una
pentru fiecare canal virtual de intrare si iesire). Accesul la controlul DMA este mapat in
memorie, iar accesul utilizatorului este permis pe baza nivelurilor de mesagerie, cu
overhead scazut. Rata prin DMA se apropie de 400 MB/s.
Formatul pachetelor:
Rutarea:
-utilizeaza rutare sursa ("source routing");
-PE-urile detin fiecare: adresa fizica, adresa logica si adresa virtuala;
-adresele logice sunt bazate pe topologia logica instalata, iar PE-urile pot fi adresate pe
baza adreselor logice, independent de localizarea fizica;
-nodurile defecte pot fi inlocuite cu alte noduri prin asignarea acelorasi adrese logice;
-adresele virtuale sunt interpretate in acord cu partitia alocata: astfel 16 noduri pot
forma o topologie 8x2x1 sau 4x2x2 (2 biti din adresa virtuala sunt alocati offsetului X,
un bit pe Y si un bit pe Z);
-la transmiterea unui mesaj o adresa virtuala de PE este translatata in adresa logica (prin
SO sau hardware), iar adresa logica reprezinta un index intr-o tabela furnizand
offseturile pe fiecare dimensiune pentru ca mesajul sa ajunga la PE destinatie. La
inlocuirea unui nod defect este necesara actualizarea in tabela.
Calea de date pentru prelucrarea mesajelor:
-I/F = interface;
-pachetul = 1-10 flituri, 1 flit = 5 phituri;
-canal fizic full duplex 14 biti de date => flit = 70 biti (flitul transporta un
cuvant de 64 biti impreuna cu informatii suplimentare de control);
-pe un canal fizic in fiecare directie sunt multiplexate 5 canale virtuale: 4
canale functioneaza ca in T3D, iar al cincilea este utilizat pentru rutare
complet adaptiva;
-un canal adaptiv poate buffera max 22 flituri, iar un canal obisnuit max 12
flituri;
-arbitrarea canalelor virtuale active pentru accesul la iesirile crossbar-ului
este tip "round-robin";
-arbitrarea canalelor virtuale de iesire pentru accesul la canalul fizic este de
asemenea tip "round-robin", desi canalul adaptiv are prioritatea cea mai
mica;
Routere VCT
Sunt asemanatoare cu routerele wormhole avand caracteristica distinctiva ca
detin spatiu suficient pentru memorarea pachetelor complete de mesaje.
Routerul Chaos
-opereaza in mesh 2D;
-pentru reducerea numarului de pini: fiecare canal 16 biti, half-duplex bidirectional;
-compus: cozi multiple si core-ul care conecteaza cadrele ("frames") de intrare cu cele
de iesire printr-un crossbar switch;
-fiecare cadru poate memora un pachet de 20 flit-uri (un flit = 16 biti, corespunzand
canalului fizic);
-la incarcare usoara a retelei majoritatea traficului are loc prin core (crossbar switch),
optimizat din p.d.v. al performantelor;
-la trafic aglomerat mesajele pot fi mutate din cadrele de intrare in coada multipla, iar
apoi din coada multipla la cadrele de iesire: cand un mesaj asteapta in cadrul de intrare
eliberarea cadrului de iesire, acesta va fi transferat in coada multipla eliberand canalul
pentru a putea fi utilizat de alte mesaje (evitarea blocarii).
Comutarea de circuite
Intel iPSC Direct Connect Module (DCM)
-avantaj: la setarea unei cai datele pot fi transmise la viteza fizica maxima a canalelor,
fara partajare cu alte transmisii, sistemul operand complet sincron.
-in multicalculatoarele iPSC: retea hipercub;
-routerul implementat in modulul numit Direct Connect Module (DCM);
-DCM implementeaza rutarea cu ordonare dupa dimensiune (max 8 dimensiuni);
-porturile routerului:
-un port pentru conectare la dispozitiv extern;
-celelalte porturi suporta topologie cu maxim 128 noduri;
-legaturile fizice sunt seriale de 2.8 MB/s, prin care se multiplexeaza date, informatii de
control si informatii de stare;
-liniile Strobe furnizeaza ceasul de la sursa;
-mesaj gata de transmisie: se transfera la DCM un cuvant de 32 biti, in care octet
inferior contine tagul de rutare (XOR intre adresele sursa si destinatie);
-tagul de rutare: examinat de fiecare element de rutare in ordine ascendenta (bit = 1
mesajul traverseaza dimensiunea respectiva);
-serializatorul de intrare genereaza o cerere catre canalul din dimensiunea corespunzand
bitului l.s.b. pe 1 din tagul de rutare; cereri multiple pentru acelasi canal de iesire sunt
arbitrate in maniera "round-robin";
-informatiile de stare:
-RDY: cand DCM destinatie primeste un header de rutare transmite inapoi
semnalul de stare RDY initiand transferul de date;
-EOM (end of message): se adauga la sfarsitul mesajului => eliberarea
legaturilor.
=> suport pentru comunicaia ntre oricare procesoare (nu numai vecine) funcii de rutare n hardware => routere.
IBM SP-2
-main paralel scalabil cu staii de lucru RS6000.
contine 8 biti de date, un bit de tag si un bit token (permite controlul numarului de
flituri transferate);
-schema bloc a routerului (switch-ului) SP2:
Intel Paragon
nod - multiprocesor simetric (SMP)
Soluii de interpretare
a informaiilor din tranzacia prin reea
1) Nu exist interpretare a tranzaciei mesajului: mesajul = secven de bii
care se transfer orb n memorie prin DMA (Direct Memory Access) fizic sub
controlul SO.
Sisteme: nCUBE 10, nCUBE/2, Intel iPSC, iPSC/2, iPSC/860, Delta, Ametek,
IBM SP-1) i majoritatea intefeelor de reea local LAN (Local Area Network).
=>
hardware simplu;
abstractizarea comunicaiei utilizator foarte general;
costuri de prelucrare mai mari.
Flit 0
Flit 1
Flit 2
Flit 3
16 biti
16 biti
32 biti
32 biti
32 biti
Adresa
destinatie
Adresa
sursa
Adresa memorie la
destinatie
Data
Data
8 biti
Adresa y
Adresa x
Legaturile dintre noduri sunt pe 8 biti => 1 phit = 8 biti, iar 1 flit = 4 phit-uri.
Deciziile de rutare sunt luate local in router pe baza adresei de destinatie din
headerul de pachet si a disponibilitatii canalelor de iesire. In cazul in care canalul de
iesire este ocupat pachetele sunt depuse in coada de asteptare corespunzatoare.
Structura generala a unui element de prelucrare PE cuprinde patru coponente
principale:
Semnale:
-PUSH_DATA_IN (date de intrare gata);
-FULL_OR_ACK_IN (buffer de intrare plin sau acknowledge pentru citire date de catre
router);
-POP_DATA_OUT (date de iesire gata);
-FULL_OR_ACK_OUT (buffer de iesire plin sau acknowledge pentru transmisia de
date catre routerul urmator).
=> fiecare canal fizic bidirectional de 8 biti are 20 de linii: 8 linii de
date de intrare, PUSH_DATA_IN, FULL_OR_ACK_IN, 8 linii de date de iesire,
POP_DATA_OUT, FULL_OR_ACK_OUT.
=> routerul are in total 5x20+3 pini suplimentari:
-CLOCK (ceas sistem);
-RESETIN (reset sistem);
-INIT (configurare router).
Arhitectura routerului
Portul de intrare
Un bloc contine:
-demultiplexor DEMUX pentru preluarea succesiva a celor patru octeti reprezentand un
flit;
-patru registre IN_REG0-3 de 8 biti fiecare pentru memorarea unui flit;
-doua registre DEST_ADR_Y si DEST_ADR_X de 8 biti fiecare pentru memorarea
adresei de destinatie a pachetului, transmisa in cadrul primului flit din pachet;
-doua comparatoare de adresa care compara fiecare adresa de 8 biti pe x/y de destinatie
cu adresa nodului curent de 8 biti pe x/y (adresa destinatie adresa curenta). Furnizeaza
doua iesiri:
-ZERO => adresele sunt egale;
-NEG => adresa destinatie < adresa curenta => rutare catre x-/y-;
-ambele iesiri inactive => adresa destinatie > adresa curenta => rutare catre
x+/y+;
NEG_X
ZERO_Y
NEG_Y
OUT_PORT_ADR
selectie
001
x-
000
x+
011
y-
010
y+
100
dma
Crossbar switch
Portul de iesire
Citirea unui flit din portul de intrare si inscrierea acestuia in portul de iesire
MULTICALCULATOARE
(2/2)
Cray T3E
-continua linia de supercalculatoare nceputa la mijlocul anilor 60;
-max. 2048 de procesoare;
-DEC Alpha 21164:
-RISC superscalar (4 instruciuni / ciclu de ceas);
-frecvene de 300, 450, 600 MHz;
-64 de bii;
-adresele virtuale pe 43 de bii;
-adresele fizice pe 40 de bii -> 1 TB memorie fizica;
-doua niveluri de memorie cache:
-nivelul 1: 8 kB pentru date i 8 kB pentru cod;
-nivelul 2: 96 kB de memorie cache date i cod;
-memoria locala RAM maxim 2 GB / procesor => 4 TB de memorie;
-procesorul + circuit special shell (memoria, procesorul de comunicaie i
512 registre E speciale);
-reg E: se ncarca cu adrese de memorie la distana -> citire/scriere cuvinte sau
blocuri de memorie la distana - nu cu instruciuni load i store);
-coerena memoriei: datele citite din memoria la distana nu sunt pastrate n
cache.
Conectarea nodurilor:
-tor 3D duplex (exemplu: sistem cu 512 noduri -> cub de 8x8x8 => fiecare nod
avnd sase legaturi cu alte noduri vecine, rata de transfer 480 MB/s );
-subsistem de I/E de banda foarte larga, bazat pe comutarea de pachete, cu
unul sau mai multe inele Giga Ring: pentru comunicaia ntre noduri i cu
echipamentele periferice.
Tipuri de noduri:
-noduri utilizator (nu executa ntregul S.O., ci numai un nucleu simplificat);
-noduri dedicate S.O. (Unix);
-noduri de rezerva: la fiecare 128 de noduri -> un nod de rezerva.
Placa Kestrel:
-dou noduri, fiecare cu dou procesoare Pentium;
-memorie partajat de 64 MB;
-magistral local de 64 de bii;
-interfa de reea (NIC) -> modulele NIC legate ntre ele, dar numai unul este
conectat la reea.
Placa Eagle:
-dou procesoare Pentium i I/E.
Sistemele IBM SP
Arhitectura IBM Power
SP1
=>primul sistem SP (Scalable POWER parallel). Inovatii:
-suprafata ocupata redusa: masinile POWER1 puse intr-un singur dulap (rack);
-mentenanta redusa: intregul sistem gestionat de administrator de la o singura
consola;
-comunicatie performanta interprocesor printr-o retea interna de comutatoare;
-software Parallel Environment pentru dezvoltarea si rularea de aplicatii
paralele (cu memorie distribuita);
-SP1 POWER1: 62.5 MHz, 125 MFLOPS.
SP2
=> 1993 cu procesoare POWER2. Caracteristici:
- cate doua unitati de v.m. si v.f.;
-marirea cache-ului de date;
-cresterea ratei de transfer memorie cache;
-66.5 MHz, 254 MFLOPS;
-set imbunatatit de instructiuni.
Imbunatatirile SP2 (pentru o mai buna scalabilitate):
-software performant de sistem si de gestiune a sistemului;
-imbunatatirea Parallel Environment;
-rata crescuta in reteaua de comutatoare.
P2SC
=> 1996, POWER2 SuperChip (~POWER2), dar cu 160 MHz si dublul performantelor
POWER2.
PowerPC
=> 1993, parteneriat IBM, Apple, Motorola. Include majoritatea instructiunilor
POWER, in plus instructiuni pentru SMP. Varianta finala 604e. Avantaje:
-CPU-uri multiple;
-frecventa mai mare de ceas;
-cache L2;
-memorie marita, discuri, I/E.
PowerPC 604e: SMP cu 4 procesoare, 332 MHz => realizarea sistemului ASC BluePacific (cel mai puternic sistem la vremea respectiva).
POWER3
=> 1999, fuziune intre POWER2 uniprocesor si PowerPC multiprocesor. Avantaje:
-arhitectura pe 64 biti;
-frecventa mai mare de ceas;
-memorie, cache, disc, I/E marite;
-numar mai mare de procesoare.
=> ASC White (bazat pe POWER3 Nighthawk-2).
POWER4
=> 2001, blocul de baza: cip cu doua procesoare SMP, 4 cipuri = 1 modul cu 8
procesoare. Se pot combina module pentru masini SMP cu 16, 24, 32 procesoare.
Imbunatatiri:
-cresterea numarului de procesoare: maxim 32 de procesoare / nod;
-frecventa de ceas peste 1 GHz;
-cache L2, disc, I/E crescute;
-cache L3 partajata intre module.
POWER5
=> introdus in 2004; asemanator POWER4, dar cateva imbunatatiri:
-maxim 64 procesoare / nod;
-ceas 2.5 GHz;
-cache L3 mai mare, mai rapid si pe cip;
-largime de banda cip-memorie 16 GB/s (4x POWER4);
-multithreading (2 thread-uri simultane per procesor);
-gestiune de putere dinamica (cipurile neutilizate consuma mai putin si degaja
mai putina caldura).
Exemplu: ASC Purple.
POWER6
=> introdus in 2007
POWER7
-februarie 2010;
-proces 45 nm;
-4.04 GHz;
-max 2 cipuri / modul multicip;
-4, 6 sau 8 core-uri / cip;
-4 thread-uri / core;
-cache 32 MB per pastila, nivel 3, partajat de toate corurile de tip
eDRAM (embedded DRAM, DRAM bazat pe capacitate, integrat pe
pastila, nu extern; permite magistrala mai larga, viteza de operare mai mare,
densitate mai mare);
-max 517.1 GFLOPS per modul;
-max 32.3 GFLOPS per core.
Hardware SP
Frame-urile
Un sistem SP compus din unul sau mai multe frame-uri, racire cu aer:
-1-16 noduri / frame;
Tipuri de noduri:
-thin: ocupa un slot in frame;
-wide: ocupa 2 sloturi adiacente orizontale;
-high: ocupa 2x2 sloturi;
-mixed.
Nodurile SP
Un nod = masina independenta, plasata intr-o cutie, pusa in frame. Fiecare nod are
hardware propriu:
-I/E, inclusiv discuri;
-adaptoare de retea;
-memorii (placi si memorii cache);
-alimentare si echipament de racire.
Exista o copie a S.O. AIX pentru fiecare nod, chiar si pentru nodurile SMP.
Noduri POWER3
-nod = SMP cu 2-16 procesoare;
-64 biti;
-4 tipuri de noduri POWER3: Winterhawk-1, Winterhawk-2, Nighthawk-1, Nighthawk2;
-frecventa 200-450 MHz;
-cache L1: 64 kB date, 32 kB cod;
-cache L2: 4 sau 8 MB, cu magistrala proprie;
-maxim 64 GB memorie partajata;
-magistrale separate de date si adrese;
-structura superscalara: 8 unitati de executie:
-2 unitati v.m. (FPU);
-3 unitati v.f. (FXU);
-2 unitati load/store (LS);
-unitate de ramificatie;
-unitate registru de conditie.
Noduri POWER4
-nod = SMP cu 8-32 procesoare;
-64 biti;
-frecventa ceas 1-1.9 GHz;
-blocul de baza: modul = 4 cipuri cu cate 2 procesoare (8 procesoare) => 4 module
formeaza un SMP cu 32 procesoare;
- cache L1: 64 kB date, 32 kB instructiuni/procesor;
-L2: 1.5 MB/cip;
-L3: 32 MB/cip => L2 si L3 partajate de toate cipurile din modul;
-rata cip-cip: 35 GB/s;
-memorie partajata de maxim 1024 GB/nod;
-interfata rapida I/E (magistrala rapida Gxx) de 1.7 TB/s;
-superscalar: 2 FPU, 2 FXU, 2 LS, Branch Resolution Unit, Condition Register
Unit.
Noduri POWER5
-dual-core;
-maxim 64 procesoare / nod;
-arhitectura 64 biti;
-superscalar, executie out-of-order, cu unitati functionale multiple (inclusiv doua
unitati v.f. si doua unitati v.m.);
-ceas 2.5 GHz;
-cache:
-controller cache si director L3 pe cip;
-L1 date 32 KB/procesor, bloc (linie) 128 octeti, set asociativ dim. 4;
-L1 cod 64 KB/procesor;
-L2 1.9 MB/cip (partajata intre procesoarele duale);
-L3 36 MB/cip (partajata intre procesoarele duale);
-memorie 1-256 GB;
-largime de banda cip-memorie 16 GB/s (4x POWER4);
-multithreading (2 thread-uri simultane per procesor) => aceeasi idee la Intel IA32
hyperthreading;
-gestiune de putere dinamica (cipurile neutilizate consuma mai putin si degaja mai
putina caldura).
-module:
-DCM (Dual-chip Module): un cip dual core si cache L3;
-QCM (Quad-chip Module): 2 cipuri dual core si 2 cache-uri L3;
-MCM (Multi-chip Module): 4 cipuri dual core si 4 cipuri cache L3;
Reteaua de comutatoare
-este bidirectionala: oricare conexiune intermediara contine doua canale full-duplex;
-interconectare multinivel: pentru sistemele mari (>80 noduri) se adauga switch-uri
intermediare;
-componentele principale:
-placa de comutatoare (o placa / frame) contine 8 cipuri de switch-uri logice,
cu 16 cipuri fizice (pentru toleranta la defecte) => formeaza un crossbar 4x4;
Performantele comunicatiei:
CWS
-utilizat de administratorul sistemului pentru monitorizare, intretinere si control;
-nu face parte din sistemul SP;
-este un RISC System / 6000;
Software
-S.O. AIX (Unix System V);
-fiecare nod SP -> copia sa AIX (o singura copie partajata de toate procesoarele SMP
ale nodului);
-Parallel Environment (IBM) => mediul de dezvoltare pentru sistemele IBM SP
(C/C++ si Fortran);
-biblioteci matematice:
-ESSL (Engineering Scientific Subroutine Library);
-PESSL (Parallel ESSL, subset cu partea paralela a bibliotecii);
-MASS (Math Acceleration Subsystem, continand versiunile de mare
performanta ale celor mai multe functii intrinseci, cu versiune scalara si versiune
vectoriala).
Blue Gene/L
Blue Gene = supercalculator masiv paralel bazat pe tehnologia IBM sistem-peun-cip (SoC: system-ona-chip).
-configuratie maxima : 65536 noduri biprocesor, performanta de 360 TFLOPS.
-tehnologie de integrare de nivel foarte inalt;
-experienta altor sisteme de scop special (exemplu: QCDSP quantum
chromodynamics on digital signal processors): foarte bun raport performanta/cost
pentru un domeniu restrans de probleme.
Componentele sistemului
-maxim 65536 de noduri, fiecare nod = ASIC cu doua procesoare si 9 DDRSDRAM-uri (maxim 18);
-nodurile interconectate prin cinci retele (c. m. importanta: retea tor
tridimensionala 64x32x32);
-interconectarea este virtual simetrica (un nod poate comunica cu nodurile
vecine de pe aceeasi placa sau intr-un alt dulap cu aceeasi rata si aproape aceeasi
latenta).
-impachetarea sistemului: 512 noduri de prelucrare cu o rata de varf de 5.6
Gflops pe o placa de 20x25 in (midplane).
Cele doua procesoare dintr-un nod pot opera intr-unul din doua moduri:
-virtual node mode: fiecare procesor isi gestioneaza comunicatiile proprii;
-communication coprocessor mode: un procesor este dedicat pentru
comunicatii si celalalt pentru calcule.
Reteaua colectiva:
-pentru broadcast (mai performant decat daca s-ar utiliza reteaua tor);
-contine patru canale independente -> functie logica globala peste toate
nodurile;
=> semnalele individuale de la noduri sunt preluate in hardware si
propagate in cadrul unei structuri de tip arbore catre radacina, iar rezultatul este
propagat inapoi la noduri:
-operatie SI globala = bariera globala;
-operatie SAU globala = intrerupere globala cand intreaga masina sau
numai un subset trebuie oprit (exemplu: pentru diagnostic);
-pentru 64 k noduri intarzierea 1.5 s.
JTAG (Joint Test Action Group) este standardul IEEE 1149.1 (standard numit
si Standard Test Access Port and Boundary-Scan Architecture).
Interfata JTAG : 4/5 pini adaugati unui cip => cipuri multiple de pe o placa avand
inlantuite liniile lor JTAG pot fi testate pe baza unui protocol serial prin conectarea
numai la un singur port JTAG a dispozitivului de test. Pinii portului sunt:
-TDI (Test Data In)
-TDO (Test Data Out)
-TCK (Test Clock)
-TMS (Test Mode Select)
-TRST (Test Reset) optional.
-Double hummer FPU = doua unitati FPU => performanta de varf de patru
operatii v.m./ciclu;
-PPC440 = implementare performanta superscalara a arhitecturii de 32 biti
Book-E Enhanced PowerPC Architecture, la 700 MHz (1.4 G operatii/sec) si 2.8
Gflops. Caracteristici:
-microarhitectura in banda de asamblare 7 segmente;
-fetch instructiuni dual;
-planificare out-of-order;
-predictie dinamica a ramificatiilor pe baza unei tabele BHT (branch
history table);
-trei benzi de asamblare independente: banda load/store, banda simpla
intregi si banda combinata intregi, sistem si ramificatie;
-fisier 32x32 de registre de scop general (GPR), cu 6 porturi de citire
si 3 porturi de scriere;
-unitati de inmultire si inmultire-adunare cu rata de un singur ciclu;
-cache-uri L1 independente de 32 KB de date si cod, avand linie
(bloc) de 32 octeti si asociativitate de dimensiune 64, suportand functionare in mod
write-back si write-through;
-trei interfete independente de 128 de biti pentru citire instructiuni,
citire date si scriere date (processor local bus PLB).
PPC440
Sistemul de memorie
-ierarhia de cache pe-cip, memorie principala externa cipului si suport pe-cip
pentru comunicatia intre cele doua procesoare. Pentru BG/L de 64 k noduri fiecare nod
are 512 MB de memorie fizica (partajata intre cele doua procesoare), in total 32 TB.
Software
-reteaua Gigabit Ethernet (control): nod de serviciu - bloc de calcul (control direct al
hardware-ului);
-nodurile de calcul: impartite in 1024 seturi logice de prelucrare ( psets - processing
sets);
-pset = un nod de I/E (Linux) si 64 noduri calcul (ruland un nucleu CNK custom
compute node kernel);
-asignarea nodurilor de calcul la un nod de I/E este flexibila si chiar raportul noduri I/E
/ noduri calcul poate varia intre 1:8 si 1:128.
Din p.d.v. software masina se poate imparti in : volum de calcul, arie functionala si arie
de control, fiecare cu hardware dedicat (asemanator cu ASCI Red).
Volumul de calcul:
-implementat prin nuclee si biblioteci runtime pentru nodurile de calcul
(executia aplicatiilor utilizator);
-nodurile de calcul vazute ca atasate la nodul de I/E (coordonator pset).
Aria functionala:
-compilarea aplicatiilor, lansarea si controlul joburilor, depanarea aplicatiilor si
operatiile de I/E la rularea aplicatiilor;
-implementarea ariei functionale: software de sistem ruland pe nodurile de I/E,
nodurile front-end si nodul de serviciu.
Aria de control:
-implementata exclusiv in nodul de serviciu;
-executa operatii de tipul: lansarea masinii (booting), monitorizarea datelor
de mediu (temperatura, tensiune), raportarea erorilor critice.
SISTEME CU TRANSPUTERE
-procesoare de tip transputer de la firma INMOS;
Protocolul legturii:
Reele de interconectare
=> comutatoare gril;
Exemplu: circuitul IMS C004 (crossbar switch 32x32).
-programare: legtur serial separat (legtur de configurare).
Tipuri de mesaje:
[0] [input] [output] : conecteaz input la output;
[3] : ncheie o secven de configurare, iar circuitul este gata s accepte date pe
intrrile sale;
[4] : reseteaz circuitul, care astfel poate fi reprogramat;
[5] [output] : ieirea output este deconectat i inut la nivel logic cobort;
[6] [link1] [link2] : deconectez ieirea lui link1 i ieirea lui link2.
Transputerul T9000
Caracteristici:
-a fost ultimul procesor din familie;
-superscalar pe 32 biti si unitate de v.m. pe 64 biti;
-procesor dedicat de comunicatie cu 4 legaturi (link-uri);
-interfata de memorie externa;
Interconectarea :
T9000:
-conexiunile lucreaza la 100 Mb/s;
-permite rutarea "wormhole" (cand header-ul pachetului a ajuns la un link,
ruterul C104 determina link-ul de destinatie inainte sa receptionezez corpul principal al
mesajului);
MULTICALCULATOARE COW
Multicalculatoarele COW (Cluster Of Workstation) - clustere de staii de lucru.
Cluster = multe PC-uri / staii de lucru (sute) conectate ntr-o reea comercial.
Multicalculatoarele COW:
Sisteme COW centralizate:
-PC-urile montate ntr-un dulap, ntr-o singur camer;
-mainile sunt omogene;
-echipamente periferice: discuri i interfee de reea;
-calculatoare fr proprietar.
Reea Myrinet
Clustere Beowulf
-clusterele Beowulf = sisteme din categoria high performance parallel
computing;
-dezvoltat de Thomas Sterling si Donald Becker la NASA.
Cluster Beowulf = grup de PC-uri identice ruland un sistem de operare free
open source tip Unix (Linux, Solaris). Caracteristici:
-calculatoarele echipate cu placa de retea Ethernet cu protocol TCP/IP, legate
intr-o retea locala separata;
-dispun de programe si biblioteci (cele mai utilizate MPI, PVM) -> permit
partajarea lucrului;
-pe calculatoare ruleaza copii ale aceluiasi program (model SPMD);
-comunicatia: prin transfer de mesaje.
Beowulf: arhitectura multicalculator -> un nod server si unul sau mai multe noduri
client conectate prin retea Ethernet. Nu contine niciun hardware special!
Nodul server:
-controleaza intregul cluster;
-furnizeaza fisiere nodurilor client;
-este consola sistem si conexiune catre exterior.
Nodurile client:
-configurate si controlate de nodul server;
-executa numai actiunile comandate de server;
-in cazul unei configuratii fara disc, nodurile client nu cunosc adresele IP decat
dupa ce le-au fost furnizate de server.
In cazul sistemelor mari: mai multe noduri server si eventual noduri cu functii dedicate
(monitorizare sistem, consola, etc):
PROGRAMAREA MULTICALCULATOARELOR
OCCAM
Aplicatii paralele pe hipercub
MPI
PVM
32LB5700
LIMBAJUL OCCAM
-realizat de INMOS pentru programarea transputerelor;
-bazat pe limbajul CSP (Communicating Sequential Processes);
-algoritm paralel -> colectie de procese asincrone, care comunica prin canale;
-canalul = entitate abstracta de comunicatie, punct la punct, directionata,
sincrona si fara buffer intre doua procese paralele.
Procese fundamentale:
-asignare:
variabila := expresie
-citire dintr-un canal de comunicatie:
canal ? variabila
-scriere intr-un canal de comunicatie:
canal ! expresie
-PAR creaza un proces complex care lanseaza executia paralela a mai multor
procese:
PAR
proces_1
proces_2
proces_3
........
proces_n
-IF creaza un proces complex care lanseaza in executie unul din procesele
componente, corespunzand primei conditii adevarate (testarea se face in ordinea scrierii
conditiilor):
IF
conditie_1
proces_1
conditie_2
proces_2
conditie_3
proces_3
........
conditie_n
proces_n
ALT
canal_1 ? x
proces_1
canal_2 ? x
proces_2
canal_3 ? x
proces_3
...........
canal_n ? x
proces_n
-nu se pot defini variabile partajate intre doua procese (chiar daca procesele se
executa pe acelasi transputer).
4
0 1 x 2 dx 4(arctg (1) arctg (0))
=> prin integrare numerica (inaltimea fiecarui dreptunghi este valoarea functiei in
mijlocul subintervalului respectiv).
Algoritmul secvential:
#define n . . . . .
sum = 0.0;
w = 1/n;
for (i=0; i<n; i++) {
x = (i+0.5)*w;
sum += 4/(1+x*x);
}
sum *=w;
VAL
VAL
[p]
INT
SEQ
INT p IS 8:
INT n IS 1024:
CHAN OF REAL chan:
s:
--vector de canale
s:=n/p
PAR i=0 FOR p-1
--vector de procese paralele
REAL x, partial_sum, w:
SEQ
partial_sum:=0.0
w:=1/n
x:=((i*s)+0.5)*w
SEQ j=0 FOR s-1
SEQ
partial_sum:=partial_sum+(4/(1+x*x))
x:=x+w
partial_sum=partial_sum*w
Reducere de vector
Algoritmul pecedent se poate utiliza pentru o reducere de vector utilizand orice
operator comutativ asociativ (ex: adunare, maxim, inmultire).
Reducerea a patru vectori de lungime N=4 distribuiti la patru taskuri => algoritmul in
log24=2 pasi. La fiecare pas fiecare task:
-executa schimbul a N date cu un vecin;
-realizeaza N operatii de combinare.
unde
-top = timpul cerut de operatia de reducere;
-tw = timpul de comunicatie;
-ts = timpul de lansare (start-up).
Algoritmul este eficient pentru valori mici ale lui N (cand predomina timpul de lansare).
Timpul consumat:
P 1
P
Solutia trimite de doua ori mai multe mesaje, dar cu mai putine date si face mai putine
calcule => mai eficient pentru anumite valori ale lui N si P, si pe anumite masini.
Broadcast
Similar: se poate defini un algoritm eficient de broadcast. N valori localizate in nodul
radacina sunt transmise la toate cele P-1 noduri, utilizand un arbore binar de
comunicatie.
Timpul necesar:
Tbroadcast = log2P (ts + twN)
Algoritmul: eficient pentru valori mici ale lui N si P.
Pentru valori mari ale lui N si P multe procesoare sunt inactive cea mai mare parte a
timpului si Tbroadcast este dominat de log2P twN.
=> mai eficient sa se sparga mesajul in componente mai mici si sa se routeze
componentele separat prin reteaua hipercub. Timpul necesar :
Transpunerea de matrici.
Matricea A de transpus si transpusa A' sunt distribuite printre procese => executia
algoritmului implica comunicatii.
Se considera o descomunere pe coloane a celor doua matrici repartizate proceselor
=> comunicatii all-to-all.
Algoritmul comun: P-1 pasi. La fiecare pas fiecare task: interschimba N2/P2 date cu un
alt task.
Timpul necesar:
Ttranspunere simpla
N2
t s ( P 1) t w ( P 1) 2
P
N=P=8 => log2P pasi. Fiecare proces are o singura coloana din A, iar in final fiecare va
avea o singura linie din A'.
La fiecare pas fiecare proces: schimba din datele sale (reprezentate umbrit in desen).
In partea a doua a desenului: sursele componentelor detinute de procesul 0, la fiecare
pas al algoritmului.
Procesele sunt partitionate in doua seturi: taskurile corespunzatoare din cele doua seturi
interschimba dintre datele lor: taskurile 0p/2-1 comunica jumatatea inferioara a
datelor lor, iar taskurile P/2P-1 comunica jumatatea superioara. Aceasta partitionare
si interschimb se repeta pana cand fiecare set contine un singur task.
Daca fiecare dintre cele log2P mesaje are dimensiunea N2/(2P) timpul necesar este:
N2
Ttranspunere hipercub t s log 2 P t w log 2 P
2P
Algoritmul hipercub transmite aprox. P/log2P mai putine mesaje, dar de (log2P)/2 ori
mai multe date.
Algoritmul hipercub: eficient in probleme mici cu timp de lansare mare si timp de
transfer mic!
Sortare
Algoritm de sortare "mergesort" pentru N valori (multiplu al numarului de procesoare
P=2d). Algoritmul secvential:
daca lungimea secventei de intrare <2 atunci return
partitioneaza secventa de intrare in doua jumatati
sorteaza cele doua subsecvente utilizand acelasi algoritm
fuzioneaza cele doua subsecvente sortate => secventa de iesire
Exemplu:
Compare-exchange:
-ambele taskuri A si B contin M valori si in final, toate elementele din A sunt
elementele din B;
-fiecare task trimite datele sale la celalalt task;
-taskul A identifica M elemente cele mai mici, iar restul le descarca (necesitand intre
M/2 pana la M comparatii);
-taskul B identifica M elemente cele mai mari, iar restul le descarca .
Exemplu: M=4.
Fiecare din cele 2d+1 taskuri se implica in d+1 pasi compara-interschimba, cate un pas
cu fiecare vecin. Fiecare nod executa algoritmul general, aplicand la fiecare pas i
urmatorul operator:
if ( myid AND 2i > 0 ) then ////daca eticheta are 1 in pozitia i
state = compare_exchange_high(state,message)
else
state = compare_exchange_low(state,message)
endif
Operatorul logic AND este utilizat pentru a determina daca taskul este "high" sau "low"
intr-un interschimb particular, iar myid si i sunt ca in algoritmul general.
d (d 1)
i
2
i 1
d
Tcomunicatie
d (d 1)
N d (d 1)
ts
tw
2
P
2
N d (d 1)
d (d 1)
Tcomp tc N log 2
tc N log 2 N
P
2
2
Tcomp
P
Tcomunicatie
N
d (d 1)
d (d 1)
N d (d 1)
tc log 2 N
tw
ts
P
2
2
P
2
N (log 2 P) 2
N
tc
ts tw
P
2
2P
Receptia (blocanta):
int nread (char * buffer, int dim, int source, int type);
Proiectarea algoritmului:
-se partitioneaza programul intr-un numar de procese;
-se distribuie aceste procese nodurilor sistemului.
Etape:
-fiecare nod calculeaza un rezultat partial pentru n/p subintervale (n = numar
total de subintervale, p = numar de procesoare);
-etapa de comunicatie pentru calcularea sumei finale.
Fiecare nod:
-executa functia main (fiecare nod are o copie) -> calcule locale;
-apeleaza functia de transfer de mesaje fan_in.
Comunicatia in hipercub:
Performante. Fiecare procesor executa n/p pasi pentru rezultatul partial, iar
comunicatia necesita log2p pasi:
-timpul de executie:
n
T p O ( log 2 p )
p
-accelerarea:
S O
1 p log 2 p
-eficienta:
E O
1 p log 2 p
BIBLIOTECA MPI
-biblioteca de functii C sau subrutine Fortran => comunicatia
intre procese;
Avantaje:
-portabilitatea codului sursa;
-implementari eficiente pe o varietate de platforme
(inclusiv Unix si Windows NT/XP);
-functionalitate (tipuri diferite de comunicatie, tipuri
de date definite de utilizator, topologii definite de utilizator);
Comunicatori
-transferul de mesaje intre procese: in cadrul unor comunicatori.
-comunicator initial predefinit: MPI_COMM_WORLD (cuprinde toate procesele)
#include "mpi.h"
#include <stdio.h>
int main(int argc,char *argv)
{
int numtasks, rank, rc;
rc = MPI_Init(&argc,&argv);
if (rc != MPI_SUCCESS) {
printf ("Error starting MPI program. Terminating.\n");
MPI_Abort(MPI_COMM_WORLD, rc);
}
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
printf ("Number of tasks= %d My rank= %d\n", numtasks,rank);
/******* do some work *******/
MPI_Finalize();
return 0;
}
Comunicatii punct-la-punct
care, transmite din zona buf, count date de tipul datatype la procesul destinatie dest,
din cadrul comunicatorului comm, mesajul avand identificatorul tag.
Pentru receptie:
MPI_Recv (&buf,count,datatype,source,tag,comm,&status)
datele fiind recptionate in zona buf la procesul care a apelat functia, in lungime
count de tipul datatype, de la procesul sursa source din cadrul comunicatorului comm,
mesajul avand identificatorul tag. Informatii de stare pentru mesajul receptionat sunt
depuse la status.
if (rank == 0) {
dest = 1;
source = 1;
rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
}
else if (rank == 1) {
dest = 0;
source = 0;
rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
}
rc = MPI_Get_count(&Stat, MPI_CHAR, &count);
printf("Task %d: Received %d char(s) from task %d with tag %d \n",
rank, count, Stat.MPI_SOURCE, Stat.MPI_TAG);
MPI_Finalize();
return 0;
}
Initierea transmisiei:
MPI_Isend (&buf,count,datatype,dest,tag,comm,&request)
Initierea receptiei:
MPI_Irecv (&buf,count,datatype,source,tag,comm,&request)
(parametrii asemanatori cu functiile blocante).
MPI_Wait (&request,&status)
functie blocanta si
MPI_Test (&request,&flag,&status)
functie neblocanta pentru o singura cerere transmisie / receptie
MPI_Waitall
functie blocanta si
(count,&array_of_requests,&array_of_statuses)
MPI_Testall
(count,&array_of_requests,&flag,&array_of_statuses)
#include "mpi.h"
#include <stdio.h>
int main(int argc,char *argv) {
int numtasks, rank, next, prev, buf[2], tag1=1, tag2=2;
MPI_Request reqs[4];
MPI_Status stats[4];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
prev = rank-1;
next = rank+1;
if (rank == 0) prev = numtasks - 1;
if (rank == (numtasks - 1)) next = 0;
MPI_Irecv(&buf[0], 1, MPI_INT, prev, tag1, MPI_COMM_WORLD, &reqs[0]);
MPI_Irecv(&buf[1], 1, MPI_INT, next, tag2, MPI_COMM_WORLD, &reqs[1]);
Comunicatii colective
-un numar mai mare de procese comunica intre ele in diferite moduri;
-avantaje in raport cu operatiile punct-la-punct:
Broadcast: un singur proces trimite cate o copie a unei date la toate celelalte
procese dintr-un grup.
MPI_Bcast (&buffer,count,datatype,root,comm)
Procesul root trimite blocul de date din buffer de lungime count si tip datatype la toate
procesele din cadrul comunicatorului, fiecare proces plasand datele in memoria sa in
zona buffer.
MPI_Scatter (&sendbuf,sendcnt,sendtype,&recvbuf,
recvcnt,recvtype,root,comm)
Procesul root trimite din zona sendbuf de lungime sendcnt si tip sendtype la fiecare
proces al comunicatorului comm cate un set de date depus in zona recvbuf, de lungime
recvcnt si tip recvtype.
......
MPI_Gather (&sendbuf,sendcnt,sendtype,&recvbuf,
recvcount,recvtype,root,comm)
Procesul root receptioneaza in recvbuf de lungime recvcount si tip recvtype cate un bloc
de date de la fiecare proces al comunicatorului comm din zona sendbuf lungime sendcnt
si tip sendtype.
MPI_Reduce (&sendbuf,&recvbuf,count,datatype,op,root,comm)
Datele de la toate procesele comunicatorului comm din zona sendbuf lungime count si
tip datatype sunt prelucrate cu operatia de reducere op si rezultatul inscris la procesul
root in zona recvbuf.
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
if (numtasks == SIZE) {
source = 1;
sendcount = SIZE;
recvcount = SIZE;
MPI_Scatter(sendbuf,sendcount,MPI_FLOAT,recvbuf,recvcount,
MPI_FLOAT,source,MPI_COMM_WORLD);
Biblioteca PVM
-functii portabile de nivel inalt pentru C si Fortran -> comunicatia in cadrul
unui grup de procese;
-compozitia grupului de procese este dinamica => cost suplimentar destul de
ridicat;
-un multicalculator (o retea de calculatoare) -> calculator virtual paralel, prin
transfer de mesaje;
-permite controlul proceselor, transmiterea si receptia mesajelor, sincronizarea
intre procese.
Initializarea masinii virtuale PVM: prin lansarea procesului server master cu functia:
pvm_start_pvmd
urmata de apelul functiei de setare a optiunilor de comunicatie:
pvm_setopt
Pe procesorul server master : hostfile (numele statiilor, caile de fisiere executabile, caile
pentru procesele server (demonii) din fiecare statie, contul utilizatorului, parola etc.).
Adaugare statii noi:
pvm_addhosts
Excludere statii:
pvm_delhosts
Comunicatia punct-la-punct
Mesaj: proces A -> proces B => procesul A initializeaza bufferul de transmisie:
pvm_pack
Transmiterea mesajului:
int pvm_send (int tid, int msgtag);
(functie blocanta) tid = identificatorul mesajului de receptie, msgtag = tipul mesajului
(specifica prelucrari la receptie) => valoarea 0 pentru transmisie corecta si 1 la eroare.
Receptia:
int pvm_recv (int tid, int msgtag);
Comunicatia colectiva:
Atasarea unui proces la un grup (daca grupul nu exista, el este creat):
int pvm_joingroup (char *group_name);
=> 0 pentru procesul care creaza grupul si valoarea cea mai mica disponibila in grup
pentru fiecare proces urmator (un proces poate sa apartina la unul sau mai multe
grupuri).
pvm_gsize
int pvm_gather (void *g_arrray, void *myarray, int dim, int type, int msgtag,
char *group_name, int root);
colecteaza mesajele cu flagul msgtag, de la toate procesele grupului, in procesul
radacina (definit de utilizator) root, colectarea facandu-se in vectorul g_array, de
dimensiune dim si tip type. Fiecare proces trebuie sa apeleze pvm_gather.
int pvm_scatter (void *myarray, void *s_arrray, int dim, int type, int msgtag,
char *group_name, int root);
distribuie uniform tuturor proceselor din grup un vector de date de tipul type, cu numele
s_array si de dimensiune dim, aflat in spatiul de adresa al procesului radacina root.
Fiecare proces apeleaza pvm_scatter. Receptia se face in vectorul my_array.
int pvm_reduce (int operation, void *myvals, int dim, int type, int msgtag, char
*group_name, int root);
efectueaza operatia de reducere paralela intre toate procesele membre ale unui grup.
Argumentul operation defineste operatorul de reducere (PvmMin, PvmMax, PvmSum,
PvmProduct). Fiecare proces efectueaza operatia de reducere a datelor din vectorul
local de date myvals, de tipul type, de dimensiune dim, iar valoarea rezultata este
transferata procesului radacina root, care obtine valoarea de reducere finala.
#include ........
#include "pvm3.h"
#define NTASKS 4
int main () {
int mytid, tids[NTASKS-1], groupid, sum, info;
/*crearea grupului de comunicatie*/
mytid=pvm_mytid();
groupid=pvm_joingroup("summax");
sum=groupid;
/*primul proces creaza celelalte NTASK-1 procese*/
if (groupid==0) {
info=pvm_spawn("summax",NULL,PvmTaskDefault," ", NTASKS-1,
tids);
printf("GroupId=%d spawned %d tasks\n", groupid, info);
}