从双核到四核,AMD与Intel的竞争不断升级,新品迭出,技术更新频率不断加快。而多核之路并非一条:是做一个不断追求技术完美的狂热拥趸,
还是更多着眼于快速商业化?也许从技术上来看,最后的结局不过是殊途同归。但是,对于这两个企业而言,在这场拉锯战中,谁又会笑到最后?
AMD的四核终于来了
说起芯片市场,再没有比AMD与Intel之争更热闹的了。虽然 AMD在双核处理器的发布上占了先,四核处理器却落后了对手将近1年的时间。就在它发布Barcelona的前几天,Intel还发布了MP系列的四核产品,颇有示威的意味。其实,Intel大可不必如此——它在四核之战上已然占据了先机。根据数据,出货已经半年的Intel四核产品总量超过100万颗,而那时,AMD的Barcelona还停留在样品阶段。不过,在很多行内人看来,AMD错失良机的原因是过于执著——为了践行自己的原生多核概念,错过了通过拼接两个双核构成四核处理器的机会,结果,把好不容易抢来的、在双核上的领先旗帜拱手让给了Intel。
从这点上来说,AMD陷入了自己的死胡同。本来,是否原生牵扯的恐怕主要不是技术问题,而是成本问题。虽然在技术上,需要对拼接的四核产品进行一定的改进才能够做成原生的四核产品,但是否原生其实早已经不重要,通过平台设计完全可以巧妙规避拼接带来的一些问题,而拼接在成本上的优势却是原生四核产品远远无法比拟的。
AMD一再延迟推出四核产品的原因很多,一方面是技术上还不够成熟,另外一方面也是制造方面的瓶颈,成品率不够高。
四核需要大幅度降低处理器的尺寸,不得已只能拿缓存开刀,在Intel大幅度增加缓存的时候,AMD似乎还是原地踏步,二级缓存每个核心只有512KB,三级缓存也只有2MB。笔者认为,并非AMD不想增加二级缓存,也并非它做不到,如果把所有的缓存倍增,Barcelona也能够生产出来,但是会付出巨大的成本代价,这样生产出来的产品没有几个人买得起。而且,Barcelona内核之间是直接连接的,这些链路让多核设计变得复杂,不得不考虑牺牲一些缓存来保证整个处理器在工程上可行。
于是,我们看到,AMD在处理器互联方面,采取了一种比较折衷的方案,通过环状网络将四个核联系起来,因而所有核只有跟自己临近的核才可能有直接连接,跳过一个核心就面临数据通信的仲裁问题,内核之间的连接反而成为掣肘。因而,通过添加三级缓存来缓解这个问题,未尝不是一个聪明的办法。就以Barcelona的结构来看,没有三级缓存,所谓的原生四核也就如同空中楼阁一样毫无意义。那就是说,四个邻居虽然在一层楼上,但是却老死不能往来,通行都需要下到地面再坐电梯上来,岂不谬乎?
就此,最近有消息说,AMD要推出三核版本处理器。这并不新鲜。早在2005年,IBM提供给微软的XBOX360 处理器就是三核的PowerPC,从技术上来说没有问题。我们想知道的是,三核与四核只一核之差,奈何AMD会如此看重?原因很明显,制造成本是元凶,虽然只是少了个核心,成本降低恐怕不只是1/4这么简单,加上成品率的随之上升,或者制造四核过程中坏了一个的,自然就变成三核的版本,说不定有好事者又可以打开那个不可靠的第四核。从架构上来看,最可能的原因乃是三核的通信效率要比四核高,并且可能推出没有三级缓存的版本,从而增加二级缓存的容量,都是有可能的。
以目前的技术,三个核心几乎可以算是全连接。这个时候处理器之间的数据交换要高效得多,其中任何两个处理器都可以直接互联,如果不采用全连接方式,在四核处理器中无法达到目的。到现在为止,包含四核在内的超过四核的系统中,只有IBM做到了全连接,也只有Power6能够做到全连接,显然目前的条件无法让Barcelona这种级别的处理器全连接。
还有必要谈论真假四核吗
今年早些时候,笔者曾撰文《四核不问真假》,做不做原生四核在于制造工艺、成本的综合考量,而不是违背这个原则特意要走不同的路,那样伤己不伤人,徒劳无益。
AMD自己首先提出真假四核的概念,不过稍嫌惨白:虽然在双核占据了先机,却在四核的时代自受其害,如果不是因为要坚持原生,估计也早出来了四核。
当然也有人提出异议。难道AMD不愿像Intel那样做么?他们也是迫不得已,一方面话已经放出去了,总不好自己打自己嘴巴,另外一方面也确实是有难度:AMD处理器的架构恐怕也要做一些改变才能拼接,总之最后也只能孤注一掷、一条道跑到黑了。
就在Barcelona闹得沸沸扬扬的时候,Intel也在潜心做着改变。首先在工艺上,拿出了45nm的样品,很重要的是,他们的四核产品也开始了原生的进程。而Intel此举并不完全是技术决定的,而是成本决定的。
在这么做之后,架构也有些改变,内部处理器的连接通过QuickPath实现,因为在拓扑上与AMD的处理器有类似的情状,AMD说Intel在抄袭他们的设计。AMD此言未免有些过激,Barcelona新添加的Superforword以及 Writecombining技术,在Intel的Core架构已然能够实现,况且,技术专家在设计上有共同认识也是正常的,难道说为了避免抄袭,每个品牌的汽车都需要不同数量的轮子么?
实际上,AMD所骄傲的并非“原生”的这些东西,而是HyperTransport这个概念,把处理器当做一个数据传输的HUB,而不仅仅是一个计算单元,的确是其独到的地方,这要超脱Intel的设计,借以在服务器市场上立足。桌面处理器只是托福借光而已,我们也可以看到,只有在四路以上,AMD64系统才更受欢迎,这也合乎AMD64架构设计的最初目的。而且AMD也是借用alpha的概念,一旦Intel采取类似的策略,未来很难预料。
至于多核的“真”与“假”并无实际意义。从上面的分析看出,在四路以下,AMD64架构的优势并不明显,尤其是在一些偏向计算的运算中,不是仰赖处理器的外围带宽,而是凭借内部的运算单元和资源搭配,加上AMD工艺上要落后一些,在Core架构之后,AMD64架构没有优势。何况,Intel可以用大量的生产提供双核/四核类似的价格,那么左右市场的自然不是技术的先进与否,而是成本和价格了。并且,Intel在系统设计上似乎更有经验……
三级缓存拯救Barcelona
正是因为前有强大的敌手,Barcelona拥有了很多新亮点,包含为定点运算和浮点运算提供了三条流水线,而且通过优化内部流水线结构,大大提高了效率。比如在分
支预测这种不新鲜的技术之外,还提高了load/store命令的效率,安排更为灵活,可以实现多种格式的存取甚至混合格式的存取。
可以认为,Barcelona是AMD精心设计的产品。
通过添加第三级缓存,巧妙解决了四核产品在原生状态下的互联,而且避免为了实现各个核之间的直接数据读取导致的总线壅塞状况。
AMD处理器缓存的设计思路与Intel的不一样,采取的是非包含式的设计,也就是说依次层级的缓存之间没有相同的数据,下一级是上一级别的备注,只有上一级缓存中需要替换的,才写入下一级。根据这个设计思路,三级缓存被设计成为“非包含式剔除(non-inclusive victim cache)”缓存,意思就是只保存从二级缓存中剔除的或者写回的数据,主要提供四核核的数据交换用。如果可能会被另外一个核或者多个核利用到,整个系统的带宽将大大提高。
三级缓存提供了一个很好的链路,解决了多核内部的全连接问题,三级缓存成了一个通道的作用。根据最近得到的消息,原生四核的Intel处理器也将拥有三级缓存,解决的恐怕也是这个问题。
在此之前,Intel在服务器的主板上,附加了一个缓存用于解决两个核心之间以及双路之间的数据共享问题,三级缓存的使用大抵如此。
由于是直接把数据从内存中读取到一级缓存中,Barcelona的一级缓存容量相当大,数据和指令缓存分别是64KB,这是从Athlon时代AMD相对于Intel的弱小优势,同时也是为处理器的缓存结构设计决定。目前,Intel的同级别处理器一级缓存容量是AMD同级处理器的一半。但是由于是备份式的缓存结构,这并不是问题。
但是,Barcelona的一级缓存的组相连策略只有2路,这将大大带来不命中的危险,虽然在替换的时候能够节省很多时间,但是一旦发生冲突,这将是灾难性的。而且,自个组相连策略长时间没有改变,对于现在容量越来越大的软件并不是一件好事。
这将可能导致反复的数据读取,从而大大浪费系统带宽,AMD系统的短时延的内存优势也将淡然无存。很有意思的是, AMD在Barcelona设计的时候,并没有固定安排二级缓存的策略,开发人员可以根据需要安排从0~128路的组相连策略,这大大高于Intel只有 16路组相连的灵活度。笔者发现,一些文献说Barcelona的二级缓存只有8路组相连,这是不准确的。
笔者认为,这是与一级缓存的良好搭配。估计是考虑到一级缓存冲突导致的不命中率比较高,需要比较容易地替换数据,另外,允许用户针对不同的应用环境采取比较优化的策略。可惜的是二级缓存都不大,如果能够大一些,恐怕很多事情做起来会容易得多。
在缓存结构上,我们也注意到,因为目前还是双通道的64位内存接口,爆发式读取为4,因而缓存的线宽度依然为64bytes。以现在的系统结构,串行内存恐怕会更合适。
Barcelona与Core英雄相惜
所谓君子合而不同,Barcelona和Core也有异曲同工之妙。在Core架构中的命令融合,可以大大提高流水线的利用率,在Barcelona中也有类
似的机制,能够把三条宏指令进行融合,从而大大提高效率。另外,Barcelona还另外在指令解析阶段增加了指令,避免出现问题。而Core则是通过添加指令解析阶段的流水线,大大提高指令解析的带宽,并且把执行完的指令释放带宽也提高到每个周期4条指令。
类似还包含WriteCombining,两者都有类似的机制,在计算的时候通过计算Store的内存范围,在同一个范围内的内存读写被安排在一块集中读写,以便于提高带宽的利用率,这也是与串行的思想相符合的。但是这种延迟的读写和为了提高效率的读写一旦出现问题,软件出现崩溃的概率虽然没有那么大,但是基本上是白用功了。
FastForword也是类似的。有一些的计算是前后相继的,也就是说后一个计算的因子可能就是前一个计算的结果,那么只要有这种情况出现,就可通过FastForword这样的技术把上一个计算结果暂时存储起来,不写到缓存中去,等到下一个计算load的时候,即可把数据释放出去,从而节省了命中、等待的时间,大大提高效率。这在一些循环运算中尤其多见,比如高清内容的编码和解码,有了这个技术能够大大提高编码和解码的效率,这也是最近的处理器能够从容应对这些运算的根本原因。
另外,相同的方面还包含Barcelona首次使用了8个128位的XMM寄存器,用于多媒体指令的存储。这样可以大大提高多媒体指令的执行效率从而能够在执行编码解码的矩阵运算中,拥有更宽的带宽。并且这样的寄存器十分灵活,能够方便地构成64位或者多个32位的组合,要比通用寄存器方便。
尽管如此,Barcelona和Core都尽量避免循环的运算。以前处理器之所以无法应付解码运算,很大程度上是循环运算的带宽和效率太低,无法应付视频解码的需求,在Pentium时代添加MMX指令和寄存器目的就是增加解码带宽需求。
但是,循环运算是编程中的最普遍的运算之一,另外一项则是跳转命令,经常的比较和判断对处理器而言是灾难性的。因而要对付循环带来的问题,需要增加缓存的容量,Core架构能够支持64个循环,Barcelona连像连续加这样的运算最好分成四个,尽量少用抽象的运算,从中可以看出差别,为Barcelona进行优化相当不容易。一旦是递归的算法,效率会大大降低,在编程的时候,恐怕要尽量避免这种情况出现。
谁将是基准
Barcelona改进不可谓不少。包含三个整数运算和浮点运算单元以及更为完善的指令解析流水线和深思速率采取跟Core类似的一些关键技术,Barcelona绝对不仅仅是一个过客
。事实上,在浮点方面相当强悍,增加了浮点运算的单元; 另外,浮点运算本来就因为AMD系统带宽大有优势。
但是,技术对制造的妥协又决定了它必然是一个过渡产品,它的价值最多是告诉世人,AMD有了四核处理器,并为随后的多款产品打下基础,就Barcelona自身而言,不会给人太多的惊喜。Intel很容易就能赶上来,最近的45nm产品好像还大有把Barcelona打落下来之势。
内核之间的环状连接也是问题。上文已经说到间隔的两个处理器通信恐怕需要通过三级缓存才最好,那么处理器直接连接的意义便小多了,跟拼接的两个处理器类似。也就是说,不会与Intel现行的四核处理器有多大区别。而且,由于数据交换的频繁也会降低连接带来的好处,从目前的制造工艺来看又不可能做到全连接,在四核之上,它的内核直连的优势将淡然无存。
当然,它也设立了一些新的基准。比如通过判断指令是标量和向量,确定不同的解析流水线,并且通过措施保证在进行其中一个运算的时候,另外一个不对其进行干扰。同样的,在整数和浮点的运算中,也预先判知从而进入不同的流水线,并且通过LZCNT/POPCNT这样的命令来保证流水线的正常运行,这种策略是相当有趣的。
同时还把load/store控制单元进行了改变,这个最重要的单元涉及到处理器执行效率的高低和与缓存/内存之间的复杂关系,通过平行地把这个单元独立出来,并且提供两个并行的操作方式,保证了数据装载和存储的效率。LSU能够存储一个128位数据或者存储两个64位数据抑或是混合。
下一代处理器的设计将继续在内存读取的效率上大作文章,把内存读取当作一个流水线来对待。在Core架构中有预先读取的命令,而Barcelona显然在存储上更有优势。结合WriteCombining,可以大大提高处理器的I/O效率,不过根据AMD提供的资料可以看出,针对连续的读取,似乎不太适合WriteCombining,这将会对系统的性能带来很大的影响。
也有文献说,Barcelona各个内核能够运行在不同的频率上,而不是简单地统一频率。处理器提供5个状态,在不同状态下,处理器的频率和功耗将有变化,并且根据系统电源板的需求可以关掉其中的一个内核,这个时候处理器的频率也只有几百兆赫兹。
这个功能是设计给系统板的设计人员,不一定能够用到处理器的应用中。也就是说操作系统或者软件恐怕无法针对这个特性进行开发,至于是否会成为一种应用状态,还要看未来的走向。
在四核逐渐成为议题之后,大家开始考虑超过四核的状况。最近AMD又有三核心的处理器,这就意味着在未来很难说是否会像目前这样的模式,说不定以“三”为基准的多核处理器机制将成为主流。
三核心处理器有不可多得的优势,全连接相当简单,而且如果有两组三个核的处理器,可以实现两个组之间的组合,不需要添加额外的设计和制造成本。尤其是处理器内核增加太多之后,全连接变得不太可能,以3个内核的模块设计才是未来的最好出路。
目前的多核处理器为了解决数据交换的问题将使用更多的共享缓存,从制造的角度将推进更大容量的共享式二级缓存,从而大大降低处理器数据交换的难题。
由于制造工艺的提升,原生的多核处理器将变得更多,而不是像目前这样的状况,也不否认有可能出现比较复杂的系统要多个模块的情况。
总之,处理器内核越多,所面临的问题就会越多,需要考虑到的细节也会越多。Barcelona和Core2 Quad给了一个方向,指明了一条路,未来会怎么样,依然是成本和技术双方协调的结果。Barcelona差点在AMD的执拗中夭折,相信它会吃一堑长一智……