1 / 72

Informativno predavanje o klaster ra čunarima Nataša Babačev / Igor Jeremić matemati čki fakultet

Informativno predavanje o klaster ra čunarima Nataša Babačev / Igor Jeremić matemati čki fakultet. Message Passing Interface Rešavanje linearnih sistema jednačina velikih dimenzija Rešavanje Poi s sonove PDJ. Klaster računar (multicomputer). Kako ubrzati zahtevne proračune.

garan
Download Presentation

Informativno predavanje o klaster ra čunarima Nataša Babačev / Igor Jeremić matemati čki fakultet

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informativno predavanje o klaster računarimaNataša Babačev / Igor Jeremićmatematički fakultet • Message Passing Interface • Rešavanje linearnih sistema jednačina velikih dimenzija • Rešavanje Poissonove PDJ

  2. Klaster računar (multicomputer)

  3. Kako ubrzati zahtevne proračune • Korišćenjem boljeg hardware-a • Optimizacijom algoritama • Korišćenjem distribuiranih računarskih sistema

  4. Murov zakon Broj tranzistora na čipu udvostručava se svakih 18-24 meseca, površina čipa se ne može mnogo povećati, i napredak tehnologije zavisi od minijaturizacije, uskoro ćebiti dostignute fizičke granice minijaturizacije!!!

  5. Murov zakon Rešenje problema! • Promena tehnologije • Kvantni računari • Biohemijski i DNK zasnovani nanoračunari • Mehanički nanoračunari • Paralelizacija već postojećih računarskih sistema (može se iskoristiti i na računarima novih tehnologija)

  6. Klaster računar Klaster računar predstavlja grupu povezanih autonomnih računara koji rade zajedno kao jedan paralelni računar • Labavo vezan višeprocesorski sistem • Svaki računar u mreži može imati više procesora • Računari mogu deliti isti disk prostor (NFS) • Distribuirana Memorija • OS: LiNUX + software Beowulf (oba su besplatna) • Skalabilnost celog sistema • Otkazivanjem nekog čvora ne dolazi do pada sistema

  7. Klaster u odnosu na druge sisteme mainframe

  8. Klaster u odnosu na druge sisteme Vector supercomputer

  9. Klaster u odnosu na druge sisteme mini computer

  10. Klaster u odnosu na druge sisteme workstation

  11. Klaster u odnosu na druge sisteme PC

  12. Klaster u odnosu na druge sisteme Klaster (multicomputer)

  13. KLASTER Otkazom jednog ili više čvorova sistem neće pasti Čvorovi su PC računari koji su dosta jeftini Nadogradnja i održavanje sistema je jeftinije OS i osnovni software su besplatni Rasformiranjem klastera dobijaju se računari koji se mogu koristiti u druge svrhe Čvorovi se mogu koristiti i kao radne stanice dok su deo klaster računara Mogu se iskoristiti vec postojeci racunarski resursi MAINFRAME Koncentrisano usko grlo Skup za nabavku i održavanje Tržište delova je usko, (sve se nabavlja od proizvođača) Klaster v.s. Mainframe

  14. Klaster računar Dva najčešća razloga za korišćenje klaster računara su • Poboljšanje performansi, paralelno izračunavanje • Povećanje sigurnosti sistema (dva simetrična računara rade isti posao, u slučaju otkaza jednog računara sistem neće pasti)

  15. М M M ... P P P Mrežna komunikacija Message Passing Model

  16. MPI (Message Passing Interface) • MPI predstavlja specifikaciju standarda biblioteke za rutina za razmenu poruka između čvorova klaster računara • MPI standard je definisan od strane “MPI Forum-a” http://www.mpi-forum.org/ • Razvijeno je više implementacija MPI standarda • Podržani jezici su C, C++ i FORTRAN • MPICH je besplatna implementacija MPI standarda

  17. MPI standard • Podržan je MIMD model paralelnog izračunavanja, takođe podržan je i SPMD model • Omogućava portabilnost koda • Efikasna implementacija na različitim arhitekturama • Funkcionalnost biblioteke • Podrška za heterogene paralelne arhitekture • Ne bavi se: • Učitavanjem procesa u procesore • Zamenom procesa tokom izvršavanja • Debagovanjem • Paralelnim upisom i ispisom podataka

  18. Struktura MPI programa (C++) #include <iostream> #include <mpi.h> using namespace std; int main(int argc, char **argv) { MPI::Init(argc, argv); // inicijalizacija int mojID = MPI::COMM_WORLD.Get_rank(); int brojProcesa = MPI::COMM_WORLD.Get_size(); if (mojID==0) { … // master process } else { … // slave process } MPI::Finalize(); }

  19. Prevođenje i pokretanje programa >cat hello.c #include <iostream> • #include <mpi.h> • using namespace std; • int main(int argc, char **argv) { • MPI::Init(argc, argv); • int mojID = MPI::COMM_WORLD.Get_rank(); • int brojProcesa = MPI::COMM_WORLD.Get_size(); • cout << "Pozdrav od procesa " << mojID << " od ukupno " • << brojProcesa << " procesa" << endl; • MPI::Finalize(); • } >mpiCC hello.c –o hello • mpirun -machinefile mf -np 4 ./hello • Pozdrav od procesa 0 od ukupno 4 procesa • Pozdrav od procesa 1 od ukupno 4 procesa • Pozdrav od procesa 2 od ukupno 4 procesa • Pozdrav od procesa 3 od ukupno 4 procesa

  20. Osnovni parametri mpirun skripta -np X (X – broj čvorova na kome će se program paralelno pokrenuti, taj broj ne mora biti jednak broju računara u mreži ili ukupnom broju procesora) -machinefile file (file – ime fajla u kome se nalazi spisak računara – čvorova klastera, ukoliko neki od tih čvorova imaju više procesora, potrebno je navesti i broj procesora za dati računar) > cat mfn01n02n03n04n05n06n07n08

  21. Osnovne funkcije • MPI::Init(argc, argv) inicijalizuje proces koji će razmenjivati poruke sa drugim procesima, poziva se iz main() f-je i argumenti su mu argumenti main() f-je. • MPI::Finalize() poziva se na kraju života procesa • MPI::COMM_WORLD.Get_rank();vraća identifikacioni broj procesa • MPI::COMM_WORLD.Get_size();vraća ukupan broj procesa koji učestvuju u izračunavanju (ovaj broj je fiksan, i zadaje se pri pokretanju programa kao parametar skripte mpirun)

  22. Međuprocesna komunikacija • Direktna komunikacija između procesa (Point-to-point) • Sinhrona i Asinhrona komunikacija • Blocking & Nonblocking komunikacija • Kolektivna komunikacija • Sinhronizacija • Kolektivne operacije

  23. Point-to-point: MPI_Send() • MPI::COMM_WORLD.Send(void *podatak, int dužina, MPI_Datatype tip, int dest, int tag) • podatak – pokazivač na memorijsku lokaciju na kojoj se nalaze podaci za slanje • dužina – dužina podatka koji se šalje (dužina kao broj elemenata niza podatak a ne u bajtovima) • MPI_Datatype – tip podatka koji se šalje • dest – rang odredišnog procesa (primaoca) • tag – dodatni identifikator podatka

  24. Point-to-point: MPI_Recv() • MPI::COMM_WORLD.Recv(void *podatak, int dužina, MPI_Datatype tip, int src, int tag) • podatak – pokazivač na memorijsku lokaciju na kojoj se nalaze podaci za slanje • dužina – dužina podatka koji se šalje (dužina kao broj elemenata niza podatak a ne u bajtovima) • MPI_Datatype – tip podatka koji se šalje • src – rang pošiljaoca • tag – dodatni identifikator podatka

  25. sinhrona / asinhrona komunikacija Redosled pristizanja poruka odgovara redosledu slanja Pristizanje poruka ne mora biti sinhronizovano sa slanjem

  26. blocking / non-blocking • BlockingFunkcija je blokirana dok poruka ne bude odaslata ili primljena • Non-blockingFunkcija po slanju prepušta programu dalje izvršavanje, ne vodeći računa o tome da li je slanje poruke završeno

  27. Kolektivna komunikacija • Svi procesi u komunikatoru pozivaju funkciju • Procesi nastavljaju rad tek kad svi izađu iz funkcije • Nema oznake komunikacije (tag) • Tri tipa kolektivne komunikacije

  28. Broadcast Scatter Gather Broadcast, Scatter, Gather

  29. Kolektivne operacije • MPI::COMM_WORLD.Reduce (sendbuf,recvbuf,count,datatype,op,root) • Računa rezultat podataka iz grupe procesa • Rezultat upisuje u recvbuf koji prima samo proces root • Operacije (op): • Globalni maksimum, minimum • Zbir, proizvod • Logičke operacije • Korisnički definisane (user-defined)

  30. Kolektivne operacije Reduce() Reduce

  31. MPI (Tipovi podataka)

  32. Analiza pre kodiranja Pre pisanja paralelnog programa potrebno je: • U potpunosti razumeti sekvencijalno rešenje problema • Izvršiti analizu različitih algoritamskih strategija • Uporediti model deljene memorije (npr. pthreads, open-MP,...) ili model distribuirane memorije (MPI) • Uporediti razne tipove komunikacija

  33. Svarog.etf.bg.ac.yu Svarog je Klaster računar ETF-a na kome će biti demonstrirani primeri MPI programa Računar se sastoji od 8 čvorova (DELL PowerEdge SC500 (Pentium III, 512KB Cache, 1GHz, 512MB SDRAM, 20GB HDD) + MASTER NODE ( DELL PowerEdge 2500 (Pentium III, 256KB cache, 1GHz, 1GB SDRAM, 54GB HDD)... (Myricom Switch) + gomila kablova!

  34. Svarog.etf.bg.ac.yu

  35. Svarog.etf.bg.ac.yu

  36. Distribuirana matrica class distrGustaMatrica : public gustaMatrica { …. public: …. void MPI_Send(unsigned destination) const; void MPI_Recv(unsigned source); void MPI_Bcast(unsigned rank); …. };

  37. Direktna metoda – Kramer • Složenost O(n3) – primer je nerealan! • Nije primenljiva za velike sisteme • Dobar primer za kolektivnu komunikaciju • Ideja algoritma: • Master proces učitava ili generiše sistem jednačina • Broadcast metodom šalje matricu sistema i slobodan vektor svim nodovima • Slave procesi primaju matricu sistema i slobodan vektor i čekaju komande • Master javlja slave procesima koje determinante da računaju • Master i sam računa neke od determinanti • Slave vraćaju izračunate rezultate • Master skuplja rezultate i tumači ih (deli dobijene rezultate sa determinantom sistema)

  38. Kramer – main() int main(int argc, char **argv) { try { MPI::Init(argc,argv); int rank,size; rank=MPI::COMM_WORLD.Get_rank(); size=MPI::COMM_WORLD.Get_size(); if (rank==0) master(size,size_n); else slave(rank); MPI::Finalize(); } catch( int err ) { cerr << "ERROR!! " << err << endl; } }

  39. Kramer – master() bool master(unsigned np,unsigned n) { BROADCAST // posalji matricu sistema i slobodan vektor processor=1 for (int i=-1;i<int(n);i++) { // -1 oznacava racunanje det sistema SEND // slave procesu (procesor) redni broj kolone koja // se menja slobodnim vektorom processor++ // promena slave() procesa if (processor==np) { // kada se svi slave() procesi zaposle master() proces moze // izracunati jednu iteraciju i++; // preskace se iteracija (jer je racuna master) if (i==n) // ukoliko su sve det izracunate izadji iz petlje break; … 1/2

  40. Kramer – master() …. A.izvadiKolonu(i,tmp); // zamena kolone i racunanje determ. A.zameniKolonu(i,b); determinante[iter]=determinanta(A); jednacine[iter]=i; iter++; A.zameniKolonu(i,tmp); processor=1; } } …. // MASTER SALJE SVIM SLAVE PROCESIMA SIGNAL TERMINATE … // MASTER PRIKUPLJA PODATKE OD SLAVE PROCESA … // DELJENJEM SA DETERMINANTOM SISTEMA DOBIJA RESENJA // SISTEMA } } …. } // master() 2/2

  41. Kramer – slave() void slave(unsigned rank) { BROADCAST METODOM PRIMA PODATKE OD MASTER PROCESA while ( true ) { // u beskonacnoj petlji prima komande od master procesa // o koloni koju treba da obradi RECIVE if (jednacina==TERMINATE) // slucaj kada se prekida slave() break; if (jednacina==-1) { // slucaj racunanja det. sistema … } else { 1/2

  42. Kramer – slave() … // zamenjuje zadatu kolonu u matrici sistema i racuna // determinantu tako modifikovane matrice … } // else } // while() // Vraca rezultate MASTER procesu MPI::COMM_WORLD.Send( &iter, 1, MPI::UNSIGNED, 0, 0); MPI::COMM_WORLD.Send( determinante, iter, MPI_T, 0, 0); MPI::COMM_WORLD.Send( jednacine, iter, MPI::UNSIGNED, 0, 0); } // slave() 2/2

  43. Jakobijev iterativni metod • Dovoljan uslov konvergencije ove metode je dijagonalna dominantnost matrice sistema • Ideja algoritma: • Master proces učitava ili generiše sistem jednačina • Master priprema svoj deo matrice za iterativni postupak • Master šalje komandu slave procesima da izračunaju normu svog dela distribuirane matrice • Master računa normu svog dela matrice • Master prima odgovore, poredi rezultate i računa konačnu normu matrice, na osnovu koje dobija kriterijum zaustavljanja • Master u for petlji šalje komande slave procesima da rade iteracije nad svojim delom matrice, i sam radi iteraciju nad svojim delom matrice • Master skuplja rezultate i poredi uzastopne iteracije • Slave analizira komande Master-a i izvršava ih

  44. Jacobi – master() bool master(unsigned np, unsigned size_n, unsigned size_m) { UCITAVA ILI GENERISE MATRICU, DELI JE NA POTREBAN BROJ DELOVA SALJE DELOVE MATRICE SLAVE() PROCESA PRIPREMA SVOJ DEO MATRICE ZA ITERATIVNI POSTUPAK SALJE KOMANDU SLAVE() PROCESIMA DA RACUNAJU NORMU SVOG DELA MATRICE SAM RACUNA NORMU SVOG DELA MATRICE POREDI IZRACUNATE NORME I ODREDJUJE KRITERIJUM ZAUSTAVLJANJA … 1/2

  45. Jacobi – master() … ITERIRA DO MAXITER (ILI DOK NIJE ISPUNJEN KRITERIJUM ZAUSTAVLJANJA) for (iter=0; iter<MAXITER; iter++ ) { SALJE KOMANDU SLAVE PROCESIMA DA RACUNAJU ITERACIJU sendCommand(CMD_ITERACIJA, np); ČUVA PODATKE PRETHODNE ITERACIJE SKUPLJA IZRAČUNATE PODATKE PROVERAVA DA LI JE ISPUNJEN KRITERIJUM ZAUSTAVLJANJA I UKOLIKO JE POTREBNO IZLAZI IZ ITERATIVNE PETLJE } // for iter ŠALJE KOMANDU TERMINATE SVIM SLAVE() PROCESIMA sendCommand(CMD_TERMINATE_PROCESS,np); } // master() 2/2

  46. Jacobi – slave() void slave(unsigned rank) { RECV – PRIMA SVOJ DEO MATRICE PRIPREMA SVOJ DEO MATRICE ZA JAKOBIJEV POSTUPAK PETLJA SE VRTI SVE DOK SLAVE() NE PRIMI KOMANDU TERMINATE while ( !terminate ) { RECV - PRIMA KOMANDU switch (COMMAND) { // ANALIZA KOMANDE case CMD_ITERACIJA: IZVRŠI ITERACIJU case CMD_NORMA_REDOVA: IZRAČUNAJ NORMU … 1/2

  47. Jacobi – slave() … case CMD_PRINT: ŠTAMPAJ DEO MATRICE case CMD_TERMINATE_PROCESS: PREKINI PROCES ČEKANJA NOVIH KOMANDI terminate=true; } // switch } // while } 2/2

More Related