我们有一个简单的内存吞吐量基准。对于大块内存,它所做的只是重复记忆。
在几台不同的机器上查看结果(针对64位编译),Skylake机器的性能明显优于Broadwell-E,保持OS(Win10-64),处理器速度和RAM速度(DDR4-2133)相同。我们不是说几个百分点,而是一个约2 的因素。 Skylake配置为双通道,Broadwell-E的结果不会因双/三/四通道而异。
为什么会发生这种情况的任何想法?随后的代码在VS2015的Release中编译,并报告完成每个memcpy的平均时间:
64位:Skylake为2.2ms,Broadwell-E为4.5ms
32位:Skylake为2.2ms,Broadwell-E为3.5ms 。
我们可以通过利用多个线程在四通道Broadwell-E构建上获得更大的内存吞吐量,这很不错,但是看到单线程内存访问的这种巨大差异令人沮丧。 有关为何差异如此明显的任何想法?
我们还使用了各种基准测试软件,他们验证了这个简单示例所示的内容 - 单线程内存吞吐量在Skylake上更好。
;:
答案 0 :(得分:8)
现代CPU上的单线程内存带宽受到从L1D到系统其余部分的传输max_concurrency / latency
的限制,而不受DRAM控制器瓶颈的限制。每个内核都有10个线路填充缓冲器(LFB),用于跟踪发往/来自L1D的未完成请求。 (和16"超级"跟踪到/来自L2的线路的条目)。
(更新:实验表明,Skylake可能有12个LFB,高于Broadwell的10个。例如the ZombieLoad paper中的图7,以及其他性能实验,包括@BeeOnRope's testing of multiple store streams)
与四核或双核台式机/笔记本电脑芯片相比,英特尔的多核芯片具有更高的L3 /内存延迟,因此单线程内存带宽实际上是在大型Xeon上更糟糕,即使具有许多线程的最大聚合带宽要好得多。它们在环形总线上有更多跳,它们连接内核,内存控制器和系统代理(PCIe等)。
SKX(Skylake-server / AVX512,包括i9和#34;高端桌面和#34;芯片)真的很糟糕:L3 /内存延迟明显高于Broadwell-E / Broadwell-EP,因此单线程带宽甚至比具有类似核心数的Broadwell更差。 (SKX使用网格而不是环形总线,因为它可以更好地扩展,see this for details on both。但显然新设计中的常数因素是不好的;未来几代可能会有更好的L3带宽/延迟用于中小型核心数量。虽然私有的每核L2上升到1MiB,但L3可能会故意减慢功耗。)
(问题是Skylake-client(SKL),以及后来的Kaby Lake和Coffee Lake等四核/六核桌面/笔记本电脑芯片,仍然使用更简单的环形总线布局。只有服务器芯片发生了变化。但是还不知道Ice Lake客户会做什么。)四核或双核芯片只需要几个线程(特别是如果核心+非核心(L3)时钟高)以使其内存带宽饱和,而具有快速DDR4双通道的Skylake具有相当大的带宽。 / p>
有关此内容的更多信息,请参阅this answer关于x86内存带宽的Latency-bound Platforms部分。 (并阅读memcpy / memset的其他部分,包括SIMD循环与rep movs/rep stos
,以及NT存储与常规RFO存储等等。)
同样相关:What Every Programmer Should Know About Memory?(2017年更新内容仍然如此,以及2007年该优秀文章的变化)。
答案 1 :(得分:2)
我终于开始运行VTune(evalutation)了。它在Broadwell-E上提供了0.602(0到1之间)的DRAM限制分数,在Skylake上提供了.324,其中Broadwell-E延迟的很大一部分来自内存延迟。鉴于记忆棒速度相同(除了Skylake配置的双通道和Broadwell-E中的四通道),我最好的猜测是Skylake中的内存控制器非常好。
这使得购买Broadwell-E架构变得更加艰难,并要求您真正需要额外的核心来考虑它。
我也有L3 / TLB未命中数。在Broadwell-E上,TLB未命中率大约高出20%,L3未命中率大约高出36%。
我不认为这真的是一个答案,为什么"所以我不会这样做,但是我认为我会暂时接触到它。感谢所有有用的评论。