Убить / Остановить один процесс с помощью MPI
Чтобы добиться параллельного упругого кода для решения большой линейной системы, мне нужно смоделировать отказы MPI, идея состоит в том, чтобы убить или остановить процесс rand во время его работы. Как только я достигну этого шага, я начну применять другие методы для отказа. смягчение.
чтобы убить процесс, у меня была идея, я выбрал случайным образом процесс, а затем поместил его в другой COMM и оставшиеся кадры в MPI_COMM_WORLD, а затем я применил 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.
Так что, если у кого-то, ребята, есть идея, как этого добиться, я перепробовал все, спасибо