【问题标题】:MPI FundamentalsMPI 基础知识
【发布时间】:2014-04-16 09:12:24
【问题描述】:

我有一个关于 MPI 的基本问题,以便更好地理解它(我是 MPI 和多个进程的新手,所以请多多包涵)。我正在使用 C++ (RepastHPC) 中的模拟环境,该环境广泛使用 MPI(使用 Boost 库)来允许并行操作。特别是,模拟由各个类(即代理)的多个实例组成,它们应该相互交互、交换信息等。现在考虑到这发生在多个进程上(并且考虑到我对 MPI 的基本理解),我的自然问题或恐惧是,不同进程上的代理不再相互交互,因为它们无法连接(我知道,这与 MPI 的整个想法相矛盾)。

阅读手册后,我的理解是:Boost.MPI 的可用库(以及上述end 包的库)负责进程之间的所有通信和来回发送包,即每个进程都有来自其他进程的实例的副本(我猜这是某种形式的按值调用,b/c 原始实例不能从只有一个副本的进程中更改),然后进行更新,以确保实例与原始实例具有相同的信息,依此类推。

这是否意味着,就模拟运行的最终结果而言,我得到的结果与我将在一个过程中完成整个事情一样?换句话说,多个过程只是为了加快速度而不是改变模拟的设计(因此我不必担心)?

【问题讨论】:

  • 对于任何生产并行执行软件的人来说,设计目标是在多个进程上运行时应该产生正确的结果。您进行了哪些测试来了解您所引用的软件是否实现了这一目标?当然,使用串行执行的结果来验证并行执行的结果取决于串行执行本身产生正确结果的保证。
  • 感谢您的快速回复。我一开始就误解了我的问题,我目前没有使用该软件,更多的是考虑使用它,所以到目前为止我还没有运行任何测试,但这绝对是一个很好的起点。我毫不怀疑软件的设计者正确地完成了他们的工作,我的问题是该软件的一般目的是否是从并行执行中获得与串行执行相同的结果(即,如果我正确地实现它)。
  • 关于测试,这是我能想到的一种方法,以确保它正常工作(如果有更简单的方法,请告诉我): 1. 创建两个代理(ID 1,ID 2)每个拥有两个苹果,创建两个代理(ID 3,ID 4),每个拥有两个橙子。 2.让每个特工遍历特工列表,每当有人有与他们不同的水果时,就给他们。
  • 运行一次(或每隔奇数次运行),如果进程之间的通信正常,我应该最终让代理 1 和 2 各有两个橙子,代理 3 和 4 有两个苹果,对吗?
  • 另外,有没有一种简单的方法可以在链接程序时将并行进程数设置为1(实际上是关闭M​​PI部分)?为了查看比较并行和串行执行的结果。我现在尝试了简单的版本,使用 'mpicxx main.cpp' 编译,并使用 'mpirun -n 2 ./main' 运行,但是我似乎无法将数字设置为 1,因为链接似乎没有完成。跨度>

标签: c++ boost mpi


【解决方案1】:

我认为您在这里对 MPI 有根本的误解。 MPI 不是自动并行化库。它不是分布式共享内存机制。它对你没有任何魔力。

它的作用是让同一台或不同机器上的不同进程之间的通信变得更简单。每个进程都有自己的地址空间,该地址空间不与其他进程重叠(除非您在 MPI 之外执行其他操作)。假设您正确设置了 MPI 安装,它将为您完成在进程之间设置通信通道的所有痛苦。它还为您提供了一些更高级别的抽象,例如集体通信。

当您使用 MPI 时,您编译代码的方式与正常情况不同。不要使用g++ -o code code.cpp(或任何你的编译器),你使用mpicxx -o code code.cpp。这将自动链接到所有必要的 MPI 内容。然后,当您运行您的应用程序时,您使用 mpiexec -n <num_processes> ./code(其他参数不是必需的,但可能是必需的)。参数num_processes 将告诉 MPI 启动多少进程。这不是在编译/链接时完成的。

您还必须重写代码才能使用 MPI。 MPI 有很多功能(标准可用here 并且网上有很多更容易理解的教程)可供您使用。基础是MPI_Send()MPI_Recv(),但还有很多很多。你必须找到一个教程。

【讨论】:

  • 感谢您的澄清。我确实对 MPI 有误解。我正在使用的软件包在其手册中详细描述了它如何设置进程之间的数据交换,我现在明白了原因,因为正如您所指出的那样,这不是由 MPI 自动完成的,而是通信的布局是为此目的而提供的。也感谢您的 pdf,我正在寻找这样的文档。
  • 我建议您查看 LLNL 的教程。可在computing.llnl.gov/tutorials/mpi 获得。他们还有其他关于 pthread 和其他常见并行化库和语言原语的教程。
猜你喜欢
  • 1970-01-01
  • 2018-05-25
  • 2014-11-28
  • 2014-02-14
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多