Przetestowalem nastepujace wersje MPI dostepne w LSW:
(Dokladniejsze informacje pod adresem http://www.hpc.uni.torun.pl/doc/mpi)
Testy przeprowadzalem z uzyciem systemu kolejkujacego (polecenie
bsub), po tym jak zostalem upomniany przez administratora, ze
uruchamianie zadan "z reki" jest niedozwolone :). Kod zrodlowy programow
jest dostepny w pliku MPI-test.tar.gz.
Napisalem nastepujace testy:
send_pairs.cProgram uruchomiony na parzystej liczbie procesorow grupuje je w pary i kazda z nich wysyla do siebie wzajemnie komunikaty o zadanej dlugosci. Ten test sprawdza mozliwosc rownoleglej komunikacji miedzy niezaleznymi grupami procesow.
send_single.cW tym programie procesy wysylaja do siebie komunikaty cyklicznie: 1 do 2, 2 do 3, ... n-1 do n, n do 1 i tak dalej. Sprawdza on glownie przepustowosc samego kanalu komunikacyjnego.
scatter.c, gather.c, bcast.cTe testy sprawdzaja szybkosc wykonywania odpowiednich funkcji MPI.
Programy uruchamialem odpowiednio na 4 i 10 procesorach, i w kazdym
przypadku testowalem szybkosc dzialania dla komunikatow 256- i
4096-bajtowych. Programy napisalem tak, ze calkowita ilosc przesylanych
danych jest w kazdym przypadku identyczna, czyli np. send_pairs.c
na 4 procesorach i z buforem 256b wykonuje (10/4)*(4096/256)=40 razy wiecej
operacji niz wersja 10 procesorowa z buforem 4096b.
Ilosc 4 i 10 procesorow wybralem dlatego, ze w tym samym czasie czterech innych uzytkownikow liczylo zadania jednoprocesorowe - 16=4+10+2 (dla systemu) wydalo mi sie wielkoscia dobra do testow.
Liczbowe wyniki testow wygladaja nastepujaco:
Powtarzalem testy kilka razy, bo wydaly mi sie troche dziwne, ale
z reguly wychodzilo tak samo: w tescie send_pairs.c SUN MPI
uwazany za najszybszy przegrywal nawet z MPICHem dzialajacym na
gniazdach! W ogole z reguly najszybszy okazywal sie MPICH dzialajacy
na pamieci wspolnej. Zaleznosci te widac dobrze na wykresie:
Wnioski:
scatter, gather, send_single.gather.c - przewaga wersji socketowej.Jak sie dowiedzialem, takie wyniki moga wynikac z tego, ze SUN MPI jest dostepny w dosc starej wersji, natomiast MPICH byl kompilowany niedawno z najnowszego zrodla.