ns3中MPI的应用(1)

1,259 阅读3分钟

这是我参与更文挑战的第15天,活动详情查看: 更文挑战

MPI 用来分布式模拟

并行和分布式离散事件模拟允许在多个处理器上执行单个模拟程序。通过将模拟分解为逻辑进程(LPs),每个LP可以由不同的处理器执行。这种模拟方法通过利用提高的处理能力和内存可用性来实现非常大规模的模拟。为了确保分布式模拟的正确执行,需要在LPs之间传递消息。为了支持ns-3中的分布式模拟,使用了标准的消息传递接口(Message Passing Interface, MPI)以及一个新的分布式模拟器类。目前,在ns-3中为,分布式目的进行的模拟划分只能在点对点链接进行。

ns3中MPI现在的实施细节

在分布式仿真过程中,许多包必须跨越模拟器边界。换句话说,发源于一个LP的数据包将被发送到另一个LP,为了进行此转换,必须将包含数据包内容的消息发送到远程LP。收到此消息后,远程LP可以重建数据包并正常处理。通过ns-3中的新MPI接口,可以轻松地处理在LPs之间发送接收消息的过程。

除了在LPs之间传递简单的消息外,还在每个LP上使用分布式模拟器来确定要处理哪些事件。按照时间戳顺序处理事件,以确保适当的模拟执行,这很重要。如果LP收到包含过去事件的消息,这显然是一个问题,因为这个事件可能会更改已经执行的其他事件。为了解决这个问题,在ns-3中使用了两种带前移的保守同步算法。有关不同同步方法以及并行和分布式仿真的更多信息,请参阅Richard Fujimoto的“并行和分布式仿真系统”。

DistributedSimulatorImpl类中实现的默认并行同步策略基于全局同步算法,该算法使用MPI集合操作跨所有LPs同步模拟时间。基于本地通信和空消息(null messages)的第二个同步策略在NullMessageSimulatorImpl类中实现,对于空消息策略,不需要全局的all to all收集;LPs只需要与具有共享点对点链接(point-to-point links)的LPs进行通信。要使用的算法由ns-3全局值SimulatorImplementationType控制。

要使用的最佳算法取决于应用程序的通信和事件调度模式。通常,空消息同步算法的伸缩性更好,因为本地通信伸缩性比DistributedSimulatorImpl所要求的全局all-to-all聚合更好。在已知的两种情况下,全局同步性能更好。第一个是当大多数LPs与大多数其他LPs具有点对点链接时,换句话说,这些LPs几乎是完全连接的。在这种情况下,空消息算法生成的消息传递流量将超过所有聚合的消息传递流量。第二种情况是,当模拟时间较长且没有事件发生时,全局的“所有人对所有人”集合更有效。该算法能够快速确定下一个事件的全局时间。空消息算法的最近邻行为将需要更多的通信来传播该知识;每个LP只知道邻居的下一个事件时间。