具有可编程预取器的处理器的制作方法

文档序号:15981532发布日期:2018-11-17 00:23阅读:188来源:国知局

相关申请的交叉引用

本申请要求以下美国临时专利申请的优先权,其全部内容通过引用包含于此。

本申请涉及下面与本申请同时提交的美国专利申请,其全部内容通过引用包含于此。

本发明大体涉及处理器的预取信息,尤其涉及根据编程预取程序进行预取操作的可编程预取器。

背景技术

由于更高效率水平下的更高性能,处理器日益变得更强大。这里使用的术语“处理器”是指任意类型的处理单元,包括微处理器、中央处理单元(cpu)、一个或多个的处理核、微控制器等。这里使用的术语“处理器”还包括诸如集成在芯片或者集成电路(ic)上的处理单元等的任意类型的处理器配置,其中该处理单元包括片上系统(soc)等内所包含的处理单元。半导体制造技术不断进步,从而使得集成在处理芯片上的电路的速度提高、消耗功率降低和尺寸缩小。集成尺寸的缩小允许在处理单元内整合其他功能。然而,一旦传统的处理器被制造出来,该处理器的多个内部功能和操作基本上是固定的。

存储访问延迟是影响处理性能和效率的重要因素。处理电路通常通过多层电路和相关访问协议与主存储器分离。例如,处理器可以被耦接至存储诸如指令(例如,代码)、数据和其他信息等的处理器所需的信息的外部系统存储器。由于该信息通常必须穿过(traverse)诸如总线接口单元和/或者存储器控制器等的多级电路,并且外部装置通常以与更快的处理器或者核时钟相比较低的系统时钟来运行,因而对外部系统存储器的访问可能相对较慢。

为了提高性能和效率,处理器典型地包括在本地存储从外部存储器所检索(retrieve)到的信息的一级或多级高速缓冲存储器,以便通过处理电路更快地访问。因为内部高速缓存器在物理上更接近且具有较少的中间电路级,并且通常以更快的时钟速度运行,因而对该高速缓存器的访问大体上速度更快。处理器执行具有用于访问请求信息(例如,数据或者指令)的地址的加载型(load-type)指令。当请求信息位于调用缓存命中的内部高速缓存器中时,利用最小延迟检索该信息。否则,发生缓存未命中,并且与内部高速缓冲存储器相比,利用更大延迟从更高层级高速缓存器和/或者位于处理核或者处理器外部的系统存储器检索该信息。所检索的信息可以是包含请求信息的一个或多个缓存行的形式。随着进程的继续,并且随着内部处理器的高速缓存器被填满,发生缓存命中的百分比增大,从而提高了处理器的整体性能。

预取是一种常用技术,其中,预先从外部系统存储器检索信息块,并且将其存储在本地处理器的高速缓存器中,以在需要时通过处理电路更快速地访问。“预取器”或者预取引擎监视或者追踪处理器实际所请求的信息(数据和/或者代码),并且试图预期未来的请求,并提交用于检索被预期的信息的请求。然而,仅当处理电路实际上及时地请求很大比例的被预期的信息时,才会提高性能和效率。没有检索目标信息或者检索出太多错误信息的预取算法,可能不会明显提高整体性能和效率。实际上,不准确的或者其他效率低下的预取算法可能对整体性能和效率产生负面影响。

具有内部缓存机制的传统处理器通常包括均根据预定预取算法所预先配置的一个或多个“预取器”。已知存在从相对简单到有些复杂的多个不同类型的预取器。一些预取器基于相对简单的算法,诸如基于步幅或者缓存行偏移(例如,诸如每隔一个缓存行或者每第三个或者每第四个缓存行等),来进行判断和预取。其他预取器更复杂。例如,包围盒预取器(boundingboxprefetcher)追踪多个不同的模式周期,并且试图识别对于预取所使用的清楚的模式周期。内容定向预取器检查被检索的实际数据以试图识别近期将被请求的地址。

尽管给定的预取器对于一个进程(程序或者应用程序等)可以很好地工作,但是其对于另一进程可能不能很好地工作,或者甚至可能表现得很差。一些处理器可以包括多个预取器,以试图提高对于各种不同进程的性能。尽管同时存在多个预取器的方法可能改善对于一些进程的运行,但是由于多个预取器倾向于抖动和相互冲突,因而该改善可能有限。



技术实现要素:

根据一个实施例的处理器,其包括前端、至少一个加载流水线和存储器系统,其中,存储器系统还包括用于从外部存储器预取信息的可编程预取器。前端将所提取的程序指令转换成包括加载微指令的微指令,并且分派微指令以执行。加载流水线执行所分派的加载微指令,并且向存储器系统提供加载请求。可编程预取器包括加载监视器、可编程预取引擎和预取请求器。加载监视器追踪加载请求。可编程预取引擎被配置成通过至少一个预取程序来编程以运行为编程预取器,从而使得在处理器的操作期间,编程预取器基于通过处理器所发出的加载请求,生成至少一个预取地址。预取请求器提交至少一个预取地址以从存储器系统预取信息。

处理器还可以包括用于存储一个或多个预取程序的预取存储器。预取存储器可以包括随机存取存储器(ram)等。处理器可以对于写命令做出响应,其中,写命令指示处理器将预取程序写入随机存取存储器中。可以包括使用存储在预取存储器中的一个或多个预取程序来编程可编程预取引擎的预取编程器。

另外,预取存储器可以包括用于存储一个或多个预定预取程序的只读存储器(rom)等,其中,预定预取程序用于编程可编程预取引擎,以根据预定预取定义来运行可编程预取引擎。这类预定预取程序可以是默认预取程序,其中,预取编程器根据处理器的启动,使用默认预取程序编程可编程预取引擎。

处理器可以对于配置命令做出响应,其中,配置命令使得预取编程器利用存储在预取存储器中的多个预取程序中所指定的一个预取程序来编程可编程预取引擎。处理器可以包括配置映射,其中,配置映射将多个不同进程中的每一个与存储在预取存储器中的相应预取程序相映射。

可以利用可编程逻辑元件和可编程互连来实现可编程预取引擎。可编程逻辑元件和可编程互连可以被细分成多个实质上相同的可编程段。可以包括预取编程器,其中,预取编程器分配多个可编程段,并且利用预取程序编程所分配的段来配置编程预取器。可编程逻辑元件可以被实现为可编程查找表。可编程逻辑元件可以被实现为加法器、复用器和寄存器。可编程预取引擎可以包括可编程存储器,其中,将预取程序配置为被扫描进可编程预取引擎的可编程存储器中的位流。可以利用多个预取程序来编程可编程预取引擎,其中,预取编程器在处理器的操作期间,每次激活至少一个预取程序。

处理器可以包括高速缓存器,其中,该高速缓存器接收通过处理器所发出的加载请求,并且从外部存储器请求并存储相应缓存行。该高速缓存器可以是例如诸如l2高速缓存器等的、接收代码和数据加载请求的统一高速缓存器。

附图说明

通过下面的说明和附图,本发明的益处、特征和优点将更好理解,其中:

图1是根据本发明的一个实施例所实现的、包括可编程预取器的处理器的简化框图;

图2是根据本发明的一个实施例所实现的图1的处理核c1的简化框图;

图3是根据本发明的一个实施例所实现的、包括图1的可编程预取器的l2高速缓存器的简化框图;

图4是根据本发明的一个实施例所实现的、用于接合图1的l2高速缓存器的一部分的图1的可编程预取器的更详细的框图;

图5是根据本发明的一个实施例的、使用可编程逻辑所实现的、与图4的ppf引擎接合的ppf编程器和控制器的简化框图;

图6是根据本发明的一个实施例所实现的图5的可编程逻辑的更详细的框图;

图7是根据本发明的一个实施例所实现的图6的可编程逻辑元素的示意性框图;

图8是根据本发明的一个实施例所实现的图7的查找表(lut)的示意图;

图9是根据本发明的一个实施例所实现的、用于对图4的ppf引擎编程的预取程序的格式的简化框图;

图10是示出根据本发明的一个实施例的用于生成包含一个或多个预取程序和相应预取编程指令的可执行应用程序的一个方法的简化框图;

图11是示出根据本发明的另一实施例的用于生成包含一个或多个预取程序和相应预取编程指令的可执行应用程序的另一方法的简化框图;以及

图12是示出根据本发明的又一实施例的用于生成包含一个或多个预取程序和相应预取编程指令的可执行应用程序的又一方法的简化框图。

具体实施方式

本发明人已经认识到与存在于传统处理器中预定的预取器相关的不足。因此,他们研发出了如下可编程预取器,其中该可编程预取器是可配置或者可编程的,以对于给定的进程运行为更有效的预取器。特定软件程序或者进程的程序员或者研发人员处于理想位置以得知随着时间的推移进程需要将什么信息加载至处理器。于是程序员或者开发人员可以设计进行预取操作的最优预取器,以更准确地预测进程在近期将会需要的信息。可选地,为了设计更有效的预取器,可以评价现有应用程序或者进程。因此可编程预取器可以被编程,从而使得在进程运行期间,可以提前将增加量的被正确地预期的信息加载至处理器内的本地缓存中,以在该进程需要时可以立即使用。

图1是根据本发明的一个实施例所实现的包括可编程预取器(ppf)117的处理器100的简化框图。处理器100的标准指令集架构(isa)可以是x86架构,其中,在该x86架构中可以正确地执行被设计成在x86处理器上所要执行的大多数应用程序。如果获得应用程序的预期结果,则正确地执行了该应用程序。特别地,处理器100执行x86指令集的指令,并且包括x86用户可见寄存器集。然而,本发明不局限于x86架构,从而可以根据如本技术领域的普通技术人员所知道的任意替代的isa来实现处理器100。

处理器100包括n个片103,分别标记为s1、s2、……、sn,其中,n是包括1的任意正整数(即,处理器100包括至少一个片,并且可以包括仅一个处理核)。进一步示出并说明第一片s1的细节,其中,应该理解,可以通过大体相似的方式实现其余片s2~sn中的每一个。第一片s1包括第一处理核c1105,第一处理核c1105进一步包括第二级或者二级(l2)高速缓存器115。l2高速缓存器115还包括ppf117。其余片s1~sn各自的处理核可以包括相似的l2高速缓存器和ppf(未示出)。处理核105被耦接至环形站rs1107,其中,环形站rs1107进一步被耦接至被标记为llc1的“最后一级高速缓存器”(llc)109。其余片s2~sn各自包括相似的环形站,分别被标记为环形站rs2~rsn,其中,环形站rs2~rsn各自进一步被耦接在相应片的相应处理核和llc之间。

在所示配置中,环形站rs1~rsn均被一起耦接在环形结构中,其中,该环形结构进一步被耦接至处理器100上所包含的存储器控制器(mc)111。mc111进一步被耦接至外部系统存储器113。在替代实施例中,mc111可被设置在处理器100外部,其中,处理器100包括用于接合外部存储器控制器和系统存储器113的总线接口单元等(未示出)。片s1~sn共享系统存储器113的资源,并且还可以经由环形站rs1~rsn相互共享信息。应该理解,处理器100可以被配置成包括单个ppf而不是多个片的单核处理器。

系统存储器113存储可执行二进制应用程序(app)119,其中,app119还包括头121和主体123。二进制app119以通用的形式被示出,并且可以作为可通过包括处理核c1的处理器100的任何一个或多个处理核而被成功执行的二进制可执行(.exe)文件、字节码文件(.net、java等)或者任何其他类型的可执行代码来实现。在所示配置中,头121包括至少一个ppf写指令,其中,设置每一写指令以用于指定或者定位可被用于对ppf117进行编程的相应预取程序(pgm)。例如,如图1所示,头121包括ppf写指令write_ppf,其中,ppf写指令write_ppf包括识别头121内所包含的相应预取程序pgma_ppf的操作数(或者参数)pgma。可选地,可以将预取程序pgma_ppf设置在二进制app119的不同部分内。在任一情况下,操作数pgma可以是用于在二进制app119和/或者系统存储器113内定位预取程序pgma_ppf的地址或者偏移。尽管二进制app119包括用于识别相应预取程序的仅一个ppf写指令,但是可执行二进制应用程序可以包括任意数量的ppf写指令,其中该ppf写指令用于加载可以在任意给定定时被加载至处理器100中的任意数量的预取程序。

在运行期间,处理核c1访问二进制app119并执行write_ppf指令,使用操作数pgma来定位预取程序pgma_ppf,然后将预取程序pgma_ppf加载至ppf117中。可选地,可以将预取程序pgma_ppf写入处理核c1内可通过ppf117访问的任何其他存储器中。头121还包括具有操作数pgma的ppf配置指令config_ppf,其中,ppf配置指令config_ppf指示处理核c1利用被预先加载至ppf117(或者处理核c1的其他内部存储器)中的预取程序pgma_ppf对ppf117进行编程。在替代配置中,可以使用单个命令,其中,在该命令被执行时,使得处理核c1使用操作数pgma定位预取程序pgma_ppf,然后直接对ppf117进行编程。

在利用预取程序pgma_ppf对ppf117进行编程之后,ppf117被激活以在二进制app119执行期间运行为预取器。然后,在二进制app119的主体123执行期间,ppf117根据预取程序pgma_ppf进行预取功能。可以对于app119专门配置预取程序pgma_ppf,从而使得与使用传统预定预取方法的更普通或通用的预取功能相比,以更高性能和更高效率水平通过ppf117来进行预取功能。当已利用预取程序进行编程时,ppf117是“编程”预取器。当利用对于特定应用程序或者应用程序类型而专门设计的预取程序来编程时,ppf117是“定制”预取器。

系统存储器113(和/或者其他外部存储器)可以包括随着时间推移而通过处理器100所加载的、用于执行的多个应用程序。可以将多个应用程序或者进程加载至处理核c1~cn中的任意一个或者多个中,但是在所示实施例中,每一处理核通常每次仅执行一个进程。每一处理核每次执行多个进程的实施例也被考虑。可以分配多个应用程序以由其中一个处理核来执行。操作系统(os)包括调度程序(scheduler)等,其中,对于给定的处理核,该调度程序每次调度包括换入和换出用于执行的各个多进程的处理器100的应用程序的执行。可以通过诸如处理核c1105等的给定的处理核来执行多个应用程序,其中,每一应用程序可以包括用于对ppf117编程的一个或多个预取程序。尽管ppf117可能具有足够的资源来处理用于多个进程的多个预取程序,但是如在此进一步描述的,ppf117是有限资源,并且可以在运行期间利用不同的预取程序被重新编程。

图2是根据本发明的一个实施例所实现的处理核c1105的简化框图。在所示实施例中,处理核c1包括作为第一级或者一级指令(l1i)高速缓存器的指令高速缓存器(icache)201、包括指令取指(fetch)引擎203的前端管道、解码器205和寄存器别名表(rat)207,并且处理核c1还包括保留站209、执行单元211、作为一级数据(l1d)高速缓存器的数据高速缓存器(dcache)213、二级或者l2高速缓存器115、物理寄存器文件(prf)215和重排序缓冲器(rob)217。l2高速缓存器115还接合用于最终访问llc1109和/或者系统存储器113的环形站rs1。

执行单元211可以包括一个或多个整数(int)单元219、一个或多个浮点或者媒体单元221、一个或多个加载和存储流水线(加载/存储管道)223和peu1101。加载/存储管道223可以被配置成分离的加载流水线和存储流水线、以及/或者加载和存储组合管道,并且还可以包含存储器排序缓冲器(mob)(未示出)等。保留站209可以包括用于向各个执行单元211分派指令的调度程序的任意组合。例如,可以包括单独的整数、媒体和加载/存储调度程序以用于分别向int单元219、媒体单元221和加载/存储管道223分派指令。

icache201缓存来自诸如二进制app119等的位于系统存储器113中的活动的应用程序的程序指令。取指引擎203从icache201取指程序指令(例如,宏指令或者代码),并且将其转发给解码器205,其中,解码器205将程序指令解码成用于通过执行单元211中的一个或多个来执行的微指令。在一个实施例中,指令转译是将处理器100的宏指令集(诸如x86指令集架构)的宏指令(或宏操作)转译成处理核c1的微指令集架构的微指令(或微操作)的进程。如这里所使用的,宏指令和微指令可大体上被统称为“指令”,并且分别更具体地称为宏操作和微操作。例如,存储器访问指令可以被解码成包括一个或多个加载或者存储微操作的微操作序列。二进制app119填充有宏操作,其中,通过解码器205将该宏操作转换成作为处理器100的原生(native)指令集的一部分的相应微操作。rat207基于其程序顺序、其指定的操作数源以及重命名信息,生成各指令的依赖性信息(dependencyinformation)。

rat207将被解码的微操作及其相关依赖性信息分派给rs209。rs209包括至少一个保持从rat207所接收到的指令和依赖性信息的队列。当指令的执行准备就绪时,rs209将所接收到的指令分派给执行单元211中的相应执行单元。当指令的所有依赖性被决定时,认为该指令的执行准备就绪。与分派指令一起,rat207在rob217中分配用于该指令的条目。因此,指令按照程序顺序被分配在rob217中,其中,rob217可以被配置为循环队列以确保指令按照程序顺序被提交。rat207还将依赖性信息提供给rob217以将其存储在rob217的该指令的条目中。rat207还针对各指令分配或者映射prf215内的一个或多个物理寄存器以存储操作数和结果。

执行单元211的结果可以被反馈给rob217以更新prf215内的相应寄存器。在一个实施例中,rat207将架构寄存器映射至prf215中的物理寄存器,并且更新rob217中与指令相对应的指针等(未示出)。可以在执行期间或者之后更新rob217中的指针,并且在运行期间,使用这些指针来更新prf215内的寄存器的内容。rob217最终按照程序顺序提交指令,以确保根据二进制app119的指令的适当操作。

包括处理核c1的处理器100的每一处理核都是超标量的,并且包括多个执行单元且能够在单个时钟周期内向执行单元211发出多个指令。处理核c1还被配置成进行非循序执行。也就是说,保留站207可以不按照包括该指令的程序所指定的顺序来发出指令。超标量非循序执行处理器通常试图保持相对大的未处理指令池,从而使得它们可以利用更大量的指令并行。处理核c1还可以进行指令的预测执行,其中,在明确知道指令实际是否完成之前,处理核c1执行指令或者至少进行通过指令所指定的一些动作。由于诸如错误预测分支指令、意外(中断、页错误、除以0条件、一般保护错误等)等的各种原因,指令可能没有完成。尽管处理核c1可以预测性地进行通过指令所指定的一些动作,但是不会利用指令的结果来更新系统的架构状态,直到明确知道指令完成为止。例如,当通过rob217提交指令时,可以确定完成了指令。

icache201是用于处理从系统存储器113所检索到的程序指令或者代码的l1高速缓存器,而dcache213是用于处理从系统存储器113所检索到的或者被发送给系统存储器113的数据的l1高速缓存器。由于l2高速缓存器115包含来自l1高速缓存器201和213的或发送给l1高速缓存器201和213的数据和代码信息两者,因而其是“统一”高速缓存器。在这类高速缓存器的层级中,l1高速缓存器具有较少的集和/或者路,因而通常较小且更快,而较高层级的高速缓存器(例如,l2)则较大(并且通常较慢)。处理器100的每一核利用用于访问所请求的信息(例如,数据或者指令)的地址,执行加载型指令。当请求信息位于调用缓存命中的相应l1高速缓存器中时,以最小延迟检索该信息。否则,如果请求信息位于l2高速缓存器115中,则由于l2比更高层级的高速缓存器(例如,llc1109)和/或者系统存储器113快很多,因而以减小的延迟检索该信息。否则,在处理核c1105内发生缓存未命中,并且以更大的延迟从llc1109和/或者系统存储器113检索该信息。检索到的信息可以是包含请求信息的一个或多个缓存行的形式。随着处理继续,并且随着处理器的l1和l2高速缓存器被填满,发生缓存命中的百分比增大,从而提高处理器的整体性能。如这里进一步描述的,ppf117可以被编程为用于至少一个进程的定制预取器,以优化处理核c1的整体性能。

图3是根据本发明的一个实施例所实现的包括ppf117的l2高速缓存器115的简化框图。l2高速缓存器115的主要部分是包含用于接合数据阵列305的标签阵列303的“流水线”301。数据阵列305是l2高速缓存器115的主存储器存储区域,用于临时存储包含从系统存储器113所检索的信息(数据和代码)的缓存行以及将其存储在系统存储器113中。标签阵列303包括标签的列表,并且还包括反映缓存行的状态的mesi位,其中,使用每一标签来识别与数据阵列305中所存储的缓存行相关的、系统存储器113的相应存储区域。在一个实施例中,l2高速缓存器115是n路集相关高速缓存器。地址的上部分形成用于识别存储器中的块或者页的标签,并且地址的下一部分或者中间部分形成用于识别标签阵列和数据阵列305内的多个集中的一个集的索引。各阵列的每一个集包括n个路,其中,各阵列内的特定集的n个路中的每一路与标签阵列303内的标签相对应。

在更具体的实施例中,处理器100的每一核的物理地址(pa)大小包括46位,并且l2高速缓存器115具有256千字节(kb)的容量,针对256个集中的各集包括16个路,具有64字节(b)的缓存行大小,并且具有32位的标签大小。标签是用于识别系统存储器113的相应存储器块的46位pa中的前32位。然而,本发明不局限于任何特定物理地址、缓存容量、集或者路的数量、缓存行大小或者标签大小。

l2高速缓存器115包括用于在icache201、dcache213和rs1107之间传输信息的多个队列。l1ildq307将从icache201传入到l2高速缓存器115的加载请求(l1ild)加入队列,l1dldq309将从dcache213传入到l2高速缓存器115的加载请求(l1dld)加入队列,l1iqq311将从l2高速缓存器115传出到icache201的探测加入队列,l1dqq313将从l2高速缓存器115传出到dcache213的探测加入队列,l1ievq315将从icache201传入到l2高速缓存器115的驱逐加入队列,l1devq317将从dcache213传入到l2高速缓存器115的驱逐加入队列,fillq319将从l2高速缓存器115传出到rs1107的加载和驱逐请求加入队列,并且snpq321将从rs1传入到l2高速缓存器115的探测加入队列。

l2高速缓存器115还包括一个或多个预取器323,其中,每一预取器进行用于根据相应预取算法或者定义将信息从系统存储器113预取至l2高速缓存器115中的相应预取操作。预取器323包括ppf117,其中,ppf117是可编程的,以根据如这里进一步所描述的包括定制预取定义的任意类型的预取定义来运行为预取器。根据特定配置,可以包括一个或多个标准或者预先配置的预取器323。例如,如图3所示,包括根据预定流预取算法来运行的流预取器325。不对流预取器325作进一步说明。可以包括其他预定和传统的预取器,但是不进一步示出或者说明这些预取器。

队列307~321中的每一个和预取器323(包括ppf117)中的每一个对于仲裁器327设置多个请求信号rx(分别被示出为r1~r10)中相应的一个请求信号,以请求访问用于检索或者存储数据和信息的流水线301。仲裁器327在所接收到的请求rx中进行仲裁,并且对于队列307~321中的一个或者预取器323中的一个,设置多个准许信号gx(分别被示出为g1~g10)中相应的一个准许信号,以准许访问流水线301。为了准许访问,仲裁器327对于选择逻辑329的选择输入设置选择信号sel集中相应的一个选择信号,以将成功队列或者预取器访问耦接到流水线301,并然后对于该成功队列或者预取器设置相应准许信号gx。不进一步说明其他握手协议和流水线301的连接和操作。

包括ppf117的预取器323中的每一个预取器追踪或者监视从icache201和dcache213到队列l1ildq307和l1dldq309的加载请求l1ild和l1dld,以识别并启动预取请求(当预取请求是活动的或者以其他方式被激活时)。每一预取器323可以直接监视加载请求,或者代替地,可以访问和查看队列l1ildq307和l1dldq309各自内的条目。加载请求l1ild和l1dld各自包括地址(例如,物理地址pa),以定位正被请求的信息以及加载请求的类型。每一预取器323使用该信息追踪处理核c1的操作,以确定要与相应地址一同进行的潜在未来加载请求。

当预取器323确定至少一个要加载的潜在预取地址时,预取器323对于仲裁器327设置仲裁器32的相应请求信号rx,以得以访问流水线301。例如,当ppf117识别出至少一个预取地址时,对于仲裁器327设置r2。当接收到预取器323的相应准许信号gx时(例如,ppf117的g2),预取器323查询流水线301,以判断该信息是否已经存在于数据阵列305中以及是否有效。在一个实施例中,例如,将预取地址的相应标签部分与标签阵列303的(通过地址的索引部分所识别出的)所选集内的多个路各自的每一标签进行比较。在命中的情况下,诸如当与预取地址相关的缓存行已经存在于数据阵列305内并且有效时,由于预取操作不是必要的,因而丢弃该预取地址。在未命中的情况下,意味着在数据阵列305内没有找到与预取地址相关的缓存行或者该缓存行是无效的,那么预取器将该预取地址插入队列fillq319中(或者向fillq319提交针对该预取地址的请求)。fillq319最终与该预取地址一同设置对rs1107的请求,以从系统存储器113检索缓存行。

如果处理核c1随后设置用于与预取地址相关的相同缓存行的加载请求,那么该缓存行可能已经被加载至流水线301中,从而使得以最小延迟将请求信息返回至处理核c1。即使还未被加载至数据阵列305内,预取请求也已通过fillq319被启动,从而缩短了总的数据访问时间。

图4是根据本发明的一个实施例所实现的、用于接合l2高速缓存器115的一部分的ppf117的更详细的框图。如上所述,作为一个预取器323,ppf117监视被提交至队列l1ildq307和l1dldq309的加载请求。通过ppf117的加载监视器401的加载请求追踪模块403追踪加载请求,其中,将每一加载请求输入至加载监视器401的加载请求队列405中。还可以通过类型来识别每一加载请求,其中,可以通过预取操作来使用该类型,以确定预取方法。加载类型可以包括整数加载(数据加载,可预取的)、媒体加载(数据加载,通常为高度可预取的)、表查找加载(通常为不可预取的)、预取加载(有时为可预取的,除非响应于预取加载而进行预取)、代码(或者指令)加载(通常为可预取的,但是通常利用与数据加载相比不同的算法是最佳的)等。

ppf引擎407针对各加载请求扫描加载请求队列405,并且确定并加载一个或多个预取地址至ppf117的预取请求器409的预取请求队列411中。仲裁请求(arbreq)模块413访问预取请求队列411中的每一预取地址,并且通过设置请求信号r2来请求访问流水线301。当仲裁器327准许访问流水线301时,其设置相应准许信号g2,并且仲裁请求模块413针对预取请求队列411中的一个或多个预取地址(pfa)访问和查询流水线301。在命中的情况下,诸如当预取地址pfa处的缓存行已经被加载至数据阵列305中并且有效时,可以丢弃预取地址pfa。在未命中的情况下,仲裁请求模块413将预取地址pfa提供给预取请求模块409的fillq请求模块415。fillq请求模块415将预取地址pfa插入fillq319中,或者请求fillq319向rs1107提交请求,以从系统存储器113请求相应缓存行。

ppf117的加载监视器401和预取请求器409通常包括或者进行可通过一个或多个预取器323进行的标准或不可变的功能,从而使得它们不必是可编程的。加载监视器401简单地包括并且利用已经作出的加载请求(例如,包括地址和加载类型)来加载加载请求队列405,并且预取请求器409包括并简单地访问预取请求队列411以使用预取请求队列411中列出的预取地址来作出预取请求。加载监视器401和预取请求器409因此可以在硬件上进行固定和优化,以实现最佳性能。

另一方面,可以利用一个或多个预取程序来编程ppf引擎407,其中,预取程序中被激活的预取程序在相应进程执行期间,根据预取定义或算法来运行ppf引擎407。ppf编程器和控制器417被包括在ppf117中,并且用于利用一个或多个预取程序来编程ppf引擎407,以及用于控制ppf引擎407的包括加载预取程序的激活的操作。如下操作是可能的:响应于write_ppf指令(诸如二进制app119的头121中的write_ppf指令),ppf编程器和控制器417访问或者接收所识别的预取程序(例如,pgma_ppf),并且直接编程ppf引擎407。可以利用足够的资源来配置ppf引擎407以利用多个预取程序来编程,其中,ppf编程器和控制器417简单地激活与活动的特定进程相关的适当预取程序。

为了有助于多个预取程序,设置ppf配置映射419,其中,ppf配置映射419将通过唯一进程标识符(pid)所识别的、正在执行(活动的或暂停的)的每一进程与针对该进程所设置的相应预取程序相映射。例如,如图4所示,数个进程被识别为分别与相应预取程序pgma、pgm1、pgm2、pgmb等相关的p1、p2、p3、p4等。ppf编程器和控制器417在任意给定定时识别活动的进程,并且根据在ppf配置映射419中所设置的映射,激活ppf引擎407内被编程的相应预取程序。一旦正确的预取程序被激活,则ppf117在相应进程执行期间运行为被选择的、期望的或者定制的预取器。

应该理解,ppf引擎407可以是有限资源,其中,可以在任意给定定时加载有限数量的预取程序。可能正在执行(或者活动的或暂停的)的进程的数量可以相当大,并且如果非常大数量的进程包括至少一个相应预取程序,那么ppf引擎407可能不具有足够容量以利用相应数量的预取程序来编程。在这类配置下,特别地,当用于一个或多个预取程序的定位信息不再有效或者不可使用时,可能难以随着时间推移对于不同进程利用不同预取程序切换ppf引擎407的编程。另外,根据该配置,ppf引擎407可能包括足够资源以利用一个大的或者两个较小的预取程序来编程。

可以包括本地预取存储器422,并且可以将其耦接至或者设置在ppf117内。预取存储器422可以包括可编程随机存取存储器(ram)421(例如,静态ram等),其中,可以利用如pgma、pgmb、pgmc等所示的一个或多个预取程序来写入可编程随机存取存储器(ram)421。在一个实施例中,每一预取程序可以是二进制位流,从而使得可以实现足够大的ram421以存储相当数量的预取程序。在这种情况下,响应于write_ppf指令(诸如app119的头121中的write_ppf指令等),处理核c1与ppf编程器和控制器417合作访问所识别的预取程序(例如,pgma_ppf),并且将其加载至ram421中,而不是将其直接加载至ppf引擎407中。ppf编程器和控制器417还更新ppf配置映射419以将预取程序与相应进程相映射。响应于预取配置指令

config_ppf(诸如二进制app119的头121中的config_ppf指令等),ppf编程器和控制器417利用诸如来自ram421的预取程序pgma等的所识别的预取程序编程ppf引擎407。注意,给定进程可以使用多个预取程序,其中,ppf编程器和控制器417映射用于给定进程(例如,p1a、p1b等)的多个预取程序。对于被暂停的进程以及当进程被暂停时,ppf编程器和控制器417还使用ppf配置映射419识别最后活动的预取程序。

预取存储器422还可以包括用于存储如pgm1、pgm2、pgm3等所示的一个或多个标准或者预定预取程序的只读存储器(rom)423。在一个实施例中,可以将预定预取程序中的一个指定为默认预取程序(例如,pgm1)。在处理器100和/或者处理核c1的初始启动期间,如果包括默认预取程序,则ppf编程器和控制器417利用默认预取程序编程ppf引擎407,并然后激活ppf引擎407的默认预取程序。应用程序或者进程可以包括用于识别rom423内所存储的任一预定预取程序的预取配置指令config_ppf。在这种情况下,ppf编程器和控制器417可以将每一进程与默认预取程序相映射,直到被另一个预取程序代替为止。响应于每一随后的ppf配置指令,ppf编程器和控制器417以与对于ram421所描述的相似的方式,利用从rom423所识别的预定预取程序编程ppf引擎407,并然后更新ppf配置映射419。例如,如图4所示,将进程p2和p3分别映射至pgm1和pgm2。

当处理核c1将激活从一个进程切换至另一进程时,ppf编程器和控制器417查阅ppf配置映射419,并且判断与正被激活的进程相关的预取程序是否已被加载至ppf引擎407内。如果是这样,那么如果可能,ppf编程器和控制器417取消激活当前预取程序,并且针对正被激活的进程激活ppf引擎407中的下一预取程序。如果针对正被激活的进程没有利用下一预取程序来加载ppf引擎407,那么ppf编程器和控制器417访问用于存储下一预取程序的ram421和rom423中的任一个,并且相应地编程ppf引擎407。

在一个实施例中,ppf编程器和控制器417识别在不覆盖当前被加载在ppf引擎407内的任何预取程序的情况下,ppf引擎407是否具有足够可用空间来编程下一预取程序。如果是这样,那么将下一预取程序加载至可用空间中。然而,如果ppf引擎407不具有足够可用空间来加载下一预取程序,那么ppf编程器和控制器417使用替换策略来覆盖当前存在于ppf引擎407内的一个或多个预取程序。替换策略可以是最近最少使用(lru)算法等,但是还可以考虑正被加载的预取程序所需的可编程空间量。例如,如果较小且最近最少使用的预取程序不能对于所要加载的下一预取程序提供足够空间,那么即使最近被较多使用,也可以选择并覆盖较大的预取程序。在一个实施例中,如果ppf引擎407内正被覆盖的任一预取程序的副本未被存储在rom423或者ram421内,并且如果ram421具有足够可用空间,那么在ppf引擎407中被覆盖之前,ppf编程器和控制器417可以将该预取程序从ppf引擎407卸载或者复制至ram421中。

尽管ram421可以存储相当数量的预取程序,但是如果ram421未大到足以能存储在任意给定定时要试图加载的所有预取程序,那么ppf编程器和控制器417可以采取适当动作。例如,如果进程试图配置未被找到或者不可用的预取程序,那么ppf编程器和控制器417可以简单禁用用于该进程的ppf引擎407的操作。可选地,ppf编程器和控制器417可以加载或者激活诸如默认预取程序pgm1等的标准预取程序,只要任何其他预取程序未被永久覆盖即可。

图5是根据本发明的一个实施例所实现的、使用可编程逻辑501与ppf引擎407接合的ppf编程器和控制器417的简化框图。在所示实施例中,可编程逻辑501被细分成一组“p”个实质上相同的、如可编程段p1、p2、……、pp分别所示的可编程段503,其中,“p”是正整数。ppf编程器和控制器417将一个或多个预取程序编程到可编程逻辑501中来实现相应预取器。特别地,ppf编程器和控制器417分配足以编程预取程序的一个或多个可编程段503,并然后将预取程序加载至所分配的段503来实现ppf引擎407内的相应预取器。

ppf编程器和控制器417保持指针等以识别和定位被加载至ppf引擎407中的每一预取程序,并且基于活动的进程,激活或者取消激活所加载的预取程序。

可编程逻辑501可以是诸如通过现场可编程门阵列(fpga)等所实现的相当大的资源,以针对各个多应用程序进程每次编程多个预取程序。但是,由于其余未分配的段503可能不足以编程所要编程的新预取程序,因而可编程逻辑501是有限资源。在这种情况下,如果副本未存在于ram421中、并且如果ram421中有足够可用空间,则ppf编程器和控制器417可以将现有预取程序从可编程逻辑501复制至ram421中,并然后利用新预取程序编程所分配的段503。当进程完成操作从而被终止时,可以使针对该进程已被编程的任何预取程序无效,并且该预取程序在ppf引擎407和/或者ram421内被最终覆盖。

每一可编程段503可以包括足够的可编程逻辑来进行简单预取程序。例如,如图5所示,第一预取程序pgma(相对简单)被加载至第一可编程段p1以实现第一预取器pfra,并且第二预取程序pgmb(更复杂)被加载至两个可编程段p2和p3以实现第二预取器pfrb。另外,甚至可以将更复杂的预取程序加载至两个以上的段503中。根据预取程序的相对大小和复杂度以及可编程段503的总数量,可以将任意数量的预取程序编程进可编程逻辑501中。

在一个实施例中,ppf编程器和控制器417进行动态分配,其中,其识别对于分配可用的下一段503,并且随着扫描新预取程序来开始编程。如果预取程序在第一分配段503已被完全编程之后继续进行、从而使得需要其他段503来完成编程,则同时动态分配其他段,直到将预取程序完全编程进ppf引擎407中为止。因此,在一个替代实施例中,在编程之前,ppf编程器和控制器417首先评价新预取程序的大小,并且相应地分配适当数量的可编程段503。在另一替代实施例中,预取程序可以被配置成包括资源声明(rsrc)903等(图9),其中,rsrc903表示预取程序所需的段503的数量(或者至少是可编程元件的数量和类型)。在这种情况下,ppf编程器和控制器417检索资源声明903,预分配所表示的数量的段503,并然后使用预取程序编程所分配的段。

一旦对于特定进程将预取程序编程进可编程逻辑501中、并且相应更新ppf配置映射419时,ppf编程器和控制器417监视或者被提供与活动的进程有关的进程信息,并且使得相应预取程序在该进程期间能够运行。

图6是根据本发明的一个实施例所实现的可编程逻辑501的更详细的框图。所示可编程逻辑501包括可编程元件阵列,其中,可编程元件阵列包括以逻辑元件601的xy矩阵所排列示出的可编程逻辑元件(le)601,逻辑元件601分别被示出为lexy,其中,x和y分别表示阵列的行索引和列索引。每一行还包括至少一个杂逻辑块603的阵列,其中,每一杂逻辑块603的阵列包括用于补充逻辑元件601的矩阵的支持逻辑。每一杂逻辑块603可以包括例如一个或多个存储元件、一个或多个寄存器、一个或多个锁存器、一个或多个复用器、一个或多个加法器(以相加或者减去数字值)、一组布尔逻辑元件或者门(例如,诸如或门、与门、反相器、异或(xor)门等的逻辑门)等。每一杂逻辑块603可以包括被配置为用于灵活数据操作的移位寄存器或者数据拌和器(swizzler)等的一个或多个寄存器。利用路由网格将逻辑元件601和杂逻辑块603耦接在一起,其中,路由网格包括可编程交叉开关或者互连605的矩阵。每一可编程互连605包括多个开关以选择性地将可编程装置连接在一起。路由网格包括足够的连通性以将多个逻辑元件601和杂逻辑块603连接在一起来进行简单处理操作和更复杂的处理操作。

如在此所述,每一可编程段503包括一个或多个可编程元件(逻辑元件601、逻辑块603)以及用于选择性地将装置和元件连接在一起以实现相应预取器、预取功能或者预取器部分的相应路由网格(互连605)。路由网格是包括用于重定向逻辑元件601和杂逻辑块603之间的输入和输出的多个开关等的开关矩阵。

可编程逻辑501包含可编程存储器607,其中,使用可编程存储器607接收预取程序,从而使得以创建相应预取器的方式来编程所选择的逻辑元件601、相应杂逻辑块603和可编程互连605。可编程存储器607还可以包括存储位置或者寄存器等以接收输入操作数或者值、以及存储预取程序的输出结果。可编程存储器607被分布在可编程逻辑501的可编程段503中,并且可以通过每一可编程段503,在所选择的用于进行特定预取操作的分配段503之间分别地或者集中地使用可编程存储器607。可编程存储器607可以被配置为可编程逻辑501或者甚至处理核c1内的私有存储空间,并且从外部不可访问。可以以诸如静态随机存取存储器(sram)等的任何适当方式来实现存储器607。

图7是根据本发明的一个实施例所实现的可编程逻辑元件601的示意性框图。逻辑元件601包括查找表(lut)701、3个2输入复用器(mux)705、706和707、2输入加法器709和定时寄存器(或者锁存器)711。可编程存储器607的以下部分被示出,该部分被用于来编程逻辑元件601、任何所包括的杂逻辑块603和一个或多个互连605的部分。如上所述,可以使用可编程存储器607来提供输入值、存储输出结果、以及/或者存储针对处理操作的多个迭代中的每个迭代所更新的中间值。

如图7所示,使用被示出为pgm_pff的预取程序来编程存储器607。lut701被示出为利用存储器607中的相应lut值(lv)的位所编程的4x1lut。每一mux705、706和707具有通过被分别示出为存储器位m1、m2和m3的存储在存储器607中的相应存储器位所控制的选择输入。将被示出为lo的lut701的输出提供给mux705的一个输入、以及寄存器711的输入,其中,将寄存器711的输出提供给mux705的另一输入。将mux705的输出提供给mux706的一个输入和加法器709的一个输入。将加法器709的输出提供给mux706的另一输入,其中,将mux706的输出提供给可编程互连605的输入。存储器607包括被提供给mux707的一个输入的可编程位v,其中,将mux707的另一输入耦接至可编程互连605的输出,并且将mux707的输出提供给加法器709的另一输入。将加法器709的输出提供给mux706的另一输入。还可以使用存储器607来编程互连605的相应部分和任何杂逻辑块603。

所示的逻辑元件601仅是示例性的,并且可以根据特定配置考虑替代版本。逻辑元件601可以被配置成用于处理数据值的单个位的位片粒度级(bit-slicegranularitylevel)。对于包括多个位的数据值,使用多个位片逻辑元件。例如,对于64位数据值,并行使用64个位片逻辑元件。

在运行中,利用lut701的lut数据值(lv)、mux705~707的选择输入m1~m3和提供给mux707的输入的可编程数据值v来编程存储器607。从指令的操作数、从存储器607或者从另一可编程块提供4个输入值s0~s3,以选择被编程进lut701中的16个值中的一个,其中,在lut701的输出处将所选择的值提供为lo。mux705被编程以直接提供lut701的lo输出或者提供寄存的lo输出。可以使用被寄存的版本来插入延迟以用于预取操作的定时目的。mux706被编程以将mux705的输出直接提供给或者将加法器709的输出提供给互连605,从而提供为输出或者被提供给另一编程块。加法器709将选择值相加至mux705的输出,其中,选择值是编程值v或者是来自互连605的输出(通过另一输入或者另一可编程块来提供)。

图8是根据本发明的一个实施例所实现的lut701的示意图。设置一组被组织为二进制mux树的2输入mux,用于基于选择输入s3:s0(其中,s0是最低有效位)在16个输入值lv0~lv15之间进行选择。如上所述,将lv0~lv15编程进存储器607中。将这16个输入值lv0~lv15的每一连续对(lv0&lv1、lv2&lv3等)提供给每一在其选择输入处接收s0的8个2输入mux801的相应输入对。将mux801的8个输出的每一连续对提供给在其选择输入处接收s1的4个2输入mux803的相应输入对。将mux803的4个输出的每一连续对提供给每一在其选择输入处接收s2的2个2输入mux805的相应输入对。将mux805的输出对提供给在其选择输入处接收s3、并且在其输出处提供lut输出lo的输出mux807的输入对。本技术领域的技术人员应该理解,图8所示的配置仅是许多适当lut实现中的一个。

图9是根据本发明的一个实施例的用于编程ppf引擎407的预取程序pgm_pff901的格式的简化框图。在这种情况下,pgm_pff901可以包括表示在可编程逻辑501内所需的用于实现预取程序的资源量的资源声明(rsrc)903。作为例子,资源声明903可以表示完成编程所需的可编程段的数量p。ppf编程器和控制器417可以在ppf引擎407的编程期间读取资源声明903来分配相应数量的可编程段503。尽管可以通过诸如追踪每一逻辑元件601、杂逻辑块603、可编程互连605和/或者可编程存储器607的量等来利用更大程度的粒度,但是这样可能需要ppf编程器和控制器417随着时间推移来追踪可编程逻辑501的各元件的每一个。

pgm_pff901还可以包括被称为位流的一系列逻辑1和0。在一个实施例中,例如,响应于通过处理核c1接收到配置指令,ppf编程器和控制器417将可编程段503中所分配的段的可编程存储器(包括可编程存储器607和互连605的相应可编程存储器)排列至大的序列化移位寄存器中,然后移位位流直到将其完全加载到每一所分配的段内为止,然后取消排列可编程存储器并且提供指针来定位或者识别编程预取器。可以使用包括并行编程的替代编程方法和格式。另外,可以在通过ppf编程器和控制器417所要读取的诸如开始或结束等的任何适当位置处提供资源声明以确保正确的编程。

图10是示出根据本发明的一个实施例的、用于生成包含一个或多个预取程序和相应预取编程指令的可执行应用程序的一个方法的简化框图。对于非限制性例子,诸如编程器等的应用程序生成器利用诸如c、c++、basic、cobol、fortran、pascal、ada、javascript等的任意适当的高级编程语言来写应用源程序1001。在这种情况下,应用程序生成器不必特别知道包含ppf117的处理器100和/或者处理核c1的容量。将应用源程序1001提供给适用于将所选择的高级编程语言转换成可以通过处理器100所执行的二进制应用程序文件1007的编译器1003。ppf检查和编程工具1005被包含在编译器1003内、或者被链接至编译器1003。

在编译进程期间,ppf检查和编程工具1005与编译器1003合作,执行用于检查应用源程序1001的代码的检查或者优化程序等,以确定可以使用的任意预取模式或者操作。例如,检查程序确定用于根据特定预取模式来检索信息的代码的任意特定部分、或者用于在执行期间使用内容定向预取算法等的代码的任意特定部分。检查程序可以仔细检查任何加载指令,特别是代码环(codeloop)内所包含的加载指令、或者以重复且可预测模式在加载信息时所调用的加载指令。ppf检查和编程工具1005判断是否可以使用定制预取定义来优化用于应用源程序1001的预取操作。如果可以这样,则ppf检查和编程工具1005开发可以在二进制应用程序文件1007执行期间使用的一个或多个预取程序pgm_ppf。编译器1003和ppf检查和编程工具1005合作,将一个或多个预取程序pgm_ppf包含在如在1011处所示的定制二进制应用程序文件1009中。编译器1003还在1011处所示的定制二进制应用程序文件1009中生成相应的ppf写和配置指令write_ppf和config_ppf,以使得处理器100的处理核c1在定制二进制应用程序1009执行期间将pgm_ppf加载和编程至ppf117中。定制二进制应用程序代码1009具有与如上所述的二进制app115相似的格式。

除此以外或者可替代的,ppf检查和编程工具1005还可以确定被编程进rom423中的、在二进制应用程序文件1007执行期间可能适用于优化预取操作的预定预取程序pgm1、pgm2、pgm3等中的一个,从而使得定制二进制应用程序文件1009可以包含一个(或多个)ppf配置指令,其中各ppf配置指令用于加载在预定预取程序中所识别的一个预取程序。

以与以上对于二进制app115所述的相似方式,可以将定制二进制应用程序代码1009加载至系统存储器113中,并且通过处理器100来执行。定制二进制应用程序代码1009包含一个或多个适当ppf写和/或者配置指令,以加载一个或多个预取程序并且相应地编程ppf117。在一些配置或者实现中,定制二进制应用程序代码1009可能不能正确地执行。例如,不正确的或者不兼容的版本的ppf检查和编程工具1005或者编译器1003、或者不兼容版本的处理器100可能导致这类不正确操作。在所示实施例中,编译器1003还可以生成同样被包含在二进制应用程序文件1007内的标准二进制应用程序代码1013。在定制二进制应用程序代码1009向处理器100的正确的加载失败的情况下,作为替代,加载标准二进制应用程序代码1013。

在一个实施例中,定制二进制应用程序代码1009和标准二进制应用程序代码1013两者均是完整版本,其中,可以通过可兼容的处理器分开或者独立执行它们每一个。可选地,标准二进制应用程序代码1013可以被配置成包括补丁代码等,以在定制二进制应用程序代码1009加载失败的情况下,替换定制二进制应用程序代码1009的代码部分。因此,在这种情况下,标准二进制应用程序代码1013不是完整版本,而是用来补充定制二进制应用程序代码1009以修补代码的不兼容ppf部分。

图11是根据本发明的另一实施例的、用于生成包含一个或多个预取程序和相应预取编程指令的可执行应用程序的另一方法的简化框图。在这种情况下,应用程序生成器以用于描述或者定义最佳预取操作的选择格式来写ppf功能描述1101。可以利用诸如legup、(catapulttechnology公司的)catapult、verilog、hdl(硬件描述语言)、寄存器控制逻辑(rcl)、寄存器传送逻辑(rtl)等的任何适当硬件编程语言来写ppf功能描述1101。将ppf功能描述1101提供给相应ppf编程工具1103,其中该相应ppf编程工具1103被配置成将ppf功能描述1101转换成适用于编程ppf117的预取程序,以根据ppf功能描述1101来运行ppf117。ppf功能描述1101还可以被称为预取定义。

ppf编程工具1103可以被配置成根据配置将ppf功能描述1101转换成数个不同类型的输出中的任一类型的输出。在一个实施例中,ppf编程工具1103对于通过编程器所配置的相应的一个或多个预取程序pgm_ppf,输出编程信息1105的一个或多个块。在又一实施例中,ppf编程工具1103输出包括ppf写和/或ppf配置指令和相应预取程序pgm_ppf的文件1107。在另一实施例中,ppf编程工具1103输出包括ppf写和/或ppf配置指令和相应预取程序pgm_ppf的一个或多个应用程序头文件1109。

适当的应用程序生成器将ppf编程工具1103的输出包含在应用源程序1110中,以生成二进制应用程序文件1007。应用程序生成器将ppf编程工具1103的输出作为ppf信息1111包含在应用源程序1110中。作为例子,可以通过ppf信息1111修改或者补充应用源程序1001,以创建应用源程序1110。ppf信息1111可以包括如上所述的ppf写和/或ppf配置指令和相应预取程序pgm_ppf。然后,将修改后的或者补充后的应用源程序1110提供给生成如上所述的二进制应用程序文件1007的适当编译器1113。

在另一情况下,应用程序生成器在编译原始且未修改的应用源程序1001时,将ppf编程工具1103的输出链接至编译器1113,并且编译器1113利用ppf编程工具1103的输出来补充来自应用源程序1001的信息,以生成二进制应用程序文件1007。

图12是示出根据本发明的又一实施例的、用于生成包含用于编程可编程预取器的一个或多个预取程序的应用程序的又一方法的简化框图。在这种情况下,通过执行检查程序等的代码分析工具1203,处理被示出为(例如,以传统方式所生成的)“标准”二进制应用程序代码1201的诸如任何现有、遗留或者新生成的应用程序等的编译后可执行程序,以判断是否可以使用或者生成预取优化。例如,检查程序确定用于以在执行期间受益于特定预取模式或者内容定向预取算法等的模式来检索信息的代码的任何特定部分。检查程序可以仔细检查任何加载指令,尤其是代码环内所包含的加载指令或者在以重复且可预测的模式来加载信息时所调用的加载指令。

代码分析工具1203判断在标准二进制应用程序代码1201执行期间,是否可以使用rom423中的一个以上预定预取程序来优化预取操作。可选地或者除此以外,代码分析工具1203识别在标准二进制应用程序代码1201执行期间可被用于优化预取操作的任何定制预取算法。如果识别出定制预取定义,那么代码分析工具1203查阅ppf编程工具1205,以生成可被用于编程(诸如处理器100的处理核c1的ppf117等的)处理器的ppf的一个或多个预取程序。ppf编程工具1205将通过代码分析工具1203所确定的任何定制预取定义转换成相应预取程序,其中该相应预取程序被包含在(与包括定制二进制应用程序文件1009的二进制应用程序文件1007类似的)输出二进制应用程序文件1207的定制二进制应用程序文件1209中。定制二进制应用程序文件1209将一个或多个预取程序pgm_ppf、以及相应的ppf写和配置指令write_ppf和config_ppf包含在类似于针对定制二进制应用程序文件1009所述的、如1211所示的定制二进制应用程序文件中。二进制应用程序文件1207还可以包括类似于如上所述的标准二进制应用程序代码1013的标准二进制应用程序代码1213。

上述说明已被展示,以使得本技术领域的普通技术人员能够进行和使用在特定应用程序及其要求的背景下所提供的本发明。尽管参考本发明的特定优选版本相当详细地说明了本发明,但是其他版本和变形例是可能且被考虑的。对于优选实施例的各种修改对于本技术领域的技术人员来说显而易见,并且这里所定义的一般原则可以应用于其他实施例。例如,可以以包括逻辑装置或者电路等的任意适当方式来实现这里所述的电路。本技术领域的技术人员应该理解,在不脱离本发明的精神和范围的情况下,他们可以容易地使用所公开的概念和具体实施例作为基础来设计或者修改用于进行本发明的相同目的的其他结构。因此,本发明并非旨在限定这里所示和说明的特定实施例,而应被赋予与在此所公开的原理和新颖特征相一致的最宽范围。

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