AMD利用自行开发的Zen处理器微架构,规划2组Core Complex合并在一起的IC设计,从服务器EPYC至桌上型Ryzen 3,都是由此晶粒组合或屏蔽部分区块而来。近日正式发售的Ryzen Threadripper为启用2个晶粒的产品,各晶粒自行控制双通道內存,这也带来过去罕见的NUMA架构。 目前Intel和AMD两大x86处理器制造商所推出的最新款HEDT平台,其记忆体模组均可利用4组总线信道达到增加读写频宽目的,不过前者仅使用1组內存控制器支持4组信道,后者使用2组內存各自控制2组信道。虽然最终算出来的理论频宽相同,可是「同款不同师傅」,实际应用上会有些差异。 以Intel代号Skylake-X的处理器为例,其多处理器架构为SMP(Symmetric multiprocessing)对称多处理,也就是每个处理器核心的地位都是相等的,处理器均连结至单一总线(或是类似功能的Crossbar交换机)并共享主要內存资源。这种结构不需要特别变更软体,就能够利用多核多处理器并行处理多个作业,提升整体性能。自从双核心处理器在消费家用市场问世后,这就是你我家中电脑的结构。 ▲当年AMD Athlon X2利用Crossbar将2个处理核心和內存控制器总线串接在一起。 不过这种将各个处理器统一连结至单一总线的结构,容易使得多核心多处理器的数量受限,因为单一总线频宽有限的关系,性能无法跟随核心或是处理器数量等倍数无限成长,反而会因为汇流排过于忙碌,核心或是处理器没有办法获得所需资料或写回运算结果。 「那就增加总线数量吧!」这种简单又暴力的方法早在商业环境行之有年,各位读者们就算没摸过,也应该看过具备2组以上处理器插槽的主机板,由于內存控制器早已整合进入处理器封装当中,也就意味着该主机板拥有与处理器插槽数量相等的內存总线,各自管理与控制对应的內存,处理器插槽之间再以其它形式的总线互通有无。这种架构就可以在增加核心或是处理器数量的同时,也提供同等倍数的总线数量,不怕单一总线被众多存取指令与资料塞爆。 虽然各个处理器封装内的內存控制器各自连结对应的记忆体模组,整体来看还是将所有的內存容量视为1个可以使用的大区块,只是当A处理器插槽内部的处理器核心想要存取B处理器插槽连结的內存时,会有额外的存取延迟,频宽也不会如存取连结至A处理器插槽的內存般快速。处理器核心存取內存空间会因为远近而有不同的速度,这种架构就称为NUMA(Non-Uniform Memory Access)非统一內存存取;而先前连结至单一总线,內存空间存取速度一致的架构,称之为UMA(Uniform Memory Access)统一內存存取。 ▲存取由该Core Complex连结的內存延迟为78ns,存取另一组时为133ns。 回到AMD Ryzen Threadripper的讨论,该处理器内部启用2个晶粒,单一晶粒分别连结双通道四组记忆体模组插槽,合并起来就是四信道八组记忆体模组插槽。由于內存分属不同的总线,所以是NUMA架构,具备2个节点(1组总线所连结的处理器和內存),这在家用市场(或是更精细的说:HEDT市场)可谓首见。 由于NUMA存取不同位置的记忆体会有不同速度的特性,软体(无论是作业系统或是应用程式)必须要特地为NUMA最佳化,才可以提供最佳的运作性能。若是程序运作时需要较大的內存频宽,则需最佳化成Distributed Mode,反之对于內存存取延迟较为敏感,则变更为Local Mode。依据AMD释出的资料,Ryzen Threadripper的Distributed Mode频宽大约多出0.56%~21.65%,Local Mode延迟减少约23.82%。 ▲若是程式运作时对于记忆体延迟较为敏感,需要最佳化成Local Mode。 ▲使用AIDA64实际量测2种不同內存存取模式的频宽和延迟差异。 作业系统部分,家用产品从Microsoft Windows 7开始之后的版本就支持NUMA,Linux kernel则是从2.5版开始提供基础性支持。也就是说现在购买Ryzen Threadripper处理器搭配Windows 10作业系统并没有问题,端看软体应用程式是否针对首次飞入寻常百姓家的NUMA最佳化。 |