Cómo ejecutar MPI-3.0 en modo de memoria compartida como OpenMP

14

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:

  1. ¿Cómo tendré que alterar mi código? ¿Necesito agregar llamadas a otras funciones MPI como MPI_WIN_ALLOCATE?

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

Franklin Betten
fuente
1
Sí, debería poder ejecutar MPI en un sistema de memoria compartida. Sin embargo, la forma en que está realmente programada será idéntica. Su código debe ser el mismo para los sistemas de memoria compartida y distribuida. Cómo se ejecuta es la única diferencia.
NoseKnowsTodo el
Además, aunque no he probado esto, creo que debería poder ejecutar su código usando el comando mpiexec -n 8 /path/to/applicationpara hacer que su computadora piense que tiene 8 nodos diferentes.
NoseKnowsTodo el
Ya lo he ejecutado en un sistema de memoria compartida pero quiero que los núcleos informáticos compartan RAM, como en OpenMP. Algunos de mis arreglos son de 6 GB, así que necesito todos los núcleos en cada nodo para operar en modo de memoria compartida.
Franklin Betten
2
Bueno, esto es para un proyecto de investigación. Entonces necesito escalar el tamaño del problema. Ya tengo un código de trabajo, por lo que lo único que impide la ampliación es la memoria necesaria. He encontrado algunos documentos y powerpoints de conferencias de MPI que sugieren que MPI-3.0 puede compartir memoria con nuevas funciones de llamadas que se han agregado bajo la categoría de comunicación unilateral. Funciones como 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

Respuestas:

0

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.

Franklin Betten
fuente
1
Puede usar MPI_Win_allocate_shared con las tres interfaces Fortran. Además, puede escribir el suyo propio con Fortran 2003 ISO_C_BINDING y la interfaz C.
Jeff
¿Dime por qué uno necesita Type () para usar RMA de Fortran? No conozco tal limitación. RMA se ha utilizado con F77 durante muchos años.
Jeff