用于多处理系统的软件管理的高速缓存优化系统和方法

文档序号:6650785阅读:253来源:国知局
专利名称:用于多处理系统的软件管理的高速缓存优化系统和方法
技术领域
本发明一般涉及计算机程序开发领域,更具体地,涉及一种用于多处理系统的软件管理的高速缓存优化的系统和方法。
背景技术
在许多现代的多处理器系统中,一般假设通过将计算负荷分摊在该系统的所有节点上,来实现最高或接近最高的性能。在具有多个处理单元的系统内,该多个处理单元中的一个或多个可配置为具有较小的、非高速缓存的本地存储器,其被用较大主存储器备份,该较大主存储器通过直接存储器访问(DMA)可访问。被编译以在该系统上运行的程序即单个源程序有时包括的数据会多于在任一时刻适合于本地存储器的情形。
一种解决本地存储器容量的方法是使用软件管理的高速缓存。通常,如本领域内的技术人员应理解的,软件管理的高速缓存是这样一种计算机程序,即其可分配某些数据以使其在本地或系统高速缓存内进行维护,以减少与收集主存储器内存储的数据相关的查找时间。但是,一般的软件管理的高速缓存方法经常引起它们自身的延时,这会严重影响程序性能。
此外,通过在系统的处理单元上执行专门设计的软件(称作计算机程序或代码)这一过程,可实现计算机系统的利用。这些代码通常通过程序员以计算机语言编写而生成,并且通过编译器来准备在计算机系统上执行。程序设计任务的简易性以及代码在计算机系统上最终执行的效率受到编译器所提供的功能的极大影响。许多现代的简单编译器为单个处理器生成缓慢执行代码。已构造出了其他的编译器,其可为同构型多处理系统内的一个或多个处理器生成可相当快地执行代码。但是,在优化软件管理的高速缓存的好处超过开发努力和/或程序内固有的其他定时等待之前,设计将在具有软件管理的高速缓存的多处理系统内操作的代码经常需要时间密集和/或复杂的整个程序的分析。
因此,需要一种用于多处理系统的软件管理的高速缓存优化系统和/或方法,其可解决至少一些与传统系统和方法相关的问题和缺陷。

发明内容
本发明提供了一种在这样的计算机系统内结合显式数据传送使用软件管理的高速缓存的方法,该计算机系统包括至少一个处理单元,该处理单元具有至少一个直接寻址的本地存储器和至少一个间接寻址的系统存储器,其中该系统存储器通常远大于该本地存储器,并且系统存储器和本地存储器之间的数据移动由软件(DMA)显式控制。接收包括多个数据引用的单个源文件,其中一些数字是对数组数据的引用。分析该多个数据引用,以识别可预测的访问,该访问通常被发现在数组数据内。分析该多个数据引用,以识别次级可预测的访问。任何其余数据访问通常是不可预测的。根据识别出的可预测的访问和识别出的次级可预测的访问聚集该多个数据引用中的一个或多个,以生成聚集的引用。重构该单个源文件,以区分该聚集的可预测的引用和不可预测的访问。根据聚集的引用在重构的代码内插入预取代码。根据聚集的引用在该重构的代码内插入软件高速缓存目录更新代码。重新写入对不可预测的数据元素的引用,以包括显式软件高速缓存查找。将未命中处理器包括在该程序内,并在高速缓存查找失败时,调用该处理器以引发在至少一个本地存储器之一和至少一个系统存储器之一之间的数据传送。


参照下文结合附图进行的说明,可更充分地理解本发明及其优点,在附图中
图1是示出软件管理的高速缓存优化系统的框图;以及图2是示出软件管理的高速缓存优化方法的流程图。
具体实施例方式
在下面的论述中,说明了多种特定的细节以便提供对本发明的彻底理解。但是,本领域内的技术人员应理解,本发明可在不具有这种特定细节的情况下实现。在其他情况下,已用示意图或框图形式示出了公知的组件,以便不会以不必要的细节来混淆本发明。另外,在很大程度上已省略了关于网络通信、电磁信号传输技术、用户接口或输入/输出技术等的细节,这是因为这些细节不被认为对于充分理解本发明来说是必须的,而是被认为处于本领域普通技术人员的理解范围内。
还应指出,除非另外说明,否则文中所述的所有功能可以硬件或软件来实现,或者以它们的某些组合来实现。但是,在优选实施例内,除非另外说明,否则这些功能是由诸如计算机或电子数据处理器的处理器根据诸如计算机程序代码、软件的代码、和/或由被编码为执行这些功能的集成电路来实现的。
参照图1,参考标号10总体指编译器。编译器10是电路或其他适合的逻辑,并且其被配置为计算机程序代码编译器。在一个特定实施例内,如下面更详细描述的,编译器10是配置成将源代码编译成目标代码的软件程序。通常,编译器10被配置成通过用户接口60在前端代码模块20内接收源代码,并通过目标文件读入器25接收目标代码。然后,使用整体程序分析器及优化器30以及预取优化分区模块40提供的参数来处理接收到的代码,以生成特定于处理器的后端代码50,这在下文将更详细地描述。
具体地,在所示实施例内,编译器10包括用户接口60。用户接口60是电路或其他适合的逻辑,并且其被总体配置成接收来自用户的输入。在一个实施例内,用户接口60是在程序源代码内插入的“编译指示(pragmas)”命令或指示与命令行上或者“编译文件(makefile)”命令或脚本内提供的编译器选项标志的组合。在另一实施例内,可使用图形用户接口来提供此信息。本领域的技术人员应理解,还可使用其他配置。
编译器10包括前端代码模块20。前端代码模块20是电路或其他适合的逻辑,并且其被配置成读取源代码并识别编译后的代码将在其上执行的计算机系统的特定参数。编译器10还包括目标文件读入器模块25。目标文件读入器模块25是电路或其他适合的逻辑,且其被配置成读取目标代码并识别编译后的代码将在其上执行的计算机系统的特定参数。通常,目标代码是编译器10先前处理前端代码模块20接收到的源代码,并存储关于通过该编译器内的分析得出的所述源代码的信息的保存结果。在一个特定实施例内,目标文件读入器模块25是软件程序,且其被配置成识别并映射编译后的代码将在其上执行的计算机系统(即“目标”系统)的各个处理节点。另外,目标文件读入器模块25还被配置成识别已识别出的节点的处理能力。
编译器10还包括整体程序分析器及优化器模块30。整体程序分析器及优化器模块30是电路或其他适合的逻辑,其被配置为分析接收到的源和/或目标代码,这在下文将更详细地说明。在一个特定实施例内,整体程序分析器及优化器模块30是软件程序,其被配置成创建接收到的源和/或目标代码的整体程序表示,并分析该计算机程序代码的数组引用。因此,通常,整体程序分析器及优化器模块30可配置成分析整个计算机程序源代码,即接收到的源和/或目标代码,以识别以可某种程度预测的方式依赖于特定程序变量(例如循环归纳变量)的源和/或目标代码的数组引用。如这里所使用的,本领域内的技术人员应理解,整个计算机程序源代码是构成分立的计算机程序的一组计算机程序代码行。
具体地,在一个实施例内,整体程序分析器及优化器模块30被配置成接收源和/或目标代码,并创建接收到的源和/或目标代码的整体程序表示。如这里所用的,整体程序表示是构成整个计算机程序源代码的各个代码段的表示。在一个实施例内,整体程序分析器及优化器模块30被配置成对接收到的源和/或目标代码执行过程间分析,以创建整体程序表示。本领域内的技术人员应理解,还可使用其他方法来创建该接收到的计算机程序源代码的整体程序表示。
在一个实施例内,整体程序分析器及优化器模块30还被配置成对该整体程序表示执行依赖性分析技术,以识别可预测的数据访问。本领域内的技术人员应理解,依赖性分析技术可包括使用接受分析的程序代码的标准数据依赖性特性,其可类似于并行化和/或向量化技术。在一个特定实施例内,整体程序分析器及优化器模块30被配置成执行自动的依赖性分析技术。在可选实施例内,整体程序分析器及优化器模块30被配置成执行基于通过用户接口60从用户接收到的用户输入的引导依赖性分析技术。
在可选实施例内,整体程序分析器及优化器模块30被配置成执行自动的依赖性分析技术和基于通过用户接口60从用户接收到的用户输入的引导依赖性分析技术。因此,在一个特定实施例内,整体程序分析器及优化器模块30可被配置成执行自动的依赖性分析技术,并接收来自用户的提示、建议和/或其他输入。因此,编译器10可被配置成执行基本依赖性分析技术,而附加的定制和优化来自于程序员。因此,编译器10可执行复杂的、冗长的和/或其他适合于自动化的依赖性分析任务,而由程序员进行附加的优化,从而减少程序员执行该任务所需的时间和努力。本领域内的技术人员应理解,还可使用其他配置。
另外,在一个实施例内,整体程序分析器及优化器模块30可被配置成使用整体程序分析中的自动和/或引导依赖性分析技术的结果。具体地,可将自动和/或引导并行化技术的结果用于包括循环组块和/或幺模变换的整体程序分析中,以揭露附加的或次级的可预测的访问。在一个实施例内,整体程序分析器及优化器模块30被配置成自动应用该结果。在可选实施例内,整体程序分析器及优化器模块30可被配置成根据用户输入使用该结果。因此,编译器10可被配置成使应用程序员不用管理识别可预测的数据访问中所涉及的复杂细节,同时允许最终的程序员控制。本领域内的技术人员应理解,还可使用其他配置。
另外,本领域内的技术人员应理解,整体程序分析器及优化器模块30可被配置成聚集所识别出的可预测的数据访问。因此,整体程序分析器及优化器模块30可被配置成通过对可预测的数据访问的聚集来减小多处理系统内的DMA业务量。另外,本领域内的技术人员应理解,整体程序分析器及优化器模块30可被配置成根据可预测的数据访问的聚集来重构所接收到的程序代码。在一个实施例内,重构所接收到的程序代码包括注释该整体程序表示以指示被重构的程序过程。在一个实施例内,整体程序分析器及优化器模块30可被配置成自动重构接收到的程序代码。在可选实施例内,整体程序分析器及优化器模块30可被配置成根据从用户接收到的用户输入来重构接收到的程序代码。本领域内的技术人员应理解,还可使用其他配置。
编译器10还包括预取优化分区模块40。预取优化分区模块40是电路或其他适合的逻辑,且其被一般配置成插入调度代码以实现被重构的数据访问,并插入代码以更新软件管理的高速缓存的目录。
具体地,在一个实施例内,预取优化分区模块40被配置成为识别出的可预测的数据访问生成显式预取命令。本领域内的技术人员应理解,生成显式预取命令可以包括安排代码以相对于该程序内的数据流准时实现预取,这包括识别该程序内的数据和/或命令流点。
另外,预取优化分区模块40被配置成在程序代码内插入所生成的显式预取指令,以在该程序内的合适流点实现数据预取。此外,本领域内的技术人员应理解,预取优化分区模块40被配置成根据所插入的显式预取命令生成并插入合适的代码,以更新软件高速缓存目录。因此,编译器10可被配置成优化该程序内的数据预取。因此,通过超高速缓存模式实现的对相同数据的随机访问可因此发现正确的数据。但是,根据显式预取命令,所识别出的可预测的数据访问被重新配置,以消除高速缓存查找。因此,识别出的可预测的数据访问-经常是程序内最重要的和最频繁的访问-将不会经历高速缓存查找的开销,这可大大降低数据访问等待时间。此外,不同处理器对共享变量的可预测的访问不需要无效事务和/或操作,这也会大大降低数据访问等待时间。
因此,编译器10可被配置成使某些时间密集的程序设计活动自动进行,这些活动诸如识别各种可预测的数据访问并重构该程序代码,以优化软件管理的高速缓存内的预取操作,从而除去了程序员的负担,否则该程序员应该不得不执行这些任务。因此,编译器10可被配置成对计算机程序代码进行分区,以便尤其通过消除冗余的高速缓存查找,在多处理环境内进行软件管理的高速缓存优化。
参照图2,参考标号200总体指示示出软件管理的高速缓存优化方法的流程图。该过程在步骤205开始,其中接收或扫描输入将被分析的计算机程序代码。此步骤可由例如图1的编译器前端和/或前端代码模块20或目标文件读入器模块25执行。本领域内的技术人员应理解,接收或扫描输入将被分析的代码可包括检索存储在硬盘驱动器或其他适合的存储设备上的数据,并将这些数据加载到系统存储器中。另外,在编译器前端和/或前端代码模块20的情况下,此步骤还可包括对源语言程序进行分析,并生成中间形式代码。在目标文件读入器模块25的情况下,此步骤可包括从计算机程序代码的目标代码文件提取中间表示。
在下一步骤210,根据接收到的计算机程序代码生成整体程序表示。此步骤可由例如图1的整体程序分析器及优化器模块30执行。本领域内的技术人员应理解,此步骤可包括进行过程间分析。在下一步骤215,将依赖性分析技术应用于该整体程序表示,以识别可被有利地聚集的可预测的数据访问。此步骤可由例如图1的整体程序分析器及优化器模块30执行。本领域内的技术人员应理解,此步骤可包括使用标准数据依赖性分析、准并行化技术、准向量化技术、循环组块、幺模变换和/或其他技术。
在下一步骤220,根据依赖性分析技术,将聚集建议呈现给用户以便用户输入。此步骤可由例如图1的整体程序分析器及优化器模块30和用户接口60执行。在下一步骤225,接收到用户输入。此步骤可由例如图1的整体程序分析器及优化器模块30和用户接口60执行。本领域内的技术人员应理解,此步骤可包括用户接受和/或拒绝的聚集建议。
在下一步骤230,聚集识别出的数组引用。此步骤可由例如图1的整体程序分析器及优化器模块30执行。本领域内的技术人员应理解,聚集识别出的数组引用可包括注释该整体程序表示。在下一步骤235,重构该程序代码以反映所聚集的数组引用。此步骤可由例如图1的整体程序分析器及优化器模块30执行。
在下一步骤240,安排该重构的代码,以在程序流内保持准时预取。此步骤可由例如图1的预取优化分区模块40执行。在下一步骤245,根据所聚集的数组引用,修改该重构的代码以包括显式预取。此步骤可由例如图1的预取优化分区模块40执行。
在下一步骤250,根据该显式预取修改重构的代码,以包括软件高速缓存目录更新。此步骤可由例如图1的预取优化分区模块40执行。在下一步骤255,用代码代替任何其余的数据引用,以查找该软件高速缓存,如果该查找是成功的或命中,则从缓冲器返回该数据以便加载,或将数据存储在缓冲器内以便存储。对于未命中,调用包含编译器的子程序,即未命中处理器。该未命中处理器在至少一个系统存储器与包含软件高速缓存区或行的本地存储器之间,启动DMA或数据传送。这将从系统存储器中检索未命中的数据。此外,未命中处理器一般需要替换现有的行,以为被传送的新数据腾出空间。在这是必须的情况下,将启动另一传送以将此被逐出的数据复制回系统存储器。未命中处理器还更新高速缓存目录,以反映该高速缓存行的新内容。已由数据聚集/预取代码记录在高速缓存目录内的数据不会被逐出,这是因为针对这些访问生成的代码无法从这样的事件恢复。这些行必须被编译器插入在适当代码位置的指令显式释放。
在步骤260,适当地,对修改后的代码进行编译以生成特定于处理器的代码,并且该过程结束。此步骤可由例如图1的特定于处理器的后端模块50执行。
因此,可根据数据依赖性分析技术,将计算机程序划分为聚集可预测的数据引用的段,利用显式预取修改来消除冗余高速缓存查找,以优化多处理环境内的软件管理的高速缓存。因此,可以有效的方式优化为使用软件管理的高速缓存的多处理器系统设计的计算机程序代码。具体地,多处理环境内的软件高速缓存优化的一些冗长的和/或耗费时间的方面可自动或半自动地进行,这可大大减小应用开发人员所需的时间和/或专门知识,并可以提高多处理系统对于不同技术水平的程序开发人员的可访问性。
上面公开的特定实施例仅是说明性的,因为本发明可按不同但等效的方式来修改和实现,这些方式对于受益于本文的教导的本领域技术人员来说是显而易见的。此外,除了下面权利要求所描述的之外,本发明并不局限于这里所示的结构或设计细节。因此很明显,上面公开的特定实施例可被替换或修改,所有这样的变型均被认为落入本发明的范围和精神之内。因此,下面的权利要求中说明了所寻求的保护范围。
权利要求
1.一种用于对单处理器或多处理器系统内的软件管理的高速缓存进行计算机程序代码优化的方法,包括接收包括多个数组引用的单个源文件;分析该多个数组引用以识别可预测的访问;分析该多个数组引用以识别次级可预测的访问;根据识别出的可预测的访问和识别出的次级可预测的访问聚集该多个数组引用中的一个或多个,以生成聚集的引用;根据该聚集的引用重构上述单个源文件以生成重构的代码;根据该聚集的引用在上述重构的代码内插入预取代码;根据该聚集的引用在上述重构的代码内插入软件高速缓存更新代码;插入对于其余不可预测的访问的显式高速缓存查找代码;在该显式高速缓存查找代码内插入对用于未命中的未命中处理器的调用;将未命中处理器包括在为该程序生成的代码内;在该未命中处理器内,根据最近使用和可预测性选择要逐出的行;以及在该未命中处理器内,对于该要逐出的行和未命中的行发出适合的DMA命令。
2.如权利要求1所述的方法,其中分析该多个数组引用以识别可预测的访问包括依赖性分析技术。
3.如权利要求1所述的方法,其中分析该多个数组引用以识别可预测的访问包括准并行化技术。
4.如权利要求1所述的方法,其中分析该多个数组引用以识别可预测的访问包括准向量化变换。
5.如权利要求1所述的方法,其中分析该多个数组引用以识别次级可预测的访问包括循环组块分析。
6.如权利要求1所述的方法,其中分析该多个数组引用以识别次级可预测的访问包括幺模变换。
7.一种用于对单处理器或多处理器系统内的软件管理的高速缓存进行计算机程序代码优化的处理器,该处理器包括计算机程序,该计算机程序包括用于接收包括多个数组引用的单个源文件的计算机程序代码;用于分析该多个数组引用以识别可预测的访问的计算机程序代码;用于分析该多个数组引用以识别次级可预测的访问的计算机程序代码;用于根据识别出的可预测的访问和识别出的次级可预测的访问聚集该多个数组引用中的一个或多个以生成聚集的引用的计算机程序代码;用于根据该聚集的引用重构上述单个源文件以生成重构的代码的计算机程序代码;用于根据该聚集的引用在上述重构的代码内插入预取代码的计算机程序代码;用于根据该聚集的引用在上述重构的代码内插入软件高速缓存更新代码的计算机程序代码;用于插入对于其余不可预测的访问的显式高速缓存查找代码的计算机程序代码;用于在该显式高速缓存查找代码内插入对用于未命中的未命中处理器的调用的计算机程序代码;用于将未命中处理器包括在为该程序生成的代码内的计算机程序代码;在该未命中处理器内,用于根据最近使用和可预测性选择要逐出的行的计算机程序代码;以及在该未命中处理器内,用于对于该要逐出的行和未命中的行发出适合的DMA命令的计算机程序代码。
8.如权利要求7所述的处理器,其中分析该多个数组引用以识别可预测的访问包括依赖性分析技术。
9.如权利要求7所述的处理器,其中分析该多个数组引用以识别可预测的访问包括准并行化技术。
10.如权利要求7所述的处理器,其中分析该多个数组引用以识别可预测的访问包括准向量化变换。
11.如权利要求7所述的处理器,其中分析该多个数组引用以识别次级可预测的访问包括循环组块分析。
12.如权利要求7所述的处理器,其中分析该多个数组引用以识别次级可预测的访问包括幺模变换。
13.一种用于通过对与程序执行相关联的可预测的数据访问进行编译器分析来提高单处理器或多处理器系统内的软件管理的高速缓存的性能的方法,包括分析所述程序的数据引用;从所述分析中检测所述数据引用中选出的数据引用,这些选出的数据引用以可预测的方式依赖于程序变量;为所述选出的数据引用进行显式预取;以及更新所述软件高速缓存的目录,以指示对应于所述数据引用的数据是可用的;插入对于其余不可预测的访问的显式高速缓存查找代码;在该显式高速缓存查找代码内插入对用于未命中的未命中处理器的调用;将未命中处理器包括在为该程序生成的代码内;在该未命中处理器内,根据最近使用和可预测性选择要逐出的行;以及在该未命中处理器内,对于该要逐出的行和未命中的行发出适合的DMA命令。
14.如权利要求13所述的方法,其中分析所述程序的数据引用包括依赖性分析技术。
15.如权利要求13所述的方法,其中分析所述程序的数据引用包括准并行化技术。
16.如权利要求13所述的方法,其中分析所述程序的数据引用包括准向量化变换。
17.如权利要求13所述的方法,其中从所述分析中检测包括循环组块分析。
18.如权利要求13所述的方法,其中从所述分析中检测包括幺模变换。
19.如权利要求13所述的方法,还包括聚集以可预测的方式依赖于程序变量的所述数据引用。
全文摘要
本发明提供一种用于对单处理器或多处理器系统内的软件管理的高速缓存进行计算机程序代码优化的方法。接收包括多个数组引用的单个源文件。分析多个数组引用以识别可预测的访问。分析该多个数组引用以识别次级可预测的访问。根据识别出的可预测的访问和识别出的次级可预测的访问聚集多个数组引用中的一个或多个,以生成聚集的引用。根据聚集的引用重构该单个源文件以生成重构的代码。根据聚集的引用在重构的代码内插入预取代码。根据聚集的引用在重构的代码内插入软件高速缓存更新代码。插入对于其余不可预测访问的显式高速缓存查找代码。在显式高速缓存查找代码内插入对用于未命中的未命中处理器的调用。将未命中处理器包括在为程序生成的代码内。
文档编号G06F12/08GK1783013SQ200510123670
公开日2006年6月7日 申请日期2005年11月18日 优先权日2004年12月2日
发明者J·K·P·奥布赖恩, K·M·奥布赖恩 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1