Разные процессы из разных терминалов, взаимодействующих с MPI

Я хочу сделать следующее:

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

mpirun -np 2 --stdin 1 ./server : -np 3 ./client

В этом примере стандартный ввод также направлен только на один процесс, что, конечно, для меня еще один недостаток.

И последнее: я хочу иметь возможность создавать новый клиентский процесс в любое время, который также может взаимодействовать с запущенным серверным процессом.

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

Справочная информация, в случае необходимости: я работаю на Ubuntu 12.04 и использую Boost MPI. Тем не менее, предложение относительно любой платформы / реализации MPI приветствуется.

2

Решение

Одна вещь, которую вы могли бы сделать, это настроить FIFO. Это будет выглядеть примерно так: в одном терминале выполните:

mkfifo a.fifo
tee a.fifo | mpirun -np 2 ./server

А затем в другом терминале выполните:

mpirun -np 3 ./client < a.fifo

Однако не самое элегантное решение. Кроме того, это относится только к стандартной части ввода, а не к тому, чтобы сделать их частью одного и того же коммуникатора.

Динамическое добавление и удаление задач MPI в коммуникаторе возможно в MPI-2 через динамическое управление процессами команды, но я никогда не использовал их, и я не уверен, насколько они практичны. В зависимости от того, что вы пытаетесь сделать, ZeroMQ может быть лучшим выбором. Это позволяет легко настроить вещание и сбор данных для переменной и динамически меняющегося числа задач.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]