问题标签 [mpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1804 浏览

c++ - Scala 等与 C/C++/Fortran 的性能比较?

我想知道“现代”多线程专业语言(如 scala)和“经典”“低级”语言(如 C、C++、Fortran)使用并行库(如 MPI、Posix 甚至 Open-MP)之间的性能是否有任何可靠的比较。

欢迎任何链接和建议。

0 投票
3 回答
5525 浏览

implementation - MPI 实现:MPI_Recv 可以接收来自多个 MPI_Send 的消息吗?

现在我正在尝试使用 MPI_Send 和 MPI_Recv 在多个进程之间传递最佳解决方案。在每个流程中找到的最佳解决方案应该传递给控制流程,控制流程存储所有最佳解决方案,并在需要时发送给其他流程。我的问题是如何实现它?例如,一旦进程 1 找到一个新的最佳状态,它可以调用 MPI_Send 并将其发送给控制进程。有没有办法让控制过程检测到有消息要接收?每个 MPI_Send 是否都需要 MPI_Recv?期待听到各位专家的建议。谢谢!

谢谢你的建议。我想做的是让几个工作进程向一个控制进程发送消息。工作进程决定何时发送。控制过程必须检测何时接收。MPI_Proble 可以做到这一点吗?

0 投票
4 回答
2919 浏览

multithreading - 消息传递任意对象图?

我希望在 Beowulf 集群中并行化一些代码,这样所涉及的 CPU 就不会共享地址空间。我想在外循环中并行化一个函数调用。函数调用没有任何“重要”的副作用(尽管它们确实使用随机数生成器、分配内存等)。

我看过像 MPI 这样的库,我看到的问题是它们似乎使得在节点之间传递复杂的对象图变得非常重要。我的函数的输入是指向一个非常复杂的对象图的 this 指针。我的函数的返回类型是另一个复杂的对象图。

在与语言无关的级别(我正在使用 D 编程语言,我几乎可以肯定这里没有可用的罐装解决方案,但我愿意创建一个),是否有一种“典型”的方式来传递复杂的处理跨节点的状态?理想情况下,我希望完全抽象出如何复制状态的详细信息,并使调用看起来几乎像正常的函数调用。我不在乎通过网络复制这么多状态并不是特别有效,因为所讨论的并行级别是如此粗粒度,以至于它可能无关紧要。

编辑:如果没有简单的方法来传递复杂的状态,那么通常如何使用消息传递?在我看来,任何涉及通过网络复制数据的事情都需要粗粒度的并行性,但粗粒度的并行性通常需要传递复杂的状态,以便可以在一个工作单元中完成大量工作。

0 投票
2 回答
522 浏览

c++ - c++ 在类中初始化变量以使用 mpi 发送它

我陷入了一项编程任务。我希望将我的 stl 向量的元素放置在

使用 MPI_Send() 例程发送它的连续内存。

这是一个例子:

我怎样才能有一个带有串行存储器的向量,我应该做点别的吗?

谢谢。最亲切的问候。

SRec

0 投票
1 回答
11365 浏览

mpi - MPI_Bcast对应的接收程序

广播例程 MPI_Bcast 的相应 MPI 接收例程是什么。

即,一个处理器向一个组广播消息,假设全世界,我怎么能在这些进程中拥有消息?

谢谢你。

问候

SRec

0 投票
1 回答
1689 浏览

arrays - 使用 malloc 和 MPI 在 C 中是否存在问题?

对不起,我不能发布任何源代码...

我有一个运行 GS 求解器的主/从红黑算法的代码。在简单的情况下,矩阵被分成 4 个大小均匀的计算块。图像 1-3 执行它们的计算部分,并将带有结果的缓冲区发送回图像 0。问题是这样的:

我已经 malloc 了一个足够大的数组来容纳所有的部分,以便我可以将单个结果映射回单个网格。问题似乎是在图像 0 上,在 MPI_Recv 调用之后,该进程不再知道网格被 malloc'd 用于保存整个事物。每当我尝试在该网格中放置一些东西时,都会出现错误。我发现唯一可行的解​​决方法是在所有进程上执行 malloc,并在 MPI_Recv 之前再次为进程零执行 malloc。

任何想法为什么它似乎失去了对先前分配的内存的引用?

在伪代码中:

我在这里先向您的帮助表示感谢

0 投票
1 回答
3120 浏览

sorting - 如何使用 MPI_CART 将进程映射到超立方体

我正在尝试使用 MPI 为 2^n 处理器实现双音排序。

为了方便起见,我想使用 n 维超立方体来这样做。使用 MPI_Cart_Create 我可以创建自组织维度。这样做将最大限度地提高我的流程效率,并减少为了完成它而必须吐出的 LOC 数量。

谷歌搜索和文学总是说同样的事情:

请注意,n 维超立方体是一个 n 维环面,每个坐标方向有 2 个进程。因此,不需要对超立方体结构的特殊支持。

我还没有看到任何单个示例 + n 维环面,每个坐标方向有 2 个进程,这对我来说似乎只是个谜。有人需要建议吗?

谢谢,

0 投票
1 回答
664 浏览

arrays - 从较大的 2D 矩阵中提取 2D 子矩阵的 MPI 代码是什么?

我正在寻找从较大的二维子矩阵中提取二维子矩阵的最佳方法。那是。如果我有一个每个边都有 1 个鬼点的矩阵,我想提取内部矩阵。因此,如果矩阵被定义为 matrix[NX+2][NY+2] 我如何提取从 matrix[1][1] 开始到 matrix[NX+1][NY+1] 的子矩阵

我想用我认为的 MPI_Type_vector 来做到这一点,但我不确定如何用正确的步幅、块长度等来定义它。我想使用 MPI_Send 和 MPI_Recv 将新的 MPI_Datatype 发送到另一个处理器。接收处理器上的缓冲区大小为 [NX][NY] 谢谢

0 投票
4 回答
3989 浏览

c - MPI_Send 和 MPI_Recv 开销

所以我试图找出在 C 代码中使用 MPI 在处理器之间发送和接收信息的通信开销。

我需要在发送和接收中传递一个缓冲区,但我想做的只是计算在两个处理器之间进行 n 通信所需的时间。

这是我的整个代码:

我做了一些测试,发现当我取出 for 循环时它可以按照我想要的方式工作。那么导致无限循环或段错误的 for 循环有什么问题?

0 投票
2 回答
606 浏览

network-programming - 对于分布式应用程序,ASIO 与 MPI 使用哪个?

我对此有点困惑。如果您正在构建一个分布式应用程序,在某些情况下可能会执行并行操作(尽管不一定是数学运算),您应该使用 ASIO 还是 MPI 之类的东西?我认为 MPI 比 ASIO 更高级别,但尚不清楚堆栈从何处开始。