1

我需要耦合两个代码(一个在 Fortran77 中,另一个在 Fortran90 中),它们必须由守护程序控制并能够在它们之间传递信息。

我一直在搜索,两个可能的选项是 PVM 或 MPI。问题是我需要单独编译它们,有什么想法吗?

4

2 回答 2

2

MPI 很好地适应了 SPMD 范例(单程序/多数据)。如果你想耦合 2 个不同的二进制文件,MPI 可能不是最好的工具。进程间通信更像是你想做的事情。在 Linux 中,如果您留在同一台机器上,则可以使用命名管道(请参阅 参考资料man mkfifo),并且可以使用 Fortran I/O 调用来传输数据。如果您想在不同机器之间进行通信,另一种可能性是使用ZeroMQ,例如,存在Fortran 绑定

于 2016-11-17T00:15:03.553 回答
1

最简单的方法是使用 POSIX 套接字 - 但您需要进行数据序列化/反序列化,而且通常速度很慢。所以我不建议使用套接字。

从技术上讲,MPI 可以工作。如果您可以使用符合 MPI 2.0 的库,那么您可以使用那里实现的客户端-服务器机制。查看MPI_Open_portMPI_Comm_connect的文档。第一个将为您提供端口名称,您需要以某种方式将此名称传递给客户端。一种选择是使用名称发布,但它可能不适用于任何 MPI 库。另一种选择是使用其他机制(套接字连接、文件系统或其他任何东西)共享它。

但是,事实上,我仍然看不出你应该分别编译这两个应用程序的原因(除非存在许可问题) - 你可以将它们编译成一个包(我预计会有一些代码更改,但它是次要的)然后将它们作为一个应用程序运行。

于 2016-11-18T11:12:41.047 回答