CN117546148A - 动态地合并原子存储器操作以进行存储器本地计算 - Google Patents

动态地合并原子存储器操作以进行存储器本地计算 Download PDF

Info

Publication number
CN117546148A
CN117546148A CN202280044353.4A CN202280044353A CN117546148A CN 117546148 A CN117546148 A CN 117546148A CN 202280044353 A CN202280044353 A CN 202280044353A CN 117546148 A CN117546148 A CN 117546148A
Authority
CN
China
Prior art keywords
memory access
atomic
atomic memory
merging
memory
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.)
Pending
Application number
CN202280044353.4A
Other languages
English (en)
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of CN117546148A publication Critical patent/CN117546148A/zh
Pending legal-status Critical Current

Links

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/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/0871Allocation or management of cache space
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • G06F12/0857Overlapped cache accessing, e.g. pipeline by multiple requestors
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • 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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • 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
    • G06F12/0879Burst mode
    • 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/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

动态地合并原子存储器操作以进行存储器本地计算
背景技术
计算系统通常包括多个处理资源(例如,一个或多个处理器),该多个处理资源可检索并执行指令并且将所执行的指令的结果存储到合适的位置。处理资源(例如,中央处理单元(CPU)或图形处理单元(GPU))可包括多个功能单元,诸如例如算术逻辑单元(ALU)电路、浮点单元(FPU)电路和/或组合逻辑块,该多个功能单元可用于通过对数据执行算术运算来执行指令。例如,功能单元电路可用于对操作数执行算术运算,诸如加法、减法、乘法和/或除法。通常,处理资源(例如,处理器和/或相关联的功能单元电路)可在存储器设备外部,并且经由处理资源与存储器设备之间的总线或互连器访问数据以执行一组指令。为了减少获取或存储存储器设备中的数据的访问量,计算系统可采用临时存储最近访问或修改的数据以供处理资源或处理资源群组使用的高速缓存层次结构。然而,可通过将某些操作卸载到基于存储器的设备执行设备来进一步改善处理性能,其中处理资源在存储器内部和/或存储器附近实施,使得更靠近存储数据的存储器位置而不是使数据更靠近处理资源来执行数据处理。邻存或存内计算设备可以通过减少外部通信(即,主机到存储器设备通信)来节省时间,并且还可以节省功率。
附图说明
图1阐述了根据本公开的一些实施方案的用于动态地合并原子存储器操作以进行存储器本地计算的示例系统的框图。
图2阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。
图3阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。
图4阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。
图5阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的另一示例方法的流程图。
图6阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的另一示例方法的流程图。
图7阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的另一示例方法的流程图。
图8阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的另一示例方法的流程图。
图9阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的另一示例方法的流程图。
图10阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的另一示例方法的流程图。
具体实施方式
由于计算吞吐量比存储器带宽更快地扩展,因此已提议许多技术来向增长的计算能力保持馈送数据。特别地,诸如存内处理(PIM)硬件的存储器本地处理硬件将计算移动成靠近存储器,从而利用靠近存储器的逻辑产生与主机可用存储器带宽相比更高的存储器带宽的益处。
通常用于许多稀疏/不规则应用中的原子存储器访问(诸如读取-修改-写入(RMW)操作)展现PIM加速的可能性。这些操作取操作数,用该操作数和存储器中的目标数据片执行某一操作,并将结果存储到存储器中的同一位置。在非PIM系统中,这需要跨存储器接口的两次转移:一次转移将数据从存储器加载到主机(在主机处用输入操作数对该数据进行操作),并且一次转移将结果从主机存储到存储器。在PIM系统中,在PIM中执行操作将使转移数从2减少到1:将主机操作数从主机发送到存储器,其中可在存储器中本地执行到目标位置数据的加载和存储。所得的2倍吞吐量增加有可能极大地改进原子重工作负载的性能,该原子重工作负载通常受存储器带宽限制。
然而,原子重工作负载常常是稀疏的或不规则的,这以至少两种方式对PIM具体实施造成问题。首先,对于一些应用(例如,图形分析、稀疏机器学习),不规则性使得难以预测给定访问是否将命中高速缓存。因为PIM仅为在高速缓存中未命中且必须去往存储器的RMW访问提供益处(如果该访问原本将命中高速缓存,则其可能使性能降级),所以将PIM用于所有RMW访问可能最终使具有高局部性的应用的性能降级。即,PIM失去了在基于主机的具体实施中可能存在的任何高速缓存局部性(即,主机访问可能比PIM访问便宜)。对于许多不规则原子访问,静态地标识命中高速缓存的访问将是不可行的。因此,在运行时动态地决定是否将PIM用于这些不规则原子将是有利的。
另外,在一些PIM具体实施中,细粒度PIM命令占用与标准存储器操作相同量的命令总线带宽。因此,改进PIM的吞吐量需要同时将PIM操作(例如,经由共享命令总线)多播到多个存储器模块。这对于原子展现出高不规则性(例如,基于推送的图形分析、稀疏机器学习等)的原子重应用而言可能是困难的。对于存储体本地PIM具体实施,多播PIM命令必须对来自行缓冲器的所有目标存储体中的同一列索引执行同一操作,并且如果该命令含有即时数据操作数,则该操作数对于所有存储体必须相同。在不规则工作负载中静态地检测多播机会是不可行的;并且实际上,大多数多播命令机会可能来自同时向具有同一列索引的地址发送更新的完全不同的线程。
根据本公开的实施方案涉及动态地合并原子存储器操作以进行存储器本地计算。根据本公开的实施方案包括高速缓存行合并,该高速缓存行合并是用于将多个未决原子动态地合并到同一高速缓存行以便在实现存储器本地计算中的任何操作之前利用原子高速缓存局部性和重用的机制。根据本公开的实施方案还包括多模块合并,该多模块合并是用于将去往不同高速缓存行的未决原子动态地合并到单个多播存储器本地处理命令中的机制。
一实施方案涉及一种动态地合并原子存储器操作以进行存储器本地计算的方法。所述方法包括确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选。所述方法还包括在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问。在一些情况下,所述存储器本地计算单元是存内处理(PIM)单元。可以在发出经合并的多播请求之前执行在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问(例如,以便请求由存储器本地计算单元进行存储器本地处理)。
在一些具体实施中,所述方法还包括:确定所述第一原子存储器访问是用于合并的候选;在不从存储器加载数据的情况下分配处于特殊状态的高速缓存行;将所述第一原子存储器访问的操作数存储在所述高速缓存行中由所述第一原子存储器访问作为目标的位置处。在这些具体实施中,确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选可以包括:确定所述第二原子存储器访问是用于与所述第一原子存储器访问合并的候选。在这些具体实施中,在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问可以包括:通过使用所述第二原子存储器访问的操作数对所述高速缓存行中由所述第二原子存储器访问作为目标的位置处的数据执行所述第二原子存储器访问的操作,合并所述第一原子存储器访问和所述第二原子存储器访问。
在一些具体实施中,所述方法还包括响应于触发事件而向存储器控制器发送用于所述第一原子存储器访问和所述第二原子存储器访问的一个或多个存储器本地处理命令。在一些具体实施中,所述方法还包括基于一个或多个度量来确定是否为所述第一原子存储器访问分配处于所述特殊状态的所述高速缓存行。
在一些具体实施中,确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并。在这些具体实施中,基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并可以包括:响应于触发事件而确定包括所述第一原子存储器访问的第一高速缓存行是否能够与包括所述第二原子存储器访问的第二高速缓存行合并,其中所述第一高速缓存行和所述第二高速缓存行处于特殊高速缓存状态。在一些情况下,可以在单独的物理结构中跟踪作为用于合并的候选的高速缓存行。
在一些具体实施中,在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:使用多模块存储器本地处理命令来合并所述第一原子存储器访问和所述第二原子存储器访问。
另一实施方案涉及用于动态地合并原子存储器操作以进行存储器本地计算的计算设备。所述计算设备包括逻辑电路,所述逻辑电路被配置为:确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问。在一些情况下,所述存储器本地计算单元是PIM单元。
在一些具体实施中,所述逻辑电路被进一步配置为:确定所述第一原子存储器访问是用于合并的候选;在不从存储器加载数据的情况下分配处于特殊状态的高速缓存行;以及将所述第一原子存储器访问的操作数存储在所述高速缓存行中由所述第一原子存储器访问作为目标的位置处。在一些具体实施中,确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:确定所述第二原子存储器访问是用于与所述第一原子存储器访问合并的候选。在这些具体实施中,在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问可以包括:通过使用所述第二原子存储器访问的操作数对所述高速缓存行中由所述第二原子存储器访问作为目标的位置处的数据执行所述第二原子存储器访问的操作,合并所述第一原子存储器访问和所述第二原子存储器访问。这些具体实施还可以包括响应于触发事件而向存储器控制器发送用于所述第一原子存储器访问和所述第二原子存储器访问的一个或多个存储器本地处理命令。
在一些具体实施中,确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并。在这些具体实施中,基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并可以包括:响应于触发事件而确定包括所述第一原子存储器访问的第一高速缓存行是否能够与包括所述第二原子存储器访问的第二高速缓存行合并,其中所述第一高速缓存行和所述第二高速缓存行处于特殊高速缓存状态。在一些具体实施中,在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问可以包括:使用多模块存储器本地处理命令来合并所述第一原子存储器访问和所述第二原子存储器访问。
又一实施方案涉及一种用于动态地合并原子存储器操作以进行存储器本地计算的系统。所述系统包括存储器设备,所述存储器设备包括至少一个存储器本地计算单元。所述系统还包括计算设备,所述计算设备被配置为:确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问。
在一些具体实施中,所述计算设备被进一步配置为:确定所述第一原子存储器访问是用于合并的候选;在不从存储器加载数据的情况下分配处于特殊状态的高速缓存行;以及将所述第一原子存储器访问的操作数存储在所述高速缓存行中由所述第一原子存储器访问作为目标的位置处。在这些具体实施中,确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:确定所述第二原子存储器访问是用于与所述第一原子存储器访问合并的候选。在这些具体实施中,在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:通过使用所述第二原子存储器访问的操作数对所述高速缓存行中由所述第二原子存储器访问作为目标的位置处的数据执行所述第二原子存储器访问的操作,合并所述第一原子存储器访问和所述第二原子存储器访问。
在一些具体实施中,确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并。在这些具体实施中,在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:使用多模块存储器本地处理命令来合并所述第一原子存储器访问和所述第二原子存储器访问。
将从图1开始更详细地描述根据本公开的实施方案。贯穿本说明书和附图,相同的附图标记指代相同的元件。图1阐述了根据本公开的一些实施方案的用于动态地合并原子存储器操作以进行存储器本地计算的示例系统100的框图。图1的示例系统100包括主机设备130(例如,片上系统(SoC)设备或系统级封装(SiP)设备),该主机设备包括至少一个主机执行引擎102。尽管未描绘,但是主机设备130可以包括多个主机执行引擎,该多个主机执行引擎包括多个不同类型的主机执行引擎。在各种示例中,主机执行引擎102可以是中央处理单元(CPU)、图形处理单元(GPU)、加速处理单元(APU)、专用处理器、可配置处理器,或能够支持多个并发计算序列的其他此类计算引擎。主机设备130在主机执行引擎102上托管一个或多个应用。被托管的应用可以是多线程应用,使得主机执行引擎102可以执行应用的多个并发线程,并且/或者多个执行引擎102可以同时执行同一应用的线程。
在图1的示例中,主机执行引擎是GPU计算单元,该GPU计算单元包括具有多个处理元件106、寄存器文件134和一级高速缓存136的多个单指令多数据(SIMD)核104。调度器108从指令池加载指令并将该指令部署在SIMD核104上以供执行。当需要对系统存储器120的存储器访问时,SIMD核104向高速缓存层次结构、本地数据存储、全局数据存储或其他瞬态存储部件发出存储器访问请求。出于此论述的目的,假设每个存储器请求穿过由多个SIMD核共享且可由多个主机执行引擎102共享的高速缓存140(即,最低级高速缓存)。在一些情况下,存储器访问请求可由高速缓存(即,由高速缓存控制逻辑142)服务。在高速缓存控制逻辑142不能服务高速缓存140中的存储器访问请求的其他情况下,高速缓存控制逻辑142向存储器控制器112发出针对由该请求作为目标的数据的存储器访问请求。存储器控制器112继而向系统存储器120发出命令,该命令使得存储在由该请求作为目标的存储器位置处的数据从系统存储器120被加载到高速缓存140的高速缓存行144中。
在图1的示例中,系统存储器120包括多个模块,诸如DRAM存储体128。通过互连器180连接到存储器控制器112的存储器模块的集合表示存储器通道。因此,图1描绘一个存储器通道,但存储器通道可以包括多个存储器控制器。此外,系统存储器120可以包括多个存储器通道。系统存储器120包括或耦合到一个或多个存储器本地计算单元。存储器本地计算单元包括寄存器、ALU或简单计算核,以及用于对存储在系统存储器120中的数据执行简单算术运算的控制逻辑。在一些示例中,存储器本地计算单元可以是耦合到存储器设备(例如,存储器裸片或芯片)的邻存计算单元。例如,邻存计算单元可以在3D堆叠存储器的逻辑裸片中、耦合到存储器设备的存储器加速器中或主机设备130与系统存储器120之间的中介层上实现。在其他示例中,存储器本地计算单元可为存内处理(PIM)单元,该PIM单元在存储器裸片中或特定来说在DRAM存储体(即,存储体本地PIM单元)内实现。出于说明而非限制的目的,图1中的系统存储器120包括作为存储器本地计算单元的多个存储体本地PIM单元126。
高速缓存140还包括可以对高速缓存中的数据执行原子操作的高速缓存计算逻辑146。例如,当在高速缓存处接收到原子存储器访问请求(即,包括原子操作的存储器访问请求)时,由原子存储器访问请求作为目标的数据可能已经被存储在高速缓存140中。在此示例中,高速缓存计算逻辑146使用在请求中供应的操作数以及高速缓存中对应于由请求作为目标的位置(例如,存储器地址)的数据来执行原子存储器访问请求的原子操作(例如,读取-修改-写入(RMW)操作)。如果由原子存储器访问请求作为目标的数据尚未被存储在高速缓存中,则高速缓存控制逻辑142分配高速缓存行144并从系统存储器加载包括由原子RMW访问请求作为目标的数据的数据。高速缓存计算逻辑146使用所加载的数据和由请求供应的操作数来执行原子操作,并且将结果存储到所分配的高速缓存行。在任一情况下,当触发脏数据的回写时(例如,当逐出高速缓存行时),将经更新的高速缓存行写入到系统存储器120。
当原子存储器访问请求未命中高速缓存140时,高速缓存控制逻辑142可以通过发出针对要在存储器本地计算单元(即,PIM单元126)处执行的原子操作的请求而不是将数据加载到高速缓存140中以供在主机设备130中执行来减少数据转移。然而,虽然此技术利用了存储器本地计算和PIM的益处,但是它忽略了高速缓存局部性和重用,因为目标数据从未被加载到高速缓存140中。因此,对同一高速缓存行的多次命中将继续触发同一数量的PIM请求。
为了平衡这些技术,利用特殊高速缓存状态来允许原子存储器访问在向存储器本地计算单元发送原子存储器访问以供执行之前在高速缓存行中合并。此原子合并(AC)状态可以用于延迟高速缓存中的可由PIM单元126执行的原子操作,并且将该原子操作与同一类型的后续原子一起合并到同一高速缓存行。AC状态的使用要求所涉及的原子操作是交换的和关联的(例如,加法、乘法、MAX、MIN),并且不返回数据值。然而,一些非交换操作可被转换为在高速缓存处交换(例如,原子减法可以通过对操作数求反而被转换为原子加法)。当高速缓存控制逻辑142分配处于AC状态的高速缓存行时,高速缓存行未填充有从系统存储器加载的数据。实情是,原子存储器访问请求的操作数存储在高速缓存行中。将允许不返回数据值的同一类型的后续原子存储器访问命中高速缓存行,并且将在高速缓存行中将对应操作数存储在目标位置处。将不允许标准读取或写入操作或返回数据值的原子操作命中高速缓存。在此情况下,情况未命中将触发将数据从存储器加载到高速缓存行中,将对所加载的数据执行未决原子操作,并且将把结果写入到高速缓存行且标记为脏有效。假设没有接收到这样的非合并存储器访问请求,则原子操作将继续在高速缓存行中合并,直到触发数据的回写为止,此时高速缓存控制逻辑142将发出用于高速缓存行中所表示的原子操作的PIM命令。
在一些示例中,对于不同类型的原子操作可以存在不同的AC状态。例如,可存在用于原子加法的一个AC状态和用于原子乘法的另一AC状态,但每高速缓存行可存储仅一种类型的原子。在其他示例中,可以较粗粒度(诸如高速缓存存储体)跟踪AC状态。例如,给定的高速缓存存储体可以在任何时间仅允许一种类型的原子用于AC状态。在更进一步的示例中,由高速缓存控制器跟踪的AC状态可以是硬连线的或者基于预期的用例由软件预先设置。例如,系统可以仅支持用于使用原子加法操作的原子RMW访问的合并。
高速缓存控制逻辑142还可以通过发出合并PIM操作的多模块PIM命令来利用对多个DRAM模块的并行访问。对于存储体本地PIM具体实施,多播PIM命令对来自行缓冲器的所有目标DRAM存储体中的同一列索引执行同一操作。在一个示例中,高速缓存控制逻辑142使用高速缓存行的AC状态来标识可以通过将PIM请求组合到去往多个DRAM存储体的多播PIM命令中而合并的高速缓存行。
为了进一步解释,图2阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。该方法包括确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选。在一些示例中,确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选是通过高速缓存控制逻辑(例如,图1的高速缓存控制逻辑142)确定诸如原子读取-修改-写入(RMW)访问的两个或更多个原子存储器访问是否可以通过基于同一触发事件一起发送用于这两个或更多个原子RMW访问的邻存处理命令而合并来执行的。例如,触发事件可以是影响两个或更多个RMW访问中的至少一个RMW访问的回写、高速缓存行逐出或高速缓存行插入。在一个示例中,如果命中同一高速缓存行的两个原子RMW访问使用同一类型的修改操作,则该两个原子RMW访问可以是用于合并的候选。在另一示例中,如果两个原子RMW访问以不同存储器模块的存储器位置为目标,则该两个原子RMW访问可以是用于合并的候选。
在一些示例中,确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选可以包括确定两个原子RMW访问是否是用于高速缓存行合并的候选。在这些示例中,确定两个原子RMW访问是否是用于高速缓存行合并的候选可以包括:确定两个原子RMW访问是否以同一高速缓存行为目标;确定两个原子RMW访问是否使用同一原子操作;确定那些操作是否是团体的和关联的;以及确定操作是否需要返回值。在此类示例中,当两个原子RMW访问命中同一高速缓存行时,使用作为团体和关联操作的同一类型的原子操作(例如,两个操作均为加法操作,两个操作均为乘法操作等),并且当两个访问均不需要返回值时,则两个原子RMW访问是用于高速缓存行合并的候选,如下文将更详细地解释。
在一些示例中,确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选可以包括确定两个原子RMW访问是否是用于多模块合并的候选。在这些示例中,确定两个原子RMW访问是否是用于多模块合并的候选可以包括确定放置在不同高速缓存行中的两个原子RMW访问是否使用同一类型的邻存计算操作,以及该访问是否针对DRAM行中具有同一列偏移的同一通道的不同存储体。在此类示例中,当两个原子RMW访问放置在不同高速缓存行中并使用同一类型的邻存计算操作时,并且当那些原子RMW访问使用DRAM行中的同一列偏移以同一通道的不同存储体作为目标时,该两个原子RMW访问是用于多模块合并的候选,如下文将更详细地解释。
为了进一步解释,图3阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图2的示例方法,图3的示例方法还包括:确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并220第一原子存储器访问和第二原子存储器访问。
如先前所提及,根据一些实施方案的合并包括高速缓存行合并。为了便于高速缓存行合并,图3的示例方法还包括确定310第一原子存储器访问是用于合并的候选。在一些示例中,确定310第一原子存储器访问是用于合并的候选是通过高速缓存控制器(例如,高速缓存控制逻辑142)例如从主机计算单元(例如,图1的主机计算引擎102)接收或标识针对第一原子RMW访问的存储器请求来执行的。在这些示例中,确定310第一原子存储器访问是用于合并的候选还包括确定第一原子RMW访问使用可以在邻存计算单元处执行的团体和关联操作。在一些示例中,确定310第一原子存储器访问是用于合并的候选还包括确定由针对第一原子RMW请求的请求作为目标的存储器位置命中无效高速缓存行或未命中高速缓存。
图3的示例方法还包括在不从存储器加载数据的情况下分配320处于特殊状态的高速缓存行。在一些示例中,在不从存储器加载数据的情况下分配320处于特殊状态的高速缓存行是通过高速缓存控制器分配处于上述原子合并(AC)状态的高速缓存行来执行的。此外,在不使用从系统存储器加载的数据填充高速缓存行的情况下在AC状态下分配高速缓存行。在一些示例中,对于不同类型的原子操作可以存在不同的AC状态。例如,可存在用于原子加法的一个AC状态和用于原子乘法的另一AC状态,但每高速缓存行可存储仅一种类型的原子。在其他示例中,可以较粗粒度(诸如高速缓存存储体)跟踪AC状态。例如,给定的高速缓存存储体可以在任何时间仅允许一种类型的原子用于AC状态。在更进一步的示例中,由高速缓存控制器跟踪的AC状态可以基于支持限制被硬连线。例如,系统可以仅支持用于使用原子加法操作的原子RMW访问的合并。
当高速缓存行处于AC状态时,针对作为用于与第一原子RMW合并的候选的原子RMW访问的另一请求将引起高速缓存命中。然而不是用于与第一原子RMW访问合并的候选的另一请求将引起高速缓存未命中。例如,另一存储器请求(诸如针对读取存储器访问、写入存储器访问、包括非团体或非关联原子操作的存储器访问或包括具有返回值的原子操作的存储器访问的请求)将引起高速缓存未命中。此外,接收到不是用于合并的候选的另一存储器请求将触发将数据从系统存储器加载到高速缓存行中,并且AC状态将转变到脏有效状态。
图3的示例方法还包括将第一原子存储器访问的操作数存储330在高速缓存行中由第一原子存储器访问作为目标的位置处。在一些示例中,将第一原子存储器访问的操作数存储330在高速缓存行中由第一原子存储器访问作为目标的位置处是通过高速缓存控制器将包括在针对第一原子RMW访问的请求中的操作数存储在高速缓存行中由访问作为目标的位置(例如,偏移或地址)处来执行的。在这些示例中,将第一原子存储器访问的操作数存储330在高速缓存行中由第一原子存储器访问作为目标的位置处还可以包括将NULL值(例如,用于原子加法/减法的“0”、用于原子乘法的“1”、用于原子MIN的MAX_INT等)存储在高速缓存行的其余部分中。考虑原子RMW访问(其是以对应于具有操作数值N的高速缓存行中的偏移位置M的地址为目标的原子加法操作)的示例。当原子RMW访问请求命中无效高速缓存行时,以AC状态分配高速缓存行以进行原子加法操作。(来自原子RMW访问请求的)原子加法操作的操作数值N被存储在高速缓存行中的偏移位置M处。高速缓存行中的所有其他偏移被设置为“0”。对于命中处于AC状态的高速缓存行并且是用于合并的候选的任何后续原子RMW访问请求,使用来自后续请求的操作数以及操作数值N(如果后续请求以未决原子的偏移位置M为目标)或操作数值“0”(如果后续请求以高速缓存行中的任何其他位置为目标)来适当地执行该原子RMW访问的原子操作。
在图3的示例方法中,确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括确定340第二原子存储器访问是用于与第一原子存储器访问合并的候选。在一些示例中,确定340第二原子存储器访问是用于与第一原子存储器访问合并的候选是通过高速缓存控制器确定针对第二原子RMW访问的请求命中处于AC状态的高速缓存行并且检查第二原子RMW访问的属性来执行的。如果第二RMW访问是与第一RMW访问相同类型的原子操作并且该操作是团体的和关联的(例如,原子加法),并且第二RMW访问不需要返回值,则第二RMW访问可以被确定为用于与第一原子RMW访问合并的候选。
为了进一步解释,图4阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图3的示例方法,图4的示例方法还包括:确定310第一原子存储器访问是用于合并的候选;在不从存储器加载数据的情况下分配320处于特殊状态的高速缓存行;将第一原子存储器访问的操作数存储330在高速缓存行中由第一原子存储器访问作为目标的位置处;确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:确定340第二原子存储器访问是用于与第一原子存储器访问合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并220第一原子存储器访问和第二原子存储器访问。
在图4的示例方法中,在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并220第一原子存储器访问和第二原子存储器访问包括:通过使用第二原子存储器访问的操作数对高速缓存行中由第二原子存储器访问作为目标的位置处的数据执行第二原子存储器访问的操作来合并410第一原子存储器访问和第二原子存储器访问,其中第一原子存储器访问和第二原子存储器访问以同一高速缓存行中的一个或多个位置作为目标。在一些示例中,通过使用第二原子存储器访问的操作数对高速缓存行中由第二原子存储器访问作为目标的位置处的数据执行第二原子存储器访问的操作来合并410第一原子存储器访问和第二原子存储器访问是通过高速缓存控制器延迟向存储器控制器发送对应于第一RMW访问的一个或多个邻存处理命令(例如,PIM命令)来执行的。即,允许作为用于合并的候选的后续RMW访问(例如,第二原子RMW访问)通过在高速缓存行中执行那些原子操作来合并,直到触发事件发生为止。第二或后续RMW访问的修改操作(例如,atomicAdd、atomicMultiply)是使用第二RMW访问的操作数对高速缓存行中包括第一RMW访问或先前RMW访问的操作数的数据执行的。
例如,如果第一RMW访问包括以特定高速缓存行偏移为目标的atomicAdd操作,并且第一RMW访问的操作数是“5”,则“5”被存储在特定高速缓存行偏移处(假设初始值是NULL)。当具有操作数“3”的第二RMW访问以与第一RMW访问相同的高速缓存行偏移作为目标且第二RMW访问还包括atomicAdd操作时,则对存储在该偏移处的数据(第一RMW访问的操作数“5”)执行(使用操作数“3”的)第二RMW访问的atomicAdd操作。操作的结果值(即,“8”)被存储在由第一RMW访问作为目标的同一偏移处。然而,如果第二RMW访问以与第一RMW访问相同的高速缓存行作为目标,但是在不同的第二位置(即,不同的偏移)处,并且该位置的值从原始高速缓存行分配为NULL,则第二RMW访问的操作数被存储在第二位置处。因此,通过在目标位置处的值为NULL的情况下将RMW访问的操作数存储在高速缓存行中,或通过在RMW访问以高速缓存行中的同一位置(即,偏移)作为目标时在高速缓存行中执行对应操作,在高速缓存行中合并RMW访问。
在一些示例中,合并是通过高速缓存计算单元(例如,图1的高速缓存计算逻辑)基于后续原子RMW访问的操作数和存储在高速缓存行中的目标位置处的数据而执行原子操作来执行的。例如,高速缓存行中在目标位置处的数据可以是在处于AC状态的高速缓存行的分配期间初始化的NULL值。高速缓存行中在目标位置处的数据可以是来自先前未决原子RMW访问的操作数值。高速缓存行中在目标位置处的数据可以是两个或更多个先前未决原子RMW访问的计算结果。在一些示例中,终止合并的触发事件可以是(例如,归因于处于AC状态的高速缓存行的逐出的)回写,此时,发出经合并的原子RMW访问以供存储器本地计算单元执行。在其他示例中,终止合并的触发事件可以是并非用于合并的候选且以高速缓存行中的位置作为目标的存储器访问。在这些示例中,存储器访问未命中高速缓存,从而使得数据从系统存储器加载到高速缓存行中。在此示例中,对所加载的数据执行未决原子RMW访问,并且将含有经修改数据的高速缓存行从AC状态转变为脏有效状态。
为了进一步解释,图5阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图4的示例方法,图5的示例方法还包括:确定310第一原子存储器访问是用于合并的候选;在不从存储器加载数据的情况下分配320处于特殊状态的高速缓存行;将第一原子存储器访问的操作数存储330在高速缓存行中由第一原子存储器访问作为目标的位置处;确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:确定340第二原子存储器访问是用于与第一原子存储器访问合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并220第一原子存储器访问和第二原子存储器访问,包括:通过使用第二原子存储器访问的操作数对高速缓存行中由第二原子存储器访问作为目标的位置处的数据执行第二原子存储器访问的操作来合并410第一原子存储器访问和第二原子存储器访问,其中第一原子存储器访问和第二原子存储器访问以同一高速缓存行中的一个或多个位置作为目标。
图5的示例方法还包括响应于触发事件而向存储器控制器发送510用于第一原子存储器访问和第二原子存储器访问的一个或多个存储器本地处理命令。在一些示例中,响应于触发事件而向存储器控制器发送510用于第一原子存储器访问和第二原子存储器访问的一个或多个存储器本地处理命令是通过高速缓存控制器生成用于已经在处于AC状态的高速缓存行中合并的每个原子RMW访问的存储器本地处理命令(例如,PIM命令)来执行的。在一些情况下(例如,在主机计算单元是GPU的情况下),可以使用单个指令在多个SIMD数据道上传输对应于每个原子RMW访问的存储器本地处理命令流。存储器本地计算操作将可能是以比单个原子访问粗的粒度(但仍可能以比全高速缓存行细的粒度)。如果存储器本地处理命令是用于单个原子,则这可能是浪费的,因为除了一个SIMD道之外的所有SIMD道都需要被禁用。然而,如果多个原子访问落入同一存储器本地处理块中,则PIM SIMD操作可以利用单个操作来执行该多个原子访问。例如,单个“加载+加法”存储器本地处理命令可以用于高速缓存行中的所有经合并的原子RMW访问,而以不同存储器位置作为目标的操作数可以通过多个SIMD数据道独立地提供。即使对同一高速缓存行地址的原子RMW访问落入不同的存储器本地处理块中,该原子RMW访问仍享有改善的行局部性的益处。即,在没有合并的情况下,DRAM行激活可能需要在执行每个存储器本地计算操作之前被执行两次。在合并的情况下,可能需要多个PIM命令,但仅需要激活DRAM行一次。在一些示例中,触发事件可以是(例如,归因于高速缓存行的逐出的)高速缓存行回写。
为了进一步解释,图6阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图3的示例方法,图6的示例方法还包括:确定310第一原子存储器访问是用于合并的候选;在不从存储器加载数据的情况下分配320处于特殊状态的高速缓存行;将第一原子存储器访问的操作数存储330在高速缓存行中由第一原子存储器访问作为目标的位置处;确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:确定340第二原子存储器访问是用于与第一原子存储器访问合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并220第一原子存储器访问和第二原子存储器访问。
图6的示例方法还包括基于一个或多个度量来确定610是否为第一原子存储器访问分配处于特殊状态的高速缓存行。在一些示例中,基于一个或多个度量来确定610是否为第一原子存储器访问分配处于特殊状态的高速缓存行是通过高速缓存控制器跟踪一组度量以确定应当何时执行合并来执行的。虽然可由存储器本地计算单元执行的合并原子RMW访问不引入相对于存储器本地计算具体实施或基于主机的计算具体实施的任何存储器转移,但它可将存储器转移移动到关键路径上。即,对不能被合并的AC行的原子RMW访问需要在返回之前触发存储器加载,而在基于主机的具体实施中该原子RMW访问原本将命中高速缓存。因此,可能需要基于此场景的可能性动态地决定是否使用AC状态。特别地,高速缓存控制使用一个或多个度量来评估在AC行被应用于存储器之前将存在对处于AC状态的行的不可合并访问的可能性。
在一些示例中,原子RMW访问将触发从系统存储器加载数据的此可能性可以通过跟踪不能合并且以处于AC状态的行作为目标的最近访问的比例来近似。例如,如果很少高速缓存行处于AC状态,则可以使用脏有效状态,因为这可以指示最近的原子访问。如果此比例较低,则到AC状态的转变不太可能损害性能,因为不可合并的访问不太可能在AC高速缓存行上命中。
在一些示例中,原子RMW访问将触发从系统存储器加载数据的此可能性可以通过跟踪最近访问的什么比例是可以被合并的原子访问来近似。当AC高速缓存行分配是可能的时,检查对应原子类型的比例。如果比例较高,则AC状态的使用不太可能损害性能,因为更可能的是将来的访问可能被合并。
在一些示例中,原子RMW访问将触发从系统存储器加载数据的此可能性可以基于由软件(例如,通过写入到存储器映射寄存器)供应的关于原子访问局部性和原子访问可以被合并的可能性的附加信息来近似。
为了进一步解释,图7阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图2的示例方法,图7的示例方法还包括:确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并220第一原子存储器访问和第二原子存储器访问。
在图7的示例方法中,确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:基于对不同存储器模块的对称访问来确定710所述第一原子存储器访问是否可以与所述第二原子存储器访问合并。在一些示例中,基于对不同存储器模块的对称访问来确定710第一原子存储器访问是否可以与第二原子存储器访问合并是通过高速缓存控制器检查传入原子存储器访问的属性并且确定那些原子存储器访问中的任一个原子存储器访问是否使用同一原子操作并且因此使用同一存储器本地处理命令来执行的。例如,高速缓存控制器确定第一原子RMW访问和第二原子RMW访问是否使用同一原子操作并且因此使用同一存储器本地处理命令。
在一些示例中,两个RMW访问是否对称可以是基于多播命令所需的条件,诸如具有兼容原子运算符类型(例如,两个加法)和/或以满足某一条件的地址作为目标(例如,该两个RMW访问以同一存储器通道中的不同DRAM存储体中的同一DRAM列作为目标)。因此,在这些示例中,基于对不同存储器模块的对称访问来确定710第一原子存储器访问是否可以与第二原子存储器访问合并还通过针对使用同一原子操作的访问确定那些原子RWM访问是否在不同存储器模块中的对称目标存储器位置来执行。例如,高速缓存控制器确定由第一原子RMW访问作为目标的存储器位置和由第二原子RMW访问作为目标的存储器位置是否位于同一存储器通道的不同存储体中并且共享DRAM行中的同一列偏移(即,存储器访问在两个模块之间是对称的)。在此类示例中,这些原子RMW访问是用于合并的候选,因为执行从存储器区域的加载或存储的存储器本地处理命令可以由单个多模块命令来实现。即,多播到多个模块的单个存储器本地处理命令可以用于实现例如第一原子RMW访问和第二原子RMW访问两者的“存储”命令,因为该原子RMW访问以同一存储器通道中的不同存储体作为目标且共享DRAM行中的同一列偏移。
为了进一步解释,图8阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图7的示例方法,图8的示例方法还包括:确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并220第一原子存储器访问和第二原子存储器访问,包括:基于对不同存储器模块的对称访问来确定710第一原子存储器访问是否可以与第二原子存储器访问合并。
在图8的示例方法中,基于对不同存储器模块的对称访问来确定710第一原子存储器访问是否可以与第二原子存储器访问合并包括:响应于触发事件而确定810包括第一原子存储器访问的第一高速缓存行是否可以与包括第二原子存储器访问的第二高速缓存行合并,其中第一高速缓存行和第二高速缓存行处于特殊高速缓存状态。在一些示例中,利用AC高速缓存状态来确定原子RMW访问是否是用于多模块合并的候选。在这些示例中,确定710第一高速缓存行是否可以与第二高速缓存行合并是通过高速缓存控制器确定处于AC状态的第一高速缓存行是否可以与处于AC状态的第二高速缓存行合并来执行的。在两个高速缓存行共享同一类型的AC状态的情况下,或者以其他方式假设两个高速缓存行包括同一类型的原子操作的情况下,原子RMW访问可以是用于多模块合并的候选。在存储体本地计算单元(诸如PIM)的情况下,如果两个高速缓存行使用同一类型的存储器本地计算操作且该两个高速缓存行去往同一通道的不同存储体并使用DRAM行中的同一列偏移,则可以合并该两个高速缓存行。换句话说,通过利用高速缓存行的AC状态,原子RMW访问可以在高速缓存行中被合并,并且进一步通过多模块、多播存储器本地处理命令被合并。
在一些示例中,确定系统存储器中的此放置的地址位指示哪些高速缓存索引可以高速缓存可潜在地合并的行,并且当将要发出存储器本地处理命令时可以搜索这些高速缓存索引中的一些或全部高速缓存索引。例如,当用于确定DRAM列索引和存储器通道索引的地址位与用于确定高速缓存集索引的地址位完全重叠时,则保证可被合并的任何高速缓存行都落入同一高速缓存集中。因此,当触发事件发生时,仅需要检查该高速缓存集。
在一些示例中,触发事件可以是高速缓存行逐出,使得当处于AC状态的一个高速缓存行被逐出时,高速缓存控制器在高速缓存中搜索处于同一AC状态的其他高速缓存行并且确定那些高速缓存行是否可以被合并。另外或替代地,在一些示例中,例如,如果(因为高速缓存集已被访问)可以确定存在可合并的某一阈值数量的原子RMW访问,则触发事件可以是处于AC状态的新高速缓存行的分配。
为了进一步解释,图9阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图8的示例方法,图9的示例方法还包括:确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并220第一原子存储器访问和第二原子存储器访问,包括:基于对不同存储器模块的对称访问来确定710第一原子存储器访问是否可以与第二原子存储器访问合并,包括:确定810第一高速缓存行是否可以与第二高速缓存行合并。
在图9的示例中,确定810第一高速缓存行是否可以与第二高速缓存行合并还包括跟踪910作为用于合并的候选的高速缓存行。在一些示例中,跟踪910作为用于合并的候选的高速缓存行是通过高速缓存控制器保持用于跟踪具有合并可能性的处于AC状态的高速缓存行的结构来执行的。在一些具体实施中,该结构中的每个条目对应于单列索引和通道组合。在此类具体实施中,该结构可仅含有在高速缓存中查找对应AC高速缓存行所需的位。例如,每当在高速缓存中以AC状态分配高速缓存行时可插入或更新条目,并且每当移除AC高速缓存行时移除或更新条目。因为多模块合并是不影响功能性且因此不需要跟踪高速缓存中的每个AC高速缓存行的优化,所以在一些具体实施中,使用优先考虑最近访问的条目、频繁访问的条目或跟踪更多AC高速缓存行的条目的替换策略。
为了进一步解释,图10阐述了示出根据本公开的一些实施方案的动态地合并原子存储器操作以进行存储器本地计算的示例方法的流程图。类似于图7的示例方法,图10的示例方法还包括:确定210第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并220第一原子存储器访问和第二原子存储器访问,包括:基于对不同存储器模块的对称访问来确定710第一原子存储器访问是否可以与第二原子存储器访问合并。
在图10的示例方法中,在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并220第一原子存储器访问和第二原子存储器访问包括:使用多模块存储器本地处理命令(例如,多播PIM命令)来合并1010第一原子存储器访问和第二原子存储器访问。在一些示例中,使用多模块存储器本地处理命令来合并1010第一原子存储器访问和第二原子存储器访问是通过高速缓存控制器生成用于两个原子存储器访问所共有的至少一个存储器本地处理操作(例如,PIM操作)的多播存储器本地处理命令来执行的。例如,当两个或更多个原子存储器访问包括相同的存储器本地处理操作(例如,加载、存储、atomicAdd、原子乘法等)时,可以在多播到多个存储器本地处理单元的单个经合并的存储器本地处理命令中合并那些存储器本地处理操作。考虑用于两个原子RMW访问的示例PIM代码段,其中利用存储体本地PIM单元。每个原子RMW访问可以被分解成“加载+加法”操作和“存储”操作。在此示例中,假设一个加载+加法操作将第一操作数与存储器位置A处的数据的加法的结果存储在第一DRAM存储体的寄存器1中(例如,“PIM Ld+add R1←[a]+op1”),并且另一个加载+加法操作将第二操作数与存储器位置B处的数据的加法的结果存储在第二DRAM存储体的寄存器1中(例如,“PIM Ld+add R1←[b]+op2”)。随后将来自第一DRAM存储体中的寄存器1的结果存储在第一DRAM存储体中的存储器位置A处(例如,“PIM St R1→[a]”),并且然后将来自第二DRAM存储体中的寄存器1的结果存储在存储器位置B处(例如,“PIM St R1→[b]”)。因此,代码段使用四个命令槽和两个数据槽(用于操作数)。两个“加载+加法”操作不能被合并,因为每个元素需要不同的操作数通过数据总线传输。然而,假设存储器位置A和存储器位置B在同一存储器通道中且使用DRAM行中的同一列偏移,则可以将“存储”操作合并到由第一DRAM存储体中的PIM单元和第二DRAM存储体中的PIM单元接收到的多模块命令中(例如,“PIM St→[a|b]”)。经合并的PIM命令占用一个命令槽,并且因此减少实现同一数量的存储操作所需的命令槽的数量。对PIM架构的进一步优化可使得这些经合并的操作更高效,或使得能够合并更灵活的合并(例如,A和B不需要去往同一列)。
合并到多播操作中对于不需要对每个元素使用不同操作数的多播操作而言也是有价值的。例如,一些图形算法将同一值存储到相邻节点的稀疏集合,而不是执行RMW(例如,广度优先搜索、图形着色)。这样的操作可以利用由存储体本地计算单元(即,存储体本地PIM单元)启用的多模块操作来改善存储器带宽。为了动态地合并这些操作,仅需要跟踪命令的类型以及标识受影响行的信息,然后经由存储器本地处理命令多播对任何经合并的目标并行地应用同一命令。尽管每个存储器模块可能需要不同的掩码,但是这些掩码可以被预先存储在存储器本地计算单元附近)。
此外,多模块合并的可能性还可以用于通过扩展上文针对高速缓存行合并所描述的决策方法来通知如何处置原子操作。当原子操作在高速缓存中未命中时,高速缓存可以使用度量信息来近似多模块合并是否可能,并且因此分配AC高速缓存行是否可能是有益的。例如,高速缓存控制器可以检查高速缓存以寻找可与传入原子操作合并的其他AC高速缓存行。如果存在这种高速缓存行,则存在多模块合并的可能性。在另一示例中,高速缓存控制器可以跟踪已经针对最近动态地合并的存储器本地处理操作而合并的行的平均数量。如果平均数量较高,则多模块合并的可能性更高。
类似地,如果高速缓存控制器基于上述条件中的任一个条件确定AC高速缓存行不应用于原子未命中,则该高速缓存控制器必须决定是在存储器本地计算单元处还是在高速缓存中执行原子操作。如果在高速缓存中存在可与传入请求合并的多个AC高速缓存行,并且预期原子的局部性和重用是罕见的,则将操作卸载到存储器本地计算单元可能更有益。如果高速缓存中不存在可合并的AC高速缓存行并且预期原子局部性/重用是可能的,则分配高速缓存行并且在高速缓存中执行原子操作是优选的。这些条件可以以多种方式计算,包括经由用于跟踪相关高速缓存事件频率和/或占用的简单计数器。
鉴于前述内容,本领域技术人员将理解,根据本公开的实施方案提供了许多优点。当高速缓存局部性在发送用于(例如,由PIM单元进行)存储器本地处理的操作之前可用时,实施方案可以动态地利用该高速缓存局部性。这些实施方案提供更宽的合并窗口,并且可以在高速缓存中无限地延迟操作,从而提供更多的合并机会。此外,由于基于目标地址的高速缓存的静态和确定性索引(与存储器控制器中的队列相比),实施方案使得更容易基于目标地址跟踪可合并操作,这有助于使用多模块、多播存储器本地处理命令的更简单和更有效的跟踪机制。此外,由实施方案引入的硬件和高速缓存逻辑开销是最小的。
实施方案允许将存储器本地计算高效地用于原子操作,这可改善一系列重要工作负载(例如,图形分析、稀疏矩阵代数、机器学习等)的性能。此类应用可以在可用时利用高速缓存局部性,并且动态地标识合并机会以实现更高效的多模块存储器本地处理操作。
实施方案可以是系统、装置、方法和/或逻辑电路。本公开中的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或者以一种或多种编程语言的任何组合编写的源代码或目标代码,编程语言包括诸如Smalltalk、C++等面向对象的编程语言,以及诸如“C”编程语言或类似编程语言的常规过程编程语言。在一些实施方案中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令。
本公开的各方面在此参考根据本公开的一些实施方案的方法、装置(系统)和逻辑电路的流程图图示和/或框图进行描述。应当理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可通过逻辑电路来实现。
逻辑电路可在处理器、其他可编程数据处理装置或其他设备中实现,导致在处理器、其他可编程装置或其他设备上执行一系列操作步骤以得到计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现在流程图和/或框图的一个或多个框中指定的功能/动作。
附图中的流程图和框图示出了根据本公开的各种实施方案的系统、方法和逻辑电路的可能具体实施的架构、功能和操作。就这一点而言,流程图或框图中的每个框可以表示指令的包括用于实现指定逻辑功能的一个或多个可执行指令的模块、段或部分。在一些另选的具体实施中,框中指出的功能可以不按照图中指出的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反顺序执行。还将注意到,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可由执行指定功能或动作或者执行专用硬件和计算机指令的组合的基于专用硬件的系统来实现。
虽然已经参考本公开的实施方案具体地示出和描述了本公开,但是应当理解,在不脱离以下权利要求的精神和范围的情况下,可在其中进行形式和细节上的各种改变。因此,本文所述的实施方案应当被认为仅是描述性意义的,而不是出于限制性目的。本公开不是由详细描述而是由所附权利要求限定的,并且在该范围内的所有差异将被解释为包括在本公开中。

Claims (20)

1.一种动态地合并原子存储器操作以进行存储器本地计算的方法,所述方法包括:
确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及
在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问。
2.根据权利要求1所述的方法,所述方法还包括:
确定所述第一原子存储器访问是用于合并的候选;
在不从存储器加载数据的情况下分配处于特殊状态的高速缓存行;以及
将所述第一原子存储器访问的操作数存储在所述高速缓存行中由所述第一原子存储器访问作为目标的位置处;并且
其中确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:
确定所述第二原子存储器访问是用于与所述第一原子存储器访问合并的候选。
3.根据权利要求2所述的方法,其中在请求由存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:
通过使用所述第二原子存储器访问的操作数对所述高速缓存行中由所述第二原子存储器访问作为目标的位置处的数据执行所述第二原子存储器访问的操作,合并所述第一原子存储器访问和所述第二原子存储器访问。
4.根据权利要求3所述的方法,所述方法还包括响应于触发事件而向存储器控制器发送用于所述第一原子存储器访问和所述第二原子存储器访问的一个或多个存储器本地处理命令。
5.根据权利要求2所述的方法,所述方法还包括基于一个或多个度量来确定是否为所述第一原子存储器访问分配处于所述特殊状态的所述高速缓存行。
6.根据权利要求1所述的方法,其中确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:
基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并。
7.根据权利要求6所述的方法,其中基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并包括:
响应于触发事件而确定包括所述第一原子存储器访问的第一高速缓存行是否能够与包括所述第二原子存储器访问的第二高速缓存行合并,其中所述第一高速缓存行和所述第二高速缓存行处于特殊高速缓存状态。
8.根据权利要求7所述的方法,其中响应于触发事件而确定包括所述第一原子存储器访问的第一高速缓存行是否能够与包括所述第二原子存储器访问的第二高速缓存行合并,其中所述第一高速缓存行和所述第二高速缓存行处于特殊高速缓存状态包括:
跟踪作为用于合并的候选的高速缓存行。
9.根据权利要求6所述的方法,其中在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:
使用多模块存储器本地处理命令来合并所述第一原子存储器访问和所述第二原子存储器访问。
10.根据权利要求1所述的方法,其中所述存储器本地计算单元是存内处理(PIM)单元。
11.一种用于动态地合并原子存储器操作以进行存储器本地计算的计算设备,所述计算设备包括逻辑电路,所述逻辑电路被配置为:
确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及
在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问。
12.根据权利要求11所述的计算设备,其中所述逻辑电路被进一步配置为:
确定所述第一原子存储器访问是用于合并的候选;
在不从存储器加载数据的情况下分配处于特殊状态的高速缓存行;以及
将所述第一原子存储器访问的操作数存储在所述高速缓存行中由所述第一原子存储器访问作为目标的位置处;并且
其中确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:
确定所述第二原子存储器访问是用于与所述第一原子存储器访问合并的候选。
13.根据权利要求12所述的计算设备,其中在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:
通过使用所述第二原子存储器访问的操作数对所述高速缓存行中由所述第二原子存储器访问作为目标的位置处的数据执行所述第二原子存储器访问的操作,合并所述第一原子存储器访问和所述第二原子存储器访问。
14.根据权利要求13所述的计算设备,所述计算设备还包括响应于触发事件而向存储器控制器发送用于所述第一原子存储器访问和所述第二原子存储器访问的一个或多个存储器本地处理命令。
15.根据权利要求11所述的计算设备,其中确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:
基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并。
16.根据权利要求15所述的计算设备,其中基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并包括:
响应于触发事件而确定包括所述第一原子存储器访问的第一高速缓存行是否能够与包括所述第二原子存储器访问的第二高速缓存行合并,其中所述第一高速缓存行和所述第二高速缓存行处于特殊高速缓存状态。
17.根据权利要求16所述的计算设备,其中在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:
使用多模块存储器本地处理命令来合并所述第一原子存储器访问和所述第二原子存储器访问。
18.一种用于动态地合并原子存储器操作以进行存储器本地计算的系统,所述系统包括:
存储器设备,所述存储器设备包括至少一个存储器本地计算单元;
计算设备,所述计算设备被配置为:
确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选;以及
在请求由存储器本地计算单元进行存储器本地处理之前,在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问。
19.根据权利要求18所述的系统,其中所述计算设备被进一步配置为:
确定所述第一原子存储器访问是用于合并的候选;
在不从存储器加载数据的情况下分配处于特殊状态的高速缓存行;以及
将所述第一原子存储器访问的操作数存储在所述高速缓存行中由所述第一原子存储器访问作为目标的位置处;
其中确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:
确定所述第二原子存储器访问是用于与所述第一原子存储器访问合并的候选;并且
其中在请求由存储器本地计算单元进行存储器本地处理之前在高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:
通过使用所述第二原子存储器访问的操作数对所述高速缓存行中由所述第二原子存储器访问作为目标的位置处的数据执行所述第二原子存储器访问的操作,合并所述第一原子存储器访问和所述第二原子存储器访问。
20.根据权利要求18所述的系统,其中确定第一原子存储器访问和第二原子存储器访问是否是用于合并的候选包括:
基于对不同存储器模块的对称访问来确定所述第一原子存储器访问是否能够与所述第二原子存储器访问合并;并且
其中在请求由所述存储器本地计算单元进行存储器本地处理之前在所述高速缓存中合并所述第一原子存储器访问和所述第二原子存储器访问包括:
使用多模块存储器本地处理命令来合并所述第一原子存储器访问和所述第二原子存储器访问。
CN202280044353.4A 2021-06-28 2022-06-27 动态地合并原子存储器操作以进行存储器本地计算 Pending CN117546148A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/361,145 2021-06-28
US17/361,145 US11726918B2 (en) 2021-06-28 2021-06-28 Dynamically coalescing atomic memory operations for memory-local computing
PCT/US2022/035142 WO2023278338A1 (en) 2021-06-28 2022-06-27 Dynamically coalescing atomic memory operations for memory-local computing

Publications (1)

Publication Number Publication Date
CN117546148A true CN117546148A (zh) 2024-02-09

Family

ID=82703114

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280044353.4A Pending CN117546148A (zh) 2021-06-28 2022-06-27 动态地合并原子存储器操作以进行存储器本地计算

Country Status (6)

Country Link
US (1) US11726918B2 (zh)
EP (1) EP4363984A1 (zh)
JP (1) JP2024523398A (zh)
KR (1) KR20240023642A (zh)
CN (1) CN117546148A (zh)
WO (1) WO2023278338A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11886344B2 (en) * 2022-06-29 2024-01-30 Xilinx, Inc. Cached system for managing state vectors

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2399198A4 (en) * 2009-02-17 2012-07-25 Rambus Inc COALESCENCE TECHNIQUE OF ATOMIC OPERATIONS IN MULTIPLE CHIP SYSTEMS
US20100318741A1 (en) * 2009-06-12 2010-12-16 Cray Inc. Multiprocessor computer cache coherence protocol
US10133662B2 (en) * 2012-06-29 2018-11-20 Sandisk Technologies Llc Systems, methods, and interfaces for managing persistent data of atomic storage operations
US9218204B2 (en) * 2012-12-21 2015-12-22 Advanced Micro Devices, Inc. Processing engine for complex atomic operations
US9256466B2 (en) * 2013-06-07 2016-02-09 Arm Limited Data processing systems
US9092345B2 (en) 2013-08-08 2015-07-28 Arm Limited Data processing systems
GB2527529B (en) 2014-06-24 2021-07-14 Advanced Risc Mach Ltd A device controller and method for performing a plurality of write transactions atomically within a non-volatile data storage device
US10325344B2 (en) 2017-04-17 2019-06-18 Intel Corporation Efficient merging of atomic operations at computing devices
US11119920B2 (en) 2018-04-19 2021-09-14 Eta Scale Ab Systems and methods for non-speculative store coalescing and generating atomic write sets using address subsets

Also Published As

Publication number Publication date
US20220414013A1 (en) 2022-12-29
JP2024523398A (ja) 2024-06-28
US11726918B2 (en) 2023-08-15
WO2023278338A1 (en) 2023-01-05
EP4363984A1 (en) 2024-05-08
KR20240023642A (ko) 2024-02-22

Similar Documents

Publication Publication Date Title
US11210253B2 (en) PCIe traffic tracking hardware in a unified virtual memory system
US9864681B2 (en) Dynamic multithreaded cache allocation
EP2542973B1 (en) Gpu support for garbage collection
US8732711B2 (en) Two-level scheduler for multi-threaded processing
US9292447B2 (en) Data cache prefetch controller
US6430656B1 (en) Cache and management method using combined software and hardware congruence class selectors
US10831675B2 (en) Adaptive tablewalk translation storage buffer predictor
GB2509755A (en) Partitioning a shared cache using masks associated with threads to avoiding thrashing
US8868835B2 (en) Cache control apparatus, and cache control method
CN110959154A (zh) 用于线程本地存储数据访问的私有高速缓存
JP5226010B2 (ja) 共有キャッシュ制御装置、共有キャッシュ制御方法及び集積回路
JP2019096309A (ja) メンテナンス動作の実行
KR20220110225A (ko) 액세스 유형 우선 순위에 따른 캐시 관리
CN117546148A (zh) 动态地合并原子存储器操作以进行存储器本地计算
US8266379B2 (en) Multithreaded processor with multiple caches
CN113138851B (zh) 一种数据管理方法、相关装置及系统
US11934311B2 (en) Hybrid allocation of data lines in a streaming cache memory
CN114035980B (zh) 基于便笺存储器来共享数据的方法和电子装置
US20230101038A1 (en) Deterministic mixed latency cache
JP7311959B2 (ja) 複数のデータ・タイプのためのデータ・ストレージ
CN111373385B (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