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

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

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

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

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

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

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

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

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

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

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

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

Спасибо за уделенное время!

Ответы на вопрос(1)

Ваш ответ на вопрос