基于垃圾收集器分析与对象的布局动态插入预取指令的方法和装置转让专利

申请号 : CN200480036850.1

文献号 : CN1890637B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : S·萨布拉蒙尼M·塞拉诺R·赫德森A·-R·爱德尔-塔巴泰拜

申请人 : 英特尔公司

摘要 :

揭示了动态插入预取指令的方法与装置。在一示例方法中,从处理器系统中的性能监控单元标识一个或多个与高速缓存缺失相关联的样本。基于与这一个或多个样本相关联的样本信息,产生延误信息。为动态插入一个或多个预取指令,基于该延误信息标识预取点。

权利要求 :

1.一种减少高速缓存缺失的方法,包括:

用处理器系统中的性能监控单元标识与高速缓存缺失相关联的一个或多个样本;

将所述一个或多个样本抽象成两个或多个链接的数据结构;

使用所述两个或多个链接的数据结构标识与高等待时间高速缓存缺失相关联的一个或多个路径;以及标识与所述一个或多个路径相关联的一个或多个预取点以插入一个或多个预取指令。

2.如权利要求1所述的方法,其特征在于,将所述一个或多个样本抽象成两个或多个链接的数据结构包括:基于与所述一个或多个样本相关联的指令指针、有效地址和等待时间信息中的至少一项来将所述一个或多个样本抽象成两个或多个受管理的堆对象。

3.如权利要求1所述的方法,其特征在于,将所述一个或多个样本抽象成两个或多个链接的数据结构包括:产生延误对象、延误类型、延误边界、延误路径、基延误类型、增量类型和增量偏移中的至少一项。

4.如权利要求1所述的方法,其特征在于,将所述一个或多个样本抽象成两个或多个链接的数据结构包括:标识一个或多个与至少一个延误对象相关联的延误类型。

5.如权利要求1所述的方法,其特征在于,使用所述两个或多个链接的数据结构标识与高等待时间高速缓存缺失相关联的一个或多个路径包括:标识一个或多个与至少一个延误类型相关联的延误边界。

6.如权利要求1所述的方法,其特征在于,使用所述两个或多个链接的数据结构标识与高等待时间高速缓存缺失相关联的一个或多个路径包括标识堆中两个或多个链接的数据结构之间的一个或多个增量,并且其中,标识一个或多个预取点包括沿所述一个或多个路径将所述一个或多个增量与所述两个或多个链接的数据结构中的第一数据结构的地址组合。

7.如权利要求1所述的方法,其特征在于,标识一个或多个预取点包括将所述两个或多个链接的数据结构中的基数据结构的地址与增量信息组合。

8.如权利要求1所述的方法,其特征在于,将所述一个或多个样本抽象成引起高速缓存缺失的两个或多个链接的数据结构包括:确定第一延误对象或类型是否链接到第二延误对象或类型。

9.如权利要求8所述的方法,其特征在于,所述第一延误对象或类型与所述第二延误对象或类型之间的连接性被用于标识与高等待时间高速缓存缺失相关联的一个或多个路径。

10.如权利要求1所述的方法,其特征在于,还包括标识延误对象。

11.如权利要求10所述的方法,其特征在于,还包括基于延误对象标识延误类型。

12.如权利要求11所述的方法,其特征在于,标识延误类型还包括:如果第一次标识该延误类型,则将该延误类型的计数初始化为1,并将该延误类型的累积等待时间初始化为高速缓存等待时间;以及如果该延误类型先前被标识过,则递增该延误类型的计数,并按高速缓存等待时间量来递增该延误类型的累积等待时间。

13.如权利要求12所述的方法,其特征在于,还包括基于累积等待时间排序延误类型。

14.如权利要求13所述的方法,其特征在于,还包括基于延误类型对总等待时间的贡献来丢弃至少一个延误类型。

15.一种减少高速缓存缺失的装置,包括:

性能监控单元,用于提供一个或多个高速缓存缺失的样本;

与所述性能监控单元通信的垃圾收集器,用于基于所述一个或多个样本标识引起高速缓存缺失的链接的数据对象之间的一个或多个路径;以及与所述垃圾收集器通信的编译器,用于标识与所述一个或多个路径相关联的至少一个预取点以接收一个或多个预取指令。

16.如权利要求15所述的装置,其特征在于,所述一个或多个样本包括指令指针、有效地址和等待时间信息中的至少一项。

17.如权利要求15所述的装置,其特征在于,所述垃圾收集器通过标识延误对象、延误类型、延误边界、延误路径、基延误类型、增量类型和增量偏移中的至少一项来标识链接的数据结构之间的一个或多个路径。

18.如权利要求15所述的装置,其特征在于,所述垃圾收集器标识一个或多个与至少一个延误对象相关联的延误类型。

19.如权利要求15所述的装置,其特征在于,所述垃圾收集器标识一个或多个与至少一个延误类型相关联的延误边界。

20.如权利要求15所述的装置,其特征在于,所述垃圾收集器基于堆中对象的布局标识链接的数据结构之间的一个或多个路径。

21.如权利要求15所述的装置,其特征在于,所述编译器将链接的数据对象的基对象的地址与增量信息组合,以标识所述至少一个预取点。

说明书 :

基于垃圾收集器分析与对象的布局动态插入预取指令的方

法和装置

技术领域

[0001] 本发明主要涉及编译器,尤其涉及基于垃圾收集器分析与对象的布局动态插入预取指令。

背景技术

[0002] 致力于提高和优化处理器系统的性能,许多不同的预取技术(即预料数据输入要求的需要)用于移除或“隐藏”处理器系统的等待时间(即延时)。
[0003] 通过在使用数据之前将它们取到处理器高速缓存中,预取解决了存储器等待时间问题。为了用及时的方式预取,处理器必须足够早地实现预取地址,用其它计算和/或等待时间来覆盖预取等待时间。无论是基于硬件还是基于软件的策略,用于链接式数据结构(LDS)的预取仍有一个主要难题,因为在LDS中元素之间的串行数据相关性妨碍了预取地址的及时实现。另一方面,当访问一个数据阵列结构(其中可从数据阵列结构的基计算后续对象的地址),可揭示循环并且执行诸如步预取之类的技术来避免高速缓存缺失(cache miss),同时重复通过数据阵列结构。这些阵列预取技术假定后续对象的地址可使用数据阵列结构的基来计算。然而,大多数LDS没有可由步预取技术利用的布局属性。此外,处理器与存储器速度之间的差距继续增大。结果,当试图插入预取指令以在遍历LDS的同时适当地减少等待时间,则受管理的运行时间环境(MRTE)会遇到困难。
[0004] 附图简述
[0005] 图1是方框图,表示示例预取指令插入系统。
[0006] 图2是方框图,表示示例LDS。
[0007] 图3是时序图,表示在运行时间期间可遍历图2所示的示例LDS的一种方式。
[0008] 图4是方框图,表示与图1所示的示例预取指令插入系统相关联的示例元数据图。
[0009] 图5是与图4所示的示例元数据图相关联的示例延误元数据表的图示。
[0010] 图6是方框图,表示与图1所示的示例预取指令插入系统相关联的示例LDS。
[0011] 图7是方框图,表示图1所示的示例预取指令插入系统的示例堆。
[0012] 图8是时序图,表示可由图1所示的示例预取指令插入系统在运行时间期间遍历图4所示的示例元数据图的一种方式。
[0013] 图9是流程图,表示示例机器可读指令,可执行这些指令来实现图1所示的示例预取指令插入系统。
[0014] 图10是方框图,表示一个示例处理器系统,可执行它来实现图1所示的示例预取指令插入系统。

具体实施方式

[0015] 尽管下述内容揭示了示例系统,除了其它组件之外,包括在硬件上执行的软件或固件,但应当注意,这类系统仅仅是例示性的,并且不应当视为限制性的。例如,预期的是,任何或所有所揭示的硬件、软件和/或固件组件可排它地在硬件中实现,排它地在软件中实现。
[0016] 一般而言,在此揭示了这样的方法和装置,它们支持预取链接式数据结构,这将硬件性能监控单元与堆和对象布局的垃圾收集器的全局知识紧密地结合起来。特别是,垃圾收集器使用来自性能监控单元的数据高速缓存缺失信息来首先标识通过链接式数据结构的高速缓存缺失强度遍历路径,然后找出沿这些链接式数据结构的对象之间的常规距离。使用该信息,用及时的方式实现预取目标并注入预取以提高存储器子系统性能。
[0017] 在图1的示例中,例示的预取指令插入系统100包括正在运行的应用程序110、虚拟机(VM)类加载器115、性能监控单元(PMU)120、垃圾收集器(GC)130和编译器140。一般而言且如下详细所述,PMU 120(例如硬件)提供长等待时间高速缓存缺失的样本。每个样本包括指令指针(IP)地址和存储器访问的指示对象(referent)有效地址(EA)。GC130将来自PMU 120的原始样本抽象为引起高速缓存缺失的对象,且然后抽象为高级元数据图。高级元数据图包括表示用IP地址标注的对象类型的节点和表示由包含指示对象EA的域和阵列元素导出的关系的边界。在堆遍历期间,GC 130使用对象样本来找出元数据图中表示链接的数据之间长等待时间遍历的边界。GC 130随后将这些边界组成表示在正在运行的应用程序110中引起长等待时间高速缓存缺失的LDS遍历的路径。利用对象放置,GC
130确定沿这些路径的对象之间的常规增量。编译器140将路径中第一对象的地址与这些增量组合起来以实现预取目标。所得到的地址信息用于在适当的代码单元注入预取指令。
结果,由第一对象在遍历路径中经历的缺失等待时间隐藏了后续对象沿该遍历路径的缺失等待时间。
[0018] 正在运行的应用程序110(也称为设置器(mutator))包括编译成处理器(例如图10的处理器1020)能执行的指令的一个或多个方法(即操纵数据的函数、例程或子例程)。本领域普通技术人员将容易地认识到,VM类加载器115配置为维护元数据结构诸如VTable,它包括标识对象的类型(即指示VM在内部如何标识类型)的域。
[0019] PMU 120允许对硬件事件的软件取样。取样速率是软件可控和近似的,以限制粒度。因而,PMU 120不提供连续的缺失序列的快照。主要难题之一是重建连续的缺失序列。来自PMU 120的每个样本形成一个原始三元组,它包括加载IP(即引起缺失的指令)、目标EA(即正在加载的数据的地址)和引起缺失的加载的等待时间。PMU 120可配置为只取样长等待时间高速缓存缺失。因此,PMU 120可消除驻留在处理器芯片上的高速缓存层之间的缺失并且只留下访问芯片外存储器的缺失。此外,GC 130可通过移除具有不落在堆内的地址的样本来消除非堆缺失。
[0020] PMU 120配置为当正在运行的应用程序110在MRTE的控制下执行时标识与高速缓存缺失相关联的样本。每个样本包括与高速缓存缺失相关联的信息,诸如高速缓存缺失的有效地址、引起高速缓存缺失的指令的IP和高速缓存缺失的等待时间信息。有效地址包括由指令能访问的数据的地址。IP包括引起高速缓存缺失的指令(例如加载指令)的地址。等待时间信息包括为高速缓存缺失服务所需要的周期数。
[0021] GC 130配置为完成堆遍历以标记和扫描由正在运行的应用程序110能到达的受管理的堆对象(即数据结构)。本领域普通技术人员将容易地认识到,堆是一个应用程序可用来存储许多数据的一个存储器区域,它基于应用程序的操作而改变。如果GC 130确定一个对象不能从根到达,则堆的这个区域可由其它对象使用。在堆遍历期间,GC 130标识延误信息,使得编译器140可插入预取指令。特别是,GC 130使用与来自PMU 120的样本相关联的对象来收集关于在堆中的延误类型之间的连通性的详细统计。也就是说,GC 130确定一个延误对象或类型是否连接到另一个延误对象或类型。
[0022] 延误类型之间的连通性用于近似正在运行的应用程序110的遍历路径。与该连通性相关联的统计积累在动态元数据表(DMT)中(例如,图5示出DMT 500的一部分)。DMT标识延误类型之间的关系,包括延误类型的共同路径。GC 130在堆遍历期间产生DMT。
[0023] 特别是,GC 130基于从来自PMU 120的样本中的EA标识的延误对象来确定延误类型。对于每个对象,GC 130标识对象的类型。当第一次标识类型时,与该类型相关联的计数初始化为一,而与该类型相关联的累积等待时间设置为高速缓存缺失的等待时间。如果对象的类型以前已经被标识,则与该类型的计数增一,而与该类型相关联的累积等待时间增加高速缓存缺失的等待时间。延误类型的权重是等待时间的总和。在处理全部延误对象之后,GC 130按照累积等待时间排序延误类型。GC 130丢弃对整个等待时间没有实质性贡献的延误类型。
[0024] 编译器140(例如JIT编译器)配置为标识用于基类型的预取点,并且基于由GC130产生的延误信息在预取点处将预取指令插入到正在运行的应用程序110中。
[0025] 在图2和3的示例中,例示的LDS 200包括对象,一般示为对象A 210、对象B 220、对象C 230和对象D 240。每个对象可包括一个或多个引用域。例如,对象A 210可包括引用域f1,对象B 220可包括引用域f2,对象C 230可包括引用域f3。LDS 200是对象的集合,这些对象可使用在前的对象中存在的指针来遍历。遍历LDS 200可在LDS 200中的每个对象上导致长等待时间高速缓存缺失。高速缓存缺失是不避免的,因为LDS 200中的对象的地址是在加载该对象本身之前从在前的对象加载的(即连续相关的)。在不实现在此描述的示例预取指令插入系统100的情况下,LDS 200在遍历期间使高速缓存缺失连续化,如图3所示。例如,位于对象A 210中的引用域f1是在加载对象B 220之前加载的。同样,位于对象B 220中的引用域f2是在加载对象C 230之前加载的,而位于对象C 230中的引用域f3是在加载对象D 240之前加载的。
[0026] 为减少高速缓存缺失等待时间,示例预取指令插入系统100在使用数据之前将数据取到处理器高速缓存中。通常,示例预取指令插入系统100可使用MRTE类型信息和诸如PMU 120的硬件来监控一个或多个样本,使用GC130来放置对象,以及使用编译器140来重新编译方法从而动态地插入预取指令。为例示这些概念,图4的示例元数据图400包括类型“项项”410、类型“串串”420、430和类型“Char array(字符阵列)”440、450。类型“项”410分别通过域“名称名称”460和“brandInfo(品牌信息)”470指向两个类型“串”420、430的实例。域“名称”460通过域“值值”480指向类型“Char array”440的实例。同样,域“brandInfo”470通过域“值”490指向类型“Char array”450的实例。参考图5,GC 130在堆遍历期间产生与LDS 400相关联的DMT 500。在GC 130遍历堆时,GC 130有可能通过使用VTable(它包括来标识对象类型的一个域)中的延误类型标识符域来标识延误类型的实例。当标识这样一个对象时,GC 130确定该对象是否为与来自PMU 120的样本相关联的对象之一。GC 130随后重复通过该对象中的每个引用域来确定一个子类型(即指示对象)是否为另一个不同类型的对象的实例。如果子对象被标识为与延误类型相关联,则与该子对象相关联的两个实例包括四种可能的对象/类型关系:1)类型到类型(T→T),2)类型到对象(T→O),3)对象到类型(O→T)和4)对象到对象(O→O)。
[0027] GC 130跟踪DMT 500中延误类型之间上述对象/类型关系的每一个(即,N个延误类型的每一对的N×N表)。GC 130还跟踪延误类型的每个域,它是指向另一个延误类型的引用域。在LDS 400中,每个元素是表示域的节点的链接列表。这些节点的每一个记录相应于那个特定域的对象/类型信息。DMT 500易于访问,因为LDS 400是基于存储在VTable中的唯一的延误类型标识符来检索的。在堆遍历结束时,DMT 500编码堆连通性和每个延误类型之间的对象/类型关系。
[0028] 例如,DMT 500包括相应于在x轴上的子类型510(即指示对象)的延误类型标识符和相应于在y轴上的父类型520(即源)的延误类型标识符。LDS 400的每个元素相应于连接的延误类型之间的域,或者如果没有域连接到这两个类型,为null(空值)。在一个特定示例中,(type_id2,type_id0)元素由两个节点的链接列表构成,这两个节点包括一个对应于域“名称”的节点,域“名称”将类型“项”连接到类型“串”,并且包括另一个对应于域“brandInfo”的节点,域“brandInfo”也将类型“项”连接到类型“串”。这两个节点还包括在堆遍历期间更新的实例/类型。当由GC130标识一个通过域“名称”的偏移连接指向“串”的“项”的实例的边界时,例如,GC 130基于类型“项”和/或域“名称”是否为延误对象来更新实例/类型计数器。
[0029] 延误边界将父类型连接到子类型并且表示使用父类型中的引用域对子类型的延误加载。GC 130使用DMT 500来标识延误边界。对于每一对延误类型,GC 130检查DMT500来确定堆遍历是否标识了一个连接该对延误类型的边界。如果标识了边界,则GC 130将该经标识的边界的O→O和T→O延误关系累加起来。如果累加和大于一个特定的下限N(即不同对象总数的一小部分),则GC 130将该经标识的边界视为延误边界候选并且计算合成边界权重(CEW):
[0030] CEW=100*O→O+10*T→O+O→T
[0031] CEW为O→O分量提供最高加权,因为O→O分量表示应用遵循经标识的边界的有力证据并且会引起高速缓存缺失。T→O分量是重要的,因为T→O指示一个已知的延误对象如何遵循来自延误类型的边界(例如引用域)。O→T分量不太重要,因为O→T分量提供了经标识边界导致延误对象的较小确定性(例如,在延误类型中的多个域具有相同时间)。GC 130还基于相应的CEW排序延误边界候选来过滤掉除最顶端的边界之外的全部边界。该信息存储在DMT 500中。GC 130将父类型420连接到子类型410,并且传播实例/类型边界信息。结果,每个边界包括指示它对等待时间的贡献的权重。
[0032] 延误路径包括一个或多个延误边界和相关的延误边界,并且表示频繁缺失的LDS的遍历。在延误路径中第一对象的类型是延误基类型。为确定注入预取指令的位置,标识延误基类型和与该延误基类型相关联的加载。GC130通过组合延误边界来产生延误路径。开始时,每个延误边界是一个延误路径。为了使延误路径变长,GC 130用匹配该路径中最后一个边界的子类型的父类型递归地标识边界。一旦标识了每个延误边界的最长路径,由GC130执行的算法就终止。每个路径包括一个权重,该权重等于与该路径相关联的边界的CEW的累加和。该延误路径信息在元数据图400中表示。
[0033] 在图6的示例中,例示的LDS 600包括类型“项”610、类型“串”620、630和类型“Char array”640、650。类型“项”610通过“brandInfo”670的域指向类型“串”的实例。在路径中的每个延误类型与长等待时间缺失IP相关联。因而,路径包括与标识第一高速缓存缺失的基相关联的IP。GC130标识包括这些IP之一的方法来插入预取指令。为标识延误IP,GC 130基于加载延误类型的IP来排序来自PMU 120的数据。GC 130标识一个IP为延误IP,如果该特定IP与大于对延误类型有贡献的高速缓存缺失的给定数量相关联(例如,高速缓存缺失的总数的百分之十)。
[0034] 在图7和8的示例中,例示的堆700包括类型“项”710、类型“串”720和类型“Char array”730。类型“项”710通过域“brandInfo”740指向类型“串”720。类型“串”720通过域“值”750指向类型“Chararray”730。因为对象710、720、730是由GC 130按序放置的,一种一致的增量模式被用来当基指令760的地址(即路径的基)为已知的时候插入预取指令。通过使用增量(即对象710、720、730的每一个彼此之间分开的距离),可避免数据相关性并且允许及时的预取。例如,类型“串”720的存储器地址是基指令760的地址加上类型“项”710的增量770。在另一个示例中,类型“Char array”730的存储器地址是基指令760的地址加上类型“项”710和类型“串”720的增量780。结果,编译器140可使用这些增量来注入类型“串”720和类型“Char array”730的预取,使得预取等待时间覆盖类型“项”710的缺失等待时间,如图8所示。
[0035] GC 130处理从来自PMU 120的样本导出的每个延误对象并且通过添加有效IP和沿着路径缺失的对象的相关联增量的列表来修改路径结构。所有增量与在路径760的基处的对象相关。有效IP相应于加载基延误类型对象的缺失的延误IP。
[0036] 对于每个延误对象,GC 130标识和检查每个延误路径。例如,如果延误对象的类型匹配路径基处的对象类型,则GC 130将该路径标识为引起关注的路径。对于每个引起关注的路径,GC 130在遵循延误对象中的适当链接(即域)的路径中的边界上重复。GC 130确定从路径基对象到每个边界的目标对象的增量。与基延误实例(即路径基对象)相关联的增量和IP组合成柱条(bin)以形成边界直方图。在每个延误对象上重复之后,GC 130概括每个路径的增量和IP的直方图。GC 130检查每个增量柱条并且标识任何包括大于这些实例的阈限(例如大于百分之十)的柱条。将这些增量和IP沿着路径结构插入到元数据图400中。基于该信息,编译器140将预取指令添加到其中第一个实现基对象的地址的适当方法中。结果,LDS中的其它地址的加载指令可在没有更多时延的情况下执行。
[0037] 使用边界指针(frontier-pointer)分配方案,垃圾收集器可产生分配顺序对象放置。对于许多应用,分配顺序导致具有沿延误路径的规则增量的延误对象。然而,边界指针分配方案可受到碎化,这是众所周知的垃圾收集器病状。为保持分配顺序并且还为反击碎化,GC 130可使用滑动压缩。如果GC 130在计算增量之前执行滑动压缩,则GC 130可产生更规则的增量。然而,压缩或者任何其它对象移动,可要求GC更新从PMU 120导出的延误对象以引用延误对象的复制版本。GC 130也可移动对象,使得存储器中的对象布局可引起增量。布局可由延误路径驱动并且由GC 130来标识。在GC 130产生布局之后,预取指令会更有效。
[0038] 图9例示了流程图900,它表示可由处理器执行的用于插入预取指令的机器可读指令。本领域普通技术人员将意识到,这些指令可用任何不同的方法利用存储在任何各种计算机或如易失性或非易失性存储器或其它大容量存储设备(例如软盘、CD和DVD)的机器可读介质上的任何各种不同编程代码来实现。例如,机器可读指令可包含在机器可读介质中,诸如可擦除可编程只读存储器(EPROM)、只读存储器(ROM)、随机存取存储器(RAM)、磁介质、光介质和/或任何其它合适类型的介质。另外,机器可读指令可包含在可编程门阵列和/或专用集成电路(ASIC)中。此外,尽管图9中例示了动作的特定顺序,但本领域的普通技术人员将意识到,这些动作可以按其它时间顺序执行。再次,流程图900仅作为插入预取指令的一种方法的示例而提供。
[0039] 流程图900从GC 130基于一个或多个与来自PMU 110的高速缓存缺失相关联的样本来标识延误对象(方框910)开始。如上所述,延误对象可以是引起长等待时间的对象。每个样本包括一个高速缓存缺失的有效地址、引起该高速缓存缺失的加载指令的IP和该高速缓存缺失的等待时间。特别是,GC 130标识与每个有效地址相关联的延误对象。
[0040] 对于每个延误对象,GC 130标识一个延误类型(方框920)。也就是说,延误对象被抽象到延误类型。特别是,延误类型是与对长等待时间高速缓存缺失有贡献的实例相关联的MRTE类型和/或类。
[0041] 基于延误类型的DMT 500,GC 130标识延误边界(方框930)。特别是,延误边界是以访问的顺序(即指向延误类型)连接两个延误类型的域和/或阵列元素访问。GC 130执行堆遍历以标识由正在运行的应用程序110能到达的来自PMU 210的一个或多个样本的对象。在堆遍历期间,GC 130使用这些对象来收集关于堆中延误类型的实例之间的连通性的统计。连通性用于近似正在运行的应用程序110的延误路径。连通性统计在DMT 500中累积。
[0042] 基于延误边界,GC 130标识延误路径(方框940)。特别是,延误路径是由一个或多个延误边界连接的两个或多个延误类型。对于每个延误边界,从那个特定的边界开始的最长路径是延误路径。
[0043] 对于每个延误路径,GC 130确定增量信息(方框950)。GC 130检查延误对象并且产生基延误类型与其它延误类型之间的增量。GC 130收集每个与基延误类型相关联的延误IP的增量(方框960)。
[0044] 编译器140标识与基类型的加载相关联的预取点(方框970)。特别是,与基延误类型的加载指令相关联的IP被用来标识保证重新编译的方法以包括预取指令。编译器140通过将基延误对象的地址(即基地址)与增量组合来产生预取指令的目标。特别是,编译器140将基地址与增量相加。因此,编译器140在预取点处将预取指令插入正在运行的应用程序110(方框980)。因而,预取指令插入系统100使用与延误路径中的第一对象相关联的高速缓存缺失的等待时间来隐藏延误路径中剩余高速缓存缺失的等待时间。
[0045] 图10是适合于实现在此揭示的方法与装置的示例处理器系统1000的方框图。处理器系统1000可以是服务器计算机、台式计算机、膝上型计算机、笔记本计算机、个人数字助理(PDA)、服务器、因特网设备或任何其它类型的计算设备。
[0046] 图10例示的处理器系统1000提供存储器和I/O管理功能,以及可由处理器1020访问或使用的多个通用和/或专用寄存器、定时器等等。处理器1020使用一个或多个处理器来实现。例如,处理器1020可使用 技术、 技术、TM
Centrino 技术和/或 技术中的一种或多种技术来实现。或者,可使用其它
处理技术来实现处理器1020。处理器1020包括高速缓存1022,它可使用如本领域普通技术人员易于认识到的第一级统一高速缓存(L1)、第二级统一高速缓存(L2)、第三级统一高速缓存(L3)和/或任何其它合适的存储数据的结构。
[0047] 传统上,易失性存储器控制器1036和非易失性存储器控制器1038履行使处理器1020能够通过总线1040访问主存储器1030(包括易失性存储器1032和非易性存储器1034)并与之通信的功能。易失性存储器1032可由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS动态随机存取存储器(RDRAM)和/或任何其它类型的随机存取存储器设备来实现。非易失性存储器1034可使用闪存、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)和/或任何其它类型的存储器设备来实现。
[0048] 处理器系统1000还包括耦合到总线1040的接口电路1050。接口电路1050可使用任何类型的众所周知的接口标准诸如以太网接口、通用串行总线(USB)、第三代输入/输出接口(3GIO)接口和/或任何其它合适类型的接口来实现。
[0049] 一个或多个输入设备1060连接到接口电路1050。输入设备1060允许用户将数据和命令输入到处理器1020。例如,输入设备1060可由键盘、鼠标、触敏显示器、跟踪板、跟踪球、异构点(isopoint)和/或声音识别系统来实现。
[0050] 一个或多个输出设备1070也连接到接口电路1050。例如,输出设备1070可由显示设备(例如,发光显示器(LED)、液晶显示器(LCD)、阴极射线管(CRT)显示器、打印机和/或扬声器)来实现。因而接口电路1050除了这些以外一般还包括图形驱动卡。
[0051] 处理器系统1000还包括一个或多个大容量存储设备1080以存储软件和数据。这样的大容量存储设备1080的示例包括软盘和驱动器、硬盘驱动器、光盘和驱动器以及数字多功能盘(DVD)和驱动器。
[0052] 接口电路1050还包括如调制解调器或网络接口卡的通信设备以实现通过网络与外部计算机交换数据。处理器系统1000与网络之间通信链路可以是任何类型的网络连接,如以太网连接、数据订户线(DSL)、电话线、蜂窝电话系统、同轴电缆等等。
[0053] 对输入设备1060、输出设备1070、大容量存储设备1080和/或网络的访问一般由I/O控制器1014以常规方式来控制。特别是,I/O控制器1014履行使处理器1020能够通过总线1040和接口电路1050与输入设备1060、输出设备1070、大容量存储设备1080和/或网络通信的功能。
[0054] 尽管图10所示的组件被描绘成处理器系统1000内的独立方框,但由这些方框中的一些履行的功能可集成到单个半导体电路内或者可使用两个或多个独立的集成电路来实现。例如,尽管I/O控制器1014、易失性存储器控制器1036和非易失性存储器控制器1038被描绘成独立的方框,但本领域普通技术人员将容易地意识到,I/O控制器1014、易失性存储器控制器1036和非易失性存储器控制器1038可集成到单个半导体电路内。
[0055] 尽管已经在此描述了某些示例方法、装置和制造品,但本发明的覆盖范围不限于此。相反,本发明覆盖确切地落在所附权利要求书内的所有方法、装置和制造品,无论是在文字上还是在等价方案的原则上。