Używam kodu równoległego do numerycznego rozwiązania 5-wymiarowego modelu równowagi populacji. Obecnie mam bardzo dobry kod równoległy MPICH2 w FORTRAN, ale gdy zwiększamy wartości parametrów, tablice stają się zbyt duże, aby działać w trybie pamięci rozproszonej.
Mam dostęp do klastra z 15 węzłami, w którym każdy węzeł ma dwa 8-rdzeniowe procesory i 128 GB pamięci RAM. Chcę napisać uruchomić program z MPI-3.0 w trybie pamięci współużytkowanej, aby każdy proces nie generował własnej kopii każdej tablicy.
Zanim będę mógł uruchomić cokolwiek w klastrze, muszę go przetestować na komputerze z systemem Ubuntu. Jest to zasadniczo jedno ostrze klastra, ponieważ ma dwa 8-rdzeniowe procesory i 128 GB pamięci RAM. Będę pisać i testować na nim mój kod, więc proszę o odpowiedź na uruchamianie programów na komputerze Ubuntu.
Czytałem, że istnieje sposób na uruchomienie MPI-3.0 w trybie pamięci współdzielonej, takim jak OpenMP, zamiast domyślnego trybu pamięci rozproszonej.
Pytania:
Jak będę musiał zmienić kod? Czy muszę dodawać wywołania do innych funkcji MPI, takich jak
MPI_WIN_ALLOCATE
?Jak skompilować kod, aby uruchomić MPI-3.0 w trybie pamięci współdzielonej? Czy będzie inaczej, jeśli będzie obejmował kilka węzłów?
Podaj przykładowe skrypty kompilacyjne, jeśli możesz. Mam też tylko kompilatory GNU. Klaster, którego używam, nie obsługuje kompilatorów Intel.
mpiexec -n 8 /path/to/application
aby sfałszować komputer, aby pomyślał, że ma 8 różnych węzłów.Odpowiedzi:
Znalazłem również ten link w przepełnieniu stosu. Przysięgam, że szukałem pytań takich jak moje na zawsze, ale wydaje się, że najlepszym sposobem na wyszukiwanie pytania dotyczącego przepełnienia stosu jest rozpoczęcie zadawania pytań i zasugerowanie podobnych postów.
W każdym razie tutaj jest link, który w rzeczywistości mówi, że możesz uruchomić MPI3.0 + w trybie pamięci współdzielonej, takim jak openmp. Znalazłem też inne źródła, które również sugerują, a niektóre z nich stwierdzają, że możesz, ale nie wyjaśniaj, w jaki sposób lub daj zasoby, aby to rozgryźć.
/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp
Po skorzystaniu z porady podanej tutaj w tym linku napotkałem problemy z umieszczeniem USE „mpi_f08” na górze mojego kodu. Używam gfortran-4.8, który najwyraźniej nie ma obecnie wystarczającej obsługi FORTRAN2008, aby móc użyć mpi_f08. Osoba w tym łączu prawdopodobnie korzystała z kompilatora Intel Fortran 2008. Możesz użyć USE mpi, które całkiem dobrze pokrywa Fortran2003. Jednak nie sądzę, że Fortran 2003 ma funkcje Type (), które są potrzebne do korzystania z funkcji zdalnego dostępu do pamięci, takich jak MPI_WIN_ALLOCATE_SHARED, więc nie można ich używać bez FORTRAN2008. Ale tak naprawdę nie mam wystarczających zasobów, żeby to powiedzieć, ale to, co znalazłem, sugeruje to.
źródło