что означает настройка MPI для разделяемой памяти?
У меня есть вопрос, связанный с исследованиями.
В настоящее время я закончил реализацию структуры каркасной структуры на основе MPI (специально используяopenmpi 6.3). рама должна использоваться на одной машине. Теперь я сравниваю его с другими предыдущими реализациями скелета (такими какскандий, быстрый поток, ..)
Я заметил одну вещь: производительность моей реализации не так хороша, как у других реализаций. Я думаю, это потому, что моя реализация основана на MPI (таким образом, двусторонняя связь, которая требует сопоставления операции отправки и получения), в то время как другие реализации, с которыми я сравниваю, основаны на разделяемой памяти. (... но у меня нет хорошего объяснения, чтобы объяснить это, и это часть моего вопроса)
Есть большая разница во времени завершения двух категорий.
Сегодня я также познакомился с настройкой open-mpi для разделяемой памяти здесь =>OpenMPI-см
и вот приходит мой вопрос.
первый что значит настроить MPI для разделяемой памяти? Я имею в виду, пока процессы MPI живут в своей собственной виртуальной памяти; что в действительности означает флаг в следующей команде? (Я думал, что в MPI каждое сообщение происходит путем явной передачи сообщения, память не распределяется между процессами).
shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out
второй почему производительность MPI намного хуже по сравнению с другими реализациями скелета, разработанными для разделяемой памяти? По крайней мере, я также запускаю его на одной многоядерной машине. (Я предполагаю, что это потому, что другая реализация использовала параллельное программирование потоков, но у меня нет убедительного объяснения этому).
Любое предложение или дальнейшее обсуждение очень приветствуется.
Пожалуйста, дайте мне знать, если мне нужно уточнить мой вопрос.
Спасибо за уделенное время!