CN1690952A - 根据多组高速缓存组预测来选择执行的指令的装置和方法 - Google Patents
根据多组高速缓存组预测来选择执行的指令的装置和方法 Download PDFInfo
- Publication number
- CN1690952A CN1690952A CNA2005100669257A CN200510066925A CN1690952A CN 1690952 A CN1690952 A CN 1690952A CN A2005100669257 A CNA2005100669257 A CN A2005100669257A CN 200510066925 A CN200510066925 A CN 200510066925A CN 1690952 A CN1690952 A CN 1690952A
- Authority
- CN
- China
- Prior art keywords
- group
- cache memory
- instruction
- prediction
- predicted value
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
包括多个装载操作的、能够分派多个并行操作的处理器访问被划分为组的高速缓冲存储器。每个组支持有限数量的同时读取和写入访问操作。组预测字段与每个存储器访问操作相关联。存储器访问操作被选择以分派,以便它们被预测为非冲突的。优选的是,处理器自动保存基于先前组访问的组预测值和指示在组预测中的置信度的确认值。所述确认值优选地是上或下计数器,它对于每个正确预测递增,并且对于每个错误预测递减。
Description
技术领域
本发明涉及数字数据处理硬件,具体涉及高速缓冲存储器的设计和操作与数字数据处理器件的处理单元的支持硬件。
背景技术
在二十世纪的后半叶,开始了一种被称为信息革命的现象。信息革命是在范围上比任何一个事件或机器更宽的历史性发展,至今没有单个器件比数字电子计算机更能代表信息革命。计算机***的发展已经肯定是一场革命。每年,计算机***发展得更快,存储更多的数据,并且向它们的用户提供更多的应用。
现代计算机***通常包括中央处理单元(CPU)和存储、检索和传送信息所需要的支持硬件,诸如通信总线和存储器。它也包括诸如输入/输出控制器或存储控制器的与外部世界通信所需要的硬件以及与其附接的器件,诸如键盘、监视器、磁带驱动器、盘驱动器、与网络耦接的通信线等。CPU是***的心脏。它执行指令,所述指令包括计算机程序,并且指导其他***部件的操作。
从计算机硬件的角度来看,多数***以基本相同的方式操作。处理器能够执行有限的一套很简单的操作,诸如算术、逻辑比较和数据从一个位置向另一个的移动。但是,每个操作被执行得很快。引导计算机执行海量的这些简单操作的程序给出了一种错觉:计算机正在执行一些复杂的事情。通过执行实质上相同的一套很简单的操作、但是将其进行得更快,可以使用户感知的内容作为计算机***的新的或改进的能力成为可能。因此,对于计算机***的继续改进需要使得这些***更快。
计算机***的整体速度(也称为“吞吐量”)可以粗略地被测量为每单位时间执行的操作的数量。在概念上,对于***速度的所有可能改进中的最简单者是提高各种部件的时钟速度,特别上是提高处理器的时钟速度。例如,如果所有部件都运行得两倍快但是以完全相同的方式工作,则***将以一半的时间来执行给定的任务。早期的计算机处理器以许多分立的部件构造,它们对通过收缩和组合部件,最终将整个处理器封装为在单片上的集成电路来进行有效的时钟速度改进是敏感的。所减小的尺寸使得有可能提高处理器的时钟速度,从而提高***速度。
除了提高时钟速度之外,有可能通过使用特定部件的多个拷贝,特别是通过使用多个CPU来改进***的吞吐量。无须深入研究通过使用多个CPU而引入的结构问题,仍然可以说:无论***是否使用多个CPU,提高单个CPU的吞吐量也是有益的。对于给定的时钟速度,有可能通过提高每个时钟周期执行的操作的平均数量来提高单个的CPU的吞吐量。
在并行性上的各种进展已经使得计算机***设计人员能够提高在单个的CPU内每个时钟周期执行的操作的平均数量。例如,特定的宽指令计算机(有时被称为“宽问题超标量体系结构”或“甚长指令字”计算机)使得每个指令能够指定要并行执行的多个操作,并由此包括用于执行这样的宽指令所需要的并行硬件。但是,产生充分利用这个能力的程序代码有些困难。并行性的另一种方法有时可以与其他技术组合,它支持在单个计算机处理器内执行的多个线程(即,编码指令的多个流)。多线程的处理器一般具有多个并行的寄存器组(bank),它们使得处理器可以一次保存多个执行线程的状态。
近来,并行性的另一种方法已经赢得了支持,其中,CPU可以在给定的时钟周期分派用于执行的多个指令。使用这种方法,硬件分析指令流以确定是否存在依存性(即是否一个指令必须等待先前指令先被执行),并且在可能的情况下选择用于并行执行的非冲突指令。可以以多线程的处理器或单线程的处理器使用这种方法。
在处理器内的任何形式的并行性一般需要附加的硬件,在一些情况下需要复制整套的逻辑电路、寄存器或其他部件。但是同样正确的是,应当有一些共同性,否则仅仅通过复制处理器本身和所有相关联的支持电路不能得到任何效果。
多数计算机***在分层(hierarchy)的存储器或存储器件中存储数据,每个后续的层具有更快的访问,但是存储更少的数据。在最低层是一个或多个海量存储单元,它(们)在相对较慢的器件上存储所有的数据。其上一层是主存储器,它一般是半导体存储器。主存储器比存储单元具有更小的数据容量,但是具有更快的访问。再向上是高速缓冲存储器,它们可以在分层的单层或多层(层1是最高的)。高速缓冲存储器也是半导体存储器,但是比主存储器更快,并且具有更小的数据容量。
当处理器需要数据时,它首先在高速缓冲存储器中查找它,如果该高速缓冲存储器是多层高速缓冲存储器,则将首先在最高层高速缓冲存储器中寻找。从较低层高速缓冲存储器、主存储器或盘存储器检索数据渐进地需要更多的时间,可能处理器花费的时间的大部分仅仅为等待被检索的数据。可以提高每个时钟周期的操作的平均数量的一种方式是提高所需要的数据在高速缓冲存储器中的次数的比例(高速缓冲存储器命中(hit)),所述数据最好在最高层而不是在存储器分层上较低的一些实体。存在用于选择要保存在高速缓冲存储器中的数据的各种技术,但是所有其他的事项是相同的,可以通过提高高速缓冲存储器的大小来提高高速缓冲存储器命中的概率。
当计算机处理器使用各种并行性技术的任何一种时,诸如多个读取的对于同一高速缓冲存储器的多个访问有可能将同时发生。简单的半导体存储器设计为仅仅支持同时对于存储器器件组的单个读取访问。高速缓冲存储器可能因此变为在使用并行性的处理器中的性能的瓶颈。
有可能通过简单地提供用于每个访问路径的独立高速缓冲存储器来允许多个同时的高速缓冲存储器访问。例如,这种方法用于某些多线程的处理器设计中,其中,每个线程具有其本身的高速缓冲存储器,它可以独立于其它高速缓冲存储器而被访问。但是独立高速缓冲存储器的结果是每个独立高速缓冲存储器必然仅仅是整体的一部分,这降低了高速缓冲存储器命中的概率。
还有可能设计多端口高速缓冲存储器,其中独立的存储单元和支持硬件使得可以同时读取或写入多个单元。但是,这些设计引入了很大的附加电路复杂性,并且作为所需要的附加逻辑电路的结果,提高了访问高速缓冲存储器所需要的时间。
随着对于更快的处理器的需求的不断增加,有可能将提高处理器并行性。在传统的多端口高速缓冲存储器设计中的端口数量的进一步增加将仅仅加重电路复杂性和访问时间的现有问题。因此期望找到用于向被高速缓冲存储的数据提供多并行访问的替代技术,它们减少或消除了与传统技术相关联的缺陷。
发明内容
具有分派多个并行操作,特别是多个存储器访问操作(例如装载操作)的能力的处理器访问被划分为多个组的高速缓冲存储器。每个组支持有限数量的同时读取和写入访问操作。组预测字段与每个存储器访问操作相关联。存储器访问操作被选择来用于分派,以便它们被预测为非冲突的。
在优选实施例中,处理器在每个处理器周期中选择在一个或多个线程中的多个指令以分派。处理器对于每个存储器访问指令保持组预测字段。所述组预测字段包括当最后执行指令时数据所位于的高速缓冲存储器组的标识符。这个值被当作当下一次执行指令时将可能发现数据的组。当处理器在特定的周期中选择指令以分派时,它考虑装载或存储指令的组预测值以避免由于超过高速缓冲存储器组的端口容量而将引起冲突的指令。
在优选实施例中,L1数据高速缓冲存储器被划分为多个组。每个组包括单个写入端口和双读取端口,即,物理上有可能在任何给定的周期中对于每个组执行单个写入或两个读取。这使得在每个组内的独立存储单元可以利用有效的传统设计而没有大量的端口。所述组最好在每个高速缓冲存储器线内交织(interleave)。即,在每个高速缓冲存储器线中的数据在不同的组之间交织。在此处所述的说明性优选实施例中,一个高速缓冲存储器线包括128字节,并且高速缓冲存储器被划分为两个组,每个组包括每个高速缓冲存储器线的64个字节,可以明白可以使用不同大小的高速缓冲存储器线或不同数量的高速缓冲存储器组。
在优选实施例的一个方面,对于每个装载指令保存一个确认字段,所述确认字段反映了正确的组预测的近期历史。当在确认字段中的值足够小时(表示对应的指令的不良预测精度),组预测字段被当作不可靠的,并且所述指令被看作可以访问任何组的一个。
在优选实施例的一个方面,以上或下计数器的形式对于每页指令数据保持组预测历史数据。如果组预测正确所述计数器则递增,如果不正确则递减。累加的计数表示数据参考是否遵循可预测(对齐(aligned))的模式。这样的数据可以由优化的编译器使用来调整示出不良组预测的程序段的数据对齐。
已经观察到:多数装载指令遵循组访问的高度可预测的模式,并且将反复地访问同一组。通过保存最后的组访问,有可能以高概率预测下一个组。结果,处理器可以选择要执行的指令以避免组冲突,因此使用更简单和更快的物理高速缓冲存储器设计。虽然组预测偶然是不正确的(引起冲突和由此导致的装载流水线(pipeline)的重新启动),但是这些偶然的冲突对性能的影响可能在重要性上次于更快的高速缓冲存储器电路和由降低的高速缓冲存储器复杂性导致的其他节省。
附图说明
参照附图可以最佳地明白关于其结构和操作的本发明的细节,在附图中,类似的附图标号表示类似的部件,其中:
图1是按照本发明的优选实施例的、使用成组的高速缓冲存储器和组预测的计算机***的主要硬件部件的高层方框图。
图2是在所述优选实施例的计算机***中的CPU的主要部件的高层图。
图3是按照优选实施例的、装载指令的解码和分派的概念表示。
图4A和4B(在此统称为图4)是按照优选实施例的、L1数据高速缓冲存储器的结构的表示。
图5在高层上图解了按照优选实施例的、在保持组预测和确认值以及它们的交互中涉及的主要硬件结构。
图6在高层上图解了按照优选实施例的、在提供关于在装载操作中的数据对齐的一致性的性能反馈数据中涉及的主要硬件结构。
图7是按照优选实施例的、具有不同数量的组的两种交替高速缓冲存储器配置的示例,用于图解组的数量对于所需要的预测精度的影响。
具体实施方式
参见附图,其中,在通篇的几个视图中,类似的标号表示类似的部件,图1是按照本发明的优选实施例的、使用成组的高速缓冲存储器和组预测的计算机***100的主要硬件部件的高层表示。计算机***100的主要部件包括一个或多个中央处理单元(CPU)101A-101D、主存储器102、高速缓冲存储器106、终端接口111、存储接口112、输入/输出(I/O)器件接口113和通信/网络接口114,所有这些经由总线103、104和总线接口105耦接以用于部件之间的通信。
***100包括一个或多个通用的可编程中央处理单元(CPU)101A-101D,在此统称为部件101。在优选实施例中,***100包括较大***通常具有的多个处理器;但是,***100也可以是单个CPU***。每个处理器101执行在存储器102中存储的指令。从主存储器102向高速缓冲存储器106中装载指令和数据以处理。主存储器102是随机访问半导体存储器,用于存储数据和程序。虽然主存储器102和高速缓冲存储器106在图1中被概念地表示为单个实体,但是可以明白,事实上这些更复杂,并且特别是,在多个不同的层上存在高速缓冲存储器,在此更详细地说明。
存储器总线103提供了数据通信路径,用于在CPU 101和高速缓冲存储器106、主存储器102和输入/输出总线接口单元105之间传送数据。输入/输出总线接口105还耦接到***输入/输出总线104,用于向和从各种输入/输出单元传送数据。输入/输出总线接口105通过***输入/输出总线104与多个输入/输出接口单元111-114通信,输入/输出接口单元111-114也被称为输入/输出处理器(IOP)或输入/输出适配器(IOA)。***输入/输出总线可以是例如工业标准PCI总线或任何其他适当的总线技术。输入/输出接口单元支持与多种存储和输入/输出器件的通信。例如,终端接口单元111支持附接一个或多个用户终端121-124。存储接口单元112支持附接一个或多个直接访问存储器件(DASD)125-127(它们通常是旋转磁盘驱动存储器件,虽然它们可以或者是其他器件,包括被配置为对于主机呈现为单个大存储器件的盘驱动器阵列)。输入/输出和其他器件接口113提供了对于各种其他输入/输出器件或其他类型的器件的任何一个的接口。在图1的例证实施例中示出了两种这样的器件,打印机128和传真机129,可以明白许多其他这样的器件可以存在,它们可以是不同类型的。网络接口114提供了从***100到其他数字器件和计算机***的一个或多个通信路径;这样的路径可以包括例如诸如因特网、局域网或其他网络的一个或多个网络130,或者可以包括远程器件通信线、无线连接等。
应当明白,图1意欲在高层描述***100的代表性的主要部件,独立部件可能具有比图1所示的更大的复杂性,可以提供除了图1所示的那些之外另外或补充的部件,并且这样的部件的数量、类型和配置可能不同。在此公开了这样的附加复杂性或附加变化的几个特定示例,可以明白这些仅仅是举例,不必然仅仅是这样的变化。
虽然在图1中将主存储器102示出为单个单一实体,但是存储器还可以被分布在和关联于不同的CPU或CPU集合,这在各种所谓的非均匀存储器访问(NUMA)计算机架构的任何一个中已知。虽然在图1中将存储器总线103示出为提供在高速缓冲存储器106、主存储器102和输入/输出总线接口105之间的直接通信路径的较简单的、单个总线结构,但是事实上存储器总线103可以包括多个不同的总线或通信路径,它们可以以各种形式的任何一种被布置,诸如在分层中的点到点链接、星型或万维网配置、多分层总线、并行和冗余路径等。而且,虽然输入/输出总线接口105和输入/输出总线104被示出为单个相应单元,但是***100可以事实上包含多个输入/输出总线接口单元105和/或多个输入/输出总线104。虽然多个输入/输出接口单元被示出,并且它们将***输入/输出总线104与通往各种输入/输出器件的各种通信路径相分离,但是或者可以将输入/输出器件的一些或全部直接连接到一个或多个***输入/输出总线。
在图1中所述的计算机***100具有多个附接的终端121-124,诸如典型地可以是多用户“大型(mainframe)”计算机***。通常,在这样的情况下,所附接的器件的实际数量大于图1所示的那些,虽然本发明不限于任何特定大小的***。计算机***100可以或者是单用户***,通常仅仅包括单个用户显示器和键盘输入,或者可以是具有很少或没有直接用户界面但是从其他计算机***(客户机)接收请求的服务器或类似的器件。
虽然已经在高层描述和示出了各种***部件,但是应当明白,典型的计算机***包括许多未示出的其他部件,它们对于理解本发明不是必要的。
图2是根据所述优选实施例的、包括特定的相关联高速缓冲存储器结构的CPU 101的主要部件的高层图,比图1所示更详细地示出了CPU 101。在这个实施例中,两个CPU 101以及特定高速缓冲存储器结构被封装在单个半导体芯片中,为此,CPU 101有时被称为“处理器核心”或“CPU核心”,以将其与包括一对CPU的芯片相区别。CPU 101包括指令单元部分201、执行单元部分211、层1指令高速缓冲存储器(L1 I-Cache)221、层1数据高速缓冲存储器(L1 D-Cache)222、有效至实际(Effective-to-Real)地址表(ERAT)224和依存性查看单元206。图2所示的层2高速缓冲存储器(L2 Cache)223实际被单个芯片内的两个CPU核心共享,因此不被当作CPU 101的一部分。一般,指令单元201从L1 I-高速缓冲存储器221获得指令,解码指令以确定要执行的操作,并且解析分支条件以控制程序流。执行单元211对于寄存器中的数据执行算术和逻辑运算,并且从L1 D-高速缓冲存储器222装载或存储数据。L2高速缓冲存储器223是层2高速缓冲存储器,一般大于L1 I-高速缓冲存储器221或L1 D-高速缓冲存储器222,用于向L1 I-高速缓冲存储器221和L1 D-高速缓冲存储器222提供数据。L2高速缓冲存储器223通过外部接口从低层高速缓冲存储器(例如L3高速缓冲存储器)或主存储器获得数据。
指令单元201包括分支单元202、指令解码/分派单元203(包括存储操作队列205)和指令寄存器和缓冲器204。来自L1 I-高速缓冲存储器221的指令在执行前被装载到缓冲器204中。根据CPU设计,可以有多个缓冲器(例如,用于不同线程的多个缓冲器或在一个线程内的多个缓冲器,一个用于指令的顺序序列,其他的用于有分支通到的位置),其中每个可以包括多个指令。解码/分派单元203在当前的机器周期中从一个或多个缓冲器204选择被分派来执行的一个或多个指令,并且解码所述指令以确定要执行的操作或分支条件。分支单元202通过评估分支条件而控制程序流,并且从L1 I-高速缓冲存储器221重新填充缓冲器204。
执行单元211包括:一套通用的寄存器212,用于存储数据;整数算术逻辑单元(ALU)213,用于响应于由指令单元201解码的指令来对于在GP寄存器212中的数据执行算术和逻辑运算。执行单元还包括复数运算子单元214,用于执行数学密集(inensive)运算,诸如浮点运算。子单元214可以包括其本身的特殊寄存器(未示出)。整数ALU 213和复数运算子单元214通常被实现为多级流水线。执行单元还包括装载/存储流水线控制硬件215,它控制从和向L1 D-高速缓冲存储器222装载和存储数据的次序。除了图2所示的部件之外,执行单元还可以包括附加的专用寄存器和计数器、控制硬件等。具体上,除整数ALU 213外,执行单元211还可以包括流水线(未示出)、复数运算子单元214和装载/存储管道(pipe)215。可以在处理器101内存在附加流水线,诸如指令获取(fetch)和解码流水线。
L1 I-高速缓冲存储器221和L1 D-高速缓冲存储器222是独立的指令和数据高速缓冲存储器,用于向指令和执行单元提供数据。层2高速缓冲存储器223是非区分的高速缓冲存储器,包括指令和非指令数据。通常,通过指令或执行单元从L1高速缓冲存储器获取数据或向其存储数据,并且如果所述数据在L1高速缓冲存储器中不可获得,则将其从L2高速缓冲存储器223装载到L1高速缓冲存储器,然后从L1高速缓冲存储器向对应的单元传送,其中,L2高速缓冲存储器223依次从外部位置获得所述数据。根据处理器设计,有可能绕过L1高速缓冲存储器,并且从L2高速缓冲存储器223向执行或指令寄存器装载数据。
ERAT 224将由指令单元201或执行单元211产生的有效地址转换为存储器中相应的实际地址。在优选实施例中,处理器在对应于每个相应执行处理的有效地址空间中产生“有效地址”。有效地址在较大的通用虚拟地址空间中被转换为“虚拟地址”,存在由所有处理共享的一个虚拟地址空间。虚拟地址还被转换为与数据所位于的实际存储器位置相对应的“实际地址”。但是,可以明白,各种计算机架构使用不同的寻址结构,本发明不限于任何特定形式的寻址。
最好使用有效地址来寻址L1 I-高速缓冲存储器221和L1 D-高速缓冲存储器222,因此不需要地址转换来访问层1高速缓冲存储器。但是,使用实际地址来寻址L2高速缓冲存储器223和其下的所有存储器。因此,如果必须访问低层高速缓冲存储器或主存储器,则首先将由处理器产生的有效地址转换为实际地址。ERAT 224实质上是用于转换地址的地址转换高速缓冲存储器。从转换后备(look-aside)缓冲器或从主存储器获得不在ERAT 224中的地址转换条目(entry)。在优选实施例中,ERAT被构造为两个独立可访问的地址转换结构,其中之一用于转换要装载到L1 I-高速缓冲存储器221的指令的地址,另一个用于转换要装载到L1 D-高速缓冲存储器222的数据的地址;但是,ERAT可以是单个组合的结构。
在优选实施例中,CPU 101是多线程的处理器,支持在同一机器周期中同时执行多个线程和同时分派来自不同线程的指令。在优选实施例中,支持同时执行两个独立的线程,可以明白这个数量可以改变。在CPU 101中执行的每个指令执行单个的基本操作,诸如装载、存储、使用来自GP寄存器的操作数的整数算术或逻辑运算、使用复数运算单元214的复数运算(诸如浮点相乘或相加)、或分支。解码/分派单元203可以在单个机器周期中同时分派多个这样的指令,虽然应当明白,执行单元被流水线化,指令的实际执行可以重叠在不同周期中分派的那些。具体上,解码/分派单元203可以在单个周期中分派多个装载指令,使得数据从L1 D-高速缓冲存储器222装载到在执行单元211内的寄存器。在优选实施例中,可以在单个周期中分派上至四个装载指令,不过这个数量可以改变。
在每个执行线程内的指令被分组为非依存的顺序指令的组。当从L2高速缓冲存储器向L1 I-高速缓冲存储器221装载指令时,依存性查看单元206自动分析指令流以确定可以同时或无顺序地执行哪些指令。依存性查看单元通过将停止位置于每个组的最后一个指令来将指令流划分到顺序指令的组。在任何组内,指令没有依存性,并且可以安全地被无顺序执行。具体上,对于每个指令,依存性查看单元确定是否在同一组中的先前指令完成时存在一些依存性。依存性依赖于指令和操作数的类型。当两个不同的指令参考同一操作数时,这经常但不总是产生依存性。例如,如果两个指令都使用同一操作数来作为所读取或被输入到一些流水线的数据的来源,则有可能不存在依存性。但是如果第一指令向一个操作数位置写入并且随后的指令从同一位置读取,则所述随后的指令清楚地依赖于所述第一指令,并且不能在所述第一指令之前或与其同时被执行。如果在同一组内发现依存性,则依存性查看单元将一个停止位置于紧前的指令中,以便正在被分析的指令是独立组的一部分。
指令缓冲器204保存来自两个独立线程的指令。一个线程被指定为主要(具有执行的较高优先权),另一个为次要。在每个机器周期中,解码/分派单元203可以选择上至四个指令以分派到执行所述指令的对应单元(一般是流水线)。最好在整数ALU单元313中存在两个并行的整数ALU流水线,使得可以分派上至两个整数ALU指令;存在单个浮点流水线,使得可以分派单个浮点指令;等等。解码/分派单元203从主要线程中的指令的当前组选择指令,使得在与可以获得的流水线资源相匹配的组中存在未执行的指令。如果在主要线程中的少于四个的指令可以与可以获得的流水线相匹配,则解码/分派单元从在次要线程中的当前组选择未执行的指令。当在任何一个线程中的组中的所有指令已经被分派以执行时,使在那个线程中下一组指令可在下一个机器周期被选择。
为了支持多线程的同时执行,对于每个线程存在独立的一套GP寄存器212。另外,可以复制某些其他状态或专用的寄存器(未示出)来支持多个有效线程。
虽然已经在高层说明和示出了各种CPU部件,但是应当明白,优选实施例的CPU包含许多未示出的其他部件,它们对于理解本发明不是必要的。例如,在典型的设计中需要各种附加的专用寄存器。而且,可以明白,图2的CPU仅仅是CPU架构的一个示例,在CPU 101内的部件的数量、类型和布置上可以有许多变化,除了已经描述的那些之外还可以存在未示出的部件,并且不是所有被描述的部件在一个CPU设计中出现。例如,缓冲器和高速缓冲存储器的数量和配置可以不同;执行单元流水线的数量和功能可以不同;可以以不同的阵列和集合来配置寄存器;可以提供或不提供专用的浮点硬件;等等。而且,CPU 101可以具有简单或复杂的指令集。
在图2中将L1高速缓冲存储器221和222示出为CPU 101的一部分,因为每个CPU具有其本身相应的L1高速缓冲存储器。在架构上,高速缓冲存储器可以被当作存储器102的一部分,或者可以被当作CPU的一部分,或者可以被整体地当作独立的实体。图2的图示意欲是典型的,而不意欲将本发明限定到任何具体的物理高速缓冲存储器实现。一个或多个处理器芯片可以包括比图2所示更多的高速缓冲存储器或更少的高速缓冲存储器。
按照优选实施例,组预测值和确认值与每个装载指令相关联,而装载指令在特定的高速缓冲存储器或存储器中。“相关联”意味着这些值以这种方式被存储在计算机***中,使硬件可以对于任何装载指令识别组预测值和确认值,并且没有不适当的延迟。可以在构成指令的高速缓冲存储器或存储器的实际位中或在一些相关联的位中保存组预测值和确认值。但是,在优选实施例中,在存储器中不保存组预测值和确认值。
一般,用于组预测和确认所需要的位的数量不大。在所述说明性的优选实施例中,仅仅存在两组L1 D-高速缓冲存储器,对于组预测值需要单个位。高速缓冲存储器设计可以使用例如四组或八组的多个组,但是组预测所需要的位的数量不可能大。在优选实施例中,确认值是三个位,虽然这也可以改变,在一些实施例中,可以根本没有确认值。
存在可以保存组预测值和确认值的几种方式。在许多指令集中,存在指令的未分配的位或至少存在装载指令中的未分配的位,并且如果指令集包括这样的未分配的位,则这些位可以用于存储组预测和/或确认值。当存在不足数量的未分配的位时,在许多指令集中,仍然有可能在硬件中重新格式化装载指令的一些部分以从利用不足的区域建立位空位。作为替代方式,许多计算机***包含用于高速缓冲存储器或存储器数据的每个字节的附加的奇偶校验或纠错代码(ECC)位。因为指令不改变,因此不必保存可以校正任何被损坏的数据的ECC位;仅仅需要检测被损坏的数据,并且从被损坏的来源重新装载指令。因此,一些奇偶校验或ECC位可以用于存储组预测值和确认值。最后,当不存在其他的替代方式时,有可能提供用于存储和访问每个装载指令的额外位的特殊硬件,虽然这种替代方式与使用指令或ECC的未分配的位相比一般是不太期望的。
图3是装载指令的解码和向装载/存储流水线215的分派的高层概念图示。参见图3,在缓冲器204中的装载指令301包含操作代码302和谓词(predicate)303,所述谓词303通常是多个字段,诸如来源操作数位置、目的地位置、标志位等。与指令相关联的是组预测值304和确认值305。如上所述,这些值最好被保存在指令本身中在未分配的位位置,但是在图3中被示出为虚线方框,用于指示它们可以以一些其他方式与指令相关联。
在解码分派器203中的操作代码解码器逻辑311接收寄存器204中的指令的选择位来作为输入,并且解码所述操作代码以输出多个解码的控制线,每条线对应于可以被指定的一个或多个操作或操作的参数。在装载操作的情况下,来自操作代码解码器的一个控制线指示装载。可以理解,许多指令集支持多种形式的装载操作,根据所指定的装载的类型可能需要附加的控制线来正确地解码谓词303或执行其他的功能。在此为了说明的目的,假定单个控制线指定装载操作。
装载/存储流水线215包含被标注为A、B、C和D的四个并列区间。每个“区间”本身是完整的流水线,能够管理从独立指定的来源地址到独立指定的目的地的装载操作。但是,如在此更详细地所述,L1 D-高速缓冲存储器被划分为两个组,流水线区间A和B仅仅访问组0,流水线区间C和D仅仅访问组1。第一级装载/存储寄存器(LS)321-324接收由解码分派器203分派的指令数据,并且一旦被装载到第一级寄存器321-324中,则所述指令数据使得在一些架构上确定的数量的流水线级中执行装载指令。装载/存储流水线215因此能够在给定的周期中启始上至四个独立的装载操作,只要如在此所述满足了特定的条件。
组预测(BP)字段304预测从其将获得由装载指令参考的数据的L1 D-高速缓冲存储器的可能组。在优选实施例中,BP字段304是单个位。确认字段305是指示在组预测值中的置信度的字段。确认字段可以是单个位,但是在优选实施例中是上或下计数器。如果计数器等于或超过某阈值,则组预测值被认为可靠。
选择器控制逻辑312控制一个组的选择器313-316,如果有的话,确定哪个(哪些)选择器将发送指令301,有效地将其分派到装载存储流水线。来自操作代码解码器311的装载存储控制线(指示装载/存储操作)、组预测的值和确认字段的值被输入到选择器控制逻辑312。另外,选择器控制逻辑接收来自可以在同一周期中被分派的、在寄存器204中的其他指令的解码的输入。选择器控制逻辑实质地实现一套逻辑功能如下:
SelA=Load AND LSAOpen AND{[BP=0 AND C≥TH]OR[(LSCOpen
OR LSDOpen)AND C<TH)]}
其中,SelA是选择器A 313的控制线,Load是来自操作解码器311的控制线,指示指令301是装载指令,LSAOpen、LSCOpen和LSDOpen指示装载/存储管道区间A、C和D在当前周期中分别是打开的以接收指令(即,不被分配到不同的装载指令),BP是指令301的组预测值,C是指令301的确认值,TH是组预测阈值。换句话说,如果指令301是Load并且管道区间A未被另一个指令占用,则在下述条件下选择器A被打开以向装载/存储管道区间A分派指令301:或者(a)组预测是0并且所述确认在组预测中指示可信,或者(b)管道区间C或D之一是打开的并且所述确认在组预测中指示不可信。选择器B、C和D 314-316被类似地控制如下:
SelB=Load AND LSBOpen AND-(LSAOpen)AND{[BP=0 AND C≥TH]
OR[(LSCOpen OR LSDOpen)AND C<TH)]}
SelC=Load AND LSCOpen AND{[BP=1 AND C≥TH]OR[(LSAOpen
OR LSBOpen)AND C<TH)]}
SelD=Load AND LSDOpen AND-(LSCOpen)AND{[BP=1 AND C≥TH]
OR[(LSAOpen OR LSBOpen)AND C<TH)]}
可以观察到,如果确认值满足阈值,则装载被优先地分派到装载/存储管道区间A(用于组预测0)或区间C(用于组预测1)。如果没有优选的管道区间,则如果可用的话,按照组预测值向管道区间B或D分派所述装载。如果确认值不满足阈值,则同时向两个管道区间分派所述装载,每个组一个(假定可以获得两个这样的区间)。在这种情况下,在组预测值内存在不足的置信度,则不冒错误的组预测的风险(需要重启流水线),处理器向两个独立的流水线区间分派同一装载操作,如此访问L1 D-高速缓冲存储器的两个组。
存储指令具有比装载指令更低的优先级,并且被延迟直到没有装载指令准备好被分派到对应的L1 D-高速缓冲存储器组。如果指令解码为存储指令,则它被布置在存储队列205上,将所述指令延迟至少用以产生要存储到的位置的有效地址的足够长的时间,因此肯定地确定要访问的高速缓冲存储器组。如在此所述,每个组仅仅在给定的周期中支持单个的存储指令,因此对于组0的存储要求在同一周期中没有来自那个组的装载指令(没有被分派到管道区间A或B的指令),并且对组1的存储要求没有通过被分派到管道区间C或D的装载指令。
图4A和4B(在此统称为图4)是按照优选实施例的L1数据高速缓冲存储器206的结构的图示。参照图4,L1 D-高速缓冲存储器包括高速缓冲存储器数据表,和高速缓冲存储器目录,或索引,其中,该表包含实际的被高速缓冲存储的数据。高速缓冲存储器206被组织为关联高速缓冲存储器,其中,通过解码要访问的地址的选择位来确定被称为线的高速缓冲存储器数据条目的关联集,并且通过将期望的地址与高速缓冲存储器目录条目相比较来确定在关联集内的线,这在本领域内是公知的。在优选实施例中,L1 D-高速缓冲存储器包含大约64K字节并且是4路相关联的,每个高速缓冲存储器线包含128字节的数据。但是,这些参数仅仅是举例,可以改变。
所述数据表包括两个相同的组410A和410B(在此统称为部件410)。在两个组之间等分每个128字节的高速缓冲存储器线,64字节在组410A中,64字节在组410B中。在高速缓冲存储器数据表中,每个独立的存储单元包括单个写入输入和两个读取输出,读取输出被指定为A和B,并且在相应的独立控制线的控制下。高速缓冲存储器的不同双字(32位)的对应位位置的A位输出被绑定在一起以形成读取端口A,类似地,B位输出被绑定在一起以形成读取端口B。因此,每个存储组410A、410B具有一对读取端口A和B,总共形成四个读取端口。存储单元的操作使得:虽然可以在同一周期中从端口A或端口B或两者读取它,但是不可以在它被读取的同一周期中将其写入。在任何一个组410A、410B中,仅仅可以在给定的周期中执行一个写入操作,虽然有可能在另一个组中执行独立的写入操作(或上至两个独立的读取操作)。
高速缓冲存储器目录包含索引条目412的行411。每个索引条目包含高速缓冲存储器线的有效地址的一部分和特定的控制位,所述特定的控制位诸如脏(dirty)位、LRU位等,这是本领域内公知的。通过解码或散列期望数据的有效地址的一部分以获得行选择信号来参考高速缓冲存储器目录行411。因为高速缓冲存储器206支持在单个周期中的上至四个读取操作,因此四个独立的地址散列/解码器402-405用于访问目录401。每个地址散列/解码器402-405对应于装载/存储管道215的相应部分,并且从装载/存储管道215的对应寄存器431-434获得要访问的有效地址。
通过比较器406-409的对应的一个将在所选择的行411中的四个索引条目412中的有效地址与来自寄存器431-434的对应的一个的期望数据访问的有效地址相比较。如果存在匹配,则由所述比较器产生高速缓冲存储器线选择信号,以用于从高速缓冲存储器数据表410选择高速缓冲存储器线。如果不存在匹配,则期望的有效地址不在L1 D-高速缓冲存储器206中,并且采取适当的行为来从低层高速缓冲存储器或主存储器获得数据。在图4中未示出用于响应于高速缓冲存储器未中(missing)而装载新数据的硬件。
可以观察到,如图4所示,高速缓冲存储器目录401包含与四个比较器406-409对应的四个独立的地址解码器402-405和四个独立的读取端口。这意欲作为简化的表示以用于说明的目的。虽然有可能在目录401中设计每个独立的存储单元以支持四个独立的读取端口,但是或者也可能使用高速缓冲存储器目录的两个独立的拷贝,其中每个拷贝仅仅具有两个独立的地址解码器和两个独立的读取端口,在此优选的实施例中使用这样的双拷贝。这样的设计的基本原理是它使得能够使用与在高速缓冲存储器数据表410中所使用的相同的基本存储单元。由于与数据表相比较高速缓冲存储器目录较小,因此使用双拷贝目录不需要大量的附加芯片存储。
为了访问高速缓冲存储器数据表,由对应的解码器413-416解码有效地址的一部分以选择相关联的一套四个高速缓冲存储器线421。在所述相关联的套中,由对应的比较器406-409产生的选择信号选择高速缓冲存储器线之一以在对应的读取端口上输出到读取寄存器417-420之一。事实上,高速缓冲存储器一次读取数据的一个双字(32位),因此使用附加的地址位来选择要从所选择的高速缓冲存储器线内读取的32位。
可以观察到,当装载指令具有被认为可靠(确认值满足阈值)的组预测值时,如上所述,将向装载/存储流水线的并行区间的仅仅一个分派装载指令,并且寄存器431-434的仅仅一个将包含所述指令的有效地址。在这种情况下,将仅仅访问高速缓冲存储器组的一个。即,如果所述有效地址在A或B寄存器431、432中,则将访问高速缓冲存储器组410A。如果所述有效地址在C或D寄存器433、434中,则将访问高速缓冲存储器组410B。但是如果原始的装载指令的确认值不满足阈值,则组预测被认为不可靠,并且在装载/存储流水线中将存在指令的两个拷贝。有效地址的一个拷贝将在寄存器431或432中,并且将用于访问组410A,而另一个拷贝将在寄存器433或434中,并且将用于访问组410B。
在存储指令的情况下,在分派时将知道高速缓冲存储器组,并且将向管道区间A(对应于高速缓冲存储器组410A)或管道区间C(对应于高速缓冲存储器组410B)分派所述存储,并且因此在寄存器431或433中包含所存储到的地址。为了说明清楚,省略用于支持向高速缓冲存储器线存储数据的特定硬件。
在优选实施例中,在处理器硬件中保存组预测值和确认值。图5在高层图解了在保存组预测和确认值中涉及的主要硬件结构与它们的交互。利用装载指令的每次执行来更新组预测值,以反映在最近执行的装载指令中访问的组。确认值是上或下计数器,它随着装载指令的每次执行而递增或递减,如果组预测值正确则所述计数器递增,如果不正确则递减。
参见图5,L1 I-高速缓冲存储器205包括高速缓冲存储器目录501和高速缓冲存储器数据表502,这是传统公知的。在高速缓冲存储器数据表502中,组预测和确认值与每个装载指令相关联,如上所述。当向寄存器装载所述装载指令时,向指令寄存器503引入这些值。当向装载/存储管道215分派装载指令时,地址生成器504确定数据参考,即要由装载指令从高速缓冲存储器装载的数据的有效地址。有效地址的产生通常需要计算,例如可以从寄存器向基值加上在所述指令内的一些补偿值。这个计算可能需要一个或多个处理器周期,在此期间,所述装载指令在装载/存储管道中。当地址生成器使得有效地址可以获得时,所述地址用于访问L1 D-高速缓冲存储器206,如上所述,同时,比较器505将足以确定L1高速缓冲存储器组的有效地址的一个或多个位与指令的组预测字段相比较。(在优选实施例中,每64个字节交织高速缓冲存储器组,来自最低阶地址位的单个地址位六位位置足以确定高速缓冲存储器组。)如果由地址生成器确定的高速缓冲存储器组匹配由组预测字段确定的高速缓冲存储器组,则比较器505输出对应的信号。递增/递减器506然后按照比较器505的输出将确认值递增或递减预定量。即,如果由组预测字段预测的高速缓冲存储器组匹配实际计算的高速缓冲存储器组,则递增确认值;否则,将其递减。
递增或递减的量是设计选择的问题,而对于递增和递减不是一定相同的。该相对量依赖于高速缓冲存储器组的数量和配置、以及错误的高速缓冲存储器组预测对装载指令的延迟的相对性能成本,该装载指令是如果在组预测中有更高层的置信度时本来要执行的。高速缓冲存储器组的数量和配置影响高速缓冲存储器组误预测引起实际的硬件冲突的概率,如下更详细所述。如果发生实际的硬件冲突,则在分派装载指令后在几个周期中通常不检测错误的高速缓冲存储器组预测。这样的冲突可能要求终止装载/存储管道(并且可能有其他流水线)并且重启特定的指令。这样的冲突对性能的影响一般大大地大于延迟装载指令至后一周期的影响。因此,优选的是在误预测情况下的确认值的递减在幅度上大于在正确预测情况下的值的递增。例如,如果递减是4并且递增是1,则如果正确预测对误预测的比率是至少4∶1,那么确认值将在平均值上提高,并且将最终满足阈值,使得组预测可以用于分派所述指令。如果正确预测的比例小于80%,则确认值将一般保持为低并且不达到阈值。阈值和初始确认值的选择影响达到阈值所需要的执行的数量。例如,对于递减4和递增1,可以选择阈值6。可以注意到,对于装载指令的每次执行更新组预测和确认值,而不论当分派装载指令时是否实际使用组预测字段。
在典型的环境中,预期可以高度预测多数装载指令,这意味着它们每次或几乎每次参考同一高速缓冲存储器组。较小但是有效数量的装载指令是不可预测的,这显示出更多或更少随机的参考模式。确认值的目的是识别具有不可预测的参考模式的那些装载指令,以便可以同时对于所有的组调度这些装载指令,由此避免冲突。确认值不必然识别具有在其间(例如80%-90%)某处的预测精度的装载指令,但是预计这样的指令很少。在上述的示例中,递减对递增的比率4∶1一般识别具有随机的参考模式的装载指令,并且防止对于这样的指令使用组预测。
更新组预测值和确认值被写入到在L1 I-高速缓冲存储器数据表502中的适当位置。同时,在L1 I-高速缓冲存储器目录501中的变更位或脏(dirty)位被置位以指示L1 I-高速缓冲存储器的对应线已经改变。当一条线被逐出L1I-高速缓冲存储器时,如果在L1 I-高速缓冲存储器目录中的变更位指示已经改变了所述线,则将其写入到L2高速缓冲存储器。
当从主存储器向L2高速缓冲存储器初始装载高速缓冲存储器线时,如果必要的话通过选用的BP/C初始化硬件507来初始化组预测和确认值。优选的是,所述确认值被初始化为零,虽然可以使用其他的值;可以随机地选择组预测的初始值。初始化硬件507是选用的,因为根据存储组预测和确认值的方式,它可能是不需要的。如果例如以装载指令的未使用的位来简单地存储组预测和确认值,则编译器可以将确认值初始化为零,使得不需要初始化硬件507。但是,如果必须重新编码装载指令以为组预测和确认字段创造空间,则当从存储器向高速缓冲存储器装载所述装载指令时应当通过硬件来执行重新编码。在这种情况下,初始化硬件将对包含指令的任何一个高速缓冲存储器线检查装载指令,并且按照需要而重新编码。可以使用在存储器中的页面表中的信息来确定是否被装载到L2的数据包含指令或其他数据,并且因此调用初始化。作为替代方式,可以假定,响应于L1 I-高速缓冲存储器未中或I-高速缓冲存储器的预期提取而被装载到L2的数据包含指令。
在图5的图示中,假定仅仅存在两个高速缓冲存储器层,并且在L1和L2而不是在主存储器中保存组预测和确认值。如所公知的,可以有多于两个的高速缓冲存储器层,并且可以在高速缓冲存储器的较低层中保存组预测和确认值。优选的是,在存在多个高速缓冲存储器层的情况下,组预测和确认值被保存在在最低的高速缓冲存储器层而不保存在主存储器中。或者,这些值也可以被保存在主存储器中。
在所述说明性实施例中,L1数据高速缓冲存储器被划分为两组。这样的设计比涉及更多数量的组的设计更容易实现,但是一般需要更大的预测精度。当高速缓冲存储器组的数量增加时,所需要的预测精度降低,因为对于较大数量的高速缓冲存储器组来说,误预测引起实际的硬件冲突的概率降低。当然,较大数量的高速缓冲存储器组一般需要附加的硬件,因此更难于实现。因此,设计人员必须根据其它因素中,附加高速缓冲存储器组的成本、预期的预测精度、和实际高速缓冲存储器冲突的相对性能成本,来选择适当数量的高速缓冲存储器组。
可以通过参照图7的简化硬件配置示例来说明这个原理。图7图解了:被划分为两个组的第一数据高速缓冲存储器701,每个组具有单个读取端口;与高速缓冲存储器701相同大小的第二数据高速缓冲存储器702,它被划分为八个组,每个组具有单个读取端口,它被选择性地输出到两个读取总线的任何一个。高速缓冲存储器701和702的配置效果是可以执行来自高速缓冲存储器的两个同时的装载,只要所述装载是来自不同的组。不支持大于两个的同时装载,因为仅仅存在来自高速缓冲存储器的两个读取输出。
如果在同一周期中调度了两个装载指令,则冲突的概率是误预测的概率和在给定误预测情况下所需要的实际高速缓冲存储器组与其他装载操作所需要的相同的概率的函数。当像在高速缓冲存储器701的示例中那样仅仅存在两个组时,这个第二因素具有高概率,但是当高速缓冲存储器组的数量提高时它降低。换句话说,即使组预测是错误的,纯随机的运气改善当高速缓冲存储器组的数量提高时不发生冲突的几率。冲突的概率可以被表达为:
PCon=2PPred(1-PPred)(1/(B-1))+(1-PPred)2(B-2)/(B-1)2
其中,PCon是冲突的概率,PPred是正确的组预测的概率,并且B是高速缓冲存储器组的数量。对于PPred的较高的值,可以忽略第二项(表示两个装载操作误预测它们的高速缓冲存储器组的概率),并且冲突的概率大约是2(1-PPred)(B-1)。对于正确预测的给定概率,高速缓冲存储器组701是可能产生冲突的大致七倍。可以认识到这些概率对于不同的配置不同,所述配置诸如支持每个高速缓冲存储器组多个读取端口的配置,如在优选实施例中那样。但是,较大数量的高速缓冲存储器组需要较低的预测精度的一般原理保持不变。
通常,对于装载冲突的惩罚(penalty)足够大以至于组预测精度必须较大。例如,在检测到冲突后重新启动装载流水线可能引起在邻近30个周期内的惩罚。如果使用具有简单的2组高速缓冲存储器701的***,则即使对于99%的预测精度,在给定大约0.6周期/装载的平均惩罚的情况下,在大约2%的时间中也将发生冲突,这被认为是不可接受的。对于这样的配置,需要99.5%或更大的预测精度。但是,对于8组高速缓冲存储器和相同99%的预测精度,在给定大约0.09周期/装载的平均惩罚的情况下,冲突的概率下降到大约0.3%,这被认为是可以接受的。当每个高速缓冲存储器组具有多个输出端口时,计算将不同并且变得更复杂。
计算机***100可以包括选用的反馈机制,用于提供关于在装载操作中的数据对齐的一致性的性能数据。这样的数据可以用于在程序中的数据访问的模式的性能分析,当被支持时可以由优化编译器使用来改善在显示不良对齐的页面中的数据对齐。即,如果知道在特定程序或程序段中的装载操作显示出不良的组预测一致性,这有可能改变程序数据结构,以便数据在可预测的边界上对齐,在使用被高速缓冲存储的组预测的***中产生更一致的组预测和改善的程序性能。
图6图解了这样的选用反馈机制的操作。所述反馈机制将对齐计数器字段(ALN)与可执行的指令的每个存储器页面相关联。ALN计数器字段可以是单个上或下计数器,类似于确认值,或者可以是一对计数器,其中之一对装载操作的数量计数,另一个对组误预测的数量计数。在优选实施例中,ALN计数器是简单的上或下计数器,它比一对计数器需要更少的位,虽然它传送更少的信息。ALN计数器每当页面内的装载指令正确地预测高速缓冲存储器组时递增,每当装载指令错误地预测高速缓冲存储器组时递减。
参见图6,指令的当前执行页面的当前ALN计数器值与在指令ERAT 603(它是ERAT 224的一部分)中的页面条目相关联。比较器505检测正确的组预测或误预测。响应于正确或错误的组预测的检测,递增/递减硬件604在适当时递增或递减ALN计数器值,于是更新在指令ERAT 603中的值。像在确认值的情况下那样,ALN值可以被递增一个量和递减不同的量。虽然图6指示所更新的ALN计数器被立即写入到ERAT 603,但是事实上当正在执行当前页面的指令时它可以被保存在寄存器(未示出)中并累计,以便当执行来自新页面的指令时被写入到ERAT 603。
当一个页面条目被逐出ERAT 603,ALN值被写出到转换后备缓冲器602中的对应字段,并且由此,它被最终写出到主存储器的页面表601中的对应字段。在优选实施例中,ALN值不被保存在存储器中,因此ALN计数器的寿命限于在主存储器中的对应页面的寿命。
优选的是,软件性能工具可以从主存储器中的页面表访问ALN值,以便记录指令的不同页面的组预测性能。这样的性能工具还可以包括用于从TLB向页面表写入ALN值的命令,以便保证在页面表中的ALN值是相对当前的。
可以观察到,因为独立的指令ERAT 603与每个处理器相关联,因此在多处理器***中有可能不同的处理器同时执行指令的同一页面,并且不同的指令ERAT将独立地更新ALN值。在优选实施例中,没有防止这个条件的高速缓冲存储器一致(coherency)硬件,并且要写出到TLB的最后一个ERAT值将重写来自另一个ERAT的先前写入的值。虽然这会引入在ALN值中的不准确,但是更准确的ALN值的益处不会出现以判断附加的高速缓冲存储器一致硬件的成本。
虽然在此为了清楚将各种数据结构说明为具有表之类的结构,但是事实上所述结构可以更复杂,并且在这些结构中的数据“条目”可以被分段,以便一个条目的一些部分在一个位置,而其他部分在另一个位置。
在优选实施例中,组预测和确认值都与装载指令相关联,所述确认值指示在组预测值中的一定置信度。但是,在替代的实施例中,装载指令可以仅仅包含组预测值,而没有任何确认值。或者,为了降低所需要的高速缓冲存储器的数量,一个确认值可以与多组指令相关联,诸如指令的高速缓冲存储器线或指令的页面,所述确认值指示在组内的所有装载指令的综合(composite)置信度。而且,虽然在优选实施例中确认值是上或下计数器,但是可以以不同形式来保存确认值,或者可以在不同事件时递增/递减确认值。例如,确认值可以是用于指示可信或不可信的单个位,它可以由硬件设置以便如果先前指令访问了同一组则指示可信,或者如果它访问了不同组则指示不可信。或者,这样的位可以由编译器设置。
在优选实施例中,组预测和确认值被硬件自动保存,并且不被编译器产生为指令的永久部分,或永久地存储在存储器中。但是,也有可能当包含指令的页面被送出去(page out)的时候在存储器中存储组预测和确认值两者,还可能编译器当编译代码时初始化组预测值。由编译器设置的组预测和/或确认值可以被看作永久的(在这种情况下硬件不改变这样的值),或者可以仅仅是初始值,在由硬件执行期间被改变,如在此或使用其他技术所述。
在优选实施例中,计算机***使用三层寻址方案,其中有效地址被转换为虚拟地址,所述虚拟地址依次被转换为实际地址。以有效地址来访问层1高速缓冲存储器,以实际地址来访问较低层高速缓冲存储器和主存储器。但是,本发明不限于任何特定的寻址方案,并且将适用于具有少于三层寻址或多于三层寻址的***。而且,按照本发明的计算机***可以具有不同形式的地址转换结构,具体上不必具有ERAT。另外,可以使用不同类型的地址来用于高速缓冲存储器访问,具体上,可以使用实际地址来访问层1高速缓冲存储器。
虽然已经公开了本发明的特定实施例以及某些替代实施例,但是本领域的技术人员可以明白,可以在所附的权利要求的范围内在形式和细节上进行附加的改变。
Claims (20)
1.一种数字数据处理器件,包括:
指令逻辑,用于选择和解码指令以执行;
执行逻辑,用于执行指令;
第一高速缓冲存储器,用于临时存储数据,所述第一高速缓冲存储器包括多个组,每个组包含至少一个相应的访问端口,用于访问在组中的数据;
其中,相应的组预测值与访问所述第一高速缓冲存储器的至少一些指令中的每个相关联,每个所述组预测值预测要由其相关联的指令访问的所述第一高速缓冲存储器的组;
其中,所述指令逻辑选择多个指令以同时执行,所述指令逻辑使用所述指令的所述组预测值来选择访问所述第一高速缓冲存储器的多个指令以同时执行。
2.按照权利要求1的数字数据处理器件,还包括第二高速缓冲存储器,用于临时存储数据,其中,所述第二高速缓冲存储器存储可以由所述执行逻辑执行的指令,所述第一高速缓冲存储器存储指令之外的数据,其中,所述组预测值被存储在所述第二高速缓冲存储器中。
3.按照权利要求1的数字数据处理器件,其中,所述第一高速缓冲存储器的每个所述组包含多个读取端口和至少一个写入端口。
4.按照权利要求1的数字数据处理器件,
其中,相应的确认值与和组预测值相关联的每个所述指令相关联,每个确认值反映在相应的组预测值中的置信度;
其中,所述指令逻辑使用所述指令的所述组预测值和所述确认值两者来选择多个指令,所述多个指令访问所述第一高速缓冲存储器以同时执行。
5.按照权利要求4的数字数据处理器件,
其中,所述数字数据处理器件动态地保存所述确认值。
6.按照权利要求5的数字数据处理器件,
其中,每个所述确认值是计数器,它对于每个正确的组预测递增,对于每个错误的组预测递减。
7.按照权利要求1的数字数据处理器件,还包括:
反馈逻辑,它以程序员可访问的形式保存组预测历史数据,所述组预测历史数据记录计算机程序执行期间通过所述组预测值的组预测的性能。
8.按照权利要求1的数字数据处理器件,
其中,所述指令逻辑从多个线程同时选择和解码指令以执行。
9.按照权利要求1的数字数据处理器件,
其中,所述数字数据处理器件被实现在单个半导体芯片上。
10.一种计算机***,包括:
存储器;
至少一个处理器,所述处理器在至少一个通信路径上与所述存储器通信,所述处理器包括用于选择和解码指令以执行的指令逻辑和用于执行指令的执行逻辑;
第一高速缓冲存储器,耦接到所述处理器,并且临时存储来自所述存储器的数据,所述第一高速缓冲存储器包括多个组,每个组包含至少一个相应的访问端口,用于访问组中的数据;
其中,相应的组预测值与访问所述第一高速缓冲存储器的至少一些指令中的每个相关联,每个所述组预测值预测要由其相关联的指令访问的所述第一高速缓冲存储器的组;
其中,所述指令逻辑选择多个指令以同时执行,所述指令逻辑使用所述指令的所述组预测值来选择访问所述第一高速缓冲存储器的多个指令以同时执行。
11.按照权利要求10的计算机***,还包括第二高速缓冲存储器,用于临时存储数据,其中,所述第二高速缓冲存储器存储可以由所述处理器执行的指令,所述第一高速缓冲存储器存储指令之外的数据,其中,所述组预测值被存储在所述第二高速缓冲存储器中。
12.按照权利要求10的计算机***,其中,所述第一高速缓冲存储器的每个所述组包含多个读取端口和至少一个写入端口。
13.按照权利要求10的计算机***,
其中,相应的确认值与和组预测值相关联的每个所述指令相关联,每个确认值反映在相应的组预测值中的置信度;
其中,所述指令逻辑使用所述指令的所述组预测值和所述确认值两者来选择多个指令,所述多个指令访问所述第一高速缓冲存储器以同时执行。
14.按照权利要求13的计算机***,
其中,所述计算机***动态地保存所述确认值。
15.按照权利要求14的计算机***,
其中,每个所述确认值是计数器,它对于每个正确的组预测递增,对于每个错误的组预测递减。
16.按照权利要求10的计算机***,还包括:
反馈逻辑,它以程序员可访问的形式保存组预测历史数据,所述组预测历史数据记录计算机程序执行期间通过所述组预测值的组预测的性能。
17.按照权利要求10的计算机***,
其中,所述指令逻辑从多个线程同时选择和解码指令以执行。
18.按照权利要求10的计算机***,
其中,所述计算机***包括多个在不同高速缓冲存储器层上的高速缓冲存储器,所述第一高速缓冲存储器在最靠近所述处理器的层上。
19.按照权利要求10的计算机***,
其中,所述计算机***包括多个所述处理器,每个处理器耦接到相应的第一高速缓冲存储器,其中,与指令相关联的所述组预测值被保存在所述多个处理器的每个可以访问的位置中。
20.一种数字数据处理器件,包括:
高速缓冲存储器,用于临时存储数据,所述高速缓冲存储器包括多个组,每个组包含至少一个相应的访问端口,用于访问在组中的数据;
执行逻辑,用于同时执行多个指令;
指令逻辑,用于选择和分派指令集合,该指令集合可以同时被所述处理器件执行而没有冲突,其中,所述指令的至少一些访问所述高速缓冲存储器,所述指令逻辑使用与访问所述高速缓冲存储器的至少一些指令相关联的相应的组预测值来预测是否可以由所述处理器件同时执行访问所述高速缓冲存储器的多个指令而没有冲突。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/829,621 US7219185B2 (en) | 2004-04-22 | 2004-04-22 | Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache |
US10/829,621 | 2004-04-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1690952A true CN1690952A (zh) | 2005-11-02 |
CN100414494C CN100414494C (zh) | 2008-08-27 |
Family
ID=35137810
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100669257A Expired - Fee Related CN100414494C (zh) | 2004-04-22 | 2005-04-22 | 根据多组高速缓存组预测来选择执行的指令的装置和*** |
Country Status (2)
Country | Link |
---|---|
US (1) | US7219185B2 (zh) |
CN (1) | CN100414494C (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174202B (zh) * | 2006-10-31 | 2010-09-15 | 扬智科技股份有限公司 | 具多指令流的录像译码器快取装置及其控制方法 |
CN101853150A (zh) * | 2009-05-29 | 2010-10-06 | 威盛电子股份有限公司 | 非循序执行的微处理器及其操作方法 |
CN101901132A (zh) * | 2009-08-12 | 2010-12-01 | 威盛电子股份有限公司 | 微处理器以及相关储存方法 |
CN101187886B (zh) * | 2006-02-27 | 2011-12-14 | 英特尔公司 | 基于需求的纠错 |
CN101681285B (zh) * | 2007-06-20 | 2012-07-25 | 富士通株式会社 | 同时处理多个线程的运算装置 |
CN103778070A (zh) * | 2012-10-25 | 2014-05-07 | 德州仪器公司 | 多个块一致性操作的并行处理 |
WO2015024492A1 (zh) * | 2013-08-19 | 2015-02-26 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器***和方法 |
CN104657114A (zh) * | 2015-03-03 | 2015-05-27 | 上海兆芯集成电路有限公司 | 并行化的多分派***和用于排序队列仲裁的方法 |
CN109165054A (zh) * | 2012-06-29 | 2019-01-08 | 英特尔公司 | 用于程序代码的预先取出和早执行的***和方法 |
CN109313555A (zh) * | 2016-06-24 | 2019-02-05 | 高通股份有限公司 | 使用初始高预提取预测置信度状态以节制基于处理器的***中的下一行预提取的下一行预提取器 |
CN112005208A (zh) * | 2018-04-30 | 2020-11-27 | 惠普发展公司, 有限责任合伙企业 | 针对处理阶段设备的对策实施 |
CN110362506B (zh) * | 2019-03-20 | 2021-11-02 | 上海兆芯集成电路有限公司 | 高速缓存存储器及其中实现的方法 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7518993B1 (en) * | 1999-11-19 | 2009-04-14 | The United States Of America As Represented By The Secretary Of The Navy | Prioritizing resource utilization in multi-thread computing system |
US6694421B2 (en) * | 1999-12-29 | 2004-02-17 | Intel Corporation | Cache memory bank access prediction |
JP4336848B2 (ja) * | 2004-11-10 | 2009-09-30 | 日本電気株式会社 | マルチポートキャッシュメモリ及びマルチポートキャッシュメモリのアクセス制御方式 |
US20060112226A1 (en) | 2004-11-19 | 2006-05-25 | Hady Frank T | Heterogeneous processors sharing a common cache |
JP2006190402A (ja) * | 2005-01-07 | 2006-07-20 | Renesas Technology Corp | 半導体装置 |
US7721071B2 (en) * | 2006-02-28 | 2010-05-18 | Mips Technologies, Inc. | System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor |
US20080010413A1 (en) * | 2006-07-07 | 2008-01-10 | Krishnan Kunjunny Kailas | Method and apparatus for application-specific dynamic cache placement |
US8291169B2 (en) * | 2009-05-28 | 2012-10-16 | International Business Machines Corporation | Cache line use history based done bit modification to D-cache replacement scheme |
US8140760B2 (en) * | 2009-05-28 | 2012-03-20 | International Business Machines Corporation | I-cache line use history based done bit based on successful prefetchable counter |
US8171224B2 (en) * | 2009-05-28 | 2012-05-01 | International Business Machines Corporation | D-cache line use history based done bit based on successful prefetchable counter |
US8332587B2 (en) * | 2009-05-28 | 2012-12-11 | International Business Machines Corporation | Cache line use history based done bit modification to I-cache replacement scheme |
JP5493954B2 (ja) * | 2010-02-10 | 2014-05-14 | 富士通株式会社 | キャッシュシステム |
KR101635395B1 (ko) * | 2010-03-10 | 2016-07-01 | 삼성전자주식회사 | 멀티포트 데이터 캐시 장치 및 멀티포트 데이터 캐시 장치의 제어 방법 |
JP5885481B2 (ja) * | 2011-12-01 | 2016-03-15 | キヤノン株式会社 | 情報処理装置、情報処理方法、及びプログラム |
US9274964B2 (en) | 2012-02-02 | 2016-03-01 | Qualcomm Incorporated | Multi-bank cache memory |
US9626294B2 (en) | 2012-10-03 | 2017-04-18 | International Business Machines Corporation | Performance-driven cache line memory access |
US11150721B2 (en) * | 2012-11-07 | 2021-10-19 | Nvidia Corporation | Providing hints to an execution unit to prepare for predicted subsequent arithmetic operations |
US9823852B2 (en) * | 2015-05-01 | 2017-11-21 | Toshiba Memory Corporation | Memory system with nonvolatile memory |
CN113778914B (zh) * | 2020-06-09 | 2024-06-18 | 华为技术有限公司 | 用于执行数据处理的装置、方法、和计算设备 |
CN116028388B (zh) * | 2023-01-17 | 2023-12-12 | 摩尔线程智能科技(北京)有限责任公司 | 高速缓存方法、装置、电子设备、存储介质和程序产品 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5933860A (en) * | 1995-02-10 | 1999-08-03 | Digital Equipment Corporation | Multiprobe instruction cache with instruction-based probe hint generation and training whereby the cache bank or way to be accessed next is predicted |
US5845323A (en) * | 1995-08-31 | 1998-12-01 | Advanced Micro Devices, Inc. | Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time |
US6189083B1 (en) * | 1998-02-26 | 2001-02-13 | Compaq Computer Corporation | Method and apparatus for accessing a cache memory utilization distingushing bit RAMs |
US6601161B2 (en) * | 1998-12-30 | 2003-07-29 | Intel Corporation | Method and system for branch target prediction using path information |
US6418525B1 (en) * | 1999-01-29 | 2002-07-09 | International Business Machines Corporation | Method and apparatus for reducing latency in set-associative caches using set prediction |
US6643770B1 (en) * | 1999-09-16 | 2003-11-04 | Intel Corporation | Branch misprediction recovery using a side memory |
US6629268B1 (en) * | 2000-01-25 | 2003-09-30 | International Business Machines Corporation | Method and apparatus for servicing a processing system through a test port |
US6356990B1 (en) * | 2000-02-02 | 2002-03-12 | International Business Machines Corporation | Set-associative cache memory having a built-in set prediction array |
JP4141112B2 (ja) * | 2001-04-12 | 2008-08-27 | 株式会社日立製作所 | プロセッサおよびプロセッサシステム |
SE0102564D0 (sv) * | 2001-07-19 | 2001-07-19 | Ericsson Telefon Ab L M | Arrangement and method in computor system |
JP3784766B2 (ja) * | 2002-11-01 | 2006-06-14 | 株式会社半導体理工学研究センター | 多ポート統合キャッシュ |
US7831817B2 (en) * | 2003-04-15 | 2010-11-09 | Arm Limited | Two-level branch prediction apparatus |
US7266642B2 (en) * | 2004-02-17 | 2007-09-04 | International Business Machines Corporation | Cache residence prediction |
-
2004
- 2004-04-22 US US10/829,621 patent/US7219185B2/en not_active Expired - Fee Related
-
2005
- 2005-04-22 CN CNB2005100669257A patent/CN100414494C/zh not_active Expired - Fee Related
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187886B (zh) * | 2006-02-27 | 2011-12-14 | 英特尔公司 | 基于需求的纠错 |
CN101174202B (zh) * | 2006-10-31 | 2010-09-15 | 扬智科技股份有限公司 | 具多指令流的录像译码器快取装置及其控制方法 |
CN101681285B (zh) * | 2007-06-20 | 2012-07-25 | 富士通株式会社 | 同时处理多个线程的运算装置 |
CN101853150A (zh) * | 2009-05-29 | 2010-10-06 | 威盛电子股份有限公司 | 非循序执行的微处理器及其操作方法 |
CN101853150B (zh) * | 2009-05-29 | 2013-05-22 | 威盛电子股份有限公司 | 非循序执行的微处理器及其操作方法 |
CN101901132A (zh) * | 2009-08-12 | 2010-12-01 | 威盛电子股份有限公司 | 微处理器以及相关储存方法 |
CN109165054A (zh) * | 2012-06-29 | 2019-01-08 | 英特尔公司 | 用于程序代码的预先取出和早执行的***和方法 |
CN109165054B (zh) * | 2012-06-29 | 2021-12-28 | 英特尔公司 | 用于程序代码的预先取出和早执行的***和方法 |
CN103778070B (zh) * | 2012-10-25 | 2018-04-27 | 德州仪器公司 | 多个块一致性操作的并行处理 |
CN103778070A (zh) * | 2012-10-25 | 2014-05-07 | 德州仪器公司 | 多个块一致性操作的并行处理 |
WO2015024492A1 (zh) * | 2013-08-19 | 2015-02-26 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器***和方法 |
CN104424158A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器***和方法 |
US10055228B2 (en) | 2013-08-19 | 2018-08-21 | Shanghai Xinhao Microelectronics Co. Ltd. | High performance processor system and method based on general purpose units |
US10684860B2 (en) | 2013-08-19 | 2020-06-16 | Shanghai Xinhao Microelectronics Co. Ltd. | High performance processor system and method based on general purpose units |
CN104657114A (zh) * | 2015-03-03 | 2015-05-27 | 上海兆芯集成电路有限公司 | 并行化的多分派***和用于排序队列仲裁的方法 |
CN104657114B (zh) * | 2015-03-03 | 2019-09-06 | 上海兆芯集成电路有限公司 | 并行化的多分派***和用于排序队列仲裁的方法 |
CN109313555A (zh) * | 2016-06-24 | 2019-02-05 | 高通股份有限公司 | 使用初始高预提取预测置信度状态以节制基于处理器的***中的下一行预提取的下一行预提取器 |
CN112005208A (zh) * | 2018-04-30 | 2020-11-27 | 惠普发展公司, 有限责任合伙企业 | 针对处理阶段设备的对策实施 |
CN110362506B (zh) * | 2019-03-20 | 2021-11-02 | 上海兆芯集成电路有限公司 | 高速缓存存储器及其中实现的方法 |
Also Published As
Publication number | Publication date |
---|---|
US20050240733A1 (en) | 2005-10-27 |
CN100414494C (zh) | 2008-08-27 |
US7219185B2 (en) | 2007-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100414494C (zh) | 根据多组高速缓存组预测来选择执行的指令的装置和*** | |
CN1306420C (zh) | 利用永久历史页表数据预取数据到高速缓存的装置和方法 | |
US5778434A (en) | System and method for processing multiple requests and out of order returns | |
US7318127B2 (en) | Method, apparatus, and computer program product for sharing data in a cache among threads in an SMT processor | |
CN1186720C (zh) | 据物理分页指针比较结果转送数据的装置及方法 | |
KR101493017B1 (ko) | 계층적 마이크로코드 저장소를 구비한 복수 코어 프로세서 | |
EP2542973B1 (en) | Gpu support for garbage collection | |
CN1208726C (zh) | 当预测路线失败时从非预测路线提供部分标记以指导搜索的高速缓存 | |
US7389402B2 (en) | Microprocessor including a configurable translation lookaside buffer | |
CN1324459C (zh) | 利用提示缓冲器隐藏存储器访问等待时间的方法和装置 | |
CN1248118C (zh) | 以推测方式使高速缓存中的缓存行失效的方法及*** | |
CN1296827C (zh) | 一种使用数据地址增加组相关存储器的访问速度的方法 | |
US10496551B2 (en) | Method and system for leveraging non-uniform miss penality in cache replacement policy to improve processor performance and power | |
CN1652092A (zh) | 不同高速缓存级上具有关联集重叠同余组的多级高速缓存 | |
CN1522410A (zh) | 使用类型位跟踪二级高速缓存中储存的错误校正码及预解码位 | |
CN1397887A (zh) | 一种将储存数据重新导向的虚拟集合高速缓存 | |
US20120096241A1 (en) | Performance of Emerging Applications in a Virtualized Environment Using Transient Instruction Streams | |
JP2008107983A (ja) | キャッシュメモリ | |
US5737749A (en) | Method and system for dynamically sharing cache capacity in a microprocessor | |
US8688961B2 (en) | Managing migration of a prefetch stream from one processor core to another processor core | |
US9223714B2 (en) | Instruction boundary prediction for variable length instruction set | |
US20090172296A1 (en) | Cache Memory System and Cache Memory Control Method | |
US20220236993A1 (en) | Fetch stage handling of indirect jumps in a processor pipeline | |
US9164761B2 (en) | Obtaining data in a pipelined processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080827 Termination date: 20110422 |