发明内容
有鉴于此,为了克服上述问题的至少一个方面,本发明实施例提出一种指令搬移方法,包括以下步骤:
响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息;
检测每一个任务中的第一指针信息是否达到预设值;
响应于检测到第一指针信息达到预设值,置位相应任务的第一标记和第二标记;
响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述第一指针信息搬移对应的连续指令;
响应于所述连续指令搬移完成,恢复已置位的第一标记和第二标记。
在一些实施例中,响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息,进一步包括:
判断对应任务的第一指针信息是否为空;
响应于为空,记录所述IO请求下发时间并计时。
在一些实施例中,方法还包括:
响应于每一个任务中的第一指针信息均未达到预设值,判断是否存在超时的任务;
响应于存在超时的任务,置位超时任务的第一标记和第二标记;
响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述超时任务当前的第一指针信息搬移对应的连续指令;
响应于连续指令搬移完成,恢复所述超时任务已置位的第一标记和第二标记。
在一些实施例中,根据所述第一指针信息搬移对应的连续指令,进一步包括:
根据已搬移的指令更新第二指针信息;
响应于所述第二指针信息与所述第一指针信息相同,确定所述对应的连续指令搬移完成。
基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种指令搬移系统,包括:
第一更新模块,配置为响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息;
检测模块,配置为检测每一个任务中的第一指针信息是否达到预设值;
置位模块,配置为响应于检测到第一指针信息达到预设值,置位相应任务的第一标记和第二标记;
搬移模块,配置为响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述第一指针信息搬移对应的连续指令;
恢复模块,配置为响应于所述连续指令搬移完成,恢复已置位的第一标记和第二标记。
在一些实施例中,第一更新模块还配置为:
判断对应任务的第一指针信息是否为空;
响应于为空,记录所述IO请求下发时间并计时。
在一些实施例中,还包括判断模块,配置为:
响应于每一个任务中的第一指针信息均未达到预设值,判断是否存在超时的任务;
响应于存在超时的任务,置位超时任务的第一标记和第二标记;
响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述超时任务当前的第一指针信息搬移对应的连续指令;
响应于连续指令搬移完成,恢复所述超时任务已置位的第一标记和第二标记。
在一些实施例中,搬移模块还配置为:
根据已搬移的指令更新第二指针信息;
响应于所述第二指针信息与所述第一指针信息相同,确定所述对应的连续指令搬移完成。
基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机设备,包括:
至少一个处理器;以及
存储器,所述存储器存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时执行如上所述的任一种指令搬移方法的步骤。
基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时执行如上所述的任一种指令搬移方法的步骤。
本发明具有以下有益技术效果之一:本发明提出的方案可以实现连续指令的搬移,相较于传统的单指令搬移有着更高的总线效率,在空间局部性好的程序中,性能提升明显。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
根据本发明的一个方面,本发明的实施例提出一种指令搬移方法,如图3所示,其可以包括步骤:
S1,响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息;
S2,检测每一个任务中的第一指针信息是否达到预设值;
S3,响应于检测到第一指针信息达到预设值,置位相应任务的第一标记和第二标记;
S4,响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述第一指针信息搬移对应的连续指令;
S5,响应于所述连续指令搬移完成,恢复已置位的第一标记和第二标记。
本发明提出的方案可以实现连续指令的搬移,相较于传统的单指令搬移有着更高的总线效率,在空间局部性好的程序中,性能提升明显。
在一些实施例中,如图4所示,AEM(Acceleration Engine Manager,加速引擎管理)可以包括总线译码模块(bus decoder),任务创建模块(task generation),取指模块(instruction fetcher),指令缓存模块(instruction buffer),以及超时处理模块(timeout ctrl)。对比单指令搬移模式,多指令的搬移大小需要一定的条件才能执行。由于主机下发任务的随机性,因此,多指令的搬移需要增加超时处理机制,以防止主机下发的任务迟迟没有满足条件而没有机会执行。
在一些实施例中,如图5所示,总线译码模块的功能是根据主机端下发的任务从总线协议中解析出配置的尾指针及一些用于硬件处理需要的一些配置值。同时将AEM的处理指针,头指针的值更新到寄存器。通知主机指令的处理进度。该模块的结构图如图5所示:AEM需要的配置信息都从总线接口获取,不同的配置信息对应不同的地址,译码逻辑用于配置信息的获取。配置信息如:3类指针信息,队列的配置信息以及其他的一些配置信息等。模式选择信号根据信息的来源以及时机配置总线的读写操作。
在一些实施例中,步骤S1,响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息,具体的,如图6所示,任务创建模块用于根据主机下发的配置信息组建任务搬移信息以写入取指模块,等待取指模块处理指令的搬移操作。该模块可以支持多任务的处理,每一行信息代表主机下发的需要搬移的指令,该指令在主机侧必须是连续的,不连续的指令需要拆分成多个连续的指令进行处理,该操作由主机侧完成。其中,任务请求标记表示有待搬移的任务等待执行,其置位有两种方式:1.尾指针更新为预设值;2有任务超时。尾指针和处理指针标识AEM的处理进度。处理标记标识该任务的搬移操作还未完成,需要等待任务完成后才能发起新的处理请求。
需要说明的是,主机下发的IO请求可以通过总线译码模块中的不同通道发送到任务创建模块中相应的任务中,并更新相应任务中的尾指针信息(第一指针信息)。每一个IO代表一个独立的指令,通过更新尾指针参数,可以使得连续指令进行积累,从而达到阈值后,根据尾指针对应的参数确定连续指令的地址,以进行搬移。
多个指令的一次性搬移的好处就是对于空间连续的指令,只需要发起一次总线操作即可完成,对于空间局部性好的程序效率提升明显。同时由于缓存指令的队列由RAM组成,相对于寄存器的实现方式可以很好的节省一部分硬件面积。
在一些实施例中,响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息,进一步包括:
判断对应任务的第一指针信息是否为空;
响应于为空,记录所述IO请求下发时间并计时。
具体的,当任务中的第一指针信息为空时,为防止主机下发的任务迟迟没有满足条件而没有机会执行,根据首个接收到请求打下时间戳,开始计时,进入超时判断流程。
在一些实施例中,方法还包括:
响应于每一个任务中的第一指针信息均未达到预设值,判断是否存在超时的任务;
响应于存在超时的任务,置位超时任务的第一标记和第二标记;
响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述超时任务当前的第一指针信息搬移对应的连续指令;
响应于连续指令搬移完成,恢复所述超时任务已置位的第一标记和第二标记。
具体的,如图7所示,超时处理模块用于处理派发指令的超时请求,由于多指令的搬移操作是主机派发的,而主机派发的指令是随机的。根据具体的场景,当遇到空间局部性好的场景,指令的搬移一直满足搬移条件,搬移可以正常进行。当遇到空间局部性不好的场景,主机派发的任务可能是不连续的,导致每个进程可能都只有零星的一两个指令的搬移操作。在这种情况下,若主机一直不能下发满足搬移条件的新指令,那么零星的任务便不会被处理。这种场景下,就需要有超时处理机制,以保证为满足搬移条件的指令可以被搬移。
超时处理模块由计时器,比较器以及时间戳缓存组成。计数器上电后开始工作,当该模块接收到主机下发的任务请求时,将下发时刻的时间戳进行缓存。通过比较器判断每个任务的时延是否超时,如果超时,则将超时的任务请求派发到任务创建模块进行处理。正常处理完成的任务则退出超时处理流程。
根据请求标记(第一标记)判断是否有待处理的任务,若当前进程有未完成的任务时,根据配置信息计算需要搬移的位置和大小。判断搬移是否满足搬移的最小门限值,若满足,且当前没有其他任务的第二标记(处理标记标识)处于置位状态,即没有其他正在处理的任务,则将搬移信息写入到取指模块,等待搬移,并置位处理标记。若不满足,不做任何操作,直到有新的搬移任务下发,或者任务超时。对于超时的任务,置位请求标记,并且不需要判断是否满足搬移门限值,直接将全部指令一次性搬移。当任务正常执行完成后,将正常处理完成的任务从超时处理流程中退出。
在一些实施例中,S4,响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述第一指针信息搬移对应的连续指令,具体的,如图8所示,取指模块接收任务创建模块创建的任务,储存搬移信息,如搬移的基地址和搬移长度等,并请求总线,向总线发送这些信息,进行指令搬移操作。该模块由一块RAM和状态机组成,RAM用于储存搬移信息,状态机用于控制产生规定格式的总线数据包,数据包主要包括源地址,目的地址,搬移长度,其他控制信息等。当总线请求发出后,状态机控制逻辑更新处理指针,处理标记,以及删除超时处理模块中的时间戳信息(该操作正常完成,没有超时)。外部控制模块根据数据包解析信息进行DMA搬移操作。
在一些实施例中,根据所述第一指针信息搬移对应的连续指令,进一步包括:
根据已搬移的指令更新第二指针信息;
响应于所述第二指针信息与所述第一指针信息相同,确定所述对应的连续指令搬移完成。
具体的,如图9所示,指令缓存模块主要完成指令的缓存和头指针(第二指针)的更新操作。由RAM和控制状态机组成,控制状态机根据收到的指令个数更新头指针,用于标识AEM的指令处理状态。同时该模块也将收到的指令打包一些控制信息发送给后续的处理引擎进行处理。
本发明针对单指令搬移效率低的问题,提出了一种连续多指令的搬移方式。利用程序的局部性,可以将一段连续指令搬移到本地,在本地进行拆分处理,变成单个指令进行操作。这样做的目的是希望减少总线的配置频次,将原来需要多次配置的传输变成只需要一次就可以完成,以达到减少总线的访问频次,提高总线的利用率的目的。
基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种指令搬移系统400,如图10所示,包括:
第一更新模块401,配置为响应于接收到主机下发到IO请求,根据所述请求中携带的指令的地址参数更新对应任务中的第一指针信息;
检测模块402,配置为检测每一个任务中的第一指针信息是否达到预设值;
置位模块403,配置为响应于检测到第一指针信息达到预设值,置位相应任务的第一标记和第二标记;
搬移模块404,配置为响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述第一指针信息搬移对应的连续指令;
恢复模块405,配置为响应于所述连续指令搬移完成,恢复已置位的第一标记和第二标记。
在一些实施例中,第一更新模块401,还配置为:
判断对应任务的第一指针信息是否为空;
响应于为空,记录所述IO请求下发时间并计时。
在一些实施例中,还包括判断模块,配置为:
响应于每一个任务中的第一指针信息均未达到预设值,判断是否存在超时的任务;
响应于存在超时的任务,置位超时任务的第一标记和第二标记;
响应于检测到第一标记置位且当前没有其他任务的第二标记处于置位状态,根据所述超时任务当前的第一指针信息搬移对应的连续指令;
响应于连续指令搬移完成,恢复所述超时任务已置位的第一标记和第二标记。
在一些实施例中,搬移模块404还配置为:
根据已搬移的指令更新第二指针信息;
响应于所述第二指针信息与所述第一指针信息相同,确定所述对应的连续指令搬移完成。
基于同一发明构思,根据本发明的另一个方面,如图11所示,本发明的实施例还提供了一种计算机设备501,包括:
至少一个处理器520;以及
存储器510,存储器510存储有可在处理器上运行的计算机程序511,处理器520执行程序时执行如上的任一种指令搬移方法的步骤。
基于同一发明构思,根据本发明的另一个方面,如图12所示,本发明的实施例还提供了一种计算机可读存储介质601,计算机可读存储介质601存储有计算机程序指令610,计算机程序指令610被处理器执行时执行如上的任一种指令搬移方法的步骤。
最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。
此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。