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:
Como terei que alterar meu código? Preciso adicionar chamadas para outras funções MPI como
MPI_WIN_ALLOCATE
?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.
mpiexec -n 8 /path/to/application
para falsificar seu computador, pensando que ele possui 8 nós diferentes.Respostas:
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.
fonte