что означает настройка MPI для разделяемой памяти?

У меня есть вопрос, связанный с исследованиями.

В настоящее время я закончил реализацию структуры каркасной структуры на основе MPI (специально используяopenmpi 6.3). рама должна использоваться на одной машине. Теперь я сравниваю его с другими предыдущими реализациями скелета (такими какскандий,быстрый поток, ..)

Я заметил одну вещь: производительность моей реализации не так хороша, как у других реализаций. Я думаю, это потому, что моя реализация основана на MPI (таким образом, двусторонняя связь, которая требует сопоставления операции отправки и получения), в то время как другие реализации, с которыми я сравниваю, основаны на разделяемой памяти. (... но у меня нет хорошего объяснения, чтобы объяснить это, и это часть моего вопроса)

Есть большая разница во времени завершения двух категорий.

Сегодня я также познакомился с настройкой open-mpi для разделяемой памяти здесь => OpenMPI-см

и вот приходит мой вопрос.

первый что значит настроить MPI для разделяемой памяти? Я имею в виду, пока процессы MPI живут в своей собственной виртуальной памяти; что в действительности означает флаг в следующей команде? (Я думал, что в MPI каждое сообщение происходит путем явной передачи сообщения, память не распределяется между процессами).

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

второй почему производительность MPI намного хуже по сравнению с другими реализациями скелета, разработанными для разделяемой памяти? По крайней мере, я также запускаю его на одной многоядерной машине. (Я предполагаю, что это потому, что другая реализация использовала параллельное программирование потоков, но у меня нет убедительного объяснения этому).

Любое предложение или дальнейшее обсуждение очень приветствуется.

Пожалуйста, дайте мне знать, если мне нужно уточнить мой вопрос.

Спасибо за ваше время!