首页> 中国专利> 包括硬件及软件预取的方法和信息处理系统

包括硬件及软件预取的方法和信息处理系统

摘要

本发明涉及包括硬件及软件预取的方法和信息处理系统。具体地,用于信息处理系统(IHS)的预取优化器工具可以通过控制硬件预取操作和软件预取操作二者,来有效改进存储器访问时间。预取优化器工具选择性地禁用应用程序内感兴趣的指令序列的预取指令。当禁用不同的预取指令时,该工具测量感兴趣的指令序列的执行时间。在循环通过禁用不同的预取指令并采取相应的执行时间测量的同时,该工具可保持硬件预取深度不变。另选地,针对感兴趣的指令序列中的每个禁用预取指令,该工具可循环通过不同的硬件预取深度并且在每个硬件预取深度处采取相应的执行时间测量。该工具选择与基线执行时间相比可提高执行时间的硬件预取深度和预取指令禁用的组合。

著录项

  • 公开/公告号CN103197956A

    专利类型发明专利

  • 公开/公告日2013-07-10

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN201310007964.4

  • 发明设计人 R·R·海施;

    申请日2013-01-09

  • 分类号G06F9/46;

  • 代理机构北京市金杜律师事务所;

  • 代理人王茂华

  • 地址 美国纽约阿芒克

  • 入库时间 2024-02-19 19:15:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-10-05

    授权

    授权

  • 2013-08-07

    实质审查的生效 IPC(主分类):G06F9/46 申请日:20130109

    实质审查的生效

  • 2013-07-10

    公开

    公开

说明书

技术领域

本文公开内容一般涉及信息处理系统(IHS),并且更具体地, 涉及采用预取(prefetch)以提高性能的IHS。

背景技术

信息处理系统(IHS)包括处理器,该处理器访问主存储器中的 可执行代码以处理该代码。使用硬件预取,处理器可以在处理器实 际需要执行指令之前从主存储器加载这些指令。处理器可以将这些 预取的指令存储在快速内部高速缓存或快速外部高速缓存中,直到 处理器执行这些指令为止。这种设置可以加速处理器从主存储器中 检索的指令的执行。

IHS也可以采用软件预取以加速指令的执行。在这种方法中,人 或编译器可以在程序代码中插入预取指令,以有效地加速对主存储 器中的指令的处理器访问。

发明内容

在一个实施方式中,公开了一种预取优化方法,该方法包括:通 过信息处理系统(IHS)的预取优化器工具,接收感兴趣的指令序列, 该感兴趣的指令序列包括在特定加载指令之前的相对软件预取指令的 多个指令。该方法还包括由所述预取优化器工具,在所述IHS的处理器 中设置硬件预取机制以从存储器存储中提取指令至多个硬件预取深度 中的一个。该方法还包括通过所述预取优化器工具,禁用所述感兴趣的 指令序列中的多个特定预取指令。该方法还包括当所述特定预取指令被 禁用时,由所述预取优化器工具,测量所述感兴趣的指令序列的执行时 间,所述测量在所述硬件预取机制被设置为特定预取深度时由所述预取 优化器工具进行。该方法还包括在禁用所述感兴趣的指令序列中的不同 的特定提取指令的同时,由所述预取优化器工具将所述硬件预取机制的 所述硬件预取深度改变为另一个硬件预取深度,并且重复对所述感兴趣 的指令序列的所述执行时间的测量。

在另一个实施方式中,公开了一种信息处理系统(IHS),其包括 处理器和存储器,该存储器连结到所述处理器。所述存储器配置有预取 优化器工具,该预取优化器工具接收感兴趣的指令序列,该感兴趣的 指令序列包括在特定加载指令之前的相对软件预取指令的多个指令。该 预取优化器工具将所述处理器中的硬件预取机制设置为多个硬件预取 深度中的一个以从所述存储器中提取指令。该预取优化器工具禁用所 述感兴趣的指令序列中的特定预取指令。该预取优化器工具当所述特 定预取指令被禁用时,测量所述感兴趣的指令序列的执行时间,所述测 量在所述硬件预取机制被设置为特定预取深度时由所述预取优化器工 具进行。该预取优化器工具在禁用所述感兴趣的指令序列中的不同的 特定提取指令的同时,将所述硬件预取机制的所述硬件预取深度改变为 另一个硬件预取深度,并且重复对所述感兴趣的指令序列的所述执行时 间的测量。

在又一个实施方式中,公开了一种预取优化方法,该方法包括通 过信息处理系统(IHS)的预取优化器工具,接收感兴趣的指令序列, 该感兴趣的指令序列包括在特定加载指令之前的相对软件预取指令的 多个指令。该方法还包括通过所述预取优化器工具,禁用所述感兴趣的 指令序列中的特定预取指令,由此提供禁用特定预取指令。该方法还包 括随着所述处理器中的硬件预取机制在多个不同的硬件预取深度之间 改变硬件预取深度,所述预取优化器工具测量所述感兴趣的指令序列的 执行时间,以确定针对所述不同的硬件预取深度中的每一个和与所述禁 用特定预取指令相对应的相应执行时间。该方法还包括:由所述预取优 化器工具重复针对所述感兴趣的指令序列中的另一个特定预取指令的 禁用和测量,由此提供禁用的另一个特定预取指令,以确定针对所述不 同的硬件预取深度中的每一个和与所述禁用的另一个特定预取指令相 对应的相应执行时间。

在再一个实施方式中,公开了一种包括计算机可读存储介质的预 取优化器工具计算机程序产品。所述预取优化器工具包括第一程序指 令,其接收感兴趣的指令序列,该感兴趣的指令序列包括在特定加载指 令之前的相对软件预取指令的多个指令。所述预取优化器工具还包括第 二程序指令,其将处理器中的硬件预取机制设置为多个硬件预取深度中 的一个,以从所述存储器中提取指令。所述预取优化器工具还包括第三 程序指令,其禁用所述感兴趣的指令序列中的特定预取指令。所述预取 优化器工具还包括第四程序指令,当所述特定预取指令被禁用时,该第 四程序指令测量所述感兴趣的指令序列的执行时间,所述测量在所述硬 件预取机制被设置为特定预取深度时由所述预取优化器工具进行。所述 预取优化器工具还包括第五程序指令,在禁用所述感兴趣的指令序列中 的不同的特定提取指令的同时,该第五程序指令将所述硬件预取机制的 所述硬件预取深度改变为另一个硬件预取深度并且重复对所述感兴趣 的指令序列的所述执行时间的测量。所述第一、第二、第三、第四和第 五程序指令存储在所述计算机可读存储介质上。

附图说明

附图仅示出了本发明的示例性实施方式,因此不限定本发明的 范围,因为本发明的概念使得这些实施方式本身适合于其他同样有 效的实施方式。

图1是采用所公开的预取优化器方法的信息处理系统(IHS)的 方框图。

图2A是所公开的预取优化器方法可以采用以控制硬件预取深 度的硬件预取控制寄存器的一种表示。

图2B是所公开的预取优化器方法可以采用以提高存储器访问性 能的软件预取的一种表示。

图3是示出在所公开的预取优化器方法的一个实施方式中的处 理流程的流程图。

图4是示出在所公开的预取优化器方法的另一个实施方式中的 处理流程的流程图。

具体实施方式

所公开的信息处理系统(IHS)包括预取优化器工具,该预取优 化器工具,其可以控制和调整硬件预取和软件预取二者以加速由处 理器进行的对程序代码的执行。在一个实施方式中,预取优化器工 具控制硬件预取电路采用的硬件预取深度,以加速由处理器进行的 存储器访问。硬件预取深度确定处理器中的硬件预取电路试图加速 对存储器中的程序代码的访问继续预取的侵略性(aggressiveness)。 预取优化器工具也可以利用选择性软件预取提高对存储器中的程序 代码的访问。在这种选择性软件预取中,预取优化器工具有选择地 禁用程序代码中感兴趣的指令序列中的特定预取指令,以确定这种 禁用对存储器访问性能的积极或消极的影响。预取优化器工具可循 环通过感兴趣的指令序列的每个预取指令,并且测量禁用每个预取 指令的存储器性能影响。预取优化器工具跟踪禁用实际上提高了存 储器性能的那些特定预取指令,并且存储这种信息作为预取指令禁 用信息。

在一个实施方式中,所公开的预取优化器工具循环通过不同的 硬件预取深度值,并且通过监测感兴趣的指令序列的执行时间作为 硬件预取深度值变化,来确定对有效存储器访问速度的影响。在一 个实施方式中,对于每个硬件预取深度值,所公开的预取优化器工 具循环通过感兴趣的指令序列的中的预取指令,以确定减少感兴趣 的指令序列的的执行时间的预取指令禁用信息。通过分析软件预取 指令禁用以及硬件预取深度值选择对存储器性能的相互交互影响, 预取优化器工具可收敛于(converge on)选择相互提高存储器访问 的禁用软件预取指令和硬件预取的深度值。预取优化器工具存储选 择的硬件预取深度值以及相应的预取指令禁用信息。预取优化器工 具可以重写或修改程序代码的感兴趣的指令序列,以禁用选择的预 取指令,并指定处理器以选择的硬件预取深度值进行硬件预取操作。

图1是采用所公开的预取优化器方法的信息处理系统(IHS)100 的框图。预取优化器方法可以提供对存储器中的程序代码进行更快 访问的处理器。IHS 100包括处理器105,其可以包括多个核。IHS 100 处理、传输、通信、修改、存储或以其他方式处理数字形式、模拟 形式或其他形式的信息。处理器105包括高速缓冲存储器110。处理 器105还包括硬件预取电路112,其采用硬件预取控制寄存器 (HPCR)205来控制硬件预取深度。HPCR 205中的硬件预取深度 值控制预取到存储器120中的深度,如下面更详细的描述。在一个 实施方式中,HPCR 205存储的值越大,硬件预取操作穿透到存储器 越深。处理器105也可以使用其他机制来控制硬件预取深度。例如, 另一个寄存器或存储器位置中的值可控制硬件预取深度。

IHS 100包括总线115,其经由存储器控制器125和存储器总线 130将处理器105连结到存储器120。在一个实施方式中,系统存储 器120在处理器105的外部。系统存储器120也可以被称为主存储 器。系统存储器120可以是静态随机存取存储器(SRAM)阵列或动 态随机存取存储器(DRAM)阵列。处理器105还可以包括高速缓 存110示出的L1、L2和L3高速缓存的本地存储器。视频图形控制 器135将显示器140连结到总线115。如硬盘驱动器、光CD驱动器、 DVD驱动器或其他非易失性存储器的非易失性存储145连结到总线 115,以向IHS 100提供信息的永久存储。存储器120和非易失性存 储器145是存储器存储的两种形式。非易失性存储器145存储管理 IHS 100的操作的操作系统190(OPERATING SYS)。如键盘和指点 设备的I/O设备150经由I/O控制器155和I/O总线160连结到 总线115。

如USB、IEEE 1394总线、ATA、SATA、PCI、PCIE、DVI、 HDMI和其他总线的一个或多个扩展总线165连结到总线115,以便 于将外设和设备连接到IHS 100。网络接口适配器167连结到总线 115,以支持以有线或无线方式将IHS 100连接到网络和其他信息处 理系统。网络接口适配器167也可以被称为网络通信适配器或网络 适配器。虽然图1示出了采用处理器105的一个IHS,但是IHS可 以采取许多形式。例如,IHS 100可以采取桌上型、服务器、便携式、 膝上型、笔记本、平板的形式或其他形式因素的计算机或数据处理 系统。IHS 100可以采取其他形式因素,如游戏设备、个人数字助理 (PDA)、便携式电话设备、通信设备或包括处理器和存储器的其 他设备。

IHS 100包括在如CD、DVD或其他媒体的数字媒体170上的预 取优化器工具计算机程序产品300。为简单起见,下面将使用术语预 取优化器工具或预取优化器300。数字媒体170还存储编译器175 和应用程序185。应用185表示包括编译器175可以插入(inject) 预取指令到其中的程序代码的任何应用程序。在实际实践中,IHS 100可以在非易失性存储器145中将编译器175、应用程序185和预 取优化器300存储为编译器175’、应用程序185’和预取优化器300’。 IHS 100也可以将操作系统190(OPERATING SYS)存储在非易失性 存储145中。当IHS 100初始化时,该IHS将操作系统190加载至 系统存储器120中,以作为操作系统190’执行。IHS 100也将编译器 175’和应用程序185”加载到系统存储器120中,以作为编译器175” 和应用程序185”执行。IHS 100还将预取优化器300’加载到系统存 储器中,以执行为预取优化器300”。预取指令也可以被称为触摸指 令或触摸存储器指令。

图2A和图2B一起表示预取优化器300可组合采用以提高对存 储器的访问的两种类型的预取。更具体地说,图2A示出了硬件预取 电路112可以采用以控制硬件初始化预取的硬件预取控制寄存器 (HPCR)205,而图2B示出了指令序列210,其描绘了所公开的方 法可以采用的一种类型的软件预取。返回参照图1,处理器105从存 储器120检索或提取代码行,以便于执行。当处理器105执行存储 器120提供的特定代码行时,硬件预取电路112提前有效预测并且 预取当前执行的指令之后的代码行。在这种方式中,如果处理器105 应需要预取的代码,则处理器可以从本地高速缓存110快速访问预 取的代码,而不是等待对系统存储器120的相对长的访问。

预取深度指在预取操作中硬件预取电路112请求信息深入到存 储器120中多少。在一个简化示例中,预取深度可从值1至值32变 化,其中,1表示最小的预取深度而32表示最大的预取深度。为了 设置硬件预取深度,处理器105在硬件预取控制寄存器(HPCR)205 105中存储预取深度值。用户、程序员、机器、程序或其他实体可向 处理器105提供初始预取深度值,以存储在HPCR 205中。如下面所 讨论的,在以初始预取深度值进行性能测试后,预取优化器300将 向HPCR 205提供其他的预取深度值,以进行性能测试。在这个示例 中,HPCR 205中为1的初始预取深度值指示硬件预取电路112:从 存储器120中预取处理器105当前执行的指令之后的16行代码。 HPCR 205中为32的初始预取深度值可以指示硬件预取电路112在 存储器120中更深地预取,例如,预取处理器105当前执行的指令 之后的256行代码。这些预取深度值和相应的预取代码行的数目是 出于示例的目的而给出的,不应被视为以任何方式作为限制。

再次参照图2A,随着预取深度值在从1到32变化,HPCR 205 表现从HPCR 205的顶部到底部在预取深度方面的增加的侵略性。在 一个实施方式中,预取优化器300可以通过将不同的预取深度值写 入到HPCR 205中,控制或调整硬件预取电路112采用的预取深度, 以从存储器120中预取信息。针对不同的预取深度值,预取优化器 300可以测量用于程序代码的特定的指令序列的处理时间方面的性 能。预取优化器300工作以找到最小化用于特定的指令序列的处理 时间。虽然预取优化器300对特定的指令序列执行上述硬件预取方 法,但是针对不同的软件预取条件,预取优化器300也针对相同的 指令序列来执行处理时间分析。软件预取条件包括程序代码内的预 取指令放置。硬件预取和软件预取可相对于存储器存取性能彼此相 互作用。

再次参照图2B,预取优化器300操作存储器120存储的程序代 码的感兴趣的指令序列210。指令序列210可以是应用程序185的一 部分。如行211的水平行表示一行代码。在本例中,行211是程序 代码的指令序列210的第一行。行211以下的行表示行211表示的 指令之后的指令。条件分支指令213在第一行211之后的几行后。 行211与条件分支213之间的指令包含地形成内联(in-line)代码段 215。

当指令序列210执行时,采取或不采取条件分支213。在这个特 定的示例中,如果采取条件分支213,则处理流程从条件分支213 继续至行221,其是包括LOAD A指令223的指令路径225中的第 一条指令。该道路也被称为LOAD A指令路径225。然而,如果不 采取条件分支,则处理流程从条件分支213继续至行231,其是包括 LOAD B指令233的指令路径235中的第一条指令。该路径也被称 为LOAD B指令路径235。

为了便于讨论的目的,假设在一些较早的时间处,编译器将 PREFETCH A指令217和PREFETCH B指令B 219插入指令序列210 的代码段215。在条件分支213之前插入PREFETCH A指令217的 目的是使得LOAD A指令223需要执行的信息将在处理器105的高速 缓冲存储器110中准备好,以供处理器试图执行LOAD A指令223 时使用。类似地,在条件分支213之前插入PREFETCH B指令219 的目的是,使得LOAD B指令233需要执行的信息将在处理器105的 高速缓冲存储器110中准备好,以在处理器试图执行LOAD B指令 233时使用。

针对由处理器进行的存储器访问,在这种方式中插入预取指令 并不总是导致性能提升。太多不必要的预取实际上可能堵塞存储器 总线130和/或115总线与存储器流量。与指令序列中210的其他位 置相比,将预取指令放置在指令序列210内的某些位置中可能是更 有利的或不太有利的。在一个实施方式中,所公开的预取优化器300 系统地禁用感兴趣的指令序列210中的特定预取指令,并且测量这 种对存储器性能的禁用的相应影响。通过以NOP(无操作)指令取 代PREFETCH A指令,预取优化器300可以禁用如PREFETCH A指 令217的特定预取指令。预取优化器300然后测量感兴趣的特定指 令序列210采取的时间以执行并且存储该定时信息。预取优化器300 可以通过将原始PREFETCH A指令写回到以前其在指令序列中的先 前的位置,而重新启用先前已禁用指令。代码优化器300然后可以 移动到如PREFETCH B指令219的另一个预取指令,并且执行相同 的测试。换句话说,代码优化器300可以将NOP写到感兴趣的指令 序列210中的PREFETCH B位置,并再次测量指令序列210采取的 时间以执行。在一个实施方式中,代码优化器300循环通过感兴趣 的指令序列210中的PREFETCH指令中的每一个,执行执行时间测 量测试,并且存储执行时间与每个PREFETCH指令的禁用相关联的感 兴趣的指令序列。

此外,虽然如上所述循环通过并测试PREFETCH指令的禁用, 但是针对测试禁用的每个PREFETCH指令,预取优化器300也可以 指示硬件预取电路112来循环通过硬件预取深度1至32中的每一个, 并且在每一个硬件预取深度处采取性能测量。该性能测量再次测量 处理器105采取以执行同一感兴趣的特定指令序列210的时间。代 码优化器300通过禁用和重新启用不同的软件PREFETCH指令来继 续测试,同时循环通过硬件初始化预取的不同预先取深度。代码优 化器300以这种方式继续进行迭代,直到它找到启用/禁用预取指令 与相应的硬件预取深度的组合为止,该相应的硬件预取深度减少和/ 或最小化感兴趣的指令序列的执行时间。以这种方式,代码优化器 175通过共同控制硬件预取操作和软件预取操作二者来调谐处理器 105的操作。

在一个实施方式中,预取优化器300可以通过循环通过其预取 指令并且测量特定指令序列中的性能对应用程序185的可执行副本 进行操作,同时1)禁用/启用选择的预取指令,以及2)循环通过多 个预取深度值,如上所述。通过禁用选择的预取指令并且测量对性 能的影响,预取优化器300将原始应用程序185修改成修改后的应 用程序。这在不同的预取指令的每个禁用之后有效地产生了不同的 修改后的应用程序。预取优化器300将应用程序185的原始副本存 储到该预取优化器300在禁用感兴趣的指令序列210中的下一个预 取指令之前可以返回的地方。在另一个实施方式中,代码优化器300 可以实时修改应用程序185”,同时应用程序185”在运行时间在存储 器120中。在任何一种情况下,如果代码优化器300找到禁用特定 预取指令不降低性能或实际上提高了性能,则代码优化器300可将 禁用的特定预取指令保留在修改后的应用程序185的最终版本中。 如果这样的多个预取指令禁用提供了特定硬件预取深度的用于感兴 趣的指令序列的改进的执行时间,则代码优化器300可将禁用的多 个预取指令保留在修改后的应用程序185的最终版本中。换句话说, 代码优化器300可以在代码优化器300确定的特定的硬件预取深度 处生成具有禁用的多个软件预取指令的修改后的应用程序185,以在 修改后的应用程序185中对感兴趣的指令序列提供改进的执行时间。

图3是描绘在所公开的预取优化器方法的一个实施方式中的处 理流程的流程图。处理流程在开始305处启动。如参见块310,处理 器105和预取优化器300访问存储的应用程序185,以接收如图2 描绘的代表性的感兴趣的指令序列210的指令流。预取优化器300 选择初始的硬件预取深度,如参见块315。在一个实施方式中,硬件 预取深度值可以包括1与32之间的值。在一个实施方式中,由于预 取深度值增加,因此处理器105预取的应用程序代码的部分变得较 大。

在如参见块320的一些时间点处,设计者、程序员、程序、编译器 或其他实体将预取指令插入到如由图2B中PREFETCH A 217和 PREFETCH B 219所示的指令序列210中。设计者或其他实体针对这种 预取指令选择指令序列210,以在处理器105实际需要信息之前通过从 存储器210中提取信息来有效加速存储器访问。将预取指令插入到指 令序列也可以被称为预取指令放置。该预取指令插入形成原始指令 序列,该原始指令序列包括预取指令。代码优化器300操作包括预 取指令的原始指令序列,试图有效改善存储器性能。该原始指令序 列也可以称为感兴趣的指令序列或感兴趣的代码序列。

利用现在放置在感兴趣的指令序列中的这样的预取指令,并且进一 步利用选择的特定硬件预取深度,预取优化器300针对感兴趣的特定指 令序列测量执行性能,如参见块325。例如,预取优化器300可以测量 特定指令序列开始执行时的时间与特定指令序列结束执行时的时间之 间的差异。通过调谐感兴趣的指令序列中的硬件预取深度和软件预取指 令禁用,这为随后与预取优化器300实现的其他性能时间的比较建立了 基线执行时间。预取优化器工具300存储根据该测量的基线执行时间, 以用于如下所述的稍后使用。

预取优化器300保存当前的硬件预取深度值和当前预取指令位 置信息,如参见块330。预取优化器300还保存包括预取指令的感兴 趣的原始指令序列的副本,如参见块335。

预取优化器300选择新的预取深度值,如参见块340。例如,在 测试禁用图2B中描绘的单独预取指令的性能效果之前,代码优化器 300为图2A中描绘的硬件预取控制寄存器(HPCR)205选择特定的 预取深度。在一个实施方式中,在选择特定的硬件预取深度之后, 预取优化器300在循环通过并且测量与禁用感兴趣的指令序列中的 预取指令中的每一个相对应的性能的同时,保持固定的预取深度。 在这种方法中,预取优化器300在对于其禁用的每个预取指令获得 不同性能的读取,同时将硬件预取深度维持在特别限定值处。一旦 预取优化器300对于其禁用的每个预取指令获得了性能读数,该预 取优化器300就会将硬件预取深度改变为其他值,并且通过进行与 每个禁用预取指令相对应的性能测量再次循环。

更具体地,在块340选择新的硬件预取深度之后,预取优化器 300选择预取指令的集合,以在感兴趣的特定的指令序列中启用/禁 用,如参见块345。例如,在一个实施方式中,预取优化器300可以 选择指令序列中的所有预取指令或指令序列中的所有预取指令的子 集。为了便于讨论,假设预取优化器300选择感兴趣的指令序列中 的所有预取指令进行分析。预取分析器300然后通过选择的预取指 令开始循环,其第一预取指令被指定为当前预取指令。预取优化器 300执行测试,以确定处理器105是否应禁用当前预取指令,如参见 判定块350。

在当前指令被包括在预取优化器300在块345中选择为禁用预 取指令的集合中的情况下,该预取优化器300禁用当前预取指令。 如果当前预取指令不是针对指令序列中的分析选择的预取指令中的 一个,则预取优化器300移动到代码序列中的下一条指令,如参见 块355。在那种情况下,下一条指令变为当前指令。当预取优化器 300确实发现当前预取指令是针对块345中的测试选择的预取指令 中的一个时,则预取优化器300通过以NOP指令取代当前预取指令 来禁用当前预取指令,如参见块360。这将有效地禁用当前预取指令。 当预取指令表现出对加载指令的依赖时,预取优化器300还可以可 选地禁用加载指令,如参见块365。为了说明这种依赖情况,表1 在下面示出了感兴趣的代码序列的一部分:

表1

li r4,1234;加载立即值1234到寄存器r4

li r5,5678;加载立即值5678到r5

dcbt r4,r5;数据高速缓存块触摸(预取的一种形式的)

           ;在地址R4+R5处的数据

当代码优化器300用NOP指令替代dcbt数据高速缓存块触摸指令 (预取的一种形式)以禁用该指令时,那么这两个加载指令不再是 必要的。这是假设在稍后需要寄存器R4和R5的代码中没有依赖。 在这种情况下,代码优化器300可以利用NOP指令替代这两个加载 指令。然而,如果代码优化器300无法确认在稍后需要寄存器R4和 R5的代码中没有依赖,则代码优化器300也可仍然在感兴趣的指令 序列中保留这两个加载指令。在上述情况下禁用两个加载指令可增 加存储器访问性能。

预取优化器300测量现在修改后的感兴趣的指令序列的执行时 间以确定性能,如参见块367。例如,预取优化器300可以测试以确 定:与在块325处测量的原始代码序列的基线执行时间相比,它现 在是否采取更少执行时间来利用禁用的特定预取指令执行感兴趣的 代码序列。预取优化器300存储用于包括禁用预取指令或多个指令 的修改后的指令序列的执行时间。更具体地说,如参见块369,预取 优化器工具300存储包括连同特定禁用指令(或指令的组合)的每 个执行时间、以及在该执行时间实现的硬件预取深度的性能度量信 息。预取优化器300执行测试,以确定预取优化器300是否已经测 试过感兴趣的指令序列中的所有选择的预取指令,如参见判定块 370。如果预取优化器300确定指令序列中仍然有更多预取指令要测 试,则预取优化器前进到如参见块355的下一个预取指令处并且测 试继续。然而,如果预取优化器300确定它已经测试了感兴趣的指 令序列中的所有选择的预取指令,则预取优化器300可选地回复到 原始指令序列以进行进一步测试,如参见块375。在这种方式中,通 过在继续测试之前重新启用先前禁用的预取,预取优化器300可以 针对每个单独的预取指令对性能的影响进行测试。然而,如果需要 的话,预取优化器300可在返回到块340之前可选地保留修改后的 指令序列内禁用指令,以选择新的硬件预取深度并且到用于选择其 他的预取指令的块345,以为了测试目的而禁用。在测试感兴趣的指 令序列的过程中,针对代码优化器循环通过的硬件预取深度中的每 一个,代码优化器300可替代地禁用块345中给出的预取指令的相 同集合。

在返回块340选择新的硬件预取深度之前,预取优化器300执 行测试,以确定预取优化器300是否已经测试了所有的硬件预取深 度,如参见块380。如果预取优化器300还没有测试所有的硬件预取 的深度,则预取优化器300选择下一个预取深度值,如参见块340。 但是,如果预取优化器300已经测试了所有的硬件预取的深度值, 则预取优化器300检索存储的度量信息,并且选择硬件预取深度和 禁用的软件预取指令的最佳组合,如参见块385。在一个实施方式中, 预取优化器300通过将硬件预取深度与禁用预取指令的所有组合的 相应的执行时间相比较做出该确定,以选择表现出最低执行时间以 及因而最佳总体性能的组合,如参见块385。预取优化器工具300 存储该组合作为配置信息,其指定在减少执行时间方面共同提供改 进的性能的选择的硬件预取深度值以及相应的预取禁用信息,如参 见块390。预取优化器300可以写入包括根据块385确定的和块390 的配置信息指定的组合而修改的感兴趣的指令序列的应用程序185 的版本,如参见块392。此应用程序版本包括通过禁用预取指令的组 合修改的原始代码,同时指定供处理器105中的硬件预取电路112 使用的期望选择的硬件预取深度。然后处理流程可以在结束块394 结束。

在一个实施方式中,用户可以选择以允许预取优化器300继续 运行而不终止于结束块394。以这种方式,预取优化器300继续收敛 于合作以提高感兴趣的指令序列的存储器访问的性能的硬件预取深 度值和特定的禁用预取指令的组合。预取优化器300选择的硬件预 取深度值可影响处理器105执行的所有程序。然而,在一个实施方 式中,预取优化器300选择以禁用的特定禁用的(多个)预取指令 可只影响包括感兴趣的特定指令序列的程序。

在上述实施方式中,预取优化器工具300保持硬件预取深度不变, 同时循环通过禁用不同的预取指令,并采取相应的执行时间测量。在另 选实施方式中,对于工具300在感兴趣的指令序列中禁用的每个预取指 令,工具300可以循环通过不同的硬件预取深度,并在每个硬件预取深 度处采取相应的执行时间测量。在实施方式的变形中,对于工具300在 感兴趣的指令序列中禁用预取指令的每个组合,工具300可以循环通过 不同的硬件预取深度,并在每个硬件预取深度处采取相应的执行时间测 量。如上所述,与基线执行时间相比,工具300选择可以改善感兴趣 的指令序列的执行时间的硬件预取深度和预取指令禁用的组合。以 这种方式,预取优化器工具300可以相对于存储器访问提供提高的 性能。

在另一个实施方式中,预取优化器300可使用遗传方法以找到 硬件预取深度和选择的预取指令的集合的组合,以在感兴趣的指令 序列中禁用,以有效改善存储器访问时间。例如,预取优化器300 可以采用比特串来表示硬件预取深度选择和感兴趣的代码序列中的 所有预取指令的组合。在串的一个部分中,1表示禁用的预取指令, 而0表示启用的预取指令。如上所述,预取优化器300可以在预取 指令上写入NOP指令来禁用该指令。比特串指定预取深度和针对禁 用选择的特定预取指令。预取优化器300通过使其比特突变 (mutating)并且观察对感兴趣的指令序列的存储器访问时间的影 响,来发展(evolve)比特串。通过继续发展比特串以在减少测量存 储器访问时间方面更好地组合,预取优化器300可以收敛于预取深 度和特定禁用预取指令的期望组合。

所公开的预取优化器方法可以利用NOP指令取代预取指令,以有 效地禁用预取指令。当预取指令和NOP指令表现相同的大小时,预取 优化器300可以直接用NOP指令替代预取指令。然而,在预取指令表 现出不同于NOP指令的大小的情况下,预取指令或NOP指令可能需要 填充附加数据,以便一个可以替代另一个。更具体地,如果预取指令和 NOP指令表现出不同的尺寸,则编译器175’可填充预取指令或NOP指 令,使得以应用程序185”的可执行形式的一个取代另一个。预取优化器 300可以在可执行程序代码文件中、或动态地在存储器120中执行的应 用程序文件185’的加载图像中,执行利用NOP指令取代预取指令的此 取代。

尽管工具300被称为预取优化器工具,应该理解的是,预取优 化器工具300可以不总是确定硬件预取深度和禁用预取指令的绝对 理想组合。然而,代码优化工具300可确定硬件预取深度和禁用预 取指令的改进的组合。还应当理解的是,所公开的预取优化器方法 可对包含感兴趣的指令序列的可执行文件进行操作。另选地,在运 行时,当感兴趣的指令序列在存储器中时,所公开的预取优化器方 法可以对感兴趣的指令序列进行操作。在一个实施方式中,预取优 化器工具300可以是编译器175的一部分。

图4是描绘在所公开的预取优化器方法的另选实施方式中的处理流 程的流程图。在图3描绘的处理中,预取优化器工具300可保持不变, 同时对于不同的相应的禁用预取指令测量感兴趣的指令序列的执行时 间测量。换句话说,在移动到另一个硬件预取深度进行测试之前,预取 优化器工具保持硬件预取深度不变,同时循环通过且禁用不同的预取指 令,并且针对每个禁用预取指令和/或禁用预取指令的组合采取相应的 执行时间测量。然而,在图4的处理中,预取优化器工具可以选择感兴 趣的指令序列中的特定预取指令,并且循环通过不同的硬件预取深度。 在这种情况下,在移动到另一个预取指令、并且重复循环通过硬件 预取深度的处理、并且采取针对所述预定指令的相应的各自执行时 间测量之前,预取优化器工具采取在多个硬件预取深度中的每一个 处针对特定预取指令执行时间测量。

当参照图3流程图的预取优化器时,使用指定的预取优化器300。 然而,当参照图4流程图的替代预取优化器时,使用指定的预取优 化器400。处理流程开始启动405。如参见块410,处理器105和预 取优化器400访问存储的应用程序185以接收如图2描绘的代表性 的感兴趣的指令序列210的指令流。

在如参见块420的一些时间点处,设计者、程序员、程序、编译器 或其他实体将预取指令插入到如由图2B中PREFETCH A 217和 PREFETCH B 219所示的指令序列210中。设计者或其他实体选择在感 兴趣的指令序列210中的位置以插入这样的预取指令,以在处理器105 实际需要信息之前通过从存储器210中提取信息有效加速存储器访问。 该预取指令插入形成原始指令序列,该原始指令序列包括预取指令。 预取优化器400操作包括预取指令的原始指令序列,试图有效改善 存储器性能。该原始指令序列也可以称为感兴趣的指令序列或感兴 趣的代码序列。

利用现在放置在感兴趣的指令序列中的这样的预取指令,并且进一 步利用选择的特定硬件预取深度,预取优化器400针对感兴趣的特定指 令序列测量执行性能,如参见块425。例如,预取优化器400可以测量 特定指令序列开始执行时的时间与特定指令序列结束执行时的时间之 间的差异。这为随后与预取优化器400实现的其他性能时间的比较建立 了基线执行时间,通过调谐感兴趣的指令序列中的硬件预取深度和软件 预取指令禁用。预取优化器工具400存储根据该测量的基线执行时间以 便于稍后使用,如参见块430。

预取优化器400还保存当前的硬件预取深度值和当前预取指令 位置信息,如参见块430。预取优化器400还保存包括预取指令的感 兴趣的原始指令序列的副本,如参见块435。预取优化器400选择特 定预取指令,以在感兴趣的指令序列中禁用,如参见块445。在选择 特定预取指令之后,预取优化器400通过以NOP指令替代预取指令 来禁用特定预取指令,如参见块450。针对当前预取指令,预取优化 器400可以可选地禁用处理需要的加载指令,如参见块455。

预取优化器400测量当预取优化器400禁用特定预取指令时的、 处理器执行感兴趣的指令序列需要的执行时间,如参见块460。如下 面所看到的,针对预取优化器400禁用的每个预取指令,预取优化器 400随着预取优化器400在多个值当中变化硬件预取深度而测量各 自执行时间。如参见块462,预取优化器工具400存储包括连同特定 禁用指令(或指令的组合)的每个执行时间以及在该执行时间实现 的硬件预取深度的性能度量信息。

预取优化器工具400执行测试,以确定工具400是否已经针对特定 禁用预取指令完成了所有硬件预取深度的执行时间测量,如参见判定块 465。如果预取优化器400针对相应的特定禁用预取指令还没有完成所 有硬件预取深度的执行时间测量,则预取优化器工具400前进到下一个 硬件(HW)预取深度,如参见块470。预取优化器工具400利用相同 的预取指令但是在不同的硬件预取深度测量感兴趣的指令序列的执 行时间。如果判定块465确定所有硬件预取深度的执行时间测量完成 了,则处理流程继续到判定块475。

预取优化器工具400执行测试,以在判定块475中在感兴趣的指令 序列中确定针对所有预取指令执行的时间测量是否完成。第一次通过判 定块的循环是一部分,预取优化器400在感兴趣的指令序列中对第一预 取指令进行操作。在判定块475处,如果预取优化器400确定在感兴趣 的指令序列中存在其他预取指令,则预取优化器400重新启用先前禁用 的指令,如参见块480,并且禁用感兴趣的指令序列中的下一个预取指 令,如参见块485。如上,随着硬件预取深度根据块465和块470变化, 预取优化器400进行执行时间测量。当预取优化器工具400循环通过感 兴趣的指令序列中的所有预取指令时,判定块475确定所有预取指令的 执行时间测量完成了。

当针对每个预取指令的执行时间测量完成时,预取优化器工具400 检索所存储的度量信息,并选择硬件预取深度与相应的禁用的(多 个)预取指令的最佳组合,如参见块490。为了做出该确定,预取优 化器工具400可以比较该工具400针对感兴趣的指令序列测量的所 有的执行时间。工具400选择最低执行时间并且检索度量信息,该 检索度量信息表示特定预取指令(或指令的组合)和对应于最低执 行时间的特定硬件预取深度。预取优化器400存储指定硬件预取深 度和禁用预取指令的最佳组合的配置信息,如参见块492。预取优化 器工具400通过修改感兴趣的指令序列来禁用与最佳执行时间相对 应的预取指令(或预取指令的组合),如参见块494,并通过指示硬 件预取电路112在与最佳执行时间相对应的硬件预取深度处预取, 从而修订或修改应用程序。

如本领域技术人员将理解的是,所公开的方法的各个方面可具 体实施为系统、方法或计算机程序产品。因此,本发明的各方面可 采取完全硬件实施方式的形式,完全软件实施方式(包括固件、常 驻软件、微代码等)的形式,或结合软件和硬件方面的实施方式的 形式,其在本文中一般都可被称为“电路”、“模块”或“系统”。此外, 本发明的各方面可以采取计算机程序产品的形式,其具体体现在其 上具有计算机可读程序代码的一个或多个计算机可读介质中。

可利用一个或多个计算机可读介质的任何组合。计算机可读介 质可以是计算机可读信号介质或计算机可读存储介质。计算机可读 存储介质可以是,例如,但不限于,电子、磁性,光学,电磁,红 外或半导体系统、装置、或设备,或前述的任何合适组合。计算机 可读存储介质的更具体的示例(非穷尽列表)将包括以下:具有一 条或多条导线的电连接、便携式计算机软盘、硬盘、随机存取存储 器(RAM)、只读只读存储器(ROM)、可擦除可编程只读存储器 (EPROM或闪存)、光纤、便携式光盘只读存储器(CD-ROM)、 光学存储装置、磁存储装置、或前述的任何合适组合。在本文的上 下文中,计算机可读存储介质可以是能够包含或存储由或结合指令 执行系统、装置或设备使用的程序的任何有形介质。

执行本发明的各个方面的操作的计算机程序代码可以一种或多种 编程语言的任何组合编写,包括如Java、Smalltalk、C++等的对象导向 的编程语言和如“C”编程语言或类似的编程语言的常规程序编程语言。 程序代码可完全在用户的计算机上执行、部分在用户的计算机上执行、 作为独立的软件包、部分在用户的计算机上执行并且部分在远程计算机 上执行、或完全在远程计算机或服务器上执行。在后一种情形中,远程 计算机可以通过任何类型的网络(包括局域网络(LAN)或广域网络 (WAN))连接到用户的计算机,或者连接可针对外部计算机做出(例 如,通过使用互联网服务提供商的互联网)。

根据本发明的实施方式,下面参考方法、装置(系统)和计算 机程序产品的流程图图示和/或框图来描述本发明的各个方面。将会 理解的是,图3和图4流程图图示和/或框图的每个块,以及流程图 图示和/或框图中的多个块的组合,能够通过计算机程序指令实现。 这些计算机程序指令可被提供给通用计算机、专用计算机或其他可 编程数据处理装置的处理器以产生机构(machine),使得经由计算 机或其他可编程数据处理装置的处理器执行的指令,创建装置用于 实现图3和图4的流程图和/或块或多个块的框图中指定的功能/动 作。

这些计算机程序指令也可以被存储在能够使计算机、其他可编 程数据处理装置或其他设备以特定方式作用的计算机可读介质中, 使得存储在计算机可读介质中的指令产生一种制品,该制品包括实 现在流程图和/或块或多个块的框图中指定的功能/动作的指令。

该计算机程序指令也可以被加载到计算机,其他可编程数据处 理装置或其他设备上,以使得在计算机,其他可编程装置或其他设 备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算 机或其他可编程装置上执行的指令提供处理,以实现在上述图3的 流程图中指定的功能/动作。

图3和图4的流程图示出了根据本发明的各种实施方式执行网 络分析的系统、方法和计算机程序产品的可能实现的架构、功能和 操作。在这方面,图3和图4的流程图中的每个块可以表示模块、 段或部分代码,其包括用于实现指定逻辑功能的一个或多个可执行 指令。还应当指出的是,在一些另选实现中,块中指出的功能可不 按照图3和图4中指出的顺序发生。例如,连续示出的两个块实际 上可以基本上同时执行,或块有时可以以相反的顺序执行,取决于 所涉及的功能。还将指出的是,图3和图4的每个块和框图和/或流 程图中的块的组合,能够由执行指定功能或动作的特殊目的基于硬 件的系统,或特定目的的硬件和计算机指令来实现。

本文使用的术语仅是出于描述特定实施方式的目的,而并非旨 在限制本发明。如本文所使用的,除非上下文清楚地另有所指,单 数形式“一种”、“一个”和“该”旨在也包括复数形式。将进一步理解的 是,术语“包括”和/或“包含”,当在本说明书中使用时,指定所述特 征、整体、步骤、操作、元件和/或组件的存在,但不排除一个或多 个其他特征、整体、步骤、操作、元件,组件和/或它们的组的存在 或添加。

所附的权利要求书中的所有装置或步骤加功能元素的相应结构、材 料、动作、和等同物旨在包括用于执行与如具体要求的其他要求的 元素相结合的功能的任何结构、材料或动作。已经出于图示和描述 的目的给出了对本发明的描述,但并非旨在以所公开的形式穷举或 限制本发明。在不脱离本发明的范围和精神的情况下,许多修改和 变化对于本领域技术人员而言将是显而易见的。实施方式被选择和 描述以便于最佳地解释本发明的原理和实际应用,并且便于使本领 域的其他人员能够理解用于具有如适合于预期的具体用途的本发明 的各种变形的各种实施方式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号