C语言 并联效率下降不一致



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

这甚至有意义吗?

是的

您创建的流程越多(每个进程都有一个等级),您就越能达到系统以真正并行方式执行流程的能力极限。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新