我有C++下面的代碼片段,它基本上使用經典的蒙特卡洛技術來計算pi。MPI_Reduce是否阻塞(或自然屏障)?
srand48((unsigned)time(0) + my_rank);
for(int i = 0 ; i < part_points; i++)
{
double x = drand48();
double y = drand48();
if((pow(x,2)+pow(y,2)) < 1){ ++count; }
}
MPI_Reduce(&count, &total_hits, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(my_rank == root)
{
pi = 4*(total_hits/(double)total_points);
cout << "Calculated pi: " << pi << " in " << end_time-start_time << endl;
}
我只是想知道是否MPI_Barrier調用是必要的。 MPI_Reduce是否確保在reduce操作完成之前不會執行if語句的主體?希望我清楚。謝謝
MPI標準允許提前退出參與過程。保證同步的唯一集體調用是'MPI_Barrier'。 – 2015-04-15 08:55:15