为了实现并行弹性代码来解决大型线性系统,我必须模拟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.
所以,如果有人知道如何实现这一点,我已经尝试了一切,谢谢你