Как исправить ошибку, произошедшую в MPI_Send, о которой сообщил процесс [135921655, 0] на коммуникаторе MPI_COMM_WORLD - PullRequest
0 голосов
/ 09 октября 2019

Я начинаю изучать MPI, и я следовал учебному пособию и написал два файла на языке C. Компиляция и запуск первого файла в порядке, но если выполнить то же самое для второго файла, это не сработает. И после того, как я столкнулся с ошибкой, теперь я не могу запустить ни один из файлов, даже если я перекомпилировал их.

Я не мог найти решение своей проблемы нигде в Интернете, в том числе на stackoverflow. Этот пост был самым близким, с которым я столкнулся, но он не дал никакого решения. Произошла ошибка в MPI_Send на коммуникаторе MPI_COMM_WORLD MPI_ERR_RANK: неверный ранг

Первый файл:

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

Int main (int argc, char *argv){
//Initialize the MPI environment        
MPI_Init(NULL, NULL);

//find out rank, size
int world_rank;
MPI_Comm_rank (MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size (MPI_COMM_WORLD, &world_size);

int number;
if (world_rank == 0){
    number = -1;
    MPI_Send(&number, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
}

else if (world_rank == 1){
    MPI_Recv(&number, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
    printf("Process 1 received number %d from process 0\n", number);
}

//Finalise the MPI environment
MPI_Finalize();
}

Второй файл:

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

int main (int argc, char **argv){
//Initialize the MPI environment        
MPI_Init(NULL, NULL);

//find out rank, size
int world_rank;
MPI_Comm_rank (MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size (MPI_COMM_WORLD, &world_size);

int X, Y, Z;
if (world_rank == 0){
    scanf("%d", &X);
    scanf("%d", &Y);

    MPI_Send(&X, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
    MPI_Send(&Y, 1, MPI_INT, 1, 1, MPI_COMM_WORLD);

    MPI_Recv(&Z, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
    printf("Process 1 received number %d from process 2\n", Z);
}

else if (world_rank == 1){
    MPI_Recv(&X, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
    MPI_Recv(&Y, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
    Z = X + Y;
    MPI_Send(&Z, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}

//Finalise the MPI environment
MPI_Finalize();
}

СООБЩЕНИЯ ОБ ОШИБКАХ:[ubuntu: 2638] *** Произошла ошибка в MPI_Send

[ubuntu: 2638] ***, о которой сообщил процесс [135921665,0]

[ubuntu: 2638] *** onкоммуникатор MPI_COMM_WORLD

[ubuntu: 2638] *** MPI_ERR_RANK: недопустимый ранг

[ubuntu: 2638] *** MPI_ERRORS_ARE_FATAL (процессы в этом коммуникаторе теперь прерываются,

[ubuntu: 2638] *** и, возможно, ваша работа MPI)

ОБНОВЛЕНИЕ:

Вот командная строка, которую я использовал

mpicc -o 123 file1.c

mpirun 123

Впервые это было нормально, но не после

mpicc -o 123 file2.c

mpirun123 Здесь я впервые обнаружил ошибку

...