使用指令地址映射绕过加载指令的存储器访问的制作方法

文档序号:18831396发布日期:2019-10-09 03:33阅读:195来源:国知局
使用指令地址映射绕过加载指令的存储器访问的制作方法

执行计算机程序指令可以包括将数据存储在物理寄存器中。在程序执行期间,存储在物理寄存器中的数据可能需要存储在存储器位置中,并且存储在存储器位置中的数据可能需要被加载到物理寄存器中。在微体系结构设计(例如,中央处理单元(cpu))中,指令执行单元更靠近物理寄存器而不是存储器。因此,将数据从存储器位置(甚至高速缓冲存储器位置)加载到物理寄存器中通常比从另一物理寄存器复制数据花费更长的时间。



技术实现要素:

在本公开的一个或多个示例实施例中,公开了一种用于绕过加载指令的存储器访问的方法。该方法包括至少部分地通过访问由与加载指令相关联的指令地址(ia)索引的第一数据结构确定对应于与加载指令相关联的加载ia的预测ia,并利用预测ia的至少一部分以i)访问第二数据结构以确定存储与加载指令相关联的值的第一物理寄存器或ii)访问第三数据结构以代替访问第二数据结构以便获得与加载指令相关联的值。所述方法还包括至少部分地通过将第二物理寄存器设置为与加载指令相关联的值执行预测加载。

在本公开的一个或多个其他示例实施例中,公开了一种用于绕过加载指令的存储器访问的系统。该系统包括至少一个存储计算机可执行指令的存储器和至少一个处理器,其被配置成访问至少一个存储器并执行计算机可执行指令以执行一组操作。这些操作包括至少部分地通过访问由与加载指令相关联的指令地址(ia)索引的第一数据结构确定对应于与加载指令相关联的加载ia的预测ia,并利用预测ia的至少一部分以i)访问第二数据结构以确定存储与加载指令相关联的值的第一物理寄存器或ii)访问第三数据结构以代替访问第二数据结构以便获得与加载指令相关联的值。所述操作还包括至少部分地通过将第二物理寄存器设置为与加载指令相关联的值执行预测加载。

在本公开的一个或多个其他示例实施例中,公开了一种用于绕过加载指令的存储器访问的计算机程序产品,其包括可由处理电路读取的非暂时性存储介质,存储介质存储由处理电路执行的指令以使方法被执行。该方法包括至少部分地通过访问由与加载指令相关联的指令地址(ia)索引的第一数据结构确定对应于与加载指令相关联的加载ia的预测ia,并利用预测ia的至少一部分以i)访问第二数据结构以确定存储与加载指令相关联的值的第一物理寄存器或ii)访问第三数据结构以代替访问第二数据结构以便获得与加载指令相关联的值。所述方法还包括至少部分地通过将第二物理寄存器设置为与加载指令相关联的值执行预测加载。

附图说明

参考附图阐述详细描述。提供附图仅用于说明的目的,并且仅描绘了本公开的示例实施例。提供附图是为了便于理解本公开,并且不应视为限制本公开的广度、范围或适用性。在附图中,附图标记的最左边的数字标识附图标记首次出现的附图。使用相同的附图标记表示相似但不一定一样或相同的部件。然而,不同的附图标记也可用于识别类似的组件。各种实施例可以利用除附图中示出的元件或组件之外的元件或组件,并且一些元件和/或组件可以不存在于各种实施例中。取决于上下文,使用单数术语来描述组件或元件可以包含多个这样的组件或元件,反之亦然。

图1是示意性地描绘根据本公开的一个或多个示例实施例的执行预测加载以绕过加载指令的存储器访问的框图。

图2是根据本公开的一个或多个示例实施例的用于执行预测加载以绕过加载指令的存储器访问的说明性方法的过程流程图。

图3是根据本公开的一个或多个示例实施例的用于确定是否执行预测加载以绕过加载指令的存储器访问的说明性方法的过程流程图。

图4是被配置为实现本公开的一个或多个示例实施例的说明性计算设备的示意图。

具体实施方式

本发明的示例实施例尤其包括用于执行绕过对加载指令的存储器访问的预测加载的系统、方法、计算机可读介质、技术和方法。在某些示例实施例中,识别被预测为存储将由加载指令加载的值的第一物理寄存器,并且将存储在第一物理寄存器中的值复制到第二物理寄存器以供消费者操作使用。可以识别对应于加载指令的预测存储指令,并且可以访问映射表以获得与预测的存储指令相关联的数据。数据可以包括第一物理寄存器的标识以及生成/修改存储在第一物理寄存器中的值的生成器操作的标识(例如,指令标识符)。作为执行预测加载的结果,从生成器操作获得所需数据,并且可以绕过执行加载指令以及将数据从存储器位置复制到物理寄存器所需的高速缓冲存储器访问。

图1是示意性地描绘根据本公开的一个或多个示例实施例的执行预测加载以绕过加载指令的存储器访问的框图。图2是根据本公开的一个或多个示例实施例的用于执行预测加载以绕过加载指令的存储器访问的说明性方法200的过程流程图。图3是根据本公开的一个或多个示例实施例的用于确定是否执行预测加载以绕过加载指令的存储器访问的说明性方法300的过程流程图。以下将结合图1描述图2和3中的每一个。

方法200和/或方法300的每个操作可以由图1中描绘的一个或多个组件(例如,引擎)执行。这些组件可以以硬件、软件和/或固件的任何组合来实现。在某些示例实施例中,这些组件中的一个或多个可以至少部分地实现为包含或者是包括计算机可执行指令的一个或多个程序模块的集合的软件和/或固件,所述计算机可执行指令当由处理电路执行时,导致执行一个或多个操作。这里描述的被配置为实现本公开的示例实施例的系统或设备可以包括一个或多个处理电路,每个处理电路可以包括一个或多个处理单元或节点。计算机可执行指令可以包括计算机可执行程序代码,当由处理单元执行时,该计算机可执行程序代码可以使得包含在计算机可执行程序代码中或由计算机可执行程序代码引用的输入数据被访问和处理,以产生输出数据。

首先参照图1,描绘了引擎集合,包括预测引擎102,寄存器跟踪引擎104,读/写引擎106和指令执行引擎108。这些引擎可以以硬件、软件和/或固件的任何组合来实现。在某些示例实施例中,这些引擎可以在具有图4中所示的说明性配置的一个或多个设备上执行。

现在结合在一起参照图1和图2,在框202,可以执行指令执行引擎108的计算机可执行指令以使得执行生成器操作,该生成器操作生成/修改与已经在微体系结构中定义的该组架构寄存器128的特定架构寄存器相关联的值。为了便于解释,在下文中可以使用附图标记128来表示上面引用的特定架构寄存器。在某些示例实施例中,可以将一组架构寄存器指定为微架构设计的一部分。这组架构寄存器可以映射到微体系结构中的一组物理寄存器。在某些示例实施例中,多个物理寄存器可以大于或等于多个架构寄存器。这样,架构寄存器128可以映射到不同的物理寄存器以用于不同的指令和/或可以同时映射到多个物理寄存器。更具体地,与架构寄存器128相关联的值可以同时存储在用于不同指令和/或多个物理寄存器的不同物理寄存器中。

作为非限制性示例,生成器操作可以将两个寄存器中的值相加并将得到的和存储在寄存器之一中。例如,如果r1表示架构寄存器128,则生成器操作可以是r1=r1+r2,其中r2是不同的架构寄存器。如前所述,架构寄存器128(例如,r1)最初可以映射到例如物理寄存器20(pr20)。类似地,架构寄存器r2可以映射到物理寄存器22(pr22)。作为生成器操作的结果,可以对存储在pr20和pr22中的值求和,并且可以将得到的和存储在物理寄存器21(pr21)中。物理寄存器pr21可以映射到架构寄存器128(r1),从而将和与架构寄存器128(r1)相关联。

在某些示例实施例中,可以执行寄存器跟踪引擎104的计算机可执行指令以维护/修改架构寄存器和物理寄存器之间的映射。在有序机器中,架构寄存器的数量可以等于物理寄存器的数量。这是因为指令按照在有序机器中发出的顺序执行,因此,不需要维护比架构寄存器更多的物理寄存器。然而,在无序机器中,可以在较旧指令之前执行更新/更年轻的指令,因此,需要保持比架构寄存器更多数量的物理寄存器。

在物理寄存器的数量超过架构寄存器的数量的那些示例实施例中,可以维持架构寄存器和物理寄存器之间的映射。架构寄存器和物理寄存器之间的这种映射可以反映在存储在寄存器映射表138中的数据中,该寄存器映射表138由寄存器跟踪引擎104维护/更新。寄存器映射表138可以由架构寄存器索引,并且可以为每个索引的架构寄存器存储物理寄存器的标识,该物理寄存器存储与该架构寄存器相关联的值。关于用于将指令发送到无序引擎的有序解码/分派,仅需要对架构寄存器的最旧引用。但是,在指令流水线(pipeline)的刷新(flush)中,流水线必须恢复到先前状态,单独的架构寄存器可能是不够的。相反,在这样的场景中,也可能需要关于哪个指令对应于发生刷新的点的知识。这可以使用微操作指令id来实现。

现在更具体地参考方法200的框202,执行的生成器操作可以导致生成值并将其存储在映射到架构寄存器128的物理寄存器130中。或者,或者,生成器操作可以导致对存储在物理寄存器130中的现有值的修改。存储由生成器操作生成/修改的值的物理寄存器130的标识可以存储在与相应的架构寄存器128相关联的寄存器映射表138中。也就是说,寄存器映射表138可以作为生成器操作的函数(function)被写入。

一般而言,寄存器映射表138可以在任何给定时间仅将单个物理寄存器与架构寄存器相关联。然而,为了适应执行指令流水线的刷新的潜在需要,寄存器映射表138可以存储架构寄存器和多个物理寄存器之间的关联。例如,假设已经分派了一组指令(例如,指令1-100)可能已发布这些指令的某些子集。在发出的指令中,较旧的指令可能仍处于执行过程中,而较新的指令可能已完成执行。例如,较旧的指令可以是复数平方根计算等,而较新的指令可以是相对简单的加载指令。应当注意,虽然较新的指令可以在较旧的指令之前完成执行,但是较新的指令可能不会被完成和核查,直到较旧的指令完成执行,以便保持指令按顺序执行的外观(appearance)。

在示例场景中,可以在例如指令15处采取预测分支。如果稍后确定分支被错误地预测(例如,当不应该采取分支时采取分支,反之亦然),分支指令之后的流水线中的所有指令(例如,指令16-100)都是不正确的。这将触发刷新事件,根据该刷新事件,在分支指令之后的流水线中的所有指令被刷新并且从分支指令的正确目标地址开始恢复流水线。

在某些示例实施例中,上述描述的分支指令可以在涉及相同架构寄存器的两个指令之间发生。例如,分支指令之前的指令可以将与架构寄存器r7相关联的值分配给架构寄存器r1,并且分支指令之后的指令可以将与架构寄存器r2相关联的值分配给r1。应当理解,与这些架构寄存器相关联的值可以存储在不同的物理寄存器中。如果如上所述错误地预测分支,那么与架构寄存器r1相关联的值需要恢复到与架构寄存器r7相关联的值(而不是与架构寄存器r2相关联的值)。为了适当地恢复架构寄存器r1的值,寄存器映射表138需要维护物理寄存器和架构寄存器之间的映射历史。特别地,在上面介绍的示例中,寄存器映射表138可以存储架构寄存器r1和对应于架构寄存器r7的物理寄存器之间的映射,以及架构寄存器r1和对应于架构寄存器r2的物理寄存器之间的映射,因此如果发生刷新事件,则可以恢复与架构寄存器r1相关联的先前值。另外,可以与每个映射相关联地存储相应的指令标识符,以基于在指令流水线中何处发生刷新来识别要恢复的值。应该理解的是,上述示例仅仅是说明性的而非穷举的。例如,寄存器映射表138可以存储给定架构寄存器和物理寄存器之间的任何数量的映射。

在框204处,可能发生事件,该事件要求存储在物理寄存器中的寄存器值存储在存储器中。这种事件的示例可以是执行要求将存储在物理寄存器中的寄存器值复制到存储器的函数。例如,如果在微体系结构中定义了16个架构寄存器,但算法需要17个值,则所有值都不能同时与16个架构寄存器相关联。因此,至少一个寄存器值可以溢出到存储器中以在算法的执行期间释放一个或多个架构寄存器。在其他示例实施例中,在执行函数之前可能不知道函数所需的寄存器的数量,或者可能存在执行函数可能破坏寄存器值的风险,在这种情况下,寄存器值可能溢出到存储器。

在框206,可以执行指令执行引擎108的计算机可执行指令以执行存储指令以将与架构寄存器128相关联的值存储到存储器中的位置。存储器中的位置可以是例如高速缓存存储器中的位置,例如l1高速缓存或l2高速缓存。参考前面介绍的相同示例,存储指令的执行可以使存储在pr21中的值(映射到架构寄存器128的物理寄存器130)存储在存储器位置。

在某些示例实施例中,可以在预测转发映射表122中生成与所执行的存储指令相对应的条目(下文中简称为映射表122)。更具体地,可以执行读/写引擎106的计算机可执行指令以执行写操作126以在映射表122中生成条目。在某些示例实施例中,映射表122可以实现为具有多个读写端口的寄存器模块(regfile)。寄存器模块可以被配置为适应任何合适数量的条目(例如,32、64等)。可以为每个条目分配一定数量的比特。例如,对应于在框206处执行的存储指令的条目可以包括指定用于存储虚拟指令地址(ia)标签的特定数量的比特(例如,10比特)。映射表122可以由存储ias的至少一部分索引。

虚拟ia标签可以是与存储指令相关联的完整ia124的一部分。用于存储虚拟ia标签的比特数可以反映标签使用较少比特数可能导致的混叠(aliasing)与由于用于标签的比特数较少而存储在映射表122中的条目数量的增加之间的权衡(tradeoff)。用于标签的比特数也可以至少部分地由可用于映射表122的存储量、功率约束、频率约束和/或成本约束来确定。对应于存储指令的条目还可以包括用于存储存储指令的指令标识符(例如,微操作id)的某些数量的比特(例如,8比特);用于存储与存储指令对应的生成器操作的指令标识符的某些数量的比特(例如8比特);和用于存储存储(并且可以预测当前存储)由生成器操作生成/修改的值的物理寄存器的标识的某些数量的比特(例如,8比特),其中经由执行存储指令这样的值被复制到存储器位置。应当理解,映射表122的特定实现包括为每个条目和每个条目内的每个数据字段分配的比特数仅仅是说明性的而非穷举的。

在框208,可以将寄存器值从存储器传送到物理寄存器。作为示例,函数调用的返回发生时,在块204复制到存储器的寄存器值可以恢复到物理寄存器。然而,在某些示例实施例中,可以通过执行预测的加载来绕过将值从存储器位置加载到物理位置的加载指令。

具体地,在框210处,可以执行预测引擎102的计算机可执行指令以预测在框206执行的存储指令与要执行的加载指令相关并利用存储指令的ia来识别存储与架构寄存器128相关联的值的物理寄存器。更具体地,预测引擎102可以识别来自预测阵列114的存储ia118,其与预测与加载指令相关的存储指令相关联(或者在恒定加载处理的情况下的相关加载ia,其将在本公开中稍后更详细地描述)。在某些示例实施例中,存储指令可以包含多个微操作存储。在这样的示例实施例中,从预测阵列114获得的加载预测不仅指定存储ia118,还指定存储指令的uop位置。在存储指令是单个微操作的那些示例实施例中,可以使用默认值0。然后,预测引擎102可以利用相关ia(在恒定加载的情况下,存储ia118或加载ia)以访问映射表122并识别存储与相关指令相关联的值的物理寄存器(例如,与架构寄存器128相关的值)。

例如,再次参考前面介绍的示例,所识别的物理寄存器目的地可以是pr21,其被映射到架构寄存器128,并且其中作为执行对应于预测的存储指令的生成器操作的结果存储了值。稍后将参考图3的说明性方法在本公开中更详细地描述该过程。应当理解,尽管映射表122被示出为在预测引擎102外部,但是在某些示例实施例中,映射表122可以包含在预测引擎102内。

在框212处,可以执行指令执行引擎108的计算机可执行指令以通过将在框210处识别的物理寄存器中的值设置为当前映射到架构寄存器128的另一物理寄存器来执行预测的加载。再次参考前面介绍的示例,存储在pr21中的值可以被复制到物理寄存器30(pr30),其中pr30当前被映射到架构寄存器128。在某些示例实施例中,在执行预测的加载之前,可能需要满足各种约束。例如,与预测的存储指令和加载指令之间的相关性相关联的置信度值可能需要满足阈值以便继续预测的加载。另外,可能需要满足指令之间的各种依赖性约束。稍后将参考图3的说明性方法300在本公开中更详细地描述这些约束。3。

在某些示例实施例中,可以执行验证加载以验证预测的加载已经导致正确的值被存储在当前映射到架构寄存器128的物理寄存器中,使得确保消费者操作在正确的值。具体地,在框214处,可以执行指令执行引擎108的计算机可执行指令以通过从存储器检索与架构寄存器128相关联的值来启动验证加载。如前所述,作为执行存储指令的结果,所述值可能已被存储到存储器位置。再次参考前面介绍的示例,可以从该存储器位置[x]检索由存储指令存储到特定存储器位置[x]的pr21中的值。

在框216处,可以将所检索的值与存储在框210处识别的物理寄存器中的值进行比较。如果值不同,则这可以指示预测的加载导致错误的值被存储在当前映射到架构寄存器128的物理寄存器中。因此,在框218处,可以从流水线刷新加载指令和指令流水线中比加载指令更年轻的所有指令。可以以这种方式刷新流水线,特别是对于无序机器,其中可能已经执行了比加载指令更年轻的指令,并且可能依赖于存储在与预测的存储指令相关联的物理寄存器中的不正确的值。在刷新流水线之后,可以在块220通过从存储器检索与架构寄存器128相关联的值而不是执行预测的加载来执行加载指令。为了确保不再次执行预测的加载,算法的实现可以在管线刷新发生之后立即阻止预测加载的执行。

如将参考图3的说明性方法300更详细地描述,在某些示例实施例中,验证加载的结果可以用于更新与预测的存储指令和加载指令之间的相关性相关联的置信度值。例如,如果从存储器位置检索的值等于存储在与预测的存储指令相关联的物理寄存器中的值(框216处的肯定确定),则可以增加置信度值。相反,如果值不同(否定确定),则可以降低置信度值。此外,在某些示例实施例中,可以仅执行预测的加载,并且可以不按照确认数据正确性的其他手段来执行验证加载。

更具体地,代替执行验证加载,可以替代地更新映射表122以反映存储在存储器中的值如何变化。特别地,可以提供一种机制以确保如果存储器中对应于物理寄存器值的内容被将值存储在存储器中的处理器核心或由另一个处理器核心改变,则不执行预测的加载。这种机制可以包括为处理器核心提供能够获得存储到特定存储器位置或一系列存储器位置的专有权的能力。

例如,假设多线程程序在两个处理器核心-核心a和核心b上运行。进一步假设核心a具有写入存储器位置x的专有权,但核心b需要能够写入到相同的存储器位置的能力。另外假设存储指令和加载指令将在核心a上执行(在下文中称为存储指令a和加载指令a)并且存储指令和加载指令将在核心b上执行(在下文中称为存储指令b和加载指令b)。核心a可以执行存储指令a以将第一值存储到存储器位置x。然后,核心b可以执行存储指令b,这导致第二个不同的值存储在存储器位置x中。如果然后执行预测加载而不是加载指令a,则将从物理寄存器而不是正确的期望值(即,存储在存储器位置x中的第二值)检索第一值。

这样,如果处理器核心(例如,核心a)不再具有写入特定存储器位置或一系列存储器位置的专有权限,然后,可以更新映射表122中对应于由处理器核心执行的存储指令的条目(例如,存储指令a)以指示该条目已被无效。更具体地,可以设置或翻转比特以指示存储在映射表122中的条目中标识的物理寄存器中的值不再有效。因此,参考上面介绍的示例,将不对加载指令a执行预测的加载,因为当相关的存储指令ia(例如,用于存储指令a的ia)用于访问映射表122中的条目时,条目将无效。

图2的说明性方法200假设执行了预测的加载。然而,如前所述,可能需要评估各种约束以确定是否可以执行预测的加载。图3是根据本公开的一个或多个示例实施例的用于确定是否执行预测加载以绕过加载指令的存储器访问的说明性方法300的过程流程图。

相互参照图1和图3,框302,可以使用与加载指令和存储指令相关联的操作数地址110来确定加载指令和存储指令之间的数据配对。指令地址是指示存储器中存储程序指令的位置的存储器地址,而操作数地址是指示存储器中存储由程序指令操作的数据的位置的存储器地址。在某些示例实施例中,程序指令和程序指令所使用的数据可以存储在相同的高速缓存(例如,共享高速缓存)中或不同的高速缓存(例如,指令高速缓存和数据高速缓存)中。

更具体地,在框302处,可以访问数据配对表112。数据配对表112可以由与程序指令(例如,存储指令,加载指令等)相关联的数据的操作数地址的至少一部分索引。当执行存储指令时,可以写入数据配对表112。具体地,可以在数据配对表112中生成条目,数据配对表112存储与存储指令相关联的操作数地址的至少一部分以及用于存储指令的存储ia,所述存储指令与操作数地址标签(operandaddresstag)相关联(例如,与存储指令相关联的操作数地址的一些其他部分)。

例如,假设64比特操作数地址,其中比特0是最高有效位而比特63是最低有效位,比特54-63可以用作索引。理论上,比特0-53然后可以存储为操作数地址标签。然而,因为数据配对表112是性能阵列而不是功能阵列,所以可以将较少数量的比特(例如,比特32-53)用于操作数地址标签,以便在混叠量之间取得平衡,这是可接受的,并且数据配对表112能够容纳所需的条目数。也就是说,如果操作数地址标签使用的比特数越大,则会出现更少的混叠,但数据配对表112将在给定表的总最大面积/比特预算的情况下,还可以容纳更少数量的条目。如果数据配对表112中的两个条目具有相同的操作数地址索引以及相同的操作数地址标签,但是对应于不同的存储指令,则可能发生混叠,在这种情况下,错误的存储指令可以与加载指令配对。由于混叠导致不正确的值被加载到物理寄存器中的预测加载可以通过执行验证加载或前面描述的任何其他示例机制来解决。

仍然参考框302,可以使用与加载指令相关联的操作数地址的一部分来读取数据配对表112。特别地,与加载指令相关联的操作数地址部分可用于定位数据配对表112中具有匹配操作数地址索引的条目。然后可以将与加载指令相关联的操作数地址标签与存储在匹配条目中的操作数地址标签进行比较。如果操作数地址标签匹配,则可以识别加载指令和存储指令之间的潜在数据配对112。

在某些示例实施例中,可以针对每个存储指令写入数据配对表112。也就是说,可以在数据配对表112中为每个存储指令生成条目,其中该条目由操作数地址的至少一部分索引,其中数据通过存储指令存储在存储器中,并且其中条目包括存储指令的ia。然而,在某些示例实施例中,可以在断电学习模式下将数据写入数据配对表112,根据该模式,可以不为每个存储指令写入数据。

例如,在涉及在其中预测了分支的代码区域内的重复代码(例如,循环)的场景中,可能反复遇到循环内的存储指令。因此,可能没有必要在每次遇到存储指令时在数据配对表112中生成用于存储指令的条目,因为可能已经创建了条目,并且存储指令可能已经与预测阵列114中的加载指令配对,因此,通过在数据配对表112中生成附加条目,不可能实现额外的学习。然而,在某些示例实施例中,用于学习的内容仍然可以在有预测分支的代码区域中存在循环的情况下有限地捕获。例如,可以在数据配对表112中为每10个存储指令中的1个生成条目。关于断电学习的上述讨论同样适用于恒定加载。

在框304,可以将存储指令和加载指令之间的数据配对存储为预测阵列114中的条目。数据配对可以与置信度值相关联地存储,置信度值反映与配对相关联的置信水平。更具体地,置信度值可以指示加载指令的执行将导致从存储在存储器位置中的存储器位置检索相同值的置信度,作为执行与加载指令配对的存储指令的结果。

在某些示例实施例中,诸如分支目标缓冲器(btb)表的现有分支预测结构可以用于存储否则将存储在预测阵列114中的数据。例如,btb表可以由分支指令的ia索引,并且可以存储与分支ia相关联的目标ia。目标ia是在执行分支时要执行的目标指令的ia。在某些示例实施例中,每个分支ia和目标ia配对可以作为单独条目存储在btb表中。在其他示例实施例中,btb表可以包括多关联条目,由此可以在给定代码块(例如,64字节代码块)内跟踪多个分支。

在可以针对给定代码块跟踪多个分支的那些示例实施例中,可以在所有这样的分支指令之间共享可以存在于该代码块中的每个分支指令的ia的一部分。例如,对于其中使用64比特表示ia的微体系结构,共享标签可以是最高有效比特的一些初始部分(例如,比特0到x)。对于代码块中的每个分支指令,该共享标签可以仅在btb表中存储一次,并且可以与针对每个分支指令的目标ia和用于将分支指令彼此区分的标签相关联地存储(例如,在给定索引(x+1)到y的情况下,最低有效比特(y+1)到63表示代码块内的偏移)。凭借这种标记共享,btb表中提供了额外的存储空间,用于按照固定的总比特数存储存储ias和加载ias。例如,如果btb表可以在给定代码块内跟踪多达3个分支指令,并且在代码块中恰好少于3个分支指令,然后,分支指令之间的标签共享(其定义了共享标签比特的分支的数量)允许btb表中未用于存储分支ia/目标ia关联的其他条目用于存储加载ia/存储ia关联。特别是可以存储加载ia来代替分支ia,并且可以存储存储ia以代替目标ia。以这种方式,可以维护合并的btb表,其存储分支指令和目标指令配对以及加载指令和存储指令配对,从而避免维护单独的预测器阵列114的需要。

在框306处,可以识别ia116。ia116可以被提供作为预测引擎102的输入。在块308,可以执行预测引擎102的计算机可执行指令以使用ia116访问预测阵列114以确定对应于ia116的预测存储ia118。具体地,可以使用指令地址的至少一部分来索引预测阵列114。这样,ia116的至少一部分可用于确定预测阵列114是否包括ia116与与存储指令相关联的ia之间的数据配对。如果存在这样的数据配对,则可以将存储指令视为与具有ia116的指令相对应的预测存储指令。

在某些示例实施例中,在使用ia116访问预测阵列114之前,可以首先解码具有ia116的指令以确定它是加载指令。仅当指令已经被解码并且被确定为加载指令时访问预测阵列114可以提供功率节省。然而,这样做也可能减慢程序执行速度,因为只有在指令已经被解码并被确定为加载指令时才会发生对预测阵列114的访问。在其他示例实施例中,可能不需要首先解码指令以确定它是加载指令,而是可以针对所获取的每个指令访问预测阵列114。然而,在这样的示例实施例中,如果在解码时最终确定其ia116用于访问预测阵列114的指令是加载指令,则仅执行预测的加载。

在解码指令之前访问预测阵列114的那些示例实施例中,预测阵列114可以至少部分地与指令获取(同步模式)同时访问,或者可选地,如果预测引擎102在指令提取之前运行,可以至少部分地与btb表的访问同时访问预测阵列114(其通常在指令获取之前发生)。如果例如在l1高速缓存中存在高速缓存未命中并且必须访问l2高速缓存以获取指令,则指令获取可能滞后于预测引擎102。作为另一示例,如果需要按顺序发生指令获取但是可以无序地访问预测阵列114,则指令获取可能滞后于预测引擎102。

在某些示例实施例中,除了预测的存储指令的ia之外,还可以从预测阵列114检索与预测的存储指令相关联的指令标识符(例如,微操作id)。更具体地,指令可以被分成多个微操作ids。例如,存储指令实际上可以包含多个存储,每个存储具有其自己的微操作id。微操作id可用于在多存储指令内区分存储指令,并且还可用于识别多存储指令中与加载指令相关的特定存储指令。

在框310处,可以执行读/写引擎106的计算机可执行指令以使用预测的存储ia和/或与预测的存储指令118相关联的指令标识符来访问映射表122并执行读取操作以在映射表122中检索对应的匹配条目。存储在映射表122中的与预测的存储指令相对应的匹配条目可以包括先前描述的任何示例类型的数据。特别地,映射表122中的匹配条目可以包括与预测的存储指令相关联的虚拟ia标签(例如,预测的存储指令ia118的至少一部分);预测的存储指令的指令标识符(例如,微操作id);与预测的存储指令对应的生成器操作的指令标识符;以及存储(并且预测当前存储)由生成器操作生成/修改的值的物理寄存器的标识,其中通过执行预测的存储指令将该值复制到存储器位置。应当理解,存储在物理寄存器中的实际值不存储在预测阵列114中,而是可以存储在寄存器文件中。

在框312处,可以执行预测引擎102的计算机可执行指令以确定是否满足一个或多个依赖性约束。示例依赖性约束可以是在执行生成器操作之后发生预测的加载。这可以通过识别与寄存器/依赖性数据134中的生成器操作相关联的指令标识符并将生成器操作的指令标识符与与预测的加载相关联的指令标识符进行比较来确定,以确保已经执行了生成器操作。另一示例依赖性约束可以是在验证加载之前执行预测的存储指令。这可以类似地通过将预测的存储指令的指令标识符与验证加载的指令标识符进行比较来确定。

响应于框312处的否定确定,方法300可再次从框312继续,其中再次确定是否满足一个或多个依赖性约束。可以重复执行框312处的确定,直到做出满足所有依赖性约束的肯定确定。响应于框312处的肯定确定,方法300可前进到框314,其中可执行预测引擎102的计算机可执行指令以确定置信度值是否满足阈值。根据实施方式,如果第一值大于或等于第二值或者如果第一值小于或等于第二值,则第一值可以满足第二值。可以做出框312处的决定以确保仅在与加载指令和预测的存储指令配对112相关联的置信度值满足阈值时执行预测的加载,从而表明适当的置信度,即作为与预测的存储指令相关联的生成器操作的结果存储在物理寄存器中的值是与如果执行加载指令将从存储器检索的值相同的值。反过来,这表示如果执行预测的加载并且绕过实际加载指令的执行,则消费者将对正确的值进行操作的合适置信度。

响应于框314处的肯定确定,可以在框316处执行指令执行引擎108的计算机可执行指令,以至少部分地基于在映射表122中的匹配条目中识别的物理寄存器来应用预测加载。特别地,可以从寄存器映射表138中识别当前映射到架构寄存器128的另一物理寄存器130,并且可以执行预测的加载以将存储在映射表122中的匹配条目中标识的物理寄存器中的值复制到当前映射到架构寄存器128的物理寄存器130。此外,可以从寄存器/依赖性数据134中识别寄存器之间的任何依赖性。例如,设置映射表122中的匹配条目中标识的物理寄存器的值可以取决于设置其他物理寄存器的值。

在某些示例实施例中,方法300可以从框316进行到框318。另外,响应于框314处的否定确定,方法300可以跳过框316并直接前进到框318。在框318,可以执行指令执行引擎108的计算机可执行指令以执行验证加载。如前所述,验证加载可以包括检索存储在由加载指令指定的存储器位置处的值,并将检索的值与用于执行预测加载的物理寄存器值进行比较。

在框320处,可以至少部分地基于验证加载是否与预测加载匹配来更新与加载指令和预测存储指令配对112相关联的置信度值,或者更具体地,通过验证加载从存储器检索的值是否等于用于执行预测加载的物理寄存器值。如果值不匹配,则可以减小置信度值,使得对于与预测阵列114中的预测的存储指令相关的加载指令执行未来预测的加载的可能性较小。相反,如果值匹配,则置信度值可以增加,使得更有可能对与预测的存储指令相关的加载指令执行未来的预测加载。应当理解,如果在框314处做出否定的确定,则在框316处不执行预测的加载。然而,在框320处仍然可以更新置信度值。具体地,尽管在框314处在否定确定的情况下可能不执行预测加载,但仍可进行预测。然后,在框318处执行验证加载时,可以基于预测是否正确在框320处更新置信度值。如果预测是正确的,则可以增加置信度值。如果置信度值变得足够强,则可以基于预测最终在将来执行预测加载。

根据本公开的示例实施例执行预测加载改善了指令执行性能,因为其涉及代替存储器访问而执行的寄存器到寄存器复制操作。寄存器操作比内存访问涉及更少的执行周期。这样,消费者操作能够作为预测加载的结果对存储在物理寄存器中的值进行操作,而不必等待实际加载指令执行存储器访问并将检索到的值存储在物理寄存器中。根据本公开的示例实施例执行预测加载还允许无序指令执行。特别地,可以执行依赖于与队列中的较旧加载指令相关联的值的指令队列中的最近指令,而旧加载指令的验证仍然等待完成,例如,如果预测的加载是执行以从物理寄存器获得更新近的指令需要执行的值。

在某些示例实施例中,可以维护和访问模式表以处理预测加载可能导致不正确值的情况,因为存在关于哪个存储指令可以与加载指令相关的模糊性。例如,假设以下伪代码表示执行的条件代码:如果x=1,则在iay执行存储指令以在存储器位置[x]存储值1,否则在iaz执行存储指令在内存位置[x]存储值2。因此,取决于条件的结果(即,是否x=1,因此,执行哪个存储指令),可以将不同的值存储在存储器位置[x]。进一步假设该条件码之后是加载指令,以将存储器位置[x]处的内容加载到物理寄存器中。在该示例中,可能无法执行预测的加载,因为预测器阵列114将加载ia映射到单个存储ia,并且在这种情况下,存在关于哪个存储ia应该与加载ia相关的模糊性。只有当条件的结果已知时,才会在程序执行期间解决这种歧义。

可以与预测阵列114并行访问的模式表可以用于处理这样的示例场景。模式表可以存储与预测阵列114类似的内容(例如,存储ias),但是可以与预测阵列114不同地索引。具体地,虽然可以使用ia(例如,加载ia)来索引预测阵列114,模式表可以由具有表示历史条件结果的模式的ia的哈希索引。例如,模式可以指示最后x个分支指令的结果。可以使用全局历史向量(ghv)来表示模式,其中ghv中的每个比特值指示是否采用历史分支指令。

因此,在某些示例实施例中,虽然可以使用ia(例如,加载ia)来对预测阵列114进行索引以尝试识别相关指令的ia(例如,存储ia,相关加载指令的ia等),ia还可以用模式(例如,ghv)进行哈希以获得用于对模式表进行索引的哈希值。如果哈希值的匹配位于模式表中,则可以使用存储在模式表中的匹配条目中的对应ia(例如,存储ia,相关加载指令的ia等)来代替从访问预测阵列114获得的结果(如果有的话)。

已经结合识别与加载指令相关的存储指令主要描述了本公开的示例实施例。然而,在某些示例实施例中,将存储指令与加载指令相关联可能是困难的。更具体地,在某些示例实施例中,可以重复执行加载指令以从存储器中的相同位置加载值(这里称为恒定加载)。例如,正在执行的代码可以包括循环,该循环需要重复执行恒定加载指令以多次从相同存储器位置加载相同数据。在这样的示例场景中,在该存储器位置处存储该数据的存储指令可能已经在更早的时间执行,使得难以将存储指令与恒定加载相关联。

在这样的示例实施例中,可以利用数据配对表112来使得能够结合恒定加载执行预测的加载。更具体地,数据配对表112先前已被描述为存储存储指令的ia;然而,加载ia也可以存储在数据配对表112中,以使得能够结合恒定加载执行预测加载。特别地,如果当数据配对表112中没有匹配时,当与加载指令相关联的操作数地址的至少一部分被索引到表112时,可以在数据配对表112中生成新条目,其包括与加载指令相关联并且存储恒定加载的ia的操作数地址的至少一部分作为其索引,并且存储恒定加载的ia。然后,当再次执行恒定加载时,可以定位数据配对表112中的匹配,并且可以将加载指令-加载指令配对存储在预测阵列114中。预测阵列114中的条目可以被指定为加载指令-加载指令配对或作为存储指令-加载指令配对,无论哪种情况。

在某些示例实施例中,加载指令可以取决于在更早的时间发生的存储指令,使得物理寄存器(其值由存储指令存储到存储器)可能不再存储加载指令所需的值。在这样的示例实施例中,即使基于加载指令的ia从预测阵列114获得预测的存储ia,也不会在映射表122中存在对应于该预测的存储ia的条目,或者相应的条目将是无效。在任一种情况下,都不能使用与预测的存储指令相关联的物理寄存器来执行预测的加载。

可以提供ia存储数据阵列136以适应诸如上述的场景,其中物理寄存器可以在执行存储指令和要执行加载指令之间被重新利用或退役,从而导致映射表122中的条目对应于要变为无效的存储指令。ia存储数据阵列136可以存储与存储指令相关联的数据,作为与存储指令相关联的ia的函数。

更具体地,ia存储数据阵列136可以由存储ia索引,而不是存储例如被假定为保存与存储指令相关联的值的物理寄存器的标识(如映射表122那样),ia存储数据阵列136可以存储相应的值本身。这样,当执行存储指令时,除了将值写入高速缓存之外,该值还可以存储在ia存储数据阵列136中并由存储指令的ia索引。以这种方式,ia存储数据阵列136可以用作映射表122的备份。也就是说,如果对应于存储ia的映射表122条目已经无效(指示在条目中标识的物理寄存器不再存储正确的值),则可以使用存储ia来访问ia存储数据阵列136以尝试在ia存储数据阵列136中定位条目。如果匹配条目位于ia存储数据阵列136中,则数据可以从匹配的条目中检索并用于执行预测的加载。

ia存储数据阵列136可以具有比映射表122更大的存储容量(即,能够容纳更多条目),但是数据可以晚于映射表122写入ia存储数据阵列136。这是因为需要对要写入ia存储数据阵列136的数据执行存储指令,而在执行生成器操作之后,存储在映射表122中的条目中标识的物理寄存器中的数据可以是可用的,而不需要执行存储指令。

另外,在某些示例场景中,映射表122条目可以是无效的,但是先前存储在物理寄存器中的数据可能尚未被写入ia存储数据阵列136。例如,处理器设计可以允许并行执行多个存储指令,并且将要写入队列的相应数据最终存储在存储器中。然而,写入ia存储数据阵列136可能是带宽受限的,使得存储指令的执行与将数据写入ia存储数据阵列136之间存在延迟。因此,在上述场景中,可能存在在映射表122条目无效时和在ia存储数据阵列136中生成条目之间的延迟。在另一示例场景中,映射表122条目可能无效并且数据也可能在ia存储数据阵列136中不可用,因为ia存储数据阵列136中的条目可能已被对应于具有与感兴趣的存储指令相同的索引的不同存储指令的数据(由于混叠)覆盖。

在其中映射表122条目无效并且物理寄存器数据未存储在ia存储数据阵列136中的那些示例场景中,是否执行预测加载可取决于何时确定加载是预测加载的定时。例如,如果在访问映射表122和ia存储数据阵列136之前确定加载指令是预测加载,并且映射表122条目已经无效并且ia存储数据阵列136中不存在条目,然后仍然可以执行预测的加载,但是会导致不正确的数据被加载到寄存器中,因此,如前所述,将需要流水线刷新。相反,如果在确定加载指令将是预测加载之前访问映射表122和ia存储数据阵列136,则如果映射表122条目已经无效并且ia存储数据阵列136中不存在条目,可以不执行预测的加载。在某些示例实施例中,如果预测阵列114至少部分地与指令获取并行被访问,则前一场景更可能,而如果预测阵列114至少部分地并行或者作为指令解码的功能被访问,则后一场景更可能。

在某些示例实施例中,为了缩短物理寄存器已被改变用途(例如,映射表122条目已被无效)与将寄存器值写入ia存储数据阵列136之间的延迟,在regfile被无效时,寄存器值可以被复制到ia存储数据阵列136。另外,如果需要额外的时间来访问ia存储数据阵列136,则可以在指令流水线中更早地读取ia存储数据阵列136。

在某些示例实施例中,可以结合恒定加载来写入ia存储数据阵列136。如前所述,如果没有找到数据配对表112中的加载指令的操作数地址匹配(例如,没有与加载指令配对的潜在存储指令),则可以将加载指令的ia写入数据配对表中。然后,当再次发生恒定加载指令时,在数据配对表112中检测到匹配,并且将加载指令-加载指令配对写入预测阵列114,从而使加载指令合格以进行预测。在加载指令有资格进行预测时,与加载指令相关联的数据可以被写入ia存储数据阵列136,并且可以由加载指令的ia索引。这样,当再次发生恒定加载指令时,可以从预测阵列114获得匹配加载ia,并且用于访问ia存储数据阵列136中的对应数据,而不必访问映射表122。

贯穿本公开内容,已经使用了术语阵列和表格。例如,阵列可以是通常限于1或2个读取端口的数据结构,使得通常最多两次读取或一次读取和一次写入可以被执行。表可以包含比数组更广泛的数据结构组。例如,表可以是具有比可以以任何读写组合定义的阵列更多端口的regfile。阵列可能比regfile更密集。虽然某些数据结构已经被描述为阵列或表,但是应该理解,本公开不限于这些类型的数据结构,并且可以使用任何合适类型的数据结构来实现被描述为阵列或表的任何数据结构。

另外,在本公开的某些示例实施例中,术语“加载指令”或其变体可以指代单个加载指令。在本公开的其他示例实施例中,术语加载指令可以指代可以在复杂指令集计算(cisc)架构中使用的复杂指令内的多个不同微操作中的加载。例如,体系结构可以定义添加指令,其中添加的值之一来自存储器。在这种情况下,加载指令可以是添加指令内的微操作。

本公开的示例实施例提供了各种技术特征,技术效果和/或技术改进。例如,本公开的示例实施例提供了改进指令执行性能的技术效果。本公开的示例实施例还提供了改进无序指令执行的技术效果。这些技术效果至少部分地通过如下技术特征来实现:确定预测与加载指令相关的指令,获得与对应于预测的相关指令的生成器操作相关联的数据,以及执行预测的加载,其允许消费者利用存储在获得的数据中识别的物理寄存器中的值,同时避免与执行加载指令相关的存储器访问。预测的相关指令可以是存储指令或加载指令(在恒定加载的情况下)。技术特征还包括仅使用加载指令的ia索引的预测阵列,预测恒定加载的能力,btb表和预测阵列的合并,执行验证加载的能力,提供模式表和ia存储数据阵列以增加执行预测加载的机会的数量,等等。这些技术特征至少部分地提供了改进的指令执行性能的技术效果,因为将数据从一个物理寄存器复制到另一个物理寄存器比访问存储器位置和将存储在存储器位置的数据复制到物理寄存器需要更少的执行周期。这些技术特征提供了至少部分地改进传统的无序指令执行的技术效果,因为它们提供了用于执行预测加载的各种非常规和非传统机制。因此,上述技术特征和所产生的技术效果构成了对计算机功能的改进。应当理解,由本公开的示例实施例提供的计算机和计算机技术的功能的技术特征,技术效果和改进的上述示例仅仅是说明性的而非穷举的。

本文描述了本公开的一个或多个说明性实施例。这些实施例仅仅是对本公开的范围的说明,而不是以任何方式进行限制。因此,本文公开的实施方案的变化,修改和等同物也在本公开的范围内。

图4是被配置为实现本公开的一个或多个示例实施例的说明性计算设备400的示意图。图1中描绘的设备架构堆栈100可以对应于计算设备400的说明性配置。虽然这里可以以单数形式描述设备400,但是应当理解,可以提供设备400的多个实例,并且结合设备400描述的功能可以分布在这样的多个实例中。

在说明性配置中,设备400可以包括一个或多个处理器402,一个或多个存储器设备404(这里统称为存储器404),一个或多个输入/输出(“i/o”)接口406,一个或多个网络接口408和数据存储器410。设备400还可以包括功能性地耦合设备400的各种组件的一个或多个总线412。

总线412可以包括系统总线、存储器总线、地址总线或消息总线中的至少一个,并且可以允许在设备400的各种组件之间的信息(例如,数据(包括计算机可执行代码))的交换。总线412可以包括但不限于存储器总线或存储器控制器、外围总线、加速图形端口等。总线412可以与任何合适的总线架构相关联,包括但不限于工业标准架构(isa)、微通道架构(mca)、增强型isa(eisa)、视频电子标准协会(vesa)架构、加速图形端口(agp)架构、外围组件互连(pci)架构、pci-express架构、个人计算机存储卡国际协会(pcmcia)架构、通用串行总线(usb)架构等等。

存储器404可以表示图1中描绘的物理存储器102以及可以包括易失性存储器(当被供电时保持其状态的存储器),例如随机存取存储器(ram)和/或非易失性存储器(即使在没有供电时也保持其状态的存储器),例如只读存储器(rom)、闪存、铁电ram(fram)等。这里使用的术语,持久数据存储可以包括非易失性存储器。在某些示例实施例中,易失性存储器可以实现比非易失性存储器更快的读/写访问。然而,在某些其他示例实施例中,某些类型的非易失性存储器(例如,fram)可以实现比某些类型的易失性存储器更快的读/写访问。

在各种实现中,存储器404可以包括多种不同类型的存储器,诸如各种类型的静态随机存取存储器(sram)、各种类型的动态随机存取存储器(dram)、各种类型的不可改变的rom、和/或rom的可写变体,例如电可擦除可编程只读存储器(eeprom)、闪存等。存储器404可以包括主存储器以及各种形式的高速缓冲存储器,诸如指令高速缓存、数据高速缓存、转换后备缓冲器(tlb)等。此外,诸如数据高速缓存的高速缓冲存储器可以是被组织为一个或多个高速缓存等级(l1,l2等)的多层级高速缓存。

数据存储器410可以包括可移动存储和/或不可移动存储,包括但不限于磁存储、光盘存储和/或磁带存储。数据存储器410可以提供计算机可执行指令和其他数据的非易失性存储。存储器404和数据存储器410,可移动和/或不可移动,是这里使用的术语的计算机可读存储介质(crsm)的示例。

数据存储器410可以存储计算机可执行代码、指令等,这些代码和指令可以加载到存储器404中并且可由处理器402执行以使得处理器402执行或启动各种操作。数据存储器410可以另外存储可以被复制到存储器404的数据,以供处理器402在执行计算机可执行指令期间使用。此外,由处理器402执行计算机可执行指令而产生的输出数据可以最初存储在存储器404中,并且最终可以复制到数据存储器410以用于非易失性存储。

更具体地,数据存储器410可以存储一个或多个操作系统(o/s)414(其可以包括o/s414并且可以包括一个或多个虚拟o/s实例);一个或多个数据库管理系统(dbms)416,被配置为访问存储器404和/或一个或多个外部数据存储器(未示出);一个或多个程序模块、应用程序、引擎、计算机可执行代码、脚本等,例如预测引擎418、寄存器跟踪引擎420、读/写引擎422和指令执行引擎424。被描绘为存储在数据存储410中的任何组件可以包括软件、固件和/或硬件的任何组合。软件和/或固件可以包括计算机可执行指令(例如,计算机可执行程序代码),其可以被加载到存储器404中以由一个或多个处理器402执行以执行前面结合相应命名引擎描述的任何操作。

尽管未在图4中示出,数据存储器410还可以存储由设备400的组件使用的各种类型的数据(例如,数据配对112、预测阵列114、映射表122、ia存储数据阵列136等)。存储在数据存储器410中的任何数据可以被加载到存储器404中以供处理器402在执行计算机可执行指令时使用。此外,存储在数据存储器410中的任何数据可能潜在地存储在外部数据存储器中,并且可以经由dbms416访问并加载到存储器404中以供处理器402使用以执行计算机可执行指令。

处理器402可以被配置为访问存储器404并执行加载在其中的计算机可执行指令。例如,处理器402可以被配置为执行设备400的各种程序模块、应用程序、引擎等的计算机可执行指令,以根据本公开的一个或多个实施例,引起或促进执行各种操作。处理器402可以包括能够接受数据作为输入,根据存储的计算机可执行指令处理输入数据,以及生成输出数据的任何合适的处理单元。处理器402可包括任何类型的合适处理单元,包括但不限于中央处理单元、微处理器、精简指令集计算机(risc)微处理器、复杂指令集计算机(cisc)微处理器、微控制器、专用集成电路(asic)、现场可编程门阵列(fpga)、片上系统(soc)、数字信号处理器(dsp)等。此外,处理器402可以具有任何合适的微体系结构设计,其包括任何数量的组成组件,例如寄存器、多路复用器、算术逻辑单元、用于控制对高速缓冲存储器的读/写操作的高速缓存控制器、分支预测器、等等。处理器402的微体系结构设计可以能够支持各种指令集中的任何一种。

现在参考描绘为存储在数据存储410中的其他说明性组件、o/s414可以从数据存储410加载到存储器404中,并且可以提供在设备400上执行的其他应用软件与设备400的硬件资源之间的接口。更具体地,o/s414可以包括一组计算机可执行指令,用于管理设备400的硬件资源并用于向其他应用程序提供公共服务。在某些示例实施例中,o/s414可以包括或以其他方式控制被描绘为存储在数据存储410中的一个或多个程序模块的执行。o/s414可以包括现在已知的或将来可以开发的任何操作系统,包括但不限于任何服务器操作系统、任何大型机操作系统或任何其他专有或非专有操作系统。

dbms416可以被加载到存储器404中并且可以支持用于访问、检索、存储和/或操纵存储在存储器404中的数据,存储在数据存储器410中的数据和/或存储在外部数据存储中的数据的功能。dbms416可以使用各种数据库模型中的任何一种(例如,关系模型、对象模型等),并且可以支持各种查询语言中的任何一种。dbms416可以访问在一个或多个数据模式中表示的数据并存储在任何合适的数据存储库中。设备400可以经由dbms416访问的外部数据存储可以包括但不限于数据库(例如,关系、面向对象等)、文件系统、平面文件、分布式数据存储,其中数据存储在计算机网络,对等网络数据存储器等的多于一个节点上。

现在参考设备400的其他说明性组件,输入/输出(i/o)接口406可以促进设备400从一个或多个i/o设备接收输入信息以及从设备400到一个或多个i/o设备的信息输出。i/o设备可以包括各种组件中的任何一种,例如具有触摸表面或触摸屏的显示器或显示屏;用于产生声音的音频输出设备,例如扬声器;音频捕获设备,例如麦克风;图像和/或视频捕获设备,例如相机;触觉单位;等等。这些组件中的任何一个可以集成到设备400中或者可以是分开的。i/o设备还可以包括例如任何数量的外围设备,例如数据存储设备、打印设备等。

i/o接口406还可以包括用于外部外围设备连接的接口,诸如通用串行总线(usb)、firewire、thunderbolt、以太网端口或可以连接到一个或多个网络的其他连接协议。i/o接口406还可以包括到一个或多个天线的连接,以经由无线局域网(wlan)(例如wi-fi)无线电、蓝牙和/或无线网络无线电(例如能够与诸如长期演进(lte)网络、wimax网络、3g网络等无线通信网络通信的无线电)连接到一个或多个网络。

设备400还可以包括一个或多个网络接口408,设备400可以通过该网络接口与各种其他系统、平台、网络、设备等中的任何一个进行通信。网络接口408可以实现例如经由一个或多个网络与一个或多个其他设备的通信。这样的网络可以包括但不限于任何一种或多种不同类型的通信网络,例如有线网络、公共网络(例如,因特网)、专用网络(例如,帧中继网络)、无线网络、蜂窝网络、电话网络(例如,公共交换电话网络),或任何其他合适的私有或公共分组交换或电路交换网络。这样的网络可以具有与其相关联的任何合适的通信范围,并且可以包括例如全球网络(例如,因特网)、城域网(man)、广域网(wan)、局域网(lan)、或个人局域网(pan)。此外,这样的网络可以包括通信链路和相关联的网络设备(例如,链路层交换机、路由器等),用于通过任何合适类型的介质传输网络流量,包括但不限于同轴电缆、双绞线(例如,双绞铜线)、光纤、混合光纤同轴(hfc)介质、微波介质、射频通信介质、卫星通信介质或其任何组合。

应该理解的是,存储在数据存储器410中的图4中描绘的程序模块仅仅是说明性的而非穷举的,并且被描述为由任何特定模块支持的处理可以替代地分布在多个模块、引擎等上,或者由不同的模块、引擎等执行。此外,可以提供各种程序模块、脚本、插件、应用程序编程接口(api(s))或本地托管在设备400上和/或托管在可通过一个或多个网络访问的其他计算设备上的任何其他合适的计算机可执行代码,以支持由图4中描绘的模块提供的功能和/或附加或替代功能。此外,功能可以以任何合适的方式模块化,被描述为由特定模块执行的处理可以由任何数量的程序模块的集合来执行,或者被描述为由任何特定模块支持的功能可以至少部分地由另一模块支持。另外,支持本文描述的功能的程序模块可以根据任何合适的计算模型跨任意数量的设备400执行,例如,客户端-服务器模型,对等模型等等。此外,图4中描述的任何模块所支持的任何功能都可以在任意数量的设备上至少部分地以硬件和/或固件实现。

应进一步了解,在不脱离本发明的范围的情况下,装置400可包括超出所描述或描绘的那些的替代和/或额外硬件,软件或固件组件。更具体地,应当理解,被描绘为形成设备400的一部分的软件、固件或硬件组件仅仅是说明性的,并且可以不存在一些组件或者可以在各种实施例中提供附加组件。虽然已经将各种说明性模块描绘和描述为存储在数据存储410中的软件模块,但是应当理解,可以通过硬件,软件和/或固件的任何组合来实现被描述为由模块支持的功能。还应当理解,在各种实施例中,每个上述模块可以表示所支持的功能的逻辑分区。描述该逻辑分区是为了便于解释功能,并且可能不代表用于实现功能的软件、硬件和/或固件的结构。因此,应当理解,在各种实施例中,被描述为由特定模块提供的功能可以至少部分地由一个或多个其他模块提供。此外,在某些实施例中可以不存在一个或多个所描绘的模块,而在其他实施例中,可以存在未示出的附加程序模块和/或引擎,并且可以支持所描述的功能和/或附加功能的至少一部分。

方法200或方法300的一个或多个操作可以由具有图4中描绘的说明性配置的设备400来执行,或者更具体地,由可以在这样的设备上执行的一个或多个程序模块、引擎、应用程序等。然而,应该理解,可以结合许多其他设备配置来实现这样的操作。

在图2或图3的说明性方法中描述和描绘的操作可以以本公开的各种示例性实施例中所期望的任何合适的顺序实施或执行。另外,在某些示例实施例中,至少一部分操作可以并行实施。此外,在某些示例实施例中,可以执行比图2或图3所描述的操作更少、更多或不同的操作。

尽管已经描述了本公开的特定实施例,但是本领域普通技术人员将认识到,许多其他修改和替换实施例都在本公开的范围内。例如,关于特定系统、系统组件、设备或设备组件描述的任何功能和/或处理能力可以由任何其他系统、设备或组件来执行。此外,虽然已经根据本公开的实施例描述了各种说明性实现和架构,但是本领域普通技术人员将理解,对本文描述的说明性实现和架构的许多其他修改也在本公开的范围内。另外,应当理解,本文描述为基于另一操作、元件、组件、数据等的任何操作、元件、组件、数据等可另外基于一个或多个其他操作、元件、组件、数据等。因此,短语“基于”或其变体应该被解释为“至少部分地基于”。

本技术方案可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本技术方案的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是--但不限于--电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本技术方案操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本技术方案的各个方面。

这里参照根据本技术方案实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本技术方案的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1