Celem ćwiczenia jest zapoznanie się z kompilacją programów równoległych oraz z użyciem najprostszych instrukcji MPI. W zależności od preferowanego języka programowania, ćwiczenie można wykonywać w wersji C lub fortranowskiej. Z powodu czasowej niedostępności komputerów CI TASK wskutek ich przenoszenia do nowego pomieszczenia, “klastrem” użytym w ćwiczeniu są połączone siecią komputery znajdujące się w sali 402 o nazwach mmxy gdzie x i y są cyframi dziesiętnymi.
Studenci i doktoranci: kody źródłowe oraz wydruk wyników (najlepiej w postaci tar.gz) proszę wysłać mailem na adres adam@chem.univ.gda.pl; będzie to sprawozdanie z tej pracowni. Czas: do 17 marca 2008.
Z katalogu etoh.chem.univ.gda.pl:/big/staff/adam/MPI proszę skopiować (używając np. mc lub polecenia cp –r ) na swój katalog domowy podkatalog Cw1 (osoby nie posiadające kont na komputerze etoh.chem.univ.gda.pl jego kopię w postaci tar.gz mogą pobrać stąd). W katalogu Cw1 znajdują się dwa podkatalogi: C oraz F77 zawierające źródła programów odpowiednio w C i Fortranie 77.
Do zmiennej path dodać katalog /big/appl/mpich-1.2.7p1/bin. Można to zrobić lokalnie wykonując polecenie
set path = ($path
/big/appl/mpich-1.2.7p1/bin)
wtedy ustawienie będzie ważne tylko w sesji odpowiadającej okienku z którego wpisano polecenie albo (lepiej) dopisując /big/appl/mpich-1.2.7p1/bin do zmiennej path we właściwym pliku konfiguracyjnym (.cshrc, .tcshrc) na swoim katalogu domowym.
Przy użyciu skryptu mpicc lub mpif77 skompilować odpowiednią wersję programów hello i sendrecv, z utworzeniem modułów wykonywalnych o takich nazwach. Uruchomić programy na dwóch procesorach pod mpirun.
Zmodyfikować program hello w ten sposób, aby przy uruchomieniu go na N procesorach (o numerach 0, 1, 2, ..., N-1) tylko procesor nr 0 pisał informację o liczbie procesorów a każdy pozostały podawał tylko swój rząd (numer). Skompilować i uruchomić program.
Wykorzystując jako przykład źródło programu sendrecv napisać program, który “odbija” liczbę całkowitą pomiędzy dwoma procesorami określoną liczbę razy. Skompilować i uruchomić program na dwóch procesorach.
Dla zainteresowanych: Do programu można dodać instrukcję pomiaru czasu przesyłania wiadomości (MPI_Wtime) i wydrukować całkowity czas zużuty na przesłanie pakietów. Można poeksperymentować z zależnością czasu przesyłania od długości i typu danych.
Wykorzystując jako przykład źródło programu sendrecv napisać program, w którym w układzie procesorów 0, 1, ..., N-1:
Skompilować i uruchomić program interaktywnie na dwóch, czterech i ośmiu procesorach.