最近讨论比较热门的话题,Win10没有正确识别Ryzen的SMT设计,导致问题。
今天专门实测了一下,并且和其他CPU加以对比。
首先是Ryzen在Win10下的测试,FritzChess
8线程,15321
2线程,4545
线程分配无任何规律,16个核心胡乱分配。
我准备截图保存,但是死机了。。。。跑测试不死机,开个画图竟然死了。
Ryzen在Win7下的表现
首先说明,Win7把Ryzen识别为普通超线程CPU,使用SMT调度
SMT调度下,不能手动把Fritz的线程强行分配到同一个核心的两个超线程单元,会得到极端异常的结果(只有几百分)。
下面的测试都是2线程物理核心,恩,两个线程,方便分析。
自动,4919
手动分配到第一个CCX,4930
手动分配到第二个CCX,4945
手动把两个线程分别放在各自CCX,4895
反复测试多次,排除误差影响,数据可信。
第一个CCX成绩偏低是因为Win7系统自身的一些小任务会占用核心0 1 2 3,消耗少量内存带宽。
即使我手动分配在 4 5 6 7 ,也会影响性能。
跨CCX成绩最低,可见互联带宽确实不足,也可以说单个CCX内存带宽已经足够FritzChess使用。
双路Opteron 6276
Opteron 6276本身是胶水设计,每个封装内部有两个芯片。
两颗6276组成的系统,实际上是4颗Opteron MP通过HyperTransport互联,每个节点双通道内存,4节点,8通道内存,16模块,32核心。
Win7没有识别MP节点(4节点NUMA),但正确识别了模块化设计,按照SMT调度执行,避免同一个模块的两个核心同时加载。
自动,3424
手动分配在一个节点,3224
手动跨CPU封装,3439
我的分析是,单个节点内存带宽不足,影响了性能发挥,所以Win7不开启NUMA也是对的。
跨节点使用,虽然HyperTransport会造成延迟,但内存带宽提升带来的优势更大。
双路Xeon X5650
Win7针对这样的配置完全优化,同时开启NUMA和SMT调度,2节点,12核心,24线程。
有相关性的线程会被优先安排在同一个NUMA节点,避免QPI互联传输。
自动,4419
手动同NUMA节点,4514
手动异NUMA节点,4427
可见核心数量非常多以后,系统的自动调度并不能实现最佳性能,即使系统完全识别CPU并开启了对应策略,依旧不如手动固定核心运行。
自动调度会让线程频繁在核心之间切换,损失性能。
双路Xeon E5430
E5430是771时代的胶水CPU,系统结构非常复杂。
5100北桥芯片有两根1333MHz FSB分别连接到两个CPU封装。
每个CPU封装内部是两颗酷睿2芯片共享FSB,同芯片两个核心共享6MB二级缓存,每个封装2芯片4核心12MB二级缓存,整个系统8核心24MB二级缓存。
Win7对于这样的系统不会开启任何优化,因为它是UMA统一内存结构,也没有SMT。
自动,3895
手动分配在同芯片,3915
手动分配在同封装异芯片,3868
手动分配在异封装异芯片,3856
可见异封装异芯片的性能最低,这也很容易理解,因为互联数据需要绕道北桥芯片,延迟最高。
希望能够对各位分析Ryzen的线程分配与互联提供参考。
|
评分
-
查看全部评分
|