<分区>
你能给我一些你不应该使用 MPI_COMM_WORLD 的例子吗?
谢谢!
<分区>
你能给我一些你不应该使用 MPI_COMM_WORLD 的例子吗?
谢谢!
最佳答案
我可以想到两种情况:编写多线程代码或库时。
原因是 MPI 通信器是消息匹配上下文的一部分。如果您在来自库以及用户代码的 MPI 调用中使用 MPI_COMM_WORLD
,您可能会匹配到错误的消息。在库代码中使用特殊标签很脆弱,因为用户代码可能使用相同的标签。单独制作一个通信器要容易得多。
多线程代码的问题是相同的 - 消息匹配,只是出错的机会更多。例如,如果您在多线程代码中使用集体调用,则不再使用标记来区分它们,并且会导致未定义的行为。
最后,移除对 MPI_COMM_WORLD 的依赖可以让你的代码更加模块化。例如,假设您为某些计算编写了一个类。稍后您可能希望将此类包含在另一个程序中,但只对节点的一个子集执行计算。如果类构造函数采用通信器参数,MPI_Comm_dup
对其进行处理,并使用它 - 集成很容易。如果 MPI_COMM_WORLD
是硬编码的,则需要进行一些重构。
特别是在 C++ 中,您可能会将程序的独立部分封装在类中。将它们视为迷你库并使它们彼此独立可能是有益的,这样使用它们的代码就不必担心组合的行为方式。
关于c++ - 什么时候必须避免使用 MPI_COMM_WORLD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152369/