Zaawansowane metody obliczeń numerycznychkft.umcs.lublin.pl/baran/epk/zmon/zmon.pdf… przykłady...
Transcript of Zaawansowane metody obliczeń numerycznychkft.umcs.lublin.pl/baran/epk/zmon/zmon.pdf… przykłady...
Zaawansowanemetodyobliczeńnumerycznych
2018
Zaawansowane…?
• Algorytmy(skuteczniejsze)• Dokładnośćobliczeń!• Szybkośćobliczeń• Obliczeniarównoległe• Paradygmatyprogramowania• Językiprogramowania• Biblioteki• Narzędziaprogramisty• Elementyteoriiobliczeń
�2
…przykłady
• MnożeniemacierzyA1A2…An-1An• Numeryczneobliczaniepochodnych,całek.MetodaRichardsona.
• Obliczaniepinapprocesorach.• Fortran,java,prolog,haskel,…• Typydefiniowane,parametryzowane• BLAS,Lapack,BLACS,MKL,itd.• make,gawk,sed,emacs• Problemstopu.MaszynaTuringa.Rozstrzygalność.
�3
MNOŻENIE2MACIERZY-KOSZTMnożeniemacierzy
�4
Macierze.PseudokodC=ABKosztmnożenia2macierzy.(Cormen,Leiserson,Rivest)
MATRIX-MULTIPLY(A, B)1 if columns[A] ≠ rows[B]2 then error "incompatible dimensions"3 else for i ← 1 to rows[A]4 do for j ← 1 to columns[B]5 do C[i, j] ← 06 for k ← 1 to columns[A]7. do C[i, j] ← C[i, j] + A[i, k] ° B[k, j]8 return C
KOSZT: ~ p*q*r
�5
MNOŻENIEWIELUMACIERZYMnożeniemacierzy
�6
TEST(2-3minuty)
Proszepoliczyć
JAKIJESTKOSZTMNOŻENIA
A1(300,10)A2(10,300)A3(300,10)?
�7
A1(300,10)A2(10,300)A3(300,10)
• [A1(300,10)xA2(10,300)]xA3(300,10)=>• 300*10*300+300*300*10=1800000
• A1(300,10)x[A2(10,300)xA3(300,10)]• 10*300*10+300*10*10=60000
• 1800000/60000=3000razyszybciej!�8
ALGORYTMMnożeniemacierzy
�9
A1A2A3A4A5
�10
MEMOIZATION-WYNIKIPOWTARZANE
Mnożeniemacierzy
�11
memoization(WIKIPEDIA)
N o t t o b e c o n f u s e d w i t h Memorization.
In computing, memoization or memoisation is an optimization technique used primarily to speed up computer programs by storing the results of expensive function calls and returning the cached result when the same inputs occur again.
�12
Silnia…Consider the following pseudocode function to calculate the factorial of n:
function factorial (n is a non-negative integer) if n is 0 then return 1 [by the convention that 0! = 1] else return factorial(n – 1) times n [recursively invoke factorial with the parameter 1 less than n] end ifend function
�13
Silnia…
Depending on the machine, this cost might be the sum of:
1. The cost to set up the functional call stack frame.2. The cost to compare n to 0.3. The cost to subtract 1 from n.4. The cost to set up the recursive call stack frame. (As
above.)5. The cost to multiply the result of the recursive call to factorial by n.
6. The cost to store the return result so that it may be used by the calling context.
�14
Silnia…A memoized version of the factorial function follows:
function factorial (n is a non-negative integer) if n is 0 then return 1 [by the convention that 0! = 1] else if n is in lookup-table then return lookup-table-value-for-n else let x = factorial(n – 1) times n [recursively invoke factorial with the parameter 1 less than n] store x in lookup-table in the nth slot [remember the result of n! for later] return x end ifend function
�15
POWRÓTDOMACIERZYMnożeniemacierzy
�16
A1A2A3A4A5
�17�17
A1A2A3A4A5
�18
A1A2A3A4A5
�19
m(i,j)=0jeślii=j=min[m(i,k)+m(k+1,j)+pipk+1pj+1]jeślii<j (*)
Pseudokod…
MATRIX-CHAIN-ORDER(p)1 n ← length[p] - 12 for i ← 1 to n3 do m[i, i] ← 04 for l ← 2 to n ▹l is the chain length.5 do for i ← 1 to n - l + 16 do j ← i + l - 17 m[i, j] ← ∞8 for k ← i to j - 19 do q ← m[i, k] + m[k + 1, j] + pi-1 pkpj10 if q < m[i, j]11 then m[i, j] ← q12 s[i, j] ← k13 return m and sMATRIX-CHAIN-ORDERdeterminestheoptimalnumberofscalarmultiplicationsneededtocomputeamatrix-chainproduct.
�20
MATRIX-CHAIN-ORDER
Thealgorithmfirstcomputesm[i,i]=0fori=1,2,...,n(theminimumcostsforchainsoflength1)inlines2-3.Itthenusesrecurrence(*)tocomputem[i,i+1]fori=1,2,...,n-1(theminimumcostsforchainsoflengthl=2)duringthefirstexecutionoftheloopinlines4-12.Thesecondtimethroughtheloop,itcomputesm[i,i+2]fori=1,2,...,n-2(theminimumcostsforchainsoflengthl=3),andsoforth.Ateachstep,them[i,j]costcomputedinlines9-12dependsonlyontableentriesm[i,k]andm[k+1,j]alreadycomputed.
�21
Pseudokod…
PRINT-OPTIMAL-PARENS(s, i, j)1 if i = j2 then print "A"i3 else print "("4 PRINT-OPTIMAL-PARENS(s, i, s[i, j])5 PRINT-OPTIMAL-PARENS(s, s[i, j] + 1, j)6 print ")"
�22
Constructinganoptimalsolution
AlthoughMATRIX-CHAIN-ORDERdeterminestheoptimalnumberofscalarmultiplicationsneededtocomputeamatrix-chainproduct,itdoesnotdirectlyshowhowtomultiplythematrices.Itisnotdifficulttoconstructanoptimalsolutionfromthecomputedinformationstoredinthetables[1…n,1…n].Eachentrys[i,j]recordsthevalueofksuchthattheoptimalparenthesizationofAiAi+1…AjsplitstheproductbetweenAkandAk+1.Thus,weknowthatthefinalmatrixmultiplicationincomputingA1…AnoptimallyisA1…As[1,n]As[1,n]+1…An.Theearliermatrixmultiplicationscanbecomputedrecursively,sinces[1,s[1,n]]determinesthelastmatrixmultiplicationincomputingA1‥As[1,n],ands[s[1,n]+1,n]determinesthelastmatrixmultiplicationincomputingAs[1,n]+1‥An.Thefollowingrecursiveprocedureprintsanoptimalparenthesizationof〈Ai,Ai+1,...,Aj〉,giventhestablecomputedbyMATRIX-CHAIN-ORDERandtheindicesiandj.TheinitialcallPRINT-OPTIMAL-PARENS(s,1,n)printsanoptimalparenthesizationof〈A1,A2,...,An.
�23
PROGRAMOWANIEDYNAMICZNE(PDLUBDP)
Mnożeniemacierzy
�24
Zadania(Cormen,…,15.2.1,15.2.2)
• Znaleźćoptymalnąkolejnośćmnożeniaciągumacierzy,którychwymiarytworząsekwencję〈5,10,3,12,5,50,6〉.
• PodaćrekurencyjnyalgorytmMATRIX-CHAIN-MULTIPLY(A,s,i,j),wykonującyoptymalnemnożenieciągumacierzyA1,A2,...,An mając tablicę s otrzymaną w algorytmie MATRIX-CHAIN-ORDER i indeksy i, j. (Wywołanie początkowe: MATRIX-CHAIN-MULTIPLY(A, s, 1, n))
�25
OBLICZENIA-TYPYObliczeniarównoległe
�26
OBLICZENIARÓWNOLEGŁE
�27
Podział• Przetwarzanie
– KomputerVonNeumanna RAM<-->CPU<-->I/O
– Potokowe,wektorowe RAM+wieleinstrukcjijednocześnie<-->CPU<-->I/O
– Równoległe RAM+wielezadań<-->wielePU<-->I/O
• Architekturakomputerów
• Zadaniowość
�28
JohnvonNeumann(~1940;LANLarch.)
Podziałzewzgl.nazadania
• SISD• SIMD• MISD• MIMD
S=single,I=instruction(s),M=multi,D=data(rysunki:https://computing.llnl.gov/tutorials/parallel_comp/#Abstract)
�29
SISD
�30
SIMD
�31
MISD
�32
MIMD
�33
Podziałzewzgl.napamięć
• Wieleprocesorów– Pamięćwspółdzielona,dzielona,wspólna(shared) (openMP)– Pamięćrozproszona,prywatna
(MessagePassingInterface=MPI) –Mieszaninapowyższych
�34
Wspólnapamięć(UMA)
�35
UMA-Uniformmemoryarchitecture
Pamięćdzielona(NUMA)
�36
NUMA-Nonuniformmemoryarchitecture
Pamięćrozproszona
�37
Distributedmemoryarchitecture
PrawoAmdahl’a
�38
1przyspieszenieobliczeńS=—————1-r
r=ułamekprogramu,którymożnaurównoleglić
-Jeśliprogramniemożebyćrównoległytor=0iS=1
-Jeślicałyprogramjestrównoległytor=1iS=∞
- Jeśli50%programudasieurównoleglićtor=0.5,aS=2
- Jeśliliczbaprocesorówwynosipto1
S=————-r/p+s
gdziesjestułamkiemprocesówsekwencyjnych
PrawoAmdahl’a
• PrzyspieszenieobliczeńrównoległychSp=liczbaprocesoróws=ułamekprocesówsekwencyjnych r=ułamekprocesówrównoległych
S = tsekw/trów = (s + r)/[s + r/p] = 1/[s + (1 - s)/p] --> 1/s, p --> ∞
• Wydajność(efficiency)procesoraP.E.=S/p.P.E. = 1/[p s + (1 - s)]
�39
PrawoAmdahl’a
�40
przyspieszenie S ------------------------------------- p r = .50 r = .90 r = .95 r = .99 ----- ------- ------- ------- ------- 10 1.82 5.26 6.89 9.17 100 1.98 9.17 16.80 50.25 1,000 1.99 9.91 19.62 90.99 10,000 1.99 9.91 19.96 99.02100,000 1.99 9.99 19.99 99.90
PrawoAmdahl’a-przyspieszenie
200 400 600 800 1000n
20
40
60
80
Ss=0.01
s=0.02
s=0.10
p -liczbaprocesorów
przyspieszenieS
�41
Paradygmatyprogramowaniarównoległego
• Macropipelining-potoki.Przykład.
FFTPracaIFFTzewspółczynnikamiFouriera
PU PUPUStrumień
zadań
�42
dodawanie…
• Policzyća[i]=a[i]+a[(i-1MODn)+2],gdziei=1,…,n,a(i)=i.(Inaczej:Dodaćprzesuniętecyklicznieo1wlewoelementymacierzyadoa)
• 1.Wektorowo(f90)
Integer, parameter :: n=100Integer, dimension(n) :: a, aright Do i=1, n a(i) = iEnd Doaright = cshift(a, shift=-1, dim=1)a = a + aright ! Wektorowe dodawanie
�43
dodawanie…
• 2.Równolegle(f90+MPI)
Integer, parameter :: n=100Integer :: VecElem, RVecElemInteger :: MyNode, RNode, LNodeMyNode = whoami() + 1 ! Numery procesów startują z 0VecElem = MyNodeRNode = Mod(MyNode+1,n)+1 ! Nie Rnode = MyNode+1LNode = Mod(MyNode-1+n,n)+1 ! Nie Lnode = MyNode-1Call SentAndGet(VecElem, Lnode, RVecElem, RNode)VecElem = VecElem + RVecElem…! Zbieranie wyników
�44
Zadania
• Zadanie.ZapisaćpoprzedniprogramwjęzykuClubC++.
• PodzielićpracęnadproblememIsingazHamiltonianem
H = K Σi,j si.sjKażdyspinsioddziałujezbezpośrednimisąsiadaminasieci2DoWwęzłachitopologii torusa,napprocesorów.Wykonaćodpowiednirysunek.
�45
PRZYKŁADYAteraz
�46
Maszynywektorowe(potok)
a(i-1),b(i-1)
a(i+3),b(i+3)
a(i),b(i)
a(i+1),b(i+1)
a(i+2),b(i+2)
a(i+3),b(i+3)
JustujeformatDodajemantysyWyrównujepotęgiPorównujepotęgi
! fortranFor i=1 to N do c(i) = a(i) + b(i)End do
1.013x104->0.1013x103->1.013x1040.92x104+0.093x1040.92x104+0.93x103
POTOKDANYCH OPERACJA
CPU
PRZYKŁAD
�47
program hello include 'mpif.h'
integer rank, size, ierror, tag, status(MPI_STATUS_SIZE) character(12) message call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
tag = 100 if (rank .eq. 0) then
message = 'Hello, world'
do i=1, size-1 call MPI_SEND(message, 12, MPI_CHARACTER, i, tag, &
MPI_COMM_WORLD, ierror) enddo
else call MPI_RECV(message, 12, MPI_CHARACTER, 0, tag, &
MPI_COMM_WORLD, status, ierror)
endif print*, 'node', rank, ':', message
call MPI_FINALIZE(ierror)end program hello
Hello(MPI)
�48
Wyliczyćwartośćπ wedługformuły:
π =4
1+ x2dx
0
1
∫
π-MPI
�49
Fortran,π -MPI—1
�50
Fortran,π -MPI—2
�51
Fortran,π -MPI—3
�52
Zadanie
• Napiszprogramobliczeńrównoległych„pi”(lubszkicprogramuwjęzykuludzkim),wykorzystującygeneratorliczblosowychonazwieRand().
• Obliczpi(równolegle),używającRand()ibiorącpoduwagęstosunekpólkwadratuoboku1iokręguopromieniu1.
Patrz:https://pl.wikipedia.org/wiki/Igła_Buffonahttp://mathworld.wolfram.com/BuffonsNeedleProblem.html
�53
!Sekwencyjny(1proces)doj=1,ndoi=1,na(i,j)=FUNC(i,j)enddoenddoFUNCTIONFUNC(I,J)!Cośrobimyza(i,j)END
Macierze(MPI)
i,j
1 n1
n
�54
Równoległy(4procesy)doj=mystart,myenddoi=1,na(i,j)=FUNC(i,j)enddoenddoFUNCTIONFUNC(I,J)!Cośrobimyza(I,j)END
Macierze
mystart myend
�55
SkurczowyalgorytmMD
• MD=moleculardynamics• Zespółn(>>1)oddziałującychczastek.SiłaFidziałanacząstkęi-tą.Równaniaruchu
d2ri(t)/dt2=Fi(R)/mi,gdzier,R,F–wektoryZnaleźćcharakterystykifizyczneukładu.(algorytmskurczowy-->systolicalgorithm)
�56
SkurczowyalgorytmMD
lok
Lat
lok
Lat
lok
Lat
lok
Lat
lok
Lat…
Węzeł:1 2 3 P-1 p
lok=cząstkiprzydzielonedowęzłąLat=cząstki„wędrujące”p=liczbawęzłów
�57
SkurczowyalgorytmMDROUTINENodeStepREPEATCalculateforcesonlocalpartsPerformleap-frogstepforlocalpartUNTILProgramstopsEndRoutineNodeStep
ROUTINECalculateforcesonlocalpartsCalculatecontributionsfromlocalpartsCopylocalparticlesfromrightneighbourandloadintotravelingparticlesDOK=1,p-1Sendtravelingparticlestotheleft(moduloPBC)ReceivedatafromrightneighbourandloadintotravelingparticlesCalculatecontributionstolocalforcesfromtravelingparticlesENDDOENDROUTINECalculateforcesonlocalparts
�58
Modelobliczeńtypumaster-slave
• Procesmaster–rozdzielazadania,rejestrujewynikipracyprocesówslave
• Zadaniawykonywaneprzezprocesyslavemogąbyćróżne(instrukcje
�59
Problemzfizykifazystałej
(MC=MonteCarlo)• Ztw.Blochawynika,żerównanieSchroedingeradlaposzczególnychwektorówBlochakwstrefieBrillouinamożnarozwiązaćniezależnie.JeśliznamyefektywnypotencjałelektronutomasternakazujeniewolnikomzdiagonalizowaćHamiltoniandlaróżnychwektorówk,którewcześniejjeotrzymały,niezależnie.Podiagonalizacjiniewolnikwysyławynikidomistrza,aten,naichpodstawieobliczanp.gęstośćładunku…Jeśliniewolnikówjestmniejniżwektorówk,toposkończeniuswoichobliczeńniewolnikdostajenowekidziaładalej.Poobliczeniuostatniegokmasterliczycopotrzeba.
�60
Literatura
-DesigningandBuildingParallelPrograms".IanFoster.http://www.mcs.anl.gov/~itf/dbpp/
-OverviewofRecentSupercomputers.A.J.vanderSteen,JackDongarra.OverviewRecentSupercomputers.2008.pdf
-MortenHjorth-Jensen.COMPUTATIONALPHYSICS.UniversityofOslo,Fall2008.(Internetedition)
�61
Problemy?
�62
�63
A2A3A4A5
A1A2A3A4A5
A1A2
A3A4
A1A2
A3
A1A2
A2A3
A4
A2A3
A3A4
A5
A3A4 A4A5
A1A2A3A4A5
�64
�65
Przykład
• Inicjujemya[i]=i, i=1,…,N i wykonujemy dodawanie:
FOR i = 1 TO N DO a[i] = a[i] + a[((i − 1) MOD N) + 2];END DO
�66
Data-parallelmodel1 INTEGER, PARAMETER :: N=100 ! Declaration of ! array size2 INTEGER, DIMENSION(N) :: A, ARight ! Declare arrays3 DO I=1, N ! Initialise A4 A(I)=I5 END DO6 ARight=CSHIFT(A, SHIFT=-1, DIM = 1) ! Circular shift ! of A7 A = A + ARight ! Add A and ! ARight ! result stored ! in B
�67
Message-passingmodel1 INTEGER, PARAMETER :: N =100 ! Declaration of ! array size2 INTEGER :: VecElem, RVecElem ! Elements of ! the vector3 INTEGER :: MyNode, RightNode, & ! Variables to LeftNode ! contain node ! addresses4 MyNode = whoami() ! Determine node ! address5 VecElem = MyNode ! Initialise ! vector element6 RightNode = MOD(MyNode+1, N)+1 ! Address of ! right neighbour7 LeftNode = MOD(Mynode-1+N, N)+1 ! Address of left ! neighbour8 CALL send&get(VecElem, LeftNode, & ! Circular RVecElem, RightNode) ! left-shift9 VecElem = VecElem + RVecElem ! Calculate sum
�68
Dynamikamolekularna(MD)
• N>>1cząstekoddziałującychparami• Fi(R)=∑ij,j≠i F(|ri-rj|)nij;n-wektorjednostkowy• Równaniaruchu:d2ri(t)/dt2=Fi(R)/mi
• Procedura:• inicjuj• rozpocznijsymulację;dorównowagi• kontynuuj.
�69
AlgorytmVerleta
Całkowanierównańruchu:
r(t +h)=2r(t)−r(t −h)+h2F[r(t)]/m
r(h)=r(0)+hv(0)+(h2/2)F[r(t=0)](m ≡1),v(t)=[r(t +h)−r(t −h)]/2+O(h2)
�70
Prędkościowyalg.Verleta
(bardziejstabilnyalgorytmcałkowania)Definicja
v(t)=[r(t+h)−r(t−h)]/2pozwalaobliczaćjednocześnie
r(t+h)=r(t)+hv(t)+h2F(t)/2,v(t+h)=v(t)+h[F(t+h)+F(t)]/2.
�71
Siły
czasobliczaniasiłᯈ O(N2)
(npzpotencjałuLenarda-Jonesa)
�72
MDparallel
�73
Cząstki Cząstki
Siły Siły
Układcząstek.SiłyLennarda–Jonesa.Dynamikawg.algorytmuVerleta
ProstyalgorytmMD
�74
Send particles in slice to the right neighbour;Receive guest particles from left neighbour;FOR all particle pairs in present slice DO Calculate forces for particles in present slice due to particles in this slice and store their values;END FOR;FOR all particles in present slice DO FOR all particles received from left neighbour DO Calculate forces between ‘resident’ and ‘guest’ particle; Store force on resident particle in resident force array; Store force on ‘guest’ particle in a sending array END FOR;END FOR;Send forces on guest particles to left neighbour;Receive forces on resident particles from right neighbour;Add these last forces to total forces on resident particles;Move particles according to Verlet algorithm.
Algorytmskurczowy(systolicalg.)
�75
travel
local
travel
local
travel
local
travel
local
travel
local
Algorytmsystoliczny(skurczowy)obliczaniasiłwukładziezoddziaływaniamiparcząstek
...
AlgorytmskurczowyROUTINE NodeStep REPEAT Calculate_forces_on_local_particles; Perform leap-frog step for local particles; UNTIL Program stops;END ROUTINE NodeStep;
ROUTINE Calculate_forces_on_local_particles Calculate contributions from local particles; Copy local particles to travelling particles; DO K = 1, P − 1 Send travelling particles to the left (modulo PBC); Receive data from right neighbour and load into memory used by travelling particles; Calculate contributions to local forces from travelling particles; END DOEND ROUTINE Calculate_forces_on_local_particles;
�76