三、SMT

同步多线程Simultaneous Multi-Threading,SMT)技术又重新回归到了Nehalem架构,这最早出现在130nm的P4上。对于打开了SMT的CPU来说,将会遭受到更多的命中失败,并需要使用更多的带宽。所以Nehalem比P4是更适合使用SMT的。另外,在移动和桌面领域的Nehalem有可能将不会支持SMT,它们也不需要3通道内存。

为什么Core 2没有使用SMT?很显然,它是可以做到的。SMT是在节省电力的基础上增加了性能,而且软件支持的基础建设也早就有了。有2个可能的原因:一是Core 2可能没有足够的内存带宽和CPU内部带宽来利用SMT获得优势。通常,SMT能够提升内存级并行memory level parallelism,MLP),但是对于内存带宽已经成为瓶颈的系统则是个麻烦。而更有可能的原因则是SMT的设计、生效等是很麻烦的,而当初设计SMT是由INTEL的Hillsboro小组主持,而并非是Haifa小组Core 2是由这个小组负责的)。这样Core 2不使用SMT就避免了冒险。

Nehalem的同步多线程Simultaneous Multi-Threading,SMT)是2-way的,每核心可以同时执行2个线程。对于执行引擎来说,在多线程任务的情况下,就可以掩盖单个线程的延迟。SMT功能的好处是只需要消耗很小的核心面积代价,就可以在多任务的情况下提供显著的性能提升,比起完全再添加一个物理核心来说要划算得多。这个和以前P4的HT技术是一样的,但比较起来,Nehalem的优势是有更大的缓存和更大的内存带宽,这样就更能够有效的发挥。按照INTEL的说法,Nehalem的SMT可以在增加很少能耗的情况下,让性能提升20-30%。

对于SMT的各线程间所采用的资源共享策略有许多种:

1、复制型—— 线程都可以复制使用
寄存器状态
重命名RSB重命名返回堆栈缓存)
大页表ITLB
2、静态分配型—— 一般由线程平分
各种主要的缓冲:读取、存储、重排序
小页表ITLB
3、竞争共享—— 由线程动态占有
保留站RS)
缓存Cache)
数据TLBDTLB),L2 TLB
4、不受影响
执行单元

Nehalem同时也降低了同步原语起始同步),比如LOCK prefix、XCHG和CMPXCHG等指令的延迟。同步原语在多线程编程中是必需的,而多线程的扩展性被同步所限制,通过降低延迟,可以提高现在多线程软件的性能。INTEL宣称,Nehalem的LOCK CMPXCHG指令其作用是使整个流水线串行化)的延迟是P4的约20%,Core 2的约60%。尽管降低了延迟,但行为仍然和以前的CPU还是一样的,锁定指令Lock)并不是管道化的,即使后面的操作可以被提前到锁定指令之前来执行。


相关内容