我有下面的 C++ 代码片段,它基本上使用经典的蒙特卡罗技术计算 pi。
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 语句的主体?希望我说清楚了。谢谢
是的,所有集体通信调用(Reduce、Scatter、Gather 等)都是阻塞的。没有必要设置障碍。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)