Upload
phamcong
View
226
Download
3
Embed Size (px)
Citation preview
Višeprocesorska racunala i grozdovi« Numericke metode »
Ivo Batistic
Fizicki odsjek, PMFSveucilište u Zagrebu
predavanja 2007
Pregled predavanja
Uvod - najbrža racunala
Arhitektura superracunala
"Superracunala" u Hrvatskoj
Paralelno izvodenje poslova
OpenMP
MPI
Zakljucak
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
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 %
. . . . . .
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 %
. . . . . .
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.
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)
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.
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
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.
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.
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.
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.
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, . . .
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 ?
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 ?
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.
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
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
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
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.
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,. . . )
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
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
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
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
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
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.
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.
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.