[ Pobierz całość w formacie PDF ]
.Wartość N jest wprowadzana w wierszu poleceń.Powinna ona być podzielna przez nproc:lN = atoi(argv[1]);if (argc != 2)perror("Usage: transpose <N, for a N x N matrix>");if (N % nproc)perror("N must be divisable by nproc");NL = N / nproc;lProcesory przydzielają pamięć dla macierzy składowych.Procesor główny inicjuje macierz wejściową:la = (int *) malloc(N * N sizeof(int));if (!a)perror("malloc a");a_local = (int *) malloc(N * NL * sizeof(int));if (!a_local)perror("malloc a _local");b = (int *) malloc(N * N sizeof(int));if (!b)perror ("malloc b");b_local = (int *) malloc(N * NL * sizeof(int));if (!b_local)perror("malloc b_local");if (iproc == 00{for (i = 0 ; i < N * N ; i++){a[i] = i;}}lDo przesłania fragmentu macierzy do każdego procesora używana jest funkcja MPI_Scatter:lMPI_Scatter(a, N*NL, MPI_INT, a_local, N*NL, MPI_INT, 0, MPI_COMM_WORLD);lProcesory wykonują operację transponowania macierzy:ltranspose(N, a_local, b_local);lMacierz wynikowa jest gromadzona przez procesor główny:lMPI_Gather (b_local, N*NL, MPI_INT, b, N*NL, MPI_INT, 0, MPI_COMM_WORLD);lProcesor główny wywołuje funkcję print_matrix do wyświetlenia macierzy wejściowej i wyjściowej:lif (iproc == 0){print_matrix("Input", M, a);print_matrix("Output", M, b);}free(a);free(a_local);free(b);free(b_local);lNa zakończenie programu jest wywoływana funkcja MPI_Finalize:lMPI_Finalize();exit(0) ;}Programowanie z zastosowaniem PVMPakiet o nazwie Parallel Virtual Machine (PVM) jest inną biblioteką zawierającą funkcje wymiany komunikatów, którą można zastosować do programowania klastrów Beowulf.Realizację projektu PVM rozpoczęto już w roku 1989.w Oak Ridge National Laboratory i obecnie jest ona szeroko stosowana w programowaniu równoległym.Porównanie PVM z MPIPo wprowadzeniu standardu MPI do programów wymieniających komunikaty i udostępnieniu pakietów oprogramowania o wysokiej jakości coraz więcej programistów zaczęło się interesować zastosowaniem MPI w programach pracujących równolegle.Głównym powodem większej popularności MPI w porównaniu z PVM jest to, że biblioteka ta jest bardziej funkcjonalna.Zawiera ona nieblokujące procedury komunikacyjne, umożliwia tworzenie własnych typów danych, obsługuje komunikatory zwiększające wydajność przekazu komunikatów miedzy węzłami i w operacjach kolektywnych, pozwala na definiowanie wirtualnych topologii procesów przyporządkowujących procesy do fizycznych procesorów.Standard MPI umożliwia pracę w heterogenicznym środowisku, w którym programy równoległe działają na pojedynczych komputerach posługujących się danymi o wzajemnie niezgodnych reprezentacjach.Użycie standardu MPI nie oznacza jednak obowiązku, że programy działające na takich zróżnicowanych komputerach mają się ze sobą komunikować.Jeżeli klaster Beowulf składa się z heterogenicznych węzłów, to najprostszą metodą uruchomienia aplikacji równoległej jest użycie PVM.Biblioteka ta w pełni obsługuje środowiska heterogeniczne na poziomie aplikacji użytkownika.Jeżeli komputery tworzące maszynę wirtualną korzystają z różnych reprezentacji danych, to program równoległy przy wysyłaniu danych musi używać specjalnego algorytmu kodującego.Oznacza to, że PVM będzie przekształcać te dane do standardowej postaci podczas pakowania ich do bufora nadawczego.Po rozpakowaniu danych w odbiorniku następuje ich przekształcenie do postaci standardowej używanej wewnątrz tego odbiornika.Pobieranie i instalacja PVMKod źródłowy PVM jest udostępniany bezpłatnie pod adresem http://www.netlib.org/pvm3/index.html, skąd można pobrać skompresowane archiwum.Pakiet zawiera także podręcznik użytkownika objaśniający proces instalacji oraz samouczek sieciowego programowania równoległego.W dalszej części tego podrozdziału zakładamy, że pakiet PVM został pobrany i zainstalowany w katalogu /usr/local/pvm3.Katalog ten powinien zostać skopiowany do każdego węzła w klastrze.Jeżeli klaster ma działać w środowisku heterogenicznym, to pakiet PVM musi być skompilowany w każdym węźle zgodnie z jego architekturą.Aby można było korzystać z PVM, należy wykonać następujące czynności:lZdefiniować zmienną środowiskową PVM_ROOT, nadając jej wartość /usr/local/pvm3,llZdefiniować zmienną środowiskową PVM_DPATH, nadając jej wartość $PVM_ROOT/usr/local/pvm3,llDodać lokalizację plików binarnych PVM do ścieżki wyszukiwania programów.Pliki te są umieszczone w katalogu $PVM_ROOT/bin,llDodać lokalizacje plików podręcznika systemowego PVM do ścieżki wyszukiwania podręcznika systemowego.lOprócz tego, podczas mnożenia procesów demon PVM szuka plików wykonywalnych użytkownika w podkatalogu pvm3/bin/LINUX umieszczonym w jego katalogu macierzystym [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunamigotliwa.htw.pl
  •