Je parallélise le code pour résoudre numériquement un modèle d'équilibre de population à 5 dimensions. Actuellement, j'ai un très bon code parallélisé MPICH2 dans FORTRAN mais à mesure que nous augmentons les valeurs des paramètres, les tableaux deviennent trop volumineux pour fonctionner en mode mémoire distribuée.
J'ai accès à un cluster avec 15 nœuds, où chaque nœud a deux processeurs 8 cœurs et 128 Go de RAM. Je veux écrire exécuter un programme avec MPI-3.0 en mode mémoire partagée afin que chaque processus ne génère pas sa propre copie de chaque tableau.
Avant de pouvoir exécuter quoi que ce soit sur le cluster, je dois le tester sur un bureau exécutant Ubuntu. Il s'agit essentiellement d'une lame du cluster dans la mesure où elle possède deux processeurs 8 cœurs et 128 Go de RAM. J'écrirai et testerai mon code dessus, alors veuillez orienter vos réponses vers l'exécution de programmes sur l'ordinateur Ubuntu.
J'ai lu qu'il existe un moyen d'exécuter MPI-3.0 en mode de mémoire partagée comme OpenMP au lieu de son mode de mémoire distribuée par défaut.
Des questions:
Comment vais-je devoir modifier mon code? Dois-je ajouter des appels à d'autres fonctions MPI comme
MPI_WIN_ALLOCATE
?Comment compiler mon code pour exécuter MPI-3.0 en mode mémoire partagée? Est-ce que ce sera différent si c'est sur plusieurs nœuds?
Veuillez donner des exemples de scripts de compilation si vous le pouvez. Je n'ai également que des compilateurs GNU. Le cluster que j'utilise ne prend pas en charge les compilateurs Intel.
mpiexec -n 8 /path/to/application
pour faire croire à votre ordinateur qu'il a 8 nœuds différents.Réponses:
J'ai également trouvé ce lien sur Stack Overflow. Je jure que j'ai cherché des questions comme la mienne pour toujours, mais il semble que la meilleure façon de rechercher une question sur le débordement de pile est de commencer à poser une question et elle suggérera des messages similaires.
Quoi qu'il en soit, voici le lien qui dit en fait que vous pouvez exécuter MPI3.0 + en mode mémoire partagée comme openmp. Il y a d'autres sources que j'ai trouvées qui suggèrent également et certaines qui indiquent que vous pouvez mais n'expliquez pas comment ou donnez des ressources pour le comprendre.
/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp
Après avoir suivi les conseils donnés ici dans ce lien, j'ai rencontré des problèmes pour mettre USE 'mpi_f08' en haut de mon code. J'utilise gfortran-4.8 qui n'a apparemment pas assez de support FORTRAN2008 pour UTILISER mpi_f08. La personne dans ce lien utilisait probablement le compilateur Intel Fortran 2008. Vous pouvez très bien utiliser USE mpi qui couvre jusqu'à Fortran2003. Cependant, je ne pense pas que Fortran 2003 possède les fonctions Type () nécessaires pour utiliser les fonctions d'accès à la mémoire à distance, telles que MPI_WIN_ALLOCATE_SHARED, vous ne pouvez donc pas les utiliser sans FORTRAN2008. Mais je n'ai vraiment pas assez de ressources pour le dire avec certitude, mais ce que j'ai trouvé le suggère.
la source