PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 17 окт 19 0:21

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 3 май 05 18:45 
Господа, прошу мне помочь. Параллельными вычислениями занимаюсь недавно, так что строго не судите.

Вообщем у меня проблема.
Задача распределена по процессорам. Все процессоры расчитывают свои части и передают главному процессу с рангом 0. Главный процесс принимает сообщения, проверяет завершение всех операций обмена и если что -то непришло ждёт прихода данных. Примерно, вот так: if (myrank == 0){

Recv();

MPI_Testall(.....&flag);

if (flag == FALSE){

MPI_Waitall();

};

};

Всё это в цикле.
Вся проблема в том, что в один момент от двух процессов пришли данные, а от, допустим, третьего нет (перешёл на другой виток цикла) и Waitall "висит". Использование MPI_Request_free и MPI_Cancel не помогает. Есть ли способ вывести систему из этого состояния. И можно ли узнать главному процессору о факте отправки сообщения от какого либо другого поцесса.

Зараннее благодарен. С уважением, Иван.


Вернуться к началу
  
 
СообщениеДобавлено: 3 май 05 19:04 
Не очень понятно, чего Вы хотите добиться.

Иван писал(а):
Recv();

Имеется в виду, видимо, MPI_Irecv, иначе, если Recv блокирующий, то все следующее не имеет особого смысла.

Иван писал(а):
Вся проблема в том, что в один момент от двух процессов пришли данные, а от, допустим, третьего нет (перешёл на другой виток цикла) и Waitall "висит".

Либо вы хотитите дождаться прихода всех сообщений, тогда используете Waitall, либо используйте другие функции (Waitsome, к примеру) - не очень понятно, какая именно нужна функциональность.

Иван писал(а):
Использование MPI_Request_free и MPI_Cancel не помогает. Есть ли способ вывести систему из этого состояния.

Если процесс уже висит на операции Wait, вряд ли его можно разблокировать нормальными средствами.

Иван писал(а):
И можно ли узнать главному процессору о факте отправки сообщения от какого либо другого поцесса.

Ну, если это так необходимо, может, организовать отправку сигнала в тот момент, когда процесс решает - отправляет он очередную порцию данных или нет.

Есть подозрение, что это можно реализовать проще и другими средствами, но неясна требуемая функциональность.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 3 май 05 19:29 
Цитата:
Не очень понятно, чего Вы хотите добиться. ]


Необходимо, только то, что бы данные гарантировано приходили от каждого процесса. Обычными средствами Recv,SendRecv не получается. Использование барьерной синхронизации MPI_Barier меня не устраивает.
Если я не устраиваю эту последовательность из проверок, то ничего мне и не приходит :(.

С уважением, Иван.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 5 май 05 12:06 
Не в сети

Зарегистрирован: 11 дек 02 19:37
Сообщения: 872
Откуда: НИВЦ МГУ
Иван писал(а):
Необходимо, только то, что бы данные гарантировано приходили от каждого процесса. Обычными средствами Recv,SendRecv не получается.


Приведите, пожалуйста код более конкретно. Из первого поста, действительно не очень понятно как Вы реализуете опсанную далее схему. Вариант с Recv должен работать, если нужна асинхронность, то IRecv и WaitSome. Возможно, Вы где-то наступаете на одни и те же грабли, но из Вашего описания непоятно где :)


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

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