并行效率下降不一致
Parallel efficiency drops inconsistently
我的问题可能是微不足道的。我使用 MPI 库并行化了一个 CFD 代码,现在我正在尝试研究我的并行效率。首先,我创建了一个案例,该案例将在行列之间提供相等的负载以及计算量与传输数据的恒定比率。因此,我的期望是,随着我增加排名,任何运行时更改都将仅归因于通信延迟。然而,我意识到不调用等级通信的子例程(因此它们只进行域计算,因此它们处理所有等级的相同负载)对运行时间的增加有显着的贡献——实际上是最大的。我在这里错过了什么?这甚至有意义吗?
Does this even make sense?
是!
您创建的进程越多 (every process has a rank),您就越能达到系统以真正并行方式执行进程的能力极限。
您的系统(例如您的计算机)可以运行并行一定数量的进程,当超过这个限制时,一些进程等待执行(因此并非所有进程运行在并行),这会损害性能。
例如,假设一台计算机有 4 个内核,您创建了 4 个进程,那么每个内核都可以执行一个进程,因此您的性能会受到进程之间的通信(如果有)的影响。
现在,在同一台计算机上,您创建了 8 个进程。会发生什么?
4 个进程将开始并行执行,但其他 4 个进程将等待 核心可用,这样它们也可以运行。这不是真正的并行执行(某些进程将以线性方式执行)。此外,根据 OS 调度策略,某些进程可能会交错,从而导致每次切换都会产生开销。
我的问题可能是微不足道的。我使用 MPI 库并行化了一个 CFD 代码,现在我正在尝试研究我的并行效率。首先,我创建了一个案例,该案例将在行列之间提供相等的负载以及计算量与传输数据的恒定比率。因此,我的期望是,随着我增加排名,任何运行时更改都将仅归因于通信延迟。然而,我意识到不调用等级通信的子例程(因此它们只进行域计算,因此它们处理所有等级的相同负载)对运行时间的增加有显着的贡献——实际上是最大的。我在这里错过了什么?这甚至有意义吗?
Does this even make sense?
是!
您创建的进程越多 (every process has a rank),您就越能达到系统以真正并行方式执行进程的能力极限。
您的系统(例如您的计算机)可以运行并行一定数量的进程,当超过这个限制时,一些进程等待执行(因此并非所有进程运行在并行),这会损害性能。
例如,假设一台计算机有 4 个内核,您创建了 4 个进程,那么每个内核都可以执行一个进程,因此您的性能会受到进程之间的通信(如果有)的影响。
现在,在同一台计算机上,您创建了 8 个进程。会发生什么?
4 个进程将开始并行执行,但其他 4 个进程将等待 核心可用,这样它们也可以运行。这不是真正的并行执行(某些进程将以线性方式执行)。此外,根据 OS 调度策略,某些进程可能会交错,从而导致每次切换都会产生开销。