多线程技术

多线程技术在有限频率范围内有效的提高芯片的性能,是近年来微处理器设计领域最重要的技术趋势。本文较为完整的综述和分析了高性能微处理器设计技术的发展趋势,并以此为基础,基于本研究单位现有的技术积累特点设定了一个多核多线程的处理器芯片结构进行研究,其主要特征为细粒度、交织执行的多线程、对称组织的多核CMT结构。本论文针对近年来高性能微处理器设计中出现的关键问题,围绕多线程展开讨论。

关键词:微处理器,多线程,体系结构

概述

在2002年之前大约20年的时间内,主流CPU都以指令级并行(InstructionLevel Parallelism,ILP)为性能提高的主要手段,通过多条流水线并行执行同一程序的不同段的方式提高CPU的性能,代表性的技术特征是多发射、乱序执行、分支预测等。指令级并行结构的微处理器可以分为超标量(Super Scalar)和超长指令字(Very Long Instruction Word)两大类,其中超标量是这一阶段高性能微处理器的主要结构形式。

超标量:超标量技术在每个时钟周期内发射多条指令,利用多条流水线并行的执行。指令执行可以是顺序的或乱序的。

但发展到现阶段超标量CPU的发展遭遇瓶颈,其中比较突出的一个问题是程序的指令级并行度有限。除了程序的指令级并行度有限以外,高性能微处理器设计也面临其他一些重要的挑战。主要包括存储器访问速度大大滞后于微处理器主频的提高,半导体工艺的进展以及与之相关的集成度提高、与设计复杂度与验证难度的提高、主频和功耗限制等。

在认识到指令级并行对于提高微处理器性能的局限性后,微处理器厂商以及研究人员开始探索高性能微处理器的新的结构,下面列出其中比较重要的一些方向,其中线程级并行是潜力巨大的一个方向。

线程级并行

线程级并行有多种实现方式,大致可以分为三类:粗粒度(Coarse.grained)多线程、细粒度(Fine.grained)多线程、同时(Simultaneous)多线程[4]。

粗粒度多线程的基本思想是当一个线程因存储器存取请求或者其他长延时的操作而阻塞时,切换到其他线程继续执行。粗粒度多线程以在软件层次的实现为主,尤其是在操作系统的线程调度部分中。在一个线程遇到长延时操作,例如对硬盘进行读写时,软件控制将当前线程的各种现场进行保存,然后在处理器中执行新的线程。

同时多线程(Simultaneous Multithreading,SMT):SMT结构由美国Washington大学的Tullsen等人于1995年提出【1][2][3】,

其代表性论文是1995年发表的“同时多线程:片上并行性最大化”。

同时多线程的设计思想是:在同一个周期内同时运行来自多个线程的指令,从而更好的利用原有的超标量硬件资源。当存在多个可执行线程时,SMT处理器中同时处于发射就绪状态的指令可以来自不同的线程,处理器中的控制逻辑从中选择能够在同一个周期中执行的指令分配到多个功能部件流水线(即超标量逻辑处理单元)同时执行,若仅有一个线程,则同时多线程处理器也可以作为一个普通的多发射超标量处理器来进行工作。该方式对存储系统带宽要求非常高。目前已经采用同时多线程结构的通用处理器包括Intel,IBM等公司的处理器产品。

操作系统可以将单个Xeon超线程处理器看作两个独立的处理器那样来进行线程分配等工作。当将一个线程被分配给逻辑处理器1时,超线程技术利用必要的资源执行该线程。当另一个线程被分配给逻辑处理器2时,需要为该线程划分资源。操作系统将多个线程代码调度和分派给每个逻辑处理器,就如同对待具有两个处理器的SMP系统一样。除了Window以外,2.4和2.5版本的Linux对称多处理(SMP)内核也都支持超线程,IBM公司的研究人员分析了超线程对LinuxSMP内核影响的结果,在Linux内核2.4.19上测试的结果表明超线程技术可以使多线程应用程序的性能提高30%。

细粒度多线程是一种交织的体系结构,其显著的特点是每个时间片切换线程。该结构将是我们尝试在数字实验课程上实践的内容。

细粒度多线程的基本思想是各个线程以设定的顺序,按照一个较短的时间片切换执行(例如每个时钟周期切换执行一次),这样,在微观上各个线程是交织执行的,在宏观上则是线程在同时执行。以时间片轮转的方法实现这样的交替执行在轮转的过程中跳过处于停顿的线程。

细粒度多线程基于一个相对简单的微处理器核的结构,即不需要有多个并行工作的硬件资源同时工作,而是仅有一组硬件运算资源,只是需要同时保存多个线程的状态信息,多个线程以交织的方式切换,每一个时刻仅有一个线程在使用流水线资源。反映到处理器的结构上,仅需要一条流水线资源,以及多个寄存器堆和多组必要的状态记录和系统控制资源就可以了。因此实际上需要附加的资源就是状态记录和系统控制资源。

实践

我们的实现计划是搭建一个支持两个交织执行的硬件线程的细粒度多线程cpu,因此在原先的cpu资源上,需要附加状态记录和系统控制资源。多线程微处理器的存储器机制和线程调度机制是一个晦涩的研究课题,为了简化这个部分,我们不得不采用最简单调度和存储器机制:

1、我们默认每一个线程时间代价是相同的,我们不考虑线程调度的效果,简单的执行一定时间(3~5)个周期,进行线程切换。

2、现代计算机的上下文保护机制需要操作系统的调度,为此,对于存储器我们不得不使用两个一样的硬件,这违背了细粒度多线程仅使用一组硬件的原则,但是这是不设计操作系统来进行上下文保护的最佳方案。

3、对于寄存器的保护原则仿造程序调用的帧栈机制,单独设置两个个小容量存储器,供两个线程使用,存储器内使用栈的数据组织方式存放线程切换时的寄存器状态信息。在A、B线程切换时,A线程将当前各个寄存器的状态压入A的栈中,在进入新线程B之后,B从B的栈中恢复之前的线程信息。离开B线程时,寄存器状态又会保存到B的栈中。

遵循上述规则,我们设计的这一部分的硬件实现将会包含调度模块,负责使能线程切换,使能线程状态信息恢复等,小容量存储器,这需要两个大小在1k的RAM。

另外虽然我们在描述实现计划时为了不引起混淆,称需要两个小容量存储器。实际上用于线程状态信息恢复的小容量存储器只需一个要1k的RAM,因为需要恢复的寄存器状态信息是很少的。只要将这个地址空间均分给两个线程做他们的信息恢复栈就可以了。




参考文献

【1 】Tullsen D.M.,Eggers S.J.,Levy H.M,Simultaneous Multithreading:maximizing on—chipparallelism.Proceedings of 22nd Annual International Symposium on ComputerArchitecture,1995。392—403

【2】【19】【20】【21】【22]【23]【24】【25]【26]【27]【28】【29】【30】【31】【32】[33】【34】【35]Dean Tullsen,Susan Eggers,Joel Emer et ai.,Exploiting Choice:Instruction Fetch andIssue on an Implementable Simultaneous Multithreading Processor.Proceedings of the23rd Annual International Symposium on Computer Architecture,1 996,l 91-200

【3】]Dean Tullsen,Susan Eggers,Joel Emer et ai.,Exploiting Choice:Instruction Fetch andIssue on an Implementable Simultaneous Multithreading Processor.Proceedings of the23rd Annual International Symposium on Computer Architecture,1 996,l 91-200Susan J.Eggers,Joel S.Eme,Henry M.Levy et a1.,SIMULTANEOUSMULTITHREADTNG:A Platfo硼for Next—Generation Processors IEEE MlCRO.1997,V01.17(5):12~19,

【4】A.Agarwal,B—H.Lira,D.Kranz,J.Kubiatowicz,AP融L:A Processor Architecture forMultiprDcessing.Proc.17-th Annual Int.Symp.on Computer Architecture,1990,104--1 14

【5】张志峰,同济大学,64位多线程多处理器芯片关键技术研究,20060501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值