首先说一下,原文是Chips and Cheese的测试(传送门原文)。
针对这个测试,我也简单的转述和分析一下。
无论是L1、L2,还是L3,他们本质都是现代计算机内存系统中的缓存,他们的功能是通过局部性原理,减少CPU-内存通讯的开销。这些缓存的工作原理是将未来最有可能被访问到的数据,提前从内存中取出暂存,这样当CPU需要访问或者修改的时候,如果数据正好在缓存中,就不必再访问内存。
其实引入缓存其实会降低“CPU到内存”这条通路的性能的。原本访问内存是“CPU-内存”,现在可能是“CPU-缓存-内存”),增加了缓存这个站点,访问路径边长必然会增加CPU到内存的访问开销,更何况还要维护一致性。
但是这对于计算机来说完全不是问题,得益于局部性原理,只要保证引入缓存在总体上的开销小于不引入的开销就可以。
比如说原本“CPU-内存”访问是100ns,引入了缓存后这个“CPU-内存”的访问延长到了120ns,并且“CPU-缓存”的时间是20ns,那么如果保证有90%的时间数据可以直接在缓存中命中,那么(这个例子仅供参考,简化了很多)平均访问的时间期望是:0.9*20+0.1*120=18+12=30,对比原来减少70%的时间。
所以可以很明显的看到,缓存提升性能的重点就在于这个命中率和访问时间的期望。
假设我们刚刚那个例子中,命中率是90%是在缓存大小是64MB的情况下达到的,那么如果我们将缓存提升到128MB且其它不变时,命中率可以提升到95%,那么平均访问期望就是: 0.95*20+0.05*120=19+6=25,减少了1/6的时间。
但是每一类程序需要的缓存大小是不一样的,假设对于另外一个缓存敏感程序中,原本64MB的缓存下命中率只有50%(0.5*20+0.5*120=10+60=70),而128MB下命中提升到70%(0.7*20+0.3*120=14+35=49),那么加缓存的提升就比刚刚的那个例子影响要大。
相应的,对于一个缓存不敏感的程序,假设64MB下命中率已经99%(0.99*20+0.01*120=19.8+1.2=21),那么引入128MB后命中率不可能突破100%,访问期望不可能低于20,自然也就不可能获得大的性能提升。
而且上面这个例子还做了一个理想假设,就是增加缓存后并不会增加访问延迟。但现实情况下,因为使用缓存是一个查询操作,缓存越大则搜索空间越大,要保持同样访问延迟的难度越大。对于AMD Zen这种外挂L3的方案,增加L3基本就意味着访问开销会增加,大缓存反而可能带来访问时间倒退。
比如说,对于刚刚缓存不敏感的程序,64MB翻倍到128MB后缓存操作开销提升1ns,命中率达到99.5%, 其它不变,那么128MB下的访问期望是:(0.995*21+0.005*120=20.9+0.6=21.5),其实比64MB下性能还要差。
另外,缓存是会浪费电的,对于EPYC这种TDP限定的处理器,缓存变大就会挤占其它部分的功耗分配,降低总的运行频率,进一步限制性能。
所以,加大缓存并不能一味的提升性能,特别是当缓存本身已经足够大的情况下。总体而言,对于一个技术时代的产品,缓存只有最合适的大小一说,越大越好这个说法不会一直成立。
因此不用看评测我们就能猜测,对于EPYC 而言,加大缓存不一定代表着【普遍意义】上的性能提升,3D缓存的价值在于那些需要频繁访问内存且命中率还不足的程序中。
下面我们结合Chips and Cheese(下文简称CAC)的测试来验证下上面的理论。
首先,CAC测试了缓存延迟周期,这个是忽略了单核心频率影响的绝对数值,更适合来看这个影响。可以看到加入了3D缓存后,Zen3的L3访问延迟增加了大约3个周期,但是显著降低了访问空间较大时的延迟。
我这里就不放延迟时间的图了,因为AMD的频率策略会干扰测试(单核跑不满TDP,有操作空间),这里AMD应该给了3D Vache版更高的单核频率(虽然参数表上一样),会造成错觉。
如果对比Intel的Icelake SP,大致也会看到缓存大小和缓存延迟的博弈,Icelake的L1更大,但是延迟周期也高了1ns:
除了访问延迟以外,吞吐(带宽)也是缓存系统的一个重要指标。从CAC的测试来看,加入了3D-VCache后,单核心访问L3的带宽提升了25%(依然是每个周期内的数字,忽略了频率影响),
不过情况到了多核访问(1个CCD)时就不一样了,加上了缓存以后,L3的带宽更低了(降低了12.5%),只是说持续的命中时间更长了。而且因为3D VCache的功耗因素,还导致了整体的降频,连带L1 L2的实际访问带宽更低了(下图2是实际带宽),L3则是降低了大约15%,完美的展现了副作用。
最后再来看看和Intel的对比把,Intel的L1 L2缓存带宽那可谓一颗赛艇,不过L3就萎靡了,其实看看Intel的Mesh就知道这个L3带宽上不去的。
最后做一个总结:以上的则是只是对内存系统的测试,实际的程序并不一直在访问内存系统,上述的性能提升不能代表整体的性能提升。
对于实际性能的测试,因为加入了缓存挤占了功耗,这里的测试里可能缓存版的测试实际频率会更低,但是正好可以反映缓存的开销和利益权衡后的结果。
总结下,OpenSSL 实际性能提升7.6%,Gem5编译实际性能提升12.5%,X264编码提升5%,7Zip提升5%,Y-Cruncher慢了1.5%。 所以实际的性能提升在8%附近,考虑到可能的频率倒退,那么这几个测试里的IPC可能大概10%附近吧。
因为这个测试选择不太全,这里的性能数据和IPC数据并不太适用于所有场景,也不太合适正式的说IPC到底提升了多少。这几个测试不算太缓存不敏感,普遍都有提升,但也普遍不算太吃缓存的(吃的可以看AMD PPT)。
但是总的来说,CAC的测试里你可以看到增加缓存带来了一部分场景的性能提升,也带来了一部分场景的性能倒退,也算是印证了理论部分。
偷偷说一句,3D VCache的Milan X对于Intel Xeon也还算是精准差异化竞争,Intel上了Mesh后,Xeon L3的性能是死穴,3D VCache做到了有效打击。
这个问题我替瓜答了
“我来这里的目的是带领曼城取得好成绩,并将曼城塑造成一支豪门球队”
“我知道应该怎么带领球队取得好成绩,也知道如何塑造一支豪门”
“所以我用我的方式管理球队,这不仅仅是对曼城负责,也是对我自己负责”
“我所做的一切事都是为了以上的目的,就这么简单。”
对于竞技体育的从业人员来说,自身的唯一价值就是在比赛中取得胜利。在竞技体育俱乐部里谈政治阴谋太可笑了。对于教练来说,只要不违反法律法规,一切手段争胜的手段都是正当的,当然包括弃用不合自己要求的老将。教练就应该用一切手段争取胜利,这是对俱乐部负责,也是对自己负责,因为不赢,教练就什么都不是。
假如你是个羽毛球运动员,你的老球拍用了10年,突然发现有了更好的新球拍卖。那你就应该毫不犹豫的放弃老球拍,去买新球拍。
在现实社会中换人比换球拍更复杂一些。但道理是一样的。