摘要:最近在学习使用HPL测试机器的浮点性能,遇到一些错误的时候在网上搜索资料,偶然间发现了这么一篇文章,下图是部分截图。
原作者:pp酱_ppchan
编辑于 2025年01月15日 21:53
最近在学习使用HPL测试机器的浮点性能,遇到一些错误的时候在网上搜索资料,偶然间发现了这么一篇文章,下图是部分截图。
某文章的截图
只能说这张表格有点儿意思,让我来评价啰嗦一番(你有什么资格评论?你有资质吗??)
什么是PST?什么是HPL?
PST全称Phoronix Test Suite,是一个开源、自动的测试化套件,而HPL是High Performance Linpack,用于在分布式存储计算机上以双精度(64 位)算法解决(随机)密集线性系统。
这个表格有什么问题?
1、PTS测试套件的HPL标注了自动生成的HPL.dat是实验性质的,直接拿来用不合适吧?
HPL.dat配置文件关系到测试成绩,关键参数:N, NB, P, Q。
N的大小与内存相关,N越大,分数越高,但相应内存也占用越大,一般设置为全部内存的80%以上;NB的分块,越小负载平衡越好,但是会限制性能,一般256以下;P,Q对应行数和列数,它的大小和核心数有关,乘积=CPU数量。这些参数设置不合理,跑出的成绩可差距很大。
2、PTS里面的HPL调度有时候不太行。
例如在双模块四线程老APU上的,会默认分配两个线程(P=1 Q=2,合理,毕竟只有两个浮点单元),但它却把两个线程放在同一个模块上的两个核心来运行,就会造成结果严重偏低,甚至低于单线程。只能通过手动指定核心,让两个线程在不同的模块上。
在ARM平台,由于簇的不同,甚至出现8核心还不如4核心的情况。
支持超线程的平台关闭超线程还会带来提升。
测试结果还关系到指令集,SSE4,AVX/AVX2,AVX512,这几个处理起FP64可不一样。不手工优化一些机器跑不出真实水平。
3、表中的R5 5600G水平严重偏低
理论峰值水平:核心数X频率X每个内核每个时钟周期的浮点运算次数
这个每周期操作数网上可查,关键词:“Floating point operations per clock cycle per core”
牢英
牢A
那么AMD R5 5600G的峰值浮点(FP64)是多少呢?按照给出的4.2GHz来算
6x4.2x16 = 403.2 GFLOPS
表中给的不到76真的很有问题,就算是再怎么拉也不至于这么拉。
Haswell的E3 1220 V3都能跑到 146GFLOPS,它的理论峰值(有睿频,但是AVX负载下只有3.1GHz)为198.4GFLOPS,它的效率为74%。
下面是测试的截图,结果为145.5GFLOPS。
难道6核心的5600G还不如四核心的1220V3?
Github上有位老哥测试的3.7G下的5600x的成绩(偏低),作为兄弟的5600G怎么也不至于是两位数吧。地址:https://github.com/geerlingguy/top500-benchmark?tab=readme-ov-file#results
4、我既没有5600G也没有3A5000,只能说怀疑这个分数不正常。
我测试过3A3000@1.45G,它的单线程为4.99GFLOPS,多线程为16.27GFLOPS。这不是最优,官方宣传峰值性能为24GFLOPS@1.5GHz,我这个频率低点,为23.3,单线程跑到了理论的86%,多线程为70%,算是不错了。
24GFLOPS可不是我瞎说的嗷,白皮书上写着呢。
按照下面官网的数据,如果是完整的256位浮点单元的话(特殊的参考zen1),一周期内可以操作16个FP64,那么3A5000的理论峰值为4x2.5x16,也就是160GFLOPS,如果对标3A3000的多线程效率,多线程结果得112GFLOPS,实际测试看第一张图吧,不到55,也太低了吧。
在测试中发现的一些影响测试成绩的因素
硬件层面:内存频率、通道数、CPU散热和供电
软件层面:系统调度(ondemend、performance、powersave等)、Boost开关
一些命令
PTS运行HPL:phoronix-test-suite benchmark hpl
PTS套件里面的HPL执行文件和配置文件的路径(手动执行时需要):
Debian下:/var/lib/phoronix-test-suite/installed-tests/pts/hpl-1.0.0/hpl-2.3/testing
Ubuntu下:./home/[USER]/.phoronix-test-suite/installed-tests/pts/hpl-1.0.0/hpl-2.3/testing
测试单核心:设置p,q均为1,最好直接绑定到一个物理核心上,在上面的路径下执行下面命令。
mpirun --allow-run-as-root -np 1 taskset -c 0 ./xhpl
这里面taskset -c 0,表示让xhpl运行在第一个核心上。
以上就是一点小小的看法,毕竟原作者很多细节没提,也不好说这成绩是怎么来的。
我也是刚接触不久,写得东西难免会有些问题。之前那版有些地方不太合适,而且还卡审核了,重新编编辑发上来。
PS:
你这也就是只发了文章没出视频还卡审核了,不然龙芯圈KPI就要来干你了
为了以防万一我先把全文备份了
来源:失传技术研究所