在这段代码中,所有进程都发布了一个屏障,为了更好的测量而休眠一段时间,然后首先Test
是Wait
屏障。Test
说不,等待成功。测试应该像一个非阻塞等待,所以它应该成功。我错过了什么?
printf("[%d] posting barrier, then sleeping\n",procid);
MPI_Request final_barrier;
MPI_Ibarrier(comm,&final_barrier);
sleep(2);
int all_done_flag=0;
MPI_Test(&final_barrier,&all_done_flag,MPI_STATUS_IGNORE);
printf("[%d] all done: %d\n",procid,all_done_flag);
MPI_Wait(&final_barrier,MPI_STATUS_IGNORE);
printf("[%d] concluded\n",procid);