Как связать приложения Fortran77 и Fortran90? MPI, PVM или другой способ?

Мне нужно соединить два кода (один в Fortran77, а другой в Fortran90), которые должны контролироваться демоном и иметь возможность передавать информацию между ними.

Я искал и два возможных варианта PVM или MPI. Проблема в том, что мне нужно скомпилировать их отдельно, есть идеи?

2 ответа

MPI хорошо адаптирован к парадигме SPMD (одна программа / несколько данных). Если вы хотите соединить 2 разных двоичных файла, MPI, вероятно, не лучший инструмент. Межпроцессное общение больше похоже на то, что вы хотите сделать. В Linux, если вы остаетесь на той же машине, вы можете использовать именованные каналы (см. man mkfifo), и вы можете передавать свои данные с помощью вызовов ввода-вывода Fortran. Другая возможность, если вы хотите общаться между различными машинами, это использовать, например, ZeroMQ, и существует привязка Фортрана.

Простейшим способом является использование POSIX-сокетов, но вам нужно будет выполнить сериализацию / десериализацию данных, и в целом это довольно медленно. Поэтому я бы не рекомендовал использовать сокеты.

Технически MPI может работать. Если вы можете использовать MPI 2.0-совместимую библиотеку, тогда вы можете использовать механизм клиент-сервер, реализованный там. Посмотрите документацию для MPI_Open_port и MPI_Comm_connect. Первый даст вам имя порта, которое вам нужно будет как-то передать клиенту. Одним из вариантов является использование публикации имен, но она может не работать с любой библиотекой MPI. Другой вариант - поделиться им, используя какой-то другой механизм (соединение через сокет, файловую систему или что-то еще).

Но, на самом деле, я до сих пор не вижу причины, по которой вы должны скомпилировать эти два приложения по отдельности (если не возникает проблема с лицензированием) - вы можете просто скомпилировать их в один пакет (я ожидаю некоторого изменения кода, но оно незначительное), а затем запустить их как одно приложение.

Другие вопросы по тегам