O que significa configurar MPI para memória compartilhada?

Eu tenho um pouco de pesquisa relacionada a questão.

Atualmente eu terminei a implementação do trabalho de estrutura esqueleto estrutura com base em MPI (especificamente usandoopenmpi 6,3). o trabalho de moldura deve ser usado em uma única máquina. agora, estou comparando com outras implementações de esqueleto anteriores (comoescândio, fluxo rápido, ..)

Uma coisa que tenho notado é que o desempenho da minha implementação não é tão bom quanto as outras implementações. Eu acho que isso é porque, a minha implementação é baseada em MPI (assim, uma comunicação frente e verso que exigem a correspondência de operação de envio e recebimento), enquanto as outras implementações que eu estou comparando são baseadas na memória compartilhada. (... mas ainda não tenho uma boa explicação para raciocinar isso, e faz parte da minha pergunta)

Há uma grande diferença no tempo de conclusão das duas categorias.

Hoje também sou apresentado a configuração do open-mpi para memória compartilhada aqui =>openmpi-sm

e vem a minha pergunta.

 o que significa configurar o MPI para memória compartilhada? Quero dizer, enquanto processos de MPI vivem em sua própria memória virtual; o que realmente é a bandeira como no seguinte comando fazer? (Eu pensei em MPI toda comunicação é explicitamente passando uma mensagem, nenhuma memória é compartilhada entre processos).

    shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out

 Por que o desempenho do MPI é muito pior em comparação com outras implementações de esqueleto desenvolvidas para memória compartilhada? Pelo menos eu também estou executando em uma única máquina multi-core. (Eu suponho que seja porque outra implementação usou programação paralela de threads, mas não tenho nenhuma explicação convincente para isso).

qualquer sugestão ou discussão adicional é muito bem vinda.

Por favor, deixe-me saber se tenho que esclarecer melhor a minha pergunta.

obrigado pelo seu tempo!

questionAnswers(1)

yourAnswerToTheQuestion