mpi recv



Автор Ника Рика задал вопрос в разделе Другие языки и технологии

С++. Многопоточность. Синхронизация send и recv и получил лучший ответ

Ответ от Spy[гуру]
MPI_Recv( charBuf, charBufSize, MPI_CHAR, MPI_ANY_SOURCE, tagCharData, ..);
Теперь, если в момент выполнения сообщение с идентификатором tagCharData придет раньше двух остальных, MPI будет вынужден "законсервировать" его на время выполнения первых двух вызовов MPI_Recv. Это чревато непроизводительными расходами памяти. MPI_Probe позволит задать порядок извлечения сообщений в буфер пользователя равным порядку их поступления на принимающую сторону, делая это не в момент компиляции, а непосредственно в момент выполнения:
for( i=0; i<3; i++ ) {
MPI_Probe( MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status );
switch( status.MPI_TAG ) {
case tagFloatData:
MPI_Recv( floatBuf, floatBufSize, MPI_FLOAT, ..);
break;
case tagIntData:
MPI_Recv( intBuf, intBufSize, MPI_INT, ..);
break;
case tagCharData:
MPI_Recv( charBuf, charBufSize, MPI_CHAR, ..);
break;
} /* конец switch */
} /* конец for */
Многоточия здесь означают, что последние 4 параметра у MPI_Recv такие же, как и у предшествующей им MPI_Probe.
Источник: http://ilya-evseev.narod.ru/articles/mpi/Spy
Гуру
(3411)
увы...

Ответ от Зло[гуру]
когда-то давным-давно делал я подобную хрень.
так вот, у меня был менеджер и бесконечный цикл с паузой в конце =)
менеджер в цикле:
1. пробегался по всем подключенным сокетам и пытался из них читать. получалось - отправлял данные привязанному агенту.
2. после этого он смотрел в свою очередь исходящих и писал в нужные сокеты данные из очереди.
3. немного поспал - и заново.
да, одновременной обработки 100500 сообщений не было, но поддержка 25 устройств внешне даже real-time казалась

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: С++. Многопоточность. Синхронизация send и recv
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*