我需要耦合两个代码(一个是在Fortran77中,另一个在Fortran90中),这必须由一个守护进程控制,并能够在它们之间传递信息。
我一直在搜索,有两个可能的选项是PVM或MPI。问题是我需要单独编译它们,你有什么想法吗?
发布于 2016-11-17 08:15:04
MPI很好地适应了SPMD范例(单程序/多数据)。如果你想耦合两个不同的二进制文件,MPI可能不是最好的工具。进程间通信更像是您想要做的事情。在Linux中,如果您停留在同一台机器上,则可以使用命名管道(参见man mkfifo),并且可以使用Fortran I/O调用来传输数据。如果您想在不同的机器之间通信,另一种可能性是使用ZeroMQ,并且存在一个Fortran binding。
发布于 2016-11-18 19:12:41
最简单的方法是使用POSIX套接字-但您需要进行数据序列化/反序列化,而且通常速度相当慢。所以我不推荐使用套接字。
从技术上讲,MPI是可以工作的。如果可以使用兼容MPI2.0的库,那么就可以使用在那里实现的客户端-服务器机制。请查看MPI_Open_port和MPI_Comm_connect的文档。第一个将提供端口名称,您需要将该名称以某种方式传递给客户端。一种选择是使用name publishing,但它可能不适用于任何MPI库。另一种选择是使用其他机制(套接字连接、文件系统或任何其他机制)共享它。
但是,事实上,我仍然不明白为什么你应该分别编译这两个应用程序(除非有许可问题)-你可以只将它们编译成一个包(我预计会有一些代码更改,但这是次要的),然后将它们作为一个应用程序运行。
https://stackoverflow.com/questions/40638711
复制相似问题