[ Pobierz całość w formacie PDF ]
.Program Hello World uruchamiamy na wszystkich ośmiu węzłach naszego klastraw następujący sposób:$ mpirun -np 8 helloJako wynik działania tego przykładowego programu powinniśmy otrzymać:Hello world, I am host n4 with rank 4 of 8Hello world, I am host n2 with rank 2 of 8Hello world, I am host n3 with rank 3 of 8Hello world, I am host n5 with rank 5 of 8Hello world, I am host n6 with rank 6 of 8Hello world, I am host n7 with rank 7 of 8Hello world, I am host n1 with rank 1 of 8Hello world, I am host n0 with rank 0 of 8Po ponownym uruchomieniu programu kolejność pokazanych wyżej wierszy może się zmienić.Rozproszony koder MP3Jako drugi przykład wybraliśmy rozproszony koder MP3.Program ten działając równolegle naklastrze Beowulf przekształca wiele plików WAV na pliki MP3.Do kodowania wykorzystanokoder MP3 o nazwie Blade, który jest udostępniany na zasadach licencji GPL.Przy tworzeniurozproszonej wersji kodera stosujemy następującą procedurę:1.Pobrać stabilną wersję zródłową kodera ze strony http://bladeenc.mp3.no.2.Rozkompresować i rozpakować archiwum z wersją zródłową:$ tar xvzf bladeenc-n-src-stable.tar.gzW ten sposób zostanie utworzony katalog bladeenc-n-src-stable (n oznacza numer wersji).3.Przejść do katalogu bladeenc-n-src-stable:$ cd bladeenc-082-src-stable4.W kodzie zródłowym programu wprowadzić następujące modyfikacje:a.Zmienić nazwę main.c na bladeenc.c.b.Zmodyfikować plik bladeenc.c zmieniając w nim main na bladeenc.5.Zmodyfikować plik Makefile następująco:a.Dopisać bladeenc.o do listy tworzonych plików obiektowych (OBJS).b.Zastąpić gcc przez mpicc.6.Zastąpić plik main.c opisanym niżej programem:Najpierw dołączamy wymagane pliki nagłówkowe, deklarujemy zmienne i wywołujemyprocedurę inicjującą MPI:#include#includestatic int nproc;static int iproc;extern void bladeenc(int argc, char **argv);int main(int argc, char **argv){MPI_Init(&argc, &argv);MPI_Comm_size(MPI_COMM_WORLD, &nproc);MPI_Comm_rank(MPI_COMM_WORLD, &iproc);Każdy proces określa liczbę plików, które będą przetwarzane.Jeżeli mamy M plików i N procesów,to pierwsze (M%N) procesów przetworzy (M/N+1) plików, a procesy pozostałe będą przetwarzaćM/N plików.Na przykład, jeżeli mamy osiem plików i trzy procesory, to dwa z nich będąprzekształcały trzy pliki, a trzeci procesor będzie przekształcał pozostałe dwa pliki.{int first;int n;int remainder;int nt;nt = argc - 1;remainder = nt % nproc;n = nt / nproc;if (remainder > 0){if (iproc
[ Pobierz całość w formacie PDF ]