Programowanie równoległe i współbieżne
Ćwiczenie:
Ćwiczenie 8
Data oddania:
10.6.2013
Imię, Nazwisko:
Dawid Misiniec
Ocena:
Uwagi:
1.
Cel ćwiczenia:
Celem ćwiczenia było zapoznanie się z funkcjami komunikacji kolektywnej
w celu obliczenia
całki na przedziale <0, 4> dla funkcji f(x) = x
2
.
2.
Przebieg ćwiczenia:
Funkcje użyte w programie, służące do rozsyłania komunikatów kolektywnych:
MPI_Bcast ( buffer, count, datatype, root, comm )
Rozgłasza wiadomość z procesu o identyfikatorze "root" do wszystkich procesów w
grupie włącznie z nim samym.
buffer -
adres w pamięci początku bufora (zleży od wyboru);
count -
ilość elementów w buforze (integer);
datatype -
typ danych elementów bufora (handle);
root -
rank procesu rozsyłającego (handle);
comm - komunikator (handle);
MPI_Reduce ( sendbuf, recvbuf, count, datatype, op, root, comm )
Redukuje wartości we wszystkich procesach do pojedynczej wartości.
sendbuf -
adres bufora wysyłania;
count -
ilosć elementów w buforze wysyłania (integer);
datatype -
typ danych w buforze wysłania (handle);
op - operacja redukcji (handle);
root - rank procesu root (integer);
comm - komunikator (handle);
Powyższe funkcje zastosowano w następujący sposób:
if (rank == 0)
{
cout<< "na ile czesci podzielic funkcje? ";
cin >> czesci;
}
MPI_Bcast(&czesci, 1, MPI_INT, 0, MPI_COMM_WORLD);
Tylko proces o randze 0 przyjmował ilość części na jakie został podzielony przedział
funkcji, był on zatem odpowiedzialny za rozesłanie tej informacji do wszystkich
pozostałych procesów, co nastąpiło dzięki poleceniu MPI_Bcast.
Po wszystkich niezbędnych operacjach obliczeniowych wykonywanych przez każdy
proces osobno na innym zbiorze danych (całki lokalne i sumy lokalne) następowało
ich sumowanie w proces
ie 0, za pomocą funkcji MPI_Reduce, wykorzystanej
w następujący sposób:
MPI_Reduce(&calkalok,&calka,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
Powyższy zapis, sumuje wszystkie wartości sygnowane nazwą calkalok i zapisuje je do
zmiennej calka.
Przygotowany przez nas program, obliczał wartość całki obliczanej dwoma metodami:
prostokątów oraz trapezów. W zależności od doboru metody, ilości przedziałów oraz
uruchomionych procesów zmieniał się czas obliczeń, oraz błąd względny (błąd obliczany
przez odjęcie wartości obliczonej całki od jej faktycznej wartości, która dla przedziału <0, 4>
wynosi 21
).
3.
Wynik działania programu:
Metoda prostokątów, 10, 100 i 1000 przedziałów dla 1 procesu:
Metoda prostokątów dla 10, 100 i 1000 przedziałów dla 2óch procesów:
Metoda trapezów dla 10, 100 i 1000 przedziałów dla 1 procesu:
Metoda trapezów dla 10, 100 i 1000 przedziałów dla 2óch procesów: