#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中的所有进程退出,调用者一般应为通信域的成员,改调用并不要求外部环境对错误码采取动作。