Como executar o MPI-3.0 no modo de memória compartilhada como o OpenMP

14

Estou paralelizando código para resolver numericamente um modelo de equilíbrio populacional em 5 dimensões. Atualmente, tenho um código paralelo MPICH2 muito bom no FORTRAN, mas à medida que aumentamos os valores dos parâmetros, as matrizes ficam muito grandes para serem executadas no modo de memória distribuída.

Eu tenho acesso a um cluster com 15 nós, onde cada nó tem duas CPUs de 8 núcleos e 128 GB de RAM. Eu quero escrever executar um programa com MPI-3.0 no modo de memória compartilhada para que cada processo não gere sua própria cópia de cada matriz.

Antes de poder executar qualquer coisa no cluster, tenho que testá-lo em uma área de trabalho executando o Ubuntu. É essencialmente um blade do cluster, pois possui duas CPUs de 8 núcleos e 128 GB de RAM. Escreverei e testarei meu código nele, portanto, direcione suas respostas para a execução de programas no computador Ubuntu.

Eu li que existe uma maneira de executar o MPI-3.0 no modo de memória compartilhada, como o OpenMP, em vez do modo de memória distribuída padrão.

Questões:

  1. Como terei que alterar meu código? Preciso adicionar chamadas para outras funções MPI como MPI_WIN_ALLOCATE?

  2. Como compilar meu código para executar o MPI-3.0 no modo de memória compartilhada? Isso será diferente se for sobre vários nós?

Por favor, dê exemplos de scripts de compilação, se puder. Eu também tenho apenas compiladores GNU. O cluster que eu uso não suporta compiladores Intel.

Franklin Betten
fonte
1
Sim, você deve conseguir executar o MPI em um sistema de memória compartilhada. No entanto, a maneira como ele é realmente programado será idêntica. Seu código deve ser o mesmo para sistemas de memória compartilhada e distribuída. Como é executado é a única diferença.
NoseKnowsAll
Além disso, embora eu não tenha testado isso, acredito que você possa executar seu código usando o comando mpiexec -n 8 /path/to/applicationpara falsificar seu computador, pensando que ele possui 8 nós diferentes.
NoseKnowsAll
Já o executei em um sistema de memória compartilhada, mas quero que os núcleos de computação compartilhem RAM, como no OpenMP. Algumas de minhas matrizes têm 6 GB, portanto, preciso de todos os núcleos em cada nó para operar no modo de memória compartilhada.
Franklin Betten
2
Bem, isso é para um projeto de pesquisa. Então, preciso aumentar o tamanho do problema. Eu já tenho código de trabalho, então a única coisa que impede a expansão é a memória necessária. Encontrei alguns documentos e powerpoints de conferências MPI que sugerem que o MPI-3.0 pode compartilhar memória com novas funções de chamada que foram adicionadas na categoria de comunicação unilateral. Funções 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

Respostas:

0

Eu também encontrei este link no Stack Overflow. Juro que procurei perguntas como a minha para sempre, mas parece que a melhor maneira de pesquisar uma pergunta no estouro de pilha é começar a fazer uma pergunta e sugerir postagens semelhantes.

Enfim, aqui está o link que de fato diz que você pode executar o MPI3.0 + no modo de memória compartilhada como o openmp. Encontrei outras fontes que também sugerem e algumas que afirmam que você pode, mas não explica, nem fornece recursos para descobrir isso.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

Depois de seguir os conselhos fornecidos aqui neste link, tive problemas ao colocar o USE 'mpi_f08' na parte superior do meu código. Estou usando o gfortran-4.8, que aparentemente atualmente não possui suporte suficiente ao FORTRAN2008 para USE mpi_f08. Alguém neste link provavelmente estava usando o compilador intel fortran 2008. Você pode usar USE mpi que cobre muito bem o Fortran2003. No entanto, não acho que o Fortran 2003 tenha as funções Type () necessárias para usar as funções de Acesso Remoto à Memória, como MPI_WIN_ALLOCATE_SHARED, portanto, você não pode usá-las sem o FORTRAN2008. Mas eu realmente não tenho recursos suficientes para dizer isso definitivamente, mas o que eu achei sugere isso.

Franklin Betten
fonte
1
Você pode usar MPI_Win_allocate_shared com todas as três interfaces do Fortran. Além disso, você pode escrever seu próprio com o Fortran 2003 ISO_C_BINDING e a interface C.
Jeff
Por favor, diga-me por que é necessário Type () para usar o RMA do Fortran? Não conheço essa limitação. O RMA é usado com o F77 há muitos anos.
Jeff