2016-11-16 14 views
1

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

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

+1

идеи о чем? –

+0

Кроме того, они являются альтернативами, которые следует изучить. например, один исполняемый файл вместо двух, или использование сокетов вместо PVM или MPI. –

+3

В случае, если вы полагаете, что для кода «F77» следует использовать другой компилятор, такая идея, вероятно, здесь не имеет смысла, поскольку большинство современных компиляторов поддерживают F77 с разумными расширениями, а также F90/2003 +. – tim18

ответ

2

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

1

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

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

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