什么时候必须避免使用MPI_COMM_WORLD?

时间:2012-08-28 03:25:01

标签: c++ parallel-processing mpi

如果您不使用MPI_COMM_WORLD,可以给我一些例子吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

相关问题