我需要耦合两个代码(一个在Fortran77中,另一个在Fortran90中),这些代码必须由守护程序控制并能够在它们之间传递信息。
我一直在寻找,两种可能的选择是PVM或MPI。问题是我需要单独编译它们,任何想法?
答案 0 :(得分:2)
MPI非常适合SPMD范例(单程序/多数据)。如果你想结合两个不同的二进制文件,MPI可能不是最好的工具。进程间通信更像是您想要做的事情。在Linux中,如果您使用同一台计算机,则可以使用命名管道(请参阅man mkfifo
),然后使用Fortran I / O调用传输数据。如果要在不同计算机之间进行通信,另一种可能性是使用ZeroMQ,例如,存在Fortran binding。
答案 1 :(得分:1)
最简单的方法是使用POSIX套接字 - 但是你需要进行数据序列化/反序列化,而且它通常很慢。所以我不建议使用套接字。
技术上MPI可以工作。如果您可以使用MPI 2.0兼容库,那么您可以使用在那里实现的客户端 - 服务器机制。查看MPI_Open_port和MPI_Comm_connect的文档。第一个将为您提供端口名称,您需要以某种方式将此名称传递给客户端。一种选择是使用name publishing,但它可能不适用于任何MPI库。另一种选择是使用其他机制(套接字连接,文件系统或其他任何机制)共享它。
但实际上,我仍然没有看到为什么你应该单独编译这两个应用程序的原因(除非有许可问题) - 你可以将它们编译成一个包(我预计会有一些代码更改,但它是次要的)然后将它们作为一个应用程序运行。