集群上并行测试OpenFOAM,并行效率并没有比单节点提升
-
@李东岳
李老师,我是按照单节点64核,双节点128核,以此类推来测试的。目前主要测试的是空腔算例和我自己的LES算例。- 空腔算例:1500万,icoFoam,我是一共运行了100步,平均计算每步运行时间。
一个节点64核心:平均单步19.18s
五个节点320核心:平均单步7.1s
可以看到并行加速比明显未达到预期。我在超算平台上测试过128核心,采用完全相同的计算设置,平均单步6.65s - LES算例,2000万,pisoFoam,同样运行了100个时间步。
这个算例我仅仅测试了256核心和320核心,因为我之前计算的时候采用的就是300核心左右。
我同时测试了每步跑满1000迭代步和最大迭代步设置为100迭代步的情况,以下是具体的数据:
五个节点320核心,最慢平均每步26s,最快平均每步9.2s
四个节点256核心,最慢平均每步29s,最快平均10.5s
作为参考,在超算平台上,同样的算例,336核心,平均每步5s左右。
所以很明显并行测试不达标,主要是因为我们在fluent里测试没有问题,主要问题就在于openFoam,所以目前不知道该怎么解决这个问题。
- 空腔算例:1500万,icoFoam,我是一共运行了100步,平均计算每步运行时间。
-
一个节点64核心:平均单步19.18s
五个节点320核心:平均单步7.1s
所以你期望的是有5倍的scale吧?5节点达到4s左右。
我在超算平台上测试过128核心,采用完全相同的计算设置,平均单步6.65s
这个比不了。硬件不一样。我们这样同样64核的计算速度都不一样。可能他们的CPU更暴力。不能这么比。你只能看你们自己这个机架式,能否达到你的scale预期。
我建议你这么跑,对比总时间,而不是平均每步的时间,比如你把这个表格填一下:
1500万,icoFoam 1节点64核100步,总共 ___ 秒 2节点128核100步,总共 ___ 秒 3节点192核100步,总共 ___ 秒 4节点256核100步,总共 ___ 秒 5节点320核100步,总共 ___ 秒
然后你看一下能否做到scale的线性。同样你还可以测试下:
1500万,icoFoam 1节点32核100步,总共 ___ 秒 2节点64核100步,总共 ___ 秒 3节点96核100步,总共 ___ 秒 4节点128核100步,总共 ___ 秒 5节点160核100步,总共 ___ 秒
看一下能否做到scale的线性。
另外你说的Fluent没问题。是什么没问题,能达到线性的scale,还事什么
-
-genv FI_PROVIDER tcp
这一条表示你指定使用 tcp 网络通信,所以很可能你的节点间通信就没用到 infiniband。
建议先去掉 -genv FI_PROVIDER tcp ,这样mpi应该会默认选择一个可用且最快的选项。如果不行,那么参考
https://www.intel.com/content/www/us/en/develop/documentation/mpi-developer-guide-linux/top/running-applications/fabrics-control/ofi-providers-support.html
这里的说明选择一个跟你硬件匹配的 FI_PROVIDER。 -
@sjlouie91 在 集群上并行测试OpenFOAM,并行效率并没有比单节点提升 中说:
-genv FI_PROVIDER mlx
这个参数我没用过。像 @lzf 说的,你可以试下
dapl
,像 @xpqiu 说的,你可以试下把-genv FI_PROVIDER tcp
去掉。但是有的 mpi 它的 FI_PROVIDER 的默认值是 PSM2,这样的话如果不加参数,单节点并行也无法跑,加上 -genv FI_PROVIDER tcp 或者 -genv FI_PROVIDER shm 就可以正常跑了
还有这样的mpi
-
@李东岳 在 集群上并行测试OpenFOAM,并行效率并没有比单节点提升 中说:
估计他就是双倍来了
那就是相对速度了,自己跟自己比
@sjlouie91 这个:https://www.top500.org/project/linpack/ 专门测超算性能的。但是流体计算的效率,影响因素太多。用李老师网站上大家都用的算例比对更容易找着对比点。
还有一个方法,开始计算后观察系统各项指标,看看哪个满负荷,哪个就是瓶颈。https://github.com/cjbassi/gotop 这个是终端界面的系统监视器。看看运行算例的时候是 CPU ,还是硬盘读写,还是网络通信,还是内存是爆满的。可以对比 fluent 运行的时候的不同。找到瓶颈后再排查比较有目标。