Jak uruchomić MPI-3.0 w trybie pamięci współdzielonej, takim jak OpenMP

14

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:

  1. Jak będę musiał zmienić kod? Czy muszę dodawać wywołania do innych funkcji MPI, takich jak MPI_WIN_ALLOCATE?

  2. 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.

Franklin Betten
źródło
1
Tak, powinieneś być w stanie uruchomić MPI na systemie pamięci współdzielonej. Jednak sposób jego zaprogramowania będzie identyczny. Twój kod powinien być taki sam dla systemów pamięci współużytkowanej i rozproszonej. Jedyną różnicą jest sposób, w jaki jest uruchamiany .
NoseKnowsWszystkie
Ponadto, chociaż nie testowałem tego, uważam, że powinieneś być w stanie uruchomić swój kod za pomocą polecenia, mpiexec -n 8 /path/to/applicationaby sfałszować komputer, aby pomyślał, że ma 8 różnych węzłów.
NoseKnowsWszystkie
Uruchomiłem go już na systemie pamięci współdzielonej, ale chcę, aby rdzenie obliczeniowe korzystały z pamięci RAM, podobnie jak w OpenMP. Niektóre z moich macierzy mają 6 GB, więc potrzebuję wszystkich rdzeni w każdym węźle, aby działać w trybie pamięci współdzielonej.
Franklin Betten
2
To jest projekt badawczy. Więc muszę zwiększyć rozmiar problemu. Mam już działający kod, więc jedyną rzeczą, która zapobiega skalowaniu jest potrzebna pamięć. Natknąłem się na niektóre dokumenty i punkty PowerPoint z konferencji MPI, które sugerują, że MPI-3.0 może dzielić pamięć z nowymi funkcjami połączeń, które zostały dodane w ramach kategorii komunikacji jednostronnej. Funkcje takie jak MPI_WIN_ALLOCATE_SHARE
Franklin Betten
2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Franklin Betten

Odpowiedzi:

0

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.

Franklin Betten
źródło
1
Możesz używać MPI_Win_allocate_shared ze wszystkimi trzema interfejsami Fortran. Ponadto możesz pisać własne z Fortran 2003 ISO_C_BINDING i interfejsem C.
Jeff
Powiedz mi, dlaczego trzeba używać Type (), aby używać RMA z Fortran? Nie znam takich ograniczeń. RMA jest używany z F77 od wielu lat.
Jeff