同步多线程-(SMT)-技术基础

同步多线程-(SMT)-技术基础
同步多线程-(SMT)-技术基础

同步多线程(SMT) 技术基础

介绍

微处理器设计的发展和我们对速度的需求,诞生了很多新技术并使它们迅速发展,也使现在的以及下一代的处理器的效率和性能都有了提升。一定的体系结构下,在提高性能、降低开销和指令级并行性(ILP之间)加以平衡,可以降低平均CPI。

同步多线程技术(SMT)是一种体系结构模型,其目的是在现有硬件条件下,通过提高计算能力来提高处理器的性能。因此,同步多线程技术结合了多重启动处理器(超标量和VLIW)和多线程处理器的思想来增加并行度,进而提高性能。

多重启动处理器可以在一个周期内执行多条(2,4甚至8条)指令,而多线程和多处理器(SMP和CMP)结构可以同时或者在很少的延迟内执行来自不同线程的指令。SMT结构中,不仅在一周期内启动多条指令,而且也能在同一周期内启动来自相互独立的线程(或上下文)的指令。在理论上,这种改进运用了指令级并行性(ILP)和线程级并行性(TLP)技术来提高执行功能单元的效率。

同步多线程技术之前的研究

多重启动处理器(Multiple Issue Processors)

运用在超标量和VLIW上的多重启动处理器,其目的是为了降低平均CPI,通过在一个周期内启动多条指令,充分利用处理器的功能单元。要想有效利用多重启动处理器资源的关键就是在运行的程序中,发现足够的指令级并行性,通常这种并行性是由硬件决定的。超长指令字(VLIW)处理器每周期启动固定数目的操作,而这些操作是由编译器决定的。

超标量处理器通常是指“动态调度”(dynamically scheduled)的多重启动处理器,因为他们是通过硬件来发现代码中的并行性。不同的是,VLIW处理器通常是“静态调度”(statically scheduled)的,因为他们依靠编译器来发现并优化指令级并行性。

无论是动态或是静态调度,如何有效利用多重启动处理器,依赖于发现并利用指令级并行性。指令级并行性来自同一个上下文环境、程序或线程。CPU和编译器重新安排和启动指令,以此来最大限度的利用资源而不改变应用程序的完整性。在多重启动处理器中,如果不能发现足够的并行指令来填满发射槽(issue slot),那么资源就被浪费了。

超标量处理器现在大致有DEC/Compaq 21164, PowerPC, MIPS R10000, Sun UltraSparc 和 Hewlett Packard PA-8000。而VLIW处理器则包括Intel IA-64 (Itanium) 和Transmeta Crusoe。对多重启动处理器和使用记分牌(scoreboarding)和Tomasulo算法的动态调度已经有了很多研究,我将不再花费时间分析他们。

多线程处理器(Multithreaded Processors)

多线程处理器主要通过降低操作延迟以提高处理器的效率,比如说cache失效和需要长执行周期的指令。一个多线程处理器通过分配给每个线程独立的PC(program counter)和寄存器来保持线程间相互独立的状态。由于每个处理器在切换上下文时几乎没有延迟,所以每个周期可以启动来自不同线程的指令。如果处理器在每个周期切换上下文,这就叫做细颗粒(fine-grained)的多线程或交叉(interleaving)。粗颗粒(Course grain)的多线程处理器则是在某一线程出现长延迟时,才切换线程,以保证指令的持续启动。正是由于存在分离的、独立的上下文和指令资源,多线程体系结构才能利用线程级并行性(TLP),从而提高处理器的效率。多线程处理器通过比传统处理器更精细地共享处理器资源,从而

有效的提高了处理器的利用率。就如同多重启动结构依赖于指令级并行性(ILP)一样,多线程处理器更依赖于线程级并行性(TLP)。线程级并行性来源于多个线程,并行程序或者是多程序环境下的独立的程序。但是多线程处理器不能在同一个周期内启动来自不同线程的指令。因此,当一个周期内,单线程无法找到足够的指令级并行性,处理器资源就被浪费了。

多线程处理器现在包括Denelcor HEP, Tera, MASA和Alewife。

多处理器Multiprocessors (CMP and SMP)

多处理器结构可能是一个包含了多处理器核心(AKA芯片多处理器或者CMP)的包,也可能是在同一个计算机上的两个或多个物理处理器包(AKA对称多处理器SMP) 。多处理器结构通过允许线程同步执行来提高总体的性能。就如同多线程处理器,多处理器也要依赖于线程级并行性来提高性能。但是多处理器结构并没有提高总体的处理器资源利用率,因为在当前线程没有足够的并行性时,处理器资源还是闲置了。

IBM的Power4, Sun的MAJC和Cradle的Universal Microsystem是多处理器或CMP的典型例子。而Intel’s的Pentium Pro, Pentium II, Pentium III和Xeon处理器,包括AMD的Athlon XP 都支持对称多处理器(SMP)。

小结

多重启动结构只要有足够的指令并行度(ILP)就能够保证有效利用处理器的资源。

理器结构提供

了更为广阔的

指令集以挖掘

ILP,并且在长

延迟操作产生

时能够有效的

利用处理器,但

前提是有足够

的线程级并行

性。

图1

如图1所示,由于资源冲突导致了处理器无法启动之后的周期,垂直浪费(vertical waste)就产生了,而当没有足够的指令级并行性时,处理器无法最大限度的同时启动各种操作,这就导致了水平浪费(horizontal waste)。

同步多线程技术 (SMT)

同步多线程技术试图解决上面提到的两种浪费。同步多线程技术通过两种途径来提高处理器的总体性能。

1)同步多线程技术允许处理器在一个周期内执行多个线程的指令而不需要切换上下文。因

为,我们可以在这种模型中,同时利用线程级并行性(TLP)和指令级并行性(ILP)。

我们可以在任何一个周期内,更有效地利用处理器的资源从而减少水平浪费。

图2

2)理论上,同步多线程技术不会由于不同的处于激活状态的线程的结合而阻止指令的启

动。这意味着如果由于产生了高延迟的操作或资源冲突,而使得一个线程挂起,仅有一个线程处于激活状态,那该线程就可以使用所有可用的发射槽。由于在这个线程中的指令没有被阻塞,结果垂直浪费就消除了。

一个基于SMT技术的处理器,每个周期都从所有线程中挑选指令,启动并执行更多的指令,这样能够更好的利用处理器资源。而多重启动(超标量和VLIW)处理器能够在每个周期内执行多条指令,当单个时钟周期内指令级并行性很低时,这种处理器的效率是很低的。多线程和多处理器结构减少了由于长延迟操作和资源冲突而产生的限制,但是也增加了开销(经济上的和规模上的开销),还未必能够十分有效的使用处理器资源。

SMT可以最有效的利用多重启动和多线程结构,而不必实质性的增加开销和晶体管数量。DEC/Compaq的Alpha EV-8处理器就是利用SMT技术的典型机器。EV-8的设计者之一 Joel Emer说“它看上去像4个芯片,用起来像两个,而实际上只有一个,但它相比于一个非多线程的只增加了5%的晶体管。”

调度(Scheduling)

超标量机上的动态调度对于SMT机的调度同样适用。因此,寄存器重命名(register renaming)仍可以在SMT机上使用。为了防止线程自身与线程之间发生寄存器名字冲突,线程相关的结构寄存器必须与硬件寄存器相对应。

取指(Instruction Fetching)

由于SMT处理器上的指令可能来自不同的线程,大大增加了线程级并行性,以提高处理器性能。有鉴于此(在任何一个周期内,有更多的指令可能被启动),取指单元必须能够有效的填满指令缓冲区以向处理器提供足够的指令,而且还必须具备动态调度的能力。此外,由于可能在同一时刻存在多个线程同时运行,取指单元还必须知道哪个线程需要指令。当取指单元无法在每个周期内为所有线程取得指令时,就必须在线程间作出选择,以确定给哪个线程优先提供指令。这里将讨论两种取指模型。一个就是单循环法(round-robin),每次为一个线程取指,循环于所有激活的线程之间。另一个就是引用计数法(Icount),

使用一个算法根据线程移动的速度,来确定谁的优先级最高。最后,如果多线程要支持指令的同步请求,就可能需要增加额外的端口。

寄存器文件和程序计数器(Register File and Program Counter)为了保持多线程的上下文,处理器必须将状态保存下来。这样,SMT处理器需要很多的寄存器文件。每个线程得到它自己的结构寄存器。利用寄存器重命名,我们可以假设所需的硬件寄存器数量等于线程所需的结构寄存器乘以线程数再加上支持重命名的寄存器。一个更大的硬件寄存器文件,通常就增加了处理器的复杂性,有时候也可能增加访问时间。

(结构寄存器)(线程数)+重命名寄存器

除了复制和增加的寄存器文件所需的空间之外,SMT处理器还需要为每个线程增加分离的程序计数器。

管道(Pipeline)

指令管道不一定要进行实质性的改变来支持SMT。但是,由于寄存器文件的增大,从寄存器重命名策略的角度看,可能需要管道为寄存器的读写增加额外的步骤。

分支预测(Branch Prediction)

分支预测和目标缓存需要一定的改进。由于同时执行的上下文,其地址空间可能很大,分成的块数也越多。至少在一种我所碰到的设计中,需要为分支目标缓存增加一个线程标识符。另一种改进的方法是为每个线程复制整个结构,这个方法对于一个支持比较少的线程的处理器还是可行的,但是对于一个支持很多线程的处理器就太昂贵了。

Cache

处理器的cache是另一个可能发生资源竞争的部件。超线程技术不仅要求能够同时访问数据和指令,对于带宽的需求也增加了。这样,cache越小,就越容易发生冲突。虽然在这里我们讨论了这个问题,但是这个问题常常由于在其他方面效率的增加而被忽略了。在一些情况下,L1 cache失效明显增加了(在并行工作负载下达到68%),但是L2 cache能够处理大部分的请求,所以总体的性能受L1 cache失效的影响不到10%。

小结

从上面的介绍可以看到,同步多线程结构与早先的结构相比有很多相似之处,比如多重启动(超标量)处理器和细颗粒的多线程处理器。实际上,通常同步多线程结构的设计从超标量开始,并加上了上述各种改进。

结论

从处理器工业的今天的走向来看,同步多线程技术可能会被认为是对于处理器体系结构的一次革命性的变迁,也可能仅仅是超标量(多重启动)处理器设计的一个突破。未来的处理器更可能是SMT、SMP和CMP结合的产物,其性能可能远远超过现代的系统。同步多线程技术确实能够在不扩大处理器规模的基础上,获得性能和效率的提升,但也在另一方面增加了存储资源和总线冲突的可能性。这些问题与在SMP体系结构下的一些问题类似,也可能使用一样的方式来处理。

同步多线程技术(SMT)这个词最早于1995年出现在已出版论文的Citeseer index 上。但是,第一个商业化的产品才发布没多久。可见这种技术还有很多路要走。其接受程度,包括其缺点,将指引商业处理器开发者走向前方。而我猜想,在某种形式上,SMT会在不久

的将来存在于大多数的处理器设计中。

相关主题
相关文档
最新文档