Algorithm OpenMPI(V2.0.2)中的大向量(200MB+;)使用哪种allreduce算法?

Algorithm OpenMPI(V2.0.2)中的大向量(200MB+;)使用哪种allreduce算法?,algorithm,mpi,openmpi,Algorithm,Mpi,Openmpi,目前,我正在尝试了解OpenMPI(版本2.0.2)中针对大向量的MPI_Allreduce的详细信息。我学习了所有的reduce算法,比如二叉树、递归加倍、递归减半加倍、二进制块和环算法。其中大多数都是基于减少散射,然后全部聚集 但我仍然想知道在OpenMPI(v2.0.2)中,哪个allreduce算法用于大向量(200MB+)。如果能提供详细信息就好了 非常感谢:)答案在代码中,请参阅中的ompi\u coll\u tuned\u allreduce\u intra\u dec\u fix

目前,我正在尝试了解OpenMPI(版本2.0.2)中针对大向量的MPI_Allreduce的详细信息。我学习了所有的reduce算法,比如二叉树、递归加倍、递归减半加倍、二进制块和环算法。其中大多数都是基于减少散射,然后全部聚集

但我仍然想知道在OpenMPI(v2.0.2)中,哪个allreduce算法用于大向量(200MB+)。如果能提供详细信息就好了


非常感谢:)

答案在代码中,请参阅中的
ompi\u coll\u tuned\u allreduce\u intra\u dec\u fixed

简短的回答,视情况而定 回答越长,这取决于通信器的大小、使用的数据类型/计数(例如,一个大向量的一个派生数据类型或许多预定义数据类型)以及运算符是否可交换


您还可以要求OpenMPI使用
mpirun--mca coll\u base\u verbose 1…
(也就是说,我认为您需要使用
--启用调试来配置OpenMPI)

以使其工作)

非常感谢!它起作用了!(也就是说,我有4个进程来执行浮点向量上的allreduce。每个进程拥有其包含648010个元素的float32向量,约为2.47MB。本机求和操作用于在这4个向量上执行allreduce。结果是“coll:base:allreduce\u intra\u ring”算法。太棒了!正如源代码所说的那样。)然而,当我更改为“用户定义的reduce操作”(这也是元素级求和,只是我自己编码而不是本地求和)时,mpi输出了两个算法!“环”和“递归加倍”。有什么秘密吗?谢谢如果你能帮我做一份,我很乐意看一看。如果您使用
MPI\u Op\u create()
创建了自己的运算符,请确保将其声明为可交换的,否则
coll/tuned
可能会选择其他算法感谢您的帮助!我刚刚确认,使用我的用户定义的sum和communicative=true,allreduce只打印出“ring”算法,就像本地sum allreduce一样。这是我在谷歌硬盘中的代码:()。然而,这提出了另一个问题:就实现算法而言,我的用户定义的sum-allreduce是否与本机sum-allreduce相同?再次感谢:注意C++绑定从MPI标准中删除。它们在大多数MPI库中仍然可用,但可能不会太久。可以使用普通的<代码> C>代码>绑定,或者查看Booo::MPI(我不使用C++,但这个LIB有很好的信誉)。只要操作符是可交换的,allreduce中涉及的通信模式就不依赖于自定义操作符与本机操作符,因此在您的情况下,可以使用本机操作符。一般来说,请记住,在适当的位置使用
MPI\u可能会迫使MPI选择不同的算法(主要是为了保持较低的内存占用),非常感谢!)