CN113342709B - 在多处理器***中访问数据的方法和多处理器*** - Google Patents

在多处理器***中访问数据的方法和多处理器*** Download PDF

Info

Publication number
CN113342709B
CN113342709B CN202110623705.9A CN202110623705A CN113342709B CN 113342709 B CN113342709 B CN 113342709B CN 202110623705 A CN202110623705 A CN 202110623705A CN 113342709 B CN113342709 B CN 113342709B
Authority
CN
China
Prior art keywords
data
core
cache
prefetched
shared
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
CN202110623705.9A
Other languages
English (en)
Other versions
CN113342709A (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.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology 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 Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202110623705.9A priority Critical patent/CN113342709B/zh
Publication of CN113342709A publication Critical patent/CN113342709A/zh
Application granted granted Critical
Publication of CN113342709B publication Critical patent/CN113342709B/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
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本公开提供了一种在多处理器***中访问数据的方法,所述多处理器***包括第一核、第二核、以及由第一核和第二核共享的共享缓存,第一核具有第一私有缓存,第二核具有第二私有缓存。该方法包括:响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存;将所述第一数据从所述共享缓存写入至第二私有缓存;以及基于第一核对第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存。此外,本公开还提供了一种多处理器***和一种共享缓存。

Description

在多处理器***中访问数据的方法和多处理器***
技术领域
本公开涉及一种在多处理器***中访问数据的方法、由共享缓存访问数据的方法、以及对应的多处理器***、共享缓存和计算机可读存储介质。
背景技术
随着中央处理器(Central Processing Unit,CPU)技术的发展,中央处理器已经能够以很快的速度处理数据。但是中央处理器仍需要较长时间来从主存储器中读取数据,导致了中央处理器整体性能不高。
目前已经提出采用多核(Multi-core/Many-core)处理器***来并行处理数据,以进一步地提高中央处理器处理数据的效率。其中,多处理器***中包括多个处理集群,每个处理集群包括至少一个中央处理器核(core,以下又称为核),每个核可以对应其私有的多级缓存(cache)。
目前,每个集群中的核可以通过访问一个集群共享的缓存来使得多个核访问的数据保持一致性。然而这样的方式仍存在流程复杂,共享缓存中的数据容易被污染,无效数据增多等的技术问题。
此外,为了进一步降低获取数据的延迟,每个核还可以采用数据预取(Prefetch)的方法来提前加载数据。然而,当前的预取操作模式容易导致多核处理相同地址序列的数据时存在大量的失效操作,从而每个核访问数据的效率仍较低。
发明内容
本公开的实施例提供了一种在多处理器***中访问数据的方法,所述多核***包括第一核、第二核、以及由第一核和第二核共享的共享缓存,第一核具有第一私有缓存,第二核具有第二私有缓存,所述方法包括:响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存;将所述第一数据从所述共享缓存写入至第二私有缓存;以及基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存。
例如,该方法还包括:响应于第二核要访问的第二数据已从第一私有缓存被写至共享缓存,将所述第二数据写入至第二核的私有缓存。
例如,在所述第二核要访问所述第一数据之前,所述第一数据和所述第二数据已从所述共享缓存被预取至所述第一私有缓存中。
例如,所述共享缓存包括目录,所述第一核对所述第一数据进行预取的预取记录被对应地存储为所述目录中的一部分,所述目录包括地址、所述地址对应的状态标识符和核标识符,所述第一核对所述第一数据进行预取的预取记录包括所述地址对应的预取模式和预取步长。
例如,所述共享缓存包括目录,所述目录包括至少一个条目,每个条目包括:地址、状态标识符、核标识符、预取模式和预取步长,所述第一核对所述第一数据的预取记录被对应地存储为对应条目中的预取模式和预取步长。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:基于第二核要访问的第一数据对应的访问地址,在所述共享缓存的目录中获取所述访问地址对应的预取模式和预取步长;基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址;以及基于所述第二数据对应的地址,将第二数据从第一私有缓存写至共享缓存。
例如,所述预取模式包括连续模式和步长模式,所述基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址还包括:响应于预取模式为连续模式,将所述访问地址与缓存行大小之和确定为所述第二数据对应的地址;响应于预取模式为步长模式,将所述访问地址与预取步长倍数的缓存行大小之和确定为第二数据对应的地址。
例如,所述共享缓存还包括控制器,所述响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存还包括:所述控制器从第二核接收访问请求,所述访问请求包括第二核要访问的第一数据对应的访问地址;所述控制器查询所述目录,确定所述第一数据已被预取至第一私有缓存;所述控制器向第一核发送第一写回请求,所述第一写回请求包括所述访问地址;第一核向共享缓存返回第一写回响应,所述第一写回响应包括所述第一数据和所述第一数据对的状态标识符;以及所述控制器基于所述第一写回响应中的所述第一数据对应的状态标识符修改所述目录中所述第一数据对应的状态标识符。
例如,所述将所述第一数据从所述共享缓存写入至第二私有缓存还包括:所述控制器向第二私有缓存发送访问响应,所述访问响应包括所述访问地址和所述第一数据;以及所述控制器修改所述目录中所述访问地址对应的核标识符。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:所述控制器查询所述目录,基于所述第一数据对应的访问地址,确定第一核在预取第一数据之后预取的第二数据对应的地址;所述控制器向第一核发送第二写回请求,所述第二写回请求包括所述第二数据对应的地址;所述第一核向共享缓存返回第二写回响应,所述第二写回响应包括所述第二数据和所述第二数据对应的状态标识符;以及所述控制器基于所述第二数据对应的状态标识符修改所述目录中所述第二数据对应的状态标识符。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的预定数量的第二数据从第一私有缓存写至共享缓存。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的所有第二数据从第一私有缓存写至共享缓存。
本公开的实施例还提供了一种多处理器***,包括第一核、第二核、以及由第一核和第二核共享的共享缓存,第一核具有第一私有缓存,第二核具有第二私有缓存,所述多处理器***被配置为执行上述方法。
本公开的实施例还提供了一种由共享缓存访问数据的方法,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述方法包括:响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
本公开的实施例还提供了一种共享缓存,其由第一核和第二核共享,第一核具有第一私有缓存,第二核具有第二私有缓存,所述共享缓存被配置为:响应于确定第二核要访问的第一数据已被预取至第一私有缓存中,向第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;基于第一核对所述第一数据进行预取的预取记录,向第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
本公开的实施例还提供了一种计算机可读存储介质,其上存储计算机可读指令,当所述计算机可读指令由多处理器***执行时,所述多处理器***执行上述的方法。
本公开的实施例还提供了一种计算机可读存储介质,其上存储计算机可读指令,当所述计算机可读指令由共享缓存执行时,所述共享缓存执行上述的方法。
本公开的实施例还提供了一种用于在多处理器***中访问数据的装置,所述多处理器***包括第一核、第二核、以及由所述第一核和所述第二核共享的共享缓存,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述装置包括:第一写入模块,被配置为响应于所述第二核要访问的第一数据已被预取至所述第一私有缓存中,将所述第一数据从所述第一私有缓存写至所述共享缓存;第二写入模块,被配置为将所述第一数据从所述共享缓存写至所述第二私有缓存;以及第三写入模块,被配置为基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从所述第一私有缓存写至所述共享缓存。
本公开的实施例还提供了一种利用共享缓存访问数据的装置,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述装置包括:第一写入模块,被配置为响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;第二写入模块,被配置为基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
由此,本公开实施例通过提前将第一核预取的第二数据写回到共享缓存,可以实现减少第二核处理第二数据时可能产生的失效操作,从而减小访问冲突数据的延迟。本公开实施例还通过在共享缓存的目录中增加预取模式和预取步长,可以实现在第二核发起读取请求时,将第一核的预取的多个数据主动写回,减少第二核访问后续地址的冲突。
附图说明
图1是示出在多处理器***中读取数据的示例流程示意图。
图2是示出图1中的多处理器***中的示例目录的示意图。
图3是示出根据本公开实施例的多处理器***的示意图。
图4是示出本公开实施例的在多处理器***中访问数据的方法的流程图。
图5是示出图3中的多处理器***中的目录的示意图。
图6是示出本公开实施例的在多处理器***中访问数据的方法的交互图。
图7是示出本公开实施例的在多处理器***中访问数据的方法的又一流程图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
以下简要介绍与本公开相关的术语,以便于说明本公开。
缓存(cache):缓存是介于核和主存储器(例如,外存)之间的小容量存储器,其读写速度比主存储器更快,从而能够实现高速地向中央处理器提供指令和数据,提高程序的执行速度。随着半导体器件集成度的不断提高,当前已出现了多级缓存***,每一级缓存的所有控制逻辑全部由该级缓存的内部控制器实现。
一级缓存(L1 cache):L1 Cache为一级高速缓存,位于CPU内核的旁边。其是与CPU结合最为紧密的缓存。一级缓存又分为指令缓存和数据缓存,容量最小,由各个核/集群独享。
二级缓存(L2 cache):L2 Cache为二级高速缓存,是CPU第二层级高速缓存,其容量会直接影响CPU的性能,由各个核/集群独享。
三级缓存(L3 cache):L3 Cache是三级高速缓存,为CPU第三层级高速缓存,作用是进一步降低内存延迟,由多个核/集群共享,容量最大。通常情况下L3也是多核处理器的最后一级缓存(Last Level Cache,LLC),L3与外存耦接。
外存:其与处理器的内存是相对的概念,通常为动态随机存取存储器(DynamicRandom Access Memory,DRAM),其通常通过总线与三级缓存连接。外存的容量大,但是访问速度慢。
缓存行(Cache Line):缓存行,是Cache与内存数据交换的最小单位,通常是32字节或64字节。
写回(Write Back):将上一级缓存中的数据返回并写入至下一级缓存或者外存的操作。
目录(Directory):本级缓存记录上一级缓存访问数据状态的记录表。
预取(Prefetch):通过预测读取数据来提前将数据载入缓存,减少各个核获取数据的延时。
缓存一致性(Cache Coherency):多核先后或者同时访问或者处理同一地址的数据时,需要维护其访问的数据的一致性。通常需要持续地将数据从前一个核的缓存中迁移走,再返回给另一个核,该过程通常需要较长的时间。
为了更好的说明本公开,以下参考图1和图2来进一步说明在当前的多处理器***中,多个核尝试访问相同地址中数据的示例过程。
图1是示出在多处理器***中读取数据的流程示意图。图2是示出图1中的多处理器***中的目录的示意图。如图1所示,该多处理器***中包括第一集群和第二集群。其中,第一集群包括第一核(以下以Core 1标记)和第一核对应的一级缓存和二级缓存。第二集群包括第二核(以下以Core 2标记)和第二核对应的一级缓存和二级缓存。第一集群和第二集群共享同一个三级缓存(以下又称为共享缓存),也即,第一集群和第二集群中的每个核都能够与共享缓存交互,以获取不同地址中的数据。
如图1所示,共享缓存包括目录,该目录(directory)用于记录各个核存取数据的情况。图2示出了一种典型的目录结构,其字段包括地址、状态、以及核标识符。例如,如果某个地址中的数据正在被第一核处理,该地址对应的状态字段可以被标识为“占用”或“独占”,该地址对应的核标识符可以是第一核对应的核标识符。以下简要描述第一核和第二核先后访问地址0x140对应的数据的示例过程。
在步骤S101中,第一核预取(prefetch)共享缓存中的地址0x140中存储的数据。例如,第一核可以向共享缓存发送预取请求或访问请求,以预先加载共享缓存中的地址0x140至地址0x840中存储的数据。
在步骤S102中,在共享缓存向第一核反馈共享缓存中的地址0x140中存储的数据之后,共享缓存中的目录记录一条信息,其指示:“在第一核中存放了地址0x140中的数据”。例如,共享缓存中的目录此时可以将地址0x140对应的状态字段设置为“独占(Exclusive)”,地址0x140对应的核标识符字段设置为第一核对应的核标识符。
在步骤S103中,第二核发出访问请求,该访问请求指示第二核也希望访问访问地址0x140中存储的数据。
在步骤S104中,共享缓存中的目录查询地址0x140对应的各个字段,并确认该数据已经被第一核调用。
在步骤S105中,共享缓存向第一核发出探查请求(probe请求),以探查第一核能否返回地址0x140对应的数据。如果第一核此时还未使用地址0x140对应的数据,第一核将返回探测响应至共享缓存,其中包括地址0x140对应的数据。
在步骤S106中,共享缓存返回访问响应至第二核,其中包括地址0x140对应的数据。
在步骤S107中,共享缓存中目录记录一条信息,其指示:“在第二核中存放有地址0x140中的数据”。例如,共享缓存中的目录此时可以将地址0x140对应的状态字段仍设置为“独占(Exclusive)”,地址0x140对应的核标识符字段设置为第二核对应的核标识符。
此时,如果第二核还希望访问地址0x180中存储的数据,将重复步骤S103至步骤S107,才能获取到地址0x180中存储的数据。可见,在多处理器***中,仍存在访问数据的效率较低且流程复杂的技术问题。
为此,本公开的实施例提供了一种在多处理器***中访问数据的方法,所述多核***包括第一核、第二核、以及由第一核和第二核共享的共享缓存,第一核具有第一私有缓存,第二核具有第二私有缓存,所述方法包括:响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存;将所述第一数据从所述共享缓存写入至第二私有缓存;以及基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存。
本公开的实施例还提供了一种多处理器***,包括第一核、第二核、以及由第一核和第二核共享的共享缓存,第一核具有第一私有缓存,第二核具有第二私有缓存,所述多处理器***被配置为执行上述方法。
本公开的实施例还提供了一种共享缓存,其由第一核和第二核共享,第一核具有第一私有缓存,第二核具有第二私有缓存,所述共享缓存被配置为:响应于确定第二核要访问的第一数据已被预取至第一私有缓存中,向第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;基于第一核对所述第一数据进行预取的预取记录,向第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
由此,本公开实施例通过提前将第一核预取的第二数据写回到共享缓存,可以实现减少第二核处理第二数据时可能产生的失效操作,从而减小访问冲突数据的延迟。本公开实施例还通过在共享缓存的目录中增加预取模式和预取步长,可以实现在第二核发起读取请求时,将第一核的预取的多个数据主动写回,减少第二核访问后续地址的冲突。
下面继续结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图3是示出根据本公开实施例的多处理器***300的示意图。图4是示出本公开实施例的在多处理器***中访问数据的方法的流程图。图5是示出图3中的多处理器***中的目录的示意图。其中,多处理器***中的每个处理器可以是具有处理功能的处理内核(kenel)、具有处理功能的处理核(core)或处理单元。
例如,如图3所示,该多处理器***300包括多个核,每个核包括其私有缓存,而共享缓存则由多个核共享。例如,多个核可以为如图3中所示的第一核和第二核,其中第一核具有第一私有缓存,第二核具有第二私有缓存。第一私有缓存包括第一私有一级缓存和第一私有二级缓存,第一私有缓存包括第二私有一级缓存和第二私有二级缓存。如上所述,第一私有一级缓存和第二私有一级缓存可以是一级高速缓存,分别位于第一核和第二核的旁边,其容量最小。第一私有二级缓存和第二私有二级缓存可以是二级高速缓存,其容量通常大于第一私有一级缓存和第二私有一级缓存。例如,该多处理器***300还包括共享缓存。共享缓存可以是三级高速缓存,容量最大并且可以与外存耦接。
在一些实施例中,第一核还可以与其它核组成第一集群。第一集群中的各个核可以共享第一私有一级缓存和第一私有二级缓存。类似地,第二核还可以与其它核组成第二集群。第二集群中的各个核可以共享第二私有一级缓存和第二私有二级缓存。本公开并不以此为限。
可选地,所述多处理器***既可以是一致性内存访问(Uniform Memory Access,UMA)架构的也可以是非一致性内存访问(NUMA)架构的。采用SMP架构的多处理器***的主要特征为共享,也即***中所有资源(例如处理器、内存、输入/输出接口)都是共享的,每个处理器(或第一核、第二核、第一集群、第二集群)均可通过相同的内存总线访问相同的内存资源(例如,共享缓存)。在该多处理器***采用非一致性内存访问架构的情况下,第一核和第二核(或,第一集群和第二集群)组合在一个***中,其均可以访问整个***的内存(例如,共享缓存和/或外存),也就是说,共享缓存和/或外存在物理上是分布的。
在一些实施例中,多处理器***300位于单个芯片上进而组成了单片***(SOC***)。在另一些实施例中,多处理器***300由多个分离的芯片组成,第一核(或第一集群)与第二核(或第二集群)分别位于不同的芯片上。本公开并不对第一核和第二核的物理位置进行限制。
例如,参考图4,多处理器***300可以执行访问数据的方法400。例如,方法400包括步骤S401至步骤S403。
例如,在步骤S401中,多处理器***300响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存。接着在步骤S402中,将所述第一数据从所述共享缓存写入至第二私有缓存。在步骤S403中,基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存。可选地,步骤S402和步骤S403的执行顺序可以互换,步骤S402和步骤S403也可以被同时执行,本公开并不以此为限。
可选地,在步骤S401之前,也即,在所述第二核要访问所述第一数据之前,所述第一数据和所述第二数据已从所述共享缓存被预取至所述第一私有缓存中。
可选地,在步骤S403之后,多处理器***300还可以响应于第二核要访问的第二数据已从第一私有缓存被写至共享缓存,将所述第二数据写入至第二核的私有缓存。由此,本公开实施例通过提前将第一核预取的第二数据写回到共享缓存,可以实现减少第二核处理第二数据时可能产生的失效操作,从而减小访问冲突数据的延迟。
在一些实施例中,所述共享缓存包括目录,所述目录包括至少一个条目,每个条目包括:地址、状态标识符、核标识符、预取模式和预取步长,所述第一核对所述第一数据的预取记录被对应地存储为对应条目中的预取模式和预取步长。例如,第一核的预取记录可以如图5所示,其可以被对应地存储为共享缓存的目录中的一部分。其中,所述目录包括地址、所述地址对应的状态标识符和核标识符,而预取记录包括所述地址对应的预取模式和预取步长。
可选地,状态标识符用于标记该地址对应的访问状态。例如状态标识符可以用于标识:独占状态(Exclusive)、共享状态(Share)、修改状态(Modified)、未修改状态(Un-Modified)以及无效状态(Invalid)。其中,独占状态用于表示该地址被对应的核标识符指示的核独占使用,其余核当前没有权限访问该地址。共享状态用于表示该地址被对应的核标识符指示的多个核共享使用,也即存在多个核的私有缓存中都具有该地址中对应的数据。修改状态用于表示对应的地址中的数据在写回时已更改。修改状态用于表示对应的地址中的数据在写回时未更改。无效状态表示该地址中的数据已经无效,其可能已经被污染,而无法使用。例如,若地址的状态标识符指示无效状态或共享状态,当需要对该地址执行写入/修改操作时,需要将该地址的状态标识符转换为独占状态,以保证在发生数据写入操作时,仅有一个核具有写入权限。当然,本领域技术人员应当理解,状态标识符也可以指示其它访问状态,本公开并不以此为限。在另一些实施例中,状态标识符还可以指示上述多种访问状态的组合,例如独占状态和修改状态的组合。当然,本公开并不以此为限。
可选地,所述预取模式包括连续模式和步长模式,其可以用特定的标识符来进行表征。例如,连续模式可以使用“0”来表征,步长模式可以使用“1”来表征。当然本公开并不限于此。
可选地,步长模式指示:通过识别预取步长来对数据进行预取。比如,假设当前正在预取地址为6中的数据,在按预取步长为3的方式来预取数据的情况下,接下来将预取地址9(也即,6+3)中的数据。连续模式指示:预取连续地址中的数据。比如,如果连续预取了地址1、地址2、地址3的数据,则接下来将预取地址4中的数据。在一些示例中,如果预取模式为连续模式,预取步长可以为空值,或者被保留以用于指示其它信息。本公开并不对连续模式下的预取步长进行限制。当然,本领域技术人员应当理解,预取模式也可以是其他模式,本公开并不以此为限。
可选地,预取模式的取值也可以是空值,其指示对应的地址中的数据是某个核最后预取的数据。当然,在对应的地址中的数据是某个核最后预取的数据时,预取模式的取值还可以是其他用于表征预取终止的值,本公开对此不进行限制。
可选地,在一些实施例中,共享缓存可以以缓存行(Cache line)为单位进行数据读取、数据写入、数据预取等操作,也即该共享缓存的存储空间以缓存行为最小粒度进行存储空间的划分。由此,一个访问地址指示一个对应的缓存行。在一些实施例中,预取步长可以表示预取的下一地址距离当前地址多少个缓存行,例如,当预取步长为“2”时,表征预取的下一地址距离当前地址2个缓存行。通过倍数的方式来作为预取步长的取值,可以节省目录空间。在一些实施例中,预取步长还可以为缓存行的整数倍。例如,当缓存行的大小为64字节时,预取步长可以为64、128等等。以缓存行的整数倍作为预取步长的取值,可以便于计算下一地址的值。当然,本领域技术人员应当理解,预取步长也可以具有其他的取值方式,本公开并不以此为限。
可选地,在另一些实施例中,第一核的预取记录可以与共享缓存的目录分离地存储,二者通过核标识符和地址相互关联。例如,该预取记录可以包括第一核预取的地址、所述地址对应的预取模式和预取步长。在共享缓存通过其目录确定第二核要访问的第一数据已被预取至第一私有缓存后,共享缓存将进一步通过目录中的核标识符和地址,确定应当使用第一核的预取记录来查询第一核在预取所述第一数据之后预取的第二数据,以便于将第二数据从第一私有缓存写至共享缓存。
可选地,步骤S403还包括:基于第二核要访问的第一数据对应的访问地址,在所述共享缓存的目录中获取所述访问地址对应的预取模式和预取步长;基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址;以及基于所述第二数据对应的地址,将第二数据从第一私有缓存写至共享缓存。
可选地,在预取模式包括连续模式和步长模式,并且共享缓存可以以缓存行为单位进行数据相关操作的情况下,上述的基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址还包括:响应于预取模式为连续模式,将所述访问地址与缓存行大小之和确定为所述第二数据对应的地址;响应于预取模式为步长模式,将所述访问地址与预取步长倍数的缓存行大小之和确定为第二数据对应的地址。
为便于说明,以下以表1示出在第一核以连续模式预取多条数据后,共享缓存中目录的一个示例。在表1中,缓存行的大小为64比特,地址以16进制的方式示出。
Figure BDA0003101192070000121
Figure BDA0003101192070000131
如上表1所指示的,第一核已经预取了地址0x140、0x180和0x1c0中的数据。其中,第一核对地址0x140和0x180中的数据享有独占权限,对地址0x1c0中的数据享有共享权限。作为一个示例,当第二核要访问的第一数据为地址0x140对应的数据时,需要将地址0x140对应的数据从第一私有缓存写至共享缓存,然后再从共享缓存写入至第二私有缓存。由于第二核大概率可能会处理相邻地址中的数据,因此,为增加第二核访问数据的命中率,共享缓存将把0x180和0x1c0中的数据也从第一核中取回。此时,0x180和0x1c0中的数据均为第二数据的一个示例。
以下表2示出,共享缓存取回0x180和0x1c0中的数据后的目录。
Figure BDA0003101192070000132
如上表2所指示的,地址0x180中的数据已被第一核修改,地址0x1c0中的数据未被第一核修改。此时,地址0x180和0x1c0对应的核标识符为空值,其指示此时这些数据被存储在共享缓存中。当第二核向共享缓存发送访问地址0x180中的数据时,其可以直接从共享缓存中获取该数据,而不需要再次询问第一核。由此,增加了第二核访问共享缓存时命中数据的概率,从而减少了第二核获取第二数据的延迟。
为便于说明,以下以表3示出在第一核以步长模式预取多条数据后,共享缓存中目录的一个示例。在表3中,缓存行的大小也为64比特,地址以16进制的方式示出。
Figure BDA0003101192070000133
Figure BDA0003101192070000141
如上表3所指示的,第一核已经以步长模式预取了地址0x140和0x1c0中的数据。其中,共享缓存可以根据地址0x140中对应的步长模式和预取步长,确定第一核在预取地址0x140中的数据之后,预取的下一数据是地址0x1c0中的数据。地址0x1c0与地址0x140距离两个缓存行。
如上表3所指示的,第一核对地址0x140中的数据享有独占权限,对地址0x1c0中的数据享有共享权限。作为一个示例,当第二核要访问的第一数据为地址0x140对应的数据时,需要将地址0x140对应的数据从第一私有缓存写至共享缓存,然后再从共享缓存写入至第二私有缓存。由于第二核大概率可能也会处理地址0x1c0中的数据,因此,为增加第二核访问数据的命中率,共享缓存将把0x1c0中的数据也从第一核中取回。此时,0x1c0中的数据也即第二数据的一个示例。由此,第二核要访问的第二数据已从第一私有缓存被提前写至共享缓存,第二数据可以直接从共享缓存直接写入第二核,从而减少了第二核获取第二数据的延迟。
可选地,在一些实施例中,上述的步骤S403还包括:基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的预定数量的第二数据从第一私有缓存写至共享缓存。例如,共享缓存可以仅写回最多5条的数据。由此可以避免将太多数据写至缓存,第一核在后续处理相关数据时出现过多的未命中的情况。
可选地,在一些实施例中,上述的步骤S403还包括:基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的所有第二数据从第一私有缓存写至共享缓存。在该情况下,共享缓存将一直迭代地寻找第一核预取的数据,直至无法找到第一核预取的数据为止。例如,当共享缓存发现某个地址对应的预取模式和预取步长均为空值时,即可判定该地址为第一核预取的最后的一个地址。
由此,本公开实施例还通过在共享缓存的目录中增加预取模式和预取步长,可以实现在第二核发起读取请求时,将第一核的预取的多个数据主动写回,减少第二核访问后续地址的冲突。
下面继续结合图6和图7对本公开的实施例的各个步骤进行示例性地说明。图6是示出本公开实施例的在多处理器***中访问数据的方法的交互图。图7是示出本公开实施例的在多处理器***中访问数据的方法的又一流程图。本领域技术人员应当理解,本公开的实施例可以包括步骤S701至步骤S714中的全部或部分。当然本公开的实施例还可以包括更多的步骤,本公开并不以此为限。
参考图6和图7,上述的共享缓存还包括控制器。参见图7,在步骤S701中,第一核将预取请求发送到共享缓存,所述预取请求包括预取操作针对的地址。作为一个示例,该预取请求指示预取连续的地址0x140、0x180、0x1c0和0x200中的数据。例如,该预取请求还可以包括这些地址对应的预取模式和预取步长。在该示例中,预取模式为连续模式。如上所述,此时预取步长可以为空值。当然此时预取步长也可以等于单个缓存行的大小,以便于地址的计算。此外,该预取请求还可以包括预取操作请求的操作权限,例如独占或共享。以下以第一核以共享的权限请求地址0x140、0x180、0x1c0和0x200中的数据为例进行继续说明。
在步骤S702中,共享缓存向第一核发送预取响应,所述预取响应中包括预取操作针对的地址针对的数据。接续该示例,控制器处理步骤S701中的预取请求,并将地址0x140、0x180、0x1c0和0x200对应的数据发送到第一核私有的二级缓存中。然后控制器在共享缓存的目录中记录第一核已经预取了地址0x140、0x180、0x1c0和0x200对应的数据以及这些地址对应的预取模式和预取步长。以下以表4示出控制器修改后的目录的示例。在表4中,缓存行的大小也为64比特,地址以16进制的方式示出。
Figure BDA0003101192070000151
在步骤S703中,控制器从第二核接收访问请求,所述访问请求包括第二核要访问的第一数据对应的访问地址。接续该示例,假设第一数据对应的访问地址为0x140,也即,第二核发送了针对地址0x140的访问请求,以请求访问地址0x140对应的数据。可选地,该访问请求还可以包括第二核访问该数据的权限,例如,独占或共享。此时,假设第二核还请求了独占的访问权限。
在步骤S704中,控制器查询所述目录,确定所述第一数据已被预取至第一私有缓存。例如,参见图6,控制器可以通过向目录发出查询请求,并根据目录反馈的查询结果确定访问地址0x140对应的数据已被预取至第一私有缓存。控制器也可以通过直接调用目录来获取该信息,本公开对此不进行限制。
在步骤S705中,控制器向第一核发送第一写回请求,所述第一写回请求包括所述访问地址。例如,第一写回请求指示要求第一核写回地址0x140对应的数据。
在步骤S706中,第一核向共享缓存返回第一写回响应,所述第一写回响应包括所述第一数据和所述第一数据对应的状态标识符。例如第一写回响应包括地址0x140对应的数据,并指示该数据已经被修改。
在步骤S707中,控制器基于所述第一写回响应中的所述第一数据对应的状态标识符修改所述目录中所述第一数据对应的状态标识符。例如,修改后的目录如下表5所示。
Figure BDA0003101192070000161
作为一个示例,步骤S703至步骤S707组成了方法400的步骤S401的一个实施例,当然本公开并不此为限。
接着,参见图7和图6,在步骤S708中,控制器向第二私有缓存发送访问响应,所述访问响应包括所述访问地址和所述第一数据。在该示例中,访问地址为0x140。可选地,该访问响应中还可以包括第一数据已被修改的标识符,以便于第二核进行后续处理。本公开并不以此为限。
在步骤S709中,所述控制器修改所述目录中所述访问地址对应的核标识符。例如,修改后的目录如下表6所示。
Figure BDA0003101192070000162
作为一个示例,步骤S708至步骤S709组成了方法400的步骤S402的一个实施例,当然本公开并不此为限。
接着,在步骤S710中,所述控制器查询所述目录,基于所述第一数据对应的访问地址,确定第一核在预取第一数据之后预取的第二数据对应的地址。作为一个示例,步骤S710可以与步骤S704同时进行,也即控制器根据信息“0x140|共享|Core 1|连续模式|空”,可以确定第二数据对应的地址为0x180。当然,步骤S710也可以与步骤S704分时进行,本公开并不以此为限。
在步骤S711中,所述控制器向第一核发送第二写回请求,所述第二写回请求包括所述第二数据对应的地址。在该示例中,控制器触发第一核写回地址0x180对应的数据。虽然在图6中以单独的两条请求示出了第一写回请求和第二写回请求,本领域技术人员应当理解第一写回请求和第二写回请求也可以是同一个写回请求,其中包括地址0x180和0x140。
在步骤S712中,所述第一核向共享缓存返回第二写回响应,所述第二写回响应包括所述第二数据和所述第二数据对应的状态标识符。在该示例中,所述第二数据对应的状态标识符可以为未修改。
在步骤S713中,所述控制器基于所述第二数据对应的状态标识符修改所述目录中所述第二数据对应的状态标识符。例如,修改后的目录如下表7所示。
Figure BDA0003101192070000171
作为一个示例,步骤S710至步骤S713组成了方法400的步骤S403的一个实施例,当然本公开并不此为限。
在步骤S714中,控制器从第二核接收访问请求,所述访问请求包括第二核要访问的第二数据对应的访问地址。接续该示例,假设第二数据对应的访问地址为0x180,也即,第二核发送了针对地址0x180的访问请求,以请求访问地址0x180对应的数据。
在步骤S715中,控制器查询所述目录,确定第二核要访问的第二数据已从第一私有缓存被写至共享缓存,然后控制器向第二私有缓存发送访问响应,所述访问响应包括所述第二数据。
可选地,类似地,后续地址0x1c0,0x200的数据也按照相同的流程提前写回,以便于第二核访问。在一些实施例中,可以在第二写回请求中,包含地址0x180、0x1c0、0x200三者,以将第一核预取的数据批量的写回。在第一写回请求和第二写回请求为同一个写回请求的实施例中,可以在一个写回请求中包括地址的起止范围和批量写回标识符(其指示将该起止范围内的数据都写回)。例如,可以在写回请求包括起始地址0x140和停止地址0x200,以将地址0x140、0x180、0x1c0、0x200对应的数据一次性写回。当然本公开还可以有各种其他的变体,本领域技术人员应当理解本公开并不以此为限。
由此,本公开在向第一核发出预取请求时,在下级的共享缓存的目录中记录预取信息,(例如,预取模式和预取步长),后续如果由其他的核也对相同的地址发出了请求,可以通过目录中记录的预取信息,将第一核后续预取的其他地址数据也都提前取出,存入共享缓存。这样在之后的操作中,第二核如果也读取了后续的其他的地址,那么就可以直接从共享缓存中读取,而不需要再从第一核中读取。
本公开还公开了一种由共享缓存访问数据的方法,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述方法包括:响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
本公开的实施例还提供了一种利用共享缓存访问数据的装置,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述装置包括:第一写入模块,被配置为响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;第二写入模块,被配置为基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
例如,该装置还包括:第四写入模块,被配置为响应于第二核要访问的第二数据已从第一私有缓存被写至共享缓存,将所述第二数据写入至第二核的私有缓存。
例如,在所述第二核要访问所述第一数据之前,所述第一数据和所述第二数据已从所述共享缓存被预取至所述第一私有缓存中。
例如,所述共享缓存包括目录,所述第一核对所述第一数据进行预取的预取记录被对应地存储为所述目录中的一部分,所述目录包括地址、所述地址对应的状态标识符和核标识符,所述第一核对所述第一数据进行预取的预取记录包括所述地址对应的预取模式和预取步长。
例如,所述共享缓存包括目录,所述目录包括至少一个条目,每个条目包括:地址、状态标识符、核标识符、预取模式和预取步长,所述第一核对所述第一数据的预取记录被对应地存储为对应条目中的预取模式和预取步长。
例如,第三写入模块还被配置为:基于第二核要访问的第一数据对应的访问地址,在所述共享缓存的目录中获取所述访问地址对应的预取模式和预取步长;基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址;以及基于所述第二数据对应的地址,将第二数据从第一私有缓存写至共享缓存。
例如,所述预取模式包括连续模式和步长模式,所述基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址还包括:响应于预取模式为连续模式,将所述访问地址与缓存行大小之和确定为所述第二数据对应的地址;响应于预取模式为步长模式,将所述访问地址与预取步长倍数的缓存行大小之和确定为第二数据对应的地址。
例如,所述共享缓存还包括控制器,所述响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存还包括:所述控制器从第二核接收访问请求,所述访问请求包括第二核要访问的第一数据对应的访问地址;所述控制器查询所述目录,确定所述第一数据已被预取至第一私有缓存;所述控制器向第一核发送第一写回请求,所述第一写回请求包括所述访问地址;第一核向共享缓存返回第一写回响应,所述第一写回响应包括所述第一数据和所述第一数据对的状态标识符;以及所述控制器基于所述第一写回响应中的所述第一数据对应的状态标识符修改所述目录中所述第一数据对应的状态标识符。
例如,所述将所述第一数据从所述共享缓存写入至第二私有缓存还包括:所述控制器向第二私有缓存发送访问响应,所述访问响应包括所述访问地址和所述第一数据;以及所述控制器修改所述目录中所述访问地址对应的核标识符。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:所述控制器查询所述目录,基于所述第一数据对应的访问地址,确定第一核在预取第一数据之后预取的第二数据对应的地址;所述控制器向第一核发送第二写回请求,所述第二写回请求包括所述第二数据对应的地址;所述第一核向共享缓存返回第二写回响应,所述第二写回响应包括所述第二数据和所述第二数据对应的状态标识符;以及所述控制器基于所述第二数据对应的状态标识符修改所述目录中所述第二数据对应的状态标识符。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的预定数量的第二数据从第一私有缓存写至共享缓存。
例如,所述基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:基于第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的所有第二数据从第一私有缓存写至共享缓存。
本公开的实施例还提供了一种多处理器***,包括第一核、第二核、以及由第一核和第二核共享的共享缓存,第一核具有第一私有缓存,第二核具有第二私有缓存,所述多处理器***被配置为执行上述方法。
本公开的实施例还提供了一种由共享缓存访问数据的方法,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述方法包括:响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
本公开的实施例还提供了一种共享缓存,其由第一核和第二核共享,第一核具有第一私有缓存,第二核具有第二私有缓存,所述共享缓存被配置为:响应于确定第二核要访问的第一数据已被预取至第一私有缓存中,向第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;基于第一核对所述第一数据进行预取的预取记录,向第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
本公开的实施例还提供了一种计算机可读存储介质,其上存储计算机可读指令,当所述计算机可读指令由多处理器***执行时,所述多处理器***执行上述的方法。
本公开的实施例还提供了一种计算机可读存储介质,其上存储计算机可读指令,当所述计算机可读指令由共享缓存执行时,所述共享缓存执行上述的方法。
本公开的实施例还提供了一种利用共享缓存访问数据的装置,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述装置包括:第一写入模块,被配置为响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;第二写入模块,被配置为基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
由此,本公开实施例通过提前将第一核预取的第二数据写回到共享缓存,可以实现减少第二核处理第二数据时可能产生的失效操作,从而减小访问冲突数据的延迟。本公开实施例还通过在共享缓存的目录中增加预取模式和预取步长,可以实现在第二核发起读取请求时,将第一核的预取的多个数据主动写回,减少第二核访问后续地址的冲突。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
需要说明的是,在本文中,诸如第一和第三等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所附权利要求及其等同物的保护范围为准。

Claims (18)

1.一种在多处理器***中访问数据的方法,所述多处理器***包括第一核、第二核、以及由所述第一核和所述第二核共享的共享缓存,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述方法包括:
响应于所述第二核要访问的第一数据已被预取至所述第一私有缓存中,将所述第一数据从所述第一私有缓存写至所述共享缓存;
将所述第一数据从所述共享缓存写至所述第二私有缓存;以及
基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从所述第一私有缓存写至所述共享缓存。
2.如权利要求1所述的方法,还包括:
响应于第二核要访问的第二数据已从第一私有缓存被写至共享缓存,将所述第二数据写入至第二核的私有缓存。
3.如权利要求1所述的方法,其中,在所述第二核要访问所述第一数据之前,所述第一数据和所述第二数据已从所述共享缓存被预取至所述第一私有缓存中。
4.如权利要求1所述的方法,其中,所述共享缓存包括目录,所述目录包括至少一个条目,每个条目包括:地址、状态标识符、核标识符、预取模式和预取步长,所述第一核对所述第一数据的预取记录被对应地存储为对应条目中的预取模式和预取步长。
5.如权利要求4所述的方法,其中,所述基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:
基于第二核要访问的第一数据对应的访问地址,在所述共享缓存的目录中获取所述访问地址对应的预取模式和预取步长;
基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址;以及
基于所述第二数据对应的地址,将第二数据从第一私有缓存写至共享缓存。
6.如权利要求5所述的方法,其中,所述预取模式包括连续模式和步长模式,所述基于所述访问地址、所述访问地址对应的预取模式和预取步长,确定第一核在预取第一数据之后预取的第二数据对应的地址还包括:
响应于预取模式为连续模式,将所述访问地址与缓存行大小之和确定为所述第二数据对应的地址;
响应于预取模式为步长模式,将所述访问地址与预取步长倍数的缓存行大小之和确定为第二数据对应的地址。
7.如权利要求4所述的方法,其中,所述共享缓存还包括控制器,所述响应于第二核要访问的第一数据已被预取至第一私有缓存中,将所述第一数据从第一私有缓存写至共享缓存还包括:
所述控制器从第二核接收访问请求,所述访问请求包括第二核要访问的第一数据对应的访问地址;
所述控制器查询所述目录,确定所述第一数据已被预取至第一私有缓存;
所述控制器向第一核发送第一写回请求,所述第一写回请求包括所述访问地址;
第一核向共享缓存返回第一写回响应,所述第一写回响应包括所述第一数据和所述第一数据对应的状态标识符;以及
所述控制器基于所述第一写回响应中的所述第一数据对应的状态标识符修改所述目录中所述第一数据对应的状态标识符。
8.如权利要求7所述的方法,其中,所述将所述第一数据从所述共享缓存写入至第二私有缓存还包括:
所述控制器向第二私有缓存发送访问响应,所述访问响应包括所述访问地址和所述第一数据;以及
所述控制器修改所述目录中所述访问地址对应的核标识符。
9.如权利要求8所述的方法,其中,所述基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:
所述控制器查询所述目录,基于所述第一数据对应的访问地址,确定第一核在预取第一数据之后预取的第二数据对应的地址;
所述控制器向第一核发送第二写回请求,所述第二写回请求包括所述第二数据对应的地址;
所述第一核向共享缓存返回第二写回响应,所述第二写回响应包括所述第二数据和所述第二数据对应的状态标识符;以及
所述控制器基于所述第二数据对应的状态标识符修改所述目录中所述第二数据对应的状态标识符。
10.如权利要求1-9中任一项所述的方法,其中,所述基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:
基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的预定数量的第二数据从第一私有缓存写至共享缓存。
11.如权利要求1-9中任一项所述的方法,其中,所述基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从第一私有缓存写至共享缓存还包括:
基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的所有第二数据从第一私有缓存写至共享缓存。
12.一种由共享缓存访问数据的方法,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述方法包括:
响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;
基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
13.一种共享缓存,其配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述共享缓存被配置为执行如权利要求12所述的方法。
14.一种多处理器***,包括第一核、第二核、以及由第一核和第二核共享的共享缓存,其中,第一核具有第一私有缓存,第二核具有第二私有缓存,所述多处理器***被配置为执行如权利要求1-11中任一项所述的方法。
15.一种用于在多处理器***中访问数据的装置,所述多处理器***包括第一核、第二核、以及由所述第一核和所述第二核共享的共享缓存,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述装置包括:
第一写入模块,被配置为响应于所述第二核要访问的第一数据已被预取至所述第一私有缓存中,将所述第一数据从所述第一私有缓存写至所述共享缓存;
第二写入模块,被配置为将所述第一数据从所述共享缓存写至所述第二私有缓存;以及
第三写入模块,被配置为基于所述第一核对所述第一数据进行预取的预取记录,将所述第一核在预取所述第一数据之后预取的第二数据从所述第一私有缓存写至所述共享缓存。
16.一种利用共享缓存访问数据的装置,所述共享缓存配置为由至少第一核和第二核共享,所述第一核具有第一私有缓存,所述第二核具有第二私有缓存,所述装置包括:
第一写入模块,被配置为响应于确定所述第二核要访问的第一数据已被预取至第一私有缓存中,向所述第一核发送第一写回请求,所述第一写回请求包括第一数据对应的地址;
第二写入模块,被配置为基于所述第一核对所述第一数据进行预取的预取记录,向所述第一核发送第二写回请求,所述第二写回请求包括所述第一核在预取所述第一数据之后预取的第二数据对应的地址。
17.一种计算机可读存储介质,其上存储计算机可读指令,当所述计算机可读指令由多处理器***执行时,所述多处理器***执行如权利要求1-11任一项所述的方法。
18.一种计算机可读存储介质,其上存储计算机可读指令,当所述计算机可读指令由共享缓存执行时,多处理器***执行如权利要求12所述的方法。
CN202110623705.9A 2021-06-04 2021-06-04 在多处理器***中访问数据的方法和多处理器*** Active CN113342709B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110623705.9A CN113342709B (zh) 2021-06-04 2021-06-04 在多处理器***中访问数据的方法和多处理器***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110623705.9A CN113342709B (zh) 2021-06-04 2021-06-04 在多处理器***中访问数据的方法和多处理器***

Publications (2)

Publication Number Publication Date
CN113342709A CN113342709A (zh) 2021-09-03
CN113342709B true CN113342709B (zh) 2023-02-21

Family

ID=77474800

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110623705.9A Active CN113342709B (zh) 2021-06-04 2021-06-04 在多处理器***中访问数据的方法和多处理器***

Country Status (1)

Country Link
CN (1) CN113342709B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113791989B (zh) * 2021-09-15 2023-07-14 深圳市中科蓝讯科技股份有限公司 基于cache的缓存数据处理方法、存储介质及芯片
CN114036084B (zh) * 2021-11-17 2022-12-06 海光信息技术股份有限公司 一种数据访问方法、共享缓存、芯片***和电子设备
CN114217861A (zh) * 2021-12-06 2022-03-22 海光信息技术股份有限公司 数据处理方法及装置、电子装置和存储介质
CN114741351B (zh) * 2022-06-10 2022-10-21 深圳市航顺芯片技术研发有限公司 多核芯片及计算机设备
CN115328820B (zh) * 2022-09-28 2022-12-20 北京微核芯科技有限公司 多级缓存***的访问方法、数据存储方法及装置
CN116049031A (zh) * 2023-02-28 2023-05-02 海光信息技术股份有限公司 数据处理方法、装置、电子设备和存储介质
CN117014504B (zh) * 2023-08-11 2024-04-16 北京市合芯数字科技有限公司 数据传输方法、装置、设备、介质及产品

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101034381A (zh) * 2006-03-08 2007-09-12 松下电器产业株式会社 多主机***和数据传送***
CN104981786A (zh) * 2013-03-05 2015-10-14 国际商业机器公司 在多核芯片中为母核预取

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274960B2 (en) * 2012-03-20 2016-03-01 Stefanos Kaxiras System and method for simplifying cache coherence using multiple write policies
EP3835959A4 (en) * 2018-08-24 2021-11-10 Huawei Technologies Co., Ltd. DATA PRE-EXTRACTION PROCESS AND DEVICE
CN112416615A (zh) * 2020-11-05 2021-02-26 珠海格力电器股份有限公司 多核处理器及其缓存一致性的实现方法、装置和存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101034381A (zh) * 2006-03-08 2007-09-12 松下电器产业株式会社 多主机***和数据传送***
CN104981786A (zh) * 2013-03-05 2015-10-14 国际商业机器公司 在多核芯片中为母核预取

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
支持指令预取的两级指令缓存WCET分析;韩丽艳等;《渤海大学学报(自然科学版)》;20170915(第03期);全文 *

Also Published As

Publication number Publication date
CN113342709A (zh) 2021-09-03

Similar Documents

Publication Publication Date Title
CN113342709B (zh) 在多处理器***中访问数据的方法和多处理器***
US9384134B2 (en) Persistent memory for processor main memory
US8015365B2 (en) Reducing back invalidation transactions from a snoop filter
US8271735B2 (en) Cache-coherency protocol with held state
US6304945B1 (en) Method and apparatus for maintaining cache coherency in a computer system having multiple processor buses
US8706973B2 (en) Unbounded transactional memory system and method
US10019377B2 (en) Managing cache coherence using information in a page table
JP4447580B2 (ja) 分散共有メモリマルチプロセッサシステムのための分割疎ディレクトリ
JP3963372B2 (ja) マルチプロセッサ・システム
US20080086599A1 (en) Method to retain critical data in a cache in order to increase application performance
US20120102273A1 (en) Memory agent to access memory blade as part of the cache coherency domain
JP7340326B2 (ja) メンテナンス動作の実行
US20130073811A1 (en) Region privatization in directory-based cache coherence
US10761986B2 (en) Redirecting data to improve page locality in a scalable data fabric
US6898676B2 (en) Computer system supporting both dirty-shared and non-dirty-shared data processing entities
JP2005519391A (ja) 共有ベクトルの増加を伴わないdsmマルチプロセッサシステムにおけるキャッシュコヒーレンスのための方法およびシステム
JP2009528612A (ja) データ処理システム並びにデータ及び/又は命令のプリフェッチ方法
US6950906B2 (en) System for and method of operating a cache
CN112579480A (zh) 存储管理方法、存储管理装置以及计算机***
US20210303478A1 (en) Memory management
JP2007058349A (ja) キャッシュシステム
US20240211402A1 (en) Condensed Coherence Directory Entries for Processing-in-Memory
US10977176B2 (en) Prefetching data to reduce cache misses
CN116049031A (zh) 数据处理方法、装置、电子设备和存储介质
US20100122032A1 (en) Selectively performing lookups for cache lines

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