Ce reprezinta conceptele de shared memory si distributed memory?

Ce reprezinta conceptele de shared memory si distributed memory

In informatica, memoria partajata este o memorie care poate fi accesata simultan de mai multe programe cu intentia de a realiza comunicarea intre ele sau de a evita copiile redundante. Memoria partajata este un mijloc eficient de transmitere a datelor intre programe. In functie de context, programele pot rula pe un singur procesor sau pe mai multe procesoare separate.

Folosirea memoriei pentru comunicare intr-un singur program, de ex. printre firele sale multiple, este denumita si memorie partajata.

Hardware

HSA defineste un caz special de partajare a memoriei, in care MMU al procesorului si IOMMU al GPU au un spatiu de adrese virtuale paginabil identic.

In hardware-ul computerului, memoria partajata se refera la un bloc (de obicei mare) de memorie cu acces aleatoriu (RAM) care poate fi accesat de mai multe unitati centrale de procesare (CPU) diferite, intr-un sistem de calcul multiprocesor.

Sistemele de memorie partajata pot utiliza:

  • acces uniform la memorie (UMA): toate procesoarele partajeaza uniform memoria fizica;
  • acces neuniform la memorie (NUMA): timpul de acces la memorie depinde de locatia memoriei in raport cu un procesor;
  • arhitectura de memorie cache (COMA): memoria locala pentru procesoarele de la fiecare nod este utilizata ca memorie cache in loc de memorie principala reala.

sistem de memorie partajata

Un sistem de memorie partajata este relativ usor de programat, intrucat toate procesoarele partajeaza o singura vizualizare a datelor, iar comunicarea dintre procesoare poate fi la fel de rapida ca accesul de memorie la aceeasi locatie. Problema cu sistemele de memorie partajata este ca multe procesoare au nevoie de acces rapid la memorie si probabil vor memora in cache, ceea ce duce la doua complicatii:

  • degradarea timpului de acces: atunci cand mai multe procesoare incearca sa acceseze aceeasi locatie de memorie, provoaca controverse. Incercarea de a accesa locatiile de memorie din apropiere poate cauza partajarea falsa. Calculatoarele cu memorie partajata nu pot scala foarte bine. Majoritatea au zece sau mai putine procesoare;
  • lipsa coerentei datelor: ori de cate ori o memorie cache este actualizata cu informatii care pot fi utilizate de alte procesoare, schimbarea trebuie sa fie reflectata celorlalte procesoare, altfel diferitele procesoare vor lucra cu date incoerente. Astfel de protocoale de coerenta a cache-ului pot, atunci cand functioneaza bine, sa ofere acces extrem de performant la informatii partajate intre mai multe procesoare. Pe de alta parte, uneori, acestea pot deveni supraincarcate si pot deveni un blocaj pentru performanta.

Tehnologii precum comutatoarele transversale, retelele Omega, HyperTransport sau frontal bus, pot fi utilizate pentru a atenua efectele de blocaj.

In cazul unei arhitecturi de sistem eterogene (arhitectura procesorului care integreaza diferite tipuri de procesoare, cum ar fi CPU-uri si GPU-uri, cu memorie partajata), unitatea de gestionare a memoriei (MMU) a procesorului si unitatea de gestionare a memoriei de intrare-iesire (IOMMU) a GPU trebuie sa impartaseasca anumite caracteristici, cum ar fi un spatiu de adrese comun.

Alternativele la memoria partajata sunt memoria distribuita si memoria partajata distribuita, fiecare avand un set similar de probleme.

Software

In software-ul computerului, memoria partajata este fie o metoda de comunicare inter-proces (IPC), adica un mod de schimb de date intre programele care ruleaza in acelasi timp prin care un proces va crea o zona in RAM la care se pot accesa alte procese, fie o metoda de conservare a spatiului de memorie prin directionarea acceselor la ceea ce ar fi in mod obisnuit copii ale unei bucati de date intr-o singura instanta, utilizand mapari de memorie virtuala sau cu suport explicit al programului in cauza. Acesta este cel mai adesea utilizat pentru bibliotecile partajate si pentru Execute in place (XIP).

Deoarece ambele procese pot accesa zona de memorie partajata, cum ar fi memoria de lucru obisnuita, aceasta este o modalitate foarte rapida de comunicare (spre deosebire de alte mecanisme ale IPC). Pe de alta parte, este mai putin scalabil, deoarece, de exemplu, procesele de comunicare trebuie sa ruleze pe aceeasi masina (cu alte metode IPC, numai socket-urile de domeniu Internet – nu sectoarele de domeniu Unix – pot utiliza o retea de calculatoare), si trebuie evitate eventualele probleme ce pot aparea, daca procesele de partajare a memoriei ruleaza pe procesoare separate si arhitectura de baza nu este coerenta in cache.

IPC prin memorie partajata este folosit de exemplu pentru a transfera imagini intre aplicatie si serverul X pe sistemele Unix sau in interiorul obiectului IStream returnat de CoMarshalInterThreadInterfaceInStream in bibliotecile COM din Windows.

Bibliotecile dinamice sunt, in general, pastrate in memorie o data si mapate la mai multe procese si doar paginile care trebuiau personalizate pentru procesul individual (deoarece un simbol s-a rezolvat diferit acolo) sunt duplicate, de obicei cu un mecanism cunoscut sub numele de copiere, copiaza pagina cand se incearca o scriere si apoi lasa scrierea sa aiba acces pe copia privata.

Suport pentru sistemele de tip Unix

POSIX ofera un API standardizat pentru utilizarea memoriei partajate, memoria partajata POSIX. Aceasta foloseste functia shm_open din sys / mman.h. Comunicatia interproces POSIX (parte a POSIX: XSI Extension) include functiile de memorie partajata shmat, shmctl, shmdt si shmget. Unix System V ofera si un API pentru memoria partajata. Aceasta foloseste shmget din sys / shm.h. Sistemele BSD ofera „memorie cartografiata anonima” care poate fi utilizata de mai multe procese.

Memoria partajata creata de shm_open este persistenta. Ramane in sistem pana cand este eliminat in mod explicit de un proces. Acest lucru are un dezavantaj prin faptul ca, daca procesul se blocheaza si nu reuseste sa curete memoria partajata, acesta va ramane activ pana la oprirea sistemului.

POSIX ofera, de asemenea, API-ul mmap pentru maparea fisierelor in memorie; o mapare poate fi partajata, permitand continutul fisierului sa fie utilizat ca memorie partajata.

Distributiile Linux bazate pe nucleul 2.6 si ulterior, ofera / dev / shm ca memorie partajata sub forma unui disc RAM, mai exact ca un director care poate fi scris de toata lumea (un director in care fiecare utilizator al sistemului poate crea fisiere) care este stocat in memori Ram. Atat distributiile bazate pe RedHat, cat si Debian il includ in mod implicit. Suportul pentru acest tip de disc RAM este complet optional in fisierul de configurare a nucleului.

Suport pentru Windows

Pe Windows, se pot utiliza functiile CreateFileMapping si MapViewOfFile pentru a mapa o regiune a unui fisier in memorie, in mai multe procese.

Suport multiplatforma

Unele biblioteci C ++ ofera un acces portabil si orientat spre obiecte la functionalitatea de memorie partajata. De exemplu, Boost contine biblioteca Boost.Interprocess C ++ si Qt ofera clasa QSharedMemory.

Suport pentru limbajul de programare

Exista suport nativ pentru memoria partajata si in limbaje de programare in afara de C / C ++. De exemplu, PHP ofera un API pentru a crea memorie partajata, similar cu functiile POSIX.

Memoria distribuita

Memoria distribuita se refera la un sistem de calcul multiprocesor in care fiecare procesor are propria sa memorie privata. Sarcinile de calcul pot functiona numai pe date locale si, daca sunt necesare date la distanta, sarcina de calcul trebuie sa comunice cu unul sau mai multe procesoare la distanta. In schimb, un multiprocesor de memorie partajata ofera un singur spatiu de memorie utilizat de toate procesoarele. Procesoarele nu trebuie sa fie “constiente” de locul in care se afla datele, cu exceptia faptului ca pot exista sanctiuni de performanta.

Intr-un sistem de memorie distribuita exista de obicei un procesor, o memorie si o forma de interconectare care permite programelor executate pe fiecare procesor sa interactioneze intre ele. Interconectarea poate fi organizata cu legaturi punct la punct sau hardware separat, ce poate oferi o retea de comutare. Topologia retelei este un factor cheie in determinarea modului de functionare a intregului ansamblu. Legaturile dintre noduri pot fi implementate utilizand un protocol de retea standard (de exemplu Ethernet), folosind legaturi de retea personalizate sau folosind memorii dual-portate.

Programarea masinilor cu memorie distribuita

Problema cheie in programarea sistemelor de memorie distribuita este cum se distribuie datele pe aceste memorii. In functie de problema rezolvata, datele pot fi distribuite static sau pot fi mutate prin noduri. Datele pot fi mutate la cerere sau pot fi trimise in avans, catre noile noduri.

De exemplu, daca o problema poate fi descrisa ca o conducta in care datele x sunt procesate ulterior prin functiile f, g, h etc. (rezultatul este h (g (f (x)))), atunci acest lucru poate fi exprimat ca o problema de memorie distribuita in care datele sunt transmise mai intai catre nodul care efectueaza f care trece rezultatul pe al doilea nod care calculeaza g si, in cele din urma, catre al treilea nod care calculeaza h. Acest lucru este, de asemenea, cunoscut sub numele de calcul sistolic.

Datele pot fi pastrate static in noduri daca majoritatea calculelor au loc local si numai modificarile de pe margini trebuie raportate altor noduri. Un exemplu in acest sens este simularea in care datele sunt modelate folosind o grila si fiecare nod simuleaza o mica parte a grilei mai mari. La fiecare iteratie, nodurile informeaza toate nodurile vecine cu privire la noile date de margine.

Memorie partajata vs. memorie distribuita vs. memorie partajata distribuita

  • Avantajul memoriei partajate (distribuite) este ca ofera un spatiu de adrese unificat in care pot fi gasite toate datele.
  • Avantajul memoriei distribuite este ca exclude conditiile cursei si ca obliga programatorul sa se gandeasca la distribuirea datelor.
  • Avantajul memoriei distribuite (partajate) este ca face mult mai usoara proiectarea unei masini care se scaleaza cu algoritmul.
  • Memoria partajata distribuita ascunde mecanismul comunicarii, nu ascunde latenta comunicarii.
0 Shares:
You May Also Like