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

时间:2017-03-09 14:45:59

标签: parallel-processing pthreads mpi openmp openmpi

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

为了杀死一个进程,我有了一个想法,我随机选择了一个进程,然后把它放在另一个COMM上,并且在MPI_COMM_WORLD中仍然使用了reste,然后我应用了MPI_Abort(COMM,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_Finalize();

return 0;

}

和结果:

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

所以,如果有人知道如何实现这一点,我已经尝试了一切,谢谢你

0 个答案:

没有答案