CN108027727B - 内存访问指令的调度方法、装置及计算机系统 - Google Patents
内存访问指令的调度方法、装置及计算机系统 Download PDFInfo
- Publication number
- CN108027727B CN108027727B CN201680004199.2A CN201680004199A CN108027727B CN 108027727 B CN108027727 B CN 108027727B CN 201680004199 A CN201680004199 A CN 201680004199A CN 108027727 B CN108027727 B CN 108027727B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory access
- instruction
- scheduling
- access instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本申请揭示了一种内存访问指令的调度方法、装置及计算机系统。该方法包括:调度器接收第一处理器核发送的第一内存访问指令以及第一内存屏障指令;如果该第一内存屏障指令为第一类型内存屏障指令,将该第一内存访问指令和该第一内存屏障指令调度至用于缓存第一处理器核所发送内存访问指令的第一调度队列;将多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给内存控制器。本发明减小了内存屏障指令对内存性能的影响,提高了并行度,且该方法未根据任一多版本机制的语义来优化内存调度,能够适用于多种多版本机制,在不同类型的多版本机制中均能提供内存顺序保证并提高内存访问性能。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种内存访问指令的调度方法、装置及计算机系统。
背景技术
现有技术中内存系统通常会运行多版本机制对内存数据进行更新,也即是,不直接对原有内存数据进行更新操作,而是为原有内存数据创建一个新的版本,对新版本的数据进行更新操作。另外,内存系统根据接收到的内存访问指令对内存数据进行访问,而在持久保存数据的场景下,需要严格控制多个内存访问指令的执行先后顺序,才能保证在系统故障时能够对内存数据进行恢复。
内存系统所运行的多版本机制可以有多种类型,如shadow updates(影更新),redo-logging(重做日志),undo-logging(撤销日志)等,这些多版本机制均可采用内存屏障指令来控制多个内存访问指令的执行先后顺序。
以控制第一内存访问指令和第二内存访问指令的执行先后顺序为例,在第一内存访问指令之后、第二内存访问指令之前可以插入内存屏障指令,使得该第一内存访问指令执行完成之后,第二内存访问指令才开始执行,从而保证了第二内存访问指令只能在第一内存访问指令执行之后执行,而不会与第一内存访问指令并行执行或提前执行。虽然内存屏障指令能够控制多个内存访问指令的执行先后顺序,但是也会导致一些原本可以并行执行的内存访问指令只能够串行执行,增加了内存访问时间,影响了内存访问性能。
为此,针对于常用的redo-logging多版本机制,提供了一种提高内存访问性能的方法,将redo logging多版本机制中的内存写请求分类为:Data(持久数据写请求)、Log(日志数据写请求)和Commit(日志控制项写请求),并基于此分类提出以下调度规则:
1、每个Commit之前有一个内存屏障指令,允许与Commit属于同一事务的Log调度至相应的内存屏障指令之前,与其他事务并行执行;
2、允许内存屏障指令之后的Commit调度至内存屏障指令之前,与其他事务的Data或Log并行执行。
然而,上述调度方法仅是根据redo logging多版本机制的语义来优化内存调度,仅适用于redo-logging多版本机制,而不适用于其它多版本机制。因此,亟需一种适用于多种多版本机制的内存访问指令调度方法,使得在内存系统的多版本机制不同时,仍能为其提供内存顺序保证且提高内存访问性能。
发明内容
为了克服现有技术中存在的问题,本发明提供一种内存访问指令的调度方法、装置及计算机系统。所述技术方案如下:
第一方面,提供了一种内存访问指令的调度方法,该调度方法应用于计算机系统中,该计算机系统包括内存控制器、调度器以及多个处理器核;该调度器分别与该内存控制器以及该多个处理器核连接,在该调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令。
为了优化内存调度,提供两种类型的内存屏障指令:第一类型内存屏障指令和第二内存屏障指令,第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序,作用域是处理器核,第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序,作用域是处理器,则该调度器可以根据内存屏障指令的类型,对接收到的内存访问指令进行调度。
具体为,以第一处理器核为例,当调度器接收到第一处理器核发送的第一内存访问指令以及在第一内存访问指令之后的第一内存屏障指令时,可以先判断该第一内存屏障指令是第一类型内存屏障指令还是第二内存屏障指令;当确定该第一内存屏障指令是第一类型内存屏障指令时,表示该第一内存屏障指令的作用域是该第一处理器核,则该调度器即可将该第一内存访问指令和该第一内存屏障指令调度至该多个调度队列中的第一调度队列,该第一调度队列是指与该第一处理器对应的、用于缓存该第一处理器核发送的内存访问指令的调度队列。同理地,可以采用相同的方式对其他处理器核发送的内存访问指令和第一类型内存屏障指令进行调度。
之后,每个调度队列可能都缓存有第一类型内存屏障指令,为了优化调度,该调度器可以先确定该多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令,并将确定出的内存屏障指令一起发送给该内存控制器,从而减小内存调度时间。
通过提供第一类型内存屏障指令,可以根据第一类型内存屏障指令控制处理器核的内存访问指令的先后顺序,而不会对其他处理器核的内存访问指令造成限制,从而可以减小内存屏障指令对内存性能的影响,提高了并行度,而且,通过将多个调度队列中位于第一个第一类型内存屏障指令之前的内存访问指令一起发送至内存控制器,可以进一步提高并行度,且该方法未根据任一多版本机制的语义来优化内存调度,能够适用于多种多版本机制,在不同类型的多版本机制中均能提供内存顺序保证并提高内存访问性能。
结合第一方面,在第一方面的第一种可能实现方式中,在对内存访问指令进行调度时,该调度器可以先确定该至少一个内存访问指令中每个内存访问指令的优先级,该优先级由在内存访问指令被发送给该内存控制器之后待访问每个内存库bank的内存访问指令个数的最小值表示,能够体现调度该内存访问指令之后的并行度。后续过程中,可以根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,选取每个bank对应的优先级最高的内存访问指令,并向该内存控制器发送所选取的内存访问指令,之后再向该内存控制器发送第二类型内存屏障指令。
通过根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,选取每个bank对应的优先级最高的内存访问指令,并向该内存控制器发送所选取的内存访问指令,使得调度器可以根据内存访问指令的优先级对各个bank的内存访问指令进行优化调度,进一步提高了并行度,节省了内存访问时间。
结合第一方面的上述任一种可能实现方式,在第一方面的第二种可能实现方式中,确定该至少一个内存访问指令的优先级的过程具体可以包括:按照每个调度队列中第一类型内存屏障指令的位置进行划分,得到多个分组,每个分组包括至少一个内存访问指令,之后,根据每个调度队列中的第一个分组获得待调度的内存访问指令集合T,统计T中访问每个bank的内存访问指令个数,并统计该T中每个分组中访问每个bank的内存访问指令个数,从而根据该T中访问每个bank的内存访问指令个数以及该T中每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级。
通过根据内存访问指令集合中访问每个bank的内存访问指令个数以及每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,作为每个分组内的内存访问指令的优先级,从而可以利用内存访问指令被发送至内存控制器后新的调度队列的并行度来表示内存访问指令的优先级,保证了按照内存访问指令的优先级进行调度时,新的调度队列的并行度更高,进一步提高了整体的并行度,提高了整体的内存访问性能。
结合第一方面的上述任一种可能实现方式,在第一方面的第三种可能实现方式中,可以采用以下公式,计算内存访问指令集合T中分组s的优先级:
W_b_s=min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),...(Xn-1-Ys_n-1+Ys+1_n-1)};
其中,b表示调度队列的序号,s表示当前所调度的分组在对应的调度队列中的序号,n表示bank的序号,W_b_s表示分组s的优先级;
Xn-1表示该T中访问bankn-1的内存访问指令个数;
Ys_n-1表示该T中分组s中访问bankn-1的内存请求个数;
Ys+1_n-1表示分组s+1中访问bankn-1的内存请求个数,其中分组s+1是指与分组s位于同一调度队列且位于分组s之后的分组,若分组s为调度队列中的最后一个分组,则Ys+1_n-1=0。
通过采用上述公式,计算每个分组的优先级,使得每个分组的优先级的计算更为精确,提高了精确度。
结合第一方面的上述任一种可能实现方式,在第一方面的第四种可能实现方式中,该调度器还可以接收该多个处理器核中的第二处理器核发送的第二内存访问指令以及该第二内存访问指令之后的第二内存屏障指令,且该第二内存屏障指令为该第一类型内存屏障指令,后续过程中,可以根据该第二内存访问指令和该第一内存访问指令所属线程的关联性,对该第二内存访问指令进行调度。具体为,当确定该第二内存访问指令所属的第二线程与该第一内存访问指令所属的第一线程是关联线程时,该调度器可以等待该第一调度队列中的内存访问指令执行完成,当确定该第一调度队列中已不存在内存访问指令时,即可将该第二内存访问指令以及该第二内存屏障指令调度至该第一调度队列。
通过判断不同处理器核发送的第一类型内存屏障指令对应的内存访问指令所属的线程是否为关联线程,并将所属的线程为关联线程的内存访问指令和对应的第一类型内存屏障指令调度至同一调度队列,能够将关联线程的内存访问指令在同一调度队列中进行调度,减小了内存屏障指令对整个处理器的影响,提高了内存访问性能。
结合第一方面的上述任一种可能实现方式,在第一方面的第五种可能实现方式中,在将该多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给该内存控制器之后,该调度器还可以将第二类型内存屏障指令发送给该内存控制器,从而在该至少一个内存访问指令之后插入第二类型内存屏障指令。
通过在该指令一个内存访问指令之后插入第二类型内存屏障指令,使得内存控制器中只存在第二类型内存屏障指令,则内存控制器仅需按照第二类型内存屏障指令对应的内存屏障机制进行调度,操作简便。
结合第一方面的上述任一种可能实现方式,在第一方面的第六种可能实现方式中,当确定任一处理器核发送的内存访问指令之后的内存屏障指令是第二类型内存屏障指令时,由于该第二类型内存屏障指令的作用域为整个处理器,则该调度器可以按照第二类型内存屏障指令对应的内存屏障机制进行调度。具体为,该调度器可以先等待所有调度队列中的内存访问指令均发送给内存控制器,当确定所有调度队列中均不存在内存访问指令时,即可将本次接收到的内存访问指令和该内存访问指令之后的第二类型内存屏障指令调度至与该处理器核对应的调度队列。
结合第一方面的上述任一种可能实现方式,在第一方面的第七种可能实现方式中,在确定第二内存访问指令所属的第二线程与第一内存访问指令所属的第一线程为关联线程之后,该调度器还可以向该第一处理器核发送停止发送通知,以通知该第一处理器核停止发送内存访问指令。
通过向该第一处理器核发送停止发送通知,对第一处理器核的内存访问指令进行控制,保证了第一类型内存屏障指令的作用域为运行关联线程的处理器核,减小了内存屏障指令对整个处理器的影响,提高了内存访问性能,节省了内存访问时间。
结合第一方面的上述任一种可能实现方式,在第一方面的第八种可能实现方式中,该调度器还可以在确定第二内存访问指令已调度至第一调度队列时,向第一处理器核发送允许发送通知,以通知用于通知第一处理器核发送内存访问指令。
通过在第二内存访问指令已调度至该第二调度队列时,向第一处理器核发送允许发送通知,解除了对第一处理器核发送内存访问指令的限制,保证了在第一调度队列中,当第一类型内存屏障指令对应的内存访问指令调度完成时,可以开始执行其他处理器核发送的内存访问指令。
结合第一方面的上述任一种可能实现方式,在第一方面的第九种可能实现方式中,在调度器将多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给内存控制器之后,该调度器还可以将位于任一调度队列最前端的第一类型内存屏障指令删除。
通过将位于任一第一调度队列最前端的第一类型内存屏障指令删除,使得调度器可以继续执行下一次调度,提高了调度效率。
结合第一方面的上述任一种可能实现方式,在第一方面的第十种可能实现方式中,在调度器接收到第三处理器核发送的第三内存屏障指令,且确定该第三内存屏障指令为第二类型内存屏障指令时,表示第三内存屏障指令的作用域为整个处理器核,则该调度器还可以向除第三处理器核以外的其他处理器核发送停止发送通知,以通知其他处理器核停止发送内存访问指令。
通过在确定第三内存屏障指令为第二类型内存屏障指令时,向除第三处理器核以外的其他处理器核发送停止发送通知,保证了第二类型内存屏障指令的作用域为处理器,有效控制了排他性内存访问指令的执行。
结合第一方面的上述任一种可能实现方式,在第一方面的第十一种可能实现方式中,在将第三内存访问指令和第三内存屏障指令调度至第三调度队列之后,该调度器还可以在确定第三内存访问指令调度完成时,向除第三处理器核以外的其他处理器核发送允许发送通知,以通知其他处理器核发送内存访问指令。
通过当确定第三内存访问指令调度完成时,向除第三处理器核以外的其他处理器核发送允许发送通知,解除了对其他处理器核的内存访问指令的限制,使得其他处理器核可以正常发送内存访问指令,保证了内存访问指令的有序执行。
第二方面,提供了一种调度器,该调度器应用于计算机系统中,该计算机系统包括内存控制器、该调度器以及多个处理器核;在该调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令,该调度器包括用于执行上述第一方面提供的内存访问指令的调度方法的模块。
第三方面,提供了一种计算机系统,该计算机系统包括处理器和内存控制器,该处理器包括调度器和多个处理器核,在该调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令;该调度器用于执行上述第一方面提供的内存访问指令的调度方法。
第四方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行上述第一方面中描述的任意一种内存访问指令的调度方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例的附图。
图1是本发明实施例提供的一种计算机系统的结构示意图;
图2是本发明实施例提供的一种内存访问指令的调度方法流程图;
图3是本发明实施例提供的一组内存访问指令的调度结果示意图;
图4是本发明实施例提供的调度队列示意图;
图5是本发明实施例提供的对内存访问指令的调度示意图;
图6是本发明实施例提供的一种内存访问指令的调度方法流程图;
图7是本发明实施例提供的内存访问指令的调度结果示意图;
图8是本发明实施例提供的一种调度器的结构示意图;
图9是本发明实施例提供的一种调度器的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种计算机系统的结构示意图,参见图1,该计算机系统包括内存控制器101、调度器102和多个处理器核103。
其中,该调度器102分别与该内存控制器101以及该多个处理器核103连接,且,在该调度器102中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令。
该调度器102用于维护该多个调度队列,也即是,该调度器102可以接收任一处理器核103发送的内存访问指令,将接收到的内存访问指令调度至对应的调度队列,并根据相应的规则将调度队列中的内存访问指令发送至内存控制器101。
另外,该内存控制器101还可以缓存有内存调度队列,该内存控制器101接收到调度器102发送的内存访问指令后,还可以将该内存访问指令调度至该内存调度队列。
另外,该计算机系统还可以包括内存104,该内存104与该内存控制器101连接,该内存控制器101可以向内存104发送内存访问指令,实现对内存104的访问。
具体地,当要访问内存104时,任一处理器核103发送的内存访问指令,将先进入该调度器102,调度器102会将该内存访问指令调度至任一调度队列,再根据相应的调度规则,将该调度队列中的内存访问指令发送至内存控制器101,之后再由该内存控制器101进行调度,实现对内存104的访问。
进一步地,该内存101可以包括多个bank(内存库)101,每个内存访问指令可以访问内存101中的任一bank。且访问不同bank的内存访问指令可以并行执行。
该调度器1031用于执行下述实施例所示的调度方法。
在图1所示的计算机系统的基础上,本发明实施例提供了一种应用于该计算机系统的内存访问指令的调度方法。图2是本发明实施例提供的一种内存访问指令的调度方法流程图,该方法的执行主体为如图1所示的调度器,参见图2,该内存访问指令的调度方法包括以下步骤:
201、该调度器接收该多个处理器核中的第一处理器核发送的第一内存访问指令以及该第一内存访问指令之后的第一内存屏障指令。
现有技术中可以采用内存屏障指令来控制多个内存访问指令的执行先后顺序,以保证正确的程序语义,但同时,内存屏障指令也会影响内存访问性能。例如,内存中可以配置多个bank,访问不同bank的内存访问指令可以并行执行,而内存屏障指令可能导致本来可以并行执行的内存访问指令只能串行执行,延长了内存访问时间。
以图3为例,图3中包括内存访问指令:A、B、C、D、E、F和G,且A、C、F和G访问bank0,B、D和E访问bank1,C后插入了内存屏障指令b1,F后插入了内存屏障指令b2。则虽然C和D访问不同的bank,能并行执行,但由于C和D之间存在内存屏障指令b1,所以只能在C执行完成之后,D才能开始执行,而不能并行执行C和D。
为了在采用内存屏障指令控制内存访问指令的执行先后顺序的同时,提高内存访问性能,本发明实施例提供了一种支持通用多版本机制的内存访问指令的调度方法。
本发明实施例中添加了调度器,在任一处理器核向内存控制器发送内存访问指令的过程中,先将内存访问指令和内存访问指令之后的内存屏障指令发送至调度器,由调度器根据接收的内存屏障指令将接收到的内存访问指令发送至内存控制器。其中,调度器缓存有调度队列,该调度队列用于缓存待调度的内存访问指令,该调度器可以将内存访问指令通过该调度队列调度至内存控制器。内存控制器缓存有内存调度队列,可以将调度器发送的内存访问指令通过内存调度队列进行调度,以访问内存。
其中,调度器可以缓存有多个调度队列,内存控制器也可以缓存有多个内存调度队列。且每个调度队列和每个内存调度队列可以为先进先出队列。
202、该调度器确定该第一内存屏障指令为第一类型内存屏障指令,该第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序。
为了进一步解决现有技术中内存屏障指令导致的内存访问性能较低的问题,本发明实施例提供了两种类型的内存屏障指令:第一类型内存屏障指令和第二类型内存屏障指令。
第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序,作用域为处理器核,即如果任一处理器核在发送的内存访问指令之后插入了第一类型内存屏障指令,表示该第一类型内存屏障指令之前的内存访问指令执行完成以后,才能执行该第一类型内存屏障指令之后的、指定处理器核发送的内存访问指令,此时,除指定处理器核之外的其他处理器核发送的内存访问指令可以与上述内存访问指令并行执行。其中,该指定处理器核为与发送该内存访问指令的处理器核相同的处理器核或者关联的处理器核,可以包括单个处理器核或者多个处理器核,本发明实施例对此不做限定。
第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序,作用域为处理器,即如果任一处理器核在发送的内存访问指令之后插入了第二类型内存屏障指令,表示该第二类型内存屏障指令之前的内存访问指令执行完成以后,才能执行该第二类型内存屏障指令之后的、处理器中任一处理器核发送的内存访问指令。
例如,处理器中包括相互独立的处理器核X和Y,若处理器核X向调度器发送了内存访问指令1,并在内存访问指令1之后发送第一类型内存屏障指令,表示相同处理器核和关联处理器核发送的内存访问指令需要在内存访问指令1执行完成之后才能执行,因此,处理器核X之后发送的内存访问指令2将不能与内存访问指令1并行执行,而处理器核Y发送的内存访问指令3可以与内存访问指令1并行执行。
而如果处理器核X向调度器发送了内存访问指令1,并在内存访问指令1之后发送第二类型内存屏障指令,表示处理器中的任一处理器核发送的内存访问指令均需要在内存访问指令1执行完成之后才能执行,因此,处理器核X之后发送的内存访问指令2以及处理器核Y发送的内存访问指令3均不能与内存访问指令1并行执行,只能等到内存访问指令1执行完成之后才能执行。
基于上述两种类型的内存屏障指令,在实际应用中,可以在系统库中增加原语,为程序员提供内存屏障指令的API(Application Programming Interface,应用程序编程接口),使得程序员可以利用该API对处理器运行的程序进行写控制,为程序写入不同类型的内存屏障指令,实现对多种多版本机制的支持。
另外,程序员还可以在平衡多版本机制的语义和内存访问性能的基础上,选择不同类型的内存屏障指令。具体地,当某一处理器核运行的线程具有排它性(Exclusive)时,表示该处理器核运行的线程不能与其他处理器核运行的线程并行执行,则可以选用第二类型内存屏障指令来控制该线程的读写顺序;而当某一处理器核运行的线程不具有排他性(Non-exclusive)时,则可以选用第一类型内存屏障指令来控制该线程的读写顺序。
则为了根据不同类型的内存屏障指令来控制线程的读写顺序,当该调度器接收到任一处理器核发送的内存访问指令以及该内存访问指令之后的内存屏障指令时,可以先确定该内存屏障指令的类型,也即是,判断该内存屏障指令是第一类型内存屏障指令还是第二类型内存屏障指令,之后,再根据不同类型的内存屏障指令执行不同的步骤。
需要说明的一点是,该第一处理器核可以为该多个处理器核中的任一处理器核,本发明实施例对此也不做限定。
需要说明的另一点是,本发明实施例仅以该第一处理器核发送的第一内存屏障指令为第一类型内存屏障指令为例,当确定该第一内存屏障指令为第一类型内存屏障指令时,即可执行下述步骤203-206。另外,该调度器还可能接收到第二类型内存屏障指令,此时可根据下述图6所示实施例中的方法,对该第二类型内存屏障指令对应的内存访问指令进行调度,本发明实施例对此不做限定。
203、该调度器将该第一内存访问指令和该第一内存屏障指令调度至该多个调度队列中的第一调度队列,该第一调度队列用于缓存该第一处理器核发送的内存访问指令。
当确定该第一内存屏障指令为第一类型内存屏障指令时,表示该第一处理器核运行的线程不具有排他性,则该调度器可以将该第一内存访问指令和该第一内存屏障指令调度至与该第一处理器核对应的第一调度队列,而无需限制其他处理器核发送内存访问指令。本发明实施例中,当处理器核运行的线程不具有排他性时,还存在以下两种情况:
1)如果某一处理器运行的线程是独立无冲突线程,也即是,该处理器核运行的线程与其他任一处理器核运行的线程均不是关联线程,该处理器核对应一个独立的调度队列,该调度队列只用于缓存该处理器核发送的内存访问指令。则当该处理器核在运行该线程的过程中,如果向该调度器发送了内存访问指令,该调度器会直接将该内存访问指令调度至该处理器核对应的调度队列中。
2)如果任两个处理器核运行的线程互为关联线程,该任两个处理器核对应于同一调度队列,则当该两个处理器核在运行互为关联线程的两个线程的过程中,如果向该调度器发送了内存访问指令,该调度器会将该两个处理器核发送的内存访问指令调度至同一调度队列,也即是,该调度队列用于缓存该两个处理器核发送的内存访问指令。
其中,两个线程为关联线程是指这两个线程具有共享数据。两个线程是否为关联线程可以由计算机系统的编译器判断,例如,该编译器可以预先判断多个线程之间是否互为关联线程,并将确定出互为关联线程的线程储存在关联列表中,则该调度器即可通过查找该关联列表,判断任两个线程是否互为关联线程。
两个处理器核对应于同一调度队列,如果其中一个处理器核发送的内存访问指令被调度至该调度队列,则为了保证内存访问指令的有序执行,另一处理器核将不能再发送内存访问指令。
因此,当该第一处理器核发送的第一内存访问指令所属的线程与其他处理器核运行的线程为关联线程时,该调度器在接收到该第一内存访问指令和该第一内存屏障指令时,向其他关联的处理器核发送停止发送通知,该停止发送通知用于通知关联的处理器核停止发送内存访问指令。该调度器可以等待该第一调度队列中的内存访问指令调度完成,确定该第一调度队列中的内存访问指令已经被发送给该内存控制器时,将该第一内存访问指令和该第一内存屏障指令调度至该多个调度队列中的第一调度队列。
在后续过程中,当确定该第一内存访问指令和该第一内存屏障指令已发送至该内存控制器,该调度器即可向该关联的处理器核发送允许发送通知,该允许发送通知用于通知该关联的处理器核发送内存访问指令。
本发明实施例中,假设该第一处理器核运行的线程与第二处理器核运行的线程为关联线程,该第二处理器核可以为该多个处理器核中除该第一处理器核之外的任一处理器核,本发明实施例对此不做限定。该调度器在接收到该第一内存访问指令和该第一内存屏障指令时,确定该第一调度队列中的内存访问指令已经被发送给该内存控制器,将该第一内存访问指令和该第一内存屏障指令调度至该多个调度队列中的第一调度队列。并向该第二处理器核发送停止发送通知,该停止发送通知用于通知该第二处理器核停止发送内存访问指令。
之后,当确定该第一内存访问指令和该第一内存屏障指令已发送至该内存控制器,即可向该第二处理器核发送允许发送通知,该允许发送通知用于通知该第二处理器核发送内存访问指令。
204、该调度器将该多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给该内存控制器。
通过执行上述步骤,每个调度队列可能都缓存有一个或多个内存访问指令,且任两个调度队列中的内存访问指令所属的线程均不是关联线程,也即是不同调度队列中的内存访问指令可以并行执行,因此,该调度器可以将所有调度队列中的第一类型内存屏障指令之前的至少一个内存访问指令一起发送给该内存控制器。
在第一种可能实现方式中,该调度器可以将所有调度队列中第一个第一类型内存屏障指令之前的内存访问指令进行组合,一起发送给该内存控制器,并在之后将第二类型内存屏障指令发送给该内存控制器,以将该内存访问指令序列和该第二类型内存屏障指令调度至该内存调度队列。之后,为了进行下一次的调度,该调度器可以将位于任一调度队列最前端的第一类型内存屏障指令删除。
本发明实施例中,通过利用线程的并行性将第一个第一类型内存屏障指令之前的内存访问指令一起调度,并将多个第一类型内存屏障指令替换为一个第二类型内存屏障指令,从而减小了总体内存屏障指令的数目,增加了内存系统中调度序列的bank并行度,减小了内存访问时间。
需要说明的是,内存访问指令可以包括读请求和写请求等不同类型的请求,在进行调度时,可以将不同类型的内存访问指令一起进行调度,也可以将不同类型的内存访问指令分别进行调度,在一种类型的内存访问指令全部调度完成后,再调度另一种类型的内存访问指令。本发明实施例对此不做限定。
例如,若处理器包括4个处理器核,每个处理器核运行1个线程,且该4个线程使用不同的logging多版本机制,互相均不是关联线程,其中,该4个线程使用的logging多版本机制分别为redo-logging、locking、locking以及undo-loging,则该调度器可以将该4个处理器核发送的内存访问指令分别调度至每个处理器核对应的调度队列中,也即是,BROI 1、BROI 2、BROI3和BROI4中,如图4中的a图所示。
其中,图4中的a图中的第一行表示调度队列BROI 1、BROI 2、BROI3和BROI4,内存访问指令之间的虚线表示现有技术中的内存屏障指令;第二行表示按照对应的多版本机制的语义进行分类后,每个调度队列中需要调度的内存访问指令类别;第三行表示每个调度队列中对应的内存访问指令所要访问的bank序号,虚线表示本发明实施例中的第一类型内存屏障指令;第四行表示每个调度队列中内存访问指令的序号,例如,1.1表示BROI 1中的第1个内存访问指令,2.2表示BROI 2中的第2个内存访问指令等。假设上述内存访问指令中的3.1、3.2、3.3为写请求,其他的为读请求。
则先对写请求3.1、3.2、3.3进行调度之后,针对于其他的读请求,现有技术中,可以基于不同的logging多版本机制的调度规则,根据如图4中的a图中第二行所示的内存访问指令的类别,将内存访问指令调度至内存控制器的内存调度队列,调度结果如图4中的b图所示。由图4中的b图可以看出,由于不同多版本机制的语义混杂,难以优化调度,调度后的内存访问指令在各bank中的并行度较小,花费时间较长。
而本发明实施例中,若采用步骤204的第一种可能实现方式,如图5所示,该调度器可以将BROI 1、BROI 2、BROI3和BROI4中第一个第一类型内存屏障指令之前的内存访问指令:1.1、1.2、2.1、4.1一起调度至内存控制器,并在调度的过程中在这些内存访问指令之后插入第二类型内存屏障指令,发送至内存控制器的内存调度队列,之后,该调度器可以清除所有调度队列最前端的第一类型内存屏障指令,进行下一次调度,直至调度结束。最后的调度结果如图4中的c图所示,将图4中的c图与图4中的b图进行比较可以明显看出,与现有技术相比,采用第一种可能实现方式提高了并行度,减少了内存屏障指令的数目,节省了内存访问时间。
在第二种可能实现方式中,步骤204包括步骤2041-2044:
2041、确定该至少一个内存访问指令的优先级,该优先级由在内存访问指令被发送给该内存控制器之后待访问每个内存库bank的内存访问指令个数的最小值表示。
具体地,确定该至少一个内存访问指令的优先级的过程包括:
1)、按照每个调度队列中第一类型内存屏障指令的位置进行划分,得到多个分组,每个分组包括至少一个内存访问指令。
2)、根据每个调度队列中的第一个分组获得待调度的内存访问指令集合T。其中,每个调度队列中的第一个分组为每个调度队列的当前待调度分组,该调度器可以将每个调度队列中第一个分组添加至一个集合,得到待调度的内存访问指令集合。为了便于说明,本发明实施例将待调度的内存访问指令集合用T表示。
例如,参见图4中的a图和图5,以图4中的BROI1为例,按照s_barrier的位置可以划分为3个Seg:Seg0{1.1、1.2}、Seg1{1.3}、Seg2{1.4}。将每个调度队列中第一个分组添加至T后,T即为{1.1,1.2,2.1,4.1}。
3)统计T中访问每个bank的内存访问指令个数。
其中,统计T中访问每个bank的内存访问指令个数,也即是统计每个bank在T中对应的内存访问指令个数。
例如,统计T中访问bank0、bank1...bankn-1的内存访问指令个数,分别为X0、X1...Xn-1。
4)统计T中的每个分组中访问每个bank的内存访问指令个数。
例如,统计每个分组Seg中访问bank0、bank1...bankn-1的内存访问指令个数。参见图5,以Seg0{1.1、1.2}为例,Seg0中访问bank0的内存访问指令个数Y0_0为0,Seg0中访问bank1的内存访问指令个数Y0_1为2。
5)根据T中访问每个bank的内存访问指令个数以及T中的每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级。
具体地,可以采用以下公式进行计算T中分组s的优先级:
W_b_s=min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),...(Xn-1-Ys_n-1+Ys+1_n-1)};
其中,b表示调度队列的序号,s表示当前所调度的分组在对应的调度队列中的序号,n表示bank的序号,W_b_s表示分组s的优先级,分组s可以为T中的任一分组,也即是任一个调度队列的当前待调度分组;
Xn-1表示T中访问bank n-1的内存访问指令个数;
Ys_n-1表示T中的分组s中访问bank n-1的内存请求个数;
Ys+1_n-1表示分组s+1中访问bank n-1的内存请求个数,其中本发明实施例对每个调度队列单独进行编号,同一调度队列中的分组依次编号,分组s+1是指与分组s位于同一调度队列且位于分组s之后的分组,若分组s为调度队列中的最后一个分组,则Ys+1_n-1=0。其中,s为大于或等于0的整数,n为正整数。
其中,Xn-1-Ys_n-1+Ys+1_n-1表示:假设将分组s中的内存访问指令调度至内存调度队列,并将分组s+1中的内存访问指令添加至T后,形成新的内存访问指令集合T’后,T’中访问bank n-1的内存访问指令的个数。若内存包括bank0和bank1,且T’中访问bank0的内存访问指令的个数为较大值j,但是访问bank1的内存访问指令的个数为较小值k,则T’中能够并行访问bank0和bank1的内存访问指令即为k。因此,对T’进行调度时的并行度大小取决于T’中访问bank n-1的内存访问指令的个数的最小值min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),...(Xn-1-Ys_n-1+Ys+1_n-1)}。
则根据上述公式可以计算出每个分组的优先级W_b_s,而该每个分组的优先级W_b_s即可作为该每个分组内的内存访问指令的优先级。例如,若Seg0:{1.1、1.2}的优先级W_b_s为4,则Seg0中的内存访问指令1.1和1.2的优先级均为4。其中,W_b_s值越大,表示该分组内的内存访问指令的优先级越高,该调度器即可优先调度该分组内的内存访问指令。
通过上述计算方法,计算的优先级还可以表示内存访问指令调度至该内存调度队列后新的待调度的内存访问指令集合T的并行度。该并行度是指能够并行访问bank的数量。针对于每个待调度的内存访问指令,调度后所形成的T不同,并行度也不同。能够并行访问bank的数量越大,表示并行度越大,优先级越高;反之,能够并行访问bank的数量越小,表示并行度越小,优先级越低。
另外,由于内存访问指令包括读请求和写请求,且读请求和写请求之间存在总线turn around的时延,所以一般优先调度读请求,再调度写请求,因此,可以将读请求的优先级设为较高的值,将写请求的优先级设为较低的值,优先对读请求进行调度,后续过程中再对写请求进行调度,本发明实施例对此不做限定。
2042、根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,选取每个bank对应的优先级最高的内存访问指令。
该调度器得到T中每个内存访问指令的优先级后,即可按照优先级调度T中访问各个bank的请求。
具体地,该调度器得到T中每个内存访问指令的优先级后,可以确定每个内存访问指令访问的bank,并根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,选取每个bank对应的优先级最高的内存访问指令。例如,若该内存中包括bank0-bank3,则该调度器可以分别选取访问bank0的内存访问指令中优先级最高的内存访问指令、访问bank1的内存访问指令中优先级最高的内存访问指令、访问bank2的内存访问指令中优先级最高的内存访问指令以及访问bank3的内存访问指令中优先级最高的内存访问指令。
其中,若任一bank对应的优先级最高的内存访问指令有多个,则该调度器可以随机选取该多个内存访问指令中的任一个或多个内存访问指令,本发明实施例对此不做限定。
2043、向该内存控制器发送选取的内存访问指令。
也即是,该调度器可以将选取的内存访问指令一起发送至该内存控制器,且该内存控制器接收到该内存访问指令后,可以将该内存访问指令调度至内存控制器中的内存调度队列。
需要说明的是,本发明实施例仅是以该多个调度队列中位于第一个第一类型内存屏障指令之前的内存访问指令有多个为例进行说明,而实际应用中,当该多个调度队列中位于第一个第一类型内存屏障指令之前的内存访问指令只要一个时,该调度器还可以无需计算优先级,直接将该一个内存访问指令发送至内存控制器。本发明实施例对位于第一个第一类型内存屏障指令之前的内存访问指令有一个还是多个不做限定。
2044、向该内存控制器发送第二类型内存屏障指令。
其中,该第二类型内存屏障指令可以在该内存调度队列中位于该选取的内存访问指令之后,或者,该第二类型内存屏障指令进入内存调度队列的时间晚于选取的内存访问指令,本发明实施例对此不做限定。
也即是,该调度器可以在选取的内存访问指令之后插入第二类型内存屏障指令,并将选取的内存访问指令和该选取的内存访问指令之后的第二类型内存屏障指令一起发送至该内存控制器;或者,该调度器也可以在向该内存控制器发送选取的内存访问指令之后,向该内存控制器发送第二类型内存屏障指令,本发明实施例对此不做限定。
当该内存控制器接收到该调度器发送的内存访问指令和第二类型内存屏障指令之后,该内存控制器可以将该内存访问指令和该第二类型内存屏障指令调度至内存调度队列,之后,可以根据该第二类型内存屏障指令对应的调度规则将内存调度队列中的内存访问指令发送至内存,从而实现对内存的访问。
通过在发送选取的内存访问指令之后,向该内存控制器发送第二类型内存屏障指令,可以使得内存控制器中只存在第二类型内存屏障指令,则内存控制器仅需按照第二类型内存屏障指令对应的内存屏障机制进行调度,操作简便。
另外,当T中的任一分组已调度至该内存调度队列时,该调度器还可以将与该任一分组位于同一调度队列的下一分组添加至T,下一分组即成为调度队列的当前待调度分组。也即是,当某个调度队列中的第一类型内存屏障指令前的所有内存访问指令都调度完毕时,该调度器即可该第一类型内存屏障指令后的内存访问指令激活,并将之后的内存访问指令添加至内存访问指令集合,从而在调度的过程中,不断对内存访问指令集合进行更新,直至调度结束。
例如,以图4为例,若初始阶段内存访问指令集合T包括{1.1,1.2,2.1,3.1,3.2,3.3,4.1},则当该调度器将该T中的内存访问指令3.1、3.2和3.3调度至内存调度队列后,即可将内存访问指令3.4激活,也即是,将内存访问指令3.4调度至该T中,此时该T更新为{1.1,1.2,2.1,3.4,4.1}。之后,该调度器可以重复执行步骤2041-2044,继续对该内存调度队列中的内存访问指令进行调度,直至调度结束。
例如,若采用上述第二种可能实现方式对图4中的a图所示的调度队列进行合并调度,调度结果如图4中的d图所示。将图4中的c图和d图进行比较可以看出,第一种可能实现方式操作简单,容易实现,但可能导致bank并行度利用不完全,而第二种可能实现方式则可以充分利用bank并行度,进一步节省内存访问时间。
205、该调度器接收该多个处理器核中的第二处理器核发送的第二内存访问指令以及该第二内存访问指令之后的第二内存屏障指令,该第二内存屏障指令为该第一类型内存屏障指令。
206、该调度器确定该第二内存访问指令所属的第二线程与该第一内存访问指令所属的第一线程为关联线程,确定该第一调度队列中的内存访问指令已经被发送给该内存控制器,将该第二内存访问指令以及该第二内存屏障指令调度至该第一调度队列。
本发明实施例中,当确定该第二内存访问指令所属的第二线程与该第一内存访问指令所属的第一线程为关联线程时,表示该第一调度队列用于缓存该第一处理器和该第二处理器核发送的内存访问指令,而且,该第二内存访问指令和该第一内存访问指令不能并行执行。因此,当接收到第二处理器核发送的第二内存访问指令以及该第二内存访问指令之后的第二内存屏障指令,而且确定该第一调度队列中的内存访问指令已经被发送给该内存控制器时,该调度器再将该第二内存访问指令和第二内存屏障指令发送至用于缓存该第一处理器核和该第二处理器核发送的内存访问指令的第一调度队列。
另外,为了保证该第一调度队列中内存访问指令的执行顺序,该调度器将该第二内存访问指令调度至该第一调度队列后,可以向该第一处理器核发送停止发送通知,该停止发送通知用于通知该第一处理器核停止发送内存访问指令。
之后,该调度器可以等待该第一调度队列中的内存访问指令调度完成,当确定该第二内存访问指令已发送至该内存控制器,该调度器即可向该第一处理器核发送允许发送通知,该允许发送通知用于通知该第一处理器核发送内存访问指令。
本发明实施例中,通过将内存屏障指令分成两种类型的内存屏障指令,并利用两种不同的内存屏障机制进行控制,可以减少现有技术中内存屏障指令对处理器整体性能的影响,例如,当一个处理器核发出第一类型内存屏障指令时,最多仅会影响到相关联的处理器核的运行,而不会影响到整个处理器的运行。
综上所述,本发明实施例中,通过提供第一类型内存屏障指令,可以根据第一类型内存屏障指令控制处理器核的内存访问指令的先后顺序,而不会对其他处理器核的内存访问指令造成限制,从而可以减小内存屏障指令对内存性能的影响,提高了并行度,而且,通过将多个调度队列中位于第一个第一类型内存屏障指令之前的内存访问指令一起发送至内存控制器,可以进一步提高并行度,且该方法未根据任一多版本机制的语义来优化内存调度,能够适用于多种多版本机制,在不同类型的多版本机制中均能提供内存顺序保证并提高内存访问性能。
需要说明的是,上述实施例仅以接收到的内存屏障指令为第一类型内存屏障指令,并根据第一类型内存屏障指令对应的内存屏障机制对内存访问指令进行调度为例进行说明,而实际应用中,接收到的内存屏障指令也可能是第二类型内存屏障指令,接下来将以接收到第二类型内存屏障指令,并根据第二类型内存屏障指令对应的内存屏障机制对内存访问指令进行调度为例进行说明。图6是本发明实施例提供的一种内存访问指令的调度方法流程图,该方法的执行主体为如图1所示的调度器,参见图6,该方法包括:
601、该调度器接收该多个处理器核中的第三处理器核发送的第三内存访问指令以及该第三内存访问指令之后的第三内存屏障指令。
其中,该第三处理器核可以为该多个处理器核的任一处理器核,本发明实施例对此不做限定。
602、该调度器确定该第三内存屏障指令为第二类型内存屏障指令。
在接收到第三处理器核发送的第三内存访问指令以及该第三内存访问指令之后的第三内存屏障指令之后,需要先对该第三内存屏障指令的类型进行判断,也即是,判断该第三内存屏障指令是第一类型内存屏障指令还是第二类型内存屏障指令,再根据判断结果执行不同的调动步骤。本发明实施例仅以该第三内存屏障指令为第二类型内存屏障指令为例进行说明。
603、该调度器确定该多个调度队列中的所有内存访问指令都已经被发送给该内存控制器,将该第三内存访问指令和该第三内存屏障指令调度至第三调度队列,该第三调度队列用于缓存该第三处理器核发送的内存访问指令。
当确定该第三内存屏障指令为第二类型内存屏障指令时,表示该第三内存屏障指令的作用域为处理器,该第三内存访问指令不能与其他的内存访问指令并行执行,因此需要在确定该多个调度队列中的所有内存访问指令都已经被发送给该内存控制器,也即是所有调度队列中的内存访问指令调度完成时,才能将该第三内存访问指令和该第三内存屏障指令调度至该调度器的调度队列。
在确定该多个调度队列中的所有内存访问指令都已经被发送给该内存控制器之后,才对第三内存访问指令和该第三内存屏障指令进行调度,还可以保证该调度队列中仅有第二类型内存屏障指令,避免该调度器中同时包括第一类型内存屏障指令和第二类型内存屏障指令而导致调度混乱。
其中,缓存该第三处理器核发送的内存访问指令的第三调度队列可以预先分配,本发明实施例对此不做限定。
例如,参见图7,该调度器中包括4个调度队列,分别为:BROI1、BROI2、BROI3和BROI4,则当该多个调度队列中的所有内存访问指令都已经被发送给该内存控制器时,该调度器即可将内存访问指令4.1和4.1之后的第二类型内存屏障指令B调度至该第三处理器核对应的调度队列BROI4。
另外,当确定该第三内存屏障指令为第二类型内存屏障指令时,该调度器还可以向除该第三处理器核以外的其他处理器核发送停止发送通知,并等待该调度器中已经调度至调度队列的内存访问指令调度完成。
其中,该停止发送通知用于通知其他处理器核停止发送内存访问指令。则当其他处理器核接收到该停止发送通知时,即可停止向该调度器发送内存访问指令以及内存屏障指令。
之后,该调度器即可针对多个调度队列进行调度,即将第三内存访问指令发送给内存控制器,并将该第三内存屏障指令也发送给内存控制器。当确定该第三内存访问指令已经被发送给内存控制器之后,该调度队列中已没有第二类型内存屏障指令,此时,该调度器可以向除该第三处理器核以外的其他处理器核发送允许发送通知,该允许发送通知用于通知其他处理器核发送内存访问指令。则当其他处理器核接收到该调度器发送的允许发送通知时,即可正常向该调度器发送内存访问指令。
本发明实施例中,通过在确定内存屏障指令为第二类型内存屏障指令时,按照第二类型内存屏障指令对应的内存屏障机制进行调度,保证了第二类型内存屏障指令的作用域为处理器,有效控制了排他性内存访问指令的执行先后顺序。
结合上述两个实施例,在硬件上,本发明实施例采用调度器进行内存屏障保序控制以及内存访问指令的合并调度,实现了基于两级内存屏障机制来控制内存访问指令的执行先后顺序。具体地,该调度器包括控制逻辑和调度队列,该控制逻辑可以基于第一类型内存屏障指令对应的内存屏障机制和第二类型内存屏障指令对应的内存屏障机制,调度内存访问指令进出该调度队列,另外,该调度器还可以将内存访问指令一起调度,且调度至内存控制器中的内存访问指令序列之后仅存在第二类型内存屏障指令,从而使得该内存控制器的内存调度队列中仅存在第二类型内存屏障指令,则该内存控制器即可仅根据针对第二类型内存屏障指令的内存屏障机制对内存调度队列中的内存访问指令进行调度,操作较为简便。
在软件上,本发明实施例提供了两种类型的内存屏障指令:第一类型内存屏障指令和第二类型内存屏障指令。对于关联线程,可以采用第一类型内存屏障指令来控制内存访问指令的执行顺序;对于独立无冲突线程,可以采用第二类型内存屏障指令来控制内存访问指令的执行顺序。
本发明实施例通过提供两种类型的内存屏障指令,并利用线程的并行特性将第一类型内存屏障指令对应的内存访问指令一起调度,减少了内存屏障指令对内存访问性能的影响,而且,基于两级内存屏障机制,软件可支持多种多版本机制,相比于现有技术中对某种具体的多版本机制进行语义分析、根据事务进行调度的技术方案,本发明实施例可支持各种多版本机制、具有通用化的优点。另外,由于Non-exclusive线程对应的内存访问指令可以一起调度,本发明实施例通过对第一类型内存屏障指令之前的内存访问指令一起调度,减少了发送给内存控制器的内存屏障指令数目,提高了bank并行度,节省了内存访问时间。
综上所述,本发明实施例提供的方法,通过提供两种类型内存屏障指令:第一类型内存屏障指令和第二类型内存屏障指令,第一类型内存屏障指令的作用域为处理器核,第二类型内存屏障指令的作用域为整个处理器,并根据线程的并行性,将第一类型内存屏障指令之前的内存访问指令一起调动,减小了内存屏障指令对内存性能的影响,提高了并行度,减小了内存访问时间,且该方法未根据任一多版本机制的语义来优化内存调度,能够适用于多种多版本机制,在不同类型的多版本机制中均能提供内存顺序保证并提高内存访问性能。
图8是本发明实施例提供的一种调度器的结构示意图,该调度器应用于计算机系统中,该计算机系统包括内存控制器、该调度器以及多个处理器核;在该调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令,该调度器包括:
接收模块801,用于接收该多个处理器核中的第一处理器核发送的第一内存访问指令以及该第一内存访问指令之后的第一内存屏障指令;
确定模块802,用于确定该第一内存屏障指令为第一类型内存屏障指令,该第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序;
调度模块803,用于将该第一内存访问指令和该第一内存屏障指令调度至该多个调度队列中的第一调度队列,该第一调度队列用于缓存该第一处理器核发送的内存访问指令;
发送模块804,用于将该多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给该内存控制器。
本发明实施例提供的调度器,通过提供两种类型内存屏障指令:第一类型内存屏障指令和第二类型内存屏障指令,第一类型内存屏障指令的作用域为处理器核,第二类型内存屏障指令的作用域为整个处理器,并根据线程的并行性,将第一类型内存屏障指令之前的内存访问指令一起调动,减小了内存屏障指令对内存性能的影响,提高了并行度,减小了内存访问时间,且该调度器未根据任一多版本机制的语义来优化内存调度,能够适用于多种多版本机制,在不同类型的多版本机制中均能提供内存顺序保证并提高内存访问性能。
可选地,参见图9,该调度器还包括:
优先级确定模块805,用于确定该至少一个内存访问指令的优先级,该优先级由在内存访问指令被发送给该内存控制器之后待访问每个内存库bank的内存访问指令个数的最小值表示;
选择模块806,用于根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,从该至少一个内存访问指令中选取每个bank对应的优先级最高的内存访问指令;
该发送模块804,还用于向该内存控制器发送选取的内存访问指令,并向该内存控制器发送第二类型内存屏障指令,该第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序。
可选地,该优先级确定模块805还用于:
按照每个调度队列中第一类型内存屏障指令的位置进行划分,得到多个分组,每个分组包括至少一个内存访问指令;
根据每个调度队列中的第一个分组获得待调度的内存访问指令集合T;统计该T中访问每个bank的内存访问指令个数;
统计该T中每个分组中访问每个bank的内存访问指令个数;
根据该T中访问每个bank的内存访问指令个数以及该T中每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级。
可选地,该优先级确定模块805具体用于采用以下公式,计算该T中分组s的优先级:
W_b_s=min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),...(Xn-1-Ys_n-1+Ys+1_n-1)};
其中,b表示调度队列的序号,s表示当前所调度的分组在对应的调度队列中的序号,n表示bank的序号,W_b_s表示分组s的优先级;
Xn-1表示该T中访问bankn-1的内存访问指令个数;
Ys_n-1表示该T中分组s中访问bankn-1的内存请求个数;
Ys+1_n-1表示分组s+1中访问bankn-1的内存请求个数,其中分组s+1是指与分组s位于同一调度队列且位于分组s之后的分组,若分组s为调度队列中的最后一个分组,则Ys+1_n-1=0。
可选地:
该接收模块801,还用于接收该多个处理器核中的第二处理器核发送的第二内存访问指令以及该第二内存访问指令之后的第二内存屏障指令,该第二内存屏障指令为该第一类型内存屏障指令;
该确定模块802还用于:
确定该第二内存访问指令所属的第二线程与该第一内存访问指令所属的第一线程为关联线程;
确定该第一调度队列中的内存访问指令已经被发送给该内存控制器;
该调度模块803,还用于将该第二内存访问指令以及该第二内存屏障指令调度至该第一调度队列。
可选地,该发送模块804还用于:
在将该多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给该内存控制器之后,将第二类型内存屏障指令发送给该内存控制器,该第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序。
可选地:
该接收模块801,还用于接收该多个处理器核中的第三处理器核发送的第三内存访问指令以及该第三内存访问指令之后的第三内存屏障指令,该第三内存屏障指令为第二类型内存屏障指令,该第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序;
该确定模块802,还用于确定该多个调度队列中的所有内存访问指令都已经被发送给该内存控制器;
该调度模块803,还用于将该第三内存访问指令和该第三内存屏障指令调度至第三调度队列,该第三调度队列用于缓存该第三处理器核发送的内存访问指令。
本发明实施例图8和图9所提供的调度器可以参见前述实施例描述的内存访问指令的调度方法,具体的,各个模块功能的详细描述可参见前述实施例中对调度器的相关描述,在此不再赘述。
本发明实施例还提供一种内存访问指令的调度方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-Access Memory,RAM)、固态硬盘(Solid State Disk,SSD)或者其他非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。
Claims (18)
1.一种内存访问指令的调度方法,其特征在于,应用于计算机系统中,所述计算机系统包括内存控制器、调度器以及多个处理器核;所述调度器分别与所述内存控制器以及所述多个处理器核连接,在所述调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令,所述方法包括:
所述调度器接收所述多个处理器核中的第一处理器核发送的第一内存访问指令以及所述第一内存访问指令之后的第一内存屏障指令;
所述调度器确定所述第一内存屏障指令为第一类型内存屏障指令,所述第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序;
所述调度器将所述第一内存访问指令和所述第一内存屏障指令调度至所述多个调度队列中的第一调度队列,所述第一调度队列用于缓存所述第一处理器核发送的内存访问指令;
所述调度器将所述多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给所述内存控制器;
所述调度器将第二类型内存屏障指令发送给所述内存控制器,所述第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序。
2.根据权利要求1所述的方法,其特征在于,所述调度器将所述多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给内存控制器包括:
确定所述至少一个内存访问指令的优先级,所述优先级由在内存访问指令被发送给所述内存控制器之后待访问每个内存库bank的内存访问指令个数的最小值表示;
根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,从所述至少一个内存访问指令中选取每个bank对应的优先级最高的内存访问指令;
向所述内存控制器发送选取的内存访问指令。
3.根据权利要求2所述的方法,其特征在于,所述确定所述至少一个内存访问指令的优先级,包括:
按照每个调度队列中第一类型内存屏障指令的位置进行划分,得到多个分组,每个分组包括至少一个内存访问指令;
根据每个调度队列中的第一个分组获得待调度的内存访问指令集合T;
统计所述T中访问每个bank的内存访问指令个数;
统计所述T中每个分组中访问每个bank的内存访问指令个数;
根据所述T中访问每个bank的内存访问指令个数以及所述T中每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级。
4.根据权利要求3所述的方法,其特征在于,所述根据所述T中访问每个bank的内存访问指令个数以及所述T中每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级,包括:
采用以下公式,计算所述T中分组s的优先级:
W_b_s=min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),…(Xn-1-Ys_n-1+Ys+1_n-1)};
其中,b表示调度队列的序号,s表示当前所调度的分组在对应的调度队列中的序号,n表示bank的序号,W_b_s表示分组s的优先级;
Xn-1表示所述T中访问bankn-1的内存访问指令个数;
Ys_n-1表示所述T中分组s中访问bankn-1的内存请求个数;
Ys+1_n-1表示分组s+1中访问bankn-1的内存请求个数,其中分组s+1是指与分组s位于同一调度队列且位于分组s之后的分组,若分组s为调度队列中的最后一个分组,则Ys+1_n-1=0。
5.根据权利要求1所述的方法,其特征在于,还包括:
所述调度器接收所述多个处理器核中的第二处理器核发送的第二内存访问指令以及所述第二内存访问指令之后的第二内存屏障指令,所述第二内存屏障指令为所述第一类型内存屏障指令;
确定所述第二内存访问指令所属的第二线程与所述第一内存访问指令所属的第一线程为关联线程;
确定所述第一调度队列中的内存访问指令已经被发送给所述内存控制器;
将所述第二内存访问指令以及所述第二内存屏障指令调度至所述第一调度队列。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述调度器接收所述多个处理器核中的第三处理器核发送的第三内存访问指令以及所述第三内存访问指令之后的第三内存屏障指令,所述第三内存屏障指令为第二类型内存屏障指令,所述第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序;
确定所述多个调度队列中的所有内存访问指令都已经被发送给所述内存控制器;
将所述第三内存访问指令和所述第三内存屏障指令调度至第三调度队列,所述第三调度队列用于缓存所述第三处理器核发送的内存访问指令。
7.一种调度器,其特征在于,所述调度器应用于计算机系统中,所述计算机系统包括内存控制器、所述调度器以及多个处理器核;在所述调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令,所述调度器包括:
接收模块,用于接收所述多个处理器核中的第一处理器核发送的第一内存访问指令以及所述第一内存访问指令之后的第一内存屏障指令;
确定模块,用于确定所述第一内存屏障指令为第一类型内存屏障指令,所述第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序;
调度模块,用于将所述第一内存访问指令和所述第一内存屏障指令调度至所述多个调度队列中的第一调度队列,所述第一调度队列用于缓存所述第一处理器核发送的内存访问指令;
发送模块,用于将所述多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给所述内存控制器;
所述发送模块还用于:将第二类型内存屏障指令发送给所述内存控制器,所述第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序。
8.根据权利要求7所述的调度器,其特征在于,所述调度器还包括:
优先级确定模块,用于确定所述至少一个内存访问指令的优先级,所述优先级由在内存访问指令被发送给所述内存控制器之后待访问每个内存库bank的内存访问指令个数的最小值表示;
选择模块,用于根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,从所述至少一个内存访问指令中选取每个bank对应的优先级最高的内存访问指令;
所述发送模块,还用于向所述内存控制器发送选取的内存访问指令。
9.根据权利要求8所述的调度器,其特征在于,所述优先级确定模块还用于:
按照每个调度队列中第一类型内存屏障指令的位置进行划分,得到多个分组,每个分组包括至少一个内存访问指令;
根据每个调度队列中的第一个分组获得待调度的内存访问指令集合T;统计所述T中访问每个bank的内存访问指令个数;
统计所述T中每个分组中访问每个bank的内存访问指令个数;
根据所述T中访问每个bank的内存访问指令个数以及所述T中每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级。
10.根据权利要求9所述的调度器,其特征在于,所述优先级确定模块具体用于采用以下公式,计算所述T中分组s的优先级:
W_b_s=min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),…(Xn-1-Ys_n-1+Ys+1_n-1)};
其中,b表示调度队列的序号,s表示当前所调度的分组在对应的调度队列中的序号,n表示bank的序号,W_b_s表示分组s的优先级;
Xn-1表示所述T中访问bankn-1的内存访问指令个数;
Ys_n-1表示所述T中分组s中访问bankn-1的内存请求个数;
Ys+1_n-1表示分组s+1中访问bankn-1的内存请求个数,其中分组s+1是指与分组s位于同一调度队列且位于分组s之后的分组,若分组s为调度队列中的最后一个分组,则Ys+1_n-1=0。
11.根据权利要求7所述的调度器,其特征在于:
所述接收模块,还用于接收所述多个处理器核中的第二处理器核发送的第二内存访问指令以及所述第二内存访问指令之后的第二内存屏障指令,所述第二内存屏障指令为所述第一类型内存屏障指令;
所述确定模块还用于:
确定所述第二内存访问指令所属的第二线程与所述第一内存访问指令所属的第一线程为关联线程;
确定所述第一调度队列中的内存访问指令已经被发送给所述内存控制器;
所述调度模块,还用于将所述第二内存访问指令以及所述第二内存屏障指令调度至所述第一调度队列。
12.根据权利要求7所述的调度器,其特征在于:
所述接收模块,还用于接收所述多个处理器核中的第三处理器核发送的第三内存访问指令以及所述第三内存访问指令之后的第三内存屏障指令,所述第三内存屏障指令为第二类型内存屏障指令,所述第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序;
所述确定模块,还用于确定所述多个调度队列中的所有内存访问指令都已经被发送给所述内存控制器;
所述调度模块,还用于将所述第三内存访问指令和所述第三内存屏障指令调度至第三调度队列,所述第三调度队列用于缓存所述第三处理器核发送的内存访问指令。
13.一种计算机系统,其特征在于,所述计算机系统包括处理器和内存控制器,所述处理器包括调度器和多个处理器核,在所述调度器中缓存有多个调度队列,每个调度队列用于缓存待调度的内存访问指令;
所述调度器用于:
接收所述多个处理器核中的第一处理器核发送的第一内存访问指令以及所述第一内存访问指令之后的第一内存屏障指令;
确定所述第一内存屏障指令为第一类型内存屏障指令,所述第一类型内存屏障指令用于控制处理器核的多个内存访问指令的顺序;
将所述第一内存访问指令和所述第一内存屏障指令调度至所述多个调度队列中的第一调度队列,所述第一调度队列用于缓存所述第一处理器核发送的内存访问指令;
将所述多个调度队列中位于第一个第一类型内存屏障指令之前的至少一个内存访问指令发送给所述内存控制器;
将第二类型内存屏障指令发送给所述内存控制器,所述第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序。
14.根据权利要求13所述的系统,其特征在于,所述调度器具体用于:
确定所述至少一个内存访问指令的优先级,所述优先级由在内存访问指令被发送给所述内存控制器之后待访问每个内存库bank的内存访问指令个数的最小值表示;
根据每个内存访问指令的优先级以及每个内存访问指令访问的bank,从所述至少一个内存访问指令中选取每个bank对应的优先级最高的内存访问指令;
向所述内存控制器发送选取的内存访问指令。
15.根据权利要求14所述的系统,其特征在于,所述调度器具体用于:
按照每个调度队列中第一类型内存屏障指令的位置进行划分,得到多个分组,每个分组包括至少一个内存访问指令;
根据每个调度队列中的第一个分组获得待调度的内存访问指令集合T;
统计所述T中访问每个bank的内存访问指令个数;
统计所述T中每个分组中访问每个bank的内存访问指令个数;
根据所述T中访问每个bank的内存访问指令个数以及所述T中每个分组中访问每个bank的内存访问指令个数,计算每个分组的优先级,并将每个分组的优先级作为每个分组内的内存访问指令的优先级。
16.根据权利要求15所述的系统,其特征在于,所述调度器具体用于:
采用以下公式,计算所述T中分组s的优先级:
W_b_s=min{(X0-Ys_0+Ys+1_0),(X1-Ys_1+Ys+1_1),…(Xn-1-Ys_n-1+Ys+1_n-1)};
其中,b表示调度队列的序号,s表示当前所调度的分组在对应的调度队列中的序号,n表示bank的序号,W_b_s表示分组s的优先级;
Xn-1表示所述T中访问bankn-1的内存访问指令个数;
Ys_n-1表示所述T中分组s中访问bankn-1的内存请求个数;
Ys+1_n-1表示分组s+1中访问bankn-1的内存请求个数,其中分组s+1是指与分组s位于同一调度队列且位于分组s之后的分组,若分组s为调度队列中的最后一个分组,则Ys+1_n-1=0。
17.根据权利要求13所述的系统,其特征在于,所述调度器还用于:
接收所述多个处理器核中的第二处理器核发送的第二内存访问指令以及所述第二内存访问指令之后的第二内存屏障指令,所述第二内存屏障指令为所述第一类型内存屏障指令;
确定所述第二内存访问指令所属的第二线程与所述第一内存访问指令所属的第一线程为关联线程;
确定所述第一调度队列中的内存访问指令已经被发送给所述内存控制器;
将所述第二内存访问指令以及所述第二内存屏障指令调度至所述第一调度队列。
18.根据权利要求13所述的系统,其特征在于,所述调度器还用于:
接收所述多个处理器核中的第三处理器核发送的第三内存访问指令以及所述第三内存访问指令之后的第三内存屏障指令,所述第三内存屏障指令为第二类型内存屏障指令,所述第二类型内存屏障指令用于控制整个处理器的多个内存访问指令的顺序;
确定所述多个调度队列中的所有内存访问指令都已经被发送给所述内存控制器;
将所述第三内存访问指令和所述第三内存屏障指令调度至第三调度队列,所述第三调度队列用于缓存所述第三处理器核发送的内存访问指令。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/083339 WO2017201693A1 (zh) | 2016-05-25 | 2016-05-25 | 内存访问指令的调度方法、装置及计算机系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108027727A CN108027727A (zh) | 2018-05-11 |
CN108027727B true CN108027727B (zh) | 2020-09-08 |
Family
ID=60410956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680004199.2A Active CN108027727B (zh) | 2016-05-25 | 2016-05-25 | 内存访问指令的调度方法、装置及计算机系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108027727B (zh) |
WO (1) | WO2017201693A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399219B (zh) * | 2019-07-18 | 2022-05-17 | 深圳云天励飞技术有限公司 | 内存访问方法、dmc及存储介质 |
CN112783613B (zh) * | 2019-11-07 | 2024-03-01 | 北京沃东天骏信息技术有限公司 | 一种单元调度的方法和装置 |
CN115048296B (zh) * | 2022-06-09 | 2024-05-31 | 中金金融认证中心有限公司 | 用于对内存屏障指令有效性进行验证的方法和相关产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795878B2 (en) * | 2000-12-11 | 2004-09-21 | International Business Machines Corporation | Verifying cumulative ordering of memory instructions |
CN101950282A (zh) * | 2010-08-30 | 2011-01-19 | 中国科学院计算技术研究所 | 一种多处理器系统及其同步引擎 |
US8997103B2 (en) * | 2009-09-25 | 2015-03-31 | Nvidia Corporation | N-way memory barrier operation coalescing |
US9223578B2 (en) * | 2009-09-25 | 2015-12-29 | Nvidia Corporation | Coalescing memory barrier operations across multiple parallel threads |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706715B (zh) * | 2009-12-04 | 2013-01-23 | 龙芯中科技术有限公司 | 指令调度装置和方法 |
CN104407997B (zh) * | 2014-12-18 | 2017-09-19 | 中国人民解放军国防科学技术大学 | 带有指令动态调度功能的与非型闪存单通道同步控制器 |
-
2016
- 2016-05-25 CN CN201680004199.2A patent/CN108027727B/zh active Active
- 2016-05-25 WO PCT/CN2016/083339 patent/WO2017201693A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795878B2 (en) * | 2000-12-11 | 2004-09-21 | International Business Machines Corporation | Verifying cumulative ordering of memory instructions |
US8997103B2 (en) * | 2009-09-25 | 2015-03-31 | Nvidia Corporation | N-way memory barrier operation coalescing |
US9223578B2 (en) * | 2009-09-25 | 2015-12-29 | Nvidia Corporation | Coalescing memory barrier operations across multiple parallel threads |
CN101950282A (zh) * | 2010-08-30 | 2011-01-19 | 中国科学院计算技术研究所 | 一种多处理器系统及其同步引擎 |
Also Published As
Publication number | Publication date |
---|---|
WO2017201693A1 (zh) | 2017-11-30 |
CN108027727A (zh) | 2018-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4553936B2 (ja) | アウト・オブ・オーダーのdmaコマンドキューにおけるコマンド順序の設定に関する技術 | |
US9830189B2 (en) | Multi-threaded queuing system for pattern matching | |
US20150154045A1 (en) | Contention management for a hardware transactional memory | |
US8850131B2 (en) | Memory request scheduling based on thread criticality | |
US20150134912A1 (en) | Scheduler, multi-core processor system, and scheduling method | |
CN110727685B (zh) | 一种基于Cassandra数据库的数据压缩方法、设备以及存储介质 | |
CN108027727B (zh) | 内存访问指令的调度方法、装置及计算机系统 | |
US20130151784A1 (en) | Dynamic prioritization of cache access | |
US9164912B2 (en) | Conflict resolution of cache store and fetch requests | |
CN109101276A (zh) | 在cpu中执行指令的方法 | |
CN104978321A (zh) | 构造数据队列的方法、装置及从其插入和消费对象的方法 | |
US20160117118A1 (en) | System and methods for processor-based memory scheduling | |
JPWO2013001613A1 (ja) | スケジューリング方法およびシステム | |
CN118171612A (zh) | 一种指令缓存的优化方法、设备、存储介质及程序产品 | |
US8332595B2 (en) | Techniques for improving parallel scan operations | |
CN102799414B (zh) | 改进推测多线程的方法及装置 | |
CN107924310A (zh) | 使用避免转出表(pat)预测计算机处理器中的存储器指令转出 | |
US11782897B2 (en) | System and method for multiplexer tree indexing | |
US9417882B2 (en) | Load synchronization with streaming thread cohorts | |
US9311247B1 (en) | Method and apparatus for detecting patterns of memory accesses in a computing system with out-of-order program execution | |
KR20240121873A (ko) | 메모리 제어기에서 근접 메모리 프로세싱 커맨드들과 비-근접 메모리 프로세싱 커맨드들을 관리하기 위한 접근법 | |
US8484411B1 (en) | System and method for improving access efficiency to a dynamic random access memory | |
US6643718B1 (en) | Method and apparatus for controlling order dependency of items in a multiple FIFO queue structure | |
US10754842B2 (en) | Preplaying transactions that mix hot and cold data | |
US20220317926A1 (en) | Approach for enforcing ordering between memory-centric and core-centric memory operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |