处理指令分组信息的方法和装置的制作方法

文档序号:6424407阅读:117来源:国知局
专利名称:处理指令分组信息的方法和装置的制作方法
技术领域
本发明涉及处理器中的指令分组,更具体而言,涉及用于追踪指令分组的方法和
>J-U ρ α装直。
背景技术
信息技术的发展对处理器的执行能力提出了越来越高的要求。为了获得更高的处理能力,处理器从早期的顺序执行(in order execution)逐渐发展为目前较多采用的乱序 执行(out-of-order execution),或称 OoOE。在顺序执行方案中,处理器首先进行指令的预取和解码,然后根据解码的指令从内存中读取操作数。如果操作数目前可用,指令被分发到适当的功能单元进行执行。在执行完毕之后,功能单元将执行结果写回到寄存器文件中。但是,如果在当前时钟周期,一个或多个操作数不可用(通常因为处理器正从内存中预取这些操作数),那么处理器就会停下来等待(stall),直到这些操作数可用。由于顺序执行方案使得处理器浪费了一些指令时钟周期进行等待,因此许多高性能处理器大都采用乱序执行方案来充分利用这些被浪费的时钟周期。具体地,在乱序执行方案中,首先将指令预取并排列到一个指令序列中。当序列中的指令A由于操作数不可用而暂时无法执行时,处理器分析接下来的指令B。如果指令B的执行不依赖于之前的指令A的执行结果,那么处理器就会将指令B发送到适当的功能单元进行执行。执行的结果同样写入一个队列,用以恢复原始指令顺序。进一步地,在处理器,尤其是多核处理器,采用乱序执行方案的情况下,往往还会结合指令的分组来并行执行多条指令,从而进一步提高处理器执行性能。图I示出处理器进行指令分组和乱序执行的示意图。如图所示,处理器对指令的处理过程可以分为顺序处理部分和乱序处理部分。在顺序处理部分中,指令预取单元预取多条指令,并将其排成一个队列。接着,指令解码和分组单元对预取的指令进行解码,并对指令进行分组。一般地,指令的分组依赖于处理器的结构、指令的特征等多种因素。通常来说,如果指令队列中的连续的多个指令可以独立地并行执行,那么就有可能将这些指令分为一组,进行后续的并行执行。在对指令进行分组之后,处理进入乱序处理阶段。在这个阶段中,首先,分组发射单元将一个指令组中的多条指令分别发射到适当的功能单元。接着,这些功能单元各自独立地执行接收到的指令,然后将执行结果写回寄存器文件。一旦一个指令组执行完毕,完成单元就会发出一个指令组完成的信号,并向指令预取单元返回一个中断,通知其继续进行指令的预取。在一个具体例子中,假定指令预取单元最多可以保存8条指令,并将其排成队列。通过指令解码和分组单元的分析,指令队列中的前3条指令都是对操作数进行加法操作,并且执行结果相互独立,于是指令解码和分组单元将这3条指令分为一组,发送给分组发射单元。分组发射单元将这3条指令分别发送给3个功能单元,例如加法器,同时进行运算。在这组指令均执行完毕后,完成单元发出表示指令组完成的信号,并向指令预取单元返回一个中断。接收到这样的中断信号,指令预取单元继续预取3条指令,从而保持指令队列的长度。指令解码和分组单元继续对队列中的指令进行分析、解码和分组,使得指令能够得到并行执行。可以看到,在分组指令的OoOE方案中,指令的分组情况与处理器计算效率有着密切的关联。如果较多的连续指令能够分为一组,并行执行,那么执行效率会得到显著提高。因此,分析和研究处理器中的指令分组情况对于提高处理器性能很有意义。例如,在编写程序过程中以及在编译器后端生成代码的过程中,如果工程师能够了解处理器在运行时如何对指令进行分组,以及在执行过程中OoOE方案如何作用于特定指令流,那么工程师就有可能对指令进行优化,例如进行一定重排,使得重排的指令能够更有效地利用指令分组方案和OoOE方案,从而更好地利用处理器的计算资源。然而,在现有技术中,给定一种类型的处理器和一个特定的指令序列,现有方法难以获知处理器在运行时对指令的分组和执行情况,也无法分析和了解如何使得指令流更好地利用OoOE方案来获得较高的执行效率。·在现有技术的一项方案中,提供了一种代码分析器,该分析器根据处理器的结构对指令进行静态分析,并给出关于指令分组的一些静态信息,例如用不同颜色标记不同的指令组。然而,本领域人员可以理解,指令的分组是实时变化的。尽管这样的代码分析器能够给出关于指令分组的一些静态分析,但是不能获知处理器在运行时的动态行为。在另一种方案中,提供了一种处理器流水线分析器,当指令在处理器模拟器或真实处理器上执行时,该分析器捕获指令的管线信息,并用流水线平面图示出这样的流水线信息。图2示出现有技术捕获的流水线信息视图的例子。由于这样的流水线分析器并不是针对指令分组分析的目的而专门设计的,因此如图所示,得到的平面图并不能示出在不同管线阶段,指令分组随时间的变化,也无法示出在执行过程中哪些指令分组比较流行。因此,希望提供方案,能够获知处理器在运行时对指令进行分组的动态信息,从而更好利用处理器的OoOE,提高执行性能。

发明内容
鉴于以上提出的问题,提出本发明,旨在提供一种处理处理器运行时的指令分组信息的方法和装置。根据本发明第一方面,提供一种处理指令分组信息的方法,包括从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件;分析所述地址文件,获取所述机器指令的分组信息;将所述地址文件中的所述机器指令转化为可读指令;以及基于所述机器指令的分组信息和转化的可读指令,获得可读指令的分组信息。根据本发明第二方面,提供一种处理指令分组信息的装置,包括地址读取单元,配置为从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件;分析单元,配置为分析所述地址文件,获取所述机器指令的分组信息;指令转化单元,配置为将所述地址文件中的所述机器指令转化为可读指令;以及信息获取单元,配置为基于所述机器指令的分组信息和转化的可读指令,获得可读指令的分组信息。利用上述的方法和装置,可以动态地获得处理器在运行时对指令的分组处理情况,并将其表示为用户可读的形式,使得用户可以了解指令的分组信息,从而更好地利用处理器的处理性能。


图I示出处理器进行指令分组和乱序执行的示意图;图2示出现有技术捕获的流水线信息视图的例子;图3示出根据本发明一个实施例的获取指令分组信息的方法的流程图;图4示出根据本发明一个实施例的处理系统的示意图;图5示出根据本发明一个实施例的地址表的例子;图6A示出根据本发明一个实施例的机器指令的分组信息的例子;图6B示出根据本发明一个实施例的指令转化表的例子; 图7A-7B示出根据本发明一个实施例的可读指令的分组信息的例子;图8A-8C示出根据本发明实施例的图形化的分组信息;图9示出根据本发明一个实施例的装置的示意框图;以及图10示出适于用来实现本发明实施方式的示例性计算系统的框图。
具体实施例方式所属技术领域的技术人员知道,本发明的多个方面可以体现为系统、方法或计算机程序产品。因此,本发明的多个方面可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明的多个方面还可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可用的程序码。可以使用一个或多个计算机可读的介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件的语境中,计算机可读存储介质可以是任何包含或存储程序的有形的介质,该程序被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可包括在基带中或者作为载波一部分传播的、其中体现计算机可读的程序码的传播的数据信号。这种传播的信号可以采用多种形式,包括——但不限于——电磁信号、光信号或任何以上合适的组合。计算机可读的信号介质可以是并非为计算机可读存储介质、但是能发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序的任何计算机可读介质。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。用于执行本发明的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言-诸如“C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络一包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。以下参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。要明白的是,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包 括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品。也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。下面参照附图,结合具体实施例对本发明进行描述。这样的描述仅仅出于说明目的,而不意图对本发明的范围进行限制。图3示出根据本发明一个实施例的获取指令分组信息的方法的流程图。如图3所示,本实施例的方法包含如下步骤在步骤31,从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件;在步骤33,分析所述地址文件,获取所述机器指令的分组信息;在步骤35,将所述地址文件中的所述机器指令转化为可读指令;在步骤37,基于所述机器指令的分组信息和转化的可读指令,获得可读指令的分组信息。具体地,在步骤31,从缓存器中读取分组的指令的地址。这就要求缓存器能够记录并存储处理器在运行时对指令的分组情况。为此,可以对现有技术的处理系统进行改进,添加具有上述功能的缓存器。图4示出根据本发明一个实施例的处理系统的示意图。如图所示,该实施例中的处理系统包含处理器40,性能监视器42和缓存器44。处理器40与图I所示的现有处理器相同,包含顺序处理部分和乱序处理部分,用于对指令进行分组执行。并且,如前所述,处理器40包含完成单元,每当处理器完成一组指令的执行,完成单元就会发出一个指令组完成信号,并向指令预取单元返回一个中断,通知其继续进行指令的预取。相应地,完成单元中临时存储有刚刚执行完毕的指令组的信息,例如包括,指令组中指令的个数,指令的地址等。并且,完成单元会在上述中断信号中包含所述指令组中指令个数的信息,由此预取单元才会知道接下来要补充几个指令到指令队列中。为了获得处理器执行的指令组的信息,在本实施例中,将性能监视器42构造为捕获完成单元发出的指令组完成信号,并由此向缓存器44发出更新信号。在该更新信号的触发下,缓存器44从完成单元读取执行的指令组的信息,从而记录分组的指令的地址。具体地,在一个例子中,性能监视器42构造为在现有的性能监视器的基础上添加计数器。该计数器设置为对捕获的指令组完成信号的出现次数进行计数。每当该计数增加1,性能监视器42就向缓存器44发出一个更新信号。响应于接收到的更新信号,缓存器44从处理器40的完成单元读取所执行的指令组的信息。具体地,缓存器44可以从处理器40中获取到刚刚执行完毕的一组指令中的各个指令的地址。可以理解,缓存器44也可以以其他方式被触发从而读取指令组的地址信息。在一个实施例中,性能监视器42以其他方式生成上述更新信号,例如直接将捕获的指令组完成信号转发给缓存器44作为更新信号而不对信号进行计数。或者,在另一个实施例中,缓存器44可以直接从完成单元捕获上述指令组完成信号,在该信号触发下从处理器40读取执行的指令组的地址信息。 要注意的是,在这个阶段,处理器40所执行的指令为机器指令,也就是汇编指令。处理器通常用逻辑地址来标记这些指令,因此,缓存器44通过上述方式获得的地址为机器指令的逻辑地址。为了记录所获得的指令地址,在一个实施例中,缓存器44逐一记录所读取的指令的逻辑地址,并对同一组的指令进行标记。在另一实施例中,缓存器44包含地址寄存器441,用于记录一个指令组中第一个指令的地址,以及偏移寄存器442,用于记录上述的指令组中其他指令的地址相对于第一个指令地址的偏移。由于处理器40为队列中的指令分配的逻辑地址一般是连续的,因此,基于一个指令组中第一个指令的地址和其他指令相对于第一个指令的偏移,就能够很容易地获得指令组中全部指令的地址。因此,采用地址寄存器441和偏移寄存器442的方式,缓存器44可以用较小的缓存空间记录分组指令的地址信息。基于以上描述的处理系统,就可以从缓存器44中读取分组的机器指令的地址,如图3中步骤31所示。具体地,所读取的地址可以包括指令组中首个指令的地址和其他指令相对于首个指令的偏移。在一个实施例中,缓存器44中记录有多个指令组的地址信息,并响应于更新信号,不断地更新和添加地址信息。此时,在步骤31中,可以定期地从缓存器44中读取上述多个指令组的地址信息。在另一实施例中,缓存器44响应于更新信号,用最新的指令组的地址信息覆盖原有的地址信息,也就是说,每次只存储最新的指令组的地址信息。在这种情况下,在步骤31中,同样地响应于上述更新信号,每次从缓存器44中读取最新指令组的地址信息,并结合之前读取的指令地址,从而获得多个指令组的地址信息。根据一个实施例,在步骤31,将获得的多个指令组的地址信息组织成一个地址文件。该地址文件的格式应得到后续用于分析和处理指令地址的工具和应用的支持。在一个具体例子中,多个指令组的地址信息被组织为地址表的形式作为地址文件。图5示出根据本发明一个实施例的地址表的例子。在图5的例子中,示例性地示出了在缓存器存储的三个指令组的地址信息。在第一个指令组中,第一指令的地址为IA1,其他指令相对于第一指令的偏移为0,1,2,其中O表示第一指令本身;在第二个指令组中,第一指令的地址为IA2,其他指令的偏移为0,I ;在第三个指令组中,第一指令的地址为IA1,其他指令的偏移为O,也就是说,第三指令组仅包含地址为IAl的一个指令。对于从缓存器中获取到的这些指令信息,可以利用右图的地址表来记录每个组的指令地址。如右图所示,地址表的每一条目,例如每一行,表示一个指令组,其中包括该指令组中首个指令的地址和以二进制形式表示的其他指令相对于首个指令的地址偏移。具体地,在每一行中,0-63位被保留用于记录一个指令组中第一个指令的完整地址,后面的位用于记录该指令组中其他指令相对于第一个指令的偏移。在偏移数目不大于15的情况下,可以用4个位来表示一个偏移。例如,表格第一行记录了上述第一个指令组的地址信息,其中前64位记录了其中第一个指令的地址IA1,接下来的12位分别记录了三个偏移0,1,2的二进制表示0000,0001,
0010。相应地,表格第二行和第三行分别记录了上述的第二个和第三个指令组的指令地址。由此,通过这样的表格,就可以简单地用数字记录指令的分组情况。可以理解,也可以采用其他格式的地址文件来记录指令地址信息,例如记录每个 指令的完整地址,并用特定符号标记指令组的开始与结束,等等。可以理解,本领域技术人员还可以想到采用更多形式的地址文件,只要这样的格式与后续相关应用相一致,能够得到后续应用的支持。在形成上述地址文件的基础上,在图3的步骤33,本实施例的方法对地址文件进行分析,从而获取机器指令的分组信息。具体地,在一个实施例中,通过分析上述地址文件,可以获知该地址文件包含的指令组的数目、每个指令组中指令的数目及指令地址。进一步地,还可以对地址文件中出现的指令组进行计数和统计,由此得出各个指令组的出现次数或出现频率。图6A示出根据本发明一个实施例的机器指令的分组信息的例子。在该例子中,通过分析地址文件,统计得出了各个指令组的出现次数,其中每个指令组以第一个指令的地址和组内其他指令的偏移来标记。具体地,第一个指令组仅包含一条指令,出现次数为2 ;第二个指令组包含地址末位为164的指令以及相对偏移为I的指令共两条指令,这两条指令作为一个指令组共出现了 10次。基于图6A的分组信息,还可以进一步得出更具体的信息,例如各个指令出现的次数等等。并且,可以理解,步骤33获得的分组信息并不限于图6A所示的信息和格式。然而,可以想到,此时的指令仍然是机器指令,并以逻辑地址进行标记,如图6A所示例性示出。通常来说,用户,例如分析人员和工程师,并不能直接解读这样的用逻辑地址标记的机器指令,因此仅仅获得这样的信息对于了解并利用指令分组来说还远远不够。因此,在图3的步骤35,本实施例的方法将上述地址文件中的机器指令转化为可读指令,此处的可读指令是指程序员、工程师等本领域技术人员能够直接解读的指令。在一个实施例中,可以利用a2n工具和反汇编工具进行指令的转化。a2n(address to name)工具是现有的操作系统中提供的一项工具,用于根据指令地址找到该指令所对应的可执行代码符号,通常是所调用的函数名称。利用a2n工具确定这样的函数之后,就可以取出实现该函数功能的指令流。一般地,这时的指令流是二进制代码的形式。接着,利用反汇编工具(disassembler)将上述指令流反汇编为用户能够理解的可读指令。由此,综合利用a2n工具和反汇编工具,就可以将从处理器获得的机器指令转化为可读指令。图6B示出根据本发明一个实施例的指令转化表的例子。在图6B的例子中,对图6A的分组信息中涉及的指令进行了指令转化,并将转化前后的指令标记进行对应,从而形成转化表。具体地,根据每个指令的地址,将其转化为可读指令。出于清楚和简明的目的,在此用a,b,c,d示意性示出转化的可读指令。应该理解,尽管在图3的图示中,在获取机器指令的分组信息的步骤33之后才执行指令转化的步骤35,但是,这样的执行方式仅仅是一种示例。实际上,步骤33和步骤35的执行顺序并不受到该示例的限制。在一种实施例中,可以先执行步骤35来进行指令转化,然后执行步骤33来获得机器指令的分组信息;或者,在另一种实施例中,可以同时执行步骤33和35。因此,步骤33和35可以以任意顺序执行,从而分别对机器指令进行分析和转化。基于步骤33获得的机器指令的分组信息和步骤35获得的转化信息,在图3的步骤37,通过将上述两种信息进行综合,获得可读指令的分组信息。具体地,在机器指令的分组信息中,仍然以指令地址来标记各个机器指令。而另一方面,步骤35中进行的指令转化给出了指令地址与可读指令之间的对应关系。根据这样的对应关系,将机器指令分组信息中的机器指令替换为可读指令,即可得到可读指令的分组信息。例如,在图6A示例性示出的机器指令分组信息中,每一行示出一个指令组的分组信息,其中包含第一个指令的地址和其他指令的相对偏移。将上述相对偏移分别加上第一个指令的地址即可获得各个指令的完整地址。将每个指令的地址与图6B所示的转化表进行对比,即可获得转化后的可读指令。用可读指令替换图6A中的机器指令地址,即可得到可读指令的分组信息,如图7A,7B所示。可以理解,图7A-7B所示为根据本发明一个实施例的可读指令的分组信息的例子,其中图7A的例子中包含了与指令分组相关的多种信息,例如指令组的数目、每个指令组中包含的指令数目、指令名称等。在获得上述分组信息的基础上,本领域技术人员还可以进行进一步的分析和统计,从而根据实际需要得出附加的或更具体的分组信息。例如,可以在图7A的分组信息的基础上针对每个单个指令进行统计,获得该指令单独出现的次数,在组中出现的次数,以及作为指令组中首个指令出现的次数等等,如图7B所示。获得这样的附加的或更具体的信息的过程也都属于本发明范畴之内。由于在步骤31中可以实时地从缓存器读取处理器的分组指令,因此,由此获得的 指令分组信息可以是动态的,从而反映处理器在运行时对指令的分组情况。基于这样的指令分组信息,用户,例如程序员和工程师,就可以清楚地了解处理器对指令的分组处理情况,例如给定特定的指令流,处理器是如何对其进行分组和处理的;哪些指令倾向于形成一个指令组,哪些指令在指令分组中比较流行等等。并且,由于指令分组信息是以可读指令的形式示出的,因此,用户可以更容易地解读这样的分组信息,并利用这样的信息来进行代码优化,从而使得编写或生成的代码能够更好地利用处理器的分组规则。为了更好地示出上述的指令分组信息,在一个实施例中,图3的方法还包括显示步骤(未示出),其中将获得的可读指令的分组信息以可视化、图形化的形式示出。图8A-8C示出根据本发明实施例的图形化的分组信息。在一个实施例中,利用热度条来示出每个指令的热度值,其中热度值正比于指令在指令组中出现的次数。也就是说,一个指令作为指令组成员的次数越多,该指令对于指令分组来说越“热门”,因此热度值越高。并且,可以在热度条上用不同颜色或图案表示不同的热度值范围,使得指令热度的表示更加直观。图8A示出根据图7B的指令分组信息表示的热度条,其中示出了指令a,b,c,d的热度。在一个实施例中,利用统计块来表示各个指令组的出现情况。图SB示出根据图7A的指令分组信息表示的统计块视图。如图所示,用一个统计块表示一个指令组,其中统计块的高度对应于构成该指令组的指令数目,统计块的宽度等于该指令组的出现次数。基于如此定义的高度和宽度,还可以计算每个统计块的面积,将面积值作为该指令组的流行程度。并且,可以基于计算的流行程度,对统计块进行排列。具体地,可以按照流行程度从大到小的顺序将统计块从左到右排列。在一个例子中,还可以用不同颜色和/或图案填充这些统计块,由此表示不同的流行程度范围。在一个例子中,可以将图8A和图8B的图示结合在一起,同时示出单个指令的热度和指令组的流行程度。在一个实施例中,还可以示出指令分组信息随时间的变化,如图SC所示。在图SC 的视图中,横轴表示时间,纵轴表示被执行的指令,覆盖纵轴上若干指令的纵向线段表示特定时刻处理器执行的指令组的构成。随着指令分组信息的更新,表示所执行的指令组的纵向线段随时间轴而变化,从而动态示出处理器对指令的分组情况。在一个例子中,通过选择特定区域中的纵向线段,可以示出该线段对应的指令组的详细信息,包括首个指令的地址,其他指令的偏移等等。可以理解,将指令分组信息以可视化、图形化的形式呈现出来使得分组信息的表示更加直观,从而有助于用户的理解和分析。在其他实施例中,本领域技术人员在本发明实施例的公开内容的教导下,可以想到采用其他的显示方式,这些显示方式也在本发明的发明构思范围之内。因此,本发明的方法通过读取处理器在运行时分组的机器指令地址,并对读取的机器指令进行分析和转化,从而获得可读指令的分组信息,并可选地将这样的分组信息可视化呈现出来。通过这样的方法,用户可以了解处理器在运行时对指令的分组情况,从而有可能更好地利用处理器的处理性能。基于同一发明构思,本发明的实施例还提供了获取指令分组信息的装置。图9示出根据本发明一个实施例的装置的示意框图。如图9所示,本实施例的装置包含如下单元地址读取单元91,配置为从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件;分析单元93,配置为分析所述地址文件,获取所述机器指令的分组信息;指令转化单元95,配置为将所述地址文件中的所述机器指令转化为可读指令;以及信息获取单元97,配置为基于所述机器指令的分组信息和转化的可读指令,获得可读指令的分组信息。具体地,地址读取单元91从处理系统的缓存器中读取分组的指令的地址。所述缓存器可以如图4所示。基于这样的缓存器,地址读取单元91可以读取各个指令组中的机器指令的地址,包含指令组中首个指令的完整地址和其他指令相对于首个指令的偏移。在获得多个指令组的地址信息的基础上,地址读取单元91可以将这些地址信息组织成一个地址文件,例如地址表。该地址文件的格式应得到后续用于分析和处理指令地址的工具和应用的支持。地址表的例子如图5所示。在形成地址文件的基础上,分析单元93对地址文件进行分析,从而获取机器指令的分组信息,包括指令组的数目、每个指令组中指令的数目及指令地址等等。进一步地,分析单元93还可以对地址文件中出现的指令组进行统计,由此得出各个指令组的出现次数或出现频率。图6A示出根据一个实施例的机器指令的分组信息的例子。另一方面,指令转化单元95将上述地址文件中的机器指令转化为可读指令。具体地,指令转化单元95可以利用a2n工具,根据指令地址找到该指令所对应的可执行函数名称,并取出该函数对应的指令流,然后利用反汇编工具,将这样的指令流反汇编为用户能够理解的可读指令。指令转化的例子如图6B所示。应该理解,上述的分析单元93和指令转化单元95可以相互独立地并行执行,而不受执行顺序的限制。基于分析单元93获得的机器指令的分组信息和指令转化单元95获得的转化信息,信息获取单元97通过将上述两种信息进行综合,获得可读指令的分组信息。图7A-7B示出根据一个实施例的可读指令的分组信息的例子。
为了更好地示出获得的指令分组信息,在一个实施例中,图9的装置还包括显示 单元(未示出),配置为将获得的可读指令的分组信息以可视化、图形化的形式示出。具体地,在一个实施例中,显示单元可以以热度条的形式示出单个指令的热度值,如图8A所示;在一个实施例中,显示单元可以利用统计块来表示各个指令组的出现情况,如图8B所示;在一个例子中,显示单元还可以将图8A和图SB的图示结合在一起进行显示;在另一个实施例中,显示单元还可以示出指令分组信息随时间的变化,如图SC所示。由于图9所示装置的执行原理和方式与前述参照图3进行描述的方法相对应,因此不再赘述。利用上述的方法和装置,可以动态地获得处理器在运行时对指令的分组处理情况,并将其表示为用户可读的形式,使得用户可以了解指令的分组信息,从而有可能更好地利用处理器的处理性能。图10示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括CPU(中央处理单元)101、RAM(随机存取存储器)102、R0M(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU 10URAM 102, ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图10所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。虽然以上结合具体实施例,对本发明的各个装置和方法进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换 和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。
权利要求
1.一种处理指令分组信息的方法,包括 从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件; 分析所述地址文件,获取所述机器指令的分组信息; 将所述地址文件中的所述机器指令转化为可读指令;以及 基于所述机器指令的分组信息和转化得到的可读指令,获得可读指令的分组信息。
2.根据权利要求I的方法,其中,所述分组的机器指令的地址包括指令组中首个指令的地址和指令组中其他指令相对于该首个指令的地址偏移。
3.根据权利要求I或2的方法,其中所述形成地址文件包括,形成地址表形式的地址文件,所述地址表中的一个条目对应于一个指令组。
4.根据权利要求I的方法,其中分析所述地址文件包括,对所述地址文件中出现的指令组进行统计。
5.根据权利要求I的方法,其中将所述地址文件中的所述机器指令转化为可读指令包括 根据机器指令地址确定该机器指令所对应的可执行函数,并取出该函数对应的指令流;以及 将上述指令流进行反汇编,获得可读指令。
6.根据权利要求I的方法,其中获得可读指令的分组信息包括,用转化得到的可读指令替代所述机器指令的分组信息中的机器指令。
7.根据权利要求I的方法,其中所述可读指令的分组信息包括以下中的至少一项指令组的数目、指令组中包含的指令数目、指令组中的可读指令、特定指令单独出现的次数、特定指令在指令组中出现的次数、特定指令作为指令组中首个指令出现的次数。
8.根据权利要求I的方法,还包括,以图形化的形式呈现所述可读指令的分组信息。
9.根据权利要求8的方法,其中所述以图形化的形式呈现所述可读指令的分组信息包括以下中的至少一项 以热度条的形式示出单个指令的热度值; 利用统计块来表示各个指令组的出现情况;以及 图示出指令分组信息随时间的变化。
10.一种处理指令分组信息的装置,包括 地址读取单元,配置为从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件; 分析单元,配置为分析所述地址文件,获取所述机器指令的分组信息; 指令转化单元,配置为将所述地址文件中的所述机器指令转化为可读指令;以及信息获取单元,配置为基于所述机器指令的分组信息和转化得到的可读指令,获得可读指令的分组信息。
11.根据权利要求10的装置,其中,所述分组的机器指令的地址包括指令组中首个指令的地址和指令组中其他指令相对于该首个指令的地址偏移。
12.根据权利要求10或11的装置,其中所述地址读取单元配置为,形成地址表形式的地址文件,所述地址表中的一个条目对应于一个指令组。
13.根据权利要求10的装置,其中所述分析单元配置为,对所述地址文件中出现的指令组进行统计。
14.根据权利要求10的装置,其中所述指令转化单元配置为 根据机器指令地址确定该机器指令所对应的可执行函数,并取出该函数对应的指令流;以及 将上述指令流进行反汇编,获得可读指令。
15.根据权利要求10的装置,其中信息获取单元配置为,用转化得到的可读指令替代所述机器指令的分组信息中的机器指令。
16.根据权利要求10的装置,其中所述可读指令的分组信息包括以下中的至少一项指令组的数目、指令组中包含的指令数目、指令组中的可读指令、特定指令单独出现的次数、特定指令在指令组中出现的次数、特定指令作为指令组中首个指令出现的次数。
17.根据权利要求10的装置,还包括,显示单元,配置为以图形化的形式呈现所述可读指令的分组信息。
18.根据权利要求17的装置,其中所述显示单元配置为执行以下中的至少一项 以热度条的形式示出单个指令的热度值; 利用统计块来表示各个指令组的出现情况;以及 图示出指令分组信息随时间的变化。
全文摘要
本发明涉及获取指令分组信息的方法和装置,所述方法包括从缓存器中读取处理器在运行时分组的机器指令的地址,形成地址文件;分析所述地址文件,获取所述机器指令的分组信息;将所述地址文件中的所述机器指令转化为可读指令;以及基于所述机器指令的分组信息和转化的可读指令,获得可读指令的分组信息。所述装置与以上方法对应。利用上述方法和装置,可以动态地获得处理器在运行时对指令的分组处理情况,从而更好地利用处理器的处理性能。
文档编号G06F9/30GK102789377SQ201110129608
公开日2012年11月21日 申请日期2011年5月18日 优先权日2011年5月18日
发明者刘峰, 林鸿昌, 梁祺, 陈沁悦 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1