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