У меня есть сеть, в которой процессы отправляют случайное сообщение своим соседям и одновременно получают сообщения от своих соседей. Я могу сделать это с помощью сокетов и потоков. Один поток принимает сообщения, а другой отправляет сообщения соседнему, выбранному случайным образом. Можно ли добиться этого с помощью MPI_SEND и MPI_RECV?одновременная отправка и получение с использованием MPI
ответ
Вы можете использовать вызовы MPI в многопоточной среде. Проверьте руководство для функции MPI_Init_thread и этой статьи: http://www.mcs.anl.gov/~thakur/papers/mpi-threads.pdf. Помните, что стандарт MPI-1 не требует, чтобы реализация была потокобезопасной, только MPI-2 (но реализация, которую вы используете, скорее всего, MPI-2).
Спасибо. Является ли многопоточность единственным вариантом или теоретически можно достичь этого, используя неблокирующие отправки и получения? – arunmoezhi
Трудно сказать, не зная подробно, что делает ваш код, возможно, возможно каким-то образом изменить ваш алгоритм и использовать неблокирующие вызовы. С другой стороны, у меня была очень похожая проблема в прошлом - я работал над параллельной сортировкой, и было необходимо отправлять и получать сообщения одновременно; единственным решением, которое я нашел, было использование двух потоков и сокетов (это было в то время, когда MPI-2 еще не существовал, и все доступные мне реализации MPI-1 не были потокобезопасными). – miy
Ваше определение: "одновременное"?
В любом случае, вы можете быть заинтересованы в MPI_Sendrecv:
Семантика операции передачи-приема является то, что можно было бы получить, если вызывающий раздвоенный два параллельных потоков, один для выполнения отправки, и один для выполнения приема, за которым следует объединение этих двух потоков.
Спасибо. Скажем, у меня есть 3 ранга, и каждый ранг должен отправить 2 сообщения в другие ряды. Например, Rank1 отправляет 2 сообщения в Rank0 и 2 сообщения в Rank1. В целом каждый ранг отправляет 4 сообщения. Но временной интервал между каждой отправкой рандомизирован. И я не хочу помещать блок синхронизации между каждым sendrecv. – arunmoezhi
- 1. MPI - отправка и получение столбца
- 2. Отправка раздела 3D-массива с использованием MPI
- 3. Отправка STRUCT с использованием MPI коллективной коммуникации
- 4. Одновременная отправка нескольких событий
- 5. Отправка и получение от разных процессов в MPI
- 6. Отправка и получение данных с использованием сокетов
- 7. Отправка и получение SMS с использованием Twilio
- 8. Отправка и получение операций между коммуникаторами в MPI
- 9. Получение ошибки с MPI
- 10. отправка файла с использованием ajax и получение с использованием java
- 11. MPI - Отправка сегментов массива
- 12. Отправка частичных сообщений MPI
- 13. ConcurrentHashmap одновременная запись и получение операций
- 14. отправка блоков 2D-массива в C с использованием MPI
- 15. Отправка блоков строк 2D массива с использованием MPI в C
- 16. 3G-модем: одновременная отправка SMS и активное подключение к Интернету
- 17. Отправка файла и получение ответа с использованием ICAP и Java
- 18. Отправка Lambda Closure Over MPI
- 19. Отправка строки в C++ MPI
- 20. Отправка строкового массива MPI C
- 21. Отправка/получение SMS с использованием coldfusion
- 22. Отправка данных типа size_t с помощью MPI
- 23. проблемы MPI отправка информации работников
- 24. Open MPI Отправка структуры C
- 25. одновременная загрузка с использованием файла download.file
- 26. Одновременная запись в файл с использованием C++
- 27. Отправка и получение данных
- 28. UDP Отправка и получение
- 29. mpi отправка сообщения случайно выбранному узлу
- 30. Отправка и получение с использованием $ .ajax jquery mobile
Вы имеете в виду неблокирующую версию отправки и получения? – arunmoezhi
Ничего. На самом деле, я плохо понимаю ваш вопрос, чтобы ответить на него. – nhahtdh
Я попытался использовать это, но мне нужно поместить отправку в цикле, который отправляет сообщения в произвольные интервалы времени. Во время этого выполнения цикла ранг должен получить любое отправленное сообщение – arunmoezhi