C 为什么我的MPI程序输出不正确
我是MPI的初学者,我有一个家庭作业。我不是要求你解决这个问题,我只需要一个提示,说明我的程序为什么会出故障 问题就在这里 编写一个模拟乒乓球桌面游戏的MPI C程序。2只应使用过程。进程使用MPI_Send和MPI_Recv连续地将消息反弹到彼此之间,具体次数为。消息由一个整数计数变量组成,该变量在发送前由每个进程递增。开始游戏之前,count变量被初始化为零 输出 一个名为ping_pong_output.txt的文本文件,如下例所示:if count=5 进程0启动游戏并初始化计数进程0增加计数(1)并将其发送给进程1 进程收到计数进程0增加了计数(2)并将其发送回进程0 进程收到计数进程0增加了计数(3)并将其发送回进程1 进程收到计数进程0增加了计数(4)并将其发送回进程0 进程收到计数进程0增加了计数(5)并将其发送回进程1 注意以下几点:C 为什么我的MPI程序输出不正确,c,parallel-processing,mpi,C,Parallel Processing,Mpi,我是MPI的初学者,我有一个家庭作业。我不是要求你解决这个问题,我只需要一个提示,说明我的程序为什么会出故障 问题就在这里 编写一个模拟乒乓球桌面游戏的MPI C程序。2只应使用过程。进程使用MPI_Send和MPI_Recv连续地将消息反弹到彼此之间,具体次数为。消息由一个整数计数变量组成,该变量在发送前由每个进程递增。开始游戏之前,count变量被初始化为零 输出 一个名为ping_pong_output.txt的文本文件,如下例所示:if count=5 进程0启动游戏并初始化计数进程0增
- 流程轮流作为发送方和接收方(需要使用%)
- 程序应该只允许2个进程来玩游戏
#include <stdlib.h>
#include <stdio.h>
#include <mpi.h>
#include <time.h>
int main(int argc, char * argv[]){
int size=0,my_rank=0,tag=1,count;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
MPI_Barrier(MPI_COMM_WORLD);
if (my_rank==0){
count=0;
count++;
printf("Process 0 started the game and initialized the count\nProcess 0 incremented the count and sent it to process 1\n");
MPI_Send(&count,1,MPI_INT,1,tag,MPI_COMM_WORLD);
}
MPI_Barrier(MPI_COMM_WORLD);
while (count<=5){
MPI_Barrier(MPI_COMM_WORLD);
MPI_Recv(&count,1,MPI_INT,(my_rank+1)%2,tag,MPI_COMM_WORLD,&status);
printf("Process %d received the count\n",my_rank);
count++;
MPI_Send(&count,1,MPI_INT,(my_rank+1)%2,tag,MPI_COMM_WORLD);
printf("process %d incremented the count (%d) & sent it back to process %d\n",my_rank,count,(my_rank+1)%2);
}
MPI_Finalize();
return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
int size=0,my_rank=0,tag=1,count;
MPI_状态;
MPI_Init(&argc,&argv);
MPI_通信大小(MPI_通信世界和大小);
MPI通信等级(MPI通信世界和我的通信等级);
MPI_屏障(MPI_通信世界);
如果(我的排名==0){
计数=0;
计数++;
printf(“进程0启动游戏并初始化计数\n进程0增加计数并将其发送到进程1\n”);
MPI_发送(&count,1,MPI_INT,1,tag,MPI_COMM_WORLD);
}
MPI_屏障(MPI_通信世界);
虽然(计数对于可能正在寻找答案的任何人,我设法发现您应该让一个进程处理所有打印。这是一种方法。您遇到的问题与输出刷新有关。使用printf将向stdout发送数据,但stdout不会立即刷新。因为每个列组都会在自己的时间刷新(在本例中,最有可能是在执行结束时),您将在最后获得所有内容,并且两个列组将被分组在一起。我所知道的保持程序原始结构的最简单解决方案是在每次printf调用后添加fflush(stdout)。这将强制刷新缓冲区,从而显示输出。请参阅