服务器 频道

双线程还是双核?AMD推土机处理器简析

  废话少说,Bulldozer架构的最大特点就是实现了两个线程,按照图下的说法,它是two tightly linked cores(两个紧密连接的核心),并share resources to increase efficeiency(共享资源以提高效率),它是双线程还是双核心呢?


AMD Bulldozer

  双核心我们知道,就是晶圆上集成两个一样的核心,它处在处理器的“大”架构上而不涉及到处理器的“微”架构,而双线程则不同,它是在一个处理器核心内硬件实现两个线程,如下图所示:

最典型的双线程:Intel Pentium 4或者Core i7 

  Intel的超线程是在内部增加了少量的线路实现了同时运行两个线程——两个线程共享相同的运算单元,而AMD的推土机架构实际上是继续增加运算单元,在资源共享的程度上比起超线程来有所降低,如下图所示,两个线程具有独立的整数运算单元,只有浮点单元是共享的,这被称为具有两个整数运算单元“簇”:

  整数单元是日常运用当中应用最多的,例如,在终端处理当中是不允许使用浮点运算的,大多数服务器应用也不涉及到浮点运算,浮点单元通常只在科学运算单中有使用。不过现下的设计当中一些整数的SSE运算也使用了浮点单元。AMD Bulldozer通过将两个线程的整数运算独立开来,从而达到了大幅度提升基本应用的性能,具体的表现如数据库服务器的吞吐量:


Intel Nehalem-EP超线程能力对比:with SMT vs without SMT :超线程能力对比测试:Benchmark Factory

由于目前Nehalem架构的超线程技术是两个硬件线程共享三组运算单元,冲突在所难免,而Bulldozer则是两个硬件线程独享四个整数运算单元,性能提升将会更加明显

  显然AMD的“簇状双核”架构是在微架构内部的改动,因此按照笔者的看法,它属于多线程技术的一种,只是更偏向“多核”一些,它介于SMT和CMP之间,称为SMT也未尝不可。


由于浮点运算在通常的服务器应用上较少,因此浮点运算单元是共享的;AMD处理器向来都有整数和浮点具有独立的调度器的习惯——同时也拥有独立的寄存器文件

  伴随着这样的特别形式的多线程,Bulldozer微架构的资源共享有和常见的超线程不同,在Bulldozer上,拥有三组Scheduler调度器:两个整数和一个浮点,L1 DCache(数据缓存)也每个线程独立,在L1 ICache(指令缓存)、指令拾取、解码器、L2  Cahe都是共享的。


Nehalem Microarchitecture,经笔者整理

Intel Nehalem-EP处理器首发深度评测

  Scheduler大致上和上图的Reservation Station、ROB、MOB相当,也就是每一个硬件线程都有自己独立的乱序执行管理引擎,之所以说这个是因为,这样的结构很大程度上决定了两个整数运算核心是独立的,一些粉丝向往的“逆向超线程”是不可能会实现的。两个运算核心具有独立的数据缓存,至少在指令级别上,两个运算核心协作的代价太大。此外,双“簇”的结构也意味着它不太可能,如Intel Nehalem这样的架构加上SMT是实现了最灵活的多运算单元调度,而双“簇”则可以实现更大的吞吐量,以灵活性上为代价。

1
相关文章