Sistemele de calcul paralele sunt sisteme de calcul fizice, precum și sisteme software care implementează într-un fel sau altul procesarea paralelă a datelor pe multe noduri de calcul. [unu]
De exemplu, pentru a sorta rapid o matrice pe o mașină cu două procesoare, puteți împărți matricea în jumătate și sortați fiecare jumătate pe un procesor separat. Sortarea fiecărei jumătăți poate dura o perioadă diferită de timp, așa că este necesară sincronizarea .
Ideea paralelizării calculelor se bazează pe faptul că majoritatea sarcinilor pot fi împărțite într-un set de sarcini mai mici care pot fi rezolvate simultan. De obicei, calculul paralel necesită coordonarea acțiunilor. Calculul paralel vine sub mai multe forme: paralelism la nivel de biți, paralelism la nivel de instrucțiune, paralelism de date și paralelism de sarcini. Calculul paralel a fost folosit de mulți ani în principal în calculul de înaltă performanță, dar în ultima perioadă s-a înregistrat o creștere a interesului datorită existenței unor restricții fizice privind creșterea frecvenței de ceas a procesoarelor. Calculul paralel a devenit paradigma dominantă în arhitectura computerelor , mai ales sub formă de procesoare multi-core . [2]
Scrierea de programe pentru sisteme paralele este mai dificilă decât pentru sistemele secvenţiale [3] , deoarece conflictul de resurse reprezintă o nouă clasă de potenţiale erori software ( bug-uri ), printre care condiţia de cursă este cea mai comună. Comunicarea și sincronizarea între procese reprezintă o mare barieră în obținerea unor performanțe ridicate în sisteme paralele. În ultimii ani, a început să fie luată în considerare și problema consumului de energie de către calculatoarele paralele. [4] Natura creșterii vitezei programului ca urmare a paralelizării este explicată de legile lui Amdahl și Gustavson .
Această formă de paralelism se bazează pe creșterea dimensiunii unui cuvânt mașină . Mărirea dimensiunii cuvântului mașinii reduce numărul de operații necesare procesorului pentru a opera pe variabile a căror dimensiune este mai mare decât dimensiunea cuvântului mașinii. De exemplu: pe un procesor de 8 biți, trebuie să adăugați două numere întregi de 16 biți. Pentru a face acest lucru, mai întâi trebuie să adăugați cei 8 biți inferiori ai numerelor, apoi să adăugați cei 8 biți mai mari și să adăugați valoarea indicatorului de transport la rezultatul adunării lor . Un total de 3 instrucțiuni. Cu un procesor pe 16 biți, puteți efectua această operație cu o singură instrucțiune.
Din punct de vedere istoric, microprocesoarele pe 4 biți au fost înlocuite cu cele pe 8 biți, apoi au apărut cele pe 16 și 32 de biți. Procesoarele pe 32 de biți au fost mult timp standardul în calculul de zi cu zi. Odată cu apariția tehnologiei x86-64 , procesoarele pe 64 de biți au început să fie utilizate în aceste scopuri.
Un program de calculator este în esență un flux de instrucțiuni executate de un procesor. Dar puteți schimba ordinea acestor instrucțiuni, le puteți distribui în grupuri care vor fi executate în paralel, fără a modifica rezultatul întregului program. Această tehnică este cunoscută sub numele de paralelism la nivel de instrucție. Progresele în dezvoltarea paralelismului la nivel de instruire în arhitectura computerelor au avut loc de la mijlocul anilor 1980 până la mijlocul anilor 1990.
Procesoarele moderne au o conductă de instrucțiuni în mai multe etape . Fiecare etapă a conductei corespunde unei anumite acțiuni efectuate de procesor în această instrucțiune în această etapă. Un procesor cu N etape de conductă poate avea simultan până la N instrucțiuni diferite la diferite niveluri de completitudine. Un exemplu clasic de procesor pipeline este un procesor RISC cu 5 etape: preluarea unei instrucțiuni din memorie (IF), decodarea unei instrucțiuni (ID), executarea unei instrucțiuni (EX), accesarea memoriei (MEM), scrierea rezultatului în registre (WB). ). Procesorul Pentium 4 are o conductă de 31 de etape [5] .
Unele procesoare, pe lângă utilizarea conductelor, au capacitatea de a executa mai multe instrucțiuni în același timp, ceea ce oferă paralelism suplimentar la nivel de instrucțiuni. Este posibil să se implementeze această metodă folosind superscalar , când instrucțiunile pot fi grupate împreună pentru execuție paralelă (dacă nu au dependențe de date (dependențe de date)). Sunt posibile și implementări care utilizează paralelismul explicit la nivel de instrucțiune: VLIW și EPIC .
Ideea principală a abordării bazate pe paralelismul datelor este că o singură operație este efectuată imediat pe toate elementele matricei de date. Diferite fragmente ale unei astfel de matrice sunt procesate pe un procesor vectorial sau pe diferite procesoare ale unei mașini paralele. Programul este responsabil pentru distribuirea datelor între procesatori. Vectorizarea sau paralelizarea în acest caz se realizează cel mai adesea deja în etapa de compilare - traducerea codului sursă al programului în instrucțiuni ale mașinii. Rolul programatorului în acest caz se rezumă de obicei la setarea vectorului compilatorului sau a setărilor de optimizare paralelă, a directivelor de compilare paralelă și la utilizarea limbajelor specializate pentru calculul paralel.
Un stil de programare bazat pe paralelismul sarcinilor implică faptul că o sarcină de calcul este împărțită în mai multe subsarcini relativ independente și fiecare procesor este încărcat de propria sa subsarcină.
Un sistem de operare distribuit, prin alocarea dinamică și automată a muncii diferitelor mașini din sistem pentru procesare, forțează un set de mașini conectate în rețea să proceseze informații în paralel. Utilizatorul unui sistem de operare distribuit, în general, nu are cunoștințe despre mașina pe care își desfășoară activitatea. [6]
Un sistem de operare distribuit există ca un singur sistem de operare într-un sistem de calcul. Fiecare computer dintr-o rețea care rulează un sistem de operare distribuit îndeplinește o parte din funcțiile acestui sistem de operare global. Un sistem de operare distribuit reunește toate computerele dintr-o rețea în sensul că acestea lucrează în strânsă cooperare între ele pentru a utiliza eficient toate resursele unei rețele de calculatoare.
Lucrările în direcția creării de sisteme de calcul paralele în SUA și URSS au fost intense încă din anii 1960 . Dezvoltarea tehnologiei paralele de procesare a datelor și crearea de sisteme electronice de calcul paralele în Statele Unite , prin ordinul Agenției SUA pentru Proiecte de Cercetare Avansată a Apărării, a fost realizată de departamentele de cercetare ale companiilor și universităților: [7]
Lucrarea a fost supravegheată de Biroul de calcul și procesare a informațiilor ARPA de la Pentagon , Virginia , și de Centrul de Cercetare al Forțelor Aeriene ale SUA din Roma , New York .
În Uniunea Sovietică , lucrări de natură similară au fost efectuate de instituții din cadrul Comitetului de Stat pentru Radioelectronica (transformat ulterior în Ministerul Industriei Radio ), Ministerul Apărării și Academia de Științe a URSS : [8]
La începutul anilor 1970, la Laboratorul de Inteligență Artificială al MIT, Marvin Minsky și Seymour Papert au început să dezvolte o teorie pe care au numit-o „ Societatea Minții ”, care privea creierul biologic ca pe o mașină de calcul masiv paralelă . În 1986, Minsky a publicat cartea populară The Society of Mind, în care susține că „mintea creierului este formată din mulți agenți mici care nu au o minte proprie”. [9] Teoria a încercat să explice modul în care ceea ce numim inteligență poate fi produsul interacțiunii unor părți simple numite agenți, care sunt ei înșiși neinteligenti. Minsky a susținut că cea mai mare sursă de idei despre teoria „societății minții” a fost munca sa în încercarea de a construi o mașină care să asambleze blocuri pentru copii folosind un braț robot, o cameră video și un computer. [10] Cartea de teorie a Societății Minții a fost scrisă pentru publicul larg, spre deosebire de majoritatea lucrărilor publicate anterior de Minsky.
Modele similare (care consideră, de asemenea, creierul biologic ca o mașină de calcul masiv paralelă, adică consideră creierul ca fiind format din mulți agenți independenți sau semi-independenți) au mai descris:
![]() | |
---|---|
În cataloagele bibliografice |