PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 10 дек 18 18:33

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Синхронизация MPI
СообщениеДобавлено: 19 сен 12 16:23 
Не в сети

Зарегистрирован: 25 июн 10 17:36
Сообщения: 35
Откуда: Тюмень
у меня назрел рабочий вопрос: может ли рут послать запрос самому себе в одном потоке (MPI_isend -> MPI_irecv -> slave work -> MPI_wait_all), а ответить - в другом потоке ( MPI_send )?

у меня в такой ситуации MPI_wait_all висит на последнем MPI_Request'е

p.s.: уровень синхронизации MPI_THREAD_SERIALIZED
p.s.: библиотека MS-MPI


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 23 сен 12 18:11 
Не в сети

Зарегистрирован: 2 ноя 11 19:40
Сообщения: 26
Откуда: Владивосток
Стандарт не противоречит потокам, хотя на прямую и не поддерживает их.
Если не напутать с блокирующими и неблокируюзими send/recv'ами, то самому себе посылать и принимать можно и даже в разных потоках.
Вопрос в другом. Зачем это делать? Если можно гораздо эффективнее органимзовать взаимодействие потоков через общую память.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 24 сен 12 9:59 
Не в сети

Зарегистрирован: 25 июн 10 17:36
Сообщения: 35
Откуда: Тюмень
gvt писал(а):
Стандарт не противоречит потокам, хотя на прямую и не поддерживает их.
Если не напутать с блокирующими и неблокируюзими send/recv'ами, то самому себе посылать и принимать можно и даже в разных потоках.
Вопрос в другом. Зачем это делать? Если можно гораздо эффективнее органимзовать взаимодействие потоков через общую память.

Ну как же не поддерживает?
MPI_Init_thread как раз и инициализирует поддержку многопоточной среды.
И что значит "Если не напутать с блокирующими и неблокируюзими send/recv'ами"? Если не поставить дедлок? Есть такая штука, только такие дедлоки отслеживаются HPC, т.е. в случае вызова синхронного Send'а без предварительного вызова Recv'а, HPC обрывает задачу с соответствующим уведомлением.

Общая память не подходит по разным причинам


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 24 сен 12 10:30 
Не в сети

Зарегистрирован: 11 дек 02 19:37
Сообщения: 872
Откуда: НИВЦ МГУ
mega писал(а):
И что значит "Если не напутать с блокирующими и неблокируюзими send/recv'ами"? Если не поставить дедлок? Есть такая штука, только такие дедлоки отслеживаются HPC, т.е. в случае вызова синхронного Send'а без предварительного вызова Recv'а, HPC обрывает задачу с соответствующим уведомлением.

Общая память не подходит по разным причинам


А HPC - это что в данном случае?
MPI такого точно не делает, более того, сделать синхронный Send до соответствующего Recv - заурядное явление, которое MPI отлично отрабатывает, поэтому мне интересно что это за штука - HPC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 24 сен 12 10:35 
Не в сети

Зарегистрирован: 25 июн 10 17:36
Сообщения: 35
Откуда: Тюмень
Serg_Zhum писал(а):
А HPC - это что в данном случае?
MPI такого точно не делает, более того, сделать синхронный Send до соответствующего Recv - заурядное явление, которое MPI отлично отрабатывает, поэтому мне интересно что это за штука - HPC.

HPC - Microsoft HPC Pack

По всей видимости, отслеживание дедлоков происходит на протяжении какого-то времени, допустим: до закрытия контекста, в котором этот вызов сделан

Serg_Zhum писал(а):
более того, сделать синхронный Send до соответствующего Recv - заурядное явление, которое MPI отлично отрабатывает

для разных узлов - да, пожалуй, заурядное,
я вообще-то говорю про единственный запрос, который происходит локально, на мастер-узле,
именно на этом запросе висит WPI_wait_all, как я уже сказал

p.s.: хотя, нет - не сказал, но теперь-то уже точно сказал )))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 24 сен 12 11:03 
Не в сети

Зарегистрирован: 25 июн 10 17:36
Сообщения: 35
Откуда: Тюмень
Я уже скорректировал работу на синхронном пуле потоков (по типу OpenMP), т.е. когда основной поток, из которого производится распараллеливание по ядрам тоже принимает участие в расчетах.

Если отвечать в этом потоке, то мастер не висит, хотя логику не переписывал.
Вобщем MPI_THREAD_SERIALIZED почему-то не работает в этой реализации MPI, по крайней мере для локальных вызовов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 25 сен 12 18:13 
Не в сети

Зарегистрирован: 2 ноя 11 19:40
Сообщения: 26
Откуда: Владивосток
to mega:
Спасибо, что напомнили, что стандарт продолжает развиваться... с интересом погрузился в чтение 3-ей версии, которая вышла 5 дней назад. Поддержка потоков на уровне стандарта и его реализаций стала значительной.

Ваш случай тяжелый, на "слух" через форум не восприниматеся. Мне обычно помагает рисование или, если позволяют инструментальные средства, автоматическое построение графов сообщений. Для неблокирующих вызовов это правда проблема, потому как начало и завершение операции размазано по программе, но другого более наглядного способа не знаю. Могу предложить заменить ISend на IBSend, чтобы сообщения помещались принудительно в буфер, для многопоточной версии это может иметь положительный эффект. Не знаю как Windows диспетчеризует потоки в рамках одного процесса. Возможно сисетмный планировщик влияет на работу программы.

to Serg:
Про блокирующие Send/Recv самому себе - зависит от размера сообщения. Если залезть в исходники, например MPICH (самое простое), то там есть if: выбирается либо SSend для длинных сообщений, либо BSend для коротких сообщений... А уже BSend имеет семантику локальной функции, которая может корректно завершиться до реальной посылки сообщения (система его сама поместила в буфер и выполняет отправку). Был удивлен таким выбором разработчиков, хотя стандарт дает некоторые рекомендации на этот счет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Синхронизация MPI
СообщениеДобавлено: 26 сен 12 11:56 
Не в сети

Зарегистрирован: 25 июн 10 17:36
Сообщения: 35
Откуда: Тюмень
gvt писал(а):
Спасибо, что напомнили, что стандарт продолжает развиваться... с интересом погрузился в чтение 3-ей версии, которая вышла 5 дней назад. Поддержка потоков на уровне стандарта и его реализаций стала значительной.

ну, что касается MPI_Init_thread, то он был еще во второй версии
gvt писал(а):
Могу предложить заменить ISend на IBSend, чтобы сообщения помещались принудительно в буфер, для многопоточной версии это может иметь положительный эффект.

спасибо, как-нибудь попробую,
у меня просто сложилось впечатление, что в этой реализации сообщения MPI складываются в независимые буфера ( в динамической локальной памяти потоков, см. TlsSetValue ), по типу такого:
Код:
__declspec( thread )MPIMsgBuffer Buffer;

т.е. сообщение посланное в конкретном потоке, в этом же конкретном потоке и обрабатывается


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB