我如何才能确保MPI_Barrier运行正常?对它的测试方法是什么?
谢谢
发布于 2010-01-14 15:25:13
#include <mpi.h>
int main (int argc , char *argv[])
{
int rank;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
sleep(5*rank); // make sure each process waits for different amount of time
std::cout << "Synchronization point for:" << rank << std::endl ;
MPI_Barrier(MPI_COMM_WORLD) ;
std::cout << "After Synchronization, id:" << rank << std::endl ;
MPI_Finalize();
return 0;
}发布于 2011-06-09 18:00:34
Allen Downey在他的书The Little Book of Semaphores中说到了这一点(关于他提出的一个可重用的屏障算法):
不幸的是,这种解决方案是大多数重要的同步代码的典型:很难确保解决方案是正确的。通常有一种微妙的方式,即通过程序的特定路径可能会导致错误。
更糟糕的是,测试解决方案的实现没有多大帮助。错误可能很少发生,因为导致错误的特定路径可能需要非常不幸的环境组合。这样的错误几乎不可能通过常规方式重现和调试。
唯一的选择是仔细检查代码并“证明”它是正确的。我把“证明”放在引号里,因为我并不是说,你一定要写一份正式的证明(尽管有些狂热分子鼓励这种疯狂行为)。
https://stackoverflow.com/questions/2062653
复制相似问题