在我的 C++ 代码 (my_app) 中,我需要启动外部应用程序 (app_ext) 动态加载我用 fortran (lib_fort) 编写的库 (dll,so)。我需要从这个库 (lib_fort) 同步回调 my_app 中的某个方法。
就是这样: (my_app) --launches--> (app_ext) --loads--> (lib_fort) --"calls"--> (my_app)
app_ext 不是我开发的。
您对如何做有什么建议吗?最重要的是,如何高效地做?
编辑:
澄清。每次整个程序执行时,启动外部应用程序 (app_ext) 并从中加载我的库 (lib_fort) 只会发生一次。所以这部分不需要非常高效。 lib_fort 和 my_app 之间的通信对性能至关重要。 Lib_fort 需要“调用”my_app 数百万次。
关键在于高效的进程间通信。 启动 app_ext 后 my_app 的作用是等待和服务来自 lib_fort 的“调用”。棘手的部分是解决方案需要同时适用于分布式和共享内存环境,即 my_app 和 app_ext+lib_fort 在单个主机上 (1) 以及 my_app 和 app_ext+lib_fort 在不同机器上 (2)。
在 (1) 场景中,我正在考虑 MPI,但我不确定是否可以在两个不同的应用程序之间使用 MPI 进行通信(与单进程、多进程、MPI 应用程序相比)。
在 (2) 场景中可能是某种使用共享内存的进程间通信? (或者也可能是 MPI?)
最佳答案
好的,真正的问题是进程之间如何通信。 (忘了 MPI,那是针对不同类型的问题。)您可能在谈论 COM(组件对象模型)或 RPC(远程过程调用)或管道,但在它下面将使用套接字。 IME 最简单和最有效的事情是自己打开套接字连接并通过它们进行对话。这将是速率限制器,而且真的没有比这更快的东西了。
关于C++ 调用 Fortran 和返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438775/