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

文档序号:6397642阅读:157来源:国知局
专利名称:包括硬件及软件预取的方法和信息处理系统的制作方法
技术领域
本文公开内容一般涉及信息处理系统(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、PC1、PCIE、DV1、HDMI 和其他总线的一个或多个扩展总线165连结到总线115,以便于将外设和设备连接到IHS 100。网络接口适配器167连结到总线115,以支持以有线或无线方式将IHS 100连接到网络和其他信息处理系统。网络接口适配器167也可以被称为网络通信适配器或网络适配器。虽然图1示出了采用处理器105的一个IHS,但是IHS可以采取许多形式。例如,IHS 100可以采取桌上型、服务器、便携式、膝上型、笔记本、平板的形式或其他形式因素的计算机或数据处理系统。IHS 100可以采取其他形式因素,如游戏设备、个人数字助理(PDA)、便携式电话设备、通信设备或包括处理器和存储器的其他设备。
IHS 100包括在如⑶、DVD或其他媒体的数字媒体170上的预取优化器工具计算机程序产品300。为简单起见,下面将使用术语预取优化器工具或预取优化器300。数字媒体170还存储编译器175和应用程序185。应用185表示包括编译器175可以插入(inject)预取指令到其中的程序代码的任何应用程序。在实际实践中,IHS100可以在非易失性存储器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中多少。在一个简化示例中,预取深度可从值I至值32变化,其中,I表示最小的预取深度而32表示最大的预取深度。为了设置硬件预取深度,处理器105在硬件预取控制寄存器(HPCR) 205105中存储预取深度值。用户、程序员、机器、程序或其他实体可向处理器105提供初始预取深度值,以存储在HPCR 205中。如下面所讨论的,在以初始预取深度值进行性能测试后,预取优化器300将向HPCR 205提供其他的预取深度值,以进行性能测试。在这个示例中,HPCR 205中为I的初始预取深度值指示硬件预取电路112:从存储器120中预取处理器105当前执行的指令之后的16行代码。HPCR 205中为32的初始预取深度值可以指示硬件预取电路112在存储器120中更深地预取,例如,预取处理器105当前执行的指令之后的256行代码。这些预取深度值和相应的预取代码行的数目是出于示例的目的而给出的,不应被视为以任何方式作为限制。再次参照图2A,随着预取深度值在从I到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来循环通过硬件预取深度I至32中的每一个,并且在每一个硬件预取深度处采取性能测量。该性能测量再次测量处理器105采取以执行同一感兴趣的特定指令序列210的时间。代码优化器300通过禁用和重新启用不同的软件PREFETCH指令来继续测试,同时循环通过硬件初始化预取的不同预先取深度。代码优化器300以这种方式继续进行迭代,直到它找到启用/禁用预取指令与相应的硬件预取深度的组合为止,该相应的硬件预取深度减少和/或最小化感兴趣的指令序列的执行时间。以这种方式,代码优化器175通过共同控制硬件预取操作和软件预取操作二者来调谐处理器105的操作。
在一个实施方式中,预取优化器300可以通过循环通过其预取指令并且测量特定指令序列中的性能对应用程序185的可执行副本进行操作,同时I)禁用/启用选择的预取指令,以及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。在一个实施方式中,硬件预取深度值可以包括I与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。为了说明这种依赖情况,表I在下面示出了感兴趣的代码序列的一部分:表IIi r4,1234 ;加载立即值1234到寄存器r4Ii r5, 5678 ;加载立即值 5678 到 r5debt r4, r5 ;数据高速缓存块触摸(预取的一种形式的);在地址R4+R5处的数据当代码优化器300用NOP指令替代debt数据高速缓存块触摸指令(预取的一种形式)以禁用该指令时,那么这两个加载指令不再是必要的。这是假设在稍后需要寄存器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可以采用比特串来表示硬件预取深度选择和感兴趣的代码序列中的所有预取指令的组合。在串的一个部分中,I表示禁用的预取指令,而O表示启用的预取指令。如上所述,预取优化器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)、可擦除可编程只读存储器(EPR0M或闪存)、光纤、便携式光盘只读存储器(⑶-ROM)、光学存储装置、磁存储装置、或前述的任何合适组合。在本文的上下文中,计算机可读存储介质可以是能够包含或存储由或结合指令执行系统、装置或设备使用的程序的任何有形介质。执行本发明的各个方面的操作的计算机程序代码可以一种或多种编程语言的任何组合编写,包括如Java、Smalltalk、C++等的对象导向的编程语言和如“C”编程语言或类似的编程语言的常规程序编程语言。程序代码可完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立的软件包、部分在用户的计算机上执行并且部分在远程计算机上执行、或完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络(包括局域网络(LAN)或广域网络(WAN))连接到用户的计算机,或者连接可针对外部计算机做出(例如,通过使用互联网服务提供商的互联网)。根据本发明的实施方式,下面参考方法、装置(系统)和计算机程序产品的流程示和/或框图来描述本发明的各个方面。将会理解的是,图3和图4流程示和/或框图的每个块,以及流程示和/或框图中的多个块的组合,能够通过计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机构(machine),使得经由计算机或其他可编程数据处理装置的处理器执行的指令,创建装置用于实现图3和图4的流程图和/或块或多个块的框图中指定的功能/动作。这些计算机程序指令也可以被存储在能够使计算机、其他可编程数据处理装置或其他设备以特定方式作用的计算机可读介质中,使得存储在计算机可读介质中的指令产生一种制品,该制品包括实现在流程图和/或块或多个块的框图中指定的功能/动作的指令。该计算机程序指令也可以被加载到计算机,其他可编程数据处理装置或其他设备上,以使得在计算机,其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机或其他可编程装置上执行的指令提供处理,以实现在上述图3的流程图中指定的功能/动作。图3和图4的流程图示出了根据本发明的各种实施方式执行网络分析的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这方面,图3和图4的流程图中的每个块可以表示模块、段或部分代码,其包括用于实现指定逻辑功能的一个或多个可执行指令。还应当指出的是,在一些另选实现中,块中指出的功能可不按照图3和图4中指出的顺序发生。例如,连续示出的两个块实际上可以基本上同时执行,或块有时可以以相反的顺序执行,取决于所涉及的功能。还将指出的是,图3和图4的每个块和框图和/或流程图中的块的组合,能够由执行指定功能或动作的特殊目的基于硬件的系统,或特定目的的硬件和计算机指令来实现。本文使用的术语仅是出于描述特定实施方式的目的,而并非旨在限制本发明。如本文所使用的,除非上下文清楚地另有所指,单数形式“一种”、“一个”和“该”旨在也包括复数形式。将进一步理解的是,术语“包括”和/或“包含”,当在本说明书中使用时,指定所述特征、整体、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整体、步骤、操作、元件,组件和/或它们的组的存在或添加。所附的权利要求书中的所有装置或步骤加功能元素的相应结构、材料、动作、和等同物旨在包括用于执行与如具体要求的其他要求的元素相结合的功能的任何结构、材料或动作。已经出于图示和描述的目的给出了对本发明的描述,但并非旨在以所公开的形式穷举或限制本发明。在不脱离本发明的范围和精神的情况下,许多修改和变化对于本领域技术人员而言将是显而易见的。实施方式被选择和描述以便于最佳地解释本发明的原理和实际应用,并且便于使本领域的其他人员能够理解用于具有如适合于预期的具体用途的本发明的各种变形的各种实施方式。
权利要求
1.一种方法,包括: 由信息处理系统IHS的预取优化器工具,接收感兴趣的指令序列,所述感兴趣的指令序列包括在特定加载指令之前的相对软件预取指令的多个指令; 由所述预取优化器工具,指示在所述IHS的处理器中的硬件预取机将指令从存储器存储中提取至多个硬件预取深度中的一个; 由所述预取优化器工具,禁用所述感兴趣的指令序列中的特定预取指令; 当所述特定预取指令被禁用时,由所述预取优化器工具测量所述感兴趣的指令序列的执行时间,所述测量在所述硬件预取机制被设置为特定预取深度时由所述预取优化器工具进行;以及 在禁用所述感兴趣的指令序列中的不同特定提取指令的同时,由所述预取优化器工具将所述硬件预取机制的所述硬件预取深度改变为另一个硬件预取深度,并且重复对所述感兴趣的指令序列的所述执行时间的测量。
2.根据权利要求1所述的方法,还包括:针对硬件预取深度和软件预取指令禁用的不同组合,由所述预取优化器工具继续测量所述感兴趣的指令序列的所述执行时间,并且比较所述执行时间以找到实现比硬件预取深度和软件预取指令禁用的第二组合的执行时间少的执行时间的、硬件预取深度和软件预取指令禁用的第一组合。
3.根据权利要求2所述的方法,还包括:由所述预取优化器工具修改所述感兴趣的指令序列,以禁用与硬件预取深度和软件预取指令禁用的所述第一组合相对应的所述感兴趣的指令序列的预取指令,其中所述硬件预取机制在与硬件预取深度和软件预取指令禁用的所述第一组合相对应的所述硬件预取深度处执行预取操作。
4.根据权利要求1所述的方法,其中所述禁用所述感兴趣的指令序列中的特定预取指令通过以NOP指令替 代将要被禁用的每个特定软件预取指令来执行。
5.根据权利要求1所述的方法,其中所述预取优化器工具是编译器的一部分。
6.根据权利要求1所述的方法,其中所述感兴趣的指令序列是应用程序的一部分。
7.根据权利要求1所述的方法,还包括:遗传地发展针对所述感兴趣的指令序列的硬件预取深度和软件预取指令禁用的所述组合,以选择相比于硬件预取深度和软件预取指令禁用的其他组合而言表现出提高的性能的硬件预取深度和软件预取指令禁用的特定组合。
8.根据权利要求1所述的方法,其中在运行时当所述感兴趣的指令序列被存储在存储器中时,所述预取优化器工具执行对所述感兴趣的指令序列中的特定软件预取指令的禁用。
9.根据权利要求1所述的方法,其中当所述感兴趣的指令序列是可执行文件时,所述预取优化器工具执行对所述感兴趣的指令序列中的特定软件预取指令的禁用。
10.一种信息处理系统IHS,包括: 处理器; 存储器,所述存储器连结到所述处理器,所述存储器配置有预取优化器工具,用于执行: 接收感兴趣的指令序列,所述感兴趣的指令序列包括在特定加载指令之前的相对软件预取指令的多个指令; 将所述处理器中的硬件预取机制指示为多个硬件预取深度中的一个,以从所述存储器中提取指令; 禁用所述感兴趣的指令序列中的特定预取指令; 当所述特定预取指令被禁用时,测量所述感兴趣的指令序列的执行时间,所述测量在所述硬件预取机制被设置为特定预取深度时由所述预取优化器工具进行;以及 在禁用所述感兴趣的指令序列中的不同特定提取指令的同时,将所述硬件预取机制的所述硬件预取深度改变为另一个硬件预取深度,并且重复对所述感兴趣的指令序列的所述执行时间的测量。
11.根据权利要求10所述的IHS,其中所述存储器配置有预取优化器工具,所述预取优化器工具针对硬件预取深度和软件预取指令禁用的不同组合测量所述感兴趣的指令序列的所述执行时间,并且比较所述执行时间以找到实现比硬件预取深度和软件预取指令禁用的第二组合的执行时间少的执行时间的、硬件预取深度和软件预取指令禁用的第一组合。
12.根据权利要求10所述的IHS,其中所述存储器配置有预取优化器工具,所述预取优化器工具修改所述感兴趣的指令序列,以禁用与硬件预取深度和软件预取指令禁用的所述第一组合相对应的所述感兴趣的指令序列的预取指令,其中所述硬件预取机制在与硬件预取深度和软件预取指令禁用的所述第一组合相对应的所述硬件预取深度处执行预取操作。
13.根据权利要求10所述的IHS,其中所述存储器配置有预取优化器工具,所述预取优化器工具通过以NOP指令替代将要被禁用的每个特定软件预取指令来禁用所述感兴趣的指令序列中的特定预取指令。
14.根据权利要求10所述的IHS,其中所述存储器配置有预取优化器工具,所述预取优化器工具遗传地发展针对所述感兴趣的指令序列的硬件预取深度和软件预取指令禁用的所述组合,以选择相比于硬件预取深度和软件预取指令禁用的其他组合而言表现出提高的性能的硬件预取深度和软件预取指令禁用的特定组合。
15.根据权利要求10所述的IHS,其中所述存储器配置有预取优化器工具,在运行时当所述感兴趣的指令序列被存储在存储器中时,所述预取优化器工具禁用所述感兴趣的指令序列中的特定软件预取指令。
16.根据权利要求10所述的IHS,其中所述存储器配置有预取优化器工具,当所述感兴趣的指令序列是可执行文件时,所述预取优化器工具禁用所述感兴趣的指令序列中的特定软件预取指令。
17.—种方法,包括: 通过信息处理系统IHS的预取优化器工具,接收感兴趣的指令序列,所述感兴趣的指令序列包括在特定加载指令之前的相对软件预取指令的多个指令; 通过所述预取优化器工具,禁用所述感兴趣的指令序列中的特定预取指令,由此提供禁用的特定预取指令; 随着所述处理器中的硬件预取机制在多个不同的硬件预取深度之间改变硬件预取深度,所述预取优化器工具测量所述感兴趣的指令序列的执行时间,以确定针对所述不同的硬件预取深度中的每一个和与所述禁用的特定预取指令相对应的相应执行时间;以及 由所述预取优化器工具重复针对所述感兴趣的指令序列中的另一个特定预取指令的禁用和测量,因此提供禁用的另一个特定预取指令,以确定针对所述不同的硬件预取深度中的每一个和与所述禁用的另一个特定预取指令相对应的相应执行时间。
18.根据权利要求17所述的方法,还包括:由所述预取优化器工具对与针对所述禁用的特定预取指令的所述不同预取深度相对应的所述执行时间、和与针对所述禁用的另一个特定预取指令的所述不同预取深度相对应的所述执行时间相比较,以确定实现最佳执行时间的禁用预取指令和相应的硬件预取深度。
19.根据权利要求18所述的方法,还包括:由所述预取优化器工具修改所述感兴趣的指令序列,以禁用被确定为导致所述最佳执行时间的所述预取指令,并且指示所述硬件预取机制来提供与所述最佳执行时间相对应的所述硬件预取深度。
20.根据权利要求17所述的方法,其中,所述禁用所述感兴趣的指令序列中的特定预取指令通过以NOP指令替代将要被禁用的每个特定软件预取指令来执行。
21.一种预取优化器工具计算机程序产品,包括: 计算机可读存储介质; 第一程序指令,其接收感兴趣的指令序列,所述感兴趣的指令序列包括在特定加载指令之前的相对软件预取指令的多个指令; 第二程序指令,其将处理器中的硬件预取机制指示为多个硬件预取深度中的一个,以从所述存储器中提取指令; 第三程序指令,其禁用所述感兴趣的指令序列中的特定预取指令; 第四程序指令,当所述特定预取指令被禁用时,所述第四程序指令测量所述感兴趣的指令序列的执行时间,所述测量在所述硬件预取机制被设置为特定预取深度时由所述预取优化器工具进行;以及 第五程序指令,在禁用所述感兴趣的指令序列中的不同的特定提取指令的同时,所述第五程序指令将所述硬 件预取机制的所述硬件预取深度改变为另一个硬件预取深度,并且重复对所述感兴趣的指令序列的所述执行时间的测量, 其中,所述第一程序指令、第二程序指令、第三程序指令、第四程序指令和第五程序指令存储在所述计算机可读存储介质上。
22.根据权利要求21所述的预取优化器工具计算机程序产品,还包括: 第六程序指令,其针对硬件预取深度和软件预取指令禁用的不同组合测量所述感兴趣的指令序列的所述执行时间,并且比较所述执行时间以找到实现比硬件预取深度和软件预取指令禁用的第二组合的执行时间少的执行时间的、硬件预取深度和软件预取指令禁用的第一组合。
23.根据权利要求21所述的预取优化器工具计算机程序产品,还包括: 第七程序指令,其修改所述感兴趣的指令序列,以禁用与硬件预取深度和软件预取指令禁用的所述第一组合相对应的所述感兴趣的指令序列的预取指令,其中所述硬件预取机制在与硬件预取深度和软件预取指令禁用的所述第一组合相对应的所述硬件预取深度处执行预取操作。
24.根据权利要求21所述的预取优化器工具计算机程序产品,还包括: 第八程序指令,其通过以NOP指令替代将要被禁用的每个特定软件预取指令,来禁用所述感兴趣的指令序列中的特定预取指令。
25.根据权利要求21所述的预取优化器工具计算机程序产品,还包括: 第九指令,其遗传地发展针对所述感兴趣的指令序列的硬件预取深度和软件预取指令禁用的所述组合,以选择相比于硬件预取深度和软件预取指令禁用的其他组合而言表现出提高的性能的硬件预取 深度和软件预取指令禁用的特定组合。
全文摘要
本发明涉及包括硬件及软件预取的方法和信息处理系统。具体地,用于信息处理系统(IHS)的预取优化器工具可以通过控制硬件预取操作和软件预取操作二者,来有效改进存储器访问时间。预取优化器工具选择性地禁用应用程序内感兴趣的指令序列的预取指令。当禁用不同的预取指令时,该工具测量感兴趣的指令序列的执行时间。在循环通过禁用不同的预取指令并采取相应的执行时间测量的同时,该工具可保持硬件预取深度不变。另选地,针对感兴趣的指令序列中的每个禁用预取指令,该工具可循环通过不同的硬件预取深度并且在每个硬件预取深度处采取相应的执行时间测量。该工具选择与基线执行时间相比可提高执行时间的硬件预取深度和预取指令禁用的组合。
文档编号G06F9/46GK103197956SQ20131000796
公开日2013年7月10日 申请日期2013年1月9日 优先权日2012年1月10日
发明者R·R·海施 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1