事件触发的可编程预取器的制作方法

文档序号:15285813发布日期:2018-08-29 00:04阅读:134来源:国知局

本公开涉及数据处理系统领域。更具体地,本公开涉及向高速缓存预取数据(将被操控的值和/或程序指令)。



背景技术:

提供预取电路来基于识别存储器中的常规存取方式(例如,跨步存取)而预取数据是已知的。但是,这种预取电路对于在很多工作负荷(例如,指针跟踪、压缩稀疏度量)中发现的非常规存取方式不好用。为了实现对于这些工作负荷的更好的预取性能,一种方法是在正被执行的程序中嵌入预加载指令。但是,在实际中,这些预加载指令可能会由于程序的执行环境的巨大差异而无效,这些差异可以由例如,程序在不同的硬件平台上被执行、硬件平台改变状态(例如,在不同的dvfs操作点操作)、硬件平台在不同模式下操作(例如,当前在英国剑桥的arm有限公司设计的big.little系统中使用的大核还是小核)、缓存架构中的各种元件的延迟、数据是否已经存在于缓存架构中的其他缓存中、以及可以根据后面的特定执行路径执行的指令的数目不同导致。由于这些因素在不同系统之间不同,甚至在运行时由于系统在给定时刻的特定状态而不同,所以编码到将被执行的程序中的预加载指令具有非常有限的可用性。预加载指令可以在给定环境下很快地预取数据而不需要占用缓存容量,或者可以很慢地预取数据而导致延迟执行。另外,这些预加载指令在被执行之前需要完全计算出目标负载的地址,这使得对于包括多个查找表的数据的存取通常会导致管道停滞从而限制这些机制的功效。



技术实现要素:

本公开的至少一些实施例提供了一种用于处理数据的装置,包括:

主处理器,该主处理器执行主程序;

高速缓存,该高速缓存耦合到所述主处理器;

事件检测电路,该事件检测电路检测由所述主处理器执行所述主程序导致、指示将由所述主处理器使用的数据的事件;

其他处理器,该其他处理器响应于所述事件检测电路检测到所述事件中的一个或多个事件而触发其他程序由所述其他处理器执行;以及

预取电路,该预取电路响应于所述其他程序而触发把将由所述主处理器使用的所述数据预取到所述高速缓存;

其中,所述事件检测电路包括可编程过滤电路,该可编程过滤电路检测匹配可编程过滤特性的存储器操作;并且

所述可编程过滤特性包括针对一个或多个可编程存储器地址范围中的存储器地址的存储器操作。

本公开的至少一些实施例提供了一种装置,包括:

主处理器装置,用于执行主程序;

高速缓存装置,用于存储数据并耦合到所述主处理器装置;

事件检测装置,用于检测由所述主处理器装置执行所述主程序导致、指示将由所述主处理器装置使用的数据的事件;

其他处理器装置,响应于所述事件检测装置检测到所述事件中的一个或多个事件而用于触发其他程序由所述其他处理器装置执行;以及

预取电路装置,响应于所述其他程序而用于触发把将由所述主处理器装置使用的所述数据预取到所述高速缓存装置;

其中,所述事件检测电路包括可编程过滤电路,该可编程过滤电路检测匹配可编程过滤特性的存储器操作;并且

所述可编程过滤特性包括针对一个或多个可编程存储器地址范围中的存储器地址的存储器操作。

本公开的至少要一些实施例提供了一种控制数据预取的方法,包括:

利用主处理器执行主程序;

将数据存储在耦合到所述主处理器的高速缓存中;

检测由所述主处理器执行所述主程序导致、指示将由所述主处理器使用的数据的事件,所述事件包括针对一个或多个可编程存储器地址范围中的存储器地址的存储器操作;

响应于检测到所述事件中的一个或多个事件,触发其他程序由其他处理器执行;以及

响应于所述其他程序,触发把将由所述主处理器装置使用的所述数据预取到所述高速缓存。

附图说明

现在将参考附图,仅通过示例描述示例实施例,其中:

图1示意性地示出了包括主处理器和由多个事件驱动的其他处理器控制的预取电路的集成电路;

图2示意性地示出了相干共享存储器系统;

图3是示意性地示出事件检测的流程图;

图4是示意性地示出其他程序调度的流程图;

图5是示意性地示出预取触发的流程图;以及

图6a和6b示意性地示出了在主处理器执行指针跟踪主程序期间的预取。

具体实施方式

图1示意性地示出了包括用于执行主程序的主处理器4的集成电路2的一部分。主处理器4耦合到等级1数据缓存6和等级1指令缓存8(它们可以被提供以转换查找缓冲器(未示出)),该等级1数据缓存和该等级1指令缓存提供对于将被操控的值以及将被执行的程序指令的低延迟存取。等级1数据缓存6和等级1指令缓存8是(统一地)耦合到等级2高速缓存并进一步耦合到主存储器的存储器架构的一部分,它们可以形成在同一个集成电路2上也可以不形成在同一个集成电路2上。

分支预测电路10生成用于控制主处理器4对程序指令的推测性的无序执行的预测分支行为信号。主处理器4是相对高性能且高功耗的处理器。事件检测电路12用于检测由主处理器4执行主程序导致的事件。事件检测电路12可经由配置寄存器14编程,以用作检测例如,匹配预定过滤特性的存储器操作的可编程过滤电路,该存储器操作至少包括针对一个或多个可编程存储器地址范围中的存储器地址的存储器操作。事件检测电路12还可以用来检测附加类型的事件。在所示出的示例中,事件检测电路12连接到等级1数据缓存6并且检测可以包括以下一个或多个事件的缓存事件:发起将数据获取到等级1数据缓存6的缓存获取事件、将所获取的数据加载到等级1数据缓存6中的缓存填充事件、缓存逐出事件、缓存命中事件、以及缓存未命中事件。事件检测电路所使用的可编程过滤特性还可以采取在特定情况中有用的其他形式,例如,检测以下各项中的一项或多项:存储器操作是否与从存储器(主存储器)读取数据有关、存储器操作是否与向存储器存储数据有关、存储器操作的数据大小、与存储器操作相关联的安全许可、和/或存储器操作是否是缓存提示操作。在一些实施例中,发送到存储器以获取数据的存储器事务可以被标记(可以重复使用已经提供用于互连的事务标记),然后在使用匹配(在发起事务时存储的)预定标记值的标记识别返回数据时生成事件。与事件检测电路12可以响应的等级1数据缓存6相关联的其他类型的事件包括对等级1数据缓存6的相干窥探,该相干窥探在等级1数据缓存6为共享相干存储器系统的一部分时和/或预取数据本身可以与使用配置寄存器14配置的可编程过滤器匹配时进行。以上仅代表可以被事件检测电路12检测到的事件的一些示例。例如,可以被检测到的其他示例包括来自分支预测电路10的预测分支行为信号、中断信号、来自整个系统中的其他位置的系统事件(例如,指示对于相关联的图形处理单元的动作的系统事件)、以及系统作为整体的其他状态。

可以选择由事件检测电路检测到的事件来指示主处理器4在执行主程序时将使用的数据。检测出的事件与将使用的数据之间的关联可以是间接的并且可以不是完全准确的,例如,由于主处理器4的行为/工作负荷的需要有限时间量的改变,以使预取机制可以适应这些改变。检测出的事件和主处理器将使用的数据之间的间接关联是为什么难以使用静态的硬件预取机制(例如,步幅预测)来提供能够适应执行环境和运行时间改变的灵活标量方式的有效预取。

在图1所示的示例中,事件检测和预取与等级1数据缓存6相关联,其中,将由主处理器4执行的程序指令操控的值被预取到等级1数据缓存6。但是,本公开的技术可以替代地、另外地、或者等同地用于缓存在等级1指令缓存8中的程序指令的预取。本技术覆盖这些可能。

由事件检测电路12检测出的事件可以被用来触发由多个可编程的其他处理器16、18之一执行其他程序,其中,这些可编程的其他处理器可以在多个特权等级中的例如,与主处理器4相同的特权等级进行操作,即,它们同时并以相同方式在特权等级之间移动。但是,并不是检测到的所有事件都可以被用来触发这样的其他程序的执行。检测到的一些事件可以被用于使用统计分析电路20来确定一个或多个统计值的目的。统计分析电路20还可以响应于来自由可编程的其他处理器16、18执行的一个或多个其他程序的一个或多个输入。计算出的统计值可以采用各种不同的形式,这些形式包括指数加权的移动平均值、最小值、和/或最大值。也可以计算其他统计值。可以利用可编程的配置寄存器(未示出)以类似于事件检测电路12的方式来配置统计分析电路20。取决于所应用的配置,统计分析电路20可以计算期望的统计值。例如,统计分析电路20可以用于确定指示从主存储器向等级1数据缓存6获取数据所花费的时间的存储器延迟值。该存储器延迟值根据其他程序所使用的特定预取控制技术,可以具有指数加权的移动平均值、最小值、或者最大值的形式。由其他处理器16、18执行的一个或多个其他程序能够在执行其他程序时读取和/或写入由统计分析电路20确定的统计值,从而根据这些读取值来控制所触发的预取。

由事件检测电路12检测出的一些事件可以单独或者组合用于触发可编程的其他处理器16/18执行一个或多个其他程序。当检测到这样的触发事件时,进入队列电路22以识别这些事件(可选的,可以利用由随后触发的一个或多个其他程序读取并使用的元数据)。调度电路24从队列电路22读取排队的事件,并且发起由可用的可编程的其他处理器16、18执行适当的其他程序。如果所有可编程的其他处理器16、18都处于活跃状态(非空闲),则调度电路24在使用队列电路22中的下一记录触发其他程序的执行的其他实例之前等待可编程的其他处理器16、18之一变为不活跃状态。在队列电路22中排队的事件可以被发送给可编程的其他处理器16、18中的任意一个,因此可编程的其他处理器16、18都应该能执行相同的一个或多个其他程序。在一些实施例中,单个其他程序可以被提供,并用于分析其所响应的事件的性质并相应地改变其处理。在其他实施例中,可以根据与队列电路22中排队的事件相关联的参数来触发由调度电路24调度供执行的不同的其他程序(与使用中断向量触发一个或多个中断处理例程类似)。

其他高速缓存26经由转换查找缓冲器耦合到可编程的其他处理器16、18,并且用于存储将由可编程的其他处理器16、18执行的一个或多个其他程序和/或将由可编程的其他处理器16、18操控的数据值中的一者的至少一部分。当可编程的其他处理器16、18响应于检测到的一个或多个事件完成其他程序的执行时,它们返回到空闲状态直到它们下一次被调度电路24调度执行其他程序。系统中存在的可编程的其他处理器16、18的数目可以根据处理预取控制所需要的容量而缩放,这又取决于预计的控制预取的困难和/或强度等级。

由可编程的其他处理器16、18执行的其他程序对检测到的事件进行分析,并触发预取电路28将预计将被主处理器4使用的数据预取到等级1数据缓存6中。所需要的从虚拟地址到物理地址的任意数据转换由预取电路28和等级1数据缓存6之间的路径中的数据转换查找缓冲器30执行。由可编程的其他处理器16、18执行的其他程序可以相对较短,但是仍然能够提供难以利用纯粹基于硬件的预取机制实现的灵活且精细的控制预取的方式。

其他程序可以与主处理器4执行的程序完全分开,这使得它们操作的方式有更大的可缩放性和灵活性。当其他程序完成触发预取或其他操作时,其返回到其可用于进行其他工作的空闲状态。相反,对主程序的动作进行镜像的辅助程序将暂停并等待其下一个数据项,而不可用于其他用途。这种事件驱动的架构还使得其他程序的性能能够随着可编程的其他处理器16和18的数目而基本线性地缩放。这是因为,触发其他程序的事件相互独立,因此其他程序的执行可以由多个其他处理器并行进行。通过这种事件驱动的方法使能的多个其他程序(或者程序的部分)还允许更稳健地以不同特性(例如,延迟)对多个同时的数据流的预取进行控制。

其他程序能够检测并响应于系统的当前状态,以改变它们控制预取行为的方式,例如,可以使用由统计分析电路20确定的当前估计的存储器延迟,以经由预取电路28触发“刚刚准时”到达等级1数据缓存6的数据的预取,供主处理器4使用(这有助于避免由于数据缺失导致的主处理器4的暂停,并且过快地获取预取数据不一定消耗等级1数据缓存6的容量)。其他程序可以控制预取方式的其他示例包括指针跟踪从而使得一旦数据被返回到等级1数据缓存6就可以被事件检测电路12检测到,然后可以在无需主处理器4或主程序达到任意特定状态的情况下发起与下一指针相关联的下一数据的预取。

如前所述,主处理器4可以是高性能且高功耗的处理器,例如,超标量无序处理器。相反,可编程的其他处理器16和18可以是相对低性能且低功耗的处理器,因为它们需要执行专门用于发起预取电路28进行适当的预取操作的任务的相对简单的其他程序。在与提供主处理器4相关联的开销的背景下,与提供其他处理器16和18相关联的开销较小。

如前所述,可以被事件检测电路12检测出的事件类型之一是相干窥探。相干窥探出现在共享相干存储器(例如,图2示意性地示出的系统的共享相干存储器)的操作背景中。图2示出了分别具有相关联的等级1高速缓存40、42、44、46的多个处理器32、34、36、38,其中,这些等级1高速缓存能够在本地存储数据或程序指令。处理器32、34、36、38连接到共享等级2高速缓存48和共享主存储器系统。相应的等级1高速缓存40、42、44、46可以保存来自存储器系统中的给定存储器地址的数据的副本。如果另一处理器随后希望例如,修改数据值,则必须使保存该数据值的原始高速缓存中保存的该数据值的副本无效,然后将该数据值的副本获取到希望修改该数据值的处理器的等级1高速缓存。该行为是使用相干控制电路50来控制的,该相干控制电路经由窥探总线52来交换窥探消息。事件检测电路12可以观察这些窥探消息,以便给出可以与事件检测电路12相关联的系统部分中需要的预取行为有关的行为的指示。

图3是示意性地示出事件检测电路12执行事件检测的流程图。在步骤54,处理等到匹配配置寄存器14配置的过滤条件为止。当匹配这样的过滤条件时,处理进行到步骤56。在步骤56,将事件(以及可选的表征该事件的相关元数据)写入队列电路22,以使得其可以后续触发可编程的其他处理器16和18之一执行其他程序。处理随后返回到步骤54。队列电路22具有有限的容量,并且在其有限的容量已满时,可以通过删除老事件释放空间来存储新事件。预取不影响执行的正确性,仅影响性能。

图4是示意性地示出调度电路24在触发可编程的其他处理器16和18执行一个或多个其他程序时的操作的流程图。在步骤58,在队列电路22保持为空的同时处理等待。当队列电路22不为空(至少有一个事件排队)时,处理进行到步骤60。在步骤60,处理等到可编程的其他处理器16和18之一可用于响应于事件被调度而执行一个或多个其他程序(即,可编程的其他处理器16和18之一变为空闲或者已经空闲)为止。当在步骤60检测出可编程的其他处理器16和18之一可用时,步骤62用于选择队列电路22中排队的最老的事件并且将其发送给下一个可用的可编程的其他处理器16和18,其触发相关联的其他程序的执行。

图5示意性地示出了由可编程的其他处理器16和18执行的其他程序进行预取触发。在步骤64,可编程的其他处理器16和18被初始化到空闲状态。然后,在步骤66,在从调度电路24接收到事件之前,处理一直等待。这样的事件可以通过可编程的其他处理器16和18的“唤醒”信号的断言或适当的中断信号的断言接收到。当接收到事件时,步骤68唤醒可编程的其他处理器16和18,以使得其退出空闲状态并开始执行其他程序。该其他程序可以对通知给其的事件进行分析(可选地,对相关元数据进行分析),以便确定将触发的适当预取动作。将触发的预取动作可以通过各种不同方式改变,例如,将进行预取的存储器地址,将进行预取的时间,预取的块大小等。该其他程序还将数据写入统计分析电路20,以记录随后在其他预取控制中将使用的状态数据。当步骤68的处理确定了将被触发的任意预取操作(或预取事件可以触发一个、很多个预取操作或者不触发任何预取操作)的性质时,步骤70通过预取电路28触发该预取操作,以使得相关数据被从等级1高速缓存(或主存储器)预取回等级1数据缓存6。

图6a示意性地示出了指针跟踪数据结构,其中的数据块在每个节点处被处理直到到达块的结尾并且针对下一数据块的指针被读取或计算出来为止。主处理器4处理块所花费的时间可以改变(所以主处理器4处理负荷之间的时间可以改变),并且主处理器4本身在至少接收到当前块之前不能确定到下一块的指针。

图6b示意性地示出了主处理器4执行指针跟踪数据处理和可编程的其他处理器16和18执行预取的动作。在预取后从主存储器返回数据所花费的时间可以改变,但是该数据在相应的没有暂停的主处理器4需要其时将仍然可用。数据的预取块由通知给可编程的其他处理器16和18之一并且对应于在先块的数据到达的数据到达事件触发。块的预取在主处理器4仍然在处理指针跟踪序列中的更早的块的同时发生。不存在确定可编程的其他处理器16和18执行它们的预取之前的时间长度的直接耦合,因为这是由运行时行为和统计值确定的。

尽管这里已经参考附图描述了说明性实施例,但是将理解的是,权利要求不限于这些精确的实施例,并且本领域技术人员可以在不偏离所附权利要求的范围和精神的条件下想出各种修改、添加、以及变形。例如,从属权利要求的特征可以与独立权利要求的特征进行各种组合。

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