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