На основании вашего описания «Программа 1» не является приложением MPI, а «Программа 2» является приложением MPI. Кратчайший путь к решению, вероятно, откроет сокет между двумя программами и отправит данные таким образом. Это не требует, чтобы «Программа 1» была изменена, чтобы быть программой MPI. Я бы начал с сокета между «Программой 1» и «Программой 2: ранг 0», причем ранг 0 распределял данные по оставшимся рангам.
Несколько предложений до сих пор включали запуск гетерогенного набора исполняемых файлов в качестве одного из возможных решений. Не требуется, чтобы все ранги в одном задании MPI были одним и тем же исполняемым файлом. Для этого необходимо, чтобы оба исполняемых файла были «программами MPI» (например, включать в себя как минимум вызовы MPI_Init и MPI_Finalize). Уровень модификации, требуемый для «Программы 1», и невозможность его запуска вне среды MPI могут сделать эту опцию непривлекательной.
Я бы рекомендовал вам избегать подхода «динамического процесса», если только вы не используете коммерческую реализацию, которая предлагает поддержку. Поддержка connect / accept имеет тенденцию быть нечеткой в реализациях MPI с открытым исходным кодом. Это может "просто работать", но получение технической помощи, если это не может быть открытой проблемой.