Мотивация:
Я пишу программу 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
Программа MPI зависает, потому что MPI_Isends не все получены ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Простая программа MS-MPI не работает при использовании смешанных процессоров AMD/Intel.
Anonymous » » в форуме C++ - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-