计算化学公社

标题: 求助:感觉7950X计算效率较低该如何解决? [打印本页]

作者
Author:
Strange    时间: 2023-11-16 19:43
标题: 求助:感觉7950X计算效率较低该如何解决?
为了测试一下自己机器的CPU性能,把一个之前在学校超算节点上跑过的opt freq的任务在自己的机子上跑了一下,结果如下:
学校超算:双路Intel Xeon Gold 6142,Gaussian 16A.03_AVX2, opt用时3956.4s,freq用时 2198.7s
自己的机器:WSL2上跑的,7950X,Gaussian 16C.02_AVX2, opt用时5217.1s,freq用时3350s
从时间上看性能只有学校节点的70%左右,但我从CPU的跑分上看感觉7950X应该没这么差,在计算过程中CPU的使用率也没什么异常,频率也在5Ghz以上。
现在不知道是不是用的WSL的原因,但之前看别的帖子说WSL的性能损失在百分之十几左右,应该没这么夸张。请问这个计算效率低还可能有什么其他的原因吗?或者这个计算性能是正常的?谢谢!
作者
Author:
啊不错的飞过海    时间: 2023-11-16 20:11
多大的任务?多少核并行?
7950X的主要短板在内存带宽,杂化泛函可能时间给HF势长一些,纯泛函任务随规模增大,时间消耗会越来越堆积在对角化上;对角化吃内存带宽比矩阵元生成大得多,可能是这个导致。
不过也不排除是高斯版本间差异,有声音称G16C02是砍了一些向量化指令的,可以搞成相同版本再测测看。
WSL的性能损失比百分之十几要小,套一层HyperV应该是不到10%,基本可以忽略。我个人倾向于是软件/任务原因。
作者
Author:
abin    时间: 2023-11-16 20:38
如果涉及多核心并行,
内存通道数,是重要的影响因素……

作者
Author:
ahxb    时间: 2023-11-16 21:03
跑Gaussian任务的话,对内存带宽的需求可能没那么高。可能问题在于需要对wsl2手动进行线程分配。对于7950X而言,在任务管理器中的详细信息中找到vmmem进程,右键-设置相关性,只选择编号为奇数或偶数的16个CPU,再测试看看速度,直接用%nprocshared=16即可。
作者
Author:
ChemG    时间: 2023-11-16 21:49
那不如找个大家都能测试的文件来跑一下咯,我跑了一下社长博文 http://sobereva.com/653 中测试用到的Gaussian自带的test0397,Gaussian16C.01 AVX2使用相同的关键词 b3lyp/def2svp force scf=novaracc g09default。7950x开启pbo2、32 GB 5600 * 2内存,时间为5min28s。如果看跑分,7950x性能接近双路6124的1.5倍才对啊。
作者
Author:
ChemG    时间: 2023-11-16 21:55
ChemG 发表于 2023-11-16 21:49
那不如找个大家都能测试的文件来跑一下咯,我跑了一下社长博文 http://sobereva.com/653 中测试用到的Gauss ...

忘记说了,在Rocky Linux 8.8系统下运行的。之前对比过win10下使用VMware的Rocky linux8.8,性能确实有明显损失,10%肯定有了。建议直接装linux跑
作者
Author:
Strange    时间: 2023-11-16 23:52
啊不错的飞过海 发表于 2023-11-16 20:11
多大的任务?多少核并行?
7950X的主要短板在内存带宽,杂化泛函可能时间给HF势长一些,纯泛函任务随规模 ...

大概80个原子带个Ru,基组Ru用的SDD,其他6-31G(d,p),泛函用的B3LYP-D3(BJ),我也感觉WSL的性能损失没这么大,不过还不知道倒底是什么导致的……
作者
Author:
Strange    时间: 2023-11-16 23:56
ChemG 发表于 2023-11-16 21:49
那不如找个大家都能测试的文件来跑一下咯,我跑了一下社长博文 http://sobereva.com/653 中测试用到的Gauss ...

测试了一下,没超频,,内存32 GB 6000 * 2,给了高斯48GB(不过感觉都没用完)。用时8min20s,应该是哪里有问题。看别人的测试VM虚拟机的性能损失是挺大的,但WSL的性能损失会小很多(10+%)。我这个不知道是什么原因导致的,实在不行只能装双系统再看看了。
作者
Author:
Strange    时间: 2023-11-16 23:58
ahxb 发表于 2023-11-16 21:03
跑Gaussian任务的话,对内存带宽的需求可能没那么高。可能问题在于需要对wsl2手动进行线程分配。对于7950X ...

看社长的文章,只绑奇数或偶数会导致共用一个物理核心,反而变慢,我试了一下也确实是这个样子的,本来8min的任务跑了10多分钟还没结束,我就提前停掉了。我也试了下绑0-15,用时9min17s,比不绑稍微慢一点点。
作者
Author:
ahxb    时间: 2023-11-17 10:36
本帖最后由 ahxb 于 2023-11-17 10:40 编辑

印象里桌面CPU通常是CPU0和1对应同一个物理核,CPU2和3对应同一个物理核,依次类推。不嫌麻烦的话,你可以自己测试物理核与逻辑核的对应关系。比如可以提交一个用两个核心的任务,分别将wsl绑定到CPU0+CPU1、CPU0+CPU2上,记录其用时。此时有两种情况:(1)两次任务的用时没有显著差别,那么CPU0、CPU1、CPU2分属不同的物理核心;(2)两次任务用时有显著差别,比如CPU0+CPU1的用时显著更长,那么CPU0与CPU1是同一个物理核心的两个超线程。
例如,我在wsl2里用#p b3lyp def2tzvp作为关键词,计算了戊烷(无对称性构象)的单点能,不同绑定情况下的用时为:
CPU0+CPU1:34.5 s
CPU0+CPU2:25.5 s
那么CPU0和CPU1就是同一个物理核心的两个超线程,CPU0和CPU2则是属于两个不同物理核心的超线程。
作者
Author:
Entropy.S.I    时间: 2023-11-17 10:51
尽可能提升内存带宽。对于7950X,AIDA64内存带宽测试,90GB/s是合格线
作者
Author:
啊不错的飞过海    时间: 2023-11-17 11:41
ahxb 发表于 2023-11-17 10:36
印象里桌面CPU通常是CPU0和1对应同一个物理核,CPU2和3对应同一个物理核,依次类推。不嫌麻烦的话,你可以 ...

不是吧,大部分n核应该是0和n是一个、1和n+1是一个这样类推,绑0~(n-1)就可以用满n个物理核心
作者
Author:
啊不错的飞过海    时间: 2023-11-17 11:58
Strange 发表于 2023-11-16 23:58
看社长的文章,只绑奇数或偶数会导致共用一个物理核心,反而变慢,我试了一下也确实是这个样子的,本来8m ...

WSL现在可以绑定物理核心了吗?印象之前设置绑物理核心时,看任务管理器还是会各个CPU地乱跑,不知道怎么回事;内存用量从windows任务管理器只能看wsl的总用量(包括内存和缓存),wsl里开个htop可以看到分任务、分类型的内存使用情况。
八十来个原子用6-31G(d,p)再带一个SDD的Ru,大概两千来个基函数?感觉不应该这么慢呀,不过我好久没用高斯了,印象可能受ORCA影响比较大。
或许也可以用CP2K之类MPI写的程序对比下,高斯我印象是基于共享内存做的并行,可能受核间通信延迟影响更大。
作者
Author:
ahxb    时间: 2023-11-17 13:19
啊不错的飞过海 发表于 2023-11-17 11:41
不是吧,大部分n核应该是0和n是一个、1和n+1是一个这样类推,绑0~(n-1)就可以用满n个物理核心

对我手上的10750H(6核12线程)确实是上面所说的那样
作者
Author:
Strange    时间: 2023-11-17 13:26
Entropy.S.I 发表于 2023-11-17 10:51
尽可能提升内存带宽。对于7950X,AIDA64内存带宽测试,90GB/s是合格线

测试了下读取速度75GB/s,写入78GB/s,是有点慢,而且感觉离6000的内存条的理论性能差距有点大……请问这可能是什么原因导致的呢?
作者
Author:
Strange    时间: 2023-11-17 13:29
啊不错的飞过海 发表于 2023-11-17 11:58
WSL现在可以绑定物理核心了吗?印象之前设置绑物理核心时,看任务管理器还是会各个CPU地乱跑,不知道怎么 ...

我之后安装ORCA再测试下,看看运行效率怎么样
作者
Author:
paramecium86    时间: 2023-11-17 14:29
Strange 发表于 2023-11-16 23:56
测试了一下,没超频,,内存32 GB 6000 * 2,给了高斯48GB(不过感觉都没用完)。用时8min20s,应该是哪里 ...

确实是偏慢。这任务我这7950x在 ubuntu下跑也是5分半左右。跑任务的时候核心频率跑起来了么
作者
Author:
啊不错的飞过海    时间: 2023-11-17 14:36
ahxb 发表于 2023-11-17 13:19
对我手上的10750H(6核12线程)确实是上面所说的那样

怪了,我手上的10875H/5600g都是0n一组这种,windows上没绑过核心不确定
作者
Author:
Kamistry    时间: 2023-11-17 15:13
作为参考i9 13900K 数据是314.9s
B3LYP/def2SVP g09default force SCF=novaracc
link0为%cpu=0-15/2,16-30
%mem=48GB

具体文件在这个贴子3楼   http://bbs.keinsci.com/forum.php ... 3&fromuid=52367
作者
Author:
Strange    时间: 2023-11-19 21:35
就挺神奇的,我尝试了%CPU=0-15和%CPU=0-31,发现前者用时7min30s,后者用时6min1s。当使用所有逻辑核心的时候,性能损失仅有10%左右,比较合理也可以接受。看来WSL在用的时候用上所有逻辑核心反而更好,与实机的linux不太一样
作者
Author:
1009836241    时间: 2023-12-1 11:07
本帖最后由 1009836241 于 2023-12-1 11:11 编辑
Strange 发表于 2023-11-16 23:56
测试了一下,没超频,,内存32 GB 6000 * 2,给了高斯48GB(不过感觉都没用完)。用时8min20s,应该是哪里 ...

你好  我也是7950x wls2 进行计算时只能分配30GB 高于30GB就会报错“galloc:  could not allocate memory.: Cannot allocate memory” 请问一下你是怎么设置分配48GB的 谢谢
作者
Author:
Strange    时间: 2023-12-1 13:28
1009836241 发表于 2023-12-1 11:07
你好  我也是7950x wls2 进行计算时只能分配30GB 高于30GB就会报错“galloc:  could not allocate memory ...

就直接设置的啊……你电脑是64G内存吗?或者你设置了别的什么限制了内存使用?
作者
Author:
1009836241    时间: 2023-12-1 14:52
Strange 发表于 2023-12-1 13:28
就直接设置的啊……你电脑是64G内存吗?或者你设置了别的什么限制了内存使用?

64g 6000
作者
Author:
snljty2    时间: 2023-12-1 14:54
1009836241 发表于 2023-12-1 14:52
64g 6000

free -h显示的什么?
作者
Author:
1009836241    时间: 2023-12-1 15:58
snljty2 发表于 2023-12-1 14:54
free -h显示的什么?

30g 所以我想问一下可以设置变大wsl可以调用的内存 或者就是这样不能更改

作者
Author:
Strange    时间: 2023-12-1 16:29
1009836241 发表于 2023-12-1 15:58
30g 所以我想问一下可以设置变大wsl可以调用的内存 或者就是这样不能更改

肯定是可以改的……甚至我都没有特意设置过什么。你可以去google查一下如何修改,我随便百度了一下:https://blog.csdn.net/qq_41956187/article/details/132921564,看着和你的症状很像
作者
Author:
1009836241    时间: 2023-12-1 17:17
Strange 发表于 2023-12-1 16:29
肯定是可以改的……甚至我都没有特意设置过什么。你可以去google查一下如何修改,我随便百度了一下:http ...

我去试一试




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