Estoy paralelizando el código para resolver numéricamente un modelo de equilibrio de población de 5 dimensiones. Actualmente tengo un muy buen código paralelo MPICH2 en FORTRAN, pero a medida que aumentamos los valores de los parámetros, las matrices se vuelven demasiado grandes para ejecutarse en modo de memoria distribuida.
Tengo acceso a un clúster con 15 nodos, donde cada nodo tiene dos CPU de 8 núcleos y 128 GB de RAM. Quiero escribir ejecutar un programa con MPI-3.0 en modo de memoria compartida para que cada proceso no genere su propia copia de cada matriz.
Antes de poder ejecutar algo en el clúster, tengo que probarlo en un escritorio con Ubuntu. Es esencialmente una cuchilla del clúster, ya que tiene dos CPU de 8 núcleos y 128 GB de RAM. Escribiré y probaré mi código en él, así que por favor orienta tus respuestas para ejecutar programas en la computadora Ubuntu.
He leído que hay una manera de ejecutar MPI-3.0 en modo de memoria compartida como OpenMP en lugar de su modo de memoria distribuida predeterminada.
Preguntas:
¿Cómo tendré que alterar mi código? ¿Necesito agregar llamadas a otras funciones MPI como
MPI_WIN_ALLOCATE
?¿Cómo compilo mi código para ejecutar MPI-3.0 en modo de memoria compartida? ¿Será diferente si se trata de varios nodos?
Proporcione scripts de compilación de muestra si puede. También tengo solo compiladores GNU. El clúster que uso no es compatible con los compiladores Intel.
mpiexec -n 8 /path/to/application
para hacer que su computadora piense que tiene 8 nodos diferentes.Respuestas:
También encontré este enlace en Stack Overflow. Juro que busqué preguntas como la mía para siempre, pero parece que la mejor manera de buscar una pregunta en el desbordamiento de pila es comenzar a hacer una pregunta y sugerirán publicaciones similares.
De todos modos, aquí está el enlace que de hecho dice que puedes ejecutar MPI3.0 + en modo de memoria compartida como openmp. Encontré otras fuentes que también sugieren y algunas que afirman que puede pero no explican cómo o dan recursos para resolverlo.
/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp
Después de seguir los consejos dados aquí en este enlace, me encontré con problemas al poner USE 'mpi_f08' en la parte superior de mi código. Estoy usando gfortran-4.8 que aparentemente actualmente no tiene suficiente soporte FORTRAN2008 para USAR mpi_f08. La persona en este enlace probablemente estaba usando el compilador intel fortran 2008. Puede usar USE mpi que cubre bastante bien hasta Fortran2003. Sin embargo, no creo que Fortran 2003 tenga las funciones Tipo () necesarias para usar las funciones de Acceso a memoria remota, como MPI_WIN_ALLOCATE_SHARED, por lo que no puede usarlas sin FORTRAN2008. Pero realmente no tengo suficientes recursos para decir eso definitivamente, pero lo que he encontrado sugiere eso.
fuente