Я пытаюсь реализовать распределенный генетический алгоритм (островную модель) с использованием MPI. Все узлы будут многократно генерировать новые группы населения и будут обмениваться лучшими людьми после каждого k итераций. Я хочу сделать случайный случай обмена, чтобы любой процесс мог отправить сообщение любому другому процессу. Поэтому после каждого k-итераций каждый процесс отправляет сообщение произвольно выбранному процессу. Однако я не уверен, как реализовать это с помощью MPI. Из этого сообщения - Sending data to randomly selected hosts by using MPI У меня появилась идея, что асинхронная связь будет полезна, но я не знаю, как именно.mpi отправка сообщения случайно выбранному узлу
ответ
Случайные схемы связи трудно реализовать в MPI. MPI основан на всех рангах, имеющих детерминированный набор шаблонов связи.
Для решения с точки зрения пункта каждый ранг будет называть MPI_Irecv на MPI_ANY_SOURCE. Когда происходит обмен данными, каждый ранг может вызвать MPI_Send в конкретный целевой ранг. Целевой ранг потребуется снова вызвать MPI_Irecv, чтобы подготовиться к следующей итерации. Когда работа будет завершена, любые неиспользуемые вызовы MPI_Irecv могут быть MPI_Cancel'd.
Для коллективного подхода каждый ранг будет называть MPI_Alltoall или MPI_Alltoallv (если количество обмененных данных меняется). Каждый ранг будет заполнять только данные в один ранг, который случайным образом выбирается для приема данных. Такой «разреженный» обмен данными довольно распространен с MPI_Alltoall. Коллектив может быть дорогостоящим, но он обеспечивает жесткую синхронизацию каждые k итераций и позволяет избежать очистки MPI_Cancel.
- 1. одновременная отправка и получение с использованием MPI
- 2. ASP.NET TreeView: возврат к выбранному узлу
- 3. Прокрутка к выбранному узлу в дереве. Прайсы
- 4. Отправка частичных сообщений MPI
- 5. MPI - Отправка сегментов массива
- 6. Подавить сообщения от MPI
- 7. Отправка строки в C++ MPI
- 8. проблемы MPI отправка информации работников
- 9. Отправка Lambda Closure Over MPI
- 10. Open MPI Отправка структуры C
- 11. Отправка строкового массива MPI C
- 12. MPI - отправка и получение столбца
- 13. Cytoscape.js - селектор для ребер, прикрепленных к выбранному узлу
- 14. C# WPF - Добавление дочернего узла к выбранному узлу в treeview
- 15. Доступ к выбранному узлу дерева интерфейсов из Javascript
- 16. Как добавить узел к выбранному узлу в TreeView?
- 17. boost mpi отправляет NULL-сообщения
- 18. MPI: Получение уже полученного сообщения?
- 19. MPI - Усечение сообщения в MPI_Recv
- 20. отправка изображений в divs случайно
- 21. Отправка данных из формы выбранному получателю
- 22. Wordpress сортировать сообщения по выбранному произвольному полю
- 23. Отправка раздела 3D-массива с использованием MPI
- 24. Отправка строкой C любого типа в MPI
- 25. Отправка STRUCT с использованием MPI коллективной коммуникации
- 26. Отправка данных типа size_t с помощью MPI
- 27. MPI - отправка частей изображения в разные процессы
- 28. MPI: Отправка массива структуры, содержащей указатель
- 29. Отправка открытых заданий MPI в SGE
- 30. Отправка массива через связь между точками MPI
Спасибо! Если два отправителя генерируют идентификатор одного и того же приемника и, таким образом, оба отправляют сообщения одному и тому же, не будет ли потеря сообщения? Также не могли бы вы прояснить суть двух MPI_IRecv? – vjain27
В решении от точки к точке в любой момент времени каждый ранг будет иметь только один MPI_IRecv на MPI_ANY_SOURCE. Если сообщение согласовано, то должен быть отправлен новый MPI_Irecv, чтобы можно было получить «следующее» случайное сообщение. Я не рассматривал случай, когда «i» ранжирует все случайным образом одинаковый целевой ранг. В этом случае предпочтительным будет решение MPI_Alltoall. Трудность в двухточечном случае состоит в том, что необходимо будет иметь отдельное «все ясное» сообщение или коллективный вызов, чтобы все звания знали, что пришло время перейти к следующему набору итераций. –
Отличный ответ. Тем не менее, я думаю, было бы интересно реализовать асинхронное решение. Я однажды сделал это для дипломной работы, и это было значительно быстрее, чем синхронизированный алгоритм и с равным качеством. Однако я использовал подход подчиненного подчиненного и распараллеливал только оценку. Мастер поддерживал список рабочих и незанятых рабов, чтобы решить, куда отправлять решения. – Andreas