! "!" # #$$$%& '()*$&&$$& +&!,-$%&.$.'$.$.!*%-&$ $%&'()*! $ ($()*!/! %" &,$$! ($$-%$! 0'1 01! 2$ Czcionka o stałej szerokoci Nazwy programów, polece, katalogów, wyniki działania wydawanych polece. Czcionka o stałej szerokoci pogrubiona Podaje tekst, który naley dosłownie przepisa. W przypadku plików ródłowych wyrónia istotniejsze fragmenty. Czcionka o stałej szerokoci kursyw Tekst komentarza w przykładowych sesjach przy terminalu. Czcionka o stałej szerokoci kursyw pogrubiona Wyrónia istotniejsze fragmenty wyników działania wydawanych polece. opracował: dr in. Artur Gramacki 1
3! 4 Uwaga: po zakoczeniu wiczenia naley przygotowa sprawozdanie w formie pisemnej. Ma ono dotyczy tylko tych punktów, gdzie wyranie to zaznaczono. a. Upewni si, e system PVM został prawidłowo zainstalowany w katalogu domowym uytkownika (patrz instrukcja do wiczenia nr 1). b. Przej do katalogu domowego systemu PVM (okrelonego przez zmienna systemow $PVM_ROOT) i wykona kompilacj przykładowych programów (ich pliki ródłowe s w podkatalogu $PVM_ROOT/examples): $ make e Aby łatwiej było analizowa pojawiajce si w duych ilociach komunikaty z kompilacji, mona skierowa standardowe wyjcia (komunikatów oraz błdów oznaczone odpowiednio cyframi 1 oraz 2) do plików, czyli np. wyda polecenie make e w nastpujcej postaci: $ make e 1>out.log 2>err.log Poród wielu kompilowanych przykładowych programów naley na pocztku zwróci uwag na dwa najprostsze programy oraz postara si dokładnie zrozumie ich działanie. Pierwszy program (tworz go dwa pliki: hello.c oraz hello_other.c) oraz drugi (tworz go dwa pliki: master1.c oraz slave1.c) demonstruj podstawowe zasady pisania programów w rodowisku PVM. W wyniku kompilacji w katalogu $PVM_ROOT/bin/LINUX tworzone s pliki wykonywalne. c. Uruchomi skompilowane przykładowe programy (wczeniej nie zapomnie o uruchomieniu systemu PVM). Przykładowo uruchomienie programu hello (oraz współpracujcego z nim program hello_other) moe wyglda tak jak poniej: Zapomniano uruchomi system PVM. Bez niego program hello oczywicie nie zadziała. artur@mykonos:~$ hello libpvm [pid30518]: pvm_mytid(): Can't contact local daemon i'm tfffffff2 libpvm [pid30518]: pvm_spawn(): Can't contact local daemon can't start hello_other artur@mykonos:~$ Uruchamiamy wic system PVM. Tym razem program hello działa prawidłowo. artur@mykonos:~/pvm3$ pvm pvm> quit quit Console: exit handler called pvmd still running. artur@mykonos:~/pvm3$ hello i'm t40002 from t40003: hello, world from mykonos artur@mykonos:~/pvm3$ opracował: dr in. Artur Gramacki 2
Program master1 uruchamiamy analogicznie: artur@mykonos:~/pvm3$ master1 Spawning 3 worker tasks... SUCCESSFUL I got 100.000000 from 1; (expecting 100.000000) I got 300.000000 from 2; (expecting 300.000000) I got 200.000000 from 0; (expecting 200.000000) artur@mykonos:~/pvm3$ Programy pisane dla rodowiska PVM mona te uruchamia z poziomu konsoli PVM (w przeciwiestwie do uruchamiania z poziomu powłoki systemowej, jak to pokazano powyej). Korzystamy wówczas z polecenia spawn. Polecenie spawn jest jednym z kilkunastu polece konsoli PVM. Ich pełn list mona odnale w dokumentacji systemowej (man spawn). Moe to wyglda nastpujco (komentarze, które w rzeczywistoci nie pojawiaj si na ekranie, zaznaczono pismem pogrubionym): Uruchamiamy program hello. pvm> spawn hello spawn hello t4002a Uruchamiamy 5 zada (domylnie uruchamia si jedno). pvm> spawn -5 hello spawn -5 hello 5 successful t4002c t4002d t4002e t4002f t40030 Kierujemy wyjcie na konsol (symbol ->). pvm> spawn -> hello spawn -> hello [1] t40036 pvm> [1:t40036] i'm t40036 [1:t40036] from t40037: hello, world from mykonos [1:t40037] EOF [1:t40036] EOF [1] finished Kierujemy wyjcie do wskazanego pliku. Poprzednia zawarto pliku jest tracona. pvm> spawn ->/tmp/out.log hello spawn ->/tmp/out.log hello [2] t40038 pvm> [2] finished Kierujemy wyjcie do wskazanego pliku. Tym razem w trybie dopisywania danych (ang. append). pvm> spawn ->>/tmp/out.log hello spawn ->>/tmp/out.log hello [3] t4003a pvm> [3] finished Uruchamiamy program master1. opracował: dr in. Artur Gramacki 3
pvm> spawn -> master1 spawn -> master1 [4] t4003c pvm> [4:t4003e] EOF [4:t4003c] Spawning 3 worker tasks... SUCCESSFUL [4:t4003c] I got 100.000000 from 1; (expecting 100.000000) [4:t4003c] I got 300.000000 from 2; (expecting 300.000000) [4:t4003c] I got 200.000000 from 0; (expecting 200.000000) [4:t4003c] EOF [4:t4003d] EOF [4:t4003f] EOF [4] finished d. W sprawozdaniu naley bardzo dokładnie skomentowa w jzyku polskim podane wyej dwa najprostsze programy (tzn. pliki: hello.c, hello_other.c, master1.c, slave1.c). Uwaga: nie naley komentowa rzeczy oczywistych a jedynie te, wymagane do zrozumienia działania programu oraz poszczególnych funkcji rodowiska PVM. Komentarze powinny by zwizłe! e. W katalogu $PVM_ROOT/examples zamieszczono te inne przykładowe programy. Ich krótki opis mona znale w pliku Readme. Naley zapozna si z tymi programami a w sprawozdaniu zamieci dokładnie skomentowany w jzyku polskim kody ródłowe dwóch dowolnie wybranych programów (oczywicie innych ni te podane powyej). Dodatkowo naley maksymalnie w 7 zdaniach napisa co robi te programy. f. Kompilacj pojedynczych programów mona wykona uywajc stworzonego w systemie PVM programu o nazwie aimk (skrót od architecture independent makefile). Przykładowo, chcc skompilowa program hello oraz współpracujcy z nim program hello_other naley przej do katalogu $PVM_ROOT/examples i wyda nastpujce polecenie: artur@mykonos:~/pvm3/examples$ aimk hello hello_other making in LINUX/ for LINUX cc -g -I../../include -DSYSVSIGNAL -DNOWAIT3 -DRSHCOMMAND=\"/usr/bin/rsh\" -DNEEDENDIAN -DFDSETNOTSTRUCT -DHASERRORVARS -DCTIMEISTIMET - DSYSERRISCONST -DNOTMPNAM -o hello../../examples/hello.c - L../../lib/LINUX -lpvm3 mv hello../../bin/linux cc -g -I../../include -DSYSVSIGNAL -DNOWAIT3 -DRSHCOMMAND=\"/usr/bin/rsh\" -DNEEDENDIAN -DFDSETNOTSTRUCT -DHASERRORVARS -DCTIMEISTIMET - DSYSERRISCONST -DNOTMPNAM -o hello_other../../examples/hello_other.c - L../../lib/LINUX -lpvm3 mv hello_other../../bin/linux artur@mykonos:~/pvm3/examples$ W proces kompilowania programów przykładowych w rodowisku PVM zaangaowane s nastpujce pliki: $PVM_ROOT/Makefile $PVM_ROOT/Makefile.aimk $PVM_ROOT/lib/aimk $PVM_ROOT/examples/Makefile.aimk W wyniku kompilacji w katalogu $PVM_ROOT/bin/LINUX tworzone s pliki wykonywalne. Dokumentacj do programu aimk mona znale w postaci strony podrcznika systemowego man (wydajc polecenie: man aimk). opracował: dr in. Artur Gramacki 4
Naley samodzielnie przeanalizowa zawarto powyszych czterech plików i w sprawozdaniu zamieci nastpujce elementy: oryginalne pliki wymienione w poprzednim punkcie naley skomentowa w jzyku polskim. Komentarze powinny dotyczy jedynie istotnych elementów i ich głównym celem jest pomoc w zrozumieniu działania programu jako całoci a nie oczywistych jego fragmentów. opisa czynnoci, które wykonuj si po wydaniu polecenia make e (z poziomu katalogu $PVM_ROOT). opisa czynnoci, które wykonuj si po wydaniu polecenia aimk hello (z poziomu katalogu $PVM_ROOT/examples). Jak to ju napisano w jednym z punktów powyej nastpuje w tym momencie kompilacja podanych jako argumenty programów. Naley, posiłkujc si dokumentacj kompilatora cc, poda znaczenie uytych tu przełczników. Literatura 1. Index for PVM3 Library: http://www.netlib.org/pvm3/index.html 2. PVM List of Frequently Asked Questions: 3. http://www.netlib.org/pvm3/faq_html/faq.html 4. PVM: Parallel Virtual Machine A Users' Guide and Tutorial for Networked Parallel Computing: http://www.netlib.org/pvm3/book/pvm-book.html 5. The postscript file for the book ``PVM A Users' Guide, and Tutorial for Networked Parallel Computing''. http://www.netlib.org/pvm3/book/ 6. The users' guide for PVM version 3.3: http://www.netlib.org/pvm3/ug.ps opracował: dr in. Artur Gramacki 5