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

标签 c++ parallel-processing mpi

<分区>

你能给我一些你不应该使用 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/

相关文章:

c++ - 获取未知数组长度的最简单方法是什么?

java - RMI服务运行方式与socket类似

r - 如何并行化 topicmodels R 包

erlang - Erlang 中的并行深度优先搜索比顺序搜索慢

c++ - MPI_Send 错误

c++ - Mac OS X 上的 Qt : How to get rid of QListView's blue outline?

c++11 可变参数编程,如何定义 vector 塔

algorithm - 分析和理解这个算法

c++ - 在 C++ 中乘以 5 个不同大小的矩阵

c - 编写混合 MPI/OpenACC 程序