C++ 调用 Fortran 和返回

标签 c++ performance fortran mpi interprocess

在我的 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/

相关文章:

c++ - 基本类型与内置类型 C++ 之间有什么区别

c++ - 在不使用 & 的情况下按函数返回对象 (c++)

fortran - 每次使用包含模块时是否评估 Fortran 命名常量?

python - 无法使用 s = system() 将值从 python 传输到 Fortran 中定义的变量

c++ - 有人可以解释这个功能是如何工作的吗?

java - 软件行业的哪个部门使用 C++?

arrays - 使用哈希引用的最佳方法是什么?

performance - 加快矩阵输入速度

r - 如何在 R 中有效地找到高于阈值的最长序列

parsing - 自动源代码编辑工具