Grupa ćwicz. 4 |
Grupa lab. 7 |
Zespół. 6 |
Data wykonania. 11.04.2014 |
Data odbioru
|
Nr ćwicz./ wersja 9 |
Temat ćwiczenia. Obliczenia rozproszone MPI |
|||
Imiona i nazwiska.
Konrad Rugała, Krzysztof Sobieraj, Mariusz Równy |
Ocena i uwagi
|
Część praktyczna
Użyty sprzęt:
4 Komputery PC:
Procesor Intel Core 2 Quad Q8200
Architektura: x86_64 (64b)
RAM: 4GB
SO: Linux OpenSuSE 11.1 x86_64
MPI (Message Passing Interface) nazwa standardu biblioteki przesyłania komunikatów dla potrzeb programowania równoległego w sieciach rozproszonych. Aktualna wersja standardu to 2.1. MPI nie zawiera konkretnego oprogramowania, a jedynie interfejsy dające zarys, jak powinna wyglądać implementacja. Cele jakie zostały postawione to wysoka jakość, skalowalność, przenośność. MPI dominuje w wykorzystaniu w klastrach oraz superkomunterach. Jest zbiorem funkcji API umożliwia programistom pisanie programów równoległych o wysokiej wydajności, które przekazują komunikaty pomiędzy procesami danego zadania. MPI jest najczęściej implementowane w postaci bibliotek, które można wykorzystać w różnych językach programowania: C, C++, Fortran, assembler, MATLAB, Python, Perl, .NET. Obecna wersja zawiera obsługę wejścia/wyjścia, dynamiczne zarządzanie procesami. Dalej używana jest wcześniejsza wersja, z obawy przed utratą przenośności oraz wykorzystania małej części dostęnych funkcji.
MPI pozwala na uruchomienie obliczeń równoległych na komputerach z różnymi systemami (Windows, Linux, MacOSX) i w różnej architekturze.
Zalety MPI:
nie obciąża procesora opracjami kopiowania pamięci;
udostępnia komunikację grupową oraz p2p;
może być używany na wielu platformach;
efektywność w systemach wieloprocesorowych;
bogata biblioteka funkcji;
duża i dobra dokumentacja;
przyjął się jako standard.
Wady:
statyczna konfiguracja jednostek przetwarzających;
statyczna struktura procesów (przed wiersją MPI-2);
brak wielowątkowości.
Oprogramowanie:
MPICH to darmowa i przenośna implementacja standardu MPI zrealizowana w Argonne National. Laboratory, ośrodku prowadzącym badania nad przetwarzaniem rozproszonym. Dostępna jest wersja dla platform UNIX jak i Windows, dla kompilatorów Fortran 77 i C. Biblioteka zawiera funkcje konieczne
do uruchomienia, przesyłania komunikatów, synchronizacji i zakończenia programu. Możliwe jest przenoszenie programów na inne komputery. Protokół ten przeznaczony jest do sterowania procesem obliczeń równoległych w sieciach rozproszonych. Biblioteka procedur MPICH jest dostępna bezpłatnie. Najnowsza wersja tej biblioteki MPICH2 poza zapewnieniem bardziej wydajnych mechanizmów komunikacji posiada dodatkowo: wsparcie dla komunikacji jednostronnej i rozszerzoną funkcjonalność MPI-IO
PVM - Parallel Virtual Machine - środowisko oprogramowania do realizacji programów rozproszonych. Komputery połączone siecią tworzą równoległą maszynę wirtualną. Poszczególne procesy mogą pracować w różnych systemach operacyjnych. PVM dostarcza programiście procedury i funkcje przesyłania komunikatów między procesami. Maszyna jest narzędziem służącym głównie do pośrednictwa w wymianie informacji pomiędzy procesami uruchomionymi na oddzielnych maszynach oraz do zarządzania nimi za pośrednictwem konsoli PVM. Z punktu widzenia obecnej definicji maszyny wirtualnej, PVM w sumie nie zasługuje na swoją nazwę, powinien się bardziej nazywać "zarządca procesów zrównoleglonych", jednakże historia PVM sięga dawnych czasów, kiedy to nazewnictwo było nieco inaczej rozumiane.
W dużym uproszczeniu PVM pozwala na "połączenie" większej ilości komputerów w jeden. Odbywa się to na zasadzie dołączania kolejnych hostów (komputerów), na których został zainstalowany i skonfigurowany PVM. Podłączanie hosta jest w uproszczeniu procedurą połączenia przez RSH, uruchomieniu demona PVM i dostarczenia mu informacji o tym, kto jest jego "rodzicem" oraz o parametrach istniejącej sieci.
W momencie, kiedy cała "maszyna wirtualna" już jest skonfigurowana, rola PVM sprowadza się do stanowienia pomostu wymiany informacji pomiędzy procesami, które się w PVM "zarejestrują", oraz umożliwienia administrowania stanem zarejestrowanych w PVM procesów. Z takiego punktu widzenia PVM można nazwać raczej "demonem komunikacji międzyprocesowej" i można to podeprzeć najprostszym argumentem, mianowicie PVM nie stanowi interfejsu do systemu operacyjnego lub maszyny, na której działa dany proces.
Przebieg laboratoriów:
Cel ćwiczenia - sprawdzenie wpływu na szybkość wykonywania operacji użycia różnej liczby hostów w sieci rozproszonej. Ustalona wersja scenariusza to wersja f) czyli najpierw na dwóch potem na trzech i na czterech maszynach. Liczba procesów testowanych to od 1 do 18 ze skokiem co 1. Musieliśmy dodać adresy IP oraz nazwy komputerów do pliku z listą maszyn, a następnie odpalać program określając w nim ile procesów chcemy przeprowadzić w teście.
Adresy IP oraz nazwy komputerów znajdują się na kartce z notatkami z przeprowadzonych laboratoriów, były to:
- 10.0.2.138, st40209
- 10.0.2.139, st40210
- 10.0.2.134, st40205
- 10.0.2.133, st40204
Przykładowe uruchomienie programu dla jednego procesu i dwóch hostów:
Przykładowe uruchomienie programu dla 5 procesów i 3 hostów:
Przykładowe uruchomienie programu dla 18 procesów i 4 hostów:
Screeny z każdego testu znajdują się na stronie: http://www.speedyshare.com/TbYnR/Screeny-Sieci-MPI.rar
Wszystkie wyniki testów oraz jednego powtórzenia przedstawiono w tabelkach:
Wyniki pierwszej próby: Powtórzenie:
ilość maszyn |
ilość procesów |
Czas |
ilość maszyn |
ilość procesów |
Czas |
czas średni |
2 |
1 |
27,960445 |
2 |
1 |
28,044698 |
28,00257 |
2 |
2 |
16,238281 |
2 |
2 |
14,084623 |
15,16145 |
2 |
3 |
9,929712 |
2 |
3 |
9,346546 |
9,638129 |
2 |
4 |
7,909044 |
2 |
4 |
7,129105 |
7,519075 |
2 |
5 |
5,914901 |
2 |
5 |
6,499827 |
6,207364 |
2 |
6 |
4,837568 |
2 |
6 |
4,722253 |
4,779911 |
2 |
7 |
4,576349 |
2 |
7 |
4,609012 |
4,592681 |
2 |
8 |
4,7359 |
2 |
8 |
4,585653 |
4,660777 |
2 |
9 |
3,984253 |
2 |
9 |
4,242467 |
4,11336 |
2 |
10 |
4,334895 |
2 |
10 |
4,170624 |
4,25276 |
2 |
11 |
3,985547 |
2 |
11 |
3,893036 |
3,939292 |
2 |
12 |
4,2885995 |
2 |
12 |
4,276242 |
4,282421 |
2 |
13 |
3,852232 |
2 |
13 |
3,930704 |
3,891468 |
2 |
14 |
4,05936 |
2 |
14 |
4,02997 |
4,044665 |
2 |
15 |
3,699045 |
2 |
15 |
3,723277 |
3,711161 |
2 |
16 |
4,033763 |
2 |
16 |
3,994397 |
4,01408 |
2 |
17 |
3,962187 |
2 |
17 |
3,860366 |
3,911277 |
2 |
18 |
3,982385 |
2 |
18 |
4,04314 |
4,012763 |
3 |
1 |
27,99755 |
3 |
1 |
27,9 |
27,94878 |
3 |
2 |
13,971611 |
3 |
2 |
14,344373 |
14,15799 |
3 |
3 |
10,811914 |
3 |
3 |
9,962688 |
10,3873 |
3 |
4 |
7,608047 |
3 |
4 |
7,159544 |
7,383796 |
3 |
5 |
6,59638 |
3 |
5 |
6,27928 |
6,43783 |
3 |
6 |
5,274356 |
3 |
6 |
4,71735 |
4,995853 |
3 |
7 |
4,352472 |
3 |
7 |
4,329679 |
4,341076 |
3 |
8 |
3,645219 |
3 |
8 |
3,661233 |
3,653226 |
3 |
9 |
3,329051 |
3 |
9 |
3,194001 |
3,261526 |
3 |
10 |
3,032717 |
3 |
10 |
3,268088 |
3,150403 |
3 |
11 |
3,339492 |
3 |
11 |
3,317272 |
3,328382 |
3 |
12 |
2,934871 |
3 |
12 |
3,00835 |
2,971611 |
3 |
13 |
2,94591 |
3 |
13 |
2,865419 |
2,905665 |
3 |
14 |
3,097063 |
3 |
14 |
3,17141 |
3,134237 |
3 |
15 |
2,84697 |
3 |
15 |
2,981239 |
2,914105 |
3 |
16 |
3,000913 |
3 |
16 |
2,895187 |
2,94805 |
3 |
17 |
3,146201 |
3 |
17 |
3,151712 |
3,148957 |
3 |
18 |
2,90947 |
3 |
18 |
3,03289 |
2,97118 |
4 |
1 |
28,054654 |
4 |
1 |
28,022891 |
28,03877 |
4 |
2 |
14,063691 |
4 |
2 |
14,084394 |
14,07404 |
4 |
3 |
10,538766 |
4 |
3 |
9,417304 |
9,978035 |
4 |
4 |
7,25498 |
4 |
4 |
7,086914 |
7,170947 |
4 |
5 |
5,630119 |
4 |
5 |
5,948895 |
5,789507 |
4 |
6 |
4,723085 |
4 |
6 |
5,348144 |
5,035615 |
4 |
7 |
4,631034 |
4 |
7 |
4,092465 |
4,36175 |
4 |
8 |
4,064729 |
4 |
8 |
4,071787 |
4,068258 |
4 |
9 |
3,315016 |
4 |
9 |
3,582607 |
3,448812 |
4 |
10 |
3,334154 |
4 |
10 |
3,015338 |
3,174746 |
4 |
11 |
2,681047 |
4 |
11 |
2,737506 |
2,709277 |
4 |
12 |
2,633563 |
4 |
12 |
2,514269 |
2,573916 |
4 |
13 |
2,403397 |
4 |
13 |
2,33505 |
2,369224 |
4 |
14 |
2,843198 |
4 |
14 |
2,708198 |
2,775698 |
4 |
15 |
2,59654 |
4 |
15 |
2,441218 |
2,518879 |
4 |
16 |
2,401102 |
4 |
16 |
2,401039 |
2,401071 |
4 |
17 |
2,688164 |
4 |
17 |
2,280061 |
2,484113 |
4 |
18 |
5,586844 |
4 |
18 |
2,477606 |
4,032225 |
Jak widać wyniki są bardzo podobne w obu próbach. Można zauważyć dla różnej ilości hostów różny moment zatrzymania się spadku czasu wykonywania programu. Na dwóch maszynach widać jak czas wykonywania obliczeń się zmniejsza aż do wykonywanych 6 procesów po czym różnice w czasach są niewielkie i raczej oscylują wokół 4-5 sekund.
W przypadku 3 maszyn czas zmniejsza się dalej przy większej ilości procesów aż dochodzi do 8 i po nim następuje znowu brak większych zmian w prędkości wykonywanych obliczeń.
Czas obliczeń wykonywanych na czterech maszynach malał aż do 11-12 wykonywanych procesów potem ustał w granicach 2,5 sekundy.
Opracowanie wyników:
Widać wyraźnie, że czas obliczeń maleje tylko do 6 wykonywanych procesów i później następuje jeszcze lekki spadek po 8 procesach. Spodziewaliśmy się wyników jasno pokazujących, że spadek czasu obliczeń byłby ciągły do 8 procesów, a następnie wg. naszych oczekiwań miał stanąć. Nasze rozumowanie wynikało z tego, że komputery posiadały 4 rdzeniowe procesory i przy 2 maszynach obliczenia mogłyby być rozłożone między 8 rdzeni wykonywujących po jednym procesie. Powyżej tej ilości spodziewaliśmy się braku zmian, gdyż tylko taka ilość zadań może zostać obsłużona przez dwa procesory czterordzeniowe.
Z testów wykonywanych na 3 maszych wynikają takie same obserwacje szybkiego spadku czasu obliczeń do 3 procesów potem średni spadek między 3, a 5 i powolny w ostatnich etapach przed całkowitym zatrzymaniem spadku czasu wykonywania obliczeń w okolicach 10 procesów. Na trzech maszynach analogicznie spodziewaliśmy się zatrzymania się spadku po 12 procesach. Prawdopobnie procesory nie były aż na tyle szybkie lub sprawne, aby w pełni wykorzystać potenacjał połączenia 3 procesorów 4-rdzeniowych co dawałoby moc obliczeniową 12 rdzeni, lub były zajęte innymi procesami.
W wynikach testów na 4 hostach spadek czasu obliczeń zatrzymał się w okolicy 12 procesów. Tutaj także spodziewaliśmy się tego przy większej liczbie procesów ok. 16 jednak prawdopodobnie te same przyczyny tj. nie wykorzystanie pełnej mocy obliczeniowej lub słabe połączenie dało słabsze efekty od spodziewanych. W pierwszej próbie przy 18 procesach wydarzył się prawdopodobnie jakiś problem, bo wynik bardzo odstaje od oczekiwanego oraz od 2 próby, która wyszła wg. oczekiwań.
Na koniec wykres przedstawiający zależność czasu wykonywania obliczeń od ilości hostów. Jak widzimy dopiero przy liczbie procesów 8 widzimy zwiększoną wydajność obliczeń. Wydajność ta jest spowodowana większą liczbą obsłużonych procesów.
Wnioski:
Podczas przeprowadzania ćwiczenia zostało przeprowadzonych 18 prób dla liczby hostów równej 2, 3 oraz 4, a także powtórzyliśmy ten test jeszcze raz. Powtórzenie miało na celu wykluczyć przypadkowe odchylenia od oczekiwanych wyników.
Wyniki testów dały nam odpowiedź jak wpływa na wydajność obliczeniową zwiększona ilość procesów oraz liczba hostów. Jasno mogliśmy zauważyć, że wydajność rośnie wraz ze zwiększoną ilością procesów i jest to spowodowane większą możliwością rozłożenia procesów pomiędzy rdzenie procesorów w systemie rozproszonym. Liczba hostów też wpływała na szybkość wykonywania się obliczeń jednak jest to zauważalne szczególnie przy większej liczbie procesów, gdy mam jeszcze te 4 rdzenie dodatkowe do wykonywania obliczeń.
Ilość obsługiwanych procesów przez system rozproszony pokazuje możliwości wielkich obliczeń, które nieosiągalne są na zwykłych komputerach jedno procesorowych. Przyjmując tą tendencję przy jeszcze większej ilości hostów moglibyśmy uzyskać do pewnego momentu jeszcze większą wydajność i szybkość obliczeń.
Pomimo, że komputery w naszym teście były tej samej architektury, możliwe jest także dzięki wielu bibliotekom oraz np. PVM przeprowadzanie obliczeń na wielu komputerach z różnymi systemami operacyjnymi bez problemów z komunikacją.