2017-02-14 6 views
0

Я работаю над программой, которая интенсивно взаимодействует с группой людей. Я не очень хорошо разбираюсь в распределенных программах, но у меня есть сильное подозрение, что я отправляю слишком много сообщений сразу в процесс. Я переопределил модель актера в mpi4py. Каждый процесс имеет «почтовый ящик» заданий, и когда они заканчивают свой почтовый ящик, они решают перейти в режим CHECK_FOR_UPDATES, где они видят, есть ли какие-либо новые сообщения, которые они могут получить.mpi4py recv data cap?

У меня были проблемы с программой, в которой участвовала группа студентов, над которыми я работала. Когда загрузка стала слишком большой, она начнет сбой, но мы не могли понять, где проблема, потому что все мы плохо себя чувствуем при отладке.

Я спросил у некоторых людей в своей школе, есть ли у него какие-либо идеи и предположил, что, поскольку мы переоцениваем актерскую систему, мы должны рассмотреть возможность использования Акки. Студент в этом году сказал, что все еще может быть проблема, что один актер может наводнить сообщениями и сбой. I asked about it here. Потоковая модель кажется не такой, какой мы хотим (см. Мой комментарий для более подробной информации), и с тех пор я снова посмотрел на программу mpi4py, поскольку раньше не рассматривал эту проблему.

В простой реализации C или Fortran, похоже, что есть count parameter for MPI_Recv. Я заметил, что comm.recv не имеет параметра count и подозревает, что когда процесс переходит в режим CHECK_FOR_UPDATES, он просто потребляет массу сообщений из разных источников и умирает. (Технически, я точно не знаю, но мы подозреваем, что это может быть так.) Есть ли способ ограничить объем данных comm.recv?

(Примечание:. Я хочу, чтобы избежать использования comm.Recv варианта, так как это ограничивает пользователь с помощью numpy массивов)

ответ

0

Found the answer:

В recv() и irecv() методов могут быть передан объектом буфера, который может быть повторно используется для приема сообщений, избегая выделения внутренней памяти. Буфер должен быть достаточно большим для размещения переданных сообщений.

Emphasis mine. Поэтому я должен использовать Send и Recv.

 Смежные вопросы

  • Нет связанных вопросов^_^