计算化学公社

标题: QE并行效率有点低嘛 [打印本页]

作者
Author:
qchem    时间: 2022-5-2 07:52
标题: QE并行效率有点低嘛
用的https://github.com/QEF/benchmarks上的
small-benchmarks里的para-speedup.sh
机器是双Intel(R) Xeon(R) CPU E5-2680 v3
系统是centos 7.9

intel编译器
test      cpu-time    I/O-time     speed-up

    4       623.29s                  1.00000
    8       424.34s                  1.46885
    12       349.65s                  1.78261
    16       319.95s                  1.94809
    20       305.77s                  2.03843

    24       297.50s                  2.09509



直接yum安装的
test      cpu-time    I/O-time     speed-up

    2      1589.74s                  1.00000
    4       984.00s                  1.61559
    6       841.18s                  1.88989
    8       730.32s                  2.17677
    10       519.54s                  3.05990
    12       467.06s                  3.40372
    14       439.64s                  3.61600
    16       351.33s                  4.52492
    18       316.23s                  5.02716
    20       318.06s                  4.99824
    22       323.97s                  4.90706
    24       320.53s                  4.95972


作者
Author:
gog    时间: 2022-5-2 08:05
有条件的课题组,当然是用vasp。
作者
Author:
abin    时间: 2022-5-2 09:03
没有做调优编译,用了自定义的编译器,
未必能有预编译的二进制版本跑得快……
作者
Author:
qchem    时间: 2022-5-2 15:15
abin 发表于 2022-5-2 09:03
没有做调优编译,用了自定义的编译器,
未必能有预编译的二进制版本跑得快……

用了intel编译器,各种库也加上了的
作者
Author:
chrinide    时间: 2022-5-2 15:37
看你测的是small-benchmarks,核数超过16就基本没有多少加速了。换中等大小的体系测一下,之前测过超过5000电子体系,并行标度直到256核心非常不错的
作者
Author:
万里云    时间: 2022-5-2 16:07
QE有一套并行参数:-nimage -ngroup -ntask,分别对image,k点和fft网格并行。默认是对fft网格并行,也就是把波函数展开系数均分到每个cpu上。数据交换量很大。

建议编译的时候开启openmp,结合-ngroup测试。
作者
Author:
qchem    时间: 2022-5-2 16:20
万里云 发表于 2022-5-2 16:07
QE有一套并行参数:-nimage -ngroup -ntask,分别对image,k点和fft网格并行。默认是对fft网格并行,也就是 ...

openmp是要使用openmpi吗?
我用的intel mpi
作者
Author:
万里云    时间: 2022-5-2 17:57
qchem 发表于 2022-5-2 16:20
openmp是要使用openmpi吗?
我用的intel mpi

openmp无歧义的写法是OpenMP,属于线程级并行。
openmpi无歧义的写法是openMPI,属于进程级并行。
一个MPI进程下可以有n个OpenMP线程,对应的cpu占用就是100%*n。

其实内存带宽相对于进程数是远远不够用的,所以进程一多效率就上不去了。用MPI+OpenMP混合并行,一方面可以降低内存占用,一方面可以提高缓存利用率,把并行效率的上限拉一点点。
作者
Author:
万里云    时间: 2022-5-2 18:02
贴一下我们组开发的一个程序的并行测试结果。一个节点上有16个核,1进程*16线程就是纯粹的OpenMP并行,16进程*1线程就是纯粹的MPI并行。从结果来看,这两种效率都不是最高的。最高的是8进程*2线程。

当然,加节点的效果是最好的。

(, 下载次数 Times of downloads: 51)




作者
Author:
abin    时间: 2022-5-3 09:22
qchem 发表于 2022-5-2 15:15
用了intel编译器,各种库也加上了的

这叫做选择使用Intel 工具链做编译。
和优化编译是两回事请。

mpirin -n N xxx
will invoke 1 MPI rank,

Normally data will not share among MPI ranks.
Therefore data are duplicated, there are N copies of data,
which means more RAM are needed.
You will need more channels to speed up the data exchange.

As a result, for MPI paralleled VASP,
memory channels are very important.

This rule almost stands for all MPI applications,
especially for those with intensive data-exchange.


作者
Author:
gog    时间: 2022-5-4 08:47
万里云 发表于 2022-5-2 18:02
贴一下我们组开发的一个程序的并行测试结果。一个节点上有16个核,1进程*16线程就是纯粹的OpenMP并行,16进 ...

如果是 56核心112线程的机器,最好是14进程*4线程或者 28进程*2线程。用多少线程,依据通道数来设置,即内存条的数目。
作者
Author:
万里云    时间: 2022-5-4 11:07
gog 发表于 2022-5-4 08:47
如果是 56核心112线程的机器,最好是14进程*4线程或者 28进程*2线程。用多少线程,依据通道数来设置,即 ...

应该是进程数等于通道数吧?

进程间不共享数据,线程间共享数据。如果CPU缓存大,共享的数据又不多,可以直接放在缓存里,不走内存通道。
作者
Author:
SchrodingersCat    时间: 2022-7-29 16:38
chrinide 发表于 2022-5-2 15:37
看你测的是small-benchmarks,核数超过16就基本没有多少加速了。换中等大小的体系测一下,之前测过超过5000 ...

请问是指一个晶胞内5000个电子吗?





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3