提到“胶水CPU”这个老梗,很多人会回想起当年臭名昭著的英特尔奔腾D。
2005年,AMD率先推出了真正原生双核的速龙64X2,英特尔仓促应战推出了奔腾D,初代把两个单核Prescott奔腾4集成在同一块硅片上,第二代更是直接将两核心分列。
但两颗核心缓存互相隔离、交换数据不能在CPU内部完成,数据必须跑出芯片、经过主板前端总线和北桥中转,跨核心延迟动辄上百纳秒,还会和内存、显卡及其他设备抢总线带宽。一旦多任务负载上来,总线拥堵,延迟会暴涨,从一百纳秒直接冲到二三百纳秒。此外,高温高功耗,“CPU能煎蛋”的问题也十分突出。“胶水双核”奔腾D的性能被速龙64X2压制了长达14个月,直到酷睿2 Conroe(E6000系列)登场,英特尔才靠全新Core架构扳回局面。
今天,如果你买了一颗AMD锐龙9——不管是7900X还是9950X3D,当初没选锐龙7而选它们,大概率就是看中了核心数量更多。毕竟,只要你的电脑不是只用来打游戏,12核的7900X、16核的9950X3D,多任务处理的表现明显比8核处理器强大得多。
从外表看,这些CPU就是一个方方正正的整块封装;但你要是把它的散热顶盖撬开(千万别真拆啊),就会发现这十几个核心根本不是排布在同一块硅片上的。AMD是把它们拆成了两颗芯片来做,被称为“计算芯粒”,也就是常说的CCD(Core Complex Die)。
所以像16核的9950X,就是每颗CCD上各放8个核心;12核的7900X,则是每颗CCD里屏蔽掉2个,实际能用的两边各剩6个。每颗CCD都带自己独立的三级缓存,两颗之间靠一颗单独的I/O管芯,走AMD自家的“无限互连”(Infinity Fabric)高速总线来通信。
也正因如此,有人也把锐龙9戏称为新一代“胶水双核”——当然,千万不要把它跟当年的奔腾D同日而语,锐龙9 的双CCD方案,虽然两颗CCD也不会直接对话,通信要经由I/O芯粒中转,但全部交互都在CPU封装内部完成,Infinity Fabric高速总线让跨CCD 延迟仅几十纳秒,损耗远比奔腾D可控。
但是,别看Windows 11把这些核心都识别为同一颗CPU来管理,在大型3A游戏里还是能感觉到差别的,尤其是当任务负载在两颗CCD之间来回跳的时候。
跨CCD调度会带来额外延迟
游戏对这一点格外敏感
把核心拆在两颗CCD里,听着好像不是什么大事,毕竟在CPU内部解决,比奔腾D绕一大圈子的速度要快得多,但问题就出在:毕竟是两颗CCD,二者之间通信总要花额外时间的。举个例子:跑在第一颗CCD上的游戏线程,要跟第二颗CCD上的任务打交道,数据就得绕一圈,穿过无限互连总线、经过I/O管芯,才能到对面那颗CCD。反过来,如果把所有游戏线程都限制在同一颗CCD里跑,互相通信就不用绕远路,自然也就没这额外的延迟。
再加上每颗CCD都有自己独立的三级缓存,这个问题就更明显了。同一颗CCD里的核心,能直接用本CCD共享的三级缓存;但要去另一颗CCD的缓存里取数据,就得再过一遍无限互连总线,又多一层延迟。
大型3A游戏对这种延迟特别敏感,毕竟为了渲染下一帧,CPU得不停读数据、在好几个线程之间协调调度。别看都是纳秒级的零碎延迟,一旦游戏吃CPU性能,甚至遇到CPU瓶颈的时候,这些小延迟堆起来,影响其实不小。
Windows 11会尽量把游戏进程绑定在单颗CCD上
AMD芯片组驱动也会配合
别看Windows 11把锐龙9当成单颗CPU来识别,它对AMD的这种双芯拼接的结构其实非常清楚。系统的线程调度器认得清CPU的拓扑结构,分配游戏线程的时候,不会把所有核心都当成通用单元。
这几年AMD的芯片组驱动也一直在优化,帮着Windows把调度做得更合理。物理层面的延迟肯定是消不掉的,但至少能不让游戏线程在两颗CCD之间瞎跳,做无用功。
至于7950X3D、9950X3D、7900X3D、9900X3D这种双CCD的X3D处理器——注意:只有其中一颗CCD堆叠了原生32MB L3和64MB 3D V-Cache,另一颗CCD只有32MB L3,没有堆叠额外缓存,这就叫“非对称双CCD设计”。所以,游戏肯定是跑在带3D V-Cache的那颗CCD上效果最好,额外的大缓存对游戏提升最明显。另一颗CCD因为没有额外缓存,散热压力小,能跑到更高的主频,更适合吃频率的工作负载。
在这方面,Windows 11调度得较好,AMD的驱动会跟Windows配合,靠游戏模式(Game Mode)识别出游戏进程,自动把它往带3D缓存的CCD上引,合适的时候还会把另一颗无缓存CCD的核心做停车处理,直接让它处在深度休眠低功耗状态,从根源上杜绝跨CCD调度的开销。当然,核心停车这功能以前坑不少,但AMD后来一直在更驱动、调机制,现在已经稳多了。只要一切正常工作,你根本不用操心游戏到底跑在哪颗CCD上。
但是,Windows 10调度器太老了,根本区分不了两颗CCD的缓存差异,它只看核心分组,分不清哪颗CCD有超大3D缓存、哪颗是高频普通CCD。所以,Windows 10跑X3D双CCD 处理器时,游戏线程有可能随机落到高频无3D缓存的CCD,游戏性能会受损。而普通非X3D双CCD锐龙(7900X、9950X)Windows 10的表现就正常很多。所以,最好不要用Windows 10来跑X3D处理器——除非你一个个手动绑定游戏进程!
绝大多数游戏用不上第二颗CCD
AMD说8核9850X3D是自家最强游戏U,真不是乱讲
这些年,游戏对多核的利用率确实越来越高,但多核带来的性能提升,终究会碰到边际收益递减的坎。只要核心数够撑起游戏加后台的全部负载,再多塞八个核心,帧率也未必能再涨一截。这也是为什么像9850X3D这种8核CPU,至今还能霸着游戏性能榜的榜首。在核心够用之后,给核心配上更大的缓存,提升比增加核心要实在得多。
话说回来,9850X3D这种8核CPU还有个天然优势:八个核心全在单颗CCD上,游戏负载从根上就没机会溢到第二颗CCD去。这也就能解释了,为什么有些游戏里,把双CCD锐龙的第二颗CCD关掉,性能反而更好。
我自己用5900X的时候就亲测过:在BIOS里禁用第二颗CCD之后,《战地2042》的帧率确实更高了。但这么屏蔽后,实际就等于在用一颗6核CPU,换了别的游戏或者其他吃多核性能的应用,性能反而会掉。所以这根本不是什么万能药方,我不建议大家随便这么弄。
双CCD其实没有任何问题
不必为了这点性能损耗而舍弃锐龙9
说了这么多,绝对不是劝你因为双CCD这点性能损耗,就不买12核、16核的锐龙9了。
跨CCD的延迟确实是客观存在的,个别游戏里关了第二颗CCD也确实能提帧,但这不代表它整体游戏性能就不行。翻翻各类CPU游戏跑分榜就知道,9950X3D和9800X3D同样都在第一梯队。
如果你电脑不只是打游戏,那多出来的这些核心,在渲染、剪视频、直播这类吃多线程的重负载中,提升可要大太多了。要我选的话,永远是选游戏和生产力两头都能打的,而不是只在游戏上拔尖的偏科生。
热门跟贴