掌桥专利:专业的专利平台
掌桥专利
首页

用于处理器高速缓存管理的争用跟踪

文献发布时间:2024-01-17 01:19:37


用于处理器高速缓存管理的争用跟踪

技术领域

本公开的实施例总体上涉及处理器高速缓存,并且更具体地,涉及跟踪争用以及基于争用管理高速缓存和存储器操作。

背景技术

存储在存储器中的数据通常由在一个或更多个处理器上执行的不同线程访问。处理器通常将数据的本地副本存储在高速缓存中以加快对数据的访问。线程通常相互协作并轮流修改数据以避免覆盖(overwriting)彼此的修改。

附图说明

从下面给出的详细描述和从本公开的各种实施例的附图中,将更充分地理解本公开。然而,附图不应被视为将本发明限制于特定实施例,而仅用于解释和理解。

图1示出了根据本公开的一些实施例的包括处理器和存储器的示例计算设备。

图2是根据本公开的一些实施例的处理器和多级高速缓存的示意图。

图3是示出根据本公开的一些实施例的用于基于争用(contention)管理高速缓存的示例组件和模块的处理器的详细框图。

图4是示出根据本公开的一些实施例的用于基于争用管理存储器操作的示例组件和模块的处理器的详细框图。

图5是根据本公开的一些实施例的用于使用争用跟踪来管理高速缓存的方法的流程图。

图6是根据本公开的一些实施例的用于使用争用跟踪来管理存储器操作的方法的流程图。

图7是本公开的实施例可以在其中操作的示例计算机系统的框图。

具体实施方式

本公开的各方面针对可以跟踪争用并且使用所跟踪的争用来管理处理器高速缓存、执行存储器操作的乱序处理或其组合的计算机系统。当多个线程相互争用以访问存储器中的数据时,可能会出现争用。数据可以称为有争议(contentious)数据,并且可以包括线程读取和写入的变量的内容。计算机系统通常通过启用线程之一访问数据并导致剩余线程等待直到线程完成来管理争用。线程可以在完成之前对有争议数据执行一项或更多项操作。剩余线程等待一个或更多个操作完成并等待数据变得可访问。在一个示例中,可以使用锁来管理争用并且可以称为锁争用。初始线程可以获取数据的锁,等待线程可以尝试获取锁并访问数据。等待数据变得可访问可能会降低计算机系统的性能,并可能导致有争议数据造成性能瓶颈。

处理器高速缓存被设计成通过将数据的副本存储在更靠近处理器的核心以便可以更快地访问数据来提高计算机系统的性能。处理器可以包括一组核心,并且处理器高速缓存可以包括由一组核心共享的共享高速缓存和各自对多个核心中的一个核心私有的私有高速缓存。处理器高速缓存可以在高速缓存中存储数据的多个副本,并且可以使用高速缓存一致性技术来保持副本同步。高速缓存一致性技术可以检测到副本之一的变化并更新一个或更多个副本以指示副本是陈旧的、替换副本或其组合。当由不同核心上的线程访问数据时,处理器高速缓存通常会将数据的副本存储在那些核心中的每个核心的私有高速缓存中。拥有正在修改的多个数据副本通常会增加高速缓存一致性技术的开销,并可能对计算机系统的性能产生不利影响。

本公开的各方面通过提供使处理器能够检测存储器中的数据争用并使用争用来管理高速缓存、管理存储器操作处理或其组合的技术来解决上述和其他缺陷。该技术可能涉及使处理器能够识别存储器中的位置并确定该位置是否有争议。存储器中的位置可以对应于存储器中的一个或更多个物理、虚拟或逻辑地址。如果任何线程由于另一个线程正在使用该位置而无法访问该位置,则可以确定该位置是有争议的。例如,第一线程可能已经获取了在该位置对数据的锁定(例如,票证锁定),并且第二线程可能在数据被锁定时被阻止访问数据。一旦该位置被确定为有争议的,它可能在解锁后仍然存在争议,因为它更有可能在未来再次成为线程争用的主题。可以通过更新一个或更多个数据结构以指示位置是有争议的、无争议的还是它们的组合(例如高速缓存条目中的争用表、争用位标志)来跟踪争用。

处理器可以使用位置的争用性来管理高速缓存。该技术可以控制是否将数据存储在高速缓存中(例如,共享高速缓存)以及如何分配和逐出高速缓存中的条目(例如,高速缓存行(line)、高速缓存块)。如上所述,高速缓存可以包括来自主存储器的数据的副本,并且可以将数据的副本存储在一个或更多个私有高速缓存、共享高速缓存或其组合中。处理器可以在接收到位于主存储器中该位置的数据之前、期间或之后确定该位置是否有争议。处理器可以在位置有争议时将数据存储在共享高速缓存中,并且在位置无争议时可以绕过共享高速缓存(例如,避免存储在共享高速缓存中)并将数据存储在私有高速缓存中。这可能是有利的,因为将数据存储在共享高速缓存中可以减少或避免在不同的私有高速缓存中具有多个副本(例如,避免在L2高速缓存中出现重复副本)。当数据有争议时,这可以显著减少为使私有高速缓存中的副本保持同步所涉及的高速缓存一致性开销。在一个示例中,该技术可以在处理器的高速缓存控制逻辑(例如,高速缓存控制器电路和/或控制寄存器)中实现。

处理器还可以或替代地使用位置的争用性来管理存储器操作的处理。处理器执行的线程可以生成存储器操作,这些操作可以添加到要处理的队列(例如,有序集)中。如上所述,访问某个位置处的数据的线程可以在线程完成使用数据之前对数据执行多个操作。可以将多个操作添加到队列中,并且队列可以包括它们之间的一个或更多个介入操作。队列中的操作可以有特定的顺序,例如先进先出(FiFo)。处理器可以根据队列的顺序处理一些操作,也可以乱序处理一些操作。

每个操作可以与来自存储器中的位置(例如,主存储器中的物理地址)的数据相关联,并且处理器可以基于相应位置的争用性来选择接下来要处理的操作。例如,处理器可以为线程执行多个存储器操作之一,并且如果与存储器操作相关联的位置有争议,则可以优先处理剩余存储器操作中的一个或更多个,以便剩余存储器操作可以在一项或更多项干预操作之前乱序执行。在一个示例中,多个存储器操作可以是独占(exclusive)存储器操作,并且第一存储器操作可以是从位置加载(例如,读取)数据的加载独占并且可以确定该位置是否被锁定,并且第二存储器操作可以是如果位置未被锁定则获取该位置的锁的存储独占。

本文所公开的技术的优点包括但不限于增强处理器对高速缓存的使用,以减少由存储器争用引起的性能瓶颈的数量和持续时间。该技术可以通过减少私有高速缓存中的副本数量来降低高速缓存一致性开销来实现这一点。该技术还可以通过减少存储器位置不可访问的持续时间(例如,减少获取锁所需的持续时间),使处理器能够更快地处理存储器操作(例如,存储独占)。该技术还可用于通过检测原子操作何时与无争议位置相关并在本地数据上使用近原子操作而不是远原子操作来更快地处理原子操作。

图1示出了根据本公开的一些实施例的示例计算设备100,其包括具有跟踪争用和使用跟踪的争用来管理高速缓存和处理存储器操作的技术的处理器。计算设备100可以包括处理器110、高速缓存120和存储器130。

计算设备100可以是任何物理设备,并且可以是或包括服务器计算设备(例如,服务器)、分布式计算设备(例如,云设备、集群设备)、超级计算机、个人计算机(PC)(例如,工作站、台式机、膝上型电脑、笔记本电脑)、移动设备(例如,手机、平板电脑)、车辆(例如,飞机、无人机、火车、汽车或其他交通工具)、物联网(IoT)设备、嵌入式计算机(例如,包括在工业设备或联网商业设备中的计算机),或包括一个或更多个处理器110的任何此类计算设备。

处理器110可以指包括一个或更多个处理设备或处理单元的处理设备,这些处理设备或处理单元能够执行对算术、逻辑、存储器或I/O操作进行编码的指令。处理器110可以实现为单个集成电路、两个或更多个集成电路,或者可以是多芯片模块的组件(例如,其中单个微处理器管芯被包括在单个集成电路封装中)。处理器110可以是或包括一个或更多个中央处理单元(CPU)、图形处理单元(GPU)、数据处理单元(DPU)、算术逻辑单元(ALU)、浮点单元(FPU)、存储器管理单元(MMU)、存储器保护单元(MPU)、专用集成电路(ASIC)、张量处理单元(TPU)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、网络接口控制器(NIC)、高速缓存控制器、存储控制器、量子处理器、其他处理器或它们的组合。

处理器110可以实现指令集架构(ISA),其用作处理器110和计算设备100之间的接口。指令集架构可以与高级RISC机器

处理核心111A-Z可以是处理器110的能够读取和执行从存储器130加载的计算机程序的指令的部分。计算机程序可以包括指令(例如,可执行数据)、信息(例如,非可执行数据),或它们的组合。处理器110可以将指令分派到一个或更多个管线中,从而利用指令级并行性。管线可以尝试通过将指令划分为由不同处理器单元执行的一系列顺序步骤来保持处理器的多个部分忙于一些指令,其中并行处理指令的不同部分。指令可以被安排为不同的指令流,这将在下面关于线程113A-Z进行讨论。在一个示例中,处理核心111A-Z中的每一个可以是处理设备并且可以包括参与执行指令的处理器的部分并且包括高速缓存120的部分(例如,包括高速缓存120的私有高速缓存)。

高速缓存120可以是处理器110用来存储从存储器130(例如,主存储器)接收的数据的硬件高速缓存。高速缓存120是存储器层次结构的一部分,并且存储器层次结构可以是计算设备100的分层存储的一部分。存储器层次结构可以从最低级别的处理器寄存器扩展到最高级别的主存储器。分层存储可以进一步扩展到辅助存储(例如,硬盘驱动器、固态驱动器),并可能扩展到远程存储(例如,分布式存储、网络附加存储(NAS)、存储区域网络(SAN))。

高速缓存120可以包括多个不同的高速缓存。不同的高速缓存可以是物理上分离的高速缓存(例如,芯片的不同部分或在不同芯片上)、同一高速缓存的不同部分(例如,同一组存储器单元的不同部分)、或它们的组合。不同的高速缓存可以使用任何形式的数据存储技术来存储数据,并且可以包括易失性存储器(例如,短暂或非持久性存储器)、非易失性存储器(例如,持久性存储器)或它们的组合。数据存储可以包括静态随机存取存储器(SRAM)、嵌入式动态随机存取存储器(eDRAM)、其他存储器或其组合形式的随机存取存储器(RAM)。如图1所示,高速缓存120可以包括共享高速缓存122和一个或更多个私有高速缓存124A-Z。

处理器110可以使用共享高速缓存122和私有高速缓存124A-Z将数据存储在存储器130中以供一个或更多个处理核心111A-Z访问。共享高速缓存122可以由一组多个处理核心共享,并且可以与系统级高速缓存(SLC)、最后一级高速缓存(LLC)或三级(L3)高速缓存、其他术语或其组合相同或相似。私有高速缓存124A-Z每个可以是各自处理核心私有的。私有高速缓存可以与本地高速缓存、一级(L1)高速缓存、二级(L2)高速缓存、其他高速缓存或它们的组合相同或相似。

在图1所示的示例中,共享高速缓存122可由处理器110的所有处理核心(例如,处理核心111A-Z)使用,并且与相应的私有高速缓存相比,可以定位得离处理核心更远并且提供更慢的访问。私有高速缓存124A-Z中的每一个可以由单个处理核心专门使用并且可以更靠近处理核心定位以提供对处理核心的更快访问。

线程113A-Z中的每一个是执行线程,其可以是可以由操作系统(OS)的调度器、处理器或计算设备100的其他部分(例如,OS线程、计算线程)独立管理的最小编程指令序列。在所示示例中,线程113A-Z中的每一个都可以由处理核心111A-Z中的不同一个来执行。在其他示例中,线程113A-Z中的一个或更多个线程可以在同一处理核心上并发地执行(例如,线程级并行性)。线程113A-Z可以对应于相同的计算进程(例如,主线程和工作线程)、不同的计算进程或其组合。线程113A-Z中的每一个在由处理核心执行时可以引起存储器操作115A-Z中的相应存储器操作。

存储器操作115A-Z可以是由访问存储数据的处理设备执行的任何操作。访问可以涉及一个或更多个读访问(例如,加载数据)、写访问(例如,存储数据)或其组合。可以从存储器130、共享高速缓存122、私有高速缓存124A-Z、处理器寄存器、其他数据存储或它们的组合访问所存储的数据。存储器操作115A-Z可以包括一个或更多个硬件指令(例如,处理器指令、CPU指令)、软件指令(例如,函数调用、机器码、字节码)、固件指令(例如,操作码、微码)、其他操作、或其组合。在一个示例中,存储器操作115A-Z可以是从处理器110外部的源(例如,内核代码、应用程序代码)提供并且调用处理器指令(例如,CPU指令)的外部操作。在另一示例中,存储器操作115A-Z可以是从处理器110内部的源(例如,高速缓存控制器逻辑)提供的内部操作。在任一示例中,存储器操作115A-Z中的每一个可以是独占操作、原子操作、其他操作或其组合。

独占的存储器操作可以涉及使用排除机制,该排除机制向特定线程的存储器操作提供对数据的访问权而不向一个或更多个其他线程的存储器操作提供对数据的访问权(例如,不存在、空闲或缺少访问权)。排除机制可以与并发控制机制或同步机制相同或相似,并且可以涉及一个或更多个排除数据结构。排除数据结构(例如,同步原语)可以与锁、信号量、互斥体(mutex)、快速用户空间互斥体(futex)、屏障、其他排除数据结构或它们的组合相同或相似。在一个示例中,操作可以涉及一个或更多个锁,并且存储器操作可以激活排除机制(例如,获取锁)并且随后的存储器操作可以停用排除机制(例如,释放锁)。在另一示例中,操作可以涉及一个或更多个临界区,其中包括一段可执行代码,其中只有一个线程可以执行并且在某些情况下不能被中断(例如,内核代码)。临界区可以由一个或更多个锁保护,并且由于多个线程试图进入临界区,因此可能会发生争用。

在一个示例中,存储器操作115A-Z可以包括加载独占操作和存储独占操作。可以一起使用加载独占操作和存储独占操作来检查存储器位置是否与停用的排除数据结构相关联并更新排除数据结构以激活排除机制。在一个示例中,加载独占操作可以将存储器130中的位置处的数据加载到高速缓存120中并且确定用于存储器位置的排除机制是否被另一请求者(例如,另一线程)激活。如果排除机制没有被激活,可以使用存储独占操作通过存储更新排除数据结构的数据来为请求者激活排除机制。存储独占操作和/或加载独占操作可以基于排除数据结构的状态来执行一个或更多个条件操作。例如,存储独占操作可以在当前没有被另一个线程激活时,有条件地激活排除机制。在存储独占操作发生之后,可以发生一个或更多个存储操作(例如,非独占存储操作)并导致排除数据结构被停用(例如,解锁、移除、清除、重置)。在一个示例中,加载独占操作和存储独占操作可以一起工作以获取锁。加载独占操作可以检查锁是否已被另一个线程获取。如果锁没有被其他线程获取,可以使用存储独占操作来尝试获取锁。存储独占操作要么通过,表明已获取锁,要么失败,这意味着另一个线程可能已获取锁。例如,另一个线程可能在加载独占操作完成的时间和存储独占操作完成的时间之间获得了锁。

原子的存储器操作可以涉及将一个或更多个存储器操作作为原子事务执行。原子事务可以是一组不可分割且不可约的操作,这些操作要么全部发生,要么都不发生。该组可以包括一个或更多个独占或非独占(non-exclusive)的存储器操作,并且原子事务可以提供防止该组操作部分发生的原子性。原子的存储器操作(例如,原子存储器操作)的一些示例是测试和设置操作、获取和添加(FAA)操作、比较和交换(CAS)操作、加载链接/存储条件(LL/SC)操作、读-修改-写、其他原子操作或它们的组合。在一个示例中,线程的存储器操作可以作为原子事务来执行,以避免线程在原子事务期间被抢占。在另一个示例中,线程的存储器操作可以作为允许抢占并且可以在线程的执行从抢占返回时完成的原子事务来执行。在任一示例中,存储器操作115A-Z(无论是原子操作、独占操作还是其他操作)都可能遇到争用117。

当不同线程的存储器操作相互争用以访问来自存储器130中相同位置的数据时,发生争用117。例如,第一线程113A可以启动访问位置132A的数据134A的独占或原子存储器操作115A。第二线程113B可以启动对应于相同位置132A的存储器操作115B,但是存储器操作115B将无法完成,直到第一线程113A完成。一旦发生争用,即使在争用已解决之后,该位置仍可继续被归类为有争议的。例如,在第一线程完成该位置的数据后,其他线程可以访问该位置,但该位置可能仍然是有争议位置。这是有利的,因为一旦位置是有争议的,它在未来更有可能是有争议的,并且本文公开的技术可以不同地处理该位置以增强计算设备100的整体性能。

争用117可以是、包括或涉及线程争用、处理核心争用、锁争用或其组合。当在同一处理核心或不同处理核心上执行的多个线程竞争访问公共存储器位置时,可能会发生线程争用。多个线程可以是同一计算进程(例如,多线程进程)的一部分,也可以是不同计算进程的一部分。不同的计算进程可以用于相同的操作系统或不同的操作系统。当同一处理器或不同处理器的多个不同处理核心竞争访问公共存储器位置时,可能会发生处理核心争用。当计算实体在存储器位置获得锁并且不同的计算实体在锁被释放之前尝试访问该位置的数据时,可能会发生锁争用。不同的计算实体可以包括一个或更多个不同的线程、进程、处理核心、处理器、计算设备、主机、节点、其他计算系统或它们的组合。

位置132A和132B是存储器130中的示例位置,它们正被一组存储器操作115A-Z访问。位置132A是有争议位置的示例,因为它是争用117的对象,如上所述。位置132B是无争议位置的示例,因为即使线程113Y和113Z引起访问位置132B的相应存储器操作115Y和115Z,访问发生而不引起争用。由于许多原因,访问可能是无争议的。在一个示例中,较早的存储器操作115Y可能既不是独占操作也不是原子操作(例如,没有获得锁),因此存储器操作115Y和115Z可以重叠或具有对位置132B的并发访问(例如,多个只读操作)。在另一示例中,较早的存储器操作115Y可以是独占的或原子的,但后来的存储器操作115Z直到线程113Z完成使用存储器位置132B之后(例如,在锁被释放之后)才访问位置132B。

位置132A和132B可以是地址空间中的位置并且可以对应于一个或更多个地址。地址可以是物理地址(例如,物理存储器地址)、虚拟地址(例如,虚拟存储器地址)、逻辑地址(例如,逻辑存储器地址)、其他地址或它们的组合。每个位置可以对应于一个数据存储块,并且该位置可以指示块的开始、块的结束或块中的中间位置。处理器110可以使用互连140访问地址空间中的位置。

互连140可以将处理器110与存储器130耦合。如本文所用,“耦合”或“耦合到”通常是指组件或设备之间的连接,其可以是间接通信连接或直接通信连接(例如,无需干预组件或设备),无论是有线的还是无线的,包括诸如电气、光学、磁性等的连接。互连140可以提供处理器110和存储器130之间的通信通道。互连140可以包括一个或更多个接口、连接器、适配器、其他硬件或软件,或它们的组合。互连140可以实施标准或专有通信协议,包括或基于计算快速链路

在一个示例中,互连140可以是将一个或更多个CPU连接到用作主存储器(例如,主存储(primary storage))的存储器130的CPU到存储器互连。存储器130可以包括一个或更多个DIMM(例如DRAM)并且可以跨越一个或更多个节点(例如NUMA节点)并且包括一个或更多个本地存储器节点、远程存储器节点或其组合。

在图1所示的示例中,处理器110可以包括争用跟踪组件112、高速缓存控制器组件114和操作处理组件116。争用跟踪组件112可以使处理器110能够检测存储器中作为争用目标的位置并更新数据结构指示存储器中的哪些位置是有争议的、无争议的或它们的组合。高速缓存控制器组件114可以使处理器110能够使用争用跟踪来管理高速缓存120。这可以涉及执行高速缓存分配和逐出操作以将来自存储器130的数据存储在共享高速缓存122、私有高速缓存124A-Z、处理器110的其他部分、或其组合中。操作处理组件116可以使处理器110能够更有效地处理存储器操作115并使用争用跟踪来执行针对特定存储器操作(例如,互补存储独占操作)的乱序处理。下文关于图3-4更详细地讨论组件112、114和116。

图2示出了根据本公开的一些实施例的包括跟踪争用和管理多级处理器高速缓存的技术的示例处理器110。高速缓存120与图1的高速缓存120相同或相似,更详细地示出了高速缓存。在所示示例中,高速缓存120可包括具有高速缓存224A-Z的高速缓存级220A、具有私有高速缓存124A-Z的高速缓存级220B和具有共享高速缓存122的高速缓存级220C。

高速缓存120可以是具有使用高速缓存层次结构的存储器架构的多级高速缓存。高速缓存层次结构可以使处理器110能够将来自存储器的数据作为高速缓存数据存储在一级或更多级高速缓存120中。处理核心111A-Z可以比访问来自存储器130的数据(例如,主存储器访问)更快地访问和处理高速缓存的数据。每次访问存储器130可能成为处理核心111A-Z的性能的瓶颈,因为它们将不得不浪费等待从主存储器检索数据的周期。处理器110通过使用多个高速缓存级220A-C来减少浪费周期的数量。

在操作期间,处理器110使用多个高速缓存级220A-C。处理器110的高速缓存控制逻辑通过在检查较高级别的高速缓存之前检查较低级别的高速缓存来操作。例如,处理器110检查较低高速缓存级220A(例如,L1)的高速缓存,并且如果数据存在(例如,高速缓存命中(hit)),则处理核心可以访问它,而如果数据不存在(例如,高速缓存未命中(miss)),则处理器110继续检查其他高速缓存级别。处理器110可以在确定数据不存在于所有级别的高速缓存120并从存储器130(例如,主存储器(main memory))检索数据之前检查下一级,即高速缓存级220B(例如,L2),等等。

高速缓存级220A-C中的每一个可通信地耦合到处理器110并且可以在处理器110内部或外部。在图2所示的示例中,高速缓存120的所有级别都可以在处理器110内部(例如,包括在处理器内部)。如果高速缓存级别位于处理器的管芯上(例如,芯片上)或位于处理器的封装中(例如,多芯片模块),则高速缓存级别位于处理器内部。同样,一个或更多个高速缓存级220A-C可以包括在处理器110的相应处理核心内部或外部的高速缓存。例如,高速缓存级220A和220B可以包括在它们相应的处理核心(例如,部分处理核心)内部的高速缓存,高速缓存级220C可以包括在所有处理核心外部的高速缓存。在其他示例中,一级或多级高速缓存120可以在处理器110及其处理核心的外部(例如,在处理器之外)。例如,高速缓存级220C(L3)或一个或更多个附加级别(例如,L4)可以位于处理器110外部(例如,芯片外和/或封装外)。在任一示例中,可以有一个或更多个用作私有高速缓存的较低高速缓存级220A-B(例如,L1、L2)和一个或更多个用作共享高速缓存的较高高速缓存级220C(例如,L3、L4等)。

高速缓存级220A可以是高速缓存120的较低级别(例如,最低高速缓存级别)并且可以包括将指令数据与非指令数据分开的一个或更多个硬件高速缓存。将指令数据(例如,可执行数据)与信息数据(例如,不可执行数据)分开的高速缓存可以称为分离的高速缓存。高速缓存级220A的分离的高速缓存可包括同一硬件高速缓存的多个不同部分、多个不同硬件高速缓存或其组合。在图2所示的示例中,高速缓存级220A可以是第一级高速缓存(L1),其包括用于每个处理核心111A-Z的两个单独的本地高速缓存,并且处理核心111A可以包括用于存储指令数据(例如,L1i)的高速缓存224A并且包括存储信息数据(例如,L1d)的高速缓存224B。高速缓存级220A中的高速缓存可以是私有高速缓存并且可以被称为本地高速缓存,因为它们在处理核心内部或者是离每个相应处理核心最近的高速缓存。

高速缓存级220B可以是高速缓存120的中间级别并且可以包括联合的高速缓存。联合的高速缓存避免了指令数据的分离,同时具有指令数据和信息数据的组合,可以称为联合的(unified)高速缓存、组合高速缓存或其他术语。在图2所示的示例中,高速缓存级220B可以是二级高速缓存(L2)并且包括用于每个处理核心111A-Z的单个联合的高速缓存,并且处理核心111A可以使用私有高速缓存124A,处理核心111Z可以使用私有高速缓存124Z。高速缓存级220B中的高速缓存可以私有(private)相应的处理核心(如图所示),或者可以私有处理核心111A-Z的子集(例如,私有的一对核心)。高速缓存级220B中的高速缓存可能不是最接近处理核心,但当它们是处理核心的一部分时仍可被视为本地高速缓存。

高速缓存级220C可以是更高级别的高速缓存120并且可以包括一个或更多个共享高速缓存。高速缓存级220C可以是高速缓存120的最高级别(例如,当L4不存在时)。高速缓存的最高级别是主存储器之前的最后一级,可以称为最后一级高速缓存(LLC)。在图2所示的示例中,高速缓存级220C可以是第三级高速缓存(L3高速缓存)并且可以包括由所有处理核心111A-Z共享的单个共享高速缓存122。共享高速缓存122可以是存储指令数据和信息数据两者的联合的高速缓存并且可以与图1的共享高速缓存122相同或相似。高速缓存级220C可以在处理器110内部(如图所示)或可以在处理器110外部(例如,芯片外或封装外)。在一个示例中,高速缓存级220C可以由处理器110(例如,系统级高速缓存)独占使用。在另一个示例中,高速缓存级220C可以由多个处理器(例如,全局高速缓存)使用。在任一示例中,高速缓存级220C可以是多级CPU高速缓存的一部分,该多级CPU高速缓存包括一个或更多个联合的高速缓存级和一个或更多个可用于存储数据134A-B的分离的高速缓存级。

数据134A-B可以由处理器110从主存储器接收并且可以存储在高速缓存120中。存储在高速缓存120中的数据134A-B可以被称为高速缓存数据并且可以包括指令数据(例如,可执行数据)、信息数据(例如,不可执行数据)、其他数据或其组合。指令数据可以包括加载到主存储器中的计算机程序的可执行数据并且可以包括一个或更多个处理器指令(例如,CPU指令、GPU指令)。信息数据可以是在执行处理器指令之前、期间或之后由处理器110创建、读取、更新或删除的不可执行数据。在一个示例中,数据134A-B可以是一个或更多个变量(例如,共享变量或常量)、文件系统对象(例如,共享文件、链接、目录)、数据库对象(例如,记录、元组)、其他的数据数据存储对象,或其组合。数据134A-B可以作为一个或更多个块234A-C存储在高速缓存120中。

块234A-C是数据存储的单元并且可以存储在高速缓存120、存储器130或其组合中。存储在高速缓存中的数据块可以称为高速缓存块,而存储在存储器中的数据块可以称为存储器块。高速缓存块也可以被称为高速缓存行,并且它们的结构将在下面关于图3更详细地讨论。块234A-C的大小在高速缓存120的级别上可以是相同的,或者可以在高速缓存120的级别上不同。在一个示例中,高速缓存120中的块234A-C的大小可以彼此相同,可能与从主存储器接收到的块的大小匹配,也可能不匹配(例如,高速缓存块和存储器块大小相同)。在另一示例中,高速缓存120中的块234A-C的大小可以彼此不同,并且处于较低级别(例如,L1)的块可以小于处于中间级别(例如,L2)的块并且处于中间级别的块可以小于更高级别(例如,L3)的块。在图2所示的示例中,块234A-C是存储在高速缓存120的不同级别的高速缓存块。块234A存储在高速缓存级220A(L1)中,块234B存储在高速缓存级220B(L2)中,并且块234C存储在高速缓存级220C(L3)中。

处理器110可以使用高速缓存控制器组件114来访问数据134A-B并将其存储在高速缓存120中。处理核心111A可以尝试访问数据134A-B并且处理器110可以从主存储器检索数据134A和数据134B。处理器110可以确定数据134A对应于有争议位置(例如,争用数据)并且数据134B对应于无争议位置(例如,非争用数据)。处理器110可以将争用数据134A的副本存储在共享高速缓存122中,使得所有处理核心111A-Z都可以访问争用数据134A的相同副本,这可以减少高速缓存一致性操作。

处理器110可以将非争用数据134B的副本存储在用于尝试访问它的特定处理核心111A的私有高速缓存124A(L2)中。将非争用数据存储在私有高速缓存中可以更快地访问非争用数据,但会引入额外的高速缓存一致性(例如,当数据被一个或更多个其他处理核心使用时)。例如,在随后的时间点,处理核心111Z可以尝试访问相同的数据134B。处理器110可以创建数据134B的副本并将其存储在私有高速缓存124Z(L2)中以供处理核心111B使用。高速缓存120现在在高速缓存级220B(L2)中包括数据134B的多个副本,并且处理器110将消耗额外的计算资源(例如,处理器开销)以通过执行一个或更多个高速缓存一致性操作213来保持副本的一致性。

高速缓存一致性操作213是由处理器110执行以保持高速缓存一致性的操作。高速缓存一致性是存储在高速缓存120的多个高速缓存中的数据的一致性。当处理核心修改由其他处理核心共享的数据时,数据可能在不同副本之间变得不一致。高速缓存一致性操作213可用于管理高速缓存并指示哪些副本是不一致的(例如,陈旧的),以更新数据的不一致副本,或它们的组合。在下文关于图3更详细地讨论高速缓存控制器组件114和高速缓存一致性。

存储数据的位置可以使原子操作成为近原子215A或远原子215B。近原子215A可以涉及对本地数据进行操作,而远原子215B可以涉及对非本地数据进行操作。在一个示例中,如果数据存储在执行原子操作的处理核心的本地,则数据是本地的。当数据存储在处理核心内部(例如,本地高速缓存、私有高速缓存、L1/L2)时,原子操作可以是近原子的,而当数据存储在处理核心外部(例如,共享高速缓存、L3/L4),原子操作可以是远原子的。在另一个示例中,如果数据存储在执行原子操作的处理器的本地,则数据是本地的。当数据存储在处理器内部时,原子操作是近原子的,而当数据存储在处理器外部(例如,芯片外或封装外,L3/L4)时,原子操作是远原子的。在任一示例中,处理器110可以默认使用远原子操作来减少高速缓存一致性开销,并且通过检测原子操作对应于无争议的操作,处理器110可以执行比远原子更快的近原子操作。

图3-4是示出根据本公开的一些实施例的示例性处理器110的框图,该处理器110具有跟踪存储器中的数据的争用并在其操作期间使用所跟踪的争用的技术。在图3中,处理器110可以使用所跟踪的争用来管理高速缓存并确定将数据存储在高速缓存中的什么位置。在图4中,处理器110可以使用所跟踪的争用来管理存储器操作并确定哪些存储器操作可以乱序地执行。

关于图3-4的组件和模块所讨论的特征可以在处理器110的软件(例如,程序代码)或硬件(例如,电路)中实现。在不失一般性的情况下,可以包括更多或更少的组件或模块。例如,可以将两个或更多个组件组合成单个组件,或者可以将组件的特征分成两个或更多个组件。参考图3,处理器110可以包括争用跟踪组件112和高速缓存控制器组件114。

争用跟踪组件112可用于检测存储器中作为争用目标的位置并更新一个或更多个数据结构以指示存储器中的哪些位置是有争议的、无争议的或其组合。在一个示例中,争用跟踪组件112可以包括争用确定模块312、数据结构更新模块314和位置检查模块316。

争用确定模块312可以使处理器110能够确定在存储器中的位置处存在争用。当第一组一个或更多个存储器操作(例如,第一线程)与第二组一个或更多个存储器操作(例如,第二线程)竞争以从存储器中的公共位置访问数据时,可能会发生争用。公共位置可能在存储器操作对应于相同存储器位置时出现,或者可能在存储器操作对应于不同存储器位置但不同存储器位置都包括至少一个公共位置(例如,存储器的重叠部分)时出现。

争用确定模块312可以通过检测一个或更多个计算事件来检测争用的发生。计算事件可以包括一个或更多个特定错误、故障(例如,高速缓存未命中、页面故障)、异常、陷阱或状态转换。状态转换可以用于退出或进入线程状态(例如,等待、受阻、暂停、睡眠、运行、暂停、终止)、锁定状态(例如,锁定、解锁、打开、关闭)、其他状态转换,或它们的组合。争用确定模块312可以预测是否存在争用(例如,有争议)、是否不存在争用(例如,无争议、没有争用、缺少争用)、争用是否将继续、是否不存在争用将继续,将来是否会发生争用,其他预测,或它们的组合。

争用确定模块312可以使处理器110能够注册响应于事件发生而触发分析的一个或更多个事件侦听器。在一个示例中,争用确定模块312可以响应于后续线程未能获得锁定存储器位置上的锁(例如,锁定尝试失败)或未能访问锁定的存储器位置(例如,读错误(error)、写错误)而检测到锁争用,后者可能不存在任何获取锁的尝试。在另一示例中,争用确定模块312可以检测屏障争用。屏障是一种软件机制,用于确保一组线程都已到达其指令流中的某个点,然后允许任何线程继续超过该点。该点可能在一个或更多个关临界区之前、之中或之后。

数据结构更新模块314可以使处理器110能够基于检测到的或预测的争用来更新一个或更多个数据结构334。数据结构334可以是处理器110用来管理存储器层次结构的一个或更多个部分的任何数据结构,其包括处理器寄存器、高速缓存、主存储器或其组合。数据结构334可以包括定义、描述或组织存储在高速缓存和主存储器中的数据的元数据。数据结构334可以存储在处理器的存储空间(例如,寄存器、高速缓存)、主存储装置(例如,主存储器)、辅助存储装置(例如,硬盘驱动器、固态驱动器)、其他存储位置或其组合中。数据结构334可以包括对应于存储器中的位置的一个或更多个条目的集合。数据结构334可以将该集合表示为一个或更多个列表(例如,链表)、数组(例如,多维数组、矩阵、表格)、其他存储对象或其组合。

集合中的条目可各自对应于一个或更多个存储器位置并且可各自包括指示一个或更多个存储器位置是有争议的、无争议的或其组合的争用数据。在一个示例中,数据结构334可以包括一个集合(例如,表、链表),该集合包括针对每个有争议的存储器位置(例如,争用数据)的条目(例如,行、列、元素、节点),而不包括无争议的存储器位置的条目,反之亦然。在另一示例中,数据结构334可以包括具有表示存储器中的每个位置的条目和用于指示该位置是否有争议的每个位置的指示符(例如,位标志、争用数据)的集合(例如,位图)。在又一示例中,数据结构334可以是高速缓存数据结构,其包括具有嵌入的争用数据(例如,争用指示符)的一组高速缓存条目。

高速缓存条目可以包括具有一个或更多个标签、数据块和指示符的结构。每个标签可以包括位置元数据,该元数据表示存储器中对应于高速缓存条目的位置。位置元数据可以包括整个位置标识符(例如,地址)或标识符的一部分(例如,地址的低位或高位)。每个数据块可以包括来自存储器中的正在存储在高速缓存中的数据,并且可以与高速缓存行或高速缓存块相同或相似。每个指示符可以包括一个或更多个位,这些位指示数据块的状态并且可以对应于争用(例如,有争议的或无争议的)、一致性(例如,陈旧、有效、无效)、更新(例如,未写入、脏、清洁)、锁定(例如,锁定、解锁)、共享、其他状态或它们的组合。

数据结构更新模块314可以指示位置是响应于单个争用实例或响应于多个争用实例的有争议位置。在一个示例中,如果存储器位置有至少一次是争用目标(例如,单个争用实例),则存储器位置可以是有争议的存储器位置。在另一示例中,如果一个或更多个争用度量满足一个或更多个阈值(例如,高于、低于或等于阈值),则存储器位置可以是有争议的存储器位置。争用的度量可以基于一个或更多个争用量(例如,x个实例)、争用持续时间(例如,y个时钟周期、y纳秒)、争用率(例如,每y持续时间x个实例)、争用中涉及的计算实体(例如,锁定时尝试的z个线程)数量、所涉及的计算实体的类型(例如,线程、进程、核心、处理器、计算设备)、其他度量或其组合。

一旦数据结构被更新以指示位置是有争议的,即使在已经解决了争用之后,该位置也可以保持有争议。例如,在争用解决后(例如,位置解锁),争用指示符可以保留。争用指示符可以保留任何持续时间,直到更新数据结构以移除指示为止。更新数据结构以移除指示可能涉及更新集合以移除指示符、位置、条目或整个数据结构的移除操作。移除操作可以与切换(例如,位翻转)、替换(例如,覆盖)、条目的删除、数据结构的删除、清空、刷新、其他操作或其组合相同或相似。移除操作可以发生在预定时间(例如,n纳秒、计划的时间、时间段之后)或响应于计算事件(例如,线程终止、电源循环、页面输入/输出、上下文切换、加载/存储)。

位置检查模块316可以使处理器110能够确定存储器中的一个或更多个特定位置是否是有争议的、无争议的或其组合。确定特定位置是否有争议可以涉及使用存储器中的位置(例如,标签中的位置数据)访问和分析数据结构334。这可以涉及基于位置识别集合中的条目并确定该条目是否指示该位置是有争议的或无争议的。

高速缓存控制器组件114可以访问争用跟踪组件112的数据并使用该数据来管理高速缓存120。这可以涉及执行高速缓存分配和逐出操作以将来自存储器的数据存储在共享高速缓存、私有高速缓存、高速缓存的其他部分中,或其组合。在一个示例中,高速缓存控制器组件114可以包括存储器访问模块322和数据存储模块324。

存储器访问模块322可以使处理器110能够访问主存储器以检索存储器中的位置处的数据。存储器访问模块322可以接收存储器中的位置作为输入,或者可以接收不同的位置并将该位置(例如,逻辑或虚拟位置)解析为存储器中的位置(例如,物理位置)。解析位置可能涉及将一个或更多个第一地址(例如,逻辑或虚拟地址)映射到一个或更多个第二地址(例如,物理地址)的一个或更多个操作,这可能使用或可能不使用转换后备缓冲区(TLB)。存储器访问模块322可以使用一个或更多个互连(上面讨论过)来访问存储在该位置的数据。如上所述,访问存储器中的数据可以涉及读访问、写访问或其组合。读访问可以涉及将数据从存储器加载到高速缓存中并且涉及处理器110从存储器中的位置接收数据。写访问可以涉及将数据从高速缓存存储到存储器中并且涉及处理器110将数据从高速缓存发送到存储器中的位置。

数据存储模块324可以使处理器110能够将从主存储器接收的数据存储在处理器110的一个或更多个高速缓存中。数据存储模块324可以确定在处理器的高速缓存中的何处放置数据。如上所述,处理器高速缓存可以包括不同级别的多个高速缓存,并且可以包括共享高速缓存和一个或更多个私有高速缓存。数据存储模块324可以使用争用跟踪组件112的数据来确定在处理器高速缓存中的何处存储数据。如上所述,当数据对应于有争议位置时,数据存储模块324可以将数据存储在共享高速缓存(例如,L3)中。当数据对应于无争议位置时,数据存储模块324可以存储在一个或更多个私有高速缓存(例如,L2、L1d)中。

对于有争议位置,数据存储模块324可以将数据作为单个副本存储在共享高速缓存中并且避免在私有高速缓存中具有数据的多个副本。在一个示例中,整个处理器高速缓存(例如,L1-L3)可能具有数据的单个副本,并且单个副本在共享高速缓存中(例如,在L3中,但不在L2或L1中)。在另一个示例中,整个处理器高速缓存可能在共享高速缓存(例如,在L3中)中具有单个副本,在私有高速缓存(例如,L1d,但不是L2)中具有单个副本。由于处理器设计,后一种情况可能总是或偶尔发生。在这些示例的任一个中,数据存储模块324可以避免在私有高速缓存中具有多个副本。这可以显著降低高速缓存一致性开销,因为数据来自有争议位置,并且可能会被多个核心访问,否则将存储在多个核心的相应私有高速缓存中。

对于无争议位置,数据存储模块324可以通过不在共享高速缓存中分配存储空间来存储数据的副本来绕过共享高速缓存。在一个示例中,数据仍可以由共享高速缓存接收并且可以在被接收并存储在相应的私有高速缓存(例如,L2)中之前通过共享高速缓存。

如上所述,处理器高速缓存可以避免在私有高速缓存(L2)中具有多个副本,并且可以被称为主要独占高速缓存、部分独占高速缓存、非包含、其他术语或其组合。高速缓存可能是“大部分独占高速缓存”或“部分独占高速缓存”,因为高速缓存的数据通常会在处理核心的多个高速缓存级别中存储一次,但在某些情况下会有多个副本(例如,一个在私有L1d和共享L3中的副本)。在一个示例中,处理器高速缓存可以是“独占联合的高速缓存”,因为它在特定处理核心的联合的高速缓存部分中包括数据的单个副本,即使在特定处理核心的分离的高速缓存部分(例如,L1d或L1i)中可能存在另一个副本。

数据存储模块324可以处理数据从高速缓存中的分配和逐出。从高速缓存中逐出数据可以涉及从高速缓存中移除数据(例如,逐出)以释放高速缓存中的空间以存储传入数据。逐出可以基于数据存储位置的争议性。例如,逐出可以使得移除对应于无争议位置的数据优先于移除对应于有争议位置的数据。当空间用于存储传入数据时,可以随后覆盖从高速缓存中逐出的数据。数据存储模块324可以处理分配空间。在一个示例中,分配空间可以涉及生成包括标签、高速缓存行和一组指示符的高速缓存条目。如上所述,标签可以指示存储器位置并且高速缓存行可以包括来自存储器位置的数据。该组指示符可以包括争用指示符、脏指示符和陈旧指示符中的一个或更多个。

参考图4,根据本公开的一些实施例,处理器110可以包括用于跟踪存储器中的数据争用并且使用所跟踪的争用来处理存储器操作的技术。处理器110可以包括争用跟踪组件112和操作处理组件116。争用跟踪组件112可以与以上关于图4讨论的争用跟踪组件112相同或相似。

操作处理组件116可以使处理器110能够更高效地处理存储器操作115并使用争用跟踪来执行针对特定存储器操作的乱序处理(例如,补充相同线程的先前加载操作的存储独占操作)。在一个示例中,操作处理组件116可以包括队列模块422、操作分析模块424和处理模块426。

队列模块422可以使处理器110能够管理有序的操作集合。管理有序的操作集合可以涉及添加操作、删除操作、重新排序操作或它们的组合。该集合中的操作可以包括由处理器110执行的任何操作,并且可以包括由处理器110执行的存储器操作和任何非存储器操作。存储器操作在上面关于存储器操作115进行了讨论并且可以与涉及访问主存储器中的数据(例如,读访问或写访问)或管理访问(例如,锁定、排除或同步)的存储器访问操作相同或相似。有序的操作集合可以由队列432存储。

队列432可以是用于存储和组织操作集合的数据结构。队列可以与缓冲区、数组、列表、其他存储结构或它们的组合相同或相似。在一个示例中,队列432可以包括存储器操作和非存储器操作。在另一示例中,队列432可以包括存储器操作而不包括非存储器操作。在任一示例中,队列432可以包括一个或更多个接收队列,其存储在处理操作之前、期间或之后的操作。一旦操作被处理(例如,完成),操作可以从队列432中移除或者可以被更新以指示它们已经被处理并且保留在队列432中直到它们被覆盖(例如,循环队列)。

操作分析模块424可以使处理器110能够分析集合中(例如,队列432中)的操作。操作分析模块424可以检测该集合包括加载存储器操作、存储存储器操作以及零个或更多个介入操作。线程可以包括针对特定存储器位置的加载存储器操作,并且可以包括针对相同存储器位置的一个或更多个互补存储存储器操作(例如,线程A的互补加载/存储对)。介入操作可以在有序集合中的这些互补加载和存储存储器操作之间。介入操作可以是任何类型的操作,并且可以包括存储器操作(例如,另一个线程的加载或存储)、非存储器操作(例如,比较、数据操纵)或它们的组合。

加载和存储操作可以是独占操作、原子操作或其组合。在一个示例中,加载和存储存储器操作可以是独占存储器操作。例如,加载存储器操作可以是由执行线程的加载独占处理器指令引起的独占加载操作,而存储存储器操作可以是由执行同一线程的存储独占处理器指令引起的独占存储操作。线。独占加载操作可以确定存储器位置的锁是否先前被另一个线程获取,并且独占存储操作可以获取该锁。在另一个示例中,有序集合中的操作可以包括原子操作,这些原子操作将加载和存储作为单个事务执行,该事务可能获取或可能不获取存储器位置的锁。

处理模块426可以使处理器110能够处理有序操作集合中的操作。这加载和存储存储器操作集合可以具有特定的顺序。该顺序可以基于先进先出(FiFo)。该顺序可以用作确定何时处理存储器操作的输入。处理模块426可以访问争用跟踪组件112的数据(例如,元数据和数据结构)并且使用该数据来乱序地处理操作。例如,处理模块426可以在处理针对无争议位置的较早存储器操作之前处理针对有争议位置的稍后存储器操作。在一个示例中,处理模块426可以基于集合的现有顺序处理针对有争议的存储器位置的加载独占存储器操作并且可以乱序地处理补充存储独占存储器操作。在另一示例中,处理模块426可以乱序地处理有争议位置的加载独占和存储独占。在任一示例中,乱序处理操作意味着它可以绕过(例如,跳过)一个或更多个较早的操作,这可以减少有针对争议位置获取锁、维护锁、释放锁或它们的组合所花费的持续时间。

处理模块426可以使处理器110能够使用多个线程来处理有序操作的集合(例如,队列432)。处理器110可以使用第一线程来处理用于将数据从主存储器加载到高速缓存中的存储器操作(例如,加载独占存储器操作)。处理器110可以使用第二线程来处理用于将数据从高速缓存存储到主存储器的存储器操作(例如,存储独占存储器操作)。第二线程可以分析有序操作集合并识别互补存储操作并乱序地处理它们。

处理模块426还可以使用争用跟踪组件112的数据来更高效地处理原子操作。默认情况下,可以使用远原子存储器操作来处理原子操作,以减少高速缓存一致性开销。处理模块426可以检测原子操作是对应于有争议位置还是无争议位置。当原子操作对应于无争议位置时,处理模块426可以将原子操作处理为近原子操作(例如,对本地数据)。当原子操作对应有争议位置时,操作处理模块可以将原子操作处理为远原子。这可能是有利的,因为处理模块426可以覆盖原子操作的典型处理以更快地处理存储器操作。

图5是根据本公开的一些实施例的用于使用争用跟踪来管理高速缓存的方法500的流程图。方法500可以由处理逻辑来执行,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备的硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令),或它们的组合。在一些实施例中,方法500由图1-4的处理器110执行。尽管以特定的顺序或顺序显示,除非另有说明,否则可以修改处理的顺序。因此,所示实施例仅应理解为示例,并且所示过程可以以不同的顺序执行,并且一些过程可以同时或并行执行。此外,在各种实施例中可以省略一个或更多个过程。因此,并非在每个实施例中都需要所有过程。其他过程流程是可能的。

在操作510,处理设备的处理逻辑可以识别存储器中的位置并且存储器中的位置包括数据。处理逻辑可以从存储器中的位置接收数据并生成包括标签、高速缓存行和一组指示符的高速缓存条目。标签可以包括位置,高速缓存行可以包括来自存储器中的位置的数据,并且该组指示符可以包括争用指示符、脏指示符和陈旧指示符中的一个或更多个。在一个示例中,处理逻辑可以访问包括分离的高速缓存级别和一个或更多个联合的高速缓存级别的多级处理器高速缓存。分离的高速缓存级别可以将指令数据与信息数据分离,并且一个或更多个联合的高速缓存级别可以各自将指令数据与信息数据组合。在一个示例中,处理逻辑可以是包括多个处理核心和高速缓存(例如,多级处理器高速缓存)的中央处理单元(CPU)的一部分。

在操作520,处理逻辑可以确定该位置是否有争议。如果至少一个线程被阻止访问该位置而该位置被另一个线程锁定,则存储器中的位置可能是有争议的。在一个示例中,处理逻辑可以确定第一线程获取了位置上的锁并且响应于第二线程未能获取位置上的锁而检测到锁争用。第一线程可以在第一处理核心上执行并且第二线程可以在第二处理核心上执行。处理逻辑可以更新数据结构以指示该位置是有争议位置。

在操作530,处理逻辑可以响应于位置有争议而将数据存储在共享高速缓存中。共享高速缓存可由多个处理核心使用。在一个示例中,数据作为单个副本存储在共享高速缓存中,并且避免在私有高速缓存中数据的多个副本以减少高速缓存一致性操作。在另一个示例中,高速缓存可以是在高速缓存的多个级别上维护数据的单个副本的主要独占高速缓存,并且多个级别包括联合的高速缓存级2(L2)和联合的高速缓存级3(L3)。处理逻辑可以在存储数据之前、期间或之后从高速缓存中逐出数据。逐出可以使得移除对应于无争议位置的数据优先于移除对应于有争议位置的数据。

在操作540处,响应于位置无争议,处理逻辑可以绕过共享高速缓存并将数据存储在私有高速缓存中。私有高速缓存可由多个处理核心中的单个处理核心使用。数据可以存储在私有高速缓存中,而无需存储在共享高速缓存中。共享高速缓存可以是由多个处理核心共享的三级(L3)高速缓存,并且私有高速缓存可以包括对处理核心之一私有的二级(L2)高速缓存和一级(L1)高速缓存。在一个示例中,处理设备可以处理对位置数据的多个原子操作。多个原子操作可以在位置有争议时被处理为远原子操作,并且在位置无争议时被处理为近原子操作。

图6是根据本公开的一些实施例的用于使用争用跟踪来管理存储器操作的方法600的流程图。方法600可以由处理逻辑来执行,处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备的硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令),或它们的组合。在一些实施例中,方法600由图1-4的处理器110执行。尽管以特定的顺序或顺序显示,除非另有说明,否则可以修改处理的顺序。因此,所示实施例应仅被理解为示例,并且所示过程可以以不同的顺序执行,并且一些过程可以并行执行。此外,在各种实施例中可以省略一个或更多个过程。因此,并非在每个实施例中都需要所有过程。其他过程流程是可能的。

在操作610,处理设备的处理逻辑可以确定线程被阻止访问被锁定的多个存储器位置的数据。处理逻辑可以确定第一线程获取了存储器位置上的锁并且响应于第二线程未能获取存储器位置中的一个上的锁而检测到锁争用。第一线程可以在处理设备的第一处理核心上执行,第二线程可以在处理设备的第二处理核心上执行。

在操作620,处理逻辑可以更新数据结构以指示多个存储器位置是有争议的并且多个存储器位置在被解锁之后可以保持有争议。在一个示例中,处理逻辑可以响应于检测到锁争用来启动更新。

在操作630,处理逻辑可以处理来自队列的第一存储器操作。队列可以包括第一存储器操作、多个介入操作和第二存储器操作。第一存储器操作和第二存储器操作可以对存储器位置的数据进行操作。第一存储器操作和第二存储器操作可以在存储器位置被锁定时发生。在一个示例中,第一存储器操作可以是独占加载操作并且第二存储器操作可以是独占存储操作。独占加载操作可以通过执行线程的加载独占处理器指令引起,并且独占存储操作可以通过执行同一线程的存储独占处理器指令引起。

在操作640,处理逻辑可以基于数据结构确定存储器位置是有争议的存储器位置。在一个示例中,存储器位置可以是主存储器的物理存储器地址。该数据结构可以指示在预定时间段内的任何时间都存在争议的物理存储器地址。

在操作650,处理逻辑可以在介入操作中的至少一个介入操作之前处理第二存储器操作。介入操作可以在队列中的第一存储器操作和第二存储器操作之间。在队列中的至少一个介入操作之前处理第二存储器操作(例如,存储操作)可以减少有争议位置被锁定的持续时间。该队列可以是存储器操作的有序集合,包括多个独占加载操作,随后是多个独占存储操作。处理逻辑可以在针对无争议位置的所有多个独占存储操作之前处理针对有争议位置的所有多个独占存储操作。在一个示例中,队列可以由多个线程处理。第一线程可以处理用于加载数据的存储器操作,而第二线程可以处理用于存储数据的存储器操作。

图7示出了计算机系统700的示例机器,在该机器中可以执行一组指令,用于使机器执行本文讨论的任何一个或更多个方法。在一些实施例中,计算机系统700可以是包括具有高速缓存控制器、存储器控制器或其组合的处理器的计算设备。在替代实施例中,机器可以连接(例如,联网)到LAN、内联网、外联网和/或因特网中的其他机器。该机器可以在客户端-服务器网络环境中以服务器或客户端机器的身份运行,作为对等(或分布式)网络环境中的对等机器,或作为云计算基础设施或环境中的服务器或客户端机器。

该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络设备、服务器、网络路由器、交换机或桥,或任何能够执行一组指令(顺序或其他)的机器,这些指令指定该机器要采取的动作。此外,虽然说明了单个机器,但术语“机器”也应理解为包括单独或联合执行一组(或多组)指令以执行本文讨论的任何一个或更多个方法的机器的任何集合。

示例计算机系统700包括处理设备702(例如,处理器110)、主存储器704(例如,只读存储器(ROM)、闪存、动态随机存取存储器(DRAM),例如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)等)、静态存储器706(例如,闪存、静态随机存取存储器(SRAM)等)和数据存储系统718,它们通过总线730相互通信。

处理设备702代表一个或更多个通用处理设备,例如微处理器、中央处理单元等。更具体地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器,或实现其他指令集的处理器,或实现指令集组合的处理器。处理设备702也可以是一个或更多个专用处理设备,例如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。处理设备702被配置为执行指令726以执行本文讨论的操作和步骤。计算机系统700可以进一步包括网络接口设备708以通过网络720进行通信。

数据存储系统718可以包括机器可读存储介质724(也称为非暂时性计算机可读介质),其上存储有一组或多组指令726或体现任何此处描述的一个或更多个方法或功能的软件。指令726还可以在由计算机系统700执行期间完全或至少部分地驻留在主存储器704内和/或处理设备702内,主存储器704和处理设备702也构成机器可读存储介质。机器可读存储介质724、数据存储系统718和/或主存储器704可以对应于图1的存储器130。

在一个实施例中,指令726包括用于实现对应于图1-4的争用跟踪组件112的功能的指令。虽然机器可读存储介质724在示例实施例中被示为单个介质,但术语“非暂时性机器可读存储介质”应该被理解为包括存储一个或更多个指令集合的单个介质或多个介质。术语“机器可读存储介质”还应理解为包括能够存储或编码一组指令以供机器执行并且使机器执行本公开的任何一种或更多种方法的任何介质。因此,术语“机器可读存储介质”应理解为包括但不限于固态存储器、光介质和磁介质。

前面详细描述的一些部分已经根据算法和对计算机存储器内的数据位的操作的符号表示来呈现。这些算法描述和表示是数据处理领域的技术人员用来最有效地将他们的工作内容传达给本领域的其他技术人员的方式。算法在这里并且通常被认为是导致期望结果的自洽操作序列。这些操作是那些需要对物理量进行物理操纵的操作。通常,尽管不是必须的,这些量采用能够被存储、组合、比较和以其他方式操作的电或磁信号的形式。有时,主要出于常用的原因,将这些信号称为位、值、元素、符号、字符、术语、数字等已被证明是方便的。

然而,应该记住,所有这些和类似的术语都将与适当的物理量相关联并且仅仅是应用于这些量的方便标签。本公开可以指计算机系统或类似电子计算设备的动作和过程,其操作表示为计算机系统的寄存器和存储器内的物理(电子)量的数据并将表示为计算机系统的寄存器和存储器内的物理(电子)量的数据转换成类似地表示为计算机系统存储器或寄存器或其他此类信息存储系统内的物理量的其他数据。

本公开还涉及一种用于执行本文中的操作的装置。该装置可以为预期目的专门构造,或者它可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。这样的计算机程序可以存储在计算机可读存储介质中,例如但不限于任何类型的磁盘,包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡,或任何类型的适合存储电子指令的介质,每个都连接到计算机系统总线。

本文提出的算法和显示与任何特定的计算机或其他装置没有内在的关系。各种通用系统可以与根据这里的教导的程序一起使用,或者可以证明构造更专业的装置来执行该方法是方便的。各种这些系统的结构将如下面的描述中所述。此外,没有参考任何特定的编程语言来描述本公开。应当理解,可以使用多种编程语言来实现如本文所述的本公开的教导。

本公开可以作为计算机程序产品或软件提供,其可以包括其上存储有指令的机器可读介质,该指令可以用于对计算机系统(或其他电子设备)进行编程以执行根据本公开的过程。机器可读介质包括用于以机器(例如,计算机)可读的形式存储信息的任何机制。在一些实施例中,机器可读(例如,非暂时性计算机可读)介质包括机器(例如,计算机)可读存储介质,例如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光存储介质、闪存组件等。

在前述说明书中,已经参考本公开的具体示例实施例描述了本公开的实施例。显然,可以对其进行各种修改而不背离所附权利要求中阐述的本公开实施例的更广泛的精神和范围。因此,说明书和附图应被视为说明性意义而非限制性意义。

技术分类

06120116131351