CUNOAȘTE INTUIT, Prelegere, Interfață de mesagerie MPI

Laboratorul 0.2 Introducere în procedurile de schimb punct la punct MPI cu tampon și fără blocare

schimb tampon punct la punct

Când trimiteți un mesaj în modul tampon, sursa copiază mesajul într-un tampon și apoi îl trimite în modul neblocant. Alocarea și dimensiunea bufferului sunt controlate de programator, care trebuie să creeze în prealabil un buffer de dimensiune suficientă. Transmisia în buffer se finalizează imediat, deoarece mesajul este copiat imediat în tampon pentru transmitere ulterioară.

După ce ați terminat de lucrat cu tamponul, trebuie să-l dezactivați. După ce un buffer este dezactivat, memoria pe care o ocupă poate fi reutilizată, dar rețineți că în C, acest apel nu eliberează automat memoria tamponului.

Schimbul tamponat este recomandat în situațiile în care programatorul are nevoie de mai mult control asupra alocării memoriei.

Schimburi neblocante punct la punct

Apelarea unei rutine de transfer neblocante inițiază, dar nu o încheie. Transferul datelor din buffer sau citirea acestora are loc concomitent cu executarea altor operațiuni. Schimbul se încheie cu un apel către o procedură suplimentară care verifică dacă datele au fost copiate în bufferul de trimitere. Înainte ca schimbul să fie finalizat, scrierea sau citirea din buffer nu poate fi efectuată, deoarece este posibil ca mesajul să nu fie încă trimis sau primit. O trimitere fără blocare poate fi primită printr-o rutină de primire cu blocare și invers.

Un schimb neblocant se realizează în doi pași:

  1. Inițializarea schimbului.
  2. Verificarea finalizării schimbului.

Pentru a marca operațiunile de schimb neblocante, sunt utilizațiidentificatorii operațiunilor de schimb.

Verificarea realuluiEfectuarea unei trimiteri sau primiri în modul neblocant se face prin apelarea rutinelor de așteptare care blochează procesul până la finalizarea operației sau a rutinelor de verificare neblocante care returnează valoarea booleană „adevărată” dacă operația este finalizată.

Subrutina MPI_Wait blochează procesul până când mesajul este primit sau trimis. Funcțiile MPI_Wait și MPI_Test pot fi utilizate pentru a finaliza operațiunile de recepție și transmisie.

Rutine de sondă

Puteți obține informații despre un mesaj înainte ca acesta să fie plasat în memoria tampon de primire utilizând rutinele de sondă MPI_Probe și MPI_IProbe. Pe baza informațiilor primite, se ia o decizie asupra acțiunilor ulterioare. Prin apelarea subrutinei MPI_Probe, este detectată sosirea (dar nu și recepția!) a unui mesaj. Apoi se determină sursa mesajului, se determină lungimea acestuia, se alocă un buffer de o dimensiune adecvată și mesajul este primit.

Lucrări de laborator

În sarcinile de lucru de laborator 0.2, se propune completarea fragmentelor de program propuse în Fortran și C, scrise folosind procedurile MPICH 1.2.7. Fragmentele lipsă sunt indicate prin puncte de suspensie.

Materialul de referință necesar pentru acest lucru de laborator poate fi găsit la paginile 30 - 34din manualul metodic„Instrumente de programare pentru sisteme de calcul multiprocesor”.

În codul sursă al programului C, apelurile la procedurile de schimb tamponate sunt omise. Adăugați aceste apeluri, compilați și rulați programul.

În codul sursă al programului Fortran, apelurile la procedurile de operațiuni de schimb neblocante lipsesc. Adăugați aceste apeluri, compilați și rulați programul.

În codul sursă al programului C lipsesc apelurile pentru a sonda subrutinele. Adăugați acesteaapelează, compilați și rulați programul.

Codul sursă al programului Fortran omite apelurile la blocarea procedurilor de sondare și alte câteva fragmente importante. Adăugați aceste apeluri, compilați și rulați programul.

Codul sursă al programului Fortran a omis: apelul procedurii MPl_Wait și alte câteva fragmente importante. Adăugați aceste apeluri, compilați și rulați programul.