Parallel processing 使用MPI终止/停止一个进程

Parallel processing 使用MPI终止/停止一个进程,parallel-processing,pthreads,mpi,openmp,openmpi,Parallel Processing,Pthreads,Mpi,Openmp,Openmpi,为了实现并行弹性代码来解决大型线性系统,我必须模拟MPI故障,其想法是在rand进程工作时终止或停止rand进程,一旦我完成这一步,我将开始应用其他技术来缓解故障 为了杀死一个进程,我有了一个想法,我随机选择了一个进程,然后把它放在另一个命令和MPI_COMM_WORLD中的reste stills中,然后我应用了MPI_Abort(命令,0) 这个主意似乎行得通,但当我尝试时,却发现了错误 下面是我为终止该进程所做的示例代码 #include <stdio.h> #include

为了实现并行弹性代码来解决大型线性系统,我必须模拟MPI故障,其想法是在rand进程工作时终止或停止rand进程,一旦我完成这一步,我将开始应用其他技术来缓解故障

为了杀死一个进程,我有了一个想法,我随机选择了一个进程,然后把它放在另一个命令和MPI_COMM_WORLD中的reste stills中,然后我应用了MPI_Abort(命令,0)

这个主意似乎行得通,但当我尝试时,却发现了错误

下面是我为终止该进程所做的示例代码

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include<time.h>

int main(int argc, char** argv)
{
int size, rank;

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

MPI_Comm  comm1;
MPI_Group group1, grp_world;

MPI_Comm_group(MPI_COMM_WORLD, &grp_world);
int *ranks = malloc((size-1) * sizeof(rank));
int rand_rank;
srand (time(NULL));
rand_rank = rand()%(size-1)+1;
printf("%d\n",rand_rank);

MPI_Group_incl(grp_world, 1, &rand_rank, &group1);
MPI_Comm_create(MPI_COMM_WORLD, group1, &comm1);

if (rank==0) {
printf("the total number of process before killing %d is %d",  rand_rank,size);
MPI_Abort(comm1,911);
printf("the total number of process after killing %d is %d", rand_rank,size);
}

结果是:

MPI_ABORT was invoked on rank -2 in communicator MPI_COMM_NULL 
with errorcode 911.

所以,如果有人知道如何做到这一点,我已经尝试了一切,谢谢你,错误说
comm1
为空:
MPI\u COMM\u null
。顺便说一下,您不能中止单个MPI列组,而期望其他列组继续运行。MPI运行时将知道并终止所有进程。试着让它长时间睡眠以模拟失败。可能是重复的
MPI_ABORT was invoked on rank -2 in communicator MPI_COMM_NULL 
with errorcode 911.