首页> 中国专利> 基于时分复用实现多核处理器内核模拟的方法

基于时分复用实现多核处理器内核模拟的方法

摘要

本发明公开了一种基于时分复用实现多核处理器内核模拟的方法,模拟方式为:在M个处理器实例上执行多核处理器的N个内核的模拟,且N>M。具有包括步骤:所述模拟方法包括以下步骤:S1、在单块FPGA板上,将多核处理器每个内核的每条指令的执行过程拆分成N个步骤,将每个步骤分别利用一个流水段来执行,N个流水段组成一个流水线;S2、将所述多核处理器的N个核的指令依次接续地发射到所述流水线来执行。本发明在使用较少的FPGA资源的情况下,实现了对多个处理器内核的模拟。

著录项

  • 公开/公告号CN102073480A

    专利类型发明专利

  • 公开/公告日2011-05-25

    原文格式PDF

  • 申请/专利权人 清华大学;

    申请/专利号CN201010622510.4

  • 发明设计人 郑纬民;张悠慧;钱自强;苏格林;

    申请日2010-12-28

  • 分类号G06F9/38(20060101);

  • 代理机构11002 北京路浩知识产权代理有限公司;

  • 代理人王莹

  • 地址 100084 北京市海淀区清华园北京100084-82信箱

  • 入库时间 2023-12-18 02:39:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-08-07

    授权

    授权

  • 2011-07-13

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20101228

    实质审查的生效

  • 2011-05-25

    公开

    公开

说明书

技术领域

本发明涉及计算机体系结构领域,尤其涉及一种基于时分复用实现多核处理器内核模拟的方法。

背景技术

在计算机体系结构的研究过程中,一个关键的环节就是通过模拟来验证设计的正确性、评估体系结构的性能。目前有两种主要的模拟方法,一种是使用软件对系统进行模拟,一种是使用硬件对系统进行模拟。由于硬件设备相对较高的成本,软件模拟的设备成本更低,软件实现也比硬件实现相对要简单,也易于修改,随着处理器速度按照摩尔定律每18个月速度翻一番,软件不需做任何改变,其模拟速度也随之加快。然而近年来,CPU的主要改进方向由原先的主频提升转变为了核的数量的增加。对于模拟器的研究,这个发展方向带来的一个重要的问题就是进行全系统模拟的复杂度也会随之大幅增加。软件模拟的效率主要取决于宿主机的主频。在如今的多核时代,软件模拟时,宿主机多核的优势难以得到利用,而被模拟的多核处理器将成倍地提升模拟的复杂度。所以尽管可用作软件模拟宿主机的性能也在提高,但与需要处理的这个问题的复杂度的提高不是一个级别的。

随着多核处理器的广泛研究和应用,以及越来越多的并行应用的使用,软件模拟的不足也就凸现出来了。多核和并行使得用软件来描述系统的难度大大提高,它们的执行流程比串行的执行复杂得多,多核之间、多个进程之间的缓存一致性等问题也更为突出,周期精确的模拟非常难以并行化,因而,软件模拟也就越来越难以满足系统结构研究的需求,无法支持对多核和并行系统的快速有效的模拟。随着处理器上集成的核的数量的增多,在开展体系结构研究时全系统模拟的速度会大大降低。使用硬件模拟逐渐成为系统结构模拟研究的新方向。

FPGA(Field-Programmable Gate Array,即现场可编程门阵列)是一种可编程的硬件,它在CPU的设计阶段发挥着重要的作用。近年来FPGA在集成度方面的发展速度一直没有落后于CPU,在intel等CPU厂商开始普及45nm技术之后的一年左右时间,Altera也已经推出了40nm的Stratix IV。使用FPGA进行指令集模拟的思路,是使用硬件描述语言对模拟器进行实现,经编译综合后形成逻辑门和触发器的排列烧入FPGA上工作。利用硬件进行模拟,可以大幅提高模拟器的并行度,模拟效率也远高于使用软件模拟的效果。但单纯使用硬件进行处理器的模拟也有着几个致命的问题:首先硬件编程的开发周期长、编程调试难度高,同时还存在着灵活性和适用性低下的问题。

因此近年来对于多核处理器模拟的一个重要思路就是软硬件混合,通过硬件实现核心的指令集,对于不常用的,或者与体系结构相关性较大的指令通过高级语言协同模拟,这样既保证了模拟性能,也大大降低了整个系统的开发成本,同时可以比较方便地兼容一个新的体系结构和指令集。

使用FPGA进行系统结构模拟的平均有效模拟实验次数能够比软件模拟提高1~2个量级。但是FPGA芯片本身往往是非常昂贵的,因而进行多核模拟时往往需要投入大量的成本在硬件设备的购买上,这对于研究来说是一个很大的开销。

Simics是一个用来进行全系统模拟的平台。它提供了不俗的性能和足够的兼容性来运行各种操作系统。它也是第一个商业全系统模拟器,并且是印证全系统模拟的可行的一个开端。Simics可以运行如VxWorks等嵌入式操作系统以及如Solaris、Linux、Tru64、Windows系列等操作系统。它可以对嵌入式系统、桌面系统、多处理器系统、集群和这些系统组成的网络进行建模。Simics可以在指令级别模拟多种处理器,包括UltraSpark、Alpha、x86、x64、PowerPC、IA64、MIPS和ARM等处理器模型。

总的来说,可以看到,目前软件模拟覆盖了各类指令集,同时对操作系统的兼容也相当出色。

但是国外已有基于FPGA的软硬件混合加速模拟的研究:PROTOFLEX的软硬件混合模拟方案中使用FPGA对大多数指令进行模拟,对于少数复杂指令,例如I/O请求,则由PC-Host上的软件进行模拟。他们之所以做出这样的设计,是因为实际的全系统仿真中,I/O指令很少出现。同时硬件模拟这类指令是一个十分复杂的操作,这样的设计可以降低开发成本。

他们提出使用FPGA对大多数指令进行模拟,对于少数复杂指令,例如I/O请求,由PC-Host上的软件进行模拟。他们之所以做出这样的设计,是因为实际的全系统仿真中,I/O指令很少出现。同时硬件模拟这类指令是一个十分复杂的操作,这样的设计可以降低开发成本,但是成本仍然较高。

发明内容

(一)要解决的技术问题

本发明要解决的技术问题是:如何实现在少数几个软核上同时模拟多核处理器的多个内核,从而节约了硬件开销。

(二)技术方案

为解决上述技术问题,本发明提供了一种基于时分复用实现多核处理器内核模拟的方法,模拟方式为:在M个处理器实例上执行多核处理器的N个内核的模拟,且N>M。

其中,所述模拟方法包括以下步骤:

S1、在单块FPGA板上,将多核处理器每个内核的每条指令的执行过程拆分成N个步骤,将每个步骤分别利用一个流水段来执行,N个流水段组成一个流水线;

S2、将所述多核处理器的N个核的指令依次接续地发射到所述流水线来执行。

其中,在单块FPGA板上执行多核处理器的N个内核的模拟。

其中,所述N=2n,其中n为正整数。

本发明还提供了另一种实现多核处理器内核模拟的方法,将所述多核处理器的N个内核的一部分指令以软核模拟的方式来执行,另一部分以上述基于时分复用实现多核处理器内核模拟的方法来执行。

(三)有益效果

本发明利用时分复用的思想,实现了在少数几个软核上同时模拟多核处理器的多个内核,从而节约了硬件开销(例如FPGA资源),也避免了在多块芯片之间进行传输可能引发的问题以及一致性等问题,测试结果表明,该方法达到了很好的预期效果。另外,使用流水线来对多核处理器内核进行模拟,提高了硬件集成度以及保证了处理器在兼容其他指令集时的灵活性。

附图说明

图1是本发明的方法流程图;

图2、3分别是段间信号格式和操作码格式示意图;

图4~15分别是IF0接口、IF1接口、DE0接口、DE1接口、ALU0接口、JB0接口、MMU1接口、MMU2接口、WB0接口、WB 1接口、REG接口和CTRL接口示意图;

图16是对本发明的方法进行功能测试的结果图;

图17是对本发明的方法进行性能测试的结果图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细说明。以下实施例用于说明本发明,但不用来限制本发明的范围。

本发明使用了一条N段的流水线来对多核处理器内核进行模拟。与处理器本身的流水线不同,这里使用流水线的目的主要在于提高集成度以及保证被模拟的处理器在兼容其他指令集时的灵活性。

如图1所示,本发明的方法包括以下步骤:

S1、在单块FPGA板上,将多核处理器每个内核的每条指令的执行过程拆分成N个步骤,将每个步骤分别利用一个流水段来执行,N个流水段组成一个流水线;

S2、将所述多核处理器的N个核的指令依次接续地发射到所述流水线来执行。在第N个核的指令发射后,第一个核上的指令正好完成执行,因此可以立即发射第1个核的下一条指令。即以该流水的N个周期,模拟N核系统上所有处理器的一个周期。

上述方法的主要创新点在于,不再是用一个处理器实例来对应每个处理器的模拟,而是多个处理器的模拟是共用一块FPGA资源的。片上只实现了少数个内核实例,多个内核的模拟都是通过这少数几个实例来完成的,而不是每个内核都有一个实例。通过将处理器指令划分为多个段的方式,使用指令流水的方式,将多个核的指令依次向该流水线发射,在最后一个核的指令发射之后,第一个核上的指令刚好完成执行,因此可以立即发射第一个核的下一条指令。这样充分利用的FPGA资源,也提高了模拟的性能。

由于从单个CPU的角度来看,每一条指令的发射都是在上一条指令完成了执行后才开始,因此流水线的各个段落间不存在CPU上流水线中的数据相关和控制相关。

以下举例说明。

可以用该方法实现一套模拟平台。以16段流水的方式对16核处理器的常用指令进行指令级模拟。利用Nios片上软核进行复杂指令以及总线和内存的模拟,并同PC(个人计算机)之间通讯。PC进行其他外设的模拟,同时负责对上述模拟平台的监控。

本发明还提出了如下一种借助软核来进行软硬件混合模拟的方案:

将FPGA开发板通过PCI-E(是一种总线接口)同PC机相连,FPGA板上使用一条16段的流水线完成对16个处理器的常用指令的模拟。流水线在外部的控制信号下工作/暂停。同时,FPGA上放置3个软核分别负责内存的模拟、复杂指令的模拟、通过PCI-E同PC的通讯。通过16段流水模拟16个处理器。

对于内存的模拟:在总线上预留一段特殊地址存放访存地址,当CACHE(高速缓存器)未命中需要访问内存时,通过CacheControler(缓存控制器)在总线上设置特殊信息,软核根据地址返回相应地址下的数据。而内存的实际模拟可以根据对性能的要求以及对模拟容量的要求选择使用SRAM(静态随机存储器)、SDRAM(同步动态随机存储器)、甚至是HardDisk(硬盘)。在CACHE完成装填之前,该指令总是返回失败,即PC保持不变。

对于复杂指令:在总线上预留一段特殊地址存放待处理的复杂指令与数据,模拟流水线检测到复杂指令后,修改该数据,将流水线使能置0。此时流水线暂时停止工作,触发负责复杂指令处理的片上软核读取该数据,根据指令内容完成相应功能后,让流水线继续工作。

其他外设的处理:对总线上其他设备的访问由片上软核截获后通过PCI-E请求PC主机,PC主机上以软件形式对这些设备进行模拟,根据PCI-E接口的请求做出响应。

利用上述方法还可以实现一个基于FPGA的指令集多周期时分功能级模拟系统。模拟系统可以在Kernel模式下模拟所描述的32位MIPS指令集中的算术逻辑类、分支跳转类以及访存类的常用指令。

模拟系统间的信号传递是一个循环的执行结构:IF0生成PC信息、经过IF1取出指令内容、在DE0进行解码、在DE1取寄存器数据并生成公共控制信号、由ALU/JB/MMU中的一条执行段流水线执行、三条流水线输出的写回信息在WB0汇总,WB0选择有效的结果送WB1处理、WB根据写回信息选择写寄存器堆或者写PC。其中PC信息的处理在IF0内进行。写寄存器堆的处理在REG中进行,REG到DE1有一条数据通路提供所有寄存器的信息。

系统控制信号的作用是控制流水线工作,它同段间传递的数据信号构成各个流水段的主要输入。系统控制信号包括时钟信号、复位信号、使能信号以及测试信号。

实现中在两个功能相邻的流水段间通常使用128位的段间信号进行通讯,信号格式如图2所示,包括4个32位的数据。其中操作码为一个32位信号,包含了该指令对应操作的语义,以及执行过程中生成的控制信息和结果信息。操作码的语义规范如图3所示。其中,处理器标识:指明当前执行的指令所属的CPU;功能段标识:标示当前的指令应当由哪个执行段来执行(算逻/分支跳转/访存),在进入写回段前,正确执行了该指令的执行段,在执行结果有效的情况下,在向写回段传递该信号时将此段填充为“111”;写回方式选择:说明该指令涉及到的改动范围是通用寄存器还是特殊寄存器(如PC);写回寄存器编号:如果该指令需要对某个通用寄存器进行修改,该字段指出改动寄存器的编号;保留位:为系统后续扩展提供方便;立即数标识:局部信号,在译码段指明三个操作数中对应位是立即数还是寄存器编号;内部操作码:进入执行段时指定具体的执行功能,参考随后的各执行段的实现说明。

1)实现取指段的IF0、IF1接口:

输入:控制信号(CTRL)、待修改PC的CPU编号(WB1)、修改后的PC数据(WB1);

输出:PC(IF1);

功能:生成当前的本段的CPU编号。读取对应的PC信息输出,并且该PC+4;接受WB1发回的修改PC的请求(主要来自于JB类指令),其中PC_ID的最高位为‘1’表示该请求有效;PC_ID的低4位表示待修改PC的CPU编号。PC_DAT为修改后的结果。

同一周期内,写回的PC数据与读出的PC对应的CPU编号必然不同,因此不存在冲突问题。

IF1接口的输入:控制信号(CTRL)、PC(WB0);输出:CODE(IF1);功能:由于暂时没有实现TLB,此处的功能为根据PC,从ROM里取出相应指令。ROM使用32位位宽,由于目前的测试代码都比较小。因此分配1K的内存空间,8位的地址线。由于指令按4对齐,所以外部硬连接实际地址线的第10位~第3位至ROM的地址线。由于目前ROM不是模拟频率的瓶颈,因此ROM的分配方式设置为自动。

2)实现译码段的接口

DE0接口:

输入:控制信号(CTRL)、指令(IF1)

输出:段间信号(DE1)

功能:识别指令,生成初始OP信号,根据译码结果填写OP中的功能段标识,写回寄存器编号,立即数标识,内部操作码,完成部分指令的符号扩展。

内部操作码指定了操作的实际功能,是待模拟的指令集和内部实现间的接口,在兼容新的指令集时可以仅更改此处的映射关系而不必修改具体的执行段实现。由于内部的执行段只对实际的数据进行处理,而不考虑数据的来源,因此允许将不同的指令映射到同一个内部操作码上。例如ADDU与ADDIU的这两条指令的实际功能是一样的,他们的区别仅在于参与计算的操作数的来源分别是寄存器和立即数,因此他们对应的内部操作码是相同的。

DE1接口:

输入:控制信号(CTRL)、寄存器堆状态(REG)、段间信号(DE0)

输出:译码结果(ALU0、JB0、MEM0)

功能:根据立即数标识从寄存器堆状态里取出相应数据

3)实现执行段的接口

ALU0接口:

输入:控制信号(CTRL)、译码结果(DE1)

输出:执行结果(WB0)

功能:根据操作码决定实际执行的功能。如果DE1的执行段标示选中了本段,且指令中的判断语句(如果有)有效,则操作有效,将执行段标识置为111,以便写回段辨识。执行结果中OP_A写寄存器。

JB0接口:

输入:控制信号(CTRL)、译码结果(DE1)

输出:执行结果(WB0)

功能:根据操作码决定实际执行的功能。如果DE1的执行段标识选中了本段,且指令中的判断语句(如果有)有效,则操作有效,将执行段标识置为111,以便写回段辨识。执行结果中OP_A写PC,OP_B写寄存器。

MMU1接口:

输入:控制信号(CTRL)、译码结果(DE1)

输出:数据(MMU2)、操作码(MMU2)、读地址(RAM)、写地址(RAM)、写数据(RAM)

功能:该段实际上包含两个流水段,根据译码结果准备RAM的输入信号,以及RAM的工作。MMU1根据实际指令类型是读或写,传递译码结果中的数据到MMU2,同时准备相应的RAM地址信号和数据信号。

由于暂不支持SH等写半字指令,因此RAM配置为单读口单写口。读写使用统一时钟,存储字长32位,总容量2K。使用9位地址线,硬连接实际地址线的第11位~第3位。设置写地址使能端口,不设置读地址使能,输出不设置使能,采用直接输出的方式输出。

MMU2接口:

输入:控制信号(CTRL)、操作数(MMU1)、内部操作码(MMU1)、访存结果(RAM)

输出:访存结果(WB0)

功能:根据操作码决定实际执行的功能。如果DE1的执行段标示选中了本段,且访存成功,则操作有效,将执行段标识置为111,以便写回段辨识。执行结果中OP_A写寄存器。

4)写回段实现

WB0接口:

输入:控制信号(CTRL)、算逻结果(ALU0)、分支跳转结果(JB0)、访存结果(MEM2)

输出:写回信息(WB1)

功能:检查3个执行段返回的结果,如果有结果的功能段标识为111,则表示有需要写回的信息。传递该执行段的返回结果至WB1。

WB1接口:

输入:控制信号(CTRL)、写回信息(WB0)

输出:寄存器编号(REG)、寄存器数据(REG)、PC编号(IF0)、PC数据(IF0)

功能:根据写回信息,生成对寄存器的修改信号以及对PC的修改信号向保存寄存器信息的REG段以及保存PC信息的IF0段分发。

5)其他流水段

REG接口:

输入:控制信号(CTRL)、写寄存器编号(WB1)、写寄存器数据(WB1)

输出:寄存器堆数据(DE1)、寄存器调试数据

功能:保存各CPU中通用寄存器的数据,接受WB的修改寄存器请求。其中写寄存器编号最高位为修改操作有效标记,随后四位为修改的CPU编号,低5位为实际的通用寄存器编号。该单元还直接提供所有寄存器数据至DE1供取寄存器数据时使用。同时输出指定的寄存器信息供调试使用。

寄存器数据的存放没有使用基于地址访问的RAM芯片,而是直接通过逻辑单元实现。这样做虽然增加了逻辑资源的开销,但是在DE1取寄存器数据时,可以同时并发地取3个甚至更多的寄存器。同时可以方便地输出寄存器的状态供调试或验证使用。

CTRL接口:

输入:时钟信号(PLL)、使能信息、RESET信号、调试信号

输出:控制信号(各流水段)

功能:合并各个流水段使用到的控制信号,精简各个流水段的输入接口,另一方面使得模块图看起来更简洁,不易接错控制信号。使能信号是未来方便从外部暂停流水线而准备的,暂时没有使用,调试和测试中接Vcc处理。Reset为复位信号,其为1时所有流水段立刻被初始化至预设状态。Reset信号用于在上电后将各个寄存器随机取值的状态置为0,也可以用于模拟器的重启。

上述流水段一共16个。

下面对上述的软硬件混合模拟方案进行功能和性能测试。

通过一段简单的机器语言来对模拟方案的正确性进行测试。

该测试的语义如下:

该测试的功能即完成一个1~100的累加,但为了这个测试能够同时反映算术逻辑指令、分支跳转指令、访存指令的正确性。因此采用了在内存中连续写1~100,然后依次读出并累加的方法。编写32位MIPS指令如图4.18所示,我们先对2号寄存器赋初值100,4号寄存器初值0x200。2号寄存器减1,4号寄存器加4,并在4号寄存器指示地址下写入2号寄存器的数据。循环上述操作直到2号寄存器的数据为0。此时不断地读出4号寄存器数据加到3号寄存器上,并让4号寄存器减4,直到4号寄存器回到0x200。最后进行一次无条件跳转,回到程序的第一条语句。

完成烧录后,SignalTap(是FPGA片上debug工具软件,是一种逻辑分析仪)的记录功能便可以使用了,执行开始记录后选择停止,即可从记录的结果中观察系统在记录的时刻后的2048个周期内的运行状态。

如图16所示,3号寄存器最后重新到达100时,4号寄存器中存放了正确的运行结果5050,与1~100的累加和一致。由于测试程序的最后一条指令内容是跳转回程序的第一条指令,因此最后一条指令执行后会从第一条指令处重新开始执行。从2号寄存器的变化中也可以验证这一点。

为了确认程序确实正确地完成了执行,我们观察程序的最后一条指令。从图中记录的结果中我们可以看到,由于使用了PLL,实际电路的工作时钟比输入时钟(100Mhz)高了一倍。程序执行到位于地址0x40处的测试程序的最后一条指令“J0”的时侯。跟踪的3号寄存器,即累加的最后一项的结果为100,4号寄存器中存放的最终的结果是5050。在下一个0号CPU的周期时,PC跳转至0。

通过设计时的考虑和一些实现上的优化手段,以及后期的布线参数约束,最终实现的模拟器能够在200Mhz的工作频率下稳定地运行测试程序,即折合16核系统的全系统模拟频率12.5Mhz。

图17示出了目前已知最快的软硬件混合的多核模拟器之一BlueSparc的模拟频率同本发明的方案的对比。但需要注意的是,虽然都是基于Risc架构的指令集,但Sparc还是比MIPS复杂。

在不开启signakap逻辑分析仪的情况下,上述方案消耗逻辑单元的数量为1781个,仅占板上资源的4%。如果包含片上软核后,板上资源的占用能够控制在10%以内,则意味着可以在一块这样的开发板上模拟一个160个核的处理器。

以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号