Performance 对于一个简单的基准测试,是什么导致了不同Zen 1处理器之间的巨大性能差异?
我正在调查三个不同Zen 1处理器之间一个非常简单的基准测试的性能差异,并且我观察到Threadripper和Epyc处理器之间的每周期指令数和二级缓存未命中率存在巨大差异 问题: 在Epyc处理器上,当工作集大小大于最后一级缓存(LLC)时,每周期指令数(IPC)要低得多 为什么同一代Epyc和Threadripper处理器的性能会如此不同 基准 旧套件中的Performance 对于一个简单的基准测试,是什么导致了不同Zen 1处理器之间的巨大性能差异?,performance,caching,cpu-architecture,cpu-cache,amd-processor,Performance,Caching,Cpu Architecture,Cpu Cache,Amd Processor,我正在调查三个不同Zen 1处理器之间一个非常简单的基准测试的性能差异,并且我观察到Threadripper和Epyc处理器之间的每周期指令数和二级缓存未命中率存在巨大差异 问题: 在Epyc处理器上,当工作集大小大于最后一级缓存(LLC)时,每周期指令数(IPC)要低得多 为什么同一代Epyc和Threadripper处理器的性能会如此不同 基准 旧套件中的treeadd基准。源代码作为LLVM测试套件的一部分提供 基准递归地创建一个包含2^N-1个节点的完整二叉树,其中N是输入,并执行10
treeadd
基准。源代码作为LLVM测试套件的一部分提供
基准递归地创建一个包含2^N-1个节点的完整二叉树,其中N是输入,并执行100次遍历,在每个节点上执行只读操作。基准测试是使用几个月前的llvm主干分叉编译的clang
基准测试是一个单线程应用程序运行在单个核心上
测试中的系统
系统1
CPU:Ryzen螺纹裂土器1950x()内存:32GB DDR4 2666
操作系统:Ubuntu 20.04,内核5.4.0 系统2 CPU:Epyc 7601()
内存:128 GB DDR4 2133
操作系统:Ubuntu 20.04,内核5.8.0 系统3 CPU:Epyc 7371()
内存:128 GB DDR4 2133
操作系统:Ubuntu 20.04,内核5.4.48 业绩摘要 当以N=22运行基准时,得到下表。(墙时间、IPC和缓存引用/未命中): 构建了两个二进制文件,一个在Threadripper(TR-bin)上,另一个在Epyc 7601(Epyc-bin)上 无论使用哪种二进制文件,Epyc IPC都比Threadripper上的低很多。挂机时间仅供参考,但由于处理器的频率不同,可能不应直接比较。使用
taskset
将基准测试固定在一个核心上不会产生明显不同的数字
从表面上看,IPC差异是由L2未命中的显著差异造成的
(性能事件二级缓存\u请求\u stat.ls\u rd\u blk\u c
)。这种情况下的一个常见疑点是每个核的L2大小不同。然而,根据文档,所有处理器的每个核心都有相同的512KB二级缓存。此外,我运行了lmbench
,获得了三个系统上的读取延迟,如下图所示
两个螺纹裂土器图表完全相同,便于纵向和横向比较。请注意,“内存墙”的大小大致相同,这进一步表明这些处理器的每个内核的缓存大小相同。另一方面,不同步幅的访问延迟暗示Threadripper可能具有异常有效的预取器。但是,在Threadripper上关闭预回迁器只会使L2未命中率增加一倍(如第一张图所示),而且Epyc机器上的L2未命中率仍然很低
最后,改变工作集大小以测试缓存大小的影响。最后一个图显示了工作集大小变化时的IPC。基准测试被修改为运行1000次迭代,以确保它运行足够长的时间来获得稳定的数字
尽管Epyc机器似乎有8MB LLC(每个CCX有4个核心),但当工作集大小从3MB变为6MB时,性能会下降
运行基准测试的不同方式
除了简单地运行基准测试之外,我还有两种方法
- 使用
将基准固定到特定的核心taskset
- 使用
将基准锁定到特定的核心,并使用numactl
标志使用最接近核心的内存membind
导致IPC差异?所有3个CPU都使用相同的缓存到核心布局:4个核心共享一个8Mb三级缓存,这些CCX之间具有互连。因此,对于单线程工作负载,是的,您实际上拥有一个8MiB三级缓存。从L3到内存控制器的延迟可能会随着芯片的大小而变化,如果ThreadRipper和Epyc的互连之间存在任何定性差异,则IDK。因此,IDK ThreadRipper如何在工作集超过缓存大小时维护IPC。也许不同的硬件预取让它更频繁地隐藏延迟。看起来更快的RAM不太可能带来如此巨大的差异,但是IDK。ECC注册的DIMM(服务器内存)确实有较高的延迟,但您的lmbench结果似乎显示Epyc CPU上的DRAM延迟较低。@当工作集大小超过L3大小时,Peter命令线程裂土器上的IPC下降(1.8到约1.6)。这大约减少了10%。当工作集大小为96时,通过修改MSR关闭预取器确实会对TR(IPC从1.6变为1)产生重大影响,但它仍然没有打开预取器的Epycs那么糟糕。lmbench的结果暗示,当跨距很小时,TR可能有一个好的预取器,这很可能就是我们这里的情况。树节点大小为24字节。但我认为它们是同一个gen处理器,而且它们可能有相同的uarch。