PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

自测不同优化下的内存带宽需求(5200u内存与4570R四缓)

[复制链接]
chungexcy 发表于 2015-12-3 13:58 | 显示全部楼层 |阅读模式
点击数:7759|回复数:14
本帖最后由 chungexcy 于 2015-12-5 12:57 编辑

5日增加 i5 4570R L4 128MB 的四缓带宽测试。

测得L4在 4570r(主频3.0g,ring 2.7g)下,最大带宽为42.67GB。小于L4自身的50GB,ring限制了。(网上4770R ring 3.2g能达到50gb)。



=============================================

今天没事测了一下不同程序对内存 浮点带宽的测试。

测试硬件是5200u,2x8g 1600MHz CL11双通道内存。
关闭睿频,在2.2g,1.6g,0.8g下,分别试了一下单线程,双线程,四线程能用到多少内存带宽。

测试方法采用不同的矩阵乘法优化。
⒈ 起关键作用的内存大约为13M,大于三级缓存的两倍就够了。每项测试成绩相当于重复13M的读取和计算,共2560次的时间来换算。
⒉ 其中的绝大部分计算,就是读一次内存,做一次乘法,再做一次加法,不断重复而已、。不要看内存操作只占1/3,这样效率其实已经很低了,我这里只是为了测试内存故意这样做的。实际情况下,对内存操作一般小于这个比例很多。如果为了优化这个程序,性能还能翻7倍(让一缓都不成为瓶颈),不过这就不是测试内存了。
⒊ 我还用了不同的指令集来加速计算部分(乘法和加法),以及看看cpu的指令层面的并行能力和超线程能力。结论挺有趣的。
⒋ 虽然与这个测试无关,但提一下还可以通过控制数据量大小,测试不同的缓存性能。试过了和aida64的结果差不多。

一、单线程下的内存带宽。

这里试了无SIMD加速(Native),SSE,AVX,FMA。其中4路简单理解为:告诉CPU可以进行乱序并发。

1. 先说单线程下的内存带宽:

在Native下,带宽只有5.5g,而如果采用sse或者avx,就能大幅提高运行效率。当内存带宽不是瓶颈时,比如cpu低频状态,sse是native的4倍。带宽基本和频率成正比,因为现在还没到内存带宽上限。

2. 看一下测试结果:
2.2g

1.6g和0.8g
<->

说一下在Native和4路Native,瓶颈在cpu。
比如4路Native 的SIMD boost = 1.256,代表CPU一个周期内,做了0.628次的加法和0.628次的乘法,再加上没算进去的0.628次内存读取。这样算下来一个周期CPU就做了1.884次操作。这就是CPU所谓的超标量。


二、对比一下不同线程下的利用率。
由于我用的是双核四线程,我分别在2.2g,1.6g,0.8g下,测试了单线程,双线程,四线程。只保留了Native、4路Native、SSE、AVX的结果。每组连续4次,取中间两次为有效结果,因为我同时开有点时间差,就多加前后两次消去影响。(见后面)

结论如下


1. 先说一下带宽。
2.2g下,双线程最多用到了21.2g的带宽,和aida64基本一致,所以我认为我的测试没有问题。1.6g也有18.46G带宽。0.8g最大就只有10.4g了。4线程下,如果已经到了瓶颈,多余的线程反而会有所拖累。


2. 再说一下SIMD。
关于不同的优化的差距这一点。如果没有用上SIMD,内存是很难成为瓶颈的。用上了SIMD以后,CPU的执行时间大幅减少,而数据读取的需求基本不变,所以内存带宽一下就上来了,即使是单线程,也能用到16g,现在已经有点瓶颈了,如果CPU频率不是2.2这么低,甚至有可能一个线程就占满带宽,这样多线程根本不会带来太大提升。

3. 最后说一下超线程。
如果已经饱和,超线程是没作用的;如果CPU空闲很大,超线程提升非常可观。

单路Native 单线程:SIMD 0.665     -> IPC: 0.998
单路Native 超线程:SIMD 0.644 *2 -> IPC: 1.932

四路Native 单线程:SIMD 1.28       -> IPC: 1.92
四路Native 超线程:SIMD 0.644 *2 -> IPC: 1.933

三、最后只是再帖一下完整的测试数据,结论之前已经解读了。有兴趣的倒是可以一看。
单线程:
2.2

1.6

0.8


双线程
2.2g

1.6g

0.8g


四线程
2.2g

1.6g

0.8g


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
McLaren 发表于 2015-12-3 14:38 | 显示全部楼层
超线程是利用闲置,都忙着没工夫管他自然没什么提升
royalk 发表于 2015-12-3 14:39 | 显示全部楼层
HSW之后的貌似瓶颈在ring频率上,AIDA64内存测试的优化基本已经OK,双通道2.2G的ring频宽是已经足够喂饱DDR3,如果主频能跑到4G+的话,可以配合内存频率再多试几段,看看能不能类似HSW-E一样找出一个理论带宽瓶颈线性关系。
chungexcy  楼主| 发表于 2015-12-3 14:46 | 显示全部楼层
McLaren 发表于 2015-12-3 14:38
超线程是利用闲置,都忙着没工夫管他自然没什么提升

嗯,不过有时候你觉得CPU已经忙不过来了,但事实上并没有,结果发现超线程还能带来了额外10%的提升。比如内存不是瓶颈的情况。

chungexcy  楼主| 发表于 2015-12-3 15:04 | 显示全部楼层
royalk 发表于 2015-12-3 14:39
HSW之后的貌似瓶颈在ring频率上,AIDA64内存测试的优化基本已经OK,双通道2.2G的ring频宽是已经足够喂饱DDR ...

aida64是黑盒,所以我就那之前的一个测试改了改测带宽。
至于ring 和内存的关系我还是没搞清楚,ring是三缓与内存之间的关系,还是三缓与二缓之间的关系?是不是有什么直接计算的公式?
其实我想如果我有4核,还可以看看低频下能不能再多用一点内存带宽。

royalk 发表于 2015-12-3 15:19 | 显示全部楼层
chungexcy 发表于 2015-12-3 15:04
aida64是黑盒,所以我就那之前的一个测试改了改测带宽。
至于ring 和内存的关系我还是没搞清楚,ring是三 ...

L3和ring是同频,ring是连接core(L2)和L3的总线。

四核的话,写入区别不大,因为25000左右已经接近双通道D3-1600上限,读取复制貌似会有点变化。
chungexcy  楼主| 发表于 2015-12-3 15:51 | 显示全部楼层
royalk 发表于 2015-12-3 15:19
L3和ring是同频,ring是连接core(L2)和L3的总线。

四核的话,写入区别不大,因为25000左右已经接近双 ...

看来即使不看内存,ring还是影响l3内数据的性能。
overthink 发表于 2015-12-3 15:55 | 显示全部楼层
2C4T竟然还有降低? 4C4T是不是会有提高呢?
chungexcy  楼主| 发表于 2015-12-3 16:03 | 显示全部楼层
本帖最后由 chungexcy 于 2015-12-3 16:07 编辑
overthink 发表于 2015-12-3 15:55
2C4T竟然还有降低? 4C4T是不是会有提高呢?

超线程确实可能降低,有一个词叫过载不知道这样形容恰不恰当。不过我认为4核比2核就算没提升都应该不至于降低。
实际情况下我也见过。比如之前那个waifu2x的后续一个大幅优化的版本。我在broadwell上,FMA超线程有10%的提升。而Sandy Bridge,AVX超线程反而造成了6%的性能下降。。。

royalk 发表于 2015-12-3 16:40 | 显示全部楼层
chungexcy 发表于 2015-12-3 15:51
看来即使不看内存,ring还是影响l3内数据的性能。

影响的,调整ring频率,AIDA64中的L3速度可以测出不同值来
chungexcy  楼主| 发表于 2015-12-5 13:04 | 显示全部楼层
royalk 发表于 2015-12-3 14:39
HSW之后的貌似瓶颈在ring频率上,AIDA64内存测试的优化基本已经OK,双通道2.2G的ring频宽是已经足够喂饱DDR ...

试了一下那个带4缓的4570r,2.7g的ring,最大能跑到42.67gb。这样算下来hsw-e的L3连接四通道的效率还要好一些?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
royalk 发表于 2015-12-5 14:36 | 显示全部楼层
chungexcy 发表于 2015-12-5 13:04
试了一下那个带4缓的4570r,2.7g的ring,最大能跑到42.67gb。这样算下来hsw-e的L3连接四通道的效率还要好 ...

好像不见得,hsw-e四通道写入被卡在ring频率MHz/62.5,也就是说4GHz的ring,最大写入值就是4000/62.5=64GB/s
chungexcy  楼主| 发表于 2015-12-5 15:06 | 显示全部楼层
本帖最后由 chungexcy 于 2015-12-5 15:09 编辑
royalk 发表于 2015-12-5 14:36
好像不见得,hsw-e四通道写入被卡在ring频率MHz/62.5,也就是说4GHz的ring,最大写入值就是4000/62.5=64G ...

我这里测试的是读取性能,推算写入应该要更差一些。HSW-E的读取性能算出来要强一些。

网上的4770r 和 4980hq
<->

royalk 发表于 2015-12-5 15:32 | 显示全部楼层
chungexcy 发表于 2015-12-5 15:06
我这里测试的是读取性能,推算写入应该要更差一些。HSW-E的读取性能算出来要强一些。

网上的4770r 和 498 ...

读取也受ring影响,但是影响好像没那么大。

图1是固定CPU/Ring频率,调整内存频率。而且四通道平台内存性能,尤其是读取,明显受核心数(其实应该是L3缓存容量)影响,而双通道影响就没那么大。


图二是固定内存频率,调整ring频率

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
chungexcy  楼主| 发表于 2015-12-5 16:45 发自PCEVA移动客户端 | 显示全部楼层
本帖最后由 chungexcy 于 2015-12-5 16:51 编辑
royalk 发表于 2015-12-5 15:32
读取也受ring影响,但是影响好像没那么大。

图1是固定CPU/Ring频率,调整内存频率。而且四通道平台内存性 ...


如果按照我测得的42.7-2.7g ring 换算4.0g,结果也只有63.3。当然这只是一个非常粗略的估算。

从我的测试来看,核心数目确实有关系,比如我用三线程sse的结果大概记得是37-38g左右。但在单线程轻松用掉18g带宽,以及后续线程增加带来的带宽增加越来越少的结果下,这个幅度不会太大。不过如果按照我测得的增长趋势推算8核(~81.4),大约就能到3200的四通道了。

我不认为是缓存大小造成的区别,而是线程多了把空闲部分挤出来了。作为循环内存读测试,只要数据量大于两倍的缓存,理论上就和缓存大小无关了,因为数据永远是新的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部