Я хочу сделать следующее:
Я хочу иметь тип отношений клиент-сервер между одним серверным процессом и несколькими клиентскими процессами. Но моя проблема в том, что эти клиентские процессы будут работать в разных оконных окнах, и им потребуется стандартный ввод. Таким образом, запуск программы MPI с тем же mpirun
звонок не сделает это для меня, например:
mpirun -np 2 --stdin 1 ./server : -np 3 ./client
В этом примере стандартный ввод также направлен только на один процесс, что, конечно, для меня еще один недостаток.
И последнее: я хочу иметь возможность создавать новый клиентский процесс в любое время, который также может взаимодействовать с запущенным серверным процессом.
Итак, какой подход мне нужно следовать для достижения этих целей? Я искал пару дней, с каждым разом я все больше запутываюсь, когда читаю другой учебник.
Справочная информация, в случае необходимости: я работаю на Ubuntu 12.04 и использую Boost MPI. Тем не менее, предложение относительно любой платформы / реализации MPI приветствуется.
Одна вещь, которую вы могли бы сделать, это настроить FIFO. Это будет выглядеть примерно так: в одном терминале выполните:
mkfifo a.fifo
tee a.fifo | mpirun -np 2 ./server
А затем в другом терминале выполните:
mpirun -np 3 ./client < a.fifo
Однако не самое элегантное решение. Кроме того, это относится только к стандартной части ввода, а не к тому, чтобы сделать их частью одного и того же коммуникатора.
Динамическое добавление и удаление задач MPI в коммуникаторе возможно в MPI-2 через динамическое управление процессами команды, но я никогда не использовал их, и я не уверен, насколько они практичны. В зависимости от того, что вы пытаетесь сделать, ZeroMQ может быть лучшим выбором. Это позволяет легко настроить вещание и сбор данных для переменной и динамически меняющегося числа задач.
Других решений пока нет …