Программа MPI зависает, потому что MPI_Isends не все полученыC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Программа MPI зависает, потому что MPI_Isends не все получены

Сообщение Anonymous »

Мотивация:
Я пишу программу MPI для Kinetic Monte Carlo. В настоящее время я пишу подпрограмму, которая сообщает другим процессорам об изменениях в сайтах-ореолах (сайтах-призраках), пересечении доменов частиц и конфликтах границ. Все это обрабатывается функцией receive_parallel_comm_helper(), но для обработки отмены действий она вызывает подпрограмму reverse_ghost_sites(). изменения в местах гало/призраков в случае конфликта границ.
Текущая проблема: Когда reverse_ghost_sites() закомментирован и поэтому НЕ вызывается, код работает отлично и не зависает. Однако, если оставить его, код зависает при вызове MPI_Probe() в while ((!stop_conflict)) внутри receive_parallel_comm_helper(). Распечатка полученных сообщений показала, что сообщение типа тега conflict_ghost_done_tag принимается в вышеупомянутом цикле while вызовом зонда, который отправляется из MPI_Isend()< /strong> вызов внутри reverse_ghost_sites(). Однако все они должны быть сопоставлены с последующим вызовом MPI_Recv() в reverse_ghost_sites(), предназначенным для сигнализации функции, что данные больше не передаются друг от друга. Я не уверен, почему у меня возникает эта ошибка, поскольку структура моего кода для отправки этих сигналов «передачи данных больше нет» идентична структуре аналогичных сигналов, отправленных ранее в receive_parallel_comm_helper()< /em> функции.
void reverse_ghost_sites() {
MPI_Request request1;
MPI_Status status1;
std::vector new_loc_buffer1(9);
std::vector new_loc_buffer2(9);
std::vector stop_conflict_ghost_array(num_procs, 0);
stop_conflict_ghost_array[rank] = 1;
bool stop_conflict_ghost = 0;

for (int new_proc=0; new_proc

Подробнее здесь: https://stackoverflow.com/questions/792 ... g-received
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»