砍猪佩琪 2023-11-09 11:39 采纳率: 33.3%
浏览 81
已结题

多进程并行时计算速度变慢

目前在做mpi并行,发现了一个问题,就是当我把任务均匀的分配到各个进程之后,每个进程的计算时间相加是大于串行的,且进程之间的计算速度也不相同,该过程不涉及任何通信。
针对上述情况,我做了一个简单的测试,我开启了多个进程并行运行同一段代码,该代码执行了10万次向量点乘,向量的长度为10万,然后再用串行的方式运行这段代码,结果发现并行执行所花费的时间高于串行,且进程越多,花费的时间越长。
在此过程中我也在持续监测CPU、内存等资源,发现均没有达到上限。
目前怀疑上述问题可能跟系统资源调度有关,但本人对这块不太熟悉,不太清楚具体原因,有没有专家可以解答一下

开发环境如下:
OS:Windows11
IDE:visual studio
语言:fortran
mpi实现:intel mpi

  • 写回答

18条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-09 11:39
    关注

    基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:

    • 为你解答

    在使用MPI进行并行计算时,你遇到的问题很可能与多个因素有关,包括负载平衡、内存带宽、缓存效率、进程调度以及系统的多进程管理等。以下是一些可能导致你观察到的性能下降的因素:

    1. 负载平衡:即使你提到工作在各个进程间是均匀分配的,也可能存在某些进程由于系统资源调度的问题而运行得更慢,从而拖慢整体进度。

    2. 内存带宽和缓存争用:当多个进程并行运行时,它们可能会竞争有限的内存带宽。此外,如果多个进程运行在同一个物理核心或共享缓存的核心上,缓存争用可能会减慢每个进程的速度。

    3. 超线程:如果你的CPU支持超线程(Hyper-Threading),并行进程可能会被分配到同一物理核心的逻辑核上,这可能不如分配到独立物理核心上效率高。

    4. 进程/线程调度:操作系统的进程调度策略可能会导致进程无法有效地利用CPU资源。例如,进程可能会频繁地在核心之间迁移,从而增加了上下文切换的成本。

    5. 系统的多进程管理:在某些情况下,操作系统的多进程管理策略可能不利于并行计算的优化,尤其是在多用户或者多任务的环境中。

    6. NUMA架构:如果你的系统是非统一内存访问(NUMA)架构,内存访问时间可能会根据数据所在的物理内存位置而变化,导致进程之间的性能差异。

    7. MPI实现与Fortran的交互:你使用的Intel MPI与Fortran的交互方式也可能影响性能。例如,内存对齐、编译器优化选项等可能会有所不同。

    为了深入了解问题,你可能需要进行进一步的剖析和测试,例如:

    • 使用性能剖析工具(如Intel VTune或gprof)来观察CPU的使用情况、缓存命中率以及进程间的切换情况。
    • 尝试不同数量的进程,以及不同的核心分配策略,以观察性能变化。
    • 考虑在不同的操作系统(如Linux,因为它通常被认为在并行处理方面表现更好)上运行相同的测试。
    • 检查MPI进程间是否存在隐式同步点,虽然你提到没有显式通信。
    • 考虑向量点乘操作的内存访问模式,是否存在内存对齐问题。
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 创建了问题 11月9日