MPI_错误的退出方式

#include "mpi.h"
#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

int main(int argc,char* argv[])
{
    int rank,size;
    int masternode = 0;

    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    MPI_Comm_size(MPI_COMM_WORLD,&size);

    for(int i=1;i<argc;i++)
    {
        fprintf(stderr,"myid=%d,procs=%d,argv[%d]=%s\n",rank,size,i,argv[i]);
        if(argv[i] && strcmp("lastmaster",argv[i]) == 0)
        {
            masternode = size - 1;
        }
    }
    if(rank == masternode)
    {
        fprintf(stderr,"myid=%d is masternode Abort!\n",rank);
        MPI_Abort(MPI_COMM_WORLD,99);
    }
    else
    {
        fprintf(stderr,"myid=%d is not masternode Abort!\n",rank);
        MPI_Barrier(MPI_COMM_WORLD);
    }
    MPI_Finalize();

    return 0;
}

在编写MPI程序的过程中,若发现出现无法恢复的严重问题,只好退出MPI程序的执行,MPI_Abort使通信域comm中的所有进程退出,调用者一般应为通信域的成员,改调用并不要求外部环境对错误码采取动作。

原文地址:https://www.cnblogs.com/wn19910213/p/3509410.html