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

How would I integrate MPI with C++ classes?

本文关键字:集成 C++ MPI      更新时间:2023-10-16

>假设我有一个类

Vector

在本课程中,我有一个计算向量范数的方法。

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()返回一个代理对象来有效地实现上述内容,该对象会记住计算应该是什么,但只是懒惰地执行它,因此部分结果可以单独保留在许多 MPI 进程中,然后将它们组合成单个向量范数并返回。

但感觉你可能吠错了树——如果你的目标是"做一个好的MPI程序",你应该从自上而下开始,而不是自下而上。