我有一个简单的 DO 循环(Fortran 90),其中各个迭代彼此独立,并且仅从硬盘驱动器输入/输出数据(进程之间不交换消息/MPI),我已经使用 MPI 进行并行化。 在顺序运行中,循环的一次迭代大约需要一天才能完成。如果我并行运行 29 个这样的迭代,大约需要 2.5 天。它位于 super 计算机的一个节点上(即没有节点间通信)。
我听人们说,对于可简单并行的程序(循环中的独立步骤),总执行时间应该大约接近于循环中仅运行一个步骤时的执行时间。
问题:您认为这种加速效果合适吗?
非常感谢。
最佳答案
由于您有独立的迭代,因此在 29 个核心上进行 29 次迭代的运行时间不应与在单个核心上进行单次迭代的运行时间相差甚远。除非满足以下一个或多个条件,否则您应该接近一天:
- 您的计算节点上没有足够的内存来容纳所有进程及其数据;
- 迭代之间的计算不平衡;
- 存在大量磁盘输入/输出,导致磁盘访问出现竞争。
- 可能还有其他一些我没有想到的。
关于performance - 通过可简单并行的 DO 循环 (F90) 实现 MPI 加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710951/