O taxonomie se refera la o clasificare ierarhica a unor obiecte, mai exact reprezinta principiile care stau la baza clasificarii. In principiu orice clasa de obiecte poate fi clasificata dupa o anume taxonomie. Mai multe detalii despre termenul taxonomie puteti gasi spre exemplu in explicatia din Wikipedia.
Clasificarea Flynn este una din cele mai cunoscute taxonomii. Flynn a propus-o in 1966. Aceasta clasificare se face in functie de fluxul de date si fluxul de instructiuni. Fluxul de date reprezinta secventa de operanzi manipulata de procesor. Fluxul de instructiuni reprezinta secventa de instructiuni executata de procesor.
In functie de cum pot fi fluxul de date si fluxul de instructiuni rezulta 4 categorii in care se pot imparti sistemele de calcul:
Este calculatorul clasic von Neumann.
Fiecare instructiune aritmetica initiaza o operatie asupra unei element (data) luat dintr-un set unic de elemente deci exista un flux unic de instructiuni si un flux unic de date.
Este in general un sistem de calcul de tip vectorial unde toate PA executa aceeasi instructiune.
Calculatoarele de tip SIMD au o singura unitate de procesare (Ucmd) si mai multe unitati de prelucrare (PA). Prima masina operationala de acest tip a fost ILLIAC-IV (un proiect al DARPA, Burroughs Corporation si University of Illinois Institute for Advanced Computation (mai multe informatii despre ILLIAC-IV gasiti la thefreedictionary.com ).
Unitatea de comanda este cea care se ocupa de preluarea (fetch) si interpretarea instructiunilor. Atunci cand se intalneste o instructiune aritmetica sau o instructiune de prelucrare de date, aceasta trimite instructiunea la toate unitatile de prelucrare, care vor executa toate aceeasi operatie (evident asupra unor date diferite, proprii fiecarui procesor). Spre exemplu instructiunea ar putea fii: add R1,R2. Fiecare PA aduna continutul registrului propriu R2 la R1. Pentru a da o flexibilitate in implementarea algoritmilor, unul sau mai multe PA pot fi dezactivate prin folosirea de masti. Prin urmare, la fiecare instructiune un PA poate fi deactivat (caz in care nu face nimic), sau activ, ceea ce inseamna ca executa aceeasi operatie pe care o fac toate PA activate.
Unul din avantajele acestui stil de organizare a unui calculator paralel este economisirea de “logica”. In general 20 pana la 50% din “logica” de pe un procesor obisnuit este folosita pentru control, mai exact, aducerea (fetch) decodarea si planificarea instructiunilor. Restul este folosita pentru registrii,pentru cache si pentru implementarea procesarii de date (sumatoare, multiplicatoare, etc). La SIMD, o singura unitate de comanda aduce (fetch) si proceseaza instructiuni, prin urmare mai multa “logica” poate fi folosita pentru circuitele aritmetice si registrii.
Problema sincronizarii este lipsita de relevanta in cazul sistemelor SIMD: procesoarele ori executa aceeasi instructiune in acelasi timp ori nu executa nimic. Se poate observa existenta unei bariere implicite dupa fiecare instructiune. Ucmd trimite o instructiune spre executie si asteapta ca toate procesoarele activate sa-si termine treaba.
Modul de functionare al sistemelor vectoriale se regaseste si in interiorul unor sisteme uniprocesor. La Intel intalnim 2 seturi de instructiuni pentru operatiile pe vectori : MMX (o varianta mai veche) si SSE (SSE1, SSE2, SSE3). La AMD exista 3DNow!, iar la PowerPC AltiVec.
Mai multe informatii legate de arhitecturile SIMD gasiti aici.
Sunt doar cateva masini in aceasta categorie, si nici una nu a avut un succes comercial, sau vreun impact din punct de vedere stiintific. Un sistem care intra in aceasta categorie (MISD) este un vector sistolic, care este o retea de mici elemente computationale conectate intr-o retea grila (grid). Toate elementele sunt controlate de un ceas global. La fiecare ciclu, un element va citi o valoare de la unul din vecini, efectueaza o operatie simpla (spre exemplu adunarea valorii sosite la la o valoare existenta deja) si pregateste o valoare spre a fi scrisa la un vecin la urmatorul pas.
Un alt exemplu ar putea fi considerat un procesor care prelucreaza in banda de asamblare (pipeline) pe motiv ca fiecare pas din banda de asamblare corespunde unei operatii diferite efectuata asupra datelor.
Un exemplu de utilizare ar putea fi compararea a diversi algoritmi pe aceleasi date de intrare.
Aceasta categorie de calculatoare este cea mai diversificata dintre toate cele 4 categorii. Include masini cu procesoare si memorii proiectate special pentru arhitecturile paralele, masini paralele construite cu procesoare obisnuite conectate impreuna si altele. Odata cu imbunatatirea comunicarii pe retea si cu dezvoltarea softurilor care permit comunicatia intre calculatoare se poate considera ca o retea locala de calculatoare obisnuite intra in categoria masinilor MIMD.
Calculatoarele cu doua sau mai multe procesoare independente exista de foarte mult timp. Unul dintre primele a fost vandut de Burroughs Corporation in anii 1970 si avea 2 procesoare (se numea B6700). Cu toate astea, cele 2 procesoare erau foarte rar puse sa lucreze la acelasi job. Calculatoarele multiprocesoare actuale, sunt proiectate sa aibe un paralelism la nivel de job, spre exemplu fiecare executa o aplicatie diferita. Procesare parelela, in sensul folosirii a 2 sau mai multe procesoare pentru executareea unei singure aplicatii este un subiect de care s-au ocupat cercetatorii inca din anii 70. Procesoarele paralele comerciale au inceput sa fie larg raspandite in anii 80. La inceputul anilor 90 deja au inceput sa depaseasca procesoarele SIMD in materie de putere de calcul.
O subclasificare a sistemelor MIMD dupa retelele de interconectare este urmatoarea (Tanenbaum):
Viteza retelei de interconectare pentru MIMD impune restrictii pentru setul de aplicatii care pot fi rulate pe sistem. Evident cu cat reteaua de interconectare pentru MIMD are o viteza mai mica cu atat setul de aplicatii care pot fi rulate pe acel sistem este mai redus.
Cu toate ca taxonomia Flynn este cea mai folosita taxonomie pentru clasificarea calculatoarelor, aceasta are si neajunsuri. Categoria MISD nu prea are reprezentanti, si este foarte dificil de incadrat intr-o categorie procesoarele vectoriale. O alta slabiciune este faptul ca la categoria MIMD, toate procesoarele sunt puse la un loc, neluand in seama cum sunt conectate sau modul in care vad memoria. Din moment ce aceste caracteristici pot avea efecte importante asupra performantei, ar fi de dorit o taxonomie care sa reflecte aceste diferentieri.
Shore a oferit o taxonomie similara, dar a impartit categoria SIMD in patru subcategorii.
O alta incercare de detaliere a taxonomiei Flynn a facut-o Hwang, care a impartit categoria MIMD in sisteme cu memorie partajata (shared memory), sisteme distribuite si sisteme reconfigurabile. Aceasta taxonomie amesteca tipul de organizare a memorie cu modul de organizare a comunicarii, deci nu e o taxonomie in adevaratul sens al cuvantului. Bell a impartit MIMD in sisteme cu memorie partajata si sisteme fara memorie partajata. O alta adaugire facuta la taxonomia Flynn care a devenit foarte populara este SPMD (Single Program / Multiple Data). Dar asta e mai mult un stil de programare decat o arhitectura. Fizic vorbind este o arhitectura MIMD, pentru ca exista mai multe procesoare independente, fiecare avand sectiunea lui de date si de program. Acelasi program este executat de fiecare procesor, si procesoarele se sicronizeaza periodic. Acesta este un mod mult mai simplu de a folosi un sistem MIMD, pentru ca nu mai e nevoie sa se gestioneze mai multe fluxuri de instructiuni. Ofera mai multa flexibilitate decat SIMD pentru ca procesoarele pot fi in stadii diferite ale executiei.
Arhitecturile SIMD (Single Instruction stream, Multiple Data stream) ocupa un rol esential in lumea calculatoarelor paralele. Capacitatea lor de a manipula date vectoriale si matriciale in timpi mici a creat o cerere deosebita in domenii precum cercetarea cancerului si previziunile meteo. Puterea acesor masini devine evidenta cand dimensiunea vectorului de prelucrat este echivalenta cu numarul de procesoare aritmetice. In acest caz adunarea si multiplicarea elementelor vectorului de intrare se pot realiza simultan. In figura operatiile intre componentele celor 2 vectori se executa in paralel, fiecare de cate o unitate de prelucrare aritmetica. Toate arhitecturile SIMD contin o unitate de comanda si mai multe unitati de prelucrare. Comenzile date de unitatea de comanda se executa pentru toate unitatile de prelucrare active. Din punct de vedere constructiv, masinile SIMD se impart in:
O masina SIMD simpla este cea in care fiecare unitate aritmetica are memoria sa proprie si este singura care are acces la ea.
In aceasta arhitectura fiecare procesor primeste instructiuni si executa operatii asupra datelor din memoria proprie. Dezavantajul este necesitatea de a avea datele structurate in memoriile individuale ale procesoarelor inca inainte de incputul programului. O arhitectura SIMD reala ce contine o singura unitatea de control si multiple elemente de procesoare (unitati de executie-EU). In acest model, unitatile aritmetice sunt “sclavii” unitatii de comanda. EU nu pot primi sau interpreta interpreta instructiuni ci au simple capacitati de adunare, scadere, inmultire si impartire. Deoarece fiecare EU are acces doar la propria sa memorie daca are nevoie de date stocate in memoria altei EU trebuie ca CU(Command Unit) sa realizeze transferul informatiei. Avantaj: este usoara adaugarea memoriei suplimentare sau a altor CU Dezavantaj: ciclurile risipite de CU in transferul datelor de la o EU la alta Arhitecturi SIMD cu memorie partajata O imbunatatire a primei arhitecturi se poate face prin permiterea schimburilor directe de date intre procesoarele aritmetice sau intre procesoare si memorii. Cea mai comuna metoda este de a adauga un cross-bar switch. Astfel fiecare EU isi poate partaja memoria fara sa faca apel la CU.
Acest tip de arhitectura SIMD este evident superior primului. Dezavantaj: dificultatea de a adauga memorie suplimentara.
In aceste masini, unitatile de executie sunt plasate intr-un pipeline. Pipeline-ul preia diferite fluxuri de instructiuni si realizeaza operatiile unei unitati aritmetice printr-o procedura de tip FIFO. Pentru a obtine avantaje din pipeline, datele ce trebuie prelucrate vor fi stocate in module de memorie diferite astfel ca pipeline-ul sa fie alimentat cu date cat mai repede cu putinta. Avantaje: viteza si eficienta oprelucrarii datelor (in cazul in care conditia de mai sus este indeplinita) Obs: aceasta nu este o arhitectura SIMD pura