Убить / Остановить один процесс с помощью 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.

Так что, если у кого-то, ребята, есть идея, как этого добиться, я перепробовал все, спасибо

0 ответов

Другие вопросы по тегам