22级第一次学习任务

22级第一次学习任务

安装OneAPI、HPL与HPCG

安装过程中遇到的问题:

1.磁盘容量不足

解决方法:扩容,扩到了100G

2.安装HPL中遇到

①找不到mpiicc

在这里插入图片描述

解决方法:

①在参考1中发现为环境变量未配置,将其配置

②则为gcc版本问题,将其降为9.5.0即解决问题

HPL优化测试

理论峰值的计算

Linux中CPU信息

liling@liling-virtual-machine:~/桌面$ lscpu
架构: x86_64
CPU 运行模式: 32-bit, 64-bit
Address sizes: 45 bits physical, 48 bits virtual
字节序: Little Endian
CPU: 16
在线 CPU 列表: 0-15
厂商 ID: AuthenticAMD
型号名称: AMD Ryzen 7 6800H with Radeon Graphics
CPU 系列: 25
型号: 68
每个核的线程数: 1
每个座的核数: 4
座: 4
步进: 1
BogoMIPS: 6388.00

具体计算过程

计算公式:CPU峰值浮点计算性能 = CPU核数×CPU频率×每周期执行的浮点操作数

liling@liling-virtual-machine:~/桌面$ cat /proc/cpuinfo |grep MHz | uniq -c
4 cpu MHz : 3194.001

Rpeak=16x 3.2 x (4 + 2 x 8) = 1024GFLOPS

FMA指令集是一种能够同时进行乘法和加法的指令集,每个FMA操作相当于执行了一个乘法和一个加法。
因此,如果将FMA操作视为两个浮点操作,也可以使用8 x 3.2x (4 + 2 x 8) = 512 GFLOPS的公式进行计算。
一般来说,将一个FMA操作视为两个浮点操作更为常见,因为FMA操作实际上相当于执行了两个浮点操作。

对于AMD Ryzen 7 6800X处理器,它的核心数为8,主频为3.2GHz,每个周期可以执行4个浮点操作,同时还支持FMA指令集,每个周期可以执行8个FMA操作。因此,计算公式应该是8x 3.2 x (4 + 2×8) = 512GFLOPS。

关键参数的选择与优化

已将其他参数改为推荐配置

p和Q(1×4最佳)

①在Ns=19200,NB=256的情况下

进程数PQTimeGlops峰值性能
1611624.321.9408e+0218.95%
162821.442.2013e+0221.50%
164421.282.2175e+0221.66%
168228.981.6285e+0215.90%
1616124.121.9562e+0219.10%

意识到不太对劲了,性能有点小啊,开始尝试改CPU核数

Rpeak=8×20×3.2=512Gflops

进程数PQTimeGlops峰值性能
81818.532.5465e+0249.74%
82418.902.4970e+0248.77%
84220.102.3477e+0245.85%
881无欸,竟然不跑又跑了一边4×2的???

Rpeak=4×20×3.2=256Gflops

进程数PQTimeGlops峰值性能
41428.961.6285e+0263.61%
42229.771.5852e+0261.92%
44131.861.4814e+0257.86%

通过尝试对比可至,CPU核数为4最适宜

现在正式测P、Q了

WC10R2C4 19200 128 1 4 27.16 1.7374e+02
WC10R2C8 19200 128 1 4 27.13 1.7394e+02 WC10R2C4 19200 128 2 2 28.10 1.6796e+02
WC10R2C8 19200 128 2 2 28.06 1.6815e+02 WC10R2C4 19200 128 4 1 30.73 1.5356e+02
WC10R2C8 19200 128 4 1 29.89 1.5789e+02

WC10R2C4 19200 180 1 4 26.22 1.8001e+02
WC10R2C8 19200 180 1 4 26.14 1.8053e+02 WC10R2C4 19200 180 2 2 26.89 1.7553e+02
WC10R2C8 19200 180 2 2 26.80 1.7610e+02 WC10R2C4 19200 180 4 1 27.78 1.6988e+02
WC10R2C8 19200 180 4 1 28.18 1.6747e+02

WC10R2C4 19200 256 1 4 26.43 1.7858e+02
WC10R2C8 19200 256 1 4 26.33 1.7926e+02 WC10R2C4 19200 256 2 2 27.87 1.6932e+02
WC10R2C8 19200 256 2 2 27.82 1.6965e+02 WC10R2C4 19200 256 4 1 29.03 1.6254e+02
WC10R2C8 19200 256 4 1 28.89 1.6335e+02

WC10R2C4 9200 128 1 4 3.43 1.5154e+02
WC10R2C8 9200 128 1 4 3.49 1.4898e+02 WC10R2C4 9200 128 2 2 3.64 1.4262e+02
WC10R2C8 9200 128 2 2 3.62 1.4337e+02 WC10R2C4 13440 128 2 2 10.55 1.5338e+02
WC10R2C8 13440 128 2 2 10.49 1.5427e+02 WC10R2C4 13440 128 1 4 10.14 1.5962e+02
WC10R2C8 13440 128 1 4 10.06 1.6089e+02

WC10R2C4 9200 180 1 4 3.44 1.5077e+02
WC10R2C8 9200 180 1 4 3.43 1.5149e+02 WC10R2C4 9200 180 2 2 3.48 1.4921e+02
WC10R2C8 9200 180 2 2 3.44 1.5105e+02 WC10R2C4 13440 180 1 4 10.17 1.5911e+02
WC10R2C8 13440 180 1 4 9.92 1.6316e+02 WC10R2C4 13440 180 2 2 9.96 1.6247e+02
WC10R2C8 13440 180 2 2 10.00 1.6193e+02

WC10R2C4 9200 190 1 4 3.43 1.5137e+02
WC10R2C8 9200 190 1 4 3.48 1.4935e+02 WC10R2C4 9200 190 2 2 3.52 1.4754e+02
WC10R2C8 9200 190 2 2 3.54 1.4651e+02 WC10R2C4 13440 190 1 4 9.90 1.6348e+02
WC10R2C8 13440 190 1 4 10.00 1.6185e+02 WC10R2C4 13440 190 2 2 10.30 1.5713e+02
WC10R2C8 13440 190 2 2 10.36 1.5630e+02

在此浅列几组数据,经过多组实验可证得

P×Q最佳为1×4

N和NB

如果 N 设置得太小会导致低性能表现;一般矩阵占据系统内存80%为最佳。

由此公式,再加上free -b命令在这里插入图片描述

我的最佳N应该是(5051523072*0.8/8)^(1/2)=22476

NB值的选择主要是通过实际测试得到最优值。但NB的选择上还是有一些规律可寻,如: NB不可能太大或太小,一般在256以下;NB × 8一定是Cache line的倍数等;大小几乎总是在 [32 … 256] 区间内;最佳值取决于系统的计算/通信性能比。 通过先小规模抽取、再大规模验证(小规模测试选择3个性能表现不错的 NB,再通过大规模测试验证这些选择)的方法

多次测试 挑出最优数据

GflopsNS=19200NS=22476(理论最佳)NS=26680NS=27000NS=28000
NB=1281.9083e+021.9430e+021.9930e+021.9912e+021.9654e+02
NB=1921.9862e+022.0210e+021.9052e+022.0461e+021.9935e+02
NB=2001.9785e+022.0269e+022.0287e+021.9903e+022.0633e+02
NB=2321.9785e+021.8506e+022.0404e+021.9922e+022.0189e+02
NB=2402.0104e+021.9053e+021.9193e+022.0700e+021.9327e+02
NB=2481.9799e+021.8946e+022.0365e+022.0532e+022.0089e+02
NB=2561.9625e+022.0337e+022.0273e+022.0485e+021.9990e+02

此前已经进行了 NS=9200 10000 13000 等较小数据测算 ,搭配NB=32 64 128 发现数据在13000以下达不到1.80e+02

中途还用了 cat /proc/cpuinfo 看了自己没开超线程

若siblings=cpu cores 不支持超线程或未启用超线程

若siblings>cpu cores 支持并启用超线程

有一次数据跑得超级烂,前一天相同的能跑1.85+,那一次却只能跑1.65左右

用了命令清理了sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches缓存内存,数据果然变好了很多

又通过奥创开了性能增强和独显输出,加上进程实时,数据好看很多,以前较为理想的数据基本都能维持在1.95e+02-2.07e+02之间

最终结果

最后最优组合为

N=27000
NB=240
P×Q=1×4

最优Gflops=80%左右

总结

在后面几天还实验了下WSL,但是由于截至在即,目前最优是在VM中跑出来的,WSL还在调试😉

技术还需磨练与实践,Linux命令还需精进

筛选了部分原数据与优化后的实验数据,附在Excel中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值