Memorie distribuită - Distributed memory

Image
O ilustrare a unui sistem de memorie distribuită de trei calculatoare.

În informatică , memoria distribuită se referă la un sistem de calcul multiprocesor în care fiecare procesor are propria sa memorie privată . Sarcinile de calcul pot funcționa numai pe date locale și, dacă sunt necesare date la distanță, sarcina de calcul trebuie să comunice cu unul sau mai multe procesoare la distanță. În schimb, un multiprocesor de memorie partajată oferă un singur spațiu de memorie utilizat de toți procesoarele. Procesorii nu trebuie să fie conștienți de locul în care se află datele, cu excepția faptului că pot exista sancțiuni de performanță și că trebuie evitate condițiile de cursă.

Într-un sistem de memorie distribuită există de obicei un procesor, o memorie și o formă de interconectare care permite programelor de pe fiecare procesor să interacționeze între ele. Interconectarea poate fi organizată cu legături punct la punct sau hardware separat poate oferi o rețea de comutare. Topologia rețelei este un factor cheie în determinarea modul în care aparatul multiprocesor scale . Legăturile dintre noduri pot fi implementate utilizând un protocol de rețea standard (de exemplu, Ethernet ), folosind legături de rețea personalizate (utilizate de exemplu în transputer ) sau folosind memorii dual-portate .

Programarea aparatelor de memorie distribuită

Problema cheie în programarea sistemelor de memorie distribuită este cum se distribuie datele peste memorii. În funcție de problema rezolvată, datele pot fi distribuite static sau pot fi mutate prin noduri. Datele pot fi mutate la cerere sau datele pot fi împinse în avans către noile noduri.

De exemplu, dacă o problemă poate fi descrisă ca o conductă în care datele x sunt procesate ulterior prin funcțiile f , g , h etc. (rezultatul este h ( g ( f ( x )))), atunci acest lucru poate fi exprimat ca o problemă de memorie distribuită în care datele sunt transmise mai întâi către nodul care efectuează f care trece rezultatul pe al doilea nod care calculează g și, în cele din urmă, către al treilea nod care calculează h . Acest lucru este, de asemenea, cunoscut sub numele de calcul sistolic .

Datele pot fi păstrate static în noduri dacă majoritatea calculelor au loc local și numai modificările de pe margini trebuie raportate altor noduri. Un exemplu în acest sens este simularea în care datele sunt modelate folosind o grilă și fiecare nod simulează o mică parte a grilei mai mari. La fiecare iterație, nodurile informează toate nodurile vecine cu privire la noile date de margine.

Memorie partajată distribuită

În mod similar, în memoria partajată distribuită, fiecare nod al unui cluster are acces la o memorie partajată mare, în plus față de memoria privată limitată non-partajată a fiecărui nod.

Memorie partajată vs. memorie distribuită vs. memorie partajată distribuită

  • Avantajul memoriei partajate (distribuite) este că oferă un spațiu de adrese unificat în care pot fi găsite toate datele.
  • Avantajul memoriei distribuite este că exclude condițiile cursei și că obligă programatorul să se gândească la distribuirea datelor.
  • Avantajul memoriei distribuite (partajate) este că este mai ușor să proiectezi o mașină care se scalează cu algoritmul

Memoria partajată distribuită ascunde mecanismul comunicării, nu ascunde latența comunicării.

Vezi si