【发布时间】:2011-07-05 04:21:49
【问题描述】:
我在 main 中声明了 int 值,并且所有进程都初始化了这个值。它们都是存储值,我想在计算完成后写在屏幕上。广播是解决方案吗?例如。如何实现?
int i;
int value;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD;&myrank);
left = (myrank - 1); if (left < 0) left = numtasks-1;
right = (myrank + 1); if (right >= numtasks) right = 0;
if(myrank==0){
value=value+myrank;
MPI_Send(value,MPI_INT,right,99,MPI_COMM_WORLD);
MPI_Recv(value,MPI_INT,left,99,MPI_COMM_WORLD,&status);
}
else if(myrank==(numtasks-1)){
MPI_Recv(value,MPI_INT,left,99,MPI_COMM_WORLD,&status);
value=value+myrank;
MPI_Send(value,MPI_INT,right,99,MPI_COMM_WORLD);
}
else{
MPI_Recv(value,MPI_INT,left,99,MPI_COMM_WORLD,&status);
value=value+myrank;
MPI_Send(value,MPI_INT,right,99,MPI_COMM_WORLD);
}
这些应该做逻辑循环。我进行一次计算(所有等级的总和),在过程 0 中我得到结果。这个结果(对于 4 个进程,它将是 6 个)我想在这个计算之后由每个进程打印。但我不知道如何准确使用屏障以及在何处使用。
还有一件事,在所有 N-1 次发送(其中 N 是进程数)之后,我应该有每个进程中所有等级的总和。在我的代码中,我只在进程 0 中得到这个总和......这可能是一个不好的方法:-(
【问题讨论】: