首页> 中国专利> 一种支持复杂访存指令的内存扩展方法和系统

一种支持复杂访存指令的内存扩展方法和系统

摘要

本发明涉及一种支持复杂访存指令的内存扩展系统与方法,包括:处理器系统,用于生成复杂访存指令,并为复杂访存指令分配访存地址,并根据复杂访存指令所调用的地址生成所需数据;扩展内存,用于存储处理器系统在执行复杂访存指令过程中的运算数据;执行模块,用于根据访存地址和所需数据执行复杂访存指令,访问扩展内存,生成结果数据返回至处理器系统;其中执行模块包括多个并行的事务处理单元,用于根据复杂访存指令的指令类型,执行符合指令类型的处理流程,并行访问扩展内存,以生成结果数据。本发明通过每个事务处理单元专注于处理一条复杂访存指令并行执行内存访问,CPU无需再维护一个请求队列,提高了CPU的工作效率。

著录项

  • 公开/公告号CN107391400A

    专利类型发明专利

  • 公开/公告日2017-11-24

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN201710525108.6

  • 发明设计人 赵阳洋;张雪琳;阮元;陈明宇;

    申请日2017-06-30

  • 分类号

  • 代理机构北京律诚同业知识产权代理有限公司;

  • 代理人祁建国

  • 地址 100080 北京市海淀区中关村科学院南路6号

  • 入库时间 2023-06-19 03:51:20

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-02-28

    授权

    授权

  • 2017-12-19

    实质审查的生效 IPC(主分类):G06F13/16 申请日:20170630

    实质审查的生效

  • 2017-11-24

    公开

    公开

说明书

技术领域

本发明涉及计算机领域,特别涉及一种支持复杂访存指令的内存扩展方法和系统。

背景技术

本发明以《一种扩展同步内存总线功能的方法和装置》(CN102609378A)发明为基础,并针对该发明的不足进行改进。《一种扩展同步内存总线功能的方法和装置》的技术方案为基于标准的DDR内存总线,不修改内存控制器的时序参数,克服访问扩展内存时的长延迟不满足标准DDR请求的低延迟时序的困难,解决内存扩展芯片与处理器系统的连接问题。其模块框图如图1所示,实现的手段是在处理器系统内部增加一个辅助访存模块,将处理器发出的访问扩展内存的请求转换成一组操作,重复发出DDR访存请求,直到内存扩展芯片(即图1中扩展内存控制器)把需要的数据送到处理器系统。

在此现有技术的基础上,本发明主要解决的问题是内存扩展芯片的执行模块如何更加高效的处理访存请求。

对于传统的访存指令处理方法,处理器系统和系统内存之间可执行的事务类型有限,其对复杂访存指令的处理由软件调度完成。处理器系统根据每一类访存指令的处理流程发送读写请求,维护一个请求队列,当请求队列高速缓存缺失的数量增多以后,新的访存请求无法被发送出来。对于大块数据的搬移,系统内存和外部设备可以在DMA(DirectMemory Access)控制器的控制下直接传送数据,但DMA控制器的路数往往受限。

在处理器系统连接内存扩展芯片场景下,添加辅助访存模块使得处理器系统和内存扩展芯片之间可以传输复杂的访存指令,若由执行模块独立完成对复杂访存指令的处理,处理器系统无需再维护一个请求队列,且访存请求无需再穿越复杂的缓存层级,减少访存延迟;对于大块数据的搬移,可以按需配置执行模块的数目,增加访存并发度。

为充分发挥处理器系统连接内存扩展芯片在访存性能上的优势,需为执行模块添加支持复杂访存指令处理功能的装置,从而支持高并发、低延迟的内存扩展访问。

发明内容

为了解决上述技术问题,本发明的目的是针对处理器系统连接内存扩展芯片场景下加速和扩展应用需求,提出一种使内存扩展芯片支持复杂访存指令处理功能的装置,其处理复杂访存指令的功能部件称为事务处理单元(Transaction Process Unit,TPU),从而支持高并发、低延迟的内存扩展访问。

具体地说,本发明公开了一种支持复杂访存指令的内存扩展系统,其中包括:

处理器系统,用于生成复杂访存指令,并为该复杂访存指令分配访存地址,并将该复杂访存指令所调用的地址、该地址所对应的写入数据以及该写入数据的数据量集合为所需数据;

扩展内存,用于存储该处理器系统在执行该复杂访存指令过程中的运算数据;

执行模块,用于根据该访存地址和该所需数据执行该复杂访存指令,访问该扩展内存,生成结果数据返回至该处理器系统;

其中该执行模块包括多个并行的事务处理单元,用于根据该复杂访存指令的指令类型,执行符合该指令类型的处理流程,并行访问该扩展内存,以生成该结果数据。

该支持复杂访存指令的内存扩展系统,其中该处理器系统还包括:

读请求模块,用于发送读取目标为该访存地址的读请求至该执行模块;

写请求模块,用于根据该读请求的返回数据,判断该执行模块是否处于空闲状态,若是,则发送写请求至该执行模块,否则继续调用该读请求模块,其中该写请求内容为请求该执行模块将该所需数据写入该访存地址;

结果数据接收模块,用于重复发送该读请求至该执行模块,根据该读请求的返回数据,判断该执行模块是否处于繁忙状态,若是,则再次重复发送该读请求至该执行模块,否则该处理器系统接收该结果数据。

该支持复杂访存指令的内存扩展系统,其中该事务处理单元包括:

核心模块,用于执行该指令类型所对应的处理流程,向该扩展内存发送读写请求;

事务状态信息传输接口模块,用于通过分析该访存地址获取该复杂访存指令的指令类型,并向该处理器系统返回该核心模块的运行状态,该运行状态包括该繁忙状态、该空闲状态;

内存控制信息传输接口模块,连接该核心模块与该扩展内存,用于根据该读写请求生成内存控制信息,并将该内存控制信息传输至该扩展内存;

辅助模块,用于分别为该核心模块、该内存控制信息传输接口模块、该事务状态信息传输接口模块的内部RAM写入当前执行内容的配置信息和下一步执行内容的配置信息所在的RAM地址。

该支持复杂访存指令的内存扩展系统,其中该处理器系统还包括:

根据该所需数据和预设的单次传输阈值,计算该所需数据的传输次数,将该所需数据分批传输至该执行模块。

该支持复杂访存指令的内存扩展系统,其中该复杂访存指令包括:内存拷贝、预取读、冲刷写、分散聚集读、分散聚集写、清除、原子加、原子减、测试并置位、比较并交换。

本发明还提出了一种支持复杂访存指令的内存扩展方法,其中包括:

复杂访存指令处理步骤,接收复杂访存指令,并为该复杂访存指令分配访存地址,并将该复杂访存指令所调用的地址、该地址所对应的写入数据以及该写入数据的数据量集合为所需数据;

内存扩展步骤,将处理器系统执行该复杂访存指令过程中的数据存储至拓展内存;

执行步骤,根据该访存地址和该所需数据执行该复杂访存指令,访问该扩展内存,生成结果数据返回至该处理器系统;

其中该执行步骤包括调用多个并行的事务处理单元,用于根据该复杂访存指令的指令类型,执行符合该指令类型的处理流程,并行访问该扩展内存,以生成该结果数据。

该支持复杂访存指令的内存扩展方法,其中该复杂访存指令处理步骤包括:

读请求步骤,发送读取目标为该访存地址的读请求至该执行步骤;

写请求步骤,用于根据该读请求的返回数据,判断该执行步骤的运行状态,若该执行状态为空闲状态,则进行该执行步骤处理该写请求,否则继续进行该读请求步骤,其中该写请求内容为请求该执行步骤将该所需数据写入该访存地址;

结果数据接收步骤,重复发送该读请求至该执行步骤,根据该读请求的返回数据,判断该执行步骤的运行状态是否处于繁忙状态,若是,则再次重复发送该读请求至该执行步骤,否则该处理器系统接收该结果数据。

该支持复杂访存指令的内存扩展方法,其中该事务处理单元包括:

核心模块,用于执行该指令类型所对应的处理流程,向该扩展内存发送读写请求;

事务状态信息传输接口模块,用于通过分析该访存地址,获取该复杂访存指令的指令类型,并向该处理器系统返回该核心模块的运行状态,该运行状态包括该繁忙状态、该空闲状态;

内存控制信息传输接口模块,连接该核心模块与该扩展内存,用于根据该读写请求生成内存控制信息,并将该内存控制信息传输至该扩展内存;

辅助模块,用于分别为该核心模块、该内存控制信息传输接口模块、该事务状态信息传输接口模块的内部RAM写入当前执行内容的配置信息和下一步执行内容的配置信息所在的RAM地址。

该支持复杂访存指令的内存扩展方法,其中该复杂访存指令处理步骤还包括:

根据该所需数据和预设的单次传输阈值,计算该所需数据的传输次数,将该所需数据分批传输至该执行步骤。

该支持复杂访存指令的内存扩展方法,其中该复杂访存指令包括:内存拷贝、预取读、冲刷写、分散聚集读、分散聚集写、清除、原子加、原子减、测试并置位、比较并交换。

本发明的技术优势包括:

1.每个事务处理单元专注于处理一条复杂访存指令,通过实例化多个该单元即可支持高并发的内存访问;

2.本装置在内存扩展芯片上实现,减少了数据在CPU和内存间的移动,CPU无需再维护一个请求队列,提高了CPU的工作效率;

3.本发明方法对多种复杂访存指令的处理使用相同的模块结构,区别仅在于各模块内部RAM表存储的内容,功能灵活且具有可扩展性;

4.本发明系统应用场景丰富,可用于内存访问加速、内存功能扩展和替代DMA,混合内存介质的支持,也可以用在消息式内存的远端控制器上,还可以用于支持内存层级的NDP(Near-Data Processing)。

附图说明

图1为扩展同步内存总线功能的装置模块图;

图2为本发明系统硬件架构图;

图3为本发明具体事务处理器结构框图;

图4为本发明一实施例中处理器系统发送复杂访存指令和接收处理结果的流程图;

图5为本发明一实施例中执行模块接收复杂访存指令和发送处理结果的流程图;

图6为本发明事务状态信息内容示意图;

图7为本发明另一实施例中处理器系统发送复杂访存指令和接收处理结果的流程图;

图8为本发明另一实施例中执行模块接收复杂访存指令和发送处理结果的流程图;

图9为本发明事务处理单元内部各模块协同工作流程图;

图10为本发明各功能模块的内部RAM存储数据格式示意图。

具体实施方式

为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。需要注意的是,文中所指的复杂访存指令包括但不限于内存拷贝(Memory Copy)、预取读(Prefetch Read)、冲刷写(Flush Write)、分散聚集读(ScatterGather Read)、分散聚集写(Scatter Gather Write)、清除(Clear)、原子加(Atomic add)、原子减、测试并置位(Test and set)、比较并交换(Compare and swap)。

本发明实施例对应的系统硬件架构。本发明提出的事务处理单元(TransactionProcess Unit,TPU),在执行模块的位置如图2所示。在介绍本发明具体实施例之前,先对本发明实施例对应的系统硬件组成结构进行介绍,包括如下组件:

执行模块201:用于根据访存地址和所需数据执行该复杂访存指令,访问扩展内存,生成结果数据返回至处理器系统,执行模块201包括多个并行的事务处理单元,用于根据复杂访存指令的指令类型,执行符合指令类型的处理流程,并行访问扩展内存,以生成该结果数据,执行模块201具体包括多个事务处理单元2011,事务分析单元2012,内存控制单元2013,事务状态信息传输接口2014,内存控制信息传输接口2015。该执行模块201作为请求的执行组件,在本发明所提供的实施例中用来接收、分析并处理内存访问指令(访存指令)。

其中,事务处理单元2011用于处理内存访问指令。它通过自定义的事务状态信息传输接口2014,从事务分析单元2012接收访存指令的类型、所需信息和事务状态信息,再根据预先设定好的每一类访存指令的处理流程,并行访问内存控制单元2013和数据缓冲器206。其中,内存控制信息传输接口2015既可以自定义,也可以使用现有的总线,包括但不限于AXI(Advanced eXtensible Interface)总线。

事务处理单元与传统访存指令处理装置的区别是,事务处理单元将一条复杂指令看作一个需完整执行的事务,也就是在当前事务完成前不接收其他指令。这样设计的好处是,事务处理单元一旦启动一条复杂指令的处理,就可以按照一个预先设定好的流程进行,期间无需考虑其他访存请求的干扰,功能简单,易于硬件实现。若要支持同时处理多条复杂指令,只需支持事务级的并行,即硬件实例化多个事务处理单元,简单方便。

处理器系统(Processing System)202:用于生成复杂访存指令,并为该复杂访存指令分配访存地址,并将该复杂访存指令所调用的地址、该地址所对应的写入数据以及该写入数据的数据量集合为所需数据,并向执行模块发送访存指令,包括但不限于上文所述多种复杂访存指令。

扩展内存(Extended Memory)203:作为扩展的存储器使用,用于存储处理器系统202执行复杂访存指令过程中的运算数据,运算数据包括:处理器系统发送的写入数据,内存扩展芯片解析复杂指令之后,产生的一系列写指令所对应的写数据,即运算数据包括所需数据的一部分,所需数据也只包括运算数据的一部分,即两者有交集但非包含;需要注意的是,结果数据在某些复杂指令的情况下,返回的是扩展内存中的一部分运算数据;在另一些复杂指令的情况下,返回的是内存扩展芯片里记录的一些信息数据,与运算数据也是有交集但非包含的关系。

扩展内存203可以采用不同的存储介质实现。

数据缓冲器204:作为扩展内存203的高速缓存器使用。

内存总线(MemoryBus)205:是处理器系统202以及扩展内存203与执行单元201相连接的总线,这些类型的总线包括但不限于:DDRx(Double Data Rate,双倍数据速率)SDRAM总线、LPDDR(Low Power DDR,低功耗DDR)总线、或者Wide I/O总线。

数据缓存接口206:用于连接事务处理单元2011与数据缓冲器204,既可以自定义,也可以使用现有的总线,包括但不限于AXI总线。

事务处理单元支持复杂访存指令处理,给出其内部结构如图3所示,包括如下模块:

核心模块301:用于执行该指令类型所对应的处理流程,向该扩展内存发送读写请求,其功能为根据每一类访存指令的处理流程发送读写请求,相当于自定义的处理器。类似于传统处理器,其工作过程也会经过取指,译码,执行,访存和写回,不同的是上述过程可以并行进行。包括分支选择3011,启动控制3012,运算逻辑3013以及寄存器组3014。

其中,分支选择3011保证事务处理单元内部除辅助模块以外的所有子模块取指过程有序进行,上述“有序”是指按照当前事务所属复杂指令类别的处理流程进行。除辅助模块以外,事务处理单元内部所有模块都进行译码过程,如此所有模块都有专用的指令结构,可专注于自身的模块功能,简化设计,消除互相影响。启动控制3012的功能是,根据处理流程中当前步骤处理的需要,同时启动多个子模块,使得各子模块并行进行当前步骤。运算逻辑3013完成当前步骤所需的运算,其功能类似于传统处理器中的执行过程。寄存器组3014存储当前步骤执行和访存所需的必要数据,写回过程完成对寄存器组的更新。

辅助模块302:用于分别为该核心模块、该内存控制信息传输接口模块、该事务状态信息传输接口模块的内部RAM写入当前执行内容的配置信息和下一步执行内容的配置信息所在的RAM地址,具体包括其与事务处理单元内部其它各模块的连接由多个写RAM接口实现,为其它各模块的内部RAM写入数据,使每个模块的内部RAM的每个地址都存储着两部分内容,分别为完成自身模块当前步骤功能的配置信息和下一步骤配置信息所在的RAM地址。

事务状态信息传输接口模块303:连接事务处理单元与事务分析单元,用于通过分析该访存地址获取该复杂访存指令的指令类型,并向该处理器系统返回该核心模块的运行状态,该运行状态包括该繁忙状态、该空闲状态,传输所需事务状态信息。

内存控制信息传输接口模块304:连接事务处理单元与内存控制单元,用于根据该读写请求生成内存控制信息,并将该内存控制信息通过内存控制单元传输至该扩展内存。

数据缓存接口模块305:用于连接事务处理单元与数据缓冲器,传输所需数据缓冲信息。

为实现复杂访存指令的传输上述处理器系统还包括:

读请求模块,用于发送读取目标为该访存地址的读请求至该执行模块;

写请求模块,用于根据该读请求的返回数据,判断该执行模块是否处于空闲状态,若是,则发送写请求至该执行模块,否则继续调用该读请求模块,其中该写请求内容为请求该执行模块将该所需数据写入该访存地址;需要注意的是,这里的访存地址不是“该复杂访存指令所调用的地址”,因为经过内存扩展以后,后者很有可能远大于前者,对处理器系统来说,通过标准的DDR总线是访问不到所有的“调用地址”的。

结果数据接收模块,用于重复发送该读请求至该执行模块,根据该读请求的返回数据,判断该执行模块是否处于繁忙状态,若是,则再次重复发送该读请求至该执行模块,否则该处理器系统接收该结果数据。

上述模块具体工作步骤如图4所示,为了更加简明的说明具体工作步骤,下述为处理器系统发送一条复杂访存指令和接收处理结果的过程,包括下列步骤:

步骤401,处理器系统获取复杂访存指令的访存地址a和该复杂访存指令处理所需数据data,所需数据data包括该复杂访存指令所调用的地址、该地址所对应的写入数据以及该写入数据的数据量步骤402,处理器系统通过内存总线发送针对该访存地址a的读请求至执行模块。

步骤403,判断步骤402读请求返回数据是否等于例外标记数据1,为与其它数据区分,命名为SET_DATA。如果是,则执行步骤404,否则执行步骤402。返回的该例外标记数据1起到的作用是告知处理器系统,当前执行模块处于可执行复杂访存指令的空闲状态。

步骤402和步骤403的整体思路为,处理器系统通过发送读请求至执行模块,来查询当前执行模块是否处于可执行复杂访存指令的空闲状态,如果执行模块准备就绪(处于空闲状态)便执行接下来的步骤,否则一直查询,直到该执行模块处于空闲状态。

步骤404,处理器系统通过内存总线发送针对该访存地址a的写请求,写数据为data。

步骤405,根据重复发送指令机制和用户预先设定的时间间隔T(可配置的时间),在执行完步骤404后,等待T时间便重复发送读地址a请求至执行模块,以索要其结果数据。采用重复发送指令法的目的是,降低处理器系统在执行复杂访存指令时的处理压力。

步骤406,判断步骤405读请求返回数据是否等于例外标记数据2,为与其它数据区分,命名为FAKE_DATA。如果是,则执行步骤405,否则执行步骤407。返回的该例外标记数据2起到的作用是告知处理器系统,当前执行模块处于正在执行复杂访存指令的繁忙状态。

步骤407,处理器系统接收执行模块生成的结果数据,请求结束处理。

步骤405、步骤406和步骤407的整体思路为,处理器系统通过重复发送读请求至执行模块,来查询当前执行模块是否处理完成生成了结果数据,如果执行模块正在处理还没生成结果数据,则返回例外标记数据2,以告知处理器系统当前执行模块正忙,处理器系统便会隔T时间后再次重复发送读请求至执行模块,直到执行模块处理完成生成结果数据,将该结果数据返回给处理器模块。

图5是执行模块接收一条复杂访存指令和发送处理结果的过程,包括下列步骤:

步骤501,对应步骤402,事务分析单元收到一个读请求,访存地址a属于复杂访存指令对应地址范围。

步骤502,事务分析单元判断读地址a对应的事务表项是否可用,这里可用是指事务表项的状态信息对应位表明事务处理单元当前处于空闲状态。如果是,则执行步骤503,否则执行步骤511。

步骤503,对应步骤403中部分内容,事务分析单元更新事务表项的状态信息,返回例外标记数据1,即返回SET_DATA。

步骤504,对应步骤404,事务分析单元收到写地址a请求,更新事务状态信息,启动TPU。

步骤505,TPU根据事务状态信息和写数据data,按照预先设定好的复杂指令的处理流程,处理访存请求直到生成结果数据。

步骤506,对应步骤405,事务分析单元收到读地址a请求,检查事务状态信息。

步骤507,事务分析单元根据事务状态信息,判断TPU是否完成复杂指令处理,如果是,则执行步骤508,否则执行步骤512。

步骤508,事务分析单元更新事务表项的状态信息,向处理器系统返回复杂指令处理的结果数据。

步骤509,TPU根据事务状态信息,判断已返回数据给处理器系统,清空事务表项。

步骤510,请求结束处理。

步骤511,事务分析单元返回例外标记数据3,为与其它数据区分,命名为FAIL_DATA。返回的该例外标记数据3起到的作用是告知处理器系统,该地址a所对应的事务表项不可用,执行模块建立事务表项失败,处理器系统需要重复发送读地址a请求给执行模块。

步骤512,对应步骤406,事务分析单元返回例外标记数据2,即FAKE_DATA。

如图5所述的事务状态信息,是指事务分析单元和事务处理单元之间,由自定义事务状态信息传输接口传输的一组寄存器数据。之所以选用寄存器组而不是RAM,是因为查找对应的事务表项的信息时,如步骤502,根据命令可以并行。事务状态信息内容如图6所示,包括以下字段:

stage字段表示这是当前事务收到的第几个有效的读写命令,上述“有效”是指使事务处理进入新阶段,例如步骤503使stage字段更新为ENTRY_START,步骤504使stage字段更新为PROCESS_START,步骤508使stage字段更新为PROCESS_DONE;

{row,rmask}和{col,cmask}字段用于事务查找时的命令匹配,row表示行地址,col表示列地址,rmask与cmask表示是否参与检索,如果rmask和cmask都为置位状态(即为1)表明不参与比较,意味着这一项与任何命令都能匹配,通常用于处理新事务时分配事务表项;

data字段存储写命令的数据;

result字段存储当前事务当前阶段应返回给处理器系统的值,有四种可能值分别为:复杂指令处理的结果数据、例外标记数据1、例外标记数据2、例外标记数据3。

本发明的另一方法实施例:数据长度超出预设的单次传输阈值时复杂访存指令的传输,和上一实施例内容整体思路类似,只不过本实施例中的所需信息data或结果数据的数据长度超出了单次传输阈值。

其中该单次传输阈值是根据硬件水平来设定的,例如使用DDR3接口,该单次传输阈值就等于64字节,这个值是单次内存访问可以传输的最大数据量。

如上节所述复杂访存指令的传输方法(如图4和图5),当复杂访存指令数据data不能一次写完时,就需要将一个复杂访存指令拆分为多个复杂访存指令,增加了处理器系统的开销;类似的,为使事务分析单元向处理器系统返回的结果数据能够一次传输完成,也需要对返回的结果数据长度进行精细的设计,降低了设计的灵活性。

传统技术在面对数据超长问题时,会将一个复杂访存指令拆分为多个指令传输,本发明不会拆分一个复杂访存指令,而是在指令传输中,采用数据分批方法,提高了执行效率。

图7是处理器系统发送一条复杂访存指令和接收处理结果的过程,包括下列步骤:

步骤701,处理器系统确认复杂访存指令访存地址a,复杂访存指令处理所需信息data。根据data长度计算所需传输次数N,将data划分为多组所需子数据{data_1,……,data_N},设置当前传输次数n=1。

步骤702,处理器系统通过内存总线发送读地址a请求。

步骤703,判断步骤702读请求返回数据是否等于例外标记数据1,即SET_DATA。如果是,则执行步骤704,否则执行步骤702。

步骤704,处理器系统通过内存总线发送写地址a请求,写数据为data_n。

步骤705,判断n与N是否相等。如果是,则执行步骤706,否则执行步骤711。

步骤706,等待时间T,处理器系统发送读地址a请求。

步骤707,判断步骤706读请求返回数据是否等于例外标记数据2,即FAKE_DATA。如果是,则执行步骤706,否则执行步骤708。

步骤708,判断返回数据是否全部传输完成。如果是,则执行步骤710,否则执行步骤709。

步骤709,处理器系统发送读地址a请求。

步骤710,请求结束处理。

步骤711,将n加1。

如上述步骤708,判断返回数据是否全部传输完成的方法,包括但不限于以下方案:

处理器系统与事务分析单元预先约定,将返回数据的某一位(例如最高位)作为全部传输完成的状态标记信息,若该位为有效(置1),则表示全部传输完成;否则,表示还需要下一次传输。

图8是执行模块接收一条复杂访存指令和发送处理结果的过程,包括下列步骤:

步骤801,事务分析单元收到一个读请求,访存地址a属于复杂访存指令对应地址范围。

步骤802,事务分析单元判断读地址a对应的事务表项是否可用。如果是,则执行步骤803,否则执行步骤815。

步骤803,事务分析单元更新事务表项的状态信息,返回例外标记数据1,即SET_DATA。

步骤804,事务分析单元收到写地址a请求,写数据data_n。

步骤805,判断写数据data是否全部传输完成。如果是,则执行步骤806,否则执行步骤804。

步骤806,事务分析单元更新事务状态信息,启动TPU。

步骤807,TPU根据事务状态信息和写数据data,按照预先设定好的复杂指令处理流程,处理访存请求。

步骤808,事务分析单元收到读地址a请求,检查事务状态信息。

步骤809,事务分析单元根据事务状态信息,判断TPU是否完成复杂指令处理,如果是,则执行步骤810,否则执行步骤816。

步骤810,事务分析单元更新事务表项的状态信息,向处理器系统返回复杂指令处理的结果数据。

步骤811,判断是否返回全部结果数据,如果是,则执行步骤813,否则执行步骤812。

步骤812,等待处理器系统的读地址a请求,返回结果数据。

步骤813,事务分析单元更新事务表项的状态信息,TPU根据事务状态信息,判断已返回全部数据给处理器系统,清空事务表项。

步骤814,请求结束处理。

步骤815,事务分析单元返回例外标记数据3,即FAIL_DATA。

步骤816,事务分析单元返回例外标记数据2,即FAKE_DATA。

对应的stage字段变化为:步骤803使stage字段更新为ENTRY_START,步骤806使stage字段更新为PROCESS_START,步骤810使stage字段更新为PROCESS_DONE,步骤813使stage字段更新为TRANS_DONE。

如上述步骤805,判断写数据data是否全部传输完成的方法,类似步骤708,预先约定data_n的某一位标记全部传输完成的状态信息即可。

本发明的方法实施例:复杂访存指令的处理。图9是事务处理单元内部各模块协同工作完成一条复杂访存指令处理的过程,包括下列步骤:

步骤901,“核心模块”从事务状态信息传输接口模块得到事务状态信息。

步骤902,判断stage字段是否等于PROCESS_START,如果是,执行步骤903,否则执行步骤901。

步骤903,“分支选择”向各功能模块发送当前阶段的初始跳转地址(即更新各模块读RAM地址),上述“各功能模块”是指事务处理单元内部除“辅助模块”以外的其他各模块。

步骤904,各功能模块完成取指,译码,其中“启动控制”向其它各功能模块发送启动信号。

步骤905,各功能模块完成当前步骤执行、访存、写回。

步骤906,判断是否满足当前阶段的分支跳转条件,如果是,执行步骤907,否则执行步骤911。

步骤907,“分支选择”向“启动控制”发送停止信号,结束当前阶段。

步骤908,判断是否有下一阶段任务,如果是,执行步骤903,否则执行步骤909。

步骤909,更新事务状态信息。

步骤910,请求结束处理。

步骤911,更新各功能模块读RAM地址为下一步骤地址。

本发明的方法实施例:各功能模块的取指和译码。如上述步骤904,“各功能模块完成取指”是指如下过程:上述各功能模块在更新RAM地址后,读取内部RAM的该地址,得到当前步骤的配置信息和下一步骤地址。

各功能模块根据不同复杂访存指令的处理需要,在不同步骤可能有不同的功能。例如,“运算逻辑”在某些步骤的功能是地址递增,在另一些步骤的功能是相等比较。只有根据当前步骤的配置信息完成译码后,各功能模块当前步骤的具体功能才能确定。

图10给出各功能模块的内部RAM存储数据格式,上述“存储数据”即指配置信息和下一步骤地址,各功能模块根据数据格式可以完成译码,生成译码结果:

“运算逻辑”的内部RAM存储数据包括运算类型(cmd_type),立即数(immediate),第一路输入源选择(input1_sel),第二路输入源选择(input2_sel)和下一步骤地址(next_addr)。

“事务状态信息传输接口模块”的内部RAM存储数据包括复位使能(rst_en),返回数据使能(result_en),写数据使能(wrdat_en),返回特殊标记(fake_process),立即数(immediate),写数据源选择(wrdat_src),返回数据源选择(result_src)和下一步骤地址。

“寄存器组”的内部RAM存储数据包括寄存器源选择(source_needed),运算结果目标寄存器号(alu_dst),内存控制器读数据目标寄存器号(mc_dst),数据缓存读数据目标寄存器号(dc_dst),事务状态信息输入目标寄存器号(tsi_dst)和下一步骤地址。

“内存控制信息传输接口模块”的内部RAM存储数据包括读写类型(cmd_type),写数据掩码(data_mask),数据源选择(data_src),地址源选择(addr_src)和下一步骤地址。

“启动控制”的内部RAM存储数据包括当前线程握手状态(own_ack),启动禁止(module_en_n),启动使能(module_en)和下一步骤地址。其中,own_ack信号仅当另一线程在等待当前线程任务时才用到。

“数据缓存接口模块”的内部RAM存储数据包括读写类型,数据源选择,地址源选择和下一步骤地址。

本发明的方法实施例:各功能模块的执行、访存和写回

如上述步骤905,介绍各功能模块的执行、访存、写回过程如下:

“运算逻辑”根据译码结果,选定两路输入源,进行选定的运算,输出结果给“寄存器组”和“分支选择”。前者可能用于输入输出,也可能用于下一步的运算;后者用于判断是否满足当前阶段的分支跳转条件。

“事务状态信息传输接口模块”根据译码结果,选择对事务状态信息的读写。“内存控制信息传输接口模块”和“数据缓存接口模块”功能类似,区别在于,前者的读写类型由rst_en、result_en、wrdat_en、fake_process四种使能信号译码得出,后者的读写类型由cmd_type译码得出。

“寄存器组”的source_needed有四位,分别对应四种输入源。根据译码结果,将四种输入源写入其对应的各目标寄存器。

“启动控制”的module_en有六位,其中五位对应其他五个功能模块,另一位对应另一线程的“启动控制”。根据译码结果,选择六个模块的一个或多个启动。

本发明的方法实施例:指令处理的加速方法。

在支持并行方面,有三个维度的加速方法。

首先,实例化多个事务处理单元,实现事务级的并行。包括但不限于以下方案:

为每个bank各实例化一个事务处理单元;

与事务分析单元的传输接口,添加对bank地址的判断,在步骤902中添加一个判断条件:bank地址是否匹配。仅当bank地址匹配时,才执行后续步骤;

与内存控制单元的传输接口,添加对多个事务处理单元的读写请求的调度,使得一个内存控制单元可以接收多个事务处理单元的读写请求;

与数据缓冲器的传输接口不变,为每个事务处理单元各对应一个数据缓冲器。

其次,实例化多个核心模块,实现线程级的并行。包括但不限于以下方案:

核心模块实例化两份,将一条复杂访存指令的处理拆分为两个线程并行执行。例如在处理内存拷贝命令时,可以在一个线程内执行读内存数据,在另一个线程内执行写数据缓冲器;

若一个线程执行的快,另一个线程执行的慢,那么,当两个线程有数据交互时会出现错误,因此,需要保证两份核心模块的同步。具体的方法是:在每一份核心模块内部的“启动控制”中,添加其他线程使能信号,称为“other_control_en”。当这一信号置有效时,本线程当前任务要等待另一个线程任务执行完成,给出握手信号后,才能执行下一步任务。其他线程使能信号信息也由辅助模块写入“启动控制”的内部RAM;

与辅助模块的接口,添加两份核心模块内部RAM的写接口;

与事务分析单元的传输接口不变;

与内存控制单元的传输接口,为多出的一份核心模块添加传输接口以及对读写请求的处理;

与数据缓冲器的传输接口,为多出的一份核心模块添加传输接口以及对读写请求的处理。

最后,在执行当前步骤任务时,多个模块可以并行,上述多个模块包括“寄存器组”,“运算逻辑”,“事务状态信息传输接口模块”,“内存控制信息传输接口模块”,“数据缓存接口模块”。并行的方法已在上文讲述过,使用“启动控制”同时发送多个模块的启动信号即可。

以下为与上述系统实施例对应的方法实施例,本实施方法可与上述实施方式互相配合实施。上述施方式中提到的相关技术细节在本实施系统中依然有效,为了减少重复,这里不再赘述。相应地,本实施系统中提到的相关技术细节也可应用在上述实施方式中。

本发明还提出了一种支持复杂访存指令的内存扩展方法,其中包括:

复杂访存指令处理步骤,接收复杂访存指令,并为该复杂访存指令分配访存地址,并将该复杂访存指令所调用的地址、该地址所对应的写入数据以及该写入数据的数据量集合为所需数据;

内存扩展步骤,将处理器系统执行该复杂访存指令过程中的数据存储至扩展内存;

执行步骤,根据该访存地址和该所需数据执行该复杂访存指令,访问该扩展内存,生成结果数据返回至该处理器系统;

其中该执行步骤包括调用多个并行的事务处理单元,用于根据该复杂访存指令的指令类型,执行符合该指令类型的处理流程,并行访问该扩展内存,以生成该结果数据。

该支持复杂访存指令的内存扩展方法,其中该复杂访存指令处理步骤包括:

读请求步骤,发送读取目标为该访存地址的读请求至该执行步骤;

写请求步骤,用于根据该读请求的返回数据,判断该执行步骤的运行状态,若该执行状态为空闲状态,则进行该执行步骤处理该写请求,否则继续进行该读请求步骤,其中该写请求内容为请求该执行步骤将该所需数据写入该访存地址;

结果数据接收步骤,重复发送该读请求至该执行步骤,根据该读请求的返回数据,判断该执行步骤的运行状态是否处于繁忙状态,若是,则再次重复发送该读请求至该执行步骤,否则该处理器系统接收该结果数据。

该支持复杂访存指令的内存扩展方法,其中该事务处理单元包括:

核心模块,用于执行该指令类型所对应的处理流程,向该扩展内存发送读写请求;

事务状态信息传输接口模块,用于通过分析该访存地址,获取该复杂访存指令的指令类型,并向该处理器系统返回该核心模块的运行状态,该运行状态包括该繁忙状态、该空闲状态;

内存控制信息传输接口模块,连接该核心模块与该扩展内存,用于根据该读写请求生成内存控制信息,并将该内存控制信息传输至该扩展内存;

辅助模块,用于分别为该核心模块、该内存控制信息传输接口模块、该事务状态信息传输接口模块的内部RAM写入当前执行内容的配置信息和下一步执行内容的配置信息所在的RAM地址。

该支持复杂访存指令的内存扩展方法,其中该复杂访存指令处理步骤还包括:

根据该所需数据和预设的单次传输阈值,计算该所需数据的传输次数,将该所需数据分批传输至该执行步骤。

该支持复杂访存指令的内存扩展方法,其中该复杂访存指令包括:内存拷贝、预取读、冲刷写、分散聚集读、分散聚集写、清除、原子加、原子减、测试并置位、比较并交换。

虽然本发明以上述实施例公开,但具体实施例仅用以解释本发明,并不用于限定本发明,任何本技术领域技术人员,在不脱离本发明的构思和范围内,可作一些的变更和完善,故本发明的权利保护范围以权利要求书为准。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号