我如何将 MPI 与 C++ 类 集成?

How would I integrate MPI with C++ classes?

假设我有一个 class

Vector

在这个class中我有一个计算向量范数的方法。

Vector a
double Norm = a.norm()

我想用 MPI 来分发这个计算。我知道这是一个非常微不足道的案例。

但是我究竟把命令放在哪里

MPI_Comm_size,MPI_Comm_rank,MPI_Init?
我认为

MPI_init 会进入主文件。但是我是否必须告诉每个向量每个实例化可用的进程数?

通常情况下,为了有效地使用 MPI,单个数据结构内部不具有 MPI 功能。确定 MPI 通信器的大小和等级是容易的部分——困难的部分是编排您的 MPI 命令。

在您的示例中,您需要做的第一件事是将向量分散到所有 MPI 进程中。但想象一下这样的事情:

mpi_norm(mpi_add(v1, v2));

在这里,对一个数据结构实施单独的操作会非常低效——您不希望收集两个向量相加的结果只是为了转身并将它们再次泵回所有 MPI 进程。

通过相当多的工作,您可以通过 mpi_add() return 一个代理对象来有效地实现上述目标,该代理对象会记住计算应该是什么,但只会延迟执行,所以部分结果可以单独留在许多 MPI 进程中,然后将它们组合成一个向量范数和 return that.

但感觉您可能找错了方向——如果您的目标是 "Make a good MPI program,",您应该自上而下开始,而不是自下而上。