【问题标题】:Parallel efficiency drops inconsistently并行效率不一致地下降
【发布时间】:2017-08-27 00:04:53
【问题描述】:

我的问题可能是微不足道的。我使用 MPI 库并行化了 CFD 代码,现在我正在尝试调查我的并行效率。首先,我创建了一个案例,该案例将在等级之间提供相等的负载,并且计算量与传输数据的比率恒定。因此,我的期望是,当我增加等级时,任何运行时变化都将仅归因于通信延迟。但是,我意识到不调用等级通信的子例程(因此它们只进行域计算,因此它们处理所有等级的相同负载)贡献显着——实际上是最大的运行时间增加。我在这里想念什么?这甚至有意义吗?

【问题讨论】:

  • 可能应该发布重现您的问题的代码。你可以edit它进入你的问题。
  • 如果您的应用程序是内存绑定的,那么同一个套接字上的所有排名将共享相同的内存带宽。这可以解释效率下降
  • 对不起 Cody Gray,但由于工业产权问题,我无法分享代码

标签: c performance parallel-processing mpi cdf


【解决方案1】:

这有意义吗?

是的

您创建的进程越多 (every process has a rank),您就越能达到系统以真正并行方式执行进程的能力极限。

您的系统(例如您的计算机)可以并行运行一定数量的进程,当超过此限制时,一些进程会等待执行(因此并非所有进程都并行运行),这会损害性能。

例如,假设一台计算机有 4 个核心,而您创建了 4 个进程,那么每个核心都可以执行一个进程,因此进程之间的通信(如果有的话)会损害您的性能。

现在,在同一台计算机上,您创建了 8 个进程。会发生什么?

其中 4 个进程将开始并行执行,但其他 4 个进程将等待一个内核可用,以便它们也可以运行。这不是真正的并行执行(某些进程将以线性方式执行)。此外,根据操作系统的调度策略,某些进程可能会交错,导致每次切换都会产生开销。

【讨论】:

  • 更糟糕的是,它们会被交错,导致每次切换都会产生开销。
  • 那将是疯狂的@MadPhysicist。我更新了答案,你现在喜欢吗?
  • 大自然如何疯狂地做 dat :​​-)
  • 即使你有物理内核,内核和硬件仍然要争夺共享资源。 IIRC 我读到的论文说,一旦你达到了大约 20 个 CPU,你就会因为同步而损失大约一个完整的 CPU,之后情况会变得更糟。
  • 是的,我也想过@o11c,但是我不确定是否应该将其注入答案中..
猜你喜欢
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多