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