Я начинаю изучать 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 Здесь я впервые обнаружил ошибку