08 Zawadzkiid 7557 Nieznany (2)

background image

Programowanie równoległe i współbieżne

Ćwiczenie:

Ćwiczenie 8

Data oddania:

10.6.2013

Imię, Nazwisko:

Mateusz Zawadzki

Ocena:

Uwagi:


Cel ćwiczenia

Program miał za zadanie policzyć całkę dla paraboli o wzorze f(x) = x

2

, dla przedziału

od 0 do 4, dla różnej ilości przedziałów oraz procesów.


Przebieg ćwiczenia

Poniżej przedstawiony jest listing programu:

int main( int argc, char *argv[] )
{
int rank;
int size;
int tag = 1;
double calkalok,calka,calkatraplok,calkatrap;
double sumatrap, xtrap,suma,x;
int czesci; //na ile czesci ma podzielic funkcje
double szerokosc;
double czas, t1, t2;

MPI_Init( 0, 0 );
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size); //ilosc zaangazowanych procesow

if (rank == 0)
{
cout<< "na ile czesci podzielic funkcje? ";
cin >> czesci;
}
t1 = MPI_Wtime ();
MPI_Bcast(&czesci, 1, MPI_INT, 0, MPI_COMM_WORLD);

if (czesci !=0){
szerokosc = 4/double(czesci);
suma=0;
calkalok=0;
sumatrap=0;
calkatraplok=0;
for (int i = rank+1; i<=czesci; i+=size)
{
x=double(i)*szerokosc;
suma+=(x*x);
xtrap=(double(i)-0.5)*szerokosc;
sumatrap+=(xtrap*xtrap);
}
calkalok=szerokosc*suma;

background image

calkatraplok=szerokosc*sumatrap;
cout<< "Dla procesu o rank: " <<rank <<" calka prostokatna lokalna = " <<calkalok<<endl;
cout<< "Dla procesu o rank: " <<rank <<" calka trapezowa lokalna = " <<calkatraplok<<endl;
MPI_Reduce(&calkalok,&calka,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
MPI_Reduce(&calkatraplok,&calkatrap,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);

if (rank == 0) {
cout<<"calka globalna(prostokaty): " <<calka<< " blad wynosi: "<< calka-21.3333<<endl;
cout<<"calka globalna(trapezy): " <<calkatrap<< " blad wynosi: "<< calkatrap-
21.3333<<endl;
}
t2 = MPI_Wtime ();
czas = t2-t1;
cout<< "czas obliczen wynosi: " <<czas <<" sekund."<<endl;
}else cout<< "szalony! calka z 0 czesci?!";
MPI_Finalize();
return 0;
}


Opis działania programu

Program definiuje i/lub deklaruje wszystkie potrzebne zmienne (zmienne z dopiskiem

lok są zmiennymi, które licząc całkę cząstkową, lokalną dla każdego procesu, zmienne
z dopiskiem trap liczą odpowiednie wartości dla całki metodą trapezów).

Blok decyzyjny: Jeśli proces wykonujący program ma rangę 0, zadaje pytanie na ile

części należy podzielić przedział <0, 4> dziedziny funkcji.

Każdy proces wykonujący program rozpoczyna liczenie czasu, następnie następuje

rozesłanie do wszystkich procesów ilości części, na jakie został podzielony przedział
dziedziny funkcji.

Blok decyzyjny: Jeśli ilość części jest różna od 0, następuje zerowanie poszczególnych

wartości lokalnych, oraz obliczenie wartości całki lokalnej metodą trapezów i prostokątów.
Każdy proces wypisuje wartość całki lokalnej, którą policzył, a następnie wszystkie wyniki są
wysyłane do procesu 0, który je sumuje i wyświetla obliczoną wartość całki z funkcji
f(x) = x

2

, kończy obliczanie czasu i wypisuje jak długo zajęły obliczenia oraz oblicza błąd

obliczeń zależny od dobranej metody obliczeń.

Program finalizuje działanie bloku MPI oraz zwraca 0 po wykonaniu całego kodu.

Wynik działania programu

Poniżej przestawiono wynik działania powyższego programu:













background image

Obliczenia całki metodą prostokątów dla 10, 100 i 1000 przedziałów, dla jednego procesu:


Obliczenia całki metodą prostokątów dla 10, 100 i 1000 przedziałów dla dwóch procesów:


background image

Obliczenia całki metodą trapezów dla 10, 100 i 1000 przedziałów dla jednego procesu.:


Obliczenia całki metodą prostokątów dla 10, 100 i 1000 przedziałów dla dwóch procesów:


Wnioski

Zwiększenie ilości procesów biorących udział w obliczeniach, spowodowało
wydłużenie czasu obliczeń,

Zwiększenie ilości przedziałów spowodowało wydłużenie się czasu obliczeń,

W zależności od ilości przedziałów zmienia się wartość całki,

Im większa ilość przedziałów, tym mniejszy jest błąd obliczeń,

Podzielenie wybranego fragmentu dziedziny tej funkcji na około 1000 przedziałów

wystarczy, aby otrzymać zadowalająco dokładne obliczenia wartości całki.


Wyszukiwarka

Podobne podstrony:
chemia lato 12 07 08 id 112433 Nieznany
Literaturoznawstwo (08 04 2013) Nieznany
08 02bid 7351 Nieznany (2)
86 Nw 08 Lampy oscyloskopowe V Nieznany (2)
08 Programowanie w srodowisku j Nieznany (2)
08 5id 7231 Nieznany
08 Projektowanie i realizacja z Nieznany (2)
08 2id 7222 Nieznany
2007 08 Szkola konstruktorowid Nieznany
CW 08 id 122562 Nieznany
2002 08 Osla laczka Nieznany
08 vimid 7592 Nieznany (2)
713[05] Z1 08 Wykonywanie posad Nieznany
MD wykl 08 id 290160 Nieznany
08 9id 7236 Nieznany (2)
08 technologia programowaniaid Nieznany
podst chemii 05 07 08 id 365984 Nieznany
MD cw 08 id 290129 Nieznany
murarz 712[06] z1 08 n id 31049 Nieznany

więcej podobnych podstron