求i7-8700k的浮点实测数据
图那丁吧
全部回复
仅看楼主
level 7
哈哈哈哈🐼
楼主
如题,想知道8700k的浮点运算能力和此时的功耗。理论上限(浮点峰值)很容易就能算出来我也不特别关心。
我使用的是openblas循环计算4000*4000的矩阵乘法持续10分钟,记录下每次矩阵乘法使用的时间,取平均值(和中位数差不多)。同时用AIDA64观察功耗。用MKL也行,不会C/FORTRAN的话MATLAB也可以。
2018年06月02日 02点06分
1
level 7
哈哈哈哈🐼
楼主
说错了,我是先根据时间算GFLOPS再取平均(中位数)的。对于nxn的矩阵乘法为2*n^3/计算用时。
2018年06月02日 02点06分
2
level 9
celeron1a
aida好像就能算吧
2018年06月02日 06点06分
3
哈哈哈哈🐼
AIDA给的是理论峰值,我要的是矩阵乘法的实际表现和功耗
2018年06月02日 08点06分
level 13
awpak78
y-cruncher算圆周率是个很好的选择,针对各构架进行优化,完美支持AVX2甚至AVX512,跑起来不亚于Prime95烤机,应该能接近于榨干理论浮点性能。
但是网上这项测试数据较少,不方便对比。
只为了大矩阵乘法你也可以自己写一个发给大家跑,要是能用Intel编译器编译一下就更好了。
2018年06月02日 11点06分
4
哈哈哈哈🐼
一般台式机CPU/GPU的实测浮点都标的矩阵乘法,理论值是可以计算出来的没多大参考意义,好的实现能达到理论值的80%甚至90%以上。矩阵乘法几乎只能用库函数不大可能手写,我手写intrinsic最好也只做到库函数的70%,另AMD上用intel家的编译器和库还不如gcc+开源库。
2018年06月02日 14点06分
哈哈哈哈🐼
@哈哈哈哈🐼
最简单的MATLAB里n=4000;A=rand(n,n);B=rand(n,n);f=@()A*B;timeit(f)就行
2018年06月02日 14点06分
awpak78
@哈哈哈哈🐼
1.2992,不过我觉得它并没有完全使用CPU
2018年06月03日 08点06分
哈哈哈哈🐼
@awpak78
这还是8700K么
,期望值在0.6秒以下……看任务管理器是不是全核心满载。过低版本的matlab也可能因为使用的mkl版本过低速度偏慢。
2018年06月03日 09点06分
level 7
哈哈哈哈🐼
楼主
@awpak78
前面那个MATLAB的是98.5GFLOPS,EIGEN那个是46.5GFLOPS。我在8550U上测试时只有前十几秒比较高,后面就降下来了但一直很稳定而且降的也不太多。所以我倾向于认为这是eigen自身的问题,话说eigen主页上有吹牛的成分,eigen内部其实还是用的intrinsic(基本相当于AVX,SSE指令的inline C语言函数版),而且只做到针对指令集优化,openblas,MKL都是针对架构优化的,openblas在blas层是手撸汇编。所以eigen说自己超过其他库真实性存疑。而且他还用openblas与MKL都已经实现的*axpby这种blas extension说自己功能比其他blas库完整真有点那个啥的感觉。
2018年06月05日 04点06分
5
awpak78
我不是计算机专业的,用Eigen只是因为它Include进去就能用很简单,不支持AVX2这一点性能就会被甩下一大截吧,看它的首页介绍似乎也支持MKL和ICC,具体怎么搞能发挥最大浮点就不清楚了
2018年06月11日 04点06分
哈哈哈哈🐼
@awpak78
intel上单就dgemm函数来看mkl综合起来略优于openblas。AMD平台上只有openblas可选。eigen的表现要实测对比才能下定论。模板的好处是很明显的,问题也很明显,换个平台就得重新编译。mkl,openblas都可以自动识别架构,尤其是mkl识别自家平台比较准。
2018年06月11日 08点06分
level 1
牲口才开电车
我自己用AVX intrinsics写的单精度矩阵乘法kernel,单线程跑到80Gflops,但这只是分块乘法kernel的性能,最终用的sgemm()还有一些其它的开销,比如预先对矩阵转置和分块,整体上只有70Gflops左右
单精度理论峰值的话,这一代架构每个核心2组256位fma单元,每个周期能发射2条256位FMA指令,每条FMA指令算16flop,所以就是2*16*4.7G = 150Gflops
2018年06月10日 08点06分
6
level 1
牲口才开电车
这是我实现的16x16分块乘法kernel的代码:
感觉实际应用中很少有地方能像跑分程序那样发挥出FMA单元60%以上的峰值性能
2018年06月10日 08点06分
7
哈哈哈哈🐼
终于逮到一个也会用intrinsics的了
不过我还是得指出16核的1950x矩阵乘法能达到理论峰值的80%以上,不记得是什么CPU还是GPU能达到90%以上
2018年06月10日 14点06分
牲口才开电车
@哈哈哈哈🐼
Ryzen架构每个核心只有1个FMA处理单元,平均每个clock只要发射一条FMA指令就能达到峰值。而Haswell以后的架构每个核心2组FMA,平均每个clock要发射2条FMA指令才能达到峰值。实际应用中,不可能像跑分程序那样所有的clock都发射fma,必然会有很多load/store,很难接近理论峰值
2018年06月10日 15点06分
哈哈哈哈🐼
@牲口才开电车
因为我这i-7500的AVX频率波动比较大,AIDA64测峰值都在飘,但基本可以确认70%以上。即使是1950x单核减半,核心数是16,四通道带宽也就双通道两倍,照样80%。受带宽影响最大的是level-1的blas函数,level-3的dgemm矩阵乘法影响要小些。
2018年06月10日 15点06分
level 1
牲口才开电车
今天在8700K的平台上编译了下openblas-0.2.20,make TARGET=HASWELL,自己写了个测试,矩阵维度从4x4x4开始,每次翻一倍,直到4096x4096x4096,最高才200GFLOPS,每个核心的效率只有我实现的矩阵乘法的一半
2018年06月10日 10点06分
8
哈哈哈哈🐼
使用openblas时建议看着任务管理器,先调用oepnblas_get_num_threads(),openblas_get_corename()确认线程数和架构识别没出错。最后LDC不能为512的整数倍,因为AMD和inel的处理器都有4k aliasing的问题,你可以简单改成4000而不是用4096。我这4核的i5-7500+openblas都能有180GFLOPS。
2018年06月10日 14点06分
哈哈哈哈🐼
我这说的都是double,但你那个kernel是float。这个也不能从多核倒推单核,因为单核睿频和全核睿频不一样,还有内存带宽和多线程效率的问题,你应该先调用openblas_set_num_threads(1)这样去比单核能力。
2018年06月10日 14点06分
哈哈哈哈🐼
@哈哈哈哈🐼
另外这种测试我都是循环跑10分钟以上,如果GFLOPS-时间图像震荡的一塌糊涂就说明测试代码没调好,结果也要取个平均值,另GFLOPS数值经常会偶然出现断崖式下降。
2018年06月10日 14点06分
牲口才开电车
@哈哈哈哈🐼
num_threads返回的6,但是core_name却显示的NEHALEM,我编译的时候是加了make TARGET=HASWELL的
2018年06月10日 14点06分
level 1
牲口才开电车
我看了下openblas的源码,发现kernel/x86目录下没有实现haswell的gemm
kernel,而kernel/x86_64目录下有haswell的实现,所以我推测之前浮点性能偏低是因为我编译的是32位版本。
刚才又编译了下64位版本,corename终于对了,fp32大矩阵乘法达到600Gflops
2018年06月10日 15点06分
9
哈哈哈哈🐼
1.能试下double么?最好单核的也测试下。科学计算为减小误差麻烦多用double。2.你把矩阵尺寸改成4000看有没有变化
2018年06月10日 15点06分
level 1
牲口才开电车
fp32 gemm:
fp64 gemm:
也监视了CPU,跑单线程时是单核4.7G,跑6线程时是全核4.4G
我实现gemm是为了加速自己造的卷积神经网络轮子,不是科学计算,所以只用到单精度
2018年06月10日 16点06分
10
哈哈哈哈🐼
非常感谢你的实测数据,能否说一下你的CPU散热条件和内存频率,我也在考虑8700K的机器专用于单核的问题。
2018年06月11日 03点06分
牲口才开电车
回复 哈哈哈哈🐼 :cpu散热是240一体水,禁用超线程,avx满载温度<70度,内存双通道3200。其实你如果纯跑科学计算的话,i5 8600K的浮点性能是一样的,性价比更高。
2018年06月11日 04点06分
哈哈哈哈🐼
@牲口才开电车
怕遇到其他奇怪的瓶颈,还是直接8700K省事,反正报销
2018年06月11日 04点06分
哈哈哈哈🐼
@牲口才开电车
贴吧.百度.com/p/5780605789,14楼。方便测试下么?我想看看i7-8700K特征值分解是什么情况。MKL,OpenBLAS的都跑下,谢谢
2018年07月19日 04点07分
level 12
8无心恋战8
請問一下,這種東西為什麼不交給GPU去做啊?
2018年06月11日 02点06分
11
哈哈哈哈🐼
1.CPU编程难度低,需要自己造轮子验证的场合更方便。2.1950X的双精度高于1080TI。
2018年06月11日 03点06分
8无心恋战8
@哈哈哈哈🐼
如果算成本的話,兩塊M2090不是更好嗎?噢~原來是CPU編程比較簡單一點
2018年06月11日 03点06分
哈哈哈哈🐼
@8无心恋战8
编程难度,软件支持,当然现在支持显卡加速的软件也越来越多了。有很多运算在GPU上不能使其发挥全力。游戏卡单精度运算的误差都比CPU大。CPU浮点远不如GPU那是以前的事了。最后专用计算卡不比CPU便宜,就算想插两张计算卡也得16x2的PCIE
2018年06月11日 03点06分
level 5
乐培x🍁😾
我是谁我在那我为什么要点进来
2018年06月11日 15点06分
12
level 8
桐三剑
马克
2018年06月14日 21点06分
13
level 14
德国骨科研究员
大佬
1
2018年07月02日 07点07分
17
1