Я новичок в MPI.Я пытаюсь отправить строки (позже будет путь к файлу) через Send и Recv.Тем не менее, вывод странный.Что я делаю неправильно?
У меня есть 2 машины с названиями «конский каштан» и «пасо» (главный из которых - конский каштан).Мой файл хоста:
paso slots=4
buckeye slots=4
Я скомпилировал (файл исходного кода helloworld.c ниже) со следующим:
mpicc helloworld.c -o hello
Затем я запустил его с:
mpirun -np 8 --hostfile hosts ./hello "Test argument"
У меня ранг 4 - мастер - отправить сообщение "привет" на ранг 5 (на той же машине), а затем распечатать его.Я также распечатываю ранг и название процессоров.Вот исходный код
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main(int argc, char** argv){
MPI_Init(&argc, &argv);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello world from processor %s, rank %d, out of %d processors...\n",
processor_name, rank, world_size);
//printf("Input argument is %s\n", argv[1]);
/* communication */
if (rank == 4){
char * test = "hello";
printf("I am rank 4\n");
MPI_Send(&test, 7, MPI_CHAR, 5, 0, MPI_COMM_WORLD);
}
else if (rank == 5){
char * buf[10];
MPI_Status status;
int ierr;
ierr = MPI_Recv(&buf, 7, MPI_CHAR, 4, 0, MPI_COMM_WORLD, &status);
if (ierr == MPI_SUCCESS)
printf("Rank %d (processor %s) received value %s.\n", rank, processor_name, buf);
else
printf("Rank %d (processor %s) did not sucessfully receive a value!\n", rank, processor_name);
}
else
printf("I'm rank %d\n", rank);
MPI_Finalize();
}
У меня есть 2 основных вопроса:
1) Почему значение, полученное 5-м рангом, плохое?
2) Почему нетранг 0-3 распечатать второй printf (то есть "я ранг х")?Они распечатывают первую строку.
Вот вывод
Hello world from processor buckeye, rank 4, out of 8 processors...
I am rank 4
Hello world from processor buckeye, rank 5, out of 8 processors...
Rank 5 (processor buckeye) received value a
@.
Hello world from processor buckeye, rank 6, out of 8 processors...
I'm rank 6
Hello world from processor buckeye, rank 7, out of 8 processors...
I'm rank 7
Hello world from processor paso, rank 0, out of 8 processors
Hello world from processor paso, rank 1, out of 8 processors
Hello world from processor paso, rank 2, out of 8 processors
Hello world from processor paso, rank 3, out of 8 processors
Заранее большое спасибо!