【发布时间】:2012-01-16 08:22:40
【问题描述】:
在我的 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?)
【问题讨论】:
-
启动一个应用程序然后加载一个 dll 需要一定的时间。由于文件缓存,第二次会更快。所以尽量少做。
-
谢谢。我澄清了我的问题。您提到的部分不太重要 - 我最关心的是进程间通信。
标签: c++ performance fortran mpi interprocess