我是 MPI 的新手,正在尝试找出其中的微妙之处,因此我只是在玩一个简单的例子。我的问题是,当我使用 2 个处理器运行下面的代码时,即使 printf 语句在 MPI_Init 之前,两个处理器都会打印它。无论如何都不会发生这种情况,并且只在环境初始化时使用多个处理器?下面是我的最小工作示例。
#include <mpi.h>
#include<stdio.h>
#define send_data_tag 2001
#define return_data_tag 2002
double add(int a);
int main(int argc, char ** argv)
{
int rank, size, len;
char host[MPI_MAX_PROCESSOR_NAME];
printf("Will all processors print this?");
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Get_processor_name(host, &len);
if(rank == 0)
{
int test = 1;
int final_test;
MPI_Send(&test, 1 , MPI_INT, 1, send_data_tag, MPI_COMM_WORLD);
MPI_Recv(&final_test, 1, MPI_INT, 1, return_data_tag, MPI_COMM_WORLD, &status);
printf("%d\n", final_test);
}
else
{
int test_recv , final_test;
MPI_Recv( &test_recv, 1, MPI_INT, 0, send_data_tag, MPI_COMM_WORLD, &status);
final_test = test_recv + 1;
MPI_Send(&final_test, 1, MPI_INT, 0, return_data_tag, MPI_COMM_WORLD);
}
MPI_Finalize();
}