CN108694136A - 用于超越基于非局部性的指令处理的系统、设备和方法 - Google Patents

用于超越基于非局部性的指令处理的系统、设备和方法 Download PDF

Info

Publication number
CN108694136A
CN108694136A CN201810169075.0A CN201810169075A CN108694136A CN 108694136 A CN108694136 A CN 108694136A CN 201810169075 A CN201810169075 A CN 201810169075A CN 108694136 A CN108694136 A CN 108694136A
Authority
CN
China
Prior art keywords
locality
memory
processor
instruction
cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201810169075.0A
Other languages
English (en)
Other versions
CN108694136B (zh
Inventor
B·埃金
R·阿加瓦尔
J·S·朴
C·J·休斯
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN108694136A publication Critical patent/CN108694136A/zh
Application granted granted Critical
Publication of CN108694136B publication Critical patent/CN108694136B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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/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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6042Allocation of cache space to multiple users or processors
    • G06F2212/6046Using a specific cache allocation policy other than replacement policy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

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

用于超越基于非局部性的指令处理的系统、设备和方法
技术领域
实施例涉及在计算系统中对存储器存取进行有效处理。
背景技术
稀疏数据处理工作负载(如图形分析)执行无规律的存储器存取。在某些情况下,这些存取是针对大数据结构的,并且是伪随机的。在现代处理器中,从存储器中获取完整高速缓存行并将其插入高速缓存存储器中。然而,在许多情况下,这些行在任何重使用之前被逐出(由于空间局部性或者时间局部性)。这既导致高速缓存污染又导致外部存储器带宽的浪费。较新的存储器接口提供细粒度存储器存取能力,即小于给定存储器行或高速缓存行宽度的存储器存取。然而,子高速缓存行存储器存取通向处理器高速缓存层次结构中的部分高速缓存行,这可能使高速缓存设计复杂化。
附图说明
图1是根据本发明的实施例的系统的框图。
图2是根据本发明的实施例的处理器的框图。
图3是根据本发明的实施例的系统的框图。
图4是根据本发明的实施例的方法的流程图。
图5是根据本发明的另一实施例的方法的流程图。
图6是根据本发明的实施例的稀疏存取缓冲器的框图。
图7A是将被包括在根据本发明的实施例的处理器中的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线的框图。
图7B是框图,展示了将被包括在根据本发明的实施例的处理器中的有序架构核的示例性实施例和示例性寄存器重命名、乱序发布/执行架构核。
图8是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图。
图9展示了根据本发明的实施例的系统的框图。
图10展示了根据本发明的实施例的片上系统(SoC)的框图。
图11展示了对照根据本发明的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。
图12是根据本发明的实施例的方法的流程图。
图13是根据本发明的另一实施例的方法的流程图。
具体实施方式
在各个实施例中,处理器被配置成通过以可能的细粒度方式存取数据并且可能通过绕过高速缓存存储器中的存储来优化呈现非局部性(non-locality)的数据(本文中称为无局部性数据(no-locality data))的处理。一些实施例可以利用用户级无局部性存储器存取指令,所述指令可以用于以绕过高速缓存层次结构的方式读取和写入数据。此类指令还可以用于进行如本文所描述的细粒度存储器存取。尽管本发明的范围在这方面不受限制,但此类指令包括流式加载并存储指令,响应于此,核可以针对所存取的单独数据元素发布若干加载或存储,所述数据元素携带表明存储器存取将绕过高速缓存中的存储的提示,并且可以在存储器控制器处被狭窄处理。
通过响应于本文所描述的某些无局部性请求而选择性地启用完全宽度存储器存取,当存取模式实际上是高速缓存友好的时,例如,如果以伪随机方式存取的数据结构适合管芯上高速缓存,或者如果数据结构意外地以规律模式存取且具有大量空间局部性,则可利用局部性。以此方式,实施例可以利用由较新存储器技术提供的细粒度存储器存取能力,而无需对高速缓存层次结构设计进行重大改变,同时在存在局部性时在存取中捕获局部性。
在实施例中,处理器包括用于“无局部性(no-locality)”(NL)加载的微架构支持。与非时间加载相比,NL加载既不意味着时间局部性也不意味着空间局部性。这种NL加载可以使处理器查找高速缓存,并且如果发生高速缓存命中则返回数据,如常规加载那样。相反,如果发生未命中并且在存储器控制器处接收到NL请求,则存储器控制器使得发生细粒度存储器存取以从存储器获得部分高速缓存行。应注意的是,此部分高速缓存行不被插入高速缓存中,而是绕过高速缓存并直接被提供给核。
图1是系统100的实施例的框图,所述系统包括具有高速缓存层次结构103的处理器102以及存储器118。处理器102和存储器118通过一个或多个互连116耦合在一起。处理器102包括一个或多个核104。在所展示出的示例中,处理器102包括第一核104-1,可选地最多到第N核104-N。处理器可以包括任何期望数量的核(例如,通常在从一个到数百个的数量级的范围内)。核104-1包括一个或多个执行单元106-1,并且核104-N包括一个或多个执行单元106-N。
典型地,处理器102还可以具有一个或多个高速缓存108、110。这些高速缓存可以表示比存储器118相对更小和更快的存储类型。这些高速缓存还可以比存储器118更靠近核和/或执行单元。这些高速缓存可以用于高速缓存或存储从存储器118装入处理器中的数据(例如,响应于给定存储器存取指令112,例如,加载指令),以提供对数据的更快的后续存取。当处理器试图用存储器118读取或写入数据时,所述处理器可以首先检查数据的副本是否存储在高速缓存中。如果在高速缓存中找到所述数据,则处理器可以比如果从存储器118存取数据更快地从高速缓存存取数据。结果是,包括高速缓存可以帮助减少存取数据所需的平均时间量,这可以增强处理器的性能和/或吞吐量。
仍然参考图1,高速缓存层次结构103包括在其与处理器的核和/或执行单元的相对接近度上不同的多级高速缓存。核104-1具有第一级高速缓存或1级(L1)高速缓存108-1。类似地,核104-N具有L1高速缓存108-N。L1高速缓存各自可以专用于其包含于其中的对应核。L1高速缓存表示最接近核的高速缓存级别。处理器还具有第二级高速缓存或2级(L2)高速缓存110。L2高速缓存表示次最接近核的高速缓存级别。在一些实现方式中,L2高速缓存可以由核共享。尽管未示出,但可任选地可以存在离核更远的一个或多个附加高速缓存级别(例如,3级(L3)高速缓存)。
在处理器中包括高速缓存的一个原因是存储器引用通常具有局部性属性。例如,对存储器中的数据的引用通常具有时间局部性和/或空间局部性。时间局部性意味着,当从存储器中的地址存取数据时,可能在短时间内再次存取相同的数据。举例来说,当在循环中重复使用相同的值、在一组计算中重复使用相同的值时,或出于各种其他原因时,情况可能如此。在这种情况下,在从存储器存取数据之后,在高速缓存中存储数据可以是有益的,从而可以从高速缓存更快地而不是从存储器缓慢地执行对数据的后续存取。
空间局部性意味着,当从存储器中的地址存取给定数据时,附近地址处的附近数据也可能在短时间内被存取。举例来说,两组数据可以是同一内容(例如,图像、表、数据结构、视频等)的一部分,并且可以大约在同一时间进行处理。空间局部性也可能由于各种其他原因而发生。高速缓存通过不仅存储最初需要的数据而且还存储来自附近地址的附近数据来利用空间局部性。
典型地,从存储器存取并存储在高速缓存中最小数据量是完全宽度高速缓存行数据量,即使最初可能只需要少得多的数据量。例如,典型地,即使最初仅需要单个8位、16位、32位、64位或128位数据元素,仍可能从存储器存取整个512位高速缓存行并将其存储在高速缓存中。如果存在空间局部性,则这将是有益的,因为很可能在不久的将来还将需要被装入到高速缓存中的附加数据。
在操作过程中,高速缓存中的数据通过逐出在不久的将来可能不需要的数据以便为在不久的将来可能需要的数据腾出空间而持续改变。使用各种替换算法和策略,由于时间局部性,其中许多替换算法和策略通常主要基于数据的年龄(例如,最近最少使用的指示)。
存储器存取指令112通过在高速缓存层次结构103中存储已经从存储器118收集到的数据元素来利用时间和/或空间局部性。许多应用和数据类型在其存取流时显示出显著的空间和/或时间局部性,并且由此受益于针对所收集的每个数据元素在高速缓存中存取和存储整个高速缓存行数据量。然而,对于加载和/或存储指令,并非所有应用和/或数据类型都具有足够的时间和/或空间局部性来证明高速缓存中存取和存储整个高速缓存行是正当的。某些数据元素可能需要一次,但在不久的将来不太可能再次需要。例如,在某些流数据应用、高性能计算应用、具有非常稀疏的存储器存取流的应用中,以及在各种其他应用中可能是这种情况。此外,在许多情况下,编程器和/或软件(例如,操作系统)可能能够标识局部性。
仍然参考图1,一个或多个核104可以接收并执行无局部性提示存储器存取指令114(例如,诸如无局部性提示加载或收集指令之类的无局部性提示加载指令、和/或诸如无局部性提示存储或分散指令之类的无局部性提示存储指令)。所述提示可以指示有待存取(例如,收集或分散)的数据具有不足的空间和/或时间局部性。在一些实施例中,无局部性提示可以是无时间局部性提示。在其他实施例中,无局部性提示可以是无空间局部性提示。在再其他的实施例中,无局部性提示可以是无时间和无空间局部性提示。在无时间局部性提示的情况下,在一些实施例中,所收集的数据元素可以绕过高速缓存层次结构103和/或不存储在高速缓存层次结构103中,这可以帮助减少高速缓存污染。在无空间局部性提示的情况下,在一些实施例中,对数据元素的存取可以仅利用子高速缓存行数据量(例如,一半或四分之一高速缓存行数据量)来执行,或者在一些情况下可以利用单个数据元素的数据量来执行,这可以帮助减少互连带宽的浪费和/或降低功耗。使用无局部性提示存储器存取指令可以有助于在空间和/或时间局部性不足时改善性能和/或降低功耗。
图2是能操作以执行无局部性提示存储器存取指令214的实施例的处理器202的实施例的框图。无局部性提示存储器存取指令在本文中也可称为无局部性提示加载指令。在一些实施例中,处理器202可以是通用处理器(例如,在台式计算机、膝上型计算机或其他计算机中使用的类型的通用微处理器或中央处理单元(CPU))。可替代地,所述处理器可以是专用处理器。合适的专用处理器的示例包括但不限于:图形处理器、网络处理器、通信处理器、密码处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)、已经控制器(例如,微控制器)。处理器202可以是以下处理器中的任何处理器:各种复杂指令集计算(CISC)处理器、精简指令集计算(RISC)处理器、超长指令字(VLIW)处理器、其混合、其他类型的处理器,或者可以具有不同处理器的组合(例如,在不同的核中)。
在操作过程中,处理器202可以接收无局部性提示存储器存取指令214。例如,可以从指令获取单元、指令队列等接收无局部性提示存储器存取指令。无局部性提示存储器存取指令可以表示宏指令、汇编语言指令、机器代码指令或者处理器202指令集的其他指令或控制信号。
仍然参考图2,处理器202包括解码单元或解码器230。解码单元230可以接收和解码无局部性提示存储器存取指令214。解码单元230可以输出一个或多个微指令、微运算、微代码进入点、经解码指令或控制信号,或反映、表示无局部性提示存储器存取指令和/或从其推导出的其他相对较低级别的指令或控制信号。所述一个或多个较低级别的指令或控制信号可以通过一个或多个较低级别的(例如,电路级或硬件级)操作来实现较高级别的无局部性提示存储器存取指令。解码单元230可以使用各种不同的机制来实现,包括但不限于:微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)、以及用于实现本领域已知的解码单元的其他机制。
再次参考图2,处理器202还包括一组通用寄存器242和一组紧缩数据寄存器232。所述紧缩数据寄存器各自可以表示可操作以用于存储紧缩数据、向量数据或单指令多数据(SIMD)数据的管芯上存储位置。所述寄存器可以表示软件和/或编程器可见的架构可见寄存器(例如,架构寄存器堆)和/或由指令集的用于标识操作数的指令指示的寄存器。执行单元206与解码单元230和寄存器232、242耦合。执行单元206可以接收表示无局部性提示加载指令和/或从其中推导出的一个或多个经解码或以其他方式经转换的指令或控制信号。
执行单元206能响应于和/或作为无局部性提示加载指令的结果(例如,响应于直接或间接(例如,通过仿真)从指令解码的一条或多条指令或控制信号)而操作以对存储器中的位置进行存取。执行单元206可以向一个或多个高速缓存控制器244提供无局部性提示加载操作248。在一些实施例中,可以存在单个高速缓存级别和单个高速缓存控制器(例如L1高速缓存控制器)。在其他实施例中,可以存在两个或更多个高速缓存控制器(例如,L1高速缓存控制器、L2高速缓存控制器、以及可选的L3高速缓存控制器)。
在一些实施例中,如果无局部性提示加载操作248在高速缓存208中命中,则相关联的高速缓存控制器244可以任选地从高速缓存208返回子高速缓存行数据量(其中高速缓存支持子高速缓存行存取,例如分区高速缓存)。在各个实施例中,子高速缓存行数据量可以仅是一半高速缓存行(例如,512位高速缓存行的仅256位)、仅四分之一高速缓存行(例如,仅128位)、仅八分之一高速缓存行(例如,仅64位)、或仅单个数据元素(例如,1个128位、64位、32位、16位或8位数据元素)。在其他情况下,在高速缓存命中时,可以返回完整高速缓存行。
相反,如果在所有高速缓存208中无局部性提示加载操作248均未命中,则响应于请求249,可以将对数据的请求发送到存储器控制器246。在一些实施例中,存储器控制器246可以执行子高速缓存行数据存取并从存储器(例如,外部存储器)返回250。并且应注意的是,相关联的高速缓存控制器244可以不为所请求的数据分配高速缓存中的存储空间,就像其通常对于常规加载指令(即,没有无局部性提示)所做的那样。在各个实施例中,子高速缓存行数据存取和返回250可以仅是一半高速缓存行(例如,仅256位)、仅四分之一高速缓存行(例如,仅128位)、仅八分之一高速缓存行(例如,仅64位)、或仅单个数据元素(例如,64位、32位、16位或8位数据元素)。也就是说,存储器控制器246可以从具有比通常用于没有无局部性提示的加载操作(例如,常规加载操作)的更小大小的存取和数据返回的存储器加载数据。作为一个特定示例,通常用于存取整个512位高速缓存行数据量的一对256位总线信号中的仅一个总线信号可以从存储器控制器246发送到存储器,其中所发送的总线信号是包含期望数据元素的总线信号。在一些实施例中,可以任选地使用足以包含期望数据元素的最小大小的存取和数据返回。存储器控制器246可以向(多个)高速缓存控制器244提供子高速缓存行数据返回250。高速缓存控制器可以向执行单元206提供相应的子高速缓存行数据量252。因此,在各个实施例中,包含无局部性提示的加载指令可以导致子高速缓存行数据存取和直接返回给核,从而绕过高速缓存层次结构。
在实施例中,处理器202包括所谓的稀疏存取缓冲器(SAB)245,所述SAB是包含在存储器控制器246中或与其相关联的存储器结构。存储器控制器246在此缓冲器中寄存细粒度存取的地址。当NL加载到达存储器控制器时,存储器控制器查找缓冲器。对SAB 245中的相应条目的命中意味着局部性(例如,数据先前绕过高速缓存、但现在重引用所述行的情况)。在一个示例中,响应于这种情形,选择性地使得NL加载请求能够以常规加载处理,从而从存储器返回完整高速缓存行作为选择性完全宽度返回251,并且将其插入到高速缓存中以利用局部性用于将来的存取。以此方式,SAB 245中的信息可以由存储器控制器246使用以选择性地过滤具有局部性可能性的存取且将其目标数据作为完整高速缓存行插入到高速缓存中,同时绕过无局部性的存取。
实施例可以用于处理部分高速缓存行存储器存取而无需使用分区高速缓存,这可以简化高速缓存设计。同样通过实施例,局部性可能性当存在时可以经由高速缓存存储加以利用。具有局部性可能性的NL加载包括稀疏数据处理工作负载,其可以基于输入数据集(例如,大小、类型、拓扑等)展现局部性可能性。
在实施例中,SAB结构被包括在存储器控制器中以跟踪存储器侧的局部性行为。通过这种安排,SAB主要观察低局部性存取流量,因为高局部性存取被高速缓存过滤。相反,核侧跟踪将接收具有高局部性存取和低局部性存取的存取流。因此,存储器侧配置的SAB可以为给定数量的条目提供高得多的低局部性存取跟踪覆盖。作为示例,即使具有少到32个条目的SAB可以提供合理的性能,而核侧跟踪可能消耗大得多的数量的条目,例如256k个条目。
稀疏数据结构在大数据分析、机器学习和高性能计算中非常常见。这些工作负载有时具有不适合高速缓存的非常大的数据结构。这些大数据结构通常通过稀疏连接矩阵来加索引,这导致具有较差空间局部性的无规律存取和重使用(例如,在A[B[i]]上的循环,其中A是大的,并且其中B[i]可以是完全随机的)。经由部分宽度加载使用细粒度存储器存取减少带宽浪费和高速缓存污染,从而提高存储器系统性能。
在实施例中,针对无局部性加载的指令集架构(ISA)支持可以包括特殊标量加载和不建议空间或时间局部性的单指令多数据(SIMD)收集。作为基线系统,对于NL加载,可以假定以下语义。在具有弱排序语义的可高速缓存回写存储器上允许NL加载。这允许硬件推测性地读取数据,但不将(可能是部分的)高速缓存行插入到高速缓存层次结构中以进行监听。
实施例动态做出决策以判定是遵从NL提示还是忽略该提示来在高速缓存层次结构中存储所获得的数据(其可能具有完全宽度)。对于每个NL加载存取,简单地绕过高速缓存可能基于以下几个因素导致性能损失:(i)索引稀疏的数据结构可能小到足以适合高速缓存,因为编程器往往事先不知道输入大小;以及(ii)稀疏输入数据可能呈现编译器或编程器未知的不同存取分布。例如,所述分布可以是均匀随机的,或者在许多社交网络图表的情况下,可以呈现幂律分布,其中存在看到许多重引用的几个中枢节点,但有许多叶节点没有重使用。选择性地将中枢节点插入高速缓存并绕过叶节点将提高整体性能。作为另一因素,编程器可能误用NL加载。在这些情况下,用于检测NL加载的局部性可能性的机制可以超越NL行为。这样,根据实施例的动态校正机制允许编程器更自由地使用NL加载特征。
在操作中,NL加载流程像常规加载流程一样开始。如果在高速缓存中NL加载命中,硬件将照常返回高速缓存行,将所述高速缓存行插入到更靠近核的(多个)高速缓存中,并且更新使用位(尽管可以基于NL提示来优化插入和替换)。在一些实施例中,如果对于同一地址已经存在未完成未命中,则将NL加载未命中与未完成的加载合并。如果NL加载的地址不存在任何未完成未命中,则它分配填充缓冲器,例如具有NL标志或指示符的未命中状态保持寄存器(MSHR)条目。如果对已经具有未完成的NL加载未命中的地址存在任何进入的未命中,则进入的未命中将不依赖于具有NL标志的未完成未命中以引起高速缓存行。可以暂停新的未命中(MSHR已满),或者可以将具有NL标志的未完成未命中转换为有待插入高速缓存的规律未命中。
如果NL加载未命中所有高速缓存并且用于存取存储器,则存储器控制器动态地判定是作为规律完整高速缓存行存储器存取(经由无局部性提示的选择性超越)还是作为细粒度(子高速缓存行宽度)存储器存取(根据无局部性提示)来执行此请求。如果发生完整高速缓存行存取,则加载流程照常完成,返回高速缓存行,以便将所述行插入(多个)高速缓存,并且更新所分配的MSHR条目。然而,如果决定进行细粒度存储器存取,则存储器控制器将子高速缓存行数据直接返回给核而无需将数据插入高速缓存中。在完成此未命中后,将清除具有NL标志的相应MSHR条目。
现在参考图3,示出了根据本发明的实施例的系统的框图。更具体地,系统300包括处理器302,即多核处理器。如所看到的,处理器302包括多个核304-1至304-N,具有相应的专用高速缓存存储器(即L1高速缓存)306-1至306-N。这些高速缓存存储器进而耦合到共享高速缓存存储器310,在一个实施例中,所述共享高速缓存存储器可以是L2高速缓存(并且在一些情况下,可以是最后一级高速缓存(LLC))。高速缓存存储器310进而耦合到存储器控制器346。在所示实施例中,存储器控制器346耦合到稀疏存取缓冲器345。尽管为了便于说明而示出为分开的组件,但应理解,在某些实施例中,稀疏存取缓冲器345可以在存储器控制器346内实现。在任何事件中,稀疏存取缓冲器345与核304分开作为非核电路组件,并且因此不是相干域的一部分。存储器控制器346进而与系统存储器360接口连接,在一个实施例中,所述系统存储器可以是能够处理细粒度存取的任何类型的存储器结构。
应理解,存储器控制器346可以进一步包括局部性控制电路(局部性控制器)347,所述局部性控制电路被配置成响应于接收到NL加载请求而动态地判定是用NL加载处理来将此请求作为NL加载进行处理还是用完全宽度加载处理来处理所述请求。如本文所描述的,此判定可以至少部分基于稀疏存取缓冲器345内的信息。
仍然参考图3,示出了用于规律加载处理和NL加载处理的流程。具体地,对于规律加载,从给定核304发布加载请求,并且将其提供给高速缓存层次结构以在高速缓存层次结构中判定所述请求是否命中。若是,则返回数据。如果发生高速缓存未命中,则请求转到存储器控制器346,所述存储器控制器向系统存储器360发布相应请求以获得完全宽度的数据(即完整高速缓存行)。在此数据返回时,存储器控制器346提供数据以插入到高速缓存层次结构中并提供给请求核304。
相反,如果在高速缓存层次结构中NL加载请求未命中,则存储器控制器346存取稀疏存取缓冲器345以判定是用NL处理还是用完全宽度处理来处理所述请求。如果所述请求的地址在稀疏存取缓冲器345内命中且相关联的置信度值满足阈值水平,则存储器控制器346可将所述请求作为完全宽度加载进行处理,其中处理如以上所讨论的那样。否则,存储器控制器346从系统存储器360请求部分宽度的数据,并且绕过高速缓存层次结构将所返回的数据直接提供给请求核304。应理解的是,尽管在图3的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
现在参考图4,所示是根据本发明的实施例的方法的流程图。更具体地,方法400可以由硬件电路系统、软件、固件、和/或其组合来执行。更具体地,方法400可以由处理器内的各种逻辑和电路系统来执行,以处理具有无局部性提示的存储器存取指令。如图所示,方法400开始于接收具有无局部性提示的存储器存取指令(框410)。此指令可以被接收在处理器的对指令进行解码的解码单元内。接着,控制转到菱形框420,在所述菱形框中判定在高速缓存存储器层次结构内与此指令相关联的地址是否命中。若是,控制转到框430,在所述框中数据返回给请求者。应理解的是,可能发生附加处理,例如更新命中高速缓存行的最近信息等。
仍然参考图4,如果在高速缓存存储器层次结构内所述请求未命中,则控制转到框440,在所述框中可以确定存储器存取处理的类型。更具体地,在可以在存储器控制器的局部性控制器中执行的框440处,可以使用于自稀疏存取缓冲器的信息来确定适当的处理,如以上所讨论的那样。如果要执行非局部性处理,则控制转到框450,在所述框中获得部分宽度数据并将其直接返回给请求者。将部分宽度数据直接返回给请求者(例如,核)绕过高速缓存层次结构。再进一步地,可以更新稀疏存取缓冲器内的信息。例如,如果与此存储器存取指令相关联的地址的条目已经存在,则置信度值可以被更新(例如,递增)。或者如果在稀疏存取缓冲器中先前不存在条目,则可以针对此地址插入新条目。根据稀疏存取缓冲器的实现方式,还可以存储部分宽度数据本身。
仍然参考图4,如果相反对于此存储器存取指令确定要执行选择性完全宽度处理,则控制转到框460,在所述框中可以获得完全宽度数据。此数据可以经由高速缓存存储器层次结构提供给请求者。还应注意,如果此地址的条目存在于稀疏存取缓冲器中,则可以将其移除。应理解的是,尽管在图4的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
因此,在实施例中,对于所有高速缓存中未命中的NL加载,SAB可以用于动态地检测潜在局部性,例如通过细粒度/完全存取决策。响应于细粒度存储器存取,在SAB中分配条目。在存储器控制器中接收并在SAB中命中的新NL加载指示此地址最近被存取,但绕过了高速缓存,并且现在正在重引用。在这种情况下,对于此特定地址,用于标识潜在局部性的置信度指示符(例如,一个或多个所谓的置信度位)递增。如果当在存储器控制器中接收到新的NL加载时置信度足够高,则执行规律完整高速缓存行存储器存取,并且将数据插入高速缓存中以捕获用于下一请求的局部性。
现在参考图5,所示是根据本发明的另一实施例的方法的流程图。更具体地,方法500阐述了在处理器内处理具有无局部性提示的加载指令。这样,方法500可以由硬件电路系统、软件、固件、和/或其组合来执行。
如图所示,方法500开始于判定在高速缓存层次结构的任何级别中NL加载指令的地址是否命中(菱形510)。若是,控制转到框520,在所述框中数据返回给核。再进一步地,取决于处理器实现方式,命中数据还可以被插入到一个或多个更高的高速缓存级别(即,更靠近核的一个或多个高速缓存级别)中。相反,如果确定在处理器中的任何高速缓存内NL加载的地址没有命中,则控制转到菱形530以判定在SAB内所述地址是否命中。
若否,则可以根据SAB是被实现为被绕过的地址过滤器(BAF)还是读取组合缓冲器(RCB),用不同的流程发生对此加载请求的处理。在BAF的情况下,控制转到框540,在所述框中,存储器控制器可以发布窄数据请求(即对于子高速缓存行宽度数据),并且在从存储器接收到所请求的数据时,绕过高速缓存层次结构将数据直接返回给核。因此,此数据未被插入到高速缓存层次结构的任何高速缓存存储器中。再进一步地,在SAB内未命中的情况下,可以为与此NL加载相关联的地址分配新的SAB条目。在RCB实现方式的上下文中,在对于与NL加载相关联的地址在SAB内未命中的情况下,控制代替地转到框545。在那里,子高速缓存行宽度数据直接到达核,绕过高速缓存层次结构。再进一步地,在SAB内未命中的情况下,可以为与此NL加载相关联的地址分配新的SAB条目,并且可以将部分宽度数据本身存储在所分配的条目内。
仍然参考图5,如果在SAB内NL加载的地址命中,则控制转到菱形框550以判定命中条目的置信度值是否超过置信度阈值。在一个实施例中,置信度值可以简单地是单个位,在SAB的条目第一次命中时所述位被设置为一。在其他情况下,置信度值可以被实现为多位计数信息,使得对于对此条目的每次命中,置信度值可以例如更新为一。
在任何事件中,如果置信度值不超过置信度阈值,则取决于SAB是被实现为BAF(框560)还是RCB(框565),控制转到框560和565之一。如图所示,对于BAF实现方式,部分宽度的数据直接返回给核,绕过高速缓存层次结构,并且无需插入到高速缓存层次结构的任何高速缓存中。此外,所述条目的置信度值增加。相反,对于RCB实现方式,部分宽度的数据直接从SAB本身返回给核,绕过高速缓存层次结构。此外,所述条目的置信度值增加。
仍然参考图5,如果相反在菱形框550处确定命中条目的置信度值超过置信度阈值,则取决于SAB实现方式,控制转到框570和575之一。在BAF实现方式的情况下,在框570处,超越或忽略此NL加载的NL提示,使得存储器控制器请求并接收完全宽度数据,并将此完全宽度数据返回给核。在实施例中,此返回包括插入到高速缓存层次结构的一个或多个高速缓存中,因为利用此超越,已经做出对局部性的确定,使得数据可能再次与空间和/或时间局部性中的一个或多个一起使用。此外,在框570处,存储器控制器可以使与NL加载的地址相关联的SAB条目无效。以此方式,对于不同的地址,SAB中的附加空间可以被另一NL加载使用。相反,对于RCB实现方式,控制转到框575,在所述框中超越或忽略此NL加载的NL提示,使得存储器控制器请求并接收来自存储器的剩余数据部分、并且与包括RCB的部分组合以获得完全宽度数据,所述完全宽度数据返回给核(并且插入到高速缓存层次结构的一个或多个高速缓存中)。此外,在框575处,存储器控制器可以使与NL加载的地址相关联的SAB条目无效。应理解的是,尽管在图5中以这种较高层次示出,但许多变体和替代方案是可能的。
各种类型的稀疏存取缓冲器实现方式是可能的。尽管本发明的范围在这方面不受限制,但两种可能的实现方式包括读取组合缓冲器(RCB)和被绕过的地址过滤器(BAF)。
在一种实现方式中,RCB是包括在存储器控制器中或与存储器控制器紧密相关联的小存储器侧缓冲器。这样的RCB可以包括多个条目以存储被绕过的地址、局部性置信度值、以及细粒度存取的数据。此缓冲器在处理器高速缓存的相干域之外,并且它仅存储来自其存储器通道的未插入到高速缓存中的子高速缓存行数据。只有在高速缓存层次结构中找不到相应地址时,才存取RCB中的数据。在存储器控制器中接收的规律写入(例如,从高速缓存的脏驱逐)也检查RCB,并且如果相应地址在RCB中有效则更新内容。
当在RCB中NL加载命中时,局部性置信度值递增,并且从RCB到核来服务所述加载,而无需任何外部存储器存取。如果相应条目的置信度值足够高,则从存储器获取所述行的剩余部分,并且将其与RCB中已经存在的部分组合以形成高速缓存行。然后,将此行插入高速缓存中,以捕获用于稍后存取的潜在重使用。当所述行被插入到高速缓存中时,它成为高速缓存相干域的一部分,因此使相应条目从RCB无效,RCB严格地排除CPU高速缓存。在插入到高速缓存层次结构中时使条目无效会在RCB中开辟空间以分配新条目,从而使来自RCB的强制驱逐最小化,并且增加对于被绕过的地址的有效覆盖。在实施例中,RCB可以被组织为组关联高速缓存以减少冲突未命中的机会。应注意的是,RCB在区域方面可能是昂贵的,因为在实施例中,它可能保留完整地址、细粒度数据和元数据。
在另一实现方式中,SAB可以被实现为被绕过的地址过滤器(BAF),其可被配置为包括在存储器控制器中或与存储器控制器紧密相关联的小缓冲器。此缓冲器保留最近绕过高速缓存层次结构的地址集,并且可以用于做出细粒度存储器存取决定。与RCB不同,BAF仅保留地址和置信度指示符,这可以降低区域成本。当在BAF中NL加载命中时,局部性置信度指示符递增,并且如果局部性置信度值不满足阈值,则经由细粒度存储器存取从存储器获取数据。如果置信度值满足阈值,则将请求作为规律存储器存取来服务,以产生完整高速缓存行,所述高速缓存行被插入到高速缓存层次结构中以捕获用于将来引用的重使用。当行插入到高速缓存中时,使相应条目从BAF无效,这开辟了用于分配新条目的空间,从而使来自BAF的强制驱逐最小化,并且增加对于被绕过的地址的有效覆盖。
应注意的是,通过BAF实现方式,总是发生存储器存取以获取细粒度数据。此外,为了促进对完整高速缓存行的存取,BAF从存储器获取整个高速缓存行。RCB实现方式可以节省存储器带宽,使得直接从RCB来服务命中,并且完整高速缓存行促进仅从存储器获得高速缓存行的剩余部分。然而,与RCB相比,BAF实现方式的区域占用空间可能小得多,因为它不保留子高速缓存行数据。
此外,BAF可以保持近似信息以降低成本,而不牺牲正确性。由于BAF仅影响细粒度存取决定,因此错误将仅导致效率降低。近似信息可以处于例如BAF中部分地址的存储形式。这降低了BAF的容量要求,或者可以用于增加具有相同容量的旁路地址覆盖。在部分地址的情况下,BAF可能报告误报(误命中)。换言之,参考地址可能与BAF中的部分地址不正确地匹配。这种误报可能会错误地增加置信度值,因此它可能产生使完整高速缓存行存取更频繁发生的趋势。这可以通过增加置信阈值来解决。然而,这些误报将不会引起任何正确性问题。应注意的是,保留部分地址对于RCB实现方式是不可能的,因为误报可能导致将错误数据返回给核。
如果将完整地址(例如,高速缓存行地址和块偏移)提供给存储器控制器,则SAB可以用于跟踪空间和时间局部性。例如,假设8字节(B)跟踪粒度,对于每个64B高速缓存行,SAB条目可以包括8个置信度计数器(注意,置信度计数器可以低至1位)。对于每个高速缓存行,可以组合所有计数器的总和以给出时间局部性置信度,并且具有非零置信度值的相邻计数器可以指示被绕过的地址的空间局部性置信度。使用这些时间/空间置信度计数器来确定用于促进对规律完整存储器存取的存取的阈值。在最简单的版本中,跟踪粒度与高速缓存行大小匹配,并且使用单个一位计数器。因此,在这种最简单的配置中,在SAB中的第一次命中(对同一分块的时间命中或对同一高速缓存行中的另一分块的空间命中)之后,存取被促进至完整存取。
现在参考图6,所示的是根据本发明的实施例的稀疏存取缓冲器的框图。更具体地,图6示出了被绕过的地址过滤器形式的SAB 600的实施例,其中SAB 600不包括部分宽度数据的存储。以此方式,利用相同大小的缓冲器,可以存储关于更多地址的信息。
如图所示,SAB 600包括多个条目6100至610n。如图所示,每个条目610包括多个字段,包括有效字段612、标签字段614、以及置信度字段616。在实施例中,有效字段612可以是指示给定条目是否有效的单个位(例如,设置为逻辑1值以指示条目有效,并且反之亦然)。标签字段614可以至少存储给定NL存储器存取指令的地址的一部分。如以上所讨论的,为了以可能的误报为代价提供更宽的覆盖,此标签部分可以仅存储部分地址。进而,置信度字段616可以存储一个或多个位以提供置信度信息。在图6所示的实施例中,置信度字段616可以是多计数器字段。例如,在给定实施例中,对于与64B高速缓存行相关联的条目610,可以提供8个计数器,每个计数器可以是一个或多个位。利用这种类型的实现方式,可以基于这些计数器中的每一个的计数值的总和来确定时间局部性。进而,可以通过参考具有非零值的相邻计数器来确定空间局部性。
在不同的实施例中可以设想对所述多个计数器的值进行不同的分析。例如,在一个实施例中,存储器控制器(并且更具体地,这种存储器控制器的局部性控制器)可以在判定是否应当将具有非局部性提示的特定存储器存取指令代替地处理为具有局部性的存储器存取指令(即,以完全宽度数据返回和高速缓存层次结构中的存储来处理)时简单地考虑置信度值的总和。在这样的情况下,置信度值的总和可以与给定阈值进行比较,并且如果所述总和超过阈值,则可以选择性地启用基于局部性的处理。
在另一实施例中,可替代地,存储器控制器(并且更具体地,局部性控制器)可以确定在这些计数器中的多个相邻计数器具有非零值从而指示空间局部性的情况下选择性地启用基于局部性的处理。在另外其他实施例中,可以使用计数器求和技术和相邻计数器值技术的组合。这样,实施例可以使用仅空间局部性信息、仅时间局部性信息、和/或时间/空间局部性信息的组合来作出完整/部分存取决定。
不通过实施例,简单地绕过所有NL存取可能导致增加的存储器流量和由于丢失局部性而降低的性能。通过提供根据实施例的SAB,可以选择性地将高局部性数据插入高速缓存中,使得从高速缓存来服务重引用。因此,与总是绕过细粒度存取相比,基于SAB的动态策略(其可以在给定高速缓存行的基础上针对每个NL加载独立地执行)可以提供显著的存储器数据流量减少和性能改进。
应注意的是,虽然本文所描述的实施例主要是关于加载操作,但是本发明的范围在这方面不受限制。之所以这样,是因为实施例还可以用相同选择性启用操作来用于处理具有无局部性提示的写入操作。对于常规写入操作,在处理器中接收到完全宽度高速缓存行,然后用新数据覆盖高速缓存行的至少一部分。此后,完整高速缓存行宽度被写回到存储器。相比之下,对于具有无局部性提示的写入操作,窄写入请求可以用于仅将高速缓存行宽度的一部分写入存储器,这可以涉及以上所讨论的子高速缓存行处理。这种无局部性提示写入操作的完全宽度处理的选择性启用可以同样适用。
用于以不同方式动态执行细粒度存储器存取的实施例在HPC、大数据分析、机器学习等中具有许多潜在用途。尽管本发明的范围在这方面不受限制,但实施例可以特别适用于特定工作负载,例如页排序算法、基于稀疏矩阵向量乘法的工作负载、或随机梯度下降算法。情况就是这样,因为对大数据结构的无规律存取在HPC、图形分析、机器学习等中非常常见。因此,存储器性能可能成为这些应用中的瓶颈。实施例使得能够从存储器中获取较小粒度的数据,并且在没有局部性时绕过高速缓存。这种操作提高了高速缓存利用率并减少了带宽浪费,这可以显著提高这种高价值应用的存储器性能,同时有效地利用这些存储器提供的细粒度存取能力。动态执行可以检测局部性可能性,并将细粒度存取转变为规律完整高速缓存行存取。因此,细粒度特征的误用被动态地校正。这种安排为编程器提供了使用这些高级特征的更多自由,而不必过多担心负面性能影响。
图7A是框图,展示了将被包括在根据本发明的实施例的处理器中的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线。图7B是框图,展示了将被包括在根据本发明的实施例的处理器中的有序架构核的示例性实施例和示例性寄存器重命名、乱序发布/执行架构核。图7A和图7B中的实线框展示了有序流水线和有序核,而虚线框的可选添加展示了寄存器重命名、乱序发布/执行流水线和核。假定有序方面是乱序方面的子集,将描述乱序方面。
在图7A中,处理器流水线700包括获取阶段702、长度解码阶段704、解码阶段706、分配阶段708、重命名阶段710、调度(也称为分派或发布)阶段712、寄存器读取/存储器读取阶段714、执行阶段716、回写/存储器写入阶段718、异常处理阶段722、以及提交阶段724。
图7B示出了处理器核790,所述处理器核包括耦合到执行引擎单元750的前端单元730,并且所述执行引擎单元和前端单元都耦合到存储器单元770。核790可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或可替代核类型。作为又另一个选项,核790可以是专用核,如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元730包括耦合到指令高速缓存单元734的分支预测单元732,所述指令高速缓存单元耦合到指令转换后备缓冲器(TLB)736,所述指令转换后备缓冲器耦合到指令获取单元738,所述指令获取单元耦合到解码单元740。解码单元740(或解码器)可以对指令进行解码并且生成从原始指令中解码出的、或以其他方式反映原始指令或从原始指令衍生出的一个或多个微运算、微代码入口点、微指令、其他指令或其他控制信号作为输出。解码单元740可以使用各种不同的机制来实施。合适机制的示例包括但不限于:查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核790包括微代码ROM或存储用于某些宏指令的微码的其他介质(例如,在解码单元740中或者在前端单元730内)。解码单元740耦合到执行引擎单元750中的重命名/分配器单元752。
执行引擎单元750包括耦合到引退单元754的重命名/分配器单元752和一组一个或多个调度器单元756。(多个)调度器单元756表示任何数量的不同调度器,包括保留站、中央指令窗口等。(多个)调度器单元756被耦合到物理寄存器堆单元758。(多个)物理寄存器堆单元758各自表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点状态(例如,作为有待执行的下一指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元758包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、以及通用寄存器。(多个)物理寄存器堆单元758与引退单元754重叠以说明可实施寄存器重命名和无序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用将来的(多个)组、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池;等等)。引退单元754和(多个)物理寄存器堆单元758耦合到(多个)执行群集760。(多个)执行群集760包括一组一个或多个执行单元762和一组一个或多个存储器存取单元764。执行单元762可以执行各种运算(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可只包括一个执行单元或包括全都执行全部功能的多个执行单元。(多个)调度器单元756、(多个)物理寄存器堆单元758、以及(多个)执行集群760被示出为可能是复数的,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器存取流水线,所述流水线各自具有其本身的调度器单元、(多个)物理寄存器堆单元、和/或执行集群,并且在分开的存储器存取流水线的情况下,实现了其中只有所述流水线的执行集群具有(多个)存储器存取单元764的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一者或多者可以是乱序发布/执行流水线,并且其余的是有序流水线。
所述一组存储器存取单元764耦合到存储器单元770,所述存储器单元包括耦合到数据高速缓存单元774的数据TLB单元772,所述数据高速缓存单元耦合到2级(L2)高速缓存单元776。指令高速缓存单元734和数据高速缓存单元774可以一起被认为是分布式L1高速缓存。在一个示例性实施例中,存储器存取单元764可以包括各自耦合到存储器单元770中的数据TLB单元772的加载单元、存储地址单元、以及存储数据单元。指令高速缓存单元734进一步耦合到存储器单元770中的2级(L2)高速缓存单元776。L2高速缓存单元776可以耦合到一个或多个其他级的高速缓存并且最终耦合到主存储器。
通过示例的方式,示例性寄存器重命名、乱序发布/运行核架构可以实施流水线700如下:1)指令获取单元738执行获取和长度解码阶段702和704;2)解码单元740执行解码阶段706;3)重命名/分配器单元752执行分配阶段708和重命名阶段710;4)(多个)调度器单元756执行调度阶段712;5)(多个)物理寄存器堆单元758和存储器单元770执行寄存器读取/存储器读取阶段714;执行集群760实施执行阶段716;6)存储器单元770和(多个)物理寄存器堆单元758执行回写/存储器写入阶段718;7)各种单元可以涉及异常处理阶段722;以及8)退出单元754和(多个)物理寄存器堆单元758执行提交阶段724。
核790可以支持一个或多个指令集(例如,x86指令集(具有已经添加了较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS技术公司开发的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有可选的附加扩展,比如NEON)),包括本文所描述的(多个)指令。在一个实施例中,核790包括支持紧缩数据指令集扩展(例如,AVX1、AVX2、和/或某种形式的通用向量友好指令格式(U=0和/或U=1))的逻辑,从而允许使用紧缩数据来执行许多多媒体应用所使用的操作。
应当理解,核790可以支持多线程化(执行两个或更多个并行的操作或线程集),并且可以以各种方式来完成所述多线程化,此各种方式包括时分多线程化、同步多线程化(其中,单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分获取和解码以及此后诸如超线程化技术中的同步多线程化)。
然而在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。虽然处理器的所示实施例还包括分开的指令和数据高速缓存单元734/774和共享的L2高速缓存单元776,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,例如L1内部高速缓存、或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。可替代地,所有高速缓存都可以在核和/或处理器的外部。
在图7B中进一步展示出,处理器还包括存储器控制器780,所述存储器控制器可以执行本文所描述的动态确定以潜在地选择性地超越存储器存取指令的无局部性提示、并且执行所述存储器存取指令,就好像其具有局部性一样(例如,经由例如存储器单元770的高速缓存层次结构而完全宽度加载并返回给核790)。代替地,当存储器控制器780确定根据无局部性提示来处理存储器存取时,可以获得部分宽度数据并将其直接返回给核790,从而绕过包括存储器单元770的高速缓存层次结构。应注意的是,在图7B所示的实施例中,存储器控制器780包括SAB 785。
图8是根据本发明的实施例的可以具有多于一个核的、可以具有集成存储器控制器的、以及可以具有集成图形的处理器800的框图。图8中的实线框展示了具有单个核802A、系统代理电路810、一组一个或多个总线控制器电路816的处理器800,而虚线框的可选添加展示了具有多个核802A-N、以及在系统代理电路810中一组一个或多个集成存储器控制器电路814的替代处理器800。集成存储器控制器电路814可以包括如本文所描述的一个或多个SAB815,以使存储器控制器能够动态地判定针对具有无局部性提示的进入存储器存取请求是否选择性地启用基于局部性的处理。如在图8中进一步展示出的,处理器800还包括图形电路808以分配集成在处理器800N内的图形。
处理器800可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器、加速器装置等。处理器可以在一个或多个芯片上实现。处理器800可以是一个或多个衬底的一部分和/或可以使用如例如BiCMOS、CMOS或NMOS的多种加工技术中的任何一种技术在一个或多个衬底上实现。
存储器层次结构包括核802A-N内的一个或多个级别的高速缓存电路804A-N(包括L1高速缓存),一组一个或多个共享高速缓存电路1006、以及耦合到所述一组集成存储器控制器电路814的外部存储器(未示出)。所述一组共享高速缓存电路806可以包括一个或多个中级高速缓存,比如,2级(L2)、3级(L3)、4级(L4)、或其他级别的高速缓存、终极高速缓存(LLC)和/或其组合。虽然在一个实施例中,基于环形的互连电路812将图形电路808、所述一组共享高速缓存单元806、以及系统代理电路810/(多个)集成存储器控制器单元814互连,但是替代实施例可以使用任何数量的公知技术来互连这样的电路。在一个实施例中,维持一个或多个高速缓存电路806与核802A-N之间的相干性。
在一些实施例中,核802A-N中的一个或多个核能够多线程化。系统代理电路810包括协调和操作核802A-N的那些组件。系统代理电路810可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括用于调节核802A-N和/或图形电路808的功率状态的逻辑和组件。显示单元可以是用于驱动一个或多个外部连接的显示器。
就架构指令集而言,核802A-N可以是同构或异构的;也就是说,核802A-N中的两个或更多个核能够执行相同的指令集,而其他核能够仅执行所述指令集的子集或执行不同的指令集。在一个实施例中,核802A-N是异构的,并且包括下面描述的“小”核和“大”核两者。
图9是示例性计算机架构的框图。本领域中已知的用于膝上型计算机、台式计算机、平板电脑、手持式PC、个人数字助理、工程工作站、服务器、网络装置、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、智能电话、便携式媒体播放器、手持式装置和各种其他电子装置的其他系统设计和配置也是合适的。一般而言,能够纳入本文中所公开的处理器和/或其他执行逻辑的多个系统或电子装置通常是合适的。
现在参考图9,所示的是根据本发明的实施例的示例性系统900的框图。如图9所示,多处理器系统900是点对点互连系统,并且包括经由点对点互连950耦合的第一处理器970和第二处理器980。处理器970和980各自可以是图8的处理器800的某个版本。
处理器970和980被示出为分别包括集成存储器控制器(IMC)单元972和982。处理器970还包括作为其总线控制器单元的一部分的点对点(P-P)接口976和978;类似地,第二处理器980包括P-P接口986和988。如所看到的,处理器970、980进一步包括如本文所描述的SAB 975、985。处理器970、980可以使用P-P接口电路978、988经由点对点(P-P)接口950交换信息。如图9所示,IMC 972和982将处理器耦合到对应存储器、即存储器932和存储器934上,所述存储器可以是主存储器的本地附接到对应处理器上的部分。
处理器970、980可以各自使用点对点接口电路976、994、986、998经由单独的P-P接口952、954来与芯片组990交换信息。芯片组990可以任选地使用点对点接口电路992经由高性能接口939与协处理器938交换信息。在一个实施例中,协处理器938是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以包括在任一处理器中或者在两个处理器外部但经由P-P互连与所述处理器相连接,使得如果处理器被置于低功耗模式下,则任一或两个处理器的本地高速缓存信息可以被存储在所述共享高速缓存中。
芯片组990可以经由接口996耦合到第一总线916。在一个实施例中,第一总线916可以是外围组件互连(PCI)总线,或如PCI Express总线或另一种第三代I/O互连总线等总线,尽管本发明的范围不限于此。
如图9所示,不同I/O装置914可以连同总线桥接器918耦合到第一总线916,所述总线桥接器可以将第一总线916耦合到第二总线920。在一个实施例中,一个或多个附加处理器915(例如,协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、字段可编程门阵列、或任何其他处理器)被耦合到第一总线916。在一个实施例中,第二总线920可以是低引脚数(LPC)总线。在一个实施例中,各个装置可以耦合到第二总线920,所述装置包括例如键盘和/或鼠标922、通信装置927以及存储单元928(如磁盘驱动器或者其他大容量存储装置),在一个实施例中,所述存储单元可以包括指令/代码数据930。进一步地,音频I/O 924可以耦合到第二总线920。应注意的是,其他架构是可能的。例如,替代图9的点对点架构,系统可以实现多点总线或其他这样的架构。
现在参考图10,示出的是根据本发明的实施例的SoC 1000的框图。而且,虚线框是关于更先进的SoC的可选特征。在图10中,(多个)互连电路1012耦合到:应用处理器1010,所述应用处理器包括具有(多个)高速缓存电路1004A-1004N的一组一个或多个核1002A-N、和(多个)共享高速缓存电路1006;系统代理电路1010;(多个)总线控制器电路1016;(多个)集成存储器控制器电路1014,其可以包括如本文所描述的SAB 1015;一组一个或多个协处理器1020,所述协处理器可以包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)电路1030;直接存储器存取(DMA)电路1032;以及显示电路1040,所述显示电路用于耦合到一个或多个外部显示器。在一个实施例中,(多个)协处理器1020是专用处理器,例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。为了本申请的目的,处理系统包括具有处理器的任何系统,例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序代码可以以高级程序或面向对象的编程语言来实施以便与处理系统通信。如果期望的话,程序代码还可以以汇编或机器语言来实施。事实上,本文描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可以由存储在表示处理器内的各种逻辑的非暂态机器可读介质上的表示性指令来实现,当由机器读取时,所述表示性指令使得机器制造逻辑以执行本文所描述的技术。这种表示(被称为“IP核”)可以被存储在有形的非暂时性机器可读介质上并提供给各顾客或制造设施以加载到实际制作所述逻辑或处理器的制作机器中。因此,本发明的实施例还包括包含指令或包含设计数据(比如,硬件描述语言(HDL))的非暂态有形机器可读介质,所述非暂态有形机器可读介质限定本文描述的结构、电路、设备、处理器和/或系统特征。这个实施例也可以被称为程序产品。
在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或将指令转换为要由内核处理的一个或多个其他指令。可以在软件、硬件、固件或其组合中实现指令转换器。指令转换器可以处于处理器上、处理器外、或者部分地处于处理器上并且部分地处于处理器外。
图11是对照根据本发明的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所示实施例中,指令转换器是软件指令转换器,然而可替代地,可以在软件、固件、硬件或其各种组合中实现指令转换器。图11示出了可以使用x86编译器1104来编译高级语言1102的程序以生成x86二进制代码1106,所述二进制代码可以由具有至少一个x86指令集核1116的处理器本机执行。具有至少一个x86指令集核1116的处理器表示可以通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的因特尔处理器基本相同功能的任何处理器:(1)x86指令集核的指令集的实质部分、或(2)目标代码版本的应用或目标是在具有至少一个x86指令集核的因特尔处理器上运行的其他软件,以便实现与具有至少一个x86指令集核的处理器基本相同的结果。x86编译器1104表示能运算以生成x86二进制代码1106(例如,目标代码)的编译器,所述二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核1116的处理器上执行。类似地,图11示出了可以使用替代性指令集编译器1108来编译高级语言1302的程序以生成替代性指令集二进制代码1110,可以由不具有至少一个x86指令集核的处理器1114(例如,具有执行加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的多个核的处理器)本机执行所述替代性指令集二进制代码。指令转换器1112用于将x86二进制代码1106转换为可由不具有x86指令集核的处理器1114本机执行的代码。此经转换的代码不太可能与替代指令集二进制代码1110相同,因为很难制作能够实现这一点的指令转换器;然而,经转换的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1112表示通过仿真、模拟或任何其他进程允许不具有x86指令集处理器或核的处理器或其他电子装置执行x86二进制代码1106的软件、固件、硬件或其组合。
如上所述,实施例可以动态地调度无局部性(例如流式)加载指令。在上述实施例中,对每个NL存储器存取指令执行动态预测以判定相关联的数据是否具有足够的局部性。若否,则硬件执行窄存储器存取并且绕过高速缓存作为回报。如果检测到足够的局部性,则硬件将存取视为规律加载,并且从存储器中获取完整高速缓存行并将其插入到高速缓存中。在上述实施例中,此预测技术使用特定的存取历史来独立地预测每行的局部性。
如本文所描述的,对于具有某些局部性分布的大输入数据集,选择性地将细粒度存取转换为完整存储器存取以利用局部性可以很好地工作。然而,这种技术引致分开学习每行的局部性的费用,因为硬件最初绕过高速缓存,并且对所请求地址的稍后存取被转换成完整高速缓存行存储器存取。因此,当跨地址信息有帮助时,学习局部性模式可能是缓慢的过程。例如,当:(i)工作集或甚至整个输入数据集意外地适合片上高速缓存;或(ii)错误使用的非局部(或流式)加载指令非常频繁地接触具有局部性的数据时,可能需要对同一行进行多次存取才能将该行安装到高速缓存中。
为了减少这种损失,一些实施例进一步提供了基于存储器侧性能计数器跟踪的技术来预测针对无局部性加载的高速缓存绕过是否高效。如果高速缓存绕过被动态地确定为不高效,则处理器被配置成在核侧指令发布时动态地超越无局部性行为。这样,根据实施例的处理器可以快得多地学习某些局部性模式,通过更快地返回给(完整数据存取和高速缓存存储的)基线行为来恢复丢失的性能。
应注意的是,NL加载仅在高速缓存利用率低(高未命中率)和存储器带宽利用率高时有用。实施例可以使用硬件计数器来判定处理器是否在可受益于无局部性加载的体系中操作,所述硬件计数器包括例如终级高速缓存(LLC)未命中速率计数器(具体是每千指令未命中数,MPKI)和可选的带宽利用率。当然,实施例不限于这些特定的性能计数器,并且在其他实施例中,可以使用附加的或不同的性能监测器的信息。如果高速缓存利用率高于给定阈值(并且带宽利用率低于另一阈值),则处理器可以超越无局部性行为,使得所有NL加载被视为规律加载。然而,如果高速缓存利用率低于阈值(并且带宽利用率高于所述另一阈值),则处理器可能从NL加载操作中受益。
这些度量单独可能不足以推断出NL加载确实有用(例如,NL加载仍然可能在高带宽需求的应用中被误用)。这样,实施例还可以利用SAB来跟踪最近绕过的高速缓存的NL加载的地址。如果SAB中的总命中率较高,则对于具有局部性的数据,应用将始终如一地使用NL加载。在这种情况下,即使高速缓存/带宽利用率表明NL加载可能有帮助,仍可以超越NL行为。SAB和性能监测器可以位于存储器控制器中或与存储器控制器相关联。然而,超越决定可以发送到核并存储在所述核处。核可以针对给定时间窗口(例如10K个周期)使用该超越决定来动态地将时间窗口中的未来NL请求转换为规律加载。在不同的实施例中,可以对所有核、已知正在运行来自同一进程的线程的核子集、仅执行最近的NL加载的核、仅执行最近的NL加载的线程、和/或仅触发最近的NL加载的静态指令做出超越决定。
如以上所讨论的基于稀疏存取缓冲器的选择性启用(SE)对于经由类似于幂律的局部性分布生成的存储器存取很好地工作,其中存在呈现局部性的少数数据元素,但许多数据元素没有重使用(例如,处理社交网络图表)。然而,对于要转换为完整高速缓存行存储器存取的所请求地址,由于初始绕过和(多次)后续命中,此技术无法完全恢复丢失的局部性。提供用于NL行为的超越(OR)的实施例可以减轻这种情况的丢失局部性。当处理器动态预测NL加载不高效并且启动超越特征时,NL加载可以在核处在发布时间转换为规律加载,而无需检查SAB中的任何条目。因此,在超越模式中,将NL加载转换为规律加载不会引致初始绕过和(至少一次)连续命中的损失。
此外,利用SE技术,在SAB处生成并接收请求之后发生基于SAB跟踪信息的动态决定。因此,处理器包括微架构基础结构,以对于已经未完成的请求来处理绕过细粒度回复和插入完整存取回复两者。然而,在一些实施例中,超越技术可以不实现此基础结构,以便基于存储器控制器确定来动态地改变已经未完成的请求。之所以这样,是因为通过OR机制,请求在核内在发布时间规律地或无局部性地做出、并且按预期完成,从而简化了微架构支持。
在一个实施例中,SAB结构可以被简化,因为SAB中的总命中率可以被用作用于标识局部性的统计信息。这样,实施例可以放弃每个细粒度分块的单独置信度指示符。在其他实施例中,SE技术可以补充OR技术,使得对于呈现局部性的特定数据,当没有检测到超越(例如,无局部性行为是有用的)时,SE仍然可以选择性地启用完整存取。
在实施例中,可以执行基于时元(epoch)的监控,其中时间被分成多个时元。在一个时元开始时使用从刚刚完成的时元(以及可能的附加先前时元)收集的关于是否超越NL行为的统计信息,做出新的超越(或不超越)决定。此确定可以基于一个或多个性能监测器,包括上述那些。在每个时元开始时,超越逻辑(其可以存在于存储器控制器的局部性控制器中)可以判定来自前一时元的统计信息是否指示可以受益于NL加载的执行体系。例如,所述超越逻辑可以判定LLC MPKI和存储器带宽计数器是否高于预定阈值。由于当LLC未命中率高并且存在对存储器带宽的高需求时,细粒度存储器存取提供益处,因此如果超过阈值,则允许NL加载作为细粒度存取进行。否则,NL加载将转换为规律加载。在一些实施例中,还可以在时元边界处分析SAB统计信息。只有在启用NL加载时才收集此类SAB统计信息。在一些实施例中,SAB统计信息收集时元不同于LLC/MC统计信息收集时元。
现在参考图12,所示是根据本发明的实施例的方法的流程图。更具体地,图12中所示的方法1200可以由硬件、软件、固件和/或其组合来执行,例如用于基于本文所描述的性能监测信息来判定是否在时元内超越一条或多条存储器存取指令的NL提示的控制逻辑。如所看到的,方法1200开始于在一个时元上接收性能监测信息(框1210)。尽管本发明的范围在这方面不受限制,但在实施例中,此性能监测信息可以包括诸如LLC未命中率之类的高速缓存未命中率信息和诸如每秒存储器存取次数之类的存储器带宽信息等。控制接下来转到菱形1220,以判定所述性能监测信息的这些性能监测值中的一个或多个是否超过相应阈值。在一些示例中,小于阈值的单个性能监测值可以足以使控制下一次转到框1240以便超越对非局部性提示的处理。在其他情况下,在发生此超越处理之前,可以确定多于一个并且可能所有的性能监测值小于它们的相应阈值。
基于在菱形1220处的确定结果,如果控制转到框1240,则可以在下一时元上超越所有存储器存取指令中的非局部性提示。这样,具有非局部性提示的这些存储器存取指令可以例如转换成正常加载操作并像正常加载操作一样进行处理,例如使得可以返回完全宽度数据,并且可以发生插入到高速缓存层次结构中。
仍然参考图12,相反,如果在菱形1220确定这些性能监测值中的一个或多个超过相应阈值,则控制转到框1230。在那里,可以在下一时元上启用非局部性处理。这样,可以相应地处理具有非局部性提示的存储器存取指令,即获得部分宽度的数据并将其直接返回给核,而无需插入到高速缓存层次结构中。应注意的是,在此实例中,对于正常加载处理,可以基于此类指令的SAB信息而仍然选择性地启用具有非局部性提示的单独存储器存取指令(在SAB在所述时元期间保持活动的情况下)。应理解的是,尽管在图12的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
现在参考图13,所示是根据本发明的另一实施例的方法的流程图。更具体地,方法1300描述了动态非局部性超越决定过程的进一步细节。在一个特定实施例中,方法1300可以由存储器控制器执行,并且更具体地,可以由这种存储器控制器的局部性控制器执行。如所看到的,方法1300开始于在给定时元(即刚刚完成的时元)内接收多个性能监测值(框1305),并且将这些值与相应阈值进行比较(菱形1310)。在实施例中,可以从LLC MPKI和存储器带宽计数器获得这些性能监测值,以判定处理器是否处于能够实现从NL加载特征中受益的操作模式。若否,则超越NL加载行为,并且发布逻辑将进入的NL加载作为规律加载发布。更具体地,在这种情况下(例如,在高速缓存未命中率和/或存储器带宽相对较低的情况下),控制从菱形1310转到框1320,在所述框中启用非局部加载行为超越。为此,局部性控制器可以向核(例如,向发布逻辑、解码逻辑等)发送控制信号,以使得在核本身中具有非局部性提示的进入存储器存取指令被转换成规律存储器存取指令,例如规律加载请求。
仍然参考图13,如果性能计数器中的至少一个超过给定阈值,则控制转到菱形1330,以判定超越决定当前是否有效。如果不存在先前启用的超越决定(并且不存在可从前一时元获得的SAB统计信息(如在菱形1340处确定的)),则启用NL加载处理并且启动SAB监控(框1350)。这样的NL加载被启用,直到在至少一个时元上SAB统计信息被收集。当收集到足够的SAB统计信息(例如,存在来自前一时元的足够统计信息)时,可以将SAB命中率与阈值进行比较(菱形1360)。尽管本发明的范围在这方面不受限制,但是在实施例中,此SAB命中率可以设置在相对较低的水平,例如,约20%或更低。在一个特定实施例中,可以使用约11%的SAB命中率作为阈值。
基于菱形1360处的确定结果,控制转到框1370或框1380。当确定来自前一时元的SAB命中率高于此给定阈值时,存在对高带宽的需求,但是NL加载呈现局部性。这可能是由于在高带宽应用中错误地使用NL加载指令导致的。如果SAB命中率被确定为高,则在框1370处超越NL加载。否则,如果确定来自前一时元的SAB命中率低于给定阈值,则控制从菱形1360转到框1380,在所述框中在下一时元上启用NL加载。
应注意的是,如果决定前进到框1370,使得在下一时元上禁用(即超越)所有NL加载,则不可能使用SAB监控来检查是否改变程序行为。因此,倘若性能监测值高,则在一个时元上可以周期性地但不频繁地启用NL加载以检测程序行为的改变。为此,在NL加载被超越的情况下,控制可以从菱形1330转到菱形1390,以判定在下一时元上是否周期性地重新启用NL加载处理。若是,则控制转到上面讨论的框1350。否则,控制转到框1395,在所述框中,NL加载超越可以保持在其启用状态。应注意的是,在下一时元上发生周期性重新启用的情况下,可以继续监控SAB命中率,以检测程序行为的改变。应理解的是,尽管在图13的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
应注意的是,图13假定了其中全局禁用NL加载的最简单选项。然而,基于存储器控制器处的加载的核/线程ID和指令指针(IP)的可用性,可以对单独核、线程或指令作出超越决定。在这种情况下,进一步用核ID、线程ID、和/或IP来标记被绕过的地址,并且可以跟踪每核、每线程或每IP的SAB命中/未命中率。超越决定流程遵循图13所示的相同路径。如果性能计数器指示NL加载可能不高效,则将全局超越NL行为。否则,如果在前一时元中收集了SAB统计信息,则检查每核/线程/IP的SAB命中率。然后将超越决定传递给具有核/线程/IP信息的核。超越核/线程/IP的NL行为不会阻止其他核/线程/IP的NL行为。因此,可以启用适当使用的NL加载,同时以核/线程/IP粒度超越错误使用的NL加载。
在一些情况下,始终进行细粒度存取和绕过高速缓存可能导致某些工作负载的显著局部性和性能损失。SE技术动态地选择具有局部性的存取,并且将其转换为规律存储器存取,以恢复丢失的局部性并提高性能。然而,对于NL加载几乎总是适得其反的情况,SE无法完全恢复丢失的位置。具有超越操作的实施例可以检测这种情况并且超越NL加载,使得性能回落到基线。然而,当NL加载确实有帮助时(当某些行具有局部性而其他行没有局部性时),OR技术无法充分利用选择性绕过。OR和SE技术的组合可以提供这两种途径的益处。更具体地说,结合这些技术可以最大限度地减少异常值,同时为受益的工作负载提供显著的性能提升。
现在参考表1,示出了各种工作负载及其操作的示例,使用了:(1)选择性地启用对具有无局部性提示的单独指令的基于局部性的处理(列3中NL启用等于“真”);以及(2)无局部性处理的全局超越(列3中NL启用等于“假”)。更具体地,表1在列1中展示了对于给定工作负载,第一性能监测值(即LLC MPKI)是否超过相应阈值,并且在列2中展示了稀疏存取缓冲器性能度量(即SAB命中率)是否低于相应阈值。如以上所讨论的,列3指示超越决定,其中NL启用(真)意味着全局超越特征被禁用。进而,列4标识基于局部性的提示的选择性启用对性能的影响(与所有NL提示所遵循的基线实现方式相比)。因此,当启用NL时,所产生的性能将是来自此列的相应值。另一方面,如果禁用NL(超越启动),则所产生的性能将是基线性能。
观察到,在表1中,超越已启用,并且因此对于7个工作负载“启动”(即,NL启用为假)。还观察到,对于所有这些情况,性能影响都低于1。因此,如果启用NL加载,则它们导致性能损失。这样,使用本文所描述的超越技术可以成功地预测这些情况并相应地禁用NL行为。此外,应注意的是,对于禁用超越操作(即NL启用为真)的工作负载,大多数性能改进高于1。然而,存在两个异常值,其中预测到NL处理预期是有用的并且因此关闭超越,但这导致性能损失。然而,如列5中所看到的,在使用性能监测信息来预测NL加载执行的正面结果和负面结果方面,提供如本文所描述的超越技术是最成功的。
表1
实施例可以通过控制寄存器和/或基本输入/输出系统(BIOS)设置全局启用/禁用NL处理的选择性启用和超越操作。如本文所描述的动态执行可以检测局部性可能性,并且将细粒度存取转换为规律完整高速缓存行存取。此外,如果预测没有益处,则所述动态执行可以在核处超越这样的存取。因此,细粒度特征的误用被动态地校正。这给编程器给予了使用这些高级特征的更多自由,而不必过多担心负面性能影响。
下面的示例涉及进一步的实施例。
在一个示例中,一种处理器包括:核,包括解码单元,所述解码单元用于对具有无局部性提示的存储器存取指令进行解码,所述无局部性提示用于指示与所述存储器存取指令相关联的数据具有非空间局部性和非时间局部性中的至少一项;以及存储器控制器,用于向存储器发布请求,所述存储器控制器包括局部性控制器,所述局部性控制器用于至少部分地基于一个或多个性能监测值来判定是否超越所述无局部性提示。
在示例中,所述一个或多个性能监测值包括高速缓存存储器未命中率和存储器带宽。
在示例中,所述局部性控制器用于响应于所述高速缓存存储器未命中率和所述存储器带宽中的至少一项与相应阈值的比较来超越所述无局部性提示。
在示例中,所述处理器进一步包括稀疏存取缓冲器,所述稀疏存取缓冲器具有多个条目,每个条目用于针对到特定地址的存储器存取指令来存储地址信息和计数信息。
在示例中,所述局部性控制器用于进一步当所述稀疏存取缓冲器的命中率超过第二阈值时超越所述无局部性提示。
在示例中,所述局部性控制器用于在第一时间周期上获得所述一个或多个性能监测值,并且在第二时间周期上超越所述无局部性提示,包括在所述第二时间周期期间超越多条存储器存取指令的多个无局部性提示。
在示例中,所述处理器进一步包括稀疏存取缓冲器,所述稀疏存取缓冲器具有多个条目,每个条目用于针对到特定地址的存储器存取指令来存储地址信息和计数信息,所述局部性控制器在所述第二时间周期期间禁用所述稀疏存取缓冲器。
在示例中,所述局部性控制器用于向所述核发布超越信号,以使所述核将具有所述无局部性提示的一条或多条存储器存取指令转换为不具有无局部性提示的一条或多条存储器存取指令。
在示例中,所述局部性控制器用于针对第一线程的第一存储器存取指令超越所述无局部性提示,并且用于针对第二线程的第二存储器存取指令不超越所述无局部性提示。
在示例中,所述无局部性提示用于使得将数据返回给所述核,所述返回绕过所述处理器的高速缓存存储器,并且响应于对所述无局部性提示的所述超越,所述存储器控制器用于使得从所述存储器获得完全宽度数据部分并将其提供给所述核。
在示例中,响应于所述无局部性提示,所述存储器控制器用于使得从所述存储器获得子高速缓存行数据部分并将其提供给所述核。
在另一示例中,一种方法包括:在处理器的控制器中在第一时间周期上接收性能监测信息;将所述性能监测信息的一个或多个性能监测值与相应阈值进行比较;以及响应于所述一个或多个性能监测值中的至少一个性能监测值不超过所述相应阈值,使所述处理器在第二时间周期期间超越一条或多条存储器存取指令的无局部性提示。
在示例中,使所述处理器在所述第二时间周期期间超越所述一条或多条存储器存取指令的所述无局部性提示包括向所述处理器的发布逻辑发送信号,以使所述发布逻辑在所述第二时间周期期间将具有所述无局部性提示的一条或多条存储器存取指令转换为不具有所述无局部性提示的一条或多条存储器存取指令。
在示例中,所述方法进一步包括:响应于所述一个或多个性能监测值超过所述相应阈值,在所述第二时间周期上启用无局部性存储器存取指令处理。
在示例中,针对具有所述无局部性提示的第一存储器存取指令进行的所述无局部性存储器存取指令处理包括以下各项中的一项或多项:将数据返回给所述核,所述返回绕过所述处理器的高速缓存存储器;以及将数据的子高速缓存行部分返回给所述核。
在示例中,所述方法进一步包括:在所述无局部性提示被超越的多个时间周期之后,在下一时间周期上启用无局部性存储器存取指令处理。
在示例中,所述方法进一步包括:在所述下一时间周期上获得用于稀疏存取缓冲器的至少一个性能度量;以及至少部分地基于用于所述稀疏存取缓冲器的所述至少一个性能度量,在所述下一时间周期之后的时间周期上启用所述无局部性存储器存取指令处理。
在另一示例中,一种包括指令的计算机可读介质用于执行以上示例中任一项所述的方法。
在另一示例中,一种包括数据的计算机可读介质用于由至少一台机器使用以制造用于执行以上示例中任一项所述的方法的至少一个集成电路。
在另一示例中,一种设备包括用于执行以上示例中任一项所述的方法的装置。
在又一实施例中,一种系统包括:处理器,具有用于处理具有无局部性提示的存储器存取指令的核,所述无局部性提示用于指示与所述存储器存取指令相关联的数据的非局部性,所述核具有一个或多个性能监测器;存储器控制器,用于向系统存储器发布请求,所述存储器控制器包括局部性控制器,所述局部性控制器用于接收具有所述无局部性提示的所述存储器存取指令,并且用于至少部分地基于在第一时间周期上从所述一个或多个性能监测器获得的至少一个性能度量来在第二时间周期上超越具有所述无局部性提示的所述存储器存取指令的所述无局部性提示;以及所述系统存储器,耦合到所述存储器控制器。
在示例中,在所述第二时间周期内并且响应于对所述存储器存取指令的所述无局部性提示的所述超越,所述存储器控制器用于经由高速缓存存储器层次结构将多个完全宽度高速缓存行返回给所述核,并且在无局部性提示将不被超越的第三时间周期内,所述存储器控制器用于针对具有无局部性提示的一条或多条存储器存取指令来绕过高速缓存存储并且将子高速缓存行宽度数据返回给所述核。
在示例中,响应于确定在所述第二时间周期上超越具有所述无局部性提示的所述存储器存取指令的所述无局部性提示,所述存储器控制器用于向所述核发布超越信号,以使所述核将具有所述无局部性提示的所述存储器存取指令转换为不具有无局部性提示的存储器存取指令。
在另一示例中,一种设备包括:用于在第一时间周期上接收处理器的性能监测信息的装置;用于将所述性能监测信息的一个或多个性能监测值与相应阈值进行比较的装置;以及用于使所述处理器至少部分地基于将所述性能监测信息的所述一个或多个性能监测值与所述相应阈值进行比较的第一结果来在第二时间周期期间超越一条或多条存储器存取指令的无局部性提示的装置。
在示例中,所述设备进一步包括用于向发布装置发送信号以使所述发布装置在所述第二时间周期期间将具有所述无局部性提示的一条或多条存储器存取指令转换为不具有所述无局部性提示的一条或多条存储器存取指令的装置。
在示例中,所述设备进一步包括用于至少部分地基于将所述性能监测信息的所述一个或多个性能监测值与所述相应阈值进行比较的第二结果来在所述第二时间周期上启用无局部性存储器存取指令处理的装置。
在示例中,所述设备进一步包括用于将数据返回给所述处理器的核装置的装置,所述返回绕过所述处理器的高速缓存存储器装置。
在示例中,所述设备进一步包括用于将数据的子高速缓存行部分返回给所述处理器的核装置的装置。
应理解的是,以上示例的各种组合是可能的。
应注意的是,术语“电路(circuit)”和“电路系统(circuitry)”在此可互换使用。如本文所使用的,这些术语和术语“逻辑(logic)”用于单独地或以任何组合指代模拟电路系统、数字电路系统、硬连线电路系统、可编程电路系统、处理器电路系统、微控制器电路系统、硬件逻辑电路系统、状态机电路系统和/或任何其他类型的物理硬件组件。实施例可以用于多种不同类型的系统中。例如,在一个实施例中,通信装置可以被安排成执行本文中所描述的各种方法和技术。当然,本发明的范围不限于通信装置,并且相反,其他实施例可以涉及用于处理指令的其他类型的设备,或者包括指令的一种或多种机器可读介质,所述指令响应于在计算装置上被执行而使所述装置执行本文中所描述的方法和技术中的一者或多者。
实施例可以以代码来实现并且可存储在非暂态存储介质上,所述非暂态存储介质具有存储在其上的指令,所述指令可用于对系统进行编程来执行所述指令。实施例还可以在数据中实现并且可存储在非暂态存储介质上,所述非暂态存储介质如果由至少一台机器执行则使所述至少一台机器制造用于执行一个或多个操作的至少一个集成电路。再进一步的实施例可以在计算机可读存储介质中实现,所述计算机可读存储介质包括当被制造成SoC或其他处理器时用于配置SoC或其他处理器以执行一个或多个操作的信息。存储介质可以包括但不限于包括以下各项的任何类型的磁盘:软盘、光盘、固态驱动器(SSD)、致密盘只读存储器(CD-ROM)、可复写致密盘(CD-RW)、和磁光盘;如只读存储器(ROM)等半导体器件、如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)等随机存取存储器(RAM);可擦可编程只读存储器(EPROM);闪存;电可擦可编程只读存储器(EEPROM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
虽然已经关于有限数量的实施例对本发明进行了描述,但是本领域的技术人员将理解来自其中的许多修改和变体。旨在使得所附权利要求书覆盖如落在本发明的真实精神和范围内的所有这种修改和变体。

Claims (25)

1.一种用于执行指令的处理器,所述处理器包括:
核,包括解码单元,所述解码单元用于对具有无局部性提示的存储器存取指令进行解码,所述无局部性提示用于指示与所述存储器存取指令相关联的数据具有非空间局部性和非时间局部性中的至少一项;以及
存储器控制器,用于向存储器发布请求,所述存储器控制器包括局部性控制器,所述局部性控制器用于至少部分地基于一个或多个性能监测值来判定是否超越所述无局部性提示。
2.如权利要求1所述的处理器,其特征在于,所述一个或多个性能监测值包括高速缓存存储器未命中率和存储器带宽。
3.如权利要求2所述的处理器,其特征在于,所述局部性控制器用于响应于所述高速缓存存储器未命中率和所述存储器带宽中的至少一项与相应阈值的比较来超越所述无局部性提示。
4.如权利要求1所述的处理器,其特征在于,进一步包括稀疏存取缓冲器,所述稀疏存取缓冲器具有多个条目,每个条目用于针对到特定地址的存储器存取指令来存储地址信息和计数信息。
5.如权利要求4所述的处理器,其特征在于,所述局部性控制器用于进一步当所述稀疏存取缓冲器的命中率超过第二阈值时超越所述无局部性提示。
6.如权利要求1所述的处理器,其特征在于,所述局部性控制器用于在第一时间周期上获得所述一个或多个性能监测值,并且在第二时间周期上超越所述无局部性提示,包括用于在所述第二时间周期期间超越多条存储器存取指令的多个无局部性提示。
7.如权利要求6所述的处理器,其特征在于,所述处理器进一步包括稀疏存取缓冲器,所述稀疏存取缓冲器具有多个条目,每个条目用于针对到特定地址的存储器存取指令来存储地址信息和计数信息,所述局部性控制器用于在所述第二时间周期期间禁用所述稀疏存取缓冲器。
8.如权利要求1所述的处理器,其特征在于,所述局部性控制器用于向所述核发布超越信号,以使所述核将具有所述无局部性提示的一条或多条存储器存取指令转换为不具有无局部性提示的一条或多条存储器存取指令。
9.如权利要求1所述的处理器,其特征在于,所述局部性控制器用于针对第一线程的第一存储器存取指令超越所述无局部性提示,并且用于针对第二线程的第二存储器存取指令不超越所述无局部性提示。
10.如权利要求1所述的处理器,其特征在于,所述无局部性提示用于使得将数据返回给所述核,所述返回绕过所述处理器的高速缓存存储器,并且响应于对所述无局部性提示的所述超越,所述存储器控制器用于使得从所述存储器获得完全宽度数据部分并将其提供给所述核。
11.如权利要求1所述的处理器,其特征在于,响应于所述无局部性提示,所述存储器控制器用于使得从所述存储器获得子高速缓存行数据部分并将其提供给所述核。
12.一种用于执行指令的方法,所述方法包括:
在处理器的控制器中在第一时间周期上接收性能监测信息;
将所述性能监测信息的一个或多个性能监测值与相应阈值进行比较;以及
响应于所述一个或多个性能监测值中的至少一个性能监测值不超过所述相应阈值,使所述处理器在第二时间周期期间超越一条或多条存储器存取指令的无局部性提示。
13.如权利要求12所述的方法,其特征在于,使所述处理器在所述第二时间周期期间超越所述一条或多条存储器存取指令的所述无局部性提示的步骤包括向所述处理器的发布逻辑发送信号,以使所述发布逻辑在所述第二时间周期期间将具有所述无局部性提示的一条或多条存储器存取指令转换为不具有所述无局部性提示的一条或多条存储器存取指令。
14.如权利要求12所述的方法,其特征在于,进一步包括响应于所述一个或多个性能监测值超过所述相应阈值,在所述第二时间周期上启用无局部性存储器存取指令处理。
15.如权利要求14所述的方法,其特征在于,针对具有所述无局部性提示的第一存储器存取指令进行的所述无局部性存储器存取指令处理包括以下各项中的一项或多项:
将数据返回给所述核,所述返回绕过所述处理器的高速缓存存储器;以及
将数据的子高速缓存行部分返回给所述核。
16.如权利要求12所述的方法,其特征在于,进一步包括:在所述无局部性提示被超越的多个时间周期之后,在下一时间周期上启用无局部性存储器存取指令处理。
17.如权利要求16所述的方法,其特征在于,进一步包括:
在所述下一时间周期上获得用于稀疏存取缓冲器的至少一个性能度量;以及
至少部分地基于用于所述稀疏存取缓冲器的所述至少一个性能度量,在所述下一时间周期之后的时间周期上启用所述无局部性存储器存取指令处理。
18.一种计算机可读存储介质,包括计算机可读指令,所述指令当被执行时用于实现如权利要求12至17中任一项所述的方法。
19.一种用于执行指令的系统,所述系统包括:
处理器,具有用于处理具有无局部性提示的存储器存取指令的核,所述无局部性提示用于指示与所述存储器存取指令相关联的数据的非局部性,所述核具有一个或多个性能监测器;
存储器控制器,用于向系统存储器发布请求,所述存储器控制器包括局部性控制器,所述局部性控制器用于接收具有所述无局部性提示的所述存储器存取指令,并且用于至少部分地基于在第一时间周期上从所述一个或多个性能监测器获得的至少一个性能度量来在第二时间周期上超越具有所述无局部性提示的所述存储器存取指令的所述无局部性提示;以及
所述系统存储器,耦合到所述存储器控制器。
20.如权利要求19所述的系统,其特征在于,在所述第二时间周期内并且响应于对所述存储器存取指令的所述无局部性提示的所述超越,所述存储器控制器用于经由高速缓存存储器层次结构将多个完全宽度高速缓存行返回给所述核,并且在无局部性提示将不被超越的第三时间周期内,所述存储器控制器用于针对具有无局部性提示的一条或多条存储器存取指令来绕过高速缓存存储并且将子高速缓存行宽度数据返回给所述核。
21.如权利要求19所述的系统,其特征在于,响应于确定在所述第二时间周期上超越具有所述无局部性提示的所述存储器存取指令的所述无局部性提示,所述存储器控制器用于向所述核发布超越信号,以使所述核将具有所述无局部性提示的所述存储器存取指令转换为不具有无局部性提示的存储器存取指令。
22.一种用于执行指令的设备,所述设备包括:
用于在第一时间周期上接收处理器的性能监测信息的装置;
用于将所述性能监测信息的一个或多个性能监测值与相应阈值进行比较的装置;以及
用于使所述处理器至少部分地基于将所述性能监测信息的所述一个或多个性能监测值与所述相应阈值进行比较的第一结果来在第二时间周期期间超越一条或多条存储器存取指令的无局部性提示的装置。
23.如权利要求22所述的设备,其特征在于,进一步包括:用于向发布装置发送信号以使所述发布装置在所述第二时间周期期间将具有所述无局部性提示的一条或多条存储器存取指令转换为不具有所述无局部性提示的一条或多条存储器存取指令的装置。
24.如权利要求22所述的设备,其特征在于,进一步包括:用于至少部分地基于将所述性能监测信息的所述一个或多个性能监测值与所述相应阈值进行比较的第二结果来在所述第二时间周期上启用无局部性存储器存取指令处理的装置。
25.如权利要求22所述的设备,其特征在于,进一步包括:用于将数据返回给所述处理器的核装置的装置,所述返回绕过所述处理器的高速缓存存储器装置。
CN201810169075.0A 2017-03-31 2018-02-28 用于超越基于非局部性的指令处理的系统、设备和方法 Active CN108694136B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/475,244 2017-03-31
US15/475,244 US10402336B2 (en) 2017-03-31 2017-03-31 System, apparatus and method for overriding of non-locality-based instruction handling

Publications (2)

Publication Number Publication Date
CN108694136A true CN108694136A (zh) 2018-10-23
CN108694136B CN108694136B (zh) 2024-10-25

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111340678A (zh) * 2018-12-19 2020-06-26 华为技术有限公司 一种数据缓存系统、图形处理器及数据缓存方法

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1838090A (zh) * 2004-09-10 2006-09-27 微软公司 改善最近被访问资源的数据局部性
CN101414252A (zh) * 2007-10-19 2009-04-22 株式会社瑞萨科技 数据处理装置
CN101589374A (zh) * 2007-01-24 2009-11-25 高通股份有限公司 用于在处理器中设置高速缓存策略的方法和设备
CN103226487A (zh) * 2013-04-25 2013-07-31 中国人民解放军信息工程大学 面向异构众核多级存储结构的数据分布与局部性优化方法
CN104679481A (zh) * 2013-11-27 2015-06-03 上海芯豪微电子有限公司 一种指令集转换系统和方法
CN104850508A (zh) * 2015-04-09 2015-08-19 深圳大学 基于数据局部性的访存方法
US20160019184A1 (en) * 2014-07-18 2016-01-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
CN107111554A (zh) * 2014-12-11 2017-08-29 英特尔公司 用于在加载数据元素以供执行时考虑空间局部性的装置和方法
US20170374151A1 (en) * 2016-06-28 2017-12-28 Solano Labs, Inc. Systems and methods for efficient distribution of stored data objects
CN113704141A (zh) * 2015-01-20 2021-11-26 乌尔特拉塔有限责任公司 对象存储器数据流指令执行

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1838090A (zh) * 2004-09-10 2006-09-27 微软公司 改善最近被访问资源的数据局部性
CN101589374A (zh) * 2007-01-24 2009-11-25 高通股份有限公司 用于在处理器中设置高速缓存策略的方法和设备
CN101414252A (zh) * 2007-10-19 2009-04-22 株式会社瑞萨科技 数据处理装置
CN103226487A (zh) * 2013-04-25 2013-07-31 中国人民解放军信息工程大学 面向异构众核多级存储结构的数据分布与局部性优化方法
CN104679481A (zh) * 2013-11-27 2015-06-03 上海芯豪微电子有限公司 一种指令集转换系统和方法
US20160019184A1 (en) * 2014-07-18 2016-01-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
CN105278917A (zh) * 2014-07-18 2016-01-27 英特尔公司 无局部性提示的向量存储器访问处理器、方法、系统和指令
CN107111554A (zh) * 2014-12-11 2017-08-29 英特尔公司 用于在加载数据元素以供执行时考虑空间局部性的装置和方法
CN113704141A (zh) * 2015-01-20 2021-11-26 乌尔特拉塔有限责任公司 对象存储器数据流指令执行
CN104850508A (zh) * 2015-04-09 2015-08-19 深圳大学 基于数据局部性的访存方法
US20170374151A1 (en) * 2016-06-28 2017-12-28 Solano Labs, Inc. Systems and methods for efficient distribution of stored data objects

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111340678A (zh) * 2018-12-19 2020-06-26 华为技术有限公司 一种数据缓存系统、图形处理器及数据缓存方法

Also Published As

Publication number Publication date
DE102018002480A1 (de) 2018-10-04
US20180285279A1 (en) 2018-10-04
US10402336B2 (en) 2019-09-03

Similar Documents

Publication Publication Date Title
Tian et al. Adaptive GPU cache bypassing
Li et al. Locality-driven dynamic GPU cache bypassing
US9940132B2 (en) Load-monitor mwait
Kongetira et al. Niagara: A 32-way multithreaded sparc processor
US11030108B2 (en) System, apparatus and method for selective enabling of locality-based instruction handling
CN108701040A (zh) 用户级别线程暂停的方法、设备、和指令
US20110055838A1 (en) Optimized thread scheduling via hardware performance monitoring
US20140189302A1 (en) Optimal logical processor count and type selection for a given workload based on platform thermals and power budgeting constraints
Tarjan et al. Increasing memory miss tolerance for SIMD cores
US11188341B2 (en) System, apparatus and method for symbolic store address generation for data-parallel processor
CN108334458A (zh) 存储器高效的末级高速缓存架构
US10896141B2 (en) Gather-scatter cache architecture having plurality of tag and data banks and arbiter for single program multiple data (SPMD) processor
Chen et al. Adaptive cache bypass and insertion for many-core accelerators
CN108205447A (zh) 使用早期和后期地址以及循环计数寄存器来跟踪架构状态的流引擎
Jamshidi et al. D2MA: Accelerating coarse-grained data transfer for GPUs
Lal et al. A quantitative study of locality in GPU caches for memory-divergent workloads
Jeon et al. Hi-End: Hierarchical, endurance-aware STT-MRAM-based register file for energy-efficient GPUs
Do et al. A new cache replacement algorithm for last-level caches by exploiting tag-distance correlation of cache lines
Park et al. A way-filtering-based dynamic logical–associative cache architecture for low-energy consumption
Srinivasan Improving cache utilisation
CN116302868A (zh) 使用固定计数器的高级别微体系结构事件性能监测的系统、方法和装置
CN108694136A (zh) 用于超越基于非局部性的指令处理的系统、设备和方法
Do et al. Early miss prediction based periodic cache bypassing for high performance GPUs
Wang et al. Incorporating selective victim cache into GPGPU for high‐performance computing
Yu et al. Buffer on last level cache for cpu and gpgpu data sharing

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