30
Višeprocesorska raˇ cunala i grozdovi « Numeriˇ cke metode » Ivo Batisti´ c Fiziˇ cki odsjek, PMF Sveuˇ cilište u Zagrebu predavanja 2007

Programiranje za multiprocesorska računala i grozdove

Embed Size (px)

Citation preview

Page 1: Programiranje za multiprocesorska računala i grozdove

Višeprocesorska racunala i grozdovi« Numericke metode »

Ivo Batistic

Fizicki odsjek, PMFSveucilište u Zagrebu

predavanja 2007

Page 2: Programiranje za multiprocesorska računala i grozdove

Pregled predavanja

Uvod - najbrža racunala

Arhitektura superracunala

"Superracunala" u Hrvatskoj

Paralelno izvodenje poslova

OpenMP

MPI

Zakljucak

Page 3: Programiranje za multiprocesorska računala i grozdove

Koja su danas najbrža racunala ?

Podaci o trenutno najbržim racunalima mogu se saznati na web-adresi:http://www.top500.org. Prema podacima iz studenog 2006:

1. BlueGene/L - eServer Blue Gene, LLNL (USA),131072 procesora

2. Red Storm, Opteron 2.4 GHz dual core, Sandia NL (USA),26544 procesora

3. BGW - eServer Blue Gene Solution, IBM (USA),40960 procesora

Page 4: Programiranje za multiprocesorska računala i grozdove

Statistika

Broj superracunala po zemljama:

Zamlja Broj racunala udioUSA 309 61.80 %

V. Britanija 30 6.00 %Japan 30 6.00 %

Njemacka 18 3.60 %Kina 18 3.60 %

France 12 2.40 %India 10 2.00 %

. . . . . .

Page 5: Programiranje za multiprocesorska računala i grozdove

Statistika

Kakva su to racunala ?

Procesor Broj racunala udioIntel IA-32 120 24.00 %

AMD x86_64 113 22.60 %Intel EM64T 108 21.60 %

Power 91 18.20 %. . . . . .

Koji je operacijski sustav ?

OS Broj racunala udioLinux 376 75.20 %Unix 86 17.20 %

. . . . . .

Page 6: Programiranje za multiprocesorska računala i grozdove

Arhitektura superracunala

Racunalni grozd (klaster). Skupina više racunala medusobnopovezanih brzim vezama. (MIMD - Multiple instructionstream, multiple data stream)

Multiprocesorska racunala. Racunalo koje je izgradeno iz višeprocesora. Jedan je operacijski sustav za sveprocesore. Procesori dijele zajednicku memoriju. (SMP- Symmetric multiprocessing). Racunala gradena od

procesora bazirane na više jezgri ili mogucnošcu izvršavanja

više niti/poslova (dual-core, quad-core, . . . , multithreading,

hyperthreading) mogu se tretirati kao SMP racunala.

Vektorska racunala. Jedan procesor je sposoban izvršavatioperacije na velikom broju podataka (vektoru). (SIMD -Single Instruction, Multiple Data).

Tipicno grozdovi i SMP racunala gradena su od vektorskih procesora.

Page 7: Programiranje za multiprocesorska računala i grozdove

Postoje li u Hrvatskoj superracunala ?

Postoji više grozdova:

◮ Isabella grozd (SRCE): http://www.srce.hr/isabella/cca. 100 racunala, 352 procesora, 0.5 TB radna memorija(RAMa).

◮ eLab grozd (IRB): http://www.irb.hr/hr/cir/projects/internal/elab/

◮ grozd.ifs.hr (11 racunala s dvostrukim opteron procesorom).

◮ ....

(Ništa što ulazi medu 500 najbržih)

Page 8: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Obicno zbrajanje dva broja na superracunalu traje jednako brzokao zbrajanje na obicnom racunalu (ako se radi o istoj klasiprocesora).

◮ Brzina na superracunalu se postiže tek obradom velikog brojapodataka.

◮ Obrada velikog broja podataka cijepa se na manje poslove(obrada manjeg dijela podataka) koje mogu raditi pojediniprocesori ili druga racunala u grozdu paralelno.

Page 9: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

Kako zbrojiti brojeve od 1 do 100?

z = ∑i=1,100

i

z0 = ∑i=1,10

i

z1 = ∑i=11,20

i

z2 = ∑i=21,30

i

. . .

z9 = ∑i=91,100

i

z = z0 + z1 + · · ·+ z9

Page 10: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Tipicno velike kolicine podataka obraduju se unutar petlji(DO-petlja).

◮ Cijepanje poslova poslova podrazumjeva preuredenje petlje takoda se dio petlje izvodi je jednom racunalu (procesoru), drugi dioperlje na drugom racunalu (procesoru) itd.

◮ Nije moguce svaku petlju razlomiti na manje pogodne zaparalelno izvodenje.

◮ Postoje petlje u kojima izvodenje u sijedecem koraku ovisi orezultatu u dobivenom prethodnom koraku. Ovakve perlje se nemogu paralelno izvoditi.

Page 11: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

U oba slucaja ispisuje se isti rezultat, ali u jednom slucaju je moguceprevesti program na paralelno izvodenje, dok u drugom slucaju nije.

sum = 0DO i = 1,100

sum = sum + B(i)END DOPRINT *,sum

Može se izvoditi paralelno

A(1) = B(1)DO i = 2,100

A(i) = A(i-1) + B(i)END DOPRINT *,A(100)

Ne može se izvoditi paralelno

Mogucnost paralelnog izvodenja ovisi kako su programi napisani!

Medutim, postoje i takvi problemi koji i uz najbolje napisani programnije moguce paralelno izvoditi.

Page 12: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Pojedine matematicke operacije (dijagonalizacija matrica,rješavanje sustava linearnih jednadžvi, itd.) mogu seizprogramirati na racunalu na više nacina.

◮ Nacin ili procedura koja nam govori na koji nacin treba provestiodredenu matematicku operaciju nazivamo numerickimalgoritmom ili numerickom metodom.

◮ Postoje numericki algoritmi posebno prilagodeni da se iskoristesposobnosti vektorskog izvodenja operacija na procesoru.

◮ Pojavom višeprocesorkih racunala i grozdova, poceli su serazvijati numericki algoritmi pogodni za paralelno izvodenjeoperacija.

Page 13: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Kada se pokrene izvodenje programa na jednom racunalu(procesoru), taj program/proces treba pokrenuti drugeprograme/procese na ostalim racunalima ili procesorima.

◮ Ako je rijec i grozdu, onda je potrebno i dio pocetnih podataka izmemorije (RAMa) jednog racunala prenjeti u memoriju drugogracunala. Ti procesi (programi) tijekom izvodenja trebaju jedandrugom dostavljati podatke.

◮ Paralalno izvodenje podrazumjeva komunikaciju (razmjenuporuka i podataka) izmedu pojedinih procesa na jednomvišeprocesorkom racunalu ili više razlicitih racunala u grozdu.

◮ Ove poslove komunikacije treba izprogramirati i oni postaju dionašeg programa koji izvodi odredenu operaciju na "paralelnom"racunalu.

Page 14: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Komunikacija izmedu procesa može se odvojiti od ostatkaprograma i prikazati kao pozivi na neke komunikacijskepodprograme ili funkcije.

◮ A te komunikacijske podprograme i funkcije možemo objediniti ujedno zajednicku biblioteku koja se može trajno korisititi zapisanje programa na ovim višeprocesorkim racunalima iligrozdovima.

◮ Postoji veci broj komunikacijskih biblioteka za pisanje programana višeprocesorkim racunalima i/ili grozdovima:

◮ PVM (Parallel Virtual Machine)◮ MPI (Message Passing Interface)◮ OMP (OpenMP, Open Multi-Processing) - samo za SMP racunala◮ HPF (High performance fortran), f95, . . .

Page 15: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Obicni (fortranski,c,c++,. . . ) program nece se na grozdu ilivišeprocesorskom racunalu izvoditi brže.

◮ Racunalni program potrebno je prilagoditi paralelnom izvršavanju.Potrebno iskoristiti kumunikacijske biblioteke za pokretanje višeparalelnih procesa/programa na drugim racunalima/procesorima.Takoder, potrebno je razmjenjivati podatke medu njima.

◮ Sve to cini programiranje za paralelno izvodenje dosta složenimposlom.

Jel’ moguce sve to pojednostaviti ?

Page 16: Programiranje za multiprocesorska računala i grozdove

Paralelno izvodenje poslova

◮ Obicni (fortranski,c,c++,. . . ) program nece se na grozdu ilivišeprocesorskom racunalu izvoditi brže.

◮ Racunalni program potrebno je prilagoditi paralelnom izvršavanju.Potrebno iskoristiti kumunikacijske biblioteke za pokretanje višeparalelnih procesa/programa na drugim racunalima/procesorima.Takoder, potrebno je razmjenjivati podatke medu njima.

◮ Sve to cini programiranje za paralelno izvodenje dosta složenimposlom.

Jel’ moguce sve to pojednostaviti ?

Page 17: Programiranje za multiprocesorska računala i grozdove

OpenMP

◮ OpenMP je komunikacijska biblioteka za paralelno izvodenjeposlova na SMP racunalu (višeprocesorsko racunalo szajednickom memorijom). Sve o OpenMP može se naci naweb-adresi: http://www.openmp.org/.

◮ Fortranski (ili C, C++, . . . ) program potrebno je minimalnomodificirati . Tipicno modifikacija se sastoji od posebnihkomentara koji svi zapocinju s !$omp .

◮ Komentari se postavljaju ispred i iza dijela programa koji se želiparalalno izvoditi. Osim kometara u programu se mogu koristiti idodatne funkcije iz OpenMP biblioteke.

◮ Fortranski prevodilac taj (omedeni) dio fortranskog programapreuredi u novi fortranski program koji sadrži pozive nakomunikacijske funkcije iz OpenMP biblioteke, te taj novi programprevede i poveže u izvršni kod.

Page 18: Programiranje za multiprocesorska računala i grozdove

Primjer - OpenMP

PROGRAM helloUSE omp_libIMPLICIT NONEINTEGER:: id, broj_niti!$OMP PARALLEL PRIVATE(id) ! id je privatna varijabla

! za svaku nit.id = OMP_GET_THREAD_NUM() ! koja sam ja nit ?

PRINT ’(A,I2)’,’Pozdrav svijetu od niti broj:’, id!$OMP BARRIER ! sinkronizacija:

! niti cekaju jedna drugu.IF ( id == 0 ) THEN

broj_niti = OMP_GET_NUM_THREADS()PRINT ’(A,1X,I2,1X,A)’,’Postoji’, broj_niti, ’niti’

END IF!$OMP END PARALLEL

END PROGRAM

prompt> ifort -openmp 01-hello.f90 -o 01-hello.x

Page 19: Programiranje za multiprocesorska računala i grozdove

OpenMP

◮ OpenMP biblioteka je kod intelovog prevodioca implementiranapreko modula kojeg navodimo na pocetku programa

◮ Osim navodenja uporabe modula potrebano je procesiratifortranski program (OMP-komentare) što se postiže -openmpopcijom kod prevodenja.

◮ Da bi se program izvodio u paraleli potrebno je navesti broj nitikoje želimo pokrenuti (koristiti). To se postiže pomocu shellvarijable OMP_NUM_THREADS.

prompt> export OMP_NUM_THREADS=4 # za bash shell

prompt> setenv OMP_NUM_THREADS 4 # ili za C shell

prompt> ./01-hello.xPozdrav svijetu od niti broj: 0Pozdrav svijetu od niti broj: 1Pozdrav svijetu od niti broj: 2Pozdrav svijetu od niti broj: 3Postoji 4 niti

Page 20: Programiranje za multiprocesorska računala i grozdove

Primjer - OpenMP

PROGRAM zbrojUSE omp_libIMPLICIT NONEINTEGER :: iREAL :: sumasuma = 0.0!$OMP PARALLEL DO PRIVATE(i) REDUCTION(+:suma)DO i=1,10000

suma = suma + REAL(i)**1.2END DO!$OMP END PARALLEL DOPRINT ’(A,1X,ES15.7)’,’suma =’,suma

END PROGRAM

prompt> ifort -openmp 02-zbroj.f90 -o 02-zbroj.xprompt> ./02-zbroj.xsuma = 2.8683046E+08

Page 21: Programiranje za multiprocesorska računala i grozdove

MPI - Message Passing Interface

MPI ili Message Passing Interface je vrst protokola (jezika)komunikacije medu razlicitim procesima na jednom ili više racunala.Protokol je definiran standardom koji se može naci na web-adresi:http://www.mpi-forum.org/docs/. Unutar standarda su usuglašenaimena funkcija i potprograma, tip i vrsta argumenata te što pojedinafunkcija ili potprogram radi.

Postoji nekoliko razlicitih verzija MPI biblioteke.

◮ LAM/MPI (http://www.lam-mpi.org/)

◮ Open MPI (http://www.open-mpi.org/)

◮ MPICH2 (http://www-unix.mcs.anl.gov/mpi/mpich/)

◮ . . .

Sve verzije slijede dogovoreni standard. Program napisan u jednojverziji MPI-a, jednako dobro radi pod drugom verzijom MPI-a.

Page 22: Programiranje za multiprocesorska računala i grozdove

MPI - Message Passing Interface

◮ MPI zahtijeva modifikaciju fortranskog programa◮ Tipicno potrebno je ubaciti pozive na nekoliko potprograma:

◮ MPI_INIT : Iniciranje, pokretanje drugih procesa na drugimracunalima ili procesorima.

◮ MPI_FINALIZE : završetak paralelnog izvršavanja - gašenjeprocesa.

◮ MPI_COMM_SIZEkao odredivanje broja procesa koji rade◮ MPI_COMM_RANKidentifikacija pojedinog procesa◮ Po potrebi razliciti podprogrami za razmjenu/distribuciju podataka◮ Takoder MPI_REDUCEpotprogram za prikupljanje podataka iz

raznih procesa.◮ . . .

◮ MPI ima posebno okruženje u kojem se koristi.◮ postoje naredbe kojima se prevodi program

(mpif77,mpif90,mpicc,. . . )◮ te postoje naredbe za pokretanje/izvršavanje programa

(mpirun,mpiexec,. . . )

Page 23: Programiranje za multiprocesorska računala i grozdove

Primjer - MPI

PROGRAM helloINCLUDE ’mpif.h’INTEGER :: broj_procesa, moj_broj, greska, rcCALL MPI_INIT(greska)IF (greska /= 0) THEN

PRINT *,’Greska kod pokretanja programa. Zavrsavam.’CALL MPI_ABORT(MPI_COMM_WORLD, rc, greska)

END IF! tko sam ja ?CALL MPI_COMM_RANK(MPI_COMM_WORLD, moj_broj, greska)! koliko procesaCALL MPI_COMM_SIZE(MPI_COMM_WORLD, broj_procesa, gresk a)

PRINT ’(A,I3,A,I3)’, ’Od ukupnog broj procesa =’, &broj_procesa,’ ja sam =’,moj_broj

CALL MPI_FINALIZE(greska)END PROGRAM

Page 24: Programiranje za multiprocesorska računala i grozdove

Kako pokrenuti i izvoditi MPI program

◮ Postavljanje okruženja. Pretpostavit cemo da je MPI instaliran uimeniku /opt/mpich/.

prompt> setenv PATH "opt/mpich/bin:${PATH}:." # za C-shell

prompt> export PATH="opt/mpich/bin:${PATH}:." # za bash-shell

◮ Prevodenje u izvrši program

prompt> mpif90 03-hello_mpi.f90 -o 03-hello_mpi.x

Page 25: Programiranje za multiprocesorska računala i grozdove

Kako pokrenuti i izvoditi MPI program

◮ Postavljanje tajne šifre u datoteku dostupnu svim procesima:

prompt> touch /.mpd.confprompt> chmod 600 /.mpd.conf

s tekst-uredivacem upisati u .mpd.conf liniju, kao nprMPD_SECRETWORD=mr45-j9z

◮ Pokretanje nadzornog programa koji pokrece ostale

prompt> mpd &

◮ izvršavanje

prompt> mpirun -np 3 03-hello_mpi.xOd ukupnog broj procesa = 3 ja sam = 1Od ukupnog broj procesa = 3 ja sam = 0Od ukupnog broj procesa = 3 ja sam = 2

Page 26: Programiranje za multiprocesorska računala i grozdove

Primjer - MPI

PROGRAM broj_piUSE mpiIMPLICIT NONEREAL(KIND=KIND(1.0D0)),PARAMETER :: dpi = 3.14159265358 9793238462643_8REAL(KIND=KIND(1.0D0)) :: moj_pi,pi,dx,sum,xINTEGER :: broj_intervala,moj_id,broj_procesa,i,rc,gr eska

CALL MPI_INIT( greska )CALL MPI_COMM_RANK( MPI_COMM_WORLD, moj_id, greska )CALL MPI_COMM_SIZE( MPI_COMM_WORLD, broj_procesa, gresk a )broj_intervala = 1000000CALL MPI_BCAST(broj_intervala,1,MPI_INTEGER,0,&

MPI_COMM_WORLD,greska)dx = 1.0D0/broj_intervalasum = 0.0D0DO i=moj_id+1,broj_intervala, broj_procesa

x = dx*(REAL(i,KIND=KIND(1.0D0))-0.5D0)sum = sum+f(x)

ENDDOmoj_pi = dx*sum

Page 27: Programiranje za multiprocesorska računala i grozdove

Primjer - MPI

PROGRAM broj_pi...

CALL MPI_REDUCE(moj_pi,pi,1,MPI_DOUBLE_PRECISION,&MPI_SUM,0, MPI_COMM_WORLD,greska)

IF (moj_id == 0) THENPRINT ’(A,F19.16)’,’Pi je priblizno =’,piPRINT ’(A,F19.16)’,’Ucinjena greska je =’,ABS(pi-dpi

ENDIFCALL MPI_FINALIZE(rc)

CONTAINSFUNCTION f(x) RESULT (y)

REAL(KIND=KIND(1.0D0)),INTENT(IN) :: xREAL(KIND=KIND(1.0D0)) :: yy = 4.D0 / (1.D0 + x*x)

END FUNCTIONEND PROGRAM

prompt> mpif90 04-pi_mpi.f90 -o 04-pi_mpi.xprompt> mpirun -np 2 04-pi_mpi.xPi je priblizno = 3.1415926535899388Ucinjena greska je = 0.0000000000001457

Page 28: Programiranje za multiprocesorska računala i grozdove

Prednosti i mane

◮ PVM je protokol slican MPI, ali je fleksibilniji jer podržavaparalelno izvodenje razlicitih programa.

◮ U slucaju OpenMP i MPI, istovjetne kopije izvršnog programa seizvode na razlicitim racunalima ili procesorima. To može biti iprednost jer je jednu zajednicku verziju programa je lakšeodržavati.

◮ MPI traži izvršavanje programa na više racunala, što može bitiproblem ako racunala traže login šifru. Grozdovi su tipicnoizolirani od ostatka interneta putem jednog frontalnog racunalakoje je ujedno i vatrozid. Sva racunala unutar grozda dijele istidiskovni prostor i moguce ih je koristiti bez upisa šifre.

Page 29: Programiranje za multiprocesorska računala i grozdove

Prednosti i mane

◮ Kos SMP racunala, operacijeki sustav omogucuje preraspodjeluprocesa po raspoloživim procesorima prema njihovu opterecenju.Ta preraspodjela nije moguca unutar racunala u grozdu.

◮ Modifikacija operacijskog sustava Mosix (openmosix) omogucujepreraspodjelu procesa unutar grozda. Procesi se mogu seliti sjednog racunaala na drugo prema trenutnom opterecenju.

Page 30: Programiranje za multiprocesorska računala i grozdove

Prednosti i mane

◮ Procesi koji obraduju velike kolicine podataka mogu zagušitimemorijsku sabirnicu na SMP racunalu, što rezultira uusporavanju racunala. U tom smislu racunanje na grozdu jepovoljnije.

◮ Razmjena velikih kolicina podataka izmedu racunala u grozdumože zagušiti mrežu koja ih povezuje. To ce usporiti izvršavanjeprograma. Potrebno je medusobnu razmjenu podataak reduciratina minimum.