0
我有什么如何打印日志,以便在MPI
我有使用MPI的C程序,它使用4个过程:1辆车辆(的taskid = 0)和3名乘客。车辆一次可容纳2名乘客。 3位顾客不断回来搭车。
车辆,我有:
int passengers[C] = {0};
while(1)
MPI_Recv(&pid, 1, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);
//put pid in passengers[totalNumberArrived]
if(totalNumberArrived == 2)
printf("vehicle left...");
sleep(5);
printf("vehicle came back...");
for (i=0; i<2; i++)
MPI_Send(&passengers[i], 1, MPI_INT, passengers[i], 1, MPI_COMM_WORLD);
totalNumberArrived = 0;
if(done)//omitting the details here
break;
,并为每个乘客,我有:
for (i to NumOfRound)
sleep(X);
printf("%d is sending a msg", tasked)
MPI_Send(&taskid, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
MPI_Recv(&pid, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &pstatus);
printf("%d received from %d\n", tasked, pid, pstatus.MPI_SOURCE);
问题
如果车辆闲置未用的taskid 1一程和3,我期望看到这种输出:
vehicle left...
vehicle came back...
1 is sending a msg
3 is sending a msg (this could be before 1's msg though)
,但我有时会
vehicle left...
1 is sending a msg
3 is sending a msg
vehicle came back...
它看起来像乘客不会被阻止,直到车辆回来。
我以为MPI_Recv阻止任务,直到它从车辆获得一个msg,所以我研究并阅读了MPI_Recv阻止了这种问题,因为printf不一定是按顺序打印的。我还读了一些建议使用冲洗,但在某些情况下,冲洗不起作用。
我不知道我应该怎么做我的情况。它真的只是printf命令的问题吗?
我也看到了这一点:Ordering Output in MPI
,不知我是否应该添加一个主线程,并让它为车辆和乘客的中央控制器?