尝试排除进程级别0时出现MPI_Group_excl致命错误.c ++

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试排除进程级别0时出现MPI_Group_excl致命错误.c ++相关的知识,希望对你有一定的参考价值。

大家好,我对编码和MPI都很陌生。我敢肯定这一定是一个非常愚蠢的错误,但我无法理解为什么这段代码:

#include <mpi.h>

int main(int arg, char** argvs) {
    int rank, numOfProcess;
    MPI_Init(&arg, &argvs);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &numOfProcess);

    int ranks[1] = { 0 };
    MPI_Group orig_group, new_group;
    MPI_Comm new_comm;
    MPI_Comm_group(MPI_COMM_WORLD, &orig_group);
    MPI_Group_excl(orig_group, numOfProcess - 1, ranks, &new_group);
    MPI_Comm_create(MPI_COMM_WORLD, new_group, &new_comm);
    MPI_Finalize();
    return 0;
}

给我以下错误:

 $ mpiexec -n 3 Documents/Visual Studio 2015/Projects/MPImisc/Debug/MPImisc.exe

 job aborted:
 [ranks] message

 [0] fatal error
 Fatal error in MPI_Group_excl: Invalid rank, error stack:
 MPI_Group_excl(group=0x88000000, n=2, ranks=0x008FF800, 
 new_group=0x008FF7E8) failed
 Invalid rank in rank array at index 1; value is -858993460 but must be in 
 the range 0 to 2

 [1] fatal error
 Fatal error in MPI_Group_excl: Invalid rank, error stack:
 MPI_Group_excl(group=0x88000000, n=2, ranks=0x012FF860, 
 new_group=0x012FF848) failed
 Invalid rank in rank array at index 1; value is -858993460 but must be in 
 the range 0 to 2

[2] fatal error
Fatal error in MPI_Group_excl: Invalid rank, error stack:
MPI_Group_excl(group=0x88000000, n=2, ranks=0x012FFB10, 
new_group=0x012FFAF8) failed
Invalid rank in rank array at index 1; value is -858993460 but must be in 
the range 0 to 2

---- error analysis -----

[0-2] on ASUSPC
mpi has detected a fatal error and aborted Documents/Visual Studio 
2015/Projects/MPImisc/Debug/MPImisc.exe

---- error analysis -----

纠正我,如果我错了,但我正在创建的“new_group”应该包含每个进程,但是那个等级为0.为什么它会给我这个错误?我在数组“rank”中指定我要删除等级0,我迷路了。

非常感谢。

答案

你没有正确使用MPI_Group_excl()

句法

   int MPI_Group_excl(MPI_Group group, int n, const int ranks[],
        MPI_Group *newgroup)

输入参数

   n         Number of elements in array ranks (integer).

   ranks     Array of integer ranks in group not to appear in newgroup.

因为ranks是一个包含一个元素的数组,所以这就是你应该如何更新你的通话

MPI_Group_excl(orig_group, 1, ranks, &new_group);

以上是关于尝试排除进程级别0时出现MPI_Group_excl致命错误.c ++的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过运行 Tkinter 的发送进程在进程之间通过管道发送任何内容时出现管道损坏错误

访问共享进程内存时出现分段错误(核心转储)

尝试在python子进程中运行rsync时出现意外的远程arg错误

将FFmpeg作为php中的进程运行时出现超时错误

Selenium:启动 IE 时出现意外错误。浏览器缩放级别设置为 122%。应该设置为 100%

ASP.NET - 在 VS 2017 中浏览 Nuget 包时出现“根级别的数据无效”错误