计算化学公社
标题: 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
用了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
openmp是要使用openmpi吗?
我用的intel mpi
作者Author: 万里云 时间: 2022-5-2 17:57
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
这叫做选择使用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
如果是 56核心112线程的机器,最好是14进程*4线程或者 28进程*2线程。用多少线程,依据通道数来设置,即内存条的数目。
作者Author: 万里云 时间: 2022-5-4 11:07
应该是进程数等于通道数吧?
进程间不共享数据,线程间共享数据。如果CPU缓存大,共享的数据又不多,可以直接放在缓存里,不走内存通道。
作者Author: SchrodingersCat 时间: 2022-7-29 16:38
请问是指一个晶胞内5000个电子吗?
| 欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |