CN107291629B - 一种用于访问内存的方法和装置 - Google Patents

一种用于访问内存的方法和装置 Download PDF

Info

Publication number
CN107291629B
CN107291629B CN201610225274.XA CN201610225274A CN107291629B CN 107291629 B CN107291629 B CN 107291629B CN 201610225274 A CN201610225274 A CN 201610225274A CN 107291629 B CN107291629 B CN 107291629B
Authority
CN
China
Prior art keywords
bus
memory
target
core
cache
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
Application number
CN201610225274.XA
Other languages
English (en)
Other versions
CN107291629A (zh
Inventor
黄罡
梁文亮
吴子旭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XFusion Digital Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201610225274.XA priority Critical patent/CN107291629B/zh
Priority to PCT/CN2017/076961 priority patent/WO2017177790A1/zh
Publication of CN107291629A publication Critical patent/CN107291629A/zh
Application granted granted Critical
Publication of CN107291629B publication Critical patent/CN107291629B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes

Abstract

本发明公开了一种访问内存的方法和装置,能够减少系统延迟,提高访问效率。该方法应用于计算机系统中,该计算机系统包括至少一个核、存储控制器MC、目标缓存和内存,各核经由第一总线与MC相连,目标缓存经由第二总线与MC相连,各核和目标缓存通过MC与内存相连,该方法包括:MC接收至少一个核中的第一核发送的第一内存访问请求,第一内存访问请求中携带有第一核请求访问的目标数据在内存中的地址的信息;MC根据目标地址的信息,从内存中读取目标数据;MC确定第一总线被占用;MC经由第二总线,向目标缓存发送目标数据,以将目标数据保存在目标缓存中。

Description

一种用于访问内存的方法和装置
技术领域
本发明涉及计算机领域,并且更具体地,涉及计算机领域中一种用于访问内存的方法和装置。
背景技术
在多核处理器中,采用多级存储架构,例如包括:第一级(Level 1,简称“L1”)缓存、第二级(Level 2,简称“L2”)缓存、第三级(Level 3,简称“L3”)缓存。L3通过存储控制器(Memory Controller,简称“MC”)与内存相连。从L1到内存,存储容量逐渐增大,访问时间也依次增加。在三级缓存多核架构下,每个核可以拥有独立的L1和L2缓存,而L3缓存则是多个核心共享的。
目前,已知一种技术,将L3缓存分成多个缓存切片(例如,最后级缓存(Last LevelCache,简称“LLC”)切片)。在处理器中,通过环形总线连接着各个核、LLC切片、图形处理单元(例如,图形处理器(Graphics Processing Unit,简称“GPU”))和系统代理(SystemAgent,或者说系统北桥)。系统代理通过MC与内存相连。
当核无法在私有的L1和L2缓存中找到所需数据,并且在共享的L3缓存中也无法找到所需数据时,则会通过系统代理经过MC在内存中查找。但是,MC只有一个,并且MC自身的缓存空间非常小,多个核同时需要访问内存时,就需要通过环形总线向MC发送内存访问请求,而对内存的访问速度比对L1、L2缓存的访问速度慢很多,就有可能造成在短时间内发生大量访问内存的请求。MC根据内存访问请求从内存中读取到的大量的数据暂存在MC的缓存空间中,需要通过环形总线发送给对应的核。
但是当环形总线处于繁忙状态时,MC就无法及时将从内存中读取到的数据发送给核。而MC中的缓存空间有限,大量的内存访问请求通过MC从内存中获取到大量的数据,使得MC的缓存空间不足以存放这么大量的数据,从而造成后续的内存访问请求无法及时处理,导致对内存访问的延迟。
发明内容
本申请提供一种用于访问内存的方法和装置,以缓解MC在环形总线繁忙时无法及时处理内存访问请求而造成的反应延迟,提高访问效率。
第一方面,本申请提供一种访问内存的方法,所述方法应用于计算机系统中,所述计算机系统包括至少一个核、存储控制器MC、目标缓存和内存,各所述核经由第一总线与所述MC相连,所述目标缓存经由第二总线与所述MC相连,所述MC与所述内存相连,所述方法包括:所述MC接收所述至少一个核中的第一核发送的第一内存访问请求,所述第一内存访问请求中携带有目标地址指示信息,所述目标地址指示信息用于指示所述第一核请求访问的目标数据在所述内存中的地址;所述MC根据所述目标地址指示信息,从所述内存中读取所述目标数据;当确定所述第一总线被占用时,所述MC经由所述第二总线,向所述目标缓存发送所述目标数据,以将所述目标数据保存在所述目标缓存中。其中,第一总线可以为环形总线,也可以为其他形式的用于连接各核和MC的总线。第一总线可以分成多个总线段,第一总线被占用可以理解为第一总线的部分或全部总线段处于繁忙状态。
因此,MC通过经由不同于第一总线的第二总线,将第一核请求从内存读取的目标数据保存在目标缓存中。也就是说,本发明实施例通过在MC与第一总线间增加了一条总线,在第一总线处于繁忙状态时,可以经由新增的第二总线在目标缓存中暂时保存核请求访问的目标数据,以使得MC中的缓存区得以释放,从而为后续的访问请求所读取的数据提供缓存空间。由此,可以缓解MC在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过目标缓存在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
结合第一方面,在第一方面的第一种可能的实现方式中,在所述MC经由所述第二总线,向所述目标缓存发送所述目标数据之前,所述方法还包括:所述MC确定所述第二总线未被占用。
结合第一方面,在第一方面的第二种可能的实现方式中,所述第一总线具有第一接口,所述目标缓存具有第二接口,所述MC具体通过所述第一接口与所述第一总线相连,所述目标缓存具体通过所述第二接口经由所述第二总线与所述MC相连。
可选地,所述第一总线还具有第三接口,所述第一总线具体通过所述第三接口经由所述第二总线与所述目标缓存相连。
因此,通过将第二总线与第一总线相连,使目标缓存可以经由第二总线向第一总线传输数据,减小了MC和目标缓存同时向核传输数据时产生的竞争,提高了访问效率,并且提高了第一总线的利用率。
结合第一方面的上述可能的实现方式,在第一方面的第三种可能的实现方式中,所述目标缓存具有至少两个接口,所述至少两个接口中的第四接口经由所述第二总线与所述MC相连,所述至少两个接口中的第五接口与所述第一总线相连。
因此,通过在目标缓存设置两个接口使目标缓存与MC和第一总线独立相连,互不影响。由此,可以进一步解决核和MC同时访问目标缓存时在第一总线中可能出现的访问竞争。
第二方面,本申请提供一种用于访问内存的方法,所述方法应用于计算机系统中,所述计算机系统包括至少一个核、存储控制器MC、目标缓存和内存,各所述核经由第一总线与所述MC相连,所述目标缓存经由第二总线与所述MC相连,所述MC与所述内存相连,所述方法包括:所述目标缓存接收所述MC发送的目标数据,所述目标数据由所述MC根据第一内存访问请求从所述内存中读取;所述目标缓存经由所述第一总线向所述第一核发送所述目标数据。
因此,MC通过经由不同于第一总线的第二总线,将第一核请求从内存读取的目标数据保存在目标缓存中。也就是说,本发明实施例通过在MC与第一总线间增加了一条总线,在第一总线处于繁忙状态时,可以经由新增的第二总线在目标缓存中暂时保存核请求访问的目标数据,以使得MC中的缓存区得以释放,从而为后续的访问请求所读取的数据提供缓存空间。由此,可以缓解MC在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过目标缓存在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
结合第二方面,在第二方面的第一种可能的实现方式中,在所述目标缓存经由所述第一总线向所述第一核发送所述目标数据之前,所述方法还包括:所述目标缓存确定所述第一总线未被占用。
结合第二方面,在第二方面的第二种可能的实现方式中,所述第一总线具有第一接口,所述目标缓存具有第二接口,所述MC具体通过所述第一接口与所述第一总线相连,所述目标缓存具体通过所述第二接口经由所述第二总线与所述MC相连。
可选地,所述第一总线还具有第三接口,以及,所述第一总线具体通过所述第三接口经由所述第二总线与所述目标缓存相连。
因此,通过将第二总线与第一总线相连,使目标缓存可以经由第二总线向第一总线传输数据,减小了MC和目标缓存同时向核传输数据时产生的竞争,提高了访问效率,并且提高了第一总线的利用率。
结合第二方面的上述可能的实现方式,在第二方面的第三种可能的实现方式中,所述目标缓存具有至少两个接口,所述至少两个接口中的第四接口经由所述第二总线与所述MC相连,所述至少两个接口中的第五接口与所述第一总线相连。
因此,通过在目标缓存设置两个接口使目标缓存与MC和第一总线独立相连,互不影响。由此,可以进一步解决核和MC同时访问目标缓存时在第一总线中可能出现的访问竞争。
第三方面,本申请提供一种用于访问内存的方法,所述方法应用于计算机系统中,所述计算机系统包括处理器、存储控制器MC和内存,所述处理器经由第一总线和所述MC相连,所述MC与所述内存相连,所述方法包括:所述MC接收所述处理器发送的第一内存访问请求,所述第一内存访问请求中携带目标地址指示信息,所述目标地址指示信息用于指示所述处理器请求访问的目标数据段在所述内存中的地址,所述目标数据段包括多个目标数据行,所述地址包括与所述多个目标数据行相对应的多个子地址,每个目标数据行对应所述多个目标子地址的至少一个子地址;所述MC根据所述多个子地址,从所述内存中获取与所述多个子地址对应的所述多个目标数据行;所述MC向所述处理器发送所述多个目标数据行。
因此,MC可以将该目标数据段直接复制到处理器缓存中,以方便核的访问,与访问内存相比,大大提高了访问效率。
结合第三方面,在第三方面的第一种可能的实现方式中,所述多个目标数据行中的每个所述目标数据行包括至少一个数据字节,所述至少一个数据字节与至少一个字节地址一一对应,所述多个子地址包括与所述多个目标数据行中所包括的多个目标数据字节对应的多个字节地址,以及,所述MC根据所述多个子地址,从所述内存中获取与所述多个子地址对应的多个目标数据行,包括:所述MC根据所述多个字节地址,确定与所述多个字节地址对应的所述多个目标数据字节所属的所述多个目标数据行的行首地址;所述MC根据所述多个目标数据行的行首地址,从所述内存中获取所述多个目标数据行。
第四方面,本申请提供一种用于访问内存的方法,所述方法应用于计算机系统中,所述计算机系统包括处理器、存储控制器MC和内存,所述处理器经由第一总线和所述MC相连,所述MC与所述内存相连,所述方法包括:所述处理器向所述MC发送第一内存访问请求,所述第一内存访问请求中携带目标地址指示信息,所述目标地址指示信息用于指示所述处理器请求访问的目标数据段在所述内存中的地址,所述目标数据段包括多个目标数据行,所述地址包括与所述多个目标数据行相对应的多个子地址,每个目标数据行对应所述多个子地址的至少一个子地址;所述处理器接收所述MC发送的所述多个目标数据行,所述多个目标数据行由所述MC根据所述多个子地址从所述内存中获取。
因此,MC可以将该目标数据段直接复制到处理器缓存中,以方便核的访问,与访问内存相比,大大提高了访问效率。
结合第四方面,在第四方面的第一种可能的实现方式中,所述处理器包括至少一个核和处理器缓存,所述处理器向所述MC发送第一内存访问请求,包括:所述处理器中的处理器缓存接收所述至少一个核中的第一核发送的第二内存访问请求,所述第二内存访问请求中携带目标数据指示信息,所述目标数据指示信息用于指示所述第一核请求访问的目标数据为目标数据段,以及,所述目标数据段在所述内存中的地址;所述处理器中的处理器缓存根据所述目标地址,确定与所述目标地址对应的所述多个子地址,所述目标数据段包括多个目标数据行,每个目标数据行对应所述多个子地址的至少一个子地址;所述处理器中的处理器缓存根据所述多个子地址,向所述MC发送所述第一内存访问请求。
因此,通过处理器缓存将目标数据段的地址转换为与多个目标数据行对应的子地址,MC可以将该目标数据段直接复制到处理器缓存中,以便于核的访问,与访问内存相比,大大提高了访问效率。
结合第四方面,在第四方面的第二种可能的实现方式中,所述多个目标数据行中的每个所述目标数据行包括至少一个数据字节,所述至少一个数据字节与至少一个字节地址一一对应,所述多个子地址包括与多个所述目标数据行中所包括的多个数据字节对应的多个字节地址,以及,所述处理器缓存向所述MC发送第一内存访问请求,包括:所述处理器缓存根据所述多个字节地址,向所述MC发送所述第一内存访问请求。
可选地,所述第一内存访问请求包括多个第一内存访问子请求,每个所述第一内存访问请求中携带至少一个所述字节地址,以及,所述处理器缓存向所述MC发送所述第一内存访问请求,所述第一内存访问请求中携带有所述多个字节地址,包括:所述处理器缓存向所述MC发送所述多个所述第一内存访问子请求,每个所述第一内存访问子请求中携带至少一个所述字节地址。
第五方面,本申请提供一种用于访问内存的装置,用于执行第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的模块。
第六方面,本申请提供一种用于访问内存的装置,用于执行第二方面或第二方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行第二方面或第二方面的任意可能的实现方式中的方法的模块。
第七方面,本申请提供一种用于访问内存的装置,用于执行第三方面或第三方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行第三方面或第三方面的任意可能的实现方式中的方法的模块。
第八方面,本申请提供一种用于访问内存的装置,用于执行第四方面或第四方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行第四方面或第四方面的任意可能的实现方式中的方法的模块。
第九方面,本申请提供一种用于访问内存的设备,该设备包括:接收器、发送器、存储器、处理器和总线系统。其中,该接收器、该发送器、该存储器和该处理器通过该总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第一方面或第一方面的任意可能的实现方式中的方法。
第十方面,本申请提供一种用于访问内存的设备,该设备包括:接收器、发送器、存储器、处理器和总线系统。其中,该接收器、该发送器、该存储器和该处理器通过该总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第二方面或第二方面的任意可能的实现方式中的方法。
第十一方面,本申请提供一种用于访问内存的设备,该设备包括:接收器、发送器、存储器、处理器和总线系统。其中,该接收器、该发送器、该存储器和该处理器通过该总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第三方面或第三方面的任意可能的实现方式中的方法。
第十二方面,本申请提供一种用于访问内存的设备,该设备包括:接收器、发送器、存储器、处理器和总线系统。其中,该接收器、该发送器、该存储器和该处理器通过该总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第四方面或第四方面的任意可能的实现方式中的方法。
第十三方面,本申请提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第十四方面,本申请提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第二方面或第二方面的任意可能的实现方式中的方法的指令。
第十五方面,本申请提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第三方面或第三方面的任意可能的实现方式中的方法的指令。
第十六方面,本申请提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第四方面或第四方面的任意可能的实现方式中的方法的指令。
本申请提供了一种用于访问内存的方法和装置,能够缓解MC在第一总线繁忙时无法及时处理内存访问请求而造成的反应延迟,提高访问效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中多核计算机系统的结构示意图。
图2是根据本发明实施例的多核计算机系统的结构示意图。
图3是根据本发明一实施例的用于访问内存的方法的示意性流程图。
图4是根据本发明另一实施例的多核计算机系统的结构示意图。
图5是根据本发明又一实施例的多核计算机系统的结构示意图。
图6是根据本发明再一实施例的多核计算机系统的结构示意图。
图7是根据本发明再一实施例的用于访问内存的方法的示意性流程图。
图8是根据本发明又一实施例的多核计算机系统的另一结构示意图。
图9是根据本发明一实施例的用于访问内存的装置的示意性框图。
图10是根据本发明另一实施例的用于访问内存的装置的示意性框图。
图11是根据本发明又一实施例的用于访问内存的装置的示意性框图。
图12是根据本发明再一实施例的用于访问内存的装置的示意性框图。
图13是根据本发明一实施例的用于访问内存的设备的示意性框图。
图14是根据本发明另一实施例的用于访问内存的设备的示意性框图。
图15是根据本发明一实施例的用于访问内存的系统的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
应理解,本发明实施例中的用于访问内存的方法可以应用于单核或多核计算机系统,其中,该多核计算机系统可以为通用的多核计算机系统。该多核计算机系统中的CPU可以包括多个核,多个核之间可以经由第一总线或者交叉开关矩阵通信,该多核计算机系统中可以包括CPU中的多核共享的缓存。
图1是现有技术中多核计算机系统100的结构示意图。如图1所示,该多核计算机系统100包括:至少一个核110(例如,该至少一个核110可以包括核#1 111、核#2 112、核#3113和核#4 114)、共享缓存120和存储控制器MC 130,各核110、共享缓存120与MC 130通过环形总线140相连,处理器通过MC 130与内存150相连。
其中,共享缓存仅为处理器缓存中的一种,处理器缓存还可以包括私有缓存。具体来说,处理器缓存可以包括多级缓存,例如,一级缓存、二级缓存、三级缓存。其中,一级缓存、二级缓存可以是每个核私有的缓存,也就是说,每个核只能在其所拥有的一级缓存、二级缓存中查找数据。该一级缓存、二级缓存可以位于其所属的核内部,也可以位于核外部,本发明对此并未特别限定。三级缓存可以是多个核共享的缓存,当各核在其私有的一级缓存和二级缓存未查找到(或者说,未命中)请求访问的数据时,可以继续在三级缓存中查找。并且,从一级缓存到三级缓存的存储区域依次增大,因此,相对应的访问时间也依次增加。应理解,处理器缓存不限于三级,也可以为四级、五级甚至更多级,本发明对此并未特别限定。其中,作为缓存最后的一级的缓存,或者说,距离核最远的缓存,或者说,距离内存最近的缓存,可以称为最后级缓存(Last Level Cache,简称“LLC”)。在现有的处理器架构中,通常包括三级缓存,因此,可以将三级缓存直接称为LLC。以下,在未特别说明的情况下,共享缓存用于指代三级缓存,或者,LLC。
进一步地,共享缓存可以分为多个缓存切片(slice),每个核对应至少一个缓存切片,每个核可以在所对应的缓存切片中查找数据。也就是说,缓存切片的数量大于或等于核的数量。
若核在各级缓存中都无法查找到请求访问的数据时,则可以通过MC向内存发出内存访问请求。具体来说,核向MC发出内存访问请求,并在该访问请求中携带请求访问的目标数据在内存中的地址。MC根据该目标地址,从内存中获取目标数据。
需要说明的是,核在执行程序时,可以通过读取程序,确定请求访问的目标数据在内存中的地址。核根据程序确定目标数据在内存中的地址的具体方法与现有技术相同,为了简洁,在此不再赘述。
在本发明实施例中,由于多个核共用一个MC,当多个核同时或者在较短时间段内都需要访问内存时,就会同时或者在较短时间段内都向MC发送内存访问请求。而由于内存的存储量较大,访问内存的时间也较访问缓存的时间长,因此,可能会在短时间内出现多个核发送的访问请求在MC排队等待的情况,而MC中的缓存空间有限,大量的内存访问请求通过MC从内存中获取到大量的数据,使得MC的缓存空间不足以存放这么大量的数据,从而造成后续的内存访问请求无法及时处理,进而造成系统反应延迟。如图1所示,在MC 130中,形成了多个内存访问请求排队等待的队列。应理解,如图1所示的队列是为便于理解而做出的示意图,仅为示意性说明,不应对本发明构成任何限定。在实际执行过程中,MC可以通过先进先出(First In First Out,简称“FIFO”)的机制来处理在MC中等待处理的访问请求,“先进先出”即对先接收到的访问请求先处理,后接收到的访问请求后处理。
但是当环形总线处于繁忙状态时,MC就无法及时将从内存中读取到的数据发送给核。而MC中的缓存空间有限,大量的内存访问请求通过MC从内存中获取到大量的数据,使得MC的缓存空间不足以存放这么大量的数据,从而造成后续的内存访问请求无法及时处理,导致对内存访问的延迟。为解决MC在短时间内无法及时处理多个访问请求而造成的反应延迟,本发明引入了目标缓存的概念。
图2是根据本发明一实施例的多核计算机系统200的结构示意图。如图2所示,该多核计算机系统除包含有上述多核计算机系统100中的各模块,还包括目标缓存210,该目标缓存210为独立于一级缓存、二级缓存和三级缓存而新增的一块缓存。目标缓存210可以经由第二总线220与MC 130相连。具体来说,目标缓存210具有一个对外接口(为便于区分和理解,记作第一接口),该第一接口与第二总线220相连。第二总线220的另外一个接口连接于MC 130。也就是说,MC 130可以经由第二总线220访问目标缓存210。
需要说明的是,在现有的处理器中,例如英特尔(Intel)志强(Xeon)E5系列处理器,集成存储控制器(Integrated Memory Controller,简称“IMC”,即,MC的一例)可以处于系统代理(System Agent)中,系统代理通过环形总线(即,第一总线的一例)与各核、各缓存切片相连。
应理解,IMC也可以处于系统代理的外部,本发明并未特别限定。IMC可以理解为处理器与内存间的接口,只要IMC与环形总线(或者说,第一总线)相连,并与内存相连,均落入本发明的保护范围内。
在本发明实施例中,处理器请求访问内存可以是请求读取内存中的数据,也可以是请求将数据写入到内存中去。以下,以第一内存访问请求用于请求读数据为例,结合图3详细说明根据本发明实施例的用于访问内存的方法。
图3是根据本发明一实施例的用于访问内存的方法300的示意性流程图。
应理解,图3所示的用于访问内存的方法可以应用于如图2所示的多核计算机系统中,也可以应用于单核处理系统中,本发明对此并未限定。
具体而言,该处理器包括至少一个核、共享缓存、存储控制器MC和目标缓存,各核、共享缓存与MC经由第一总线相连,处理器通过MC与内存相连,目标缓存经由第二总线与MC和第一总线相连。
应理解,图3所示的方法中的至少一个核可以对应于图2中的至少一个核110(包括:核#1 111、核#2 112、核#3 113和核#4 114),图3所示的方法中的MC可以对应于图1中的MC 130,图3所示的方法中的目标缓存可以对应于图2中的目标缓存210。
作为一个实施例,该处理器请求访问的数据的信息包括该处理器请求读取的数据在内存中的地址信息。如图3所示,该方法300具体包括:
S302,MC接收至少一个核中的第一核发送的第一内存访问请求,该第一内存访问请求中携带目标地址指示信息,该目标地址指示信息用于指示第一核请求访问的目标数据在内存中的地址;
S304,MC根据目标地址指示信息,从内存中获取目标数据;
具体而言,MC从内存中获取目标数据的单元为数据行(或者说,缓存行)。也就是说,MC接收到的地址,可以为用于指示该目标数据所属的数据行的地址,例如,可以是该数据行的首个字节的地址(为便于理解和说明,记作行首地址),也可以为该数据行中的某个数据字节的地址。MC在接收到目标地址后,可以通过计算,确定出该目标地址所对应的目标数据所属的数据行的行首地址,进而根据该行首地址,从内存中获取对应的数据行。该数据行中包含有该目标数据,从而获取目标数据。
S306,MC确定第一总线被占用;
这里所说的占用,可以理解为总线的部分总线段或全部总线段处于繁忙(busy)状态。
在本发明实施例中,核、处理器缓存经由第一总线与MC相连,也就是说,处理器与MC之间只有一条通道,即,第一总线,因此,第一总线的忙闲状态直接影响着MC处理内存访问请求的效率。
在一种实现方式中,MC与第一总线连接的接口会周期性地接收到其相邻的接口的控制信号,并将该控制信号反馈给MC。继续参见图2,MC与第一总线连接的接口记作接口a,与接口a相邻的接口分别记作接口b和接口c,其中,接口b处于接口a的逆时针方向上,接口c处于接口a的顺时针方向上。与之相对应地,第一总线可以分为多个总线段,处于接口a和接口b之间的总线段记作总线段#1,处于接口a和接口c之间的总线段记作总线段#2。当接口a接收到接口b发送的控制信号,可以确定处于接口a至接口b之间的总线段#1是否繁忙;同样地,当接口a接收到接口c发送的控制信号,可以确定处于接口a至接口c之间的总线段#2是否繁忙。例如,当接口a接收到接口b发送的繁忙(busy)信号,则确定处于接口a和接口b之间的总线段#1被占用,暂时无法用于传输数据,可以继续执行S310;又例如,当接口a接收到接口c发送的空闲(idle)信号,则确定处于接口a和接口c之间的总线段#2未被占用,可以用于传输数据,可以沿用现有技术。
应理解,以上列举的busy信号和idle信号仅为示例性说明,不应对本发明构成任何限定。其他用于指示第一总线的闲忙状态的信号或者方法都可一用于MC确定是否第一总线是否被占用。
还应理解,以上列举的MC通过各接口接收到的控制信号来确定第一总线是否被占用的具体方法仅为示例性说明,不应对本发明构成任何限定。MC也可以通过其他方法,例如,带宽使用率超过预设门限值等,来确定第一总线是否被占用,本发明对此并未特别限定。
在本发明实施例中,接口a可以周期性地检测接口b和接口c的控制信号,以确定总线段#1和总线段#2是否处于繁忙状态(或者说,是否被占用)。
S3MC经由第二总线,向目标缓存发送目标数据。
在本发明实施例中,MC经由新增的第二总线与新增的目标缓存相连,可以理解为增大了MC的缓存空间,因此,当MC确定第一总线处于繁忙状态时,可以将从内存中读取到的目标数据经由第二总线保存在目标缓存中。
进一步地,第二总线的忙闲状态同样影响着MC处理内存访问请求的效率。
可选地,MC经由第二总线,将目标数据保存在目标缓存中,包括:
MC确定第二总线未被占用时,经由第二总线,将目标数据保存在目标缓存中。
可选地,如图2所示,目标缓存具有第一接口,第一总线具有第一接口,目标缓存具有第二接口,MC具体通过第一接口与第一总线相连,目标缓存具体通过第二接口经由第二总线与MC相连。可选地,如图4所示,第一总线还具有第三接口,第一总线具体通过第三接口经由第二总线与目标缓存相连。
可选地,如图5所示,目标缓存具有至少两个接口,至少两个接口中的第四接口经由第二总线与MC相连,至少两个接口中的第五接口与第一总线相连。
因此,通过在目标缓存设置两个接口使目标缓存与MC和第一总线独立相连,互不影响。由此,可以进一步解决核和MC同时访问目标缓存时在第一总线中可能出现的访问竞争。
应理解,MC确定第二总线是否被占用的具体方法与MC确定第一总线是否被占用的具体方法相似,为了简洁,这里不再赘述。
还应理解,以上列举的用于确定是否经由第二总线,将目标数据保存在目标缓存中的预设条件仅为示例性说明,不应对本发明构成任何限定,本发明也不应限于此。例如,该预设条件还可以为:MC中等待处理的内存访问请求的数量大于等于预设的门限值。具体来说,MC可以对接收内存访问请求的事件进行计数,或者对MC中等待处理的内存访问请求的数量进行统计。当确定等待处理的内存访问请求的数量大于等于预设的门限值时,认为该MC处于繁忙状态,可以确定将目标数据保存在目标缓存中。
S310,目标缓存确定第一总线未被占用。
目标缓存确定第一总线是否被占用的具体方法与上述MC确定第一总线是否被占用的具体方法相同,为了简洁,这里不再赘述。
S312,目标缓存经由第一总线向第一核发送目标数据。
具体而言,目标缓存可以将MC暂存在目标缓存中的目标数据通过处理器缓存中转发送给第一核。在本发明实施例中,目标缓存可以将目标数据发送到三级缓存,三级缓存将目标数据发送到二级缓存,二级缓存将目标数据发送到一级缓存,最后由一级缓存将目标数据发送到第一核中。
需要说明的是,目标缓存可以通过缓存控制器来控制,缓存控制器可以为专用于对目标缓存的管理的控制器,也可以为处理器缓存和目标缓存共用的控制器,用于管理各缓存之间的数据,以及各级缓存之间的数据传输。在本发明实施例中,该缓存控制器可以用于控制目标缓存向第一核发送目标数据的时机,以及向第一核发送的目标数据,该缓存控制器也可以用于控制目标缓存与第一总线相连的接口来检测各总线段的忙闲状态(例如,监听相邻接口发送的控制信号),通过接口来控制目标缓存向第一核发送目标数据的时机,本发明对此并未特别限定。应理解,这里所说的缓存控制器并不完全等同于现有技术中的缓存控制器,本发明实施例中,该缓存控制器可以沿用现有的缓存控制器,并增加了上述的用于控制目标缓存的功能。缓存控制器仅作为对用于控制目标缓存的功能模块的称呼,不应对本发明构成任何限定。
还需要说明的是,目标缓存向第一核发送目标数据时,可以根据目标数据中携带的指示信息,确定将该目标数据发送给哪一个缓存。该指示信息可以由MC在第一内存访问请求中获取。也就是说,第一内存访问请求中携带有发送该请求的核的指示信息。当MC接收到该第一内存访问请求时,便可以得知该请求是由第一核发送的。在根据该第一内存访问请求从内存中读取到相应的目标数据时,可以将该第一核的指示信息携带在目标数据中,以便于目标缓存向第一核发送目标数据时,可以准确地确定接收对象,即,三级缓存中与第一核相对应的缓存切片。
应理解,这里所列举的目标缓存向第一核发送目标数据的具体方法仅为示例性说明,不应对本发明构成任何限定,本发明也不应限于此。例如,该处理器缓存可以包括更多级的缓存,目标缓存经由更多级处理器缓存的中转,将目标数据发送给第一核。本发明对与目标缓存向第一核发送目标数据的具体方法并未特别限定。
还应理解,处理器缓存向第一核发送目标数据的具体方法与现有技术中处理器缓存向第一核发送目标数据的具体方法相似,为了简洁,这里不再赘述。
因此,在本发明实施例中,MC通过经由不同于第一总线的第二总线,将第一核请求从内存读取的目标数据保存在目标缓存中。也就是说,本发明实施例通过在MC与第一总线间增加了一条总线,在第一总线处于繁忙状态时,可以通过新增的第二总线和目标缓存暂时保存核请求访问的目标数据,以使得MC中的缓存区得以释放,从而为后续的访问请求所读取的数据提供缓存空间。由此,可以缓解MC在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过目标缓存在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
需要说明的是,以上所列举的核请求从内存读取数据的方法仅为通过本发明访问内存的一个实施例,不应对本发明构成任何限定。本发明也可以通过使用新增的第二总线和目标缓存实现核向内存写数据的访问请求。
在本发明实施例中,不失一般性,第一核向内存写入数据的过程与现有技术基本相似。由上述描述可知,第一核请求读取内存中的目标数据时,可以通过MC将目标数据复制到缓存中,例如,处理器缓存(例如,一级缓存、二级缓存、三级缓存),目标缓存。第一核在对从内存中读取的目标数据进行修改(或者说,写数据)时,若该目标数据是经过处理器缓存的保存而读取到的,则将该目标数据经处理器缓存返回到内存中。例如,该目标数据由MC读取并复制到一级缓存中,则第一核将该目标数据修改后经一级缓存返回到内存中。同样地,若该目标数据是经过目标缓存的保存而读取到的,则将该目标数据经目标缓存返回到内存中。
可选地,核经MC向内存中写数据的时机也可以根据预设条件来确定,例如,该预设条件可以为:MC中等待处理的内存访问请求的数量大于等于预设的第一门限值。
可选地,该目标缓存具有至少两个接口,至少两个接口中的第一接口经由第二总线与MC相连,至少两个接口中的第二接口与第一总线相连。
也就是说,目标缓存与MC间的数据传输以及目标缓存与第一总线之间的数据传输是完全独立的,互不影响。由此,可以进一步解决核和MC同时访问目标缓存时在第二总线中可能出现的访问竞争。
作为示例而非限定,该目标缓存可以为具有至少两个接口的存储器。例如,该目标缓存可以为双端口随机存取存储器(Random Access Memory,简称“RAM”)。
以上,结合图2至图5,详细说明了根据本发明实施例的用于访问内存的方法。以下,结合图6和图7,详细说明根据本发明又一实施例的多核计算机系统和访问内存的方法。
图6是根据本发明再一实施例的多核计算机系统400的结构示意图。如图6所示,该多核计算机系统400包括:至少一个核410、处理器缓存420、存储控制器MC 430和内存440,各核410、处理器缓存420与MC 430经由第一总线相连。其中,各核410和处理器缓存420构成处理器,处理器缓存420可以包括段预取器421,该段预取器421与各核410相连,且段预取器421与MC 430相连,处理器通过MC 430与内存440相连。
需要说明的是,段预取器可以理解为处理器缓存中的一个功能模块,用于根据核的内存访问请求,通过MC从内存中读取数据段。与现有技术中的其他预取机制不同,该段预取器可以实现数据段的读取,即,通过MC从内存中获取核所需读取的数据段。应理解,段预取器是为了与现有技术中的其他预取机制相区分而对其所命名的称呼,本发明不排除通过其他名称来命名的用于预取数据段的功能模块的情况。
图7是根据本发明再一实施例的用于访问内存的方法500的示意性流程图。该方法500应用于如图7所示的多核计算机系统中。应理解,以下所列举的方法500可以由段预取器执行,也可以由处理器缓存中或者处理器中具有与段预取器相同功能的模块执行,本发明并不限定。为便于说明,以下以处理器缓存作为执行主体来详细说明根据本发明又一实施例的用于访问内存的方法500。
如图7所示,该方法500包括:
S502,处理器缓存接收第一核发送的第二内存访问请求。
具体而言,处理器缓存接收至少一个核中的第一核发送的第二内存访问请求,该第一内存访问请求中携带有该第一核请求访问的目标数据指示信息,该目标数据指示信息指示该目标数据为目标数据段,以及该目标数据段在内存中的地址。
在本发明实施例中,由于编程人员在编译程序时,可以根据所需访问的数据的类型,确定需要访问的数据在内存中为一个连续的数据段,或者,离散地分布在一个数据段中。为便于理解和说明,将该目标数据所处的数据段记作目标数据段。编程人员可以根据该目标数据段的地址,编译用于第一核执行的程序。
第一核在执行程序时,可以确定该目标数据段在内存中所对应的地址,并将该目标地址携带在第二内存访问请求中,发送给处理器缓存。
S504,处理器缓存向MC发送第一内存访问请求。
具体而言,处理器缓存根据接收到的第二内存访问请求中的地址,确定与该地址所对应多个子地址。其中,该地址可以为该目标数据段的起始地址和结束地址,也可以为该目标数据段的起始地址和数据段长度,或者还可以为该目标数据段的结束地址和数据段长度,本发明对此并未特别限定。只要该地址可以用于准确地指示目标数据段在内存中的位置,均落入本发明的保护范围内。
在本发明实施例中,目标数据段可以包括多个目标数据行,每个目标数据行可以包括多个目标数据字节,例如,64个字节。并且,每个目标数据字节在内存中所对应的地址是不同的。因此,该目标数据段的地址可以包括与每个目标数据字节相对应的字节地址,该目标数据段的地址也可以包括与每个目标数据行相对应的行首地址。
可选地,该多个目标数据行中的每个目标数据行包括多个数据字节,多个数据字节与多个字节地址一一对应,该多个子地址包括与该多个目标数据行中所包括的多个目标数据字节对应的多个字节地址;
处理器缓存根据该多个字节地址,向MC发送第一内存访问请求,该第一内存访问请求中携带的目标地址指示信息用于指示该多个字节地址。
S506,MC从内存中获取目标数据。
可选地,MC根据该多个字节地址,确定与该多个字节地址对应的多个目标数据字节所属的多个目标数据行的行首地址;
MC根据该多个目标数据行的行首地址,从内存中获取该多个目标数据行。
也就是说,处理器缓存根据目标数据段所包括的目标数据字节,将每个目标数据字节所对应的字节地址都通过第一内存访问请求发送给MC,MC直接根据该多个字节地址,从内存中获取与该多个字节地址对应的多个目标数据字节所属的数据行。由于给多个字节地址是根据目标数据段的地址而确定的,与之相对应地,该多个目标数据字节所属的数据行即目标数据段中所包括的多个目标数据行。
由方法300中S302中可知,MC从内存中获取数据的单元为数据行。也就是说,当MC接收到一个字节地址,可以根据该字节地址,将内存中与该字节地址所对应的字节所属的数据行都复制到缓存中去。因此,多个字节地址有可能对应的是同一个数据行。基于此,MC可以将接收到的多个字节地址进行处理,确定多个目标数据行的行首地址,并根据该行首地址,从内存中获取对应的目标数据行。从而大大减少了MC从内存获取数据的次数。
S508,MC向处理器缓存发送该目标数据段。
MC向处理器缓发送该目标数据段(或者说,多个目标数据行),已将该目标数据段保存在处理器缓存中,以便于核查找。与访问内存相比,大大提高了访问效率。
更进一步地,为了便于理解,以下,结合图8,详细说明根据本发明再一实施例的多核计算机系统600。
图8是根据本发明又一实施例的多核计算机系统600的另一结构示意图。如图8所示,该多核计算机系统600包括:至少一个核610、处理器缓存620和存储控制器MC 630,各核610、处理器缓存620与MC 630经由第一总线相连。处理器通过MC 630与内存640相连。其中,处理器缓存620可以包括段预取器660,该段预取器660与各核610相连,且段预取器660与MC630相连。具体地,该段预取器660可以包括控制逻辑661和控制寄存器662。其中,控制逻辑661可以受控于控制寄存器662,控制寄存器662可以被各核610访问。
具体而言,不失一般性,控制寄存器接收第一核发送的第二内存访问请求,该第二内存访问请求中可以携带目标地址指示信息,该目标地址指示信息用于指示该第一核请求访问的目标数据段的地址,该目标地址可以为目标数据段的起始地址和结束地址,也可以为该目标数据段的起始地址和数据段长度,还可以为该目标数据段的结束地址和数据段长度。
与之相应地,处理器的指令集中可以添加段预取指令,段预取指令所包括的内容可以与目标数据的具体内容向对应。
可选地,该指令可以为一条带有两个参数的预取指令,第一个参数用来指定目标数据段的起始地址,第二个参数用来指定预取段的结束地址。段预取器可以提供两个控制寄存器,分别用来保存该目标数据段的起始地址和结束地址。
可选地,该指令可以为一条带有两个参数的预取指令,第一个参数用来指定目标数据段的起始地址或结束地址,第二个参数用来指定目标数据段的数据段长度。段预取器可以提供两个控制寄存器,分别用来保存该目标数据段的起始地址和数据段长度,或者,结束地址和数据段长度。
可选地,该指令可以为两条分别带有一个参数的预取指令,第一条预取指令用来指定目标数据段的起始地址,第二条预取指令用来指定目标数据段的结束地址。段预取器可以提供过两个控制寄存器,分别用来保存该目标数据段的起始地址和结束地址。
可选地,段预取器可以提供一个控制寄存器和两个缓冲寄存器,并在该控制寄存器中设置标志位,用于指示收到的地址是目标数据段的起始地址还是结束地址。该两个缓冲寄存器可以是一个起始地址缓冲寄存器和一个结束地址缓冲寄存器,在接收到目标数据段的起始地址后,该控制寄存器中的内容被复制到起始地址缓冲寄存器中;在接收到目标数据段的结束地址后,该控制寄存器中的内容被复制到结束地址缓冲寄存器中。
可选地,该指令可以为两条分别带有一个参数的预取指令,第一条预取指令用来指定目标数据段的起始地址或结束地址,第二条预取指令可以用来指定目标数据段的数据段长度。该段预取器可以提供两个控制寄存器,分别用来保存该目标数据段的起始地址和数据段长度,或者,结束地址和数据段长度。
可选地,段预取器可以提供一个控制寄存器和两个缓冲寄存器,并在该控制寄存器中设置标志位,用于指示收到的地址是目标数据段的起始地址或结束地址还是数据段长度。该两个缓冲寄存器可以是一个起始地址或结束地址缓冲寄存器和一个数据段长度缓冲寄存器,在接收到目标数据段的起始地址或结束地址后,该控制寄存器中的内容被复制到起始地址或结束地址缓冲寄存器中;在接收到目标数据段的数据段长度后,该控制寄存器中的内容被复制到数据段长度缓冲寄存器中。
可选地,段预取器可以提供一个控制寄存器核两个缓冲寄存器,并在控制寄存器中设置标志位,用于指示第一核发送的第一内存访问请求中所携带的地址是目标数据段的起始地址、结束地址还是数据段长度。预取指令可以根据控制寄存器中的标志位,发送与该标志位所指示的内容相对应的预取指令。并将从预取指令中所获取到的参数复制到相应的缓冲寄存器中。
因此,根据本发明实施例的用于访问内存的方法,通过处理器缓存将目标数据段的地址转换为与个目标数据行对应的地址,MC可以将该目标数据段直接复制到处理器缓存中,以便于核的访问,与访问内存相比,大大提高了访问效率。
以上,结合图2至图8详细说明了根据本发明实施例的用于访问内存的方法。以下,结合图9至图12详细说明根据本发明实施例的用于访问内存的装置。
图9是根据本发明一实施例的用于访问内存的装置700的示意性框图。该装置700配置于计算机系统中,该计算机系统包括至少一个核、该装置700、目标缓存和内存,各核经由第一总线与该装置700相连,目标缓存经由第二总线与该装置700相连,该装置700与内存相连。如图9所示,该装置700包括接收单元710、处理单元720和发送单元730。
其中,该接收单元710用于接收至少一个核中的第一核发送的第一内存访问请求,第一内存访问请求中携带有目标地址指示信息,该目标地址指示信息用于指示第一核请求访问的目标数据在内存中的地址;
该处理单元720用于根据目标地址指示信息,从内存中读取目标数据;并确定第一总线被占用;
发送单元730用于在处理单元720确定第一总线被占用时,经由第二总线向目标缓存发送目标数据,以将目标数据保存在目标缓存中。
根据本发明实施例的用于访问内存的装置700可对应于根据本发明实施例的用于访问内存的方法300中的MC,并且,该装置700中的各单元和上述其他操作和/或功能分别为了实现图3中的方法的相应流程,为了简洁,在此不再赘述。
因此,在本发明实施例中,该装置通过经由不同于第一总线的第二总线将第一核请求向内存访问的目标数据保存在目标缓存中,可以缓解该装置在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过目标缓存在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
图10是根据本发明另一实施例的用于访问内存的装置800的示意性框图。该装置800配置于计算机系统中,计算机系统包括至少一个核、存储控制器MC、该装置800和内存,各核经由第一总线与MC相连,该装置800经由第二总线与MC相连,MC与内存相连。如图10所示,该装置800包括接收单元810、处理单元820和发送单元830。
其中,该接收单元810用于接收MC发送的目标数据,目标数据由MC根据第一内存访问请求从内存中读取;
该发送单元830用于经由第一总线向第一核发送目标数据。
根据本发明实施例的用于访问内存的装置800可对应于根据本发明实施例的访问的方法300中的目标缓存,并且,该装置800中的各单元和上述其他操作和/或功能分别为了实现图3中的方法的相应流程,为了简洁,在此不再赘述。
因此,在本发明实施例中,MC通过经由不同于第一总线的第二总线将第一核请求向内存访问的目标数据保存在该装置中,可以缓解MC在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过该装置在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
图11是根据本发明又一实施例的用于访问内存的装置10的示意性框图。该装置10配置于计算机系统中,计算机系统包括:处理器、该装置10和内存,处理器经由第一总线和该装置10相连,该装置10与内存相连。如图11所示,该装置10包括:接收单元11、处理单元12和发送单元13。
其中,该接收单元11用于接收处理器发送的第一内存访问请求,该第一内存访问请求中携带目标地址指示信息,该目标地址指示信息用于指示处理器请求访问的目标数据段在内存中目标地址,其中,该目标数据段包括多个目标数据行,该目标地址包括与多个目标数据行相对应的多个子地址,每个目标数据行对应多个目标子地址的至少一个子地址;
该处理单元12用于根据多个目标子地址,从内存中获取与多个子地址对应的多个目标数据行;
该发送单元13用于向处理器发送多个目标数据行。
根据本发明实施例的用于访问内存的装置10可对应于根据本发明实施例的用于访问内存的方法500中的MC,并且,该装置10中的各单元和上述其他操作和/或功能分别为了实现图7中的方法的相应流程,为了简洁,在此不再赘述。
因此,该装置可以将该目标数据段直接复制到处理器缓存中,以方便核的访问,与访问内存相比,大大提高了访问效率。
图12是根据本发明再一实施例的用于访问内存的装置20的示意性框图。该装置20配置于计算机系统中,该计算机系统包括:该装置20、存储控制器MC和内存,该装置20经由第一总线和MC相连,MC与内存相连。如图12所示,该装置20包括:发送单元21和接收单元22。
其中,该发送单元21用于向MC发送第一内存访问请求,该第一内存访问请求中携带目标地址指示信息,该目标地址指示信息用于指示处理器请求访问的目标数据段在内存中目标地址,该目标数据段包括多个目标数据行,目标地址包括与多个目标数据行相对应的多个子地址,每个目标数据行对应多个子地址的至少一个子地址;
该接收单元22用于接收MC发送的多个目标数据行,该多个目标数据行由MC根据多个子地址从内存中获取。
根据本发明实施例的用于访问内存的装置20可对应于根据本发明实施例的用于访问内存的方法500中的处理器,并且,该装置20中的各单元和上述其他操作和/或功能分别为了实现图7中的方法的相应流程,为了简洁,在此不再赘述。
因此,该装置可以将该目标数据段直接复制到处理器缓存中,以方便核的访问,与访问内存相比,大大提高了访问效率。
以上,结合图9至图12详细说明了根据本发明实施例的用于访问内存的装置。以下,结合图13至图15详细说明根据本发明实施例的用于访问内存的设备。
图13是根据本发明一实施例的用于访问内存的设备30的示意性框图。该设备30配置于计算机系统中,该计算机系统包括至少一个核、该设备30、目标缓存和内存,各核经由第一总线与该设备30与内存相连,目标缓存经由第二总线与该设备30相连,该设备30与内存相连。如图13所示,该设备30包括:接收器31、发送器32、处理器33、存储器34和总线系统35。其中,接收器31、发送器32、处理器33和存储器34通过总线系统35相连,该存储器34用于存储指令,该处理器33用于执行该存储器34存储的指令,以控制接收器31接收信号,并控制发送器32发送信号。
其中,该接收器31用于接收至少一个核中的第一核发送的第一内存访问请求,第一内存访问请求中携带有目标地址指示信息,该目标地址指示信息用于指示第一核请求访问的目标数据在内存中的地址;
该处理器33用于根据目标地址的信息,从内存中读取目标数据;并确定第一总线被占用;
该发送器32用于在处理器33确定第一总线被占用时,经由第二总线向目标缓存发送目标数据,以将目标数据保存在目标缓存中。
应理解,在本发明实施例中,该处理器33可以是中央处理单元(centralprocessing unit,简称为“CPU”),该处理器33还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器34可以包括只读存储器和随机存取存储器,并向处理器33提供指令和数据。存储器34的一部分还可以包括非易失性随机存取存储器。例如,存储器34还可以存储设备类型的信息。
该总线系统35除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统35。
在实现过程中,上述方法的各步骤可以通过处理器33中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的用于超级小区间切换的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器34,处理器33读取存储器34中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
根据本发明实施例的用于访问内存的设备30可对应于根据本发明实施例的访问的方法300中的MC,以及根据本发明实施例的用于访问内存的装置700,并且,该设备30中的各单元和上述其他操作和/或功能分别为了实现图3中的方法的相应流程,为了简洁,在此不再赘述。
因此,在本发明实施例中,该设备通过经由不同于第一总线的第二总线将第一核请求向内存访问的目标数据保存在目标缓存中,可以缓解该设备在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过目标缓存在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
图14是根据本发明另一实施例的用于访问内存的设备40的示意性框图。该设备40配置于计算机系统中,该计算机系统包括至少一个核、存储控制器MC、该设备40和内存,各核经由第一总线与MC相连,该设备40经由第二总线与MC相连,40MC与内存相连。如图14所示,该设备40包括:接收器41、发送器42、处理器43、存储器44和总线系统45。其中,接收器41、发送器42、处理器43和存储器44通过总线系统45相连,该存储器44用于存储指令,该处理器43用于执行该存储器44存储的指令,以控制接收器41接收信号,并控制发送器42发送信号。
其中,该接收器41用于接收MC发送的目标数据,目标数据由MC根据第一内存访问请求从内存中读取;
该发送器42用于经由第一总线向第一核发送目标数据。
根据本发明实施例的用于访问内存的设备40可对应于根据本发明实施例的访问的方法300中的目标缓存,以及根据本发明实施例的用于访问内存的装置800,并且,该设备40中的各单元和上述其他操作和/或功能分别为了实现图3中的方法的相应流程,为了简洁,在此不再赘述。
因此,在本发明实施例中,MC通过经由不同于第一总线的第二总线将第一核请求向内存访问的目标数据保存在该设备中,可以缓解MC在第一总线繁忙时无法及时处理访问请求而造成的反应延迟,提高访问效率。另一方面,通过该设备在第一总线空闲时将暂存的目标数据发送给第一核,可以有效地提高第一总线的使用率。
图15是根据本发明一实施例的用于访问内存的系统50的示意性框图。如图15所示,该系统50包括处理器51、存储控制器MC 52、内存53和第一总线54。MC 52与内存53相连。
其中,该第一总线54用于连接处理器51和MC 52;
该处理器51经由第一总线54向MC 52发送第一内存访问请求,该第一内存访问请求中携带目标地址指示信息,该目标地址指示信息用于指示处理器请求访问的目标数据段在内存中的地址,其中,该目标数据段包括多个目标数据行,该地址包括与多个目标数据行相对应的多个子地址,每个目标数据行对应多个子地址的至少一个子地址;并经由第一总线54接收MC 52发送的多个目标数据行;
该MC 52用于根据该多个子地址,从内存53中获取与多个子地址对应的多个目标数据行;并向处理器51发送该多个目标数据行。
根据本发明实施例的用于访问内存的系统50中的处理器51、MC 52、内存53和第一总线54可对应于根据本发明实施例的用于访问内存的方法500中的处理器、MC、内存和第一总线,并且,该系统50中的各单元和上述其他操作和/或功能分别为了实现图7中的方法的相应流程,为了简洁,在此不再赘述。
因此,该设备可以将该目标数据段直接复制到处理器缓存中,以方便核的访问,与访问内存相比,大大提高了访问效率。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,RAM)、随机存取存储器(random access memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (14)

1.一种用于访问内存的方法,其特征在于,所述方法应用于计算机系统中,所述计算机系统包括至少一个核、存储控制器MC、目标缓存和内存,各所述核经由第一总线与所述MC相连,所述目标缓存经由第二总线与所述MC相连,所述MC与所述内存相连,所述方法包括:
所述MC接收所述至少一个核中的第一核发送的第一内存访问请求,所述第一内存访问请求中携带有目标地址指示信息,所述目标地址指示信息用于指示所述第一核请求访问的目标数据在所述内存中的地址;
所述MC根据所述目标地址指示信息,从所述内存中读取所述目标数据;
当确定所述第一总线被占用时,所述MC经由所述第二总线,向所述目标缓存发送所述目标数据,以将所述目标数据保存在所述目标缓存中。
2.根据权利要求1所述的方法,其特征在于,在所述MC经由所述第二总线,向所述目标缓存发送所述目标数据之前,所述方法还包括:
所述MC确定所述第二总线未被占用。
3.根据权利要求1或2所述的方法,其特征在于,所述第一总线具有第一接口,所述目标缓存具有第二接口,以及,
所述MC具体通过所述第一接口与所述第一总线相连,所述目标缓存具体通过所述第二接口经由所述第二总线与所述MC相连。
4.根据权利要求3所述的方法,其特征在于,所述第一总线还具有第三接口,以及,
所述第一总线具体通过所述第三接口经由所述第二总线与所述目标缓存相连。
5.根据权利要求1或2所述的方法,其特征在于,所述目标缓存具有至少两个接口,所述至少两个接口中的第四接口经由所述第二总线与所述MC相连,所述至少两个接口中的第五接口与所述第一总线相连。
6.一种用于访问内存的方法,其特征在于,所述方法应用于计算机系统中,所述计算机系统包括至少一个核、存储控制器MC、目标缓存和内存,各所述核经由第一总线与所述MC相连,所述目标缓存经由第二总线与所述MC相连,所述MC与所述内存相连,所述方法包括:
所述目标缓存接收所述MC发送的目标数据,所述目标数据由所述MC根据第一内存访问请求从所述内存中读取;
所述目标缓存经由所述第一总线向所述至少一个核中的第一核发送所述目标数据。
7.根据权利要求6所述的方法,其特征在于,在所述目标缓存经由所述第一总线向所述第一核发送所述目标数据之前,所述方法还包括:
所述目标缓存确定所述第一总线未被占用。
8.一种用于访问内存的装置,其特征在于,所述装置配置于计算机系统中,所述计算机系统包括至少一个核、所述装置、目标缓存和内存,各所述核经由第一总线与所述装置相连,所述目标缓存经由第二总线与所述装置相连,所述装置与所述内存相连,所述装置包括:
接收单元,用于接收所述至少一个核中的第一核发送的第一内存访问请求,所述第一内存访问请求中携带有目标地址指示信息,所述目标地址指示信息用于指示所述第一核请求访问的目标数据在所述内存中的地址;
处理单元,用于根据所述目标地址指示信息,从所述内存中读取所述目标数据;并确定所述第一总线被占用;
发送单元,用于所述处理单元确定所述第一总线被占用时,经由所述第二总线向所述目标缓存发送所述目标数据,以将所述目标数据保存在所述目标缓存中。
9.根据权利要求8所述的装置,其特征在于,所述处理单元还用于确定所述第二总线未被占用;
所述发送单元具体用于在所述处理单元确定所述第二总线未被占用之后,经由所述第二总线,向所述目标缓存发送所述目标数据。
10.根据权利要求8或9所述的装置,其特征在于,所述第一总线具有第一接口,所述目标缓存具有第二接口,以及,
所述装置具体通过所述第一接口与所述第一总线相连,所述目标缓存具体通过所述第二接口经由所述第二总线与所述装置相连。
11.根据权利要求10所述的装置,其特征在于,所述第一总线还具有第三接口,以及,
所述第一总线具体通过所述第三接口经由所述第二总线与所述目标缓存相连。
12.根据权利要求8或9所述的装置,其特征在于,所述目标缓存具有至少两个接口,所述至少两个接口中的第四接口经由所述第二总线与所述装置相连,所述至少两个接口中的第五接口与所述第一总线相连。
13.一种用于访问内存的装置,其特征在于,所述装置配置于计算机系统中,所述计算机系统包括至少一个核、存储控制器MC、所述装置和内存,各所述核经由第一总线与所述MC相连,所述装置经由第二总线与所述MC相连,所述MC与所述内存相连,所述装置包括:
接收单元,用于接收所述MC发送的目标数据,所述目标数据由所述MC根据第一内存访问请求从所述内存中读取;
发送单元,用于经由所述第一总线向所述至少一个核中的第一核发送所述目标数据。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括处理单元,用于确定所述第一总线未被占用;
所述发送单元具体用于所述处理单元确定所述第一总线未被占用时,经由所述第一总线向所述第一核发送所述目标数据。
CN201610225274.XA 2016-04-12 2016-04-12 一种用于访问内存的方法和装置 Active CN107291629B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201610225274.XA CN107291629B (zh) 2016-04-12 2016-04-12 一种用于访问内存的方法和装置
PCT/CN2017/076961 WO2017177790A1 (zh) 2016-04-12 2017-03-16 一种用于访问内存的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610225274.XA CN107291629B (zh) 2016-04-12 2016-04-12 一种用于访问内存的方法和装置

Publications (2)

Publication Number Publication Date
CN107291629A CN107291629A (zh) 2017-10-24
CN107291629B true CN107291629B (zh) 2020-12-25

Family

ID=60041426

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610225274.XA Active CN107291629B (zh) 2016-04-12 2016-04-12 一种用于访问内存的方法和装置

Country Status (2)

Country Link
CN (1) CN107291629B (zh)
WO (1) WO2017177790A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109522252B (zh) * 2018-11-15 2021-12-07 天津津航计算技术研究所 一种用于高速总线通讯控制器的存储器访问方法
CN112148665B (zh) * 2019-06-28 2024-01-09 深圳市中兴微电子技术有限公司 缓存的分配方法及装置
CN111080510B (zh) * 2019-12-11 2021-02-12 海光信息技术股份有限公司 数据处理装置、方法、芯片、处理器、设备及存储介质
CN111177054B (zh) * 2019-12-30 2021-09-03 京信网络系统股份有限公司 数据传输方法、装置、设备及存储介质
CN113486410B (zh) * 2021-06-30 2023-11-21 海光信息技术股份有限公司 一种保护数据安全的方法、cpu核、cpu芯片和电子设备
CN113890783B (zh) * 2021-09-27 2022-07-26 北京微纳星空科技有限公司 一种数据收发系统、方法、电子设备及存储介质
CN116339611A (zh) * 2021-12-22 2023-06-27 华为技术有限公司 缓存管理的方法、装置、系统及存储介质
CN114297098A (zh) * 2021-12-31 2022-04-08 上海阵量智能科技有限公司 芯片的缓存系统、数据处理方法、设备、存储介质及芯片
CN116974963B (zh) * 2023-09-25 2023-12-15 上海云豹创芯智能科技有限公司 一种访问存储器的装置及其方法、芯片、存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101290610A (zh) * 2008-06-03 2008-10-22 浙江大学 嵌入式异构多核体系片上通信互连组织层次的实现方法
CN102567256A (zh) * 2011-12-16 2012-07-11 龙芯中科技术有限公司 处理器系统及其多通道内存拷贝dma加速器和方法
CN103092788A (zh) * 2012-12-24 2013-05-08 华为技术有限公司 多核处理器及数据访问方法
CN104346285A (zh) * 2013-08-06 2015-02-11 华为技术有限公司 内存访问处理方法、装置及系统
CN105095116A (zh) * 2014-05-19 2015-11-25 华为技术有限公司 缓存替换的方法、缓存控制器和处理器
CN105095138A (zh) * 2015-06-29 2015-11-25 中国科学院计算技术研究所 一种扩展同步内存总线功能的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
JP2014182488A (ja) * 2013-03-18 2014-09-29 Fujitsu Ltd 演算処理装置、及び演算処理装置の制御方法
CN105095094B (zh) * 2014-05-06 2018-11-30 华为技术有限公司 内存管理方法和设备
GB2529425A (en) * 2014-08-19 2016-02-24 Ibm Data processing apparatus and method

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101290610A (zh) * 2008-06-03 2008-10-22 浙江大学 嵌入式异构多核体系片上通信互连组织层次的实现方法
CN102567256A (zh) * 2011-12-16 2012-07-11 龙芯中科技术有限公司 处理器系统及其多通道内存拷贝dma加速器和方法
CN103092788A (zh) * 2012-12-24 2013-05-08 华为技术有限公司 多核处理器及数据访问方法
CN104346285A (zh) * 2013-08-06 2015-02-11 华为技术有限公司 内存访问处理方法、装置及系统
CN105095116A (zh) * 2014-05-19 2015-11-25 华为技术有限公司 缓存替换的方法、缓存控制器和处理器
CN105095138A (zh) * 2015-06-29 2015-11-25 中国科学院计算技术研究所 一种扩展同步内存总线功能的方法和装置

Also Published As

Publication number Publication date
WO2017177790A1 (zh) 2017-10-19
CN107291629A (zh) 2017-10-24

Similar Documents

Publication Publication Date Title
CN107291629B (zh) 一种用于访问内存的方法和装置
US20230091432A1 (en) Thread Creation on Local or Remote Compute Elements by a Multi-Threaded, Self-Scheduling Processor
US9727497B2 (en) Resolving contention between data bursts
CN108027804B (zh) 片上原子事务引擎
US9239798B2 (en) Prefetcher with arbitrary downstream prefetch cancelation
US20190340019A1 (en) Thread Commencement and Completion Using Work Descriptor Packets in a System Having a Self-Scheduling Processor and a Hybrid Threading Fabric
US20190339976A1 (en) Thread Commencement Using a Work Descriptor Packet in a Self-Scheduling Processor
US9075764B2 (en) Multiprocessor system-on-a-chip for machine vision algorithms
US9176885B2 (en) Combined cache inject and lock operation
EP3791269A1 (en) Thread priority management in a multi-threaded, self-scheduling processor
US7555597B2 (en) Direct cache access in multiple core processors
US8086766B2 (en) Support for non-locking parallel reception of packets belonging to a single memory reception FIFO
US11579888B2 (en) Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US10997075B2 (en) Adaptively enabling and disabling snooping bus commands
US9372795B2 (en) Apparatus and method for maintaining cache coherency, and multiprocessor apparatus using the method
US10042773B2 (en) Advance cache allocator
US20110022802A1 (en) Controlling data accesses to hierarchical data stores to retain access order
US10503648B2 (en) Cache to cache data transfer acceleration techniques
US10318424B2 (en) Information processing device
US11687460B2 (en) Network cache injection for coherent GPUs
CN114063923A (zh) 数据读取方法、装置、处理器及电子设备
JP3873589B2 (ja) プロセッサシステム
US20100057997A1 (en) Cache snoop limiting within a multiple master data processing system
US20080109639A1 (en) Execution of instructions within a data processing apparatus having a plurality of processing units
CN112602067A (zh) 用于预取存储指令的独占高速缓存一致性状态的方法、装置和系统

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
TR01 Transfer of patent right

Effective date of registration: 20211222

Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province

Patentee after: Super fusion Digital Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right