1

我是 MPI 编程(mpich2 fedora)的新手。我在写是因为,当将 MPI_Barrier 与另一个不同于 MPI_COMM_WORLD 的通信器一起使用时,我得到了死锁。

我做了2个这样的沟通者:

MPI_Comm_split (MPI_COMM_WORLD, 颜色, 等级, &split_comm);

如果我在所有颜色都可以通过的地方放置一个 MPI_Barrier,那就没问题了。

但是如果我把一个 MPI_Barrier 放在只有 color == 1 可以通过的地方,我就会死锁。

如何将 MPI_Barrier 与另一个通信器一起使用?我也在使用 MPI_Bcast ()(与另一个不同的通信器 MPI_COMM_WORLD),但是当没有人调用 MPI_Bcast 时它也没有被阻止。MPI_COMM_WORLD 的不同通信器可以同步您自己的进程吗?

4

1 回答 1

1

如果您可以发布代码片段,将会很有帮助。仅凭你的话很难调试死锁。

无论如何,您将要阻止的通信器作为参数传递给 MPI_Barrier: http ://mpi.deino.net/mpi_functions/mpi_barrier.html http://www.mcs.anl.gov/research/projects/mpi /www/www3/MPI_Barrier.html

MPI_Bcast 是一个阻塞函数。因此,如果一个或多个等级没有达到 MPI_Bcast 调用,那么您可能会遇到死锁。

请记住,MPI_COMM_WORLD 包括所有等级,即使在 MPI_Comm_Split 调用之后也是如此。

于 2013-10-17T01:28:05.517 回答