0

当你不应该使用 MPI_COMM_WORLD 时,你能给我一些例子吗?

谢谢!

4

1 回答 1

4

我可以想到两种情况:当您编写多线程代码或库时。

原因是 MPI 通信器是消息匹配上下文的一部分。如果您MPI_COMM_WORLD在来自库和用户代码的 MPI 调用中使用,您可能会匹配错误消息。在库代码中使用特殊标签很脆弱,因为用户代码可能使用相同的标签。制作一个单独的通信器要容易得多。

多线程代码的问题是相同的 - 消息匹配,除了它有更多出错的机会。例如,如果您在多线程代码中使用集体调用,则不再有标记来区分它们,并且将导致未定义的行为。

最后,移除对 MPI_COMM_WORLD 的依赖可以让你的代码更加模块化。例如,假设您为某些计算编写了一个类。稍后您可能希望将此类包含在另一个程序中,但只对节点的子集执行计算。如果类构造函数接受一个通信器一个参数,MPI_Comm_dups 它,并使用它 - 集成很容易。如果MPI_COMM_WORLD是硬编码的,那么将进行一些重构。

特别是在 C++ 中,您可能会将程序的独立部分封装在类中。将它们视为小型库并使它们彼此独立可能是有益的,这样使用它们的代码就不必担心组合可能会如何起作用。

于 2012-08-28T05:46:20.233 回答