MPI-printf
где-то краем уха слышал, что печатать должен только один процесс. необязательно первый. некоторый для этого специальный запускают - типа "reader/writer" и т.п.
у меня работало с fflush (stdout);
fflush(NULL);Мне почему-то кажется, что эта инструкция ничего не делает...
она очищает все буферы
Во вторых (если уж используется MPI_Send, MPI_Recv) просто пошли основному процессу сообщение которое должно напечататься первым, пусть он его первым и напечатает
оно лишь сбрасывает буфер
после чего сообщение оказывается где-нибудь нутрах реализации mpi
но всё ещё на том узле, который сгенерировал сообщение
потом эта реализация mpi в какой-то момент может решить, что пора переслать эту информацию на нулевой узел
(решить она это может только через несколько секунд или минут после генерации сообщения)
только потом сообщение напечатается
в контексте высокопроизводительных параллельных вычислений другая схема работы mpi видится мне не логичной
Оставить комментарий
alexkravchuk
Понадобилось сделать примеры для иллюстрации механизмов синхронизации в MPI (реализация LAM столкнулся с такой проблемой:допустим, есть 2 процесса, нам нужно, чтобы процесс с id=1 печатал что-то перед тем, как напечатает процесс с id=2. Однако возникают проблемы, пример вроде
работает иногда некорректно, хотя по логике верен (работает некорректно, но только если запускать на раздельных узлах). Причина, по всей видимости, в том, что fflush не даёт гарантию, что сообщение будет напечатано, оно только пересылает это сообщение на узел, отвечающим за вывод (предположение). Есть ли какой-нибудь простой способ с этим бороться, какая-нибудь опция компилятора? Какой-то идеи, как реализовать какой-нибудь свой вывод, аналогичный printf (но с гарантированной синхронизацией) пока не придумывается...