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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.