CN101957773A - 用于多轮次动态概要分析的方法及其系统 - Google Patents
用于多轮次动态概要分析的方法及其系统 Download PDFInfo
- Publication number
- CN101957773A CN101957773A CN2010102323165A CN201010232316A CN101957773A CN 101957773 A CN101957773 A CN 101957773A CN 2010102323165 A CN2010102323165 A CN 2010102323165A CN 201010232316 A CN201010232316 A CN 201010232316A CN 101957773 A CN101957773 A CN 101957773A
- Authority
- CN
- China
- Prior art keywords
- code
- profiling
- profiling data
- code area
- flaw
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/81—Threshold
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/885—Monitoring specific for caches
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开了用于优化应用执行的系统、方法和制品。利用注解来编制应用的多个代码区,以便生成针对多个代码区中每一个的概要分析数据。通过执行具有经编制代码区的应用,生成针对多个代码区中每一个的概要分析数据。基于针对多个代码区中每一个的已生成概要分析数据,标识瑕疵代码区。利用注解来编制已标识瑕疵代码区的多个代码子区,以生成针对多个代码子区中每一个的概要分析数据。通过执行具有经编制代码子区的应用,生成针对多个代码子区中每一个的概要分析数据。基于针对多个代码子区中每一个的已生成概要分析数据,标识瑕疵代码子区。使用已标识的瑕疵代码子区,来优化应用的执行。
Description
技术领域
本发明的领域涉及编译器。更具体地,本发明的领域涉及用于便于多轮次和多目的动态分析的编译器编制(instrumentation)基础结构。
背景技术
编译器是一种用来将以高级编程语言编写的计算机程序转换为由计算机系统中的一个或多个中央处理单元(CPU)执行的机器代码的工具。取决于编译器如何执行这一转换,得到的程序可能在计算机上以不同的速度执行,和/或需要较多或较少的系统存储器以及较多或较少的存储空间。
已经进行了很多工作以创建编译器,该编译器不仅仅创建从源代码到机器代码的直接转换。这种编译器通常称为优化编译器。优化编译器对源代码进行分析,并且实现可以在目标计算机系统上更为有效执行的策略。在此上下文中,“优化”一般是指通过选择性地修改如何编译源代码来改善计算机代码的速度和效率。
尽管优化编译器可以利用诸如循环变换或者数据重映射等多种技术来产生有效的机器代码,但是计算机硬件的进步为编译器设计者带来了新的挑战。具体地,CPU设备的时钟速度近年来处于增长中,而系统存储器速度却已经落后。不加管理的情况下,这一速度差异(通常是指存储器滞后)导致在从系统存储器读取数据或者向系统存储器写入数据时CPU闲置等待。在编译器中使用的一种优化策略是改善高速缓存使用(以及由此改善执行时间),以及减少在程序执行期间发生的高速缓存未命中的数目。
发明内容
本发明的一个实施方式包括一种用于多轮次动态概要分析(profiling)的方法,包括:配置一个或多个处理器来执行操作。所述操作通常可以包括:利用注解(annotation)来编制应用的多个代码区,以便在链接和执行该代码区时生成概要分析数据;执行所述应用以生成针对所述多个代码区中每一个的概要分析数据;以及根据所述概要分析数据,标识来自所生成概要分析数据的瑕疵代码区。所述瑕疵代码区通常代表高速缓存未命中的计数超过预定义阈值的代码区。所述操作可以进一步包括:利用注解来编制瑕疵代码区,以便在链接和执行该代码区时生成概要分析数据;执行所述应用,以生成针对包括所述瑕疵代码区在内的多个代码区的附加概要分析数据;以及根据所述附加概要分析数据来标识所述瑕疵代码区的子区。所述方法还可以包括:优化所标识的子区。
本发明的另一实施方式包括一种包含程序的计算机可读存储介质,当所述程序在处理器上执行时,其执行用于多轮次动态概要分析的操作。所述操作通常可以包括:利用注解来编制应用的多个代码区,以便在链接和执行该代码区时生成概要分析数据;执行具有经编制代码区的所述应用,以生成针对所述多个代码区中每一个的概要分析数据;以及根据所述概要分析数据,标识来自所生成概要分析数据的瑕疵代码区。所述瑕疵代码区通常代表高速缓存未命中的计数超过预定义阈值的代码区。所述操作可以进一步包括:利用注解来编制瑕疵代码区,以便在链接和执行该代码区时生成概要分析数据;执行具有经编制代码区的所述应用,以生成针对包括所述瑕疵代码区在内的多个代码区的附加概要分析数据;以及根据所述附加概要分析数据来标识所述瑕疵代码区的子区。所述操作还可以包括:优化所标识的子区。
本发明的又一实施方式包括一种系统,其具有处理器和包含程序的存储器,当所述程序由处理器执行时,其执行用于多轮次动态概要分析的操作。所述操作通常可以包括:利用注解来编制应用的多个代码区,以便在链接和执行该代码区时生成概要分析数据;执行具有经编制代码区的所述应用,以生成针对所述多个代码区中每一个的概要分析数据;以及根据所述概要分析数据,标识来自所生成概要分析数据的瑕疵代码区。所述瑕疵代码区通常代表高速缓存未命中的计数超过预定义阈值的代码区。所述操作可以进一步包括:利用注解来编制瑕疵代码区,以便在链接和执行该代码区时生成概要分析数据的注解;执行具有经编制代码区的所述应用,以生成针对包括所述瑕疵代码区在内的多个代码区的附加概要分析数据;以及根据所述附加概要分析数据来标识所述瑕疵代码区的子区。所述方法还可以包括:优化所标识的子区。
附图说明
可以通过参考附图中示出的本发明的实施方式,对上文概括的发明进行更为具体的描述,从而详细理解本发明的上述特征、优点和目的的实现方式。
然而,应当注意,附图仅仅示出了本发明的典型实施方式,因此不应被解释为对本发明范围的限制,因为本发明可以具有其他等效的实施方式。
图1是按照本发明的一个实施方式示出用于优化应用执行的系统的框图。
图2是按照本发明的一个实施方式示出图1的多轮次概要分析器的组件的框图。
图3是按照本发明的一个实施方式描绘用于从用户的角度来优化应用执行的方法的流程图。
图4是按照本发明的一个实施方式描绘用于优化应用执行的方法的流程图。
图5是按照本发明的一个实施方式描绘用于执行多轮次动态概要分析的方法的流程图。
图6是按照本发明的一个实施方式描绘用于执行多轮次动态概要分析的方法的流程图。
具体实施方式
本发明的实施方式提供了一种用于多轮次(也即,多个编制周期)和多目的(也即,支持多种类型的概要分析,诸如高速缓存未命中概要分析和调用敏感块计数概要分析)动态概要分析的通用编译器编制基础结构。该基础结构支持多轮次概要分析,其中后面的轮次可以使用来自先前轮次的概要分析数据,以细化概要分析。在一个实施方式中,多轮次概要分析器可以执行粗略粒度的高速缓存未命中概要分析,以标识瑕疵代码区。瑕疵代码区是指产生的高速缓存未命中的数目大于高速缓存未命中的可接受阈值计数(这转而可能导致次优的应用性能)的代码区。类似地,瑕疵存储器引用是指产生的高速缓存未命中的数目大于高速缓存未命中的可接受阈值计数的存储器引用。多轮次概要分析器随后可以仅针对瑕疵代码区内的存储器引用来执行精细粒度的高速缓存未命中概要分析。例如,对于高速缓存未命中概要分析,编译器可以首先执行粗略粒度的高速缓存未命中概要分析,以标识可能包含瑕疵加载(也即,可能导致高速缓存未命中的加载)的代码区;继而在该代码区内执行精细粒度的高速缓存未命中,以精确地标识个别瑕疵加载,也即,标识源代码的哪行包括可能导致高速缓存未命中的存储器引用。
在此描述的编译器基础结构可以使用具有静态分析的多轮次概要分析,以降低应用的概要分析开销。此外,该编译器可以使用统一的内部表示来注解瑕疵代码区,以及将代码的低级表示精确映射至代码的高级表示。而且,多个编制周期改进了编译器与概要分析工具(诸如,性能库包)之间的交互,以降低概要分析开销并且改进优化结果。例如,多个编制周期允许对跨不同性能计数器群组的应用特性进行概要分析。此外,多个编制周期允许对诸如块计数器概要分析、值概要分析和性能计数器概要分析等不同的概要分析机制进行结合。
编译器中使用的优化策略可以取决于程序的概要分析数据。概要分析数据可以通过编译时分析(称为静态概要分析)和/或运行时分析(称为动态概要分析)来收集。涉及概要分析的反馈(PDF)是指使用代表性的数据样本对程序的执行进行概要分析以便生成该程序的概要分析数据的方法。编译器继而使用生成的概要分析数据来指导优化。
概要分析技术包括控制流概要分析、值概要分析以及性能计数器概要分析。控制流概要分析可以进一步分类为顶点概要分析、边概要分析以及路径概要分析。顶点概要分析测量代码的每个基本块在运行时期间执行多少次。基本块是连续操作的序列,其中控制流在该序列的开始处进入,并且在该序列的末端离开,除了在序列末端之外不会出现停止或者分支的可能。边概要分析数据测量每个分支转换在运行期间执行多少次。路径概要分析测量每个路径(也即,相关的分支)在运行时期间执行多少次。值概要分析测量不变式、可能的值以及变量的范围(例如,用于分支预测目的)。性能计数器概要分析测量硬件性能计数器,其跟踪特定的硬件事件,诸如高速缓存未命中。通常,编译器插入调用以调取由性能库包提供的应用编程接口(API)。性能计数器概要分析可以用来确定应用特定的度量,诸如每指令周期(CPI)、每秒浮点运算(FLOPS)、每秒百万指令(MIPS)以及高速缓存未命中率。
下面,将参考本发明的实施方式。然而,应当理解,本发明不限于特定的已描述实施方式。相反,可以期待实现下面特征和元素(不论其是否涉及不同的实施方式)的任何组合并且实践本发明。此外,尽管本发明的实施方式可以实现优于其他可能解决方案和/或现有技术的优势,但是给定的实施方式是否实现了特定的优点不是本发明的限制。由此,除非在权利要求中明确记载,下面的方面、特征、实施方式和优点仅仅是说明性的,并且不应被认为是对所附权利要求的要素或者限制。同样,除非在权利要求中明确记载,当提及“本发明”时不应当被认为是对在此公开的任何发明主题的概括,并且不应当被认为是所附权利要求的要素或者限制。
本发明的一个实施方式实现为用于与计算机系统结合使用的程序产品。程序产品的程序定义了实施方式的功能(包括在此描述的方法),并且可以被包含在各种计算机可读存储介质上。示范性的计算机可读存储介质包括但不限于:(i)信息持久性存储于其上的不可写存储介质(例如,计算机中的只读存储器设备,诸如CD-ROM驱动器可读的CD-ROM盘);(ii)信息可变存储的可写存储介质(例如,盘盒驱动器中的软盘或者硬盘驱动器)。当携带指示本发明的功能的计算机可读指令时,这种计算机可读存储介质是本发明的实施方式。其他介质包括用来向计算机传递信息的通信介质,诸如通过计算机或者电话网络,包括无线通信网络。后面的实施方式特别地包括传输去往/来自因特网和其他网络的信息。当承载涉及本发明的功能的计算机可读指令时,这种通信介质是本发明的实施方式。广义来讲,计算机可读存储介质和通信介质在此可以称为计算机可读介质。
一般地,执行以实现本发明实施方式的例程可以是操作系统或特定应用的部分、组件、程序、模块、对象或者指令序列。本发明的计算机程序通常包括多个指令,这些指令将由本机计算机转译为机器可读格式,并且由此是可执行指令。而且,程序包括变量和数据结构,其相对于程序本地驻留,或者存在于存储器中或存储设备上。而且,此后描述的各种程序可以基于应用来标识,这些程序在本发明的特定实施方式中针对这些应用而被实现。然而,应当理解,下面的任何特定程序命名法都仅仅是为了方便而使用,由此,本发明不应限于仅在这种命名法所标识和/或暗示的任何特定应用中使用。
图1是按照本发明的一个实施方式示出用于优化应用执行的系统100的框图。联网的系统100包括计算机102。计算机102可以经由网络130连接至其他计算机。一般地,网络130可以是电信网络和/或广域网(WAN)。在特定实施方式中,网络130是因特网。
计算机102通常包括处理器104,其经由总线112连接至存储器106、网络接口设备110、存储108、输入设备114和输出设备116。计算机102通常在操作系统(未示出)的控制之下。操作系统的示例包括UNIX、Microsoft操作系统的各版本、以及操作系统的各分发(注意,Linux是Linux Torvalds在美国和其他国家的注册商标)。更一般地,可以使用支持在此公开的功能的任何操作系统。
存储器106可以是随机访问存储器。尽管存储器106被示为单个实体,但是应当理解,存储器106实际上可以包括多个模块,并且存储器106可以存在于多个级别,从高速寄存器和高速缓存到较低速但是较大的DRAM芯片。
网络接口设备110可以允许经由网络130在计算机102与其他计算机之间的通信。例如,网络接口设备110可以是网络适配器或者其他网络接口卡(NIC)。
存储108可以是硬盘驱动存储设备。尽管存储108被示为单个单元,但是存储器108可以是固定的和/或可拆卸的存储设备的组合,诸如固定盘驱动器、软盘驱动器、带驱动器、可拆卸存储卡或者光学存储。存储器106和存储108可以是跨多个主要和次要存储设备的一个虚拟地址空间的部分。
输入设备114可以是用于向计算机102提供输入的任何设备。例如,可以使用键盘、小键盘、光笔、触摸屏、轨迹球或者语音识别单元、音频/视频播放器等。
输出设备116可以是用于向计算机102的用户提供输出的任何设备。例如,输出设备116可以是任何传统的显示屏或者扬声器组,并伴有其相应的接口卡,也即视频卡和声卡(未示出)。尽管与输入设备114分离地示出,但是输出设备116和输入设备114可以结合。例如,可以使用具有集成触摸屏的显示屏、具有集成键盘的显示器或者与文本语音转换器结合的语音识别单元。
如图所示,计算机102的存储器106包括编译器148和经编制的应用152。编译器148包括多轮次概要分析器150。此外,计算机102的存储108包括应用代码(或者简称代码)154、概要分析数据156、用户选项158、粒度级别160、阈值162以及注解164。代码154可以包括应用的源代码、应用的目标代码以及源代码的任何中间编译器表示。图2到图5以及关联的描述详细说明了在计算机102上运行的多轮次概要分析器150的结构和操作。
尽管实施方式是参考作为编译器148一部分的多轮次概要分析器150描述的,但是可以广泛地想到其他实施方式(诸如,单机多轮次概要分析器150、作为链接器一部分的多轮次概要分析器150、以及作为编译器148和链接器二者的部分的多轮次概要分析器150)。
图2是按照本发明的一个实施方式示出图1的多轮次概要分析器150的组件的框图200。如图所示,多轮次概要分析器150包括粒度管理器210、选项管理器220、阈值管理器230、注解管理器240以及区评估器250。
在一个实施方式中,多轮次概要分析器150接收代码154,并且用注解164编制代码154(可以将其称为第一编制周期)。编译器148可以基于经过注解的代码来生成可执行文件。该可执行文件可以称为“经编制的”可执行文件,以便与得自未经注解代码的可执行文件区分开。用户可以运行该经编制的可执行文件(例如,使用样本数据集),以生成概要分析数据156。概要分析数据156描述应用的执行特性。例如,基于硬件性能计数器,在应用执行的同时生成的概要分析数据156可以包括与多个代码区中每一个相关联的高速缓存未命中的计数。也即,出于概要分析目的,编制可以将代码154划分为多个代码区。在一个实施方式中,每个代码区对应于由编译器148生成的代码块。每个代码区也可以被映射为代码(例如,源代码)的较高层表示的相应块。此外,可以通过评估应用的至少一个编译单元(例如,通过静态分析)来标识多个代码区。在此,多个代码区也可以称为代码区的“候选集”。
多轮次概要分析器150可以基于概要分析数据156来重新编制代码154(可以将其称为第二编制周期)。例如,多轮次概要分析器150可以标识“热”块(例如,高速缓存未命中计数导致超过预定义阈值的代码的基本块)。在这种情况下,多轮次概要分析器150可以使用注解164来编制已标识热块中的多个存储器引用。编译器148可以基于重新编制的代码来生成经编制的可执行文件。用户可以运行经编制的可执行文件,以生成附加概要分析数据156,其以提高的细节级别(例如,在已标识热块的存储器引用级别,而不是基本块级别)来描述应用的执行特性。
多轮次概要分析器150还可以基于新生成的概要分析数据156来重新编制代码154。多轮次概要分析器150可以执行任意数目的编制周期,从而基于附加概要分析数据156来进一步细化经过注解的代码。通过提供多个编制周期(由此支持增量式和迭代式动态概要分析),多轮次概要分析器150可以通过灵活、有效的方式来标识瑕疵代码区。例如,多轮次概要分析器150可以仅对已标识瑕疵代码区内的存储器引用(而不是代码154中的所有存储器引用)进行概要分析,由此降低概要分析开销。
在一个实施方式中,在不同的样本运行中收集不同类型的硬件性能事件信息。对代码154的多轮次动态概要分析允许基于不同类型的硬件性能事件信息来优化代码154(也即,一个类型针对一个样本运行)。此外,对代码154的多轮次动态概要分析允许累积式的概要分析,其中来自一个或多个先前运行的概要分析数据156可以用来细化后续概要分析。而且,对代码154的多轮次动态概要分析有效地标识出用于优化的代码区,而无需过度编制(例如,编制全部代码154)。过度编制可能损害所观测应用行为的有效性(也即,出于概要分析目的)。例如,过度编制的应用的附加时间和空间需求可能导致应用行为的代表性低于未经编制的应用(也即,较不准确地反映未经编制的应用的行为)。
在一个实施方式中,粒度管理器210定义对应用编码154进行概要分析的多个粒度级别158。代码154可以包括应用的源代码、应用的目标代码以及源代码的任何中间编译器表示。在一个实施方式中,粒度管理器210可以基于用户输入(例如,经由输入设备114)来定义多个粒度级别158。表I示出了粒度级别158的示例:
表I粒度级别示例
粒度级别 | 概要分析单位 | 描述 |
1 | 基本块 | 粗略粒度 |
2 | 存储器引用 | 精细粒度 |
在此示例中,粒度管理器210定义两个粒度级别158。粒度级别210包括用于对代码154的基本块进行概要分析的第一粒度级别(名为“粗略粒度”),以及用于对代码154的个别存储器引用进行概要分析的第二粒度级别(名为“精细粒度”)。每个粒度级别158可以表示代码(例如,源代码、目标代码、中间编译器表示等)的任何单位。例如,粒度级别可以将“过程(Procedure)”指定为概要分析单位(由此指定:代码154中的每个过程可以独立地进行概要分析)。
基于选择的粒度级别158,多轮次概要分析器150可以通过不同方式使用注解164来编制代码154。例如,如果用户选择粗略粒度的概要分析,则多轮次概要分析器150可以通过在代码154的每个基本块的开始和结束插入注解164来编制代码154。每个注解可以提供函数调用,以便在代码154被编译、链接和执行时提供概要分析数据。例如,为了对代码154的每个基本块的高速缓存未命中进行概要分析,多轮次概要分析器150可以:(i)在每个基本块的开始编制注解,该注解提供用以信号通知相应基本块的开始的函数调用(例如,名为__pdf_profile_PM_start()的函数);以及(ii)在每个基本块的结束处编制注解,该注解提供用以信号通知相应基本块的结束的函数调用(例如,名为__pdf_profile_PM_end()的函数)。此外,如果用户选择精细粒度的概要分析,则多轮次概要分析器150可以通过针对代码154的每个存储器引用插入注解164来编制代码154。在这种情况下,多轮次概要分析器150可以为每个存储器引用编制注解,该注解提供用以信号通知要进行概要分析的相应存储器引用的位置的标记(例如,名为__pdf_profile_cache_miss()的函数)。将在下文结合注解管理器240详述注解164。
在一个实施方式中,选项管理器220允许用户配置应用的多轮次动态概要分析。表II示出了示例性用户选项160:
表II用户选项示例
选项 | 描述 | 条件 |
1 | 移除概要分析注解 | -qnopdf(默认选项值) |
2 | 粗略粒度的概要分析 | -qpdf1并且不存在先前的概要分析数据 |
3 | 精细粒度的概要分析 | -qpdf1并且存在先前的概要分析数据 |
4 | 优化可执行文件 | -qpdf2 |
在此特定示例中,选项管理器220定义了用于配置多轮次动态概要分析的四个用户选项160。选项管理器220还可以将每个用户选项160与应用用户选项160的条件相关联。如所示,用户选项160包括用于移除概要分析注解的选项(也即,当用户向编译器148提供-qnopdf标记时)。用户选项160还包括用于执行粗略粒度概要分析的选项(也即,当用户向编译器148提供-qpdf1标记,并且没有先前的概要分析数据156可用时)。还有用于执行精细粒度概要分析的选项(也即,当用户向编译器148提供-qpdf1标记,并且先前的概要分析数据156可用时)。最后,选项160包括用于使用概要分析数据156来优化可执行文件的选项(也即,当用户向编译器148提供-qpdf2标记时)。本领域的技术人员将会认识到,本发明的实施方式可以适用于支持其他用户选项和条件,而不脱离本发明的范围。
在一个实施方式中,阈值管理器230定义用于优化应用执行的至少一个阈值162。例如,阈值管理器230可以允许用户规定:在对应用的一轮次概要分析中获得的信息应当如何用来修改在随后轮次中如何对应用进行编制(以及由此如何进行概要分析)。表III示出了阈值162的示例:
表III阈值示例
ID | 描述 | 条件 |
1 | 瑕疵代码区 | >200次来自代码区的高速缓存未命中 |
2 | 瑕疵存储器引用 | >75次来自存储器引用的高速缓存未命中 |
在此特定示例中,已经针对优化应用而指定了两个阈值162,一个用于代码区,而一个用于个别存储器引用。首先,200次高速缓存未命中的阈值用来将代码区标识为瑕疵的,代码区可以包括例如由编译器生成的代码块,或者源代码级别的过程、函数、方法、模块等。第二,75次高速缓存未命中的阈值用来将存储器引用标识为瑕疵的。在一个实施方式中,对不同的代码区进行概要分析,以标识在已编译可执行文件中出现的高速缓存未命中的广泛区域(按照代码区阈值)。一旦标识,便可以使用相继地精细粒度概要分析来定位高速缓存未命中的原因(按照存储器引用阈值)。
在某些情况下,少量的存储器引用可能对总体高速缓存未命中的较大比例负有责任。大量的高速缓存未命中可能显著降低执行应用的性能。标识瑕疵代码区可以允许编译器148更好地优化应用。例如,编译器148可以生成对瑕疵代码(或者更具体地,对瑕疵存储器引用)采用数据预取和数据重组织技术的可执行代码。由此多轮次概要分析器150可以通过执行经编制应用152来评估概要分析数据156,从而标识代码154的子集,以便进行优化来减少高速缓存未命中。
在一个实施方式中,注解管理器240定义多个注解164,并且利用所定义的多个注解164来编制代码154。表IV示出了注解164的示例:
表IV注解示例
ID | 注解类型 | 注解 |
1 | 高级别 | unsigned int__pdf_profile_PM_start() |
2 | 高级别 | unsigned int__pdf_profile_PM_end() |
3 | 高级别 | void*__pdf_profile_cache_miss() |
4 | 低级别 | void__profile_cache_miss() |
5 | 低级别 | void__pdf_get_data() |
6 | 优化 | void__mem_delay() |
7 | 优化 | void__expect_value() |
在此特定示例中,注解管理器240定义六个注解164。每个注解提供用于在已编译代码的执行期间对数据进行概要分析的函数调用。在此示例中,按照一个实施方式,注解164包括高级别注解、低级别注解和优化注解。在一个实施方式中,低级别编译器可以将函数调用转换为可执行指令的内联序列。高级别注解可以提供对高级别优化器接口的函数调用,以便对高级编程语言中(例如,应用的源代码中,或其中间编译器表示中)的存储器引用进行概要分析。低级别注解可以提供对低级别优化器接口的函数调用,以便对特定的存储器引用(例如,应用的源代码中的,或其中间编译器表示中的)进行概要分析。例如,注解管理器240可以在低级别代码生成期间(例如,在基于高级别中间表示的低级别中间表示的生成期间),将高级别注解转换为低级别注解。也即,注解管理器240可以将低级别注解与对应于具有高级别注解的高级别代码(诸如,瑕疵声明)的低级别代码(诸如,瑕疵存储器引用,诸如装载或者存储操作)进行关联。换言之,可以跨各种编译和优化阶段(也即,包括不同级别的代码表示)来维护高级别注解和低级别注解。此外,编译器148可以基于优化注解来优化代码154。换言之,优化注解可以充当对编译器的“提示”。
低级别注解可以提供对void__profile_cache_miss()的函数调用,其具有形式参数列表,包括存储器地址(例如,void*addr)、计数器地址(例如,long long*counter)、加载或者存储操作(例如,unsigned int LoadStoreType)、存储器引用类型(例如,unsigned int dataType)以及存储器引用长度(例如,unsigned int length)。该方法可以执行以下操作:(i)读取性能计数器;(ii)执行具有指定的dataType和length的LoadStoreType操作;(iii)再次读取性能计数器,并且检查性能计数器是否已经增加1;以及(iv)如果是,通过增加1来更新counter(否则,返回)。更简单地,低级别注解可以收集应用执行期间的概要分析数据(例如,针对代码区或者代码子区的高速缓存未命中的计数)。在一个实施方式中,编译器148可以生成用于直接读取性能计数器的代码段,以降低概要分析开销。例如,编译器148可以将函数调用转换为可执行代码的内联序列。
按照一个实施方式,高级别注解可以提供用于执行粗略粒度概要分析的两个函数调用:unsigned int__pdf_profile_PM_start()和unsigned int__pdf_profile_PM_end()。这些方法可以具有形式参数列表,其包括事件类型(例如,unsigned int eventType)。例如,在通过多轮次概要分析器150的第一轮次期间,多轮次概要分析器150可以标识代码154的多个区,将针对这些区来执行粗略粒度的高速缓存未命中概要分析。多轮次概要分析器150可以将已标识的多个区的每一个封装在__pdf_profile_PM_start()和__pdf_profile_PM_end()注解(例如,分别在每个区的开始和结束)内。在通过多轮次概要分析器150的第二轮次期间,如果用户提供-qnopdf标记,则多轮次概要分析器150可以从代码154中移除全部的__pdf_profile_PM_start()和_pdf_profile_PM_end()注解。然而,如果用户提供-qpdf1标记,则多轮次概要分析器150可以将__pdf_profile_PM_start()和__pdf_profile_PM_end()注解转换为用于调取性能度量API的方法的注解。此外,如果用户提供-qpdf2标记,则多轮次概要分析器150可以将高级别注解__pdf_profile_PM_start()和__pdf_profile_PM_end()转换为低级别__mem_delay()调用。
高级别注解还可以提供用于执行精细粒度高速缓存未命中概要分析的函数调用:void*__pdf_profile_cache_miss()。该方法可以具有参数列表,其包括内部映射的序列号(例如,unsigned int sequenceNumber)、存储器地址(例如,void*addr)、加载或存储类型(例如,unsigned int LoadStoreType)、存储器引用类型(例如,unsigned int dataType)以及存储器引用长度(例如,unsigned int length)。例如,在通过多轮次概要分析器150的第一轮次期间,多轮次概要分析器150可以标识代码154中的多个区,将针对这些区执行精细粒度的高速缓存未命中概要分析。每个指令可以引用存储器地址。多轮次概要分析器150可以针对每个已标识指令而插入__pdf_profile_cache_miss()注解(例如,如果LoadStoreType为0,则针对存储器加载引用;或者如果LoadStoreType为1,则针对存储器存储操作)。在通过多轮次概要分析器150的第二轮次期间,如果用户提供-qnopdf标记,则多轮次概要分析器150可以从代码154中移除所有__pdf_profile_cache_miss()注解。然而,如果用户提供-qpdf1标记,则多轮次概要分析器150可以将__pdf_profile_cache_miss()注解转换为低级别__pdf_profile_cache_miss()注解。此外,如果用户提供-qpdf2标记,则多轮次概要分析器150可以将高级别__pdf_profile_cache_miss()注解转换为低级别__mem_delay()注解。
示范性地,优化注解包括存储器延迟注解。存储器延迟注解可以提供对void__mem_delay()的函数调用,其具有存储器引用地址(例如,void*addr)和预期延迟周期数目(例如,unsigned int delayCycles)的形式参数列表。存储器延迟注解指定了哪里可能出现高速缓存未命中(例如,基于概要分析数据156)。例如,存储器延迟注解可以指定代码154(或者代码154的中间编译器表示)中与应用的可执行代码(也即,机器代码)的瑕疵存储器引用相对应的指令的地址。不论怎样,编译器148可以基于存储器延迟注解来保持判断向代码154中引入什么(如果有的话)优化。换言之,代码154的存储器延迟注解充当向编译器的“提示”,以便优化应用。
按照一个实施方式,优化注解还可以包括预期值注解。预期值注解可以提供对void__expect_value()的函数调用,其具有预期值(例如,int expectedValue)的形式参数列表。预期值注解指定了表达式的可能值,使得编译器156可以根据具有预期值的表达式来进行优化权衡(诸如,分支预测)。
在一个实施方式中,区评估器250基于注解164和概要分析数据156(一旦概要分析数据在初始轮次之后可用),来编制代码154的多个区或者子区。例如,区评估器250可以参照表III的阈值162来评估概要分析数据156,以确定要编制的代码154的多个区,以及是使用高级别注解(用于粗略粒度分析)还是低级别注解(用于精细粒度分析)。
图3是按照本发明的一个实施方式示出用于优化应用执行的方法300的流程图。如所示,方法300开始于步骤310,在此用户使用例如-qpdf1编译器标记来编译和链接源代码154,以指示应当进行概要分析。作为响应,多轮次概要分析器150可以利用用于粗略粒度概要分析的注解来编制代码,以作为编译过程的一部分。用户继而可以使用表示的数据集(例如,样本输入320)来执行经编制应用152的一个或多个样本运行。经编制应用152在其执行时生成概要分析数据156,例如该应用记录高速缓存未命中的数目。在使用相应的数据集执行经编制应用152的一个或多个样本运行之后,用户可以返回步骤310,利用-qpdf1编译器标记来重新编译和重新链接源代码154。作为响应,在步骤310,多轮次概要分析器150基于粗略粒度概要分析的结果,利用用于精细粒度概要分析的注解来编制代码。用户可以继续对经编制应用152进行概要分析和执行(通过使用多个样本数据集进行)。
在使用表示的数据集执行经编制应用152的一个或多个样本运行之后,用户可以继续到步骤330,利用-qpdf2编译器标记来重新编译和重新链接源代码154。在步骤330,编译器148可以基于可用的概要分析数据156和注解164(例如,通过生成__mem_delay()调用),来生成优化的应用340。此外,编译器148生成优化的应用340。在步骤330之后,方法300终止。
图4是按照本发明的一个实施方式用于优化应用执行的方法400的流程图。如所示,方法400开始于步骤410,在此多轮次概要分析器150利用注解来编制应用的多个代码区,以生成针对多个代码区中每一个的概要分析数据。例如,多轮次概要分析器150可以编制代码154的多个基本块,以便在执行已编译代码时捕获概要分析数据。在步骤420,经编制的应用生成(经由经编制的、经编译的代码的执行)针对代码区的概要分析数据156。例如,基于经编制代码所监测的硬件性能计数器,概要分析数据156可以包括针对每个代码区的高速缓存未命中的计数。
在步骤430,多轮次概要分析器150基于在程序执行期间生成的概要分析数据156来标识瑕疵代码区。例如,多轮次概要分析器150可以参照指定的阈值来评估概要分析数据156。在步骤440,多轮次概要分析器150利用注解来编制瑕疵代码区的多个代码子区,以便在已编译代码被执行时捕获概要分析数据。例如,多轮次概要分析器150可以对瑕疵代码区中的存储器引用进行编制,从而在已编译代码被执行时针对每个存储器引用来捕获概要分析数据156。
在步骤450,执行在步骤440处编译和链接的应用。如上所述,在执行期间,应用针对多个存储器引用中的每一个生成概要分析数据156。例如,基于硬件性能计数器,概要分析数据156可以包括针对每个存储器引用的高速缓存未命中的计数。在步骤460,多轮次概要分析器150根据针对每个代码子区而捕获的概要分析数据,来标识瑕疵代码子区。
在步骤470,用户可以指示编译器优化如何编译代码,以寻址导致超过阈值的高速缓存未命中的代码子区。在一个实施方式中,用户还可以人工添加注解(例如,__mem_delay()注解),以指导编译器优化。例如,多轮次概要分析器150可以基于标识的瑕疵代码子区和生成的概要分析数据156来编译应用,以产生优化的应用。
图5是按照本发明的一个实施方式描绘用于执行多轮次动态概要分析的方法500的流程图。如所示,方法500开始于步骤510,在此用户发起通过多轮次概要分析器150的第一轮次。例如,编译器148可以接收用于编译和链接应用源代码的指令,其包括指示编译器在已编译和链接的代码中包括概要分析编制的编译器标记(例如,使用-qpdf1标记)。在步骤520,多轮次概要分析器150确定应当执行粗略粒度概要分析还是精细粒度概要分析。例如,多轮次概要分析器150可以评估表II的条件。例如,多轮次概要分析器150可以评估概要分析数据是否可用。如果不可用,则多轮次概要分析器150可以使用粗略粒度方法来执行初始轮次的动态概要分析。否则,多轮次概要分析器150可以基于从之前轮次的动态概要分析获得的概要分析数据,来执行附加的精细粒度概要分析。
在步骤530,如果多轮次概要分析器确定执行粗略粒度概要分析,则多轮次概要分析器150利用对概要分析函数(例如,__pdf_profile_PM_start()和__pdf_profile_PM_end())的调用来编制代码。例如,多轮次概要分析器150可以标识代码块,并且利用调用来编制相应的编译单元,以便将编译单元作为统一的块来进行概要分析(例如,使用表III的注解)。在参照样本数据执行代码之后,在步骤540,用户发起通过多轮次概要分析器150的第二轮次,再次指定用来执行应当在应用中执行什么概要分析的标记。作为响应,多轮次概要分析器150标识由用户所提供的标记。如果标记指示不执行概要分析(例如,使用-qnopdf编译器标记),则在步骤560,多轮次概要分析器150移除对概要分析函数的引用(例如,__pdf_profile_PM_start()和__pdf_profile_PM_end()调用)。如果标记指示继续动态概要分析(例如,使用-qpdf1标记),则在步骤562,多轮次概要分析器150将来自步骤530的注解转换为__pdf_get_data()调用(例如,以合并所有先前的概要分析数据156)。如果标记是-qpdf2,则方法进行到步骤564,在此编译器148基于概要分析数据156和注解来生成__mem_delay()调用。也即,-qpdf2标记被用来指示编译器148基于可用的概要分析数据156来编译和优化代码154。
然而,如果在步骤520,编译器确定应当执行精细粒度的概要分析,则在步骤535,多轮次概要分析器150生成__pdf_profile_cache_miss()调用。例如,多轮次概要分析器150可以利用表III的相应注解来对代码154进行注解。在步骤545,用户发起通过多轮次概要分析器150的第二轮次。例如,编译器148可以从用户处接收代码154和标记。在步骤555,多轮次概要分析器150标识用户所提供的标记。如果标记是-qnopdf(对应于表II的情况1),则方法进行到步骤566,在此,多轮次概要分析器150从代码154中移除所有__pdf_profile_cache_miss()调用。如果标记是-qpdf1,则方法进行到步骤568,在此,多轮次概要分析器150将来自步骤535的注解转换为__profile_cache_miss()调用。如果标记是-qpdf2,则方法进行到步骤570,在此,多轮次概要分析器150将来自步骤535的注解转换为__mem_delay()调用。
在步骤560或者566之后,编译器148仅根据代码154来生成应用。在步骤562或者步骤570之后,编译器148可以基于代码154以及分别来自步骤562或者步骤570的注解,来生成经编制的应用152。在步骤564或者步骤568,编译器148可以基于代码154以及分别来自步骤564或者步骤568的注解来生成优化的应用。
多轮次概要分析器150可以在编译期间执行编制(也称为编译步骤实现)。例如,如果用户提供-qpdf1标记,则多轮次概要分析器150可以检查应用的先前概要分析数据156。如果存在先前概要分析数据156,则多轮次概要分析器150可以合并所有先前概要分析数据156,和/或使用先前概要分析数据156来改进/细化瑕疵代码区的标识(例如,使用粗略粒度的概要分析数据来执行精细粒度的概要分析数据)。如果用户提供-qpdf2标记,则多轮次概要分析器150可以基于来自先前编制周期的概要分析数据156和注解164,来生成注解,诸如针对瑕疵存储器引用的__mem_delay()和针对表达式的__expect_value()。编译器148可以基于生成的注解和概要分析数据156来优化应用。优化的示例包括内联、克隆、外联、间接调用特别化、瑕疵加载驱动的数据预取、数据重组织、指令调度等。
多轮次概要分析器150也可以在应用的编译之后执行编制(也称为链接步骤编制)。例如,多轮次概要分析器150可以基于所有编译单元来生成调用图。如果用户提供-qnopdf标记,则多轮次概要分析器150可以移除在编译期间生成的所有注解164。如果用户提供-qpdf1标记,则多轮次概要分析器150可以为每个编译单元预留存储器,并且针对每个已标识的代码区(或者已标识的代码子区)来执行存储器映射。多轮次概要分析器150还可以生成针对动态概要分析的调用。此外,多轮次概要分析器150可以查看来自编译的任何优化,以移除冗余的概要分析。多轮次概要分析器150继而可以与低级别优化器对接,以便将注解164扩展到执行序列中,或者生成对运行时库的调用。也即,可以利用在程序执行期间收集概要分析数据的实际指令(或者对函数的调用)来替换注解。
图6是按照本发明的一个实施方式描绘用于执行多轮次动态概要分析的方法600的流程图。如所示,方法600开始于步骤610,在此用户调取编译器148来编译应用的源代码。按照一个实施方式,步骤620到步骤650可以由编译器148的高级别优化器612来执行。在步骤620,高级别优化器612确定用户是否期望编制。如果不期望,方法600进行到步骤625,在此高级别优化器612基于源代码和任何概要分析数据156来优化和生成应用的中间代码。
然而,如果用户期望编制,方法600进行到步骤630,在此高级别优化器612确定是否存在先前概要分析数据156。如果不存在,方法600进行到步骤640,在此高级别优化器612标识代码区,以便针对高速缓存未命中而进行概要分析(也即,执行粗略粒度的概要分析)。然而,如果存在先前概要分析数据156,方法600进行到步骤635,在此高级别优化器612基于概要分析数据156来标识个别存储器引用,以便针对高速缓存未命中进行概要分析(也即,执行精细粒度的概要分析)。在步骤640或者步骤635之后,方法600进行到步骤650,在此高级别优化器612生成应用的经编制中间代码。
在步骤650或者步骤625之后,方法600进行到步骤660,在此编译器148的低级别优化器基于经编制的中间代码来生成应用的一个或多个目标文件。在步骤660之后,链接器可以链接一个或多个目标文件以及任意的库,以生成应用的程序(也即,可执行文件)。在步骤670,如果程序是优化的程序(也即,从步骤625和660生成),用户可以可选地执行优化的程序。然而,按照一个实施方式,优化的程序可以不产生概要分析数据156。也即,如果用户决定最后一次进行编译(也即,步骤625和660),则无需执行“运行”步骤670。另一方面,在步骤670,如果程序是经编制的程序(也即,从步骤650和660生成),则用户可以参照样本数据来执行该编制的程序,以生成概要分析数据156。在步骤670之后,如果用户期望继续概要分析,则方法600返回步骤610。否则,方法600终止。
当然,在此描述的实施方式意在说明而非限制本发明,并且可以宽泛地想到其他实施方式。例如,本领域的技术人员将会认识到,本发明的实施方式可以适用于支持其他粒度级别、用户选项、阈值和注解。此外,本发明的实施方式可以适用于支持注解代码的其他方式。例如,多轮次概要分析器可以生成代码的中间表示。多轮次概要分析器继而可以对代码的中间表示进行注解,而保留代码本身不变。而且,本发明的实施方式可以适用于支持除高速缓存未命中概要分析之外类型的概要分析,诸如块计数概要分析和值概要分析。
有利地,本发明的实施方式优化应用的执行。在一个实施方式中,多轮次概要分析可以利用注解来编制应用的多个代码区,以便生成针对多个代码区中每一个的概要分析数据。当用户执行具有经编制代码区的应用时,这些注解可以生成针对多个代码区中每一个的概要分析数据。多轮次概要分析器可以基于针对多个代码区中每一个的已生成概要分析数据来标识瑕疵代码区。此外,多轮次概要分析器可以利用注解来编制已标识瑕疵代码区的多个代码子区,以生成针对多个代码子区中每一个的概要分析数据。当用户执行具有经编制代码子区的应用时,这些注解可以生成针对多个代码子区中每一个的概要分析数据。多轮次概要分析器可以基于针对多个代码子区中每一个的已生成概要分析数据,来标识瑕疵代码子区。编译器可以使用已标识的瑕疵代码子区来优化应用的执行。
尽管上文涉及到本发明的实施方式,但是在不脱离本发明基本范围的情况下,可以提出本发明的其他和进一步实施方式,并且本发明的范围由所附权利要求来限定。
Claims (17)
1.一种用于多轮次动态概要分析的计算机实现的方法,包括:配置一个或多个处理器来执行操作,所述操作包括:
利用注解来编制应用的多个代码区,以便当所述代码区在所述处理器上进行链接和执行时,生成概要分析数据;
执行所述应用,以生成针对所述多个代码区中每一个的概要分析数据;
根据所述概要分析数据,标识来自所生成概要分析数据的瑕疵代码区,其中所述瑕疵代码区包括高速缓存未命中的计数超过预定义阈值的代码区;
利用注解来编制所述瑕疵代码区,以便在所述代码区被链接和执行时,生成概要分析数据;
执行所述应用,以生成针对包括所述瑕疵代码区在内的多个代码区的附加概要分析数据;以及
根据所述附加概要分析数据,标识所述瑕疵代码区的子区。
2.如权利要求1所述的计算机实现的方法,其中通过评估所述应用的至少一个编译单元来标识所述多个代码区。
3.如权利要求1所述的计算机实现的方法,其中基于至少一个硬件性能计数器来生成所述概要分析数据。
4.如权利要求1所述的计算机实现的方法,其中所述概要分析数据包括在执行每个相应代码区的同时发生的高速缓存未命中的计数。
5.如权利要求1所述的计算机实现的方法,其中所述代码区选自所述应用的源代码、所述应用的目标代码以及所述应用的中间编译器表示。
6.如权利要求1所述的计算机实现的方法,其中所标识的子区对应于所述应用的源代码中包括存储器引用的指令。
7.如权利要求1所述的计算机实现的方法,进一步包括:
优化所标识的子区,其中优化所标识的子区包括执行以下至少一个:内联、克隆、外联、间接调用特别化、瑕疵加载驱动的数据预取、数据重组织、以及指令调度。
8.如权利要求1所述的计算机实现的方法,其中每个注解被扩展为选自以下的注解代码:对运行时库的至少一次函数调用或者指令的内联序列。
9.一种包含程序的计算机可读存储介质,当所述程序在处理器上执行时,其执行用于实现如权利要求1-8中任一项所述方法的操作。
10.一种系统,包括:
处理器;以及
包含程序的存储器,当所述程序由所述处理器执行时,其执行用于多轮次动态概要分析的操作,所述操作包括:
利用注解来编制应用的多个代码区,以便当所述代码区在所述处理器上进行链接和执行时,生成概要分析数据;
执行所述应用,以生成针对所述多个代码区中每一个的概要分析数据;
根据所述概要分析数据,标识来自所生成概要分析数据的瑕疵代码区,其中所述瑕疵代码区包括高速缓存未命中的计数超过预定义阈值的代码区;
利用注解来编制所述瑕疵代码区,以便在所述代码区被链接和执行时,生成概要分析数据;
执行所述应用,以生成针对包括所述瑕疵代码区在内的多个代码区的附加概要分析数据;以及
根据所述附加概要分析数据,来标识所述瑕疵代码区的子区。
11.如权利要求10所述的系统,其中通过评估所述应用的至少一个编译单元来标识所述多个代码区。
12.如权利要求10所述的系统,其中基于至少一个硬件性能计数器来生成所述概要分析数据。
13.如权利要求10所述的系统,其中所述概要分析数据包括在执行每个相应代码区的同时发生的高速缓存未命中的计数。
14.如权利要求10所述的系统,其中所述代码区选自所述应用的源代码、所述应用的目标代码以及所述应用的中间编译器表示。
15.如权利要求10所述的系统,其中所标识的子区对应于所述应用的源代码中包括存储器引用的指令。
16.如权利要求10所述的系统,其中优化所标识的子区包括执行以下至少一个:内联、克隆、外联、间接调用特别化、瑕疵加载驱动的数据预取、数据重组织、以及指令调度。
17.如权利要求10所述的系统,其中每个注解被扩展为选自以下的注解代码:对运行时库的至少一次函数调用以及指令的内联序列。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CA2672337A CA2672337C (en) | 2009-07-15 | 2009-07-15 | Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis |
CA2672337 | 2009-07-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101957773A true CN101957773A (zh) | 2011-01-26 |
CN101957773B CN101957773B (zh) | 2014-10-29 |
Family
ID=43448724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010232316.5A Active CN101957773B (zh) | 2009-07-15 | 2010-07-15 | 用于多轮次动态概要分析的方法及其系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9946523B2 (zh) |
JP (1) | JP5473768B2 (zh) |
CN (1) | CN101957773B (zh) |
CA (1) | CA2672337C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988593A (zh) * | 2021-04-13 | 2021-06-18 | 苏州沁游网络科技有限公司 | 代码分析方法、装置、计算机设备及存储介质 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9280439B2 (en) * | 2011-02-11 | 2016-03-08 | Sap Se | Usage analysis of productive environment to establish new data source for process optimization and project planning |
CN102650964B (zh) | 2011-02-28 | 2016-03-09 | 国际商业机器公司 | 用于监控面向对象的应用的方法、系统和自监控系统 |
US9274919B2 (en) * | 2011-04-29 | 2016-03-01 | Dynatrace Software Gmbh | Transaction tracing mechanism of distributed heterogenous transactions having instrumented byte code with constant memory consumption and independent of instrumented method call depth |
JP5998764B2 (ja) * | 2012-09-04 | 2016-09-28 | 富士通株式会社 | 情報処理装置、ログ出力方法およびログ出力プログラム |
US9110765B2 (en) * | 2012-10-17 | 2015-08-18 | Sap Portals Israel Ltd | Displaying different hierarchy levels of computer program source code |
US9875090B2 (en) | 2012-12-20 | 2018-01-23 | Microsoft Technology Licensing, Llc | Program analysis based on program descriptors |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
JP6127639B2 (ja) * | 2013-03-26 | 2017-05-17 | 富士通株式会社 | プログラム実行制御プログラム、プログラム実行制御方法 |
KR102125559B1 (ko) * | 2013-10-28 | 2020-06-22 | 삼성전자주식회사 | 멀티 패스 시뮬레이터에서 캐시 프로파일링 정보를 보정하는 방법 및 이를 위한 장치 |
US10157239B2 (en) * | 2013-12-23 | 2018-12-18 | Oracle International Corporation | Finding common neighbors between two nodes in a graph |
US9348567B2 (en) | 2014-07-03 | 2016-05-24 | Microsoft Technology Licensing, Llc. | Profile guided optimization in the presence of stale profile data |
US9928310B2 (en) | 2014-08-15 | 2018-03-27 | Oracle International Corporation | In-memory graph pattern matching |
JP6471615B2 (ja) * | 2015-06-02 | 2019-02-20 | 富士通株式会社 | 性能情報生成プログラム、性能情報生成方法及び情報処理装置 |
US9535673B1 (en) * | 2016-02-03 | 2017-01-03 | International Business Machines Corporation | Reducing compilation time using profile-directed feedback |
US10261763B2 (en) * | 2016-12-13 | 2019-04-16 | Palantir Technologies Inc. | Extensible data transformation authoring and validation system |
US11182272B2 (en) | 2018-04-17 | 2021-11-23 | International Business Machines Corporation | Application state monitoring |
US11775471B2 (en) * | 2019-10-08 | 2023-10-03 | Embarcadero Technologies, Inc. | System and method for caching converted files and compiling computer code from the cache |
US11775317B2 (en) | 2021-04-30 | 2023-10-03 | International Business Machines Corporation | Locate neural network performance hot spots |
JP7351326B2 (ja) | 2021-09-22 | 2023-09-27 | カシオ計算機株式会社 | 時計外装部材、時計、時計外装部材の製造方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6047363A (en) * | 1997-10-14 | 2000-04-04 | Advanced Micro Devices, Inc. | Prefetching data using profile of cache misses from earlier code executions |
CN1466716A (zh) * | 2000-09-08 | 2004-01-07 | ̫��ϵͳ����˾ | 以辅助处理器预取用于主要处理器的指令的方法和装置 |
CN1716188A (zh) * | 2002-04-09 | 2006-01-04 | 智慧第一公司 | 具有预取指令的微处理器及预取至其高速缓存的方法 |
US7120906B1 (en) * | 2000-04-28 | 2006-10-10 | Silicon Graphics, Inc. | Method and computer program product for precise feedback data generation and updating for compile-time optimizations |
US20080177756A1 (en) * | 2007-01-18 | 2008-07-24 | Nicolai Kosche | Method and Apparatus for Synthesizing Hardware Counters from Performance Sampling |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08263372A (ja) * | 1995-03-28 | 1996-10-11 | Hitachi Ltd | キャッシュミス情報の収集とチューニングを行う装置 |
US5815720A (en) * | 1996-03-15 | 1998-09-29 | Institute For The Development Of Emerging Architectures, L.L.C. | Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system |
US6631518B1 (en) * | 1997-03-19 | 2003-10-07 | International Business Machines Corporation | Generating and utilizing organized profile information |
US6149318A (en) * | 1997-04-15 | 2000-11-21 | Samuel C. Kendall | Link-time and run-time error detection, and program instrumentation |
US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
US6134710A (en) * | 1998-06-26 | 2000-10-17 | International Business Machines Corp. | Adaptive method and system to minimize the effect of long cache misses |
US6308324B1 (en) * | 1999-06-10 | 2001-10-23 | International Business Machines Corporation | Multi-stage profiler |
US6934832B1 (en) * | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
US6865730B1 (en) * | 2000-03-08 | 2005-03-08 | International Business Machines Corporation | Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading |
US7146607B2 (en) * | 2002-09-17 | 2006-12-05 | International Business Machines Corporation | Method and system for transparent dynamic optimization in a multiprocessing environment |
US7194732B2 (en) * | 2003-06-26 | 2007-03-20 | Hewlett-Packard Development Company, L.P. | System and method for facilitating profiling an application |
US7788657B2 (en) * | 2004-02-27 | 2010-08-31 | Tvworks, Llc | Targeted runtime compilation |
US8301868B2 (en) * | 2005-09-23 | 2012-10-30 | Intel Corporation | System to profile and optimize user software in a managed run-time environment |
US7987456B2 (en) * | 2006-01-24 | 2011-07-26 | Microsoft Corporation | Qualitatively annotated code |
-
2009
- 2009-07-15 CA CA2672337A patent/CA2672337C/en active Active
-
2010
- 2010-05-11 JP JP2010109001A patent/JP5473768B2/ja active Active
- 2010-07-06 US US12/830,553 patent/US9946523B2/en active Active
- 2010-07-15 CN CN201010232316.5A patent/CN101957773B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6047363A (en) * | 1997-10-14 | 2000-04-04 | Advanced Micro Devices, Inc. | Prefetching data using profile of cache misses from earlier code executions |
US7120906B1 (en) * | 2000-04-28 | 2006-10-10 | Silicon Graphics, Inc. | Method and computer program product for precise feedback data generation and updating for compile-time optimizations |
CN1466716A (zh) * | 2000-09-08 | 2004-01-07 | ̫��ϵͳ����˾ | 以辅助处理器预取用于主要处理器的指令的方法和装置 |
CN1716188A (zh) * | 2002-04-09 | 2006-01-04 | 智慧第一公司 | 具有预取指令的微处理器及预取至其高速缓存的方法 |
US20080177756A1 (en) * | 2007-01-18 | 2008-07-24 | Nicolai Kosche | Method and Apparatus for Synthesizing Hardware Counters from Performance Sampling |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988593A (zh) * | 2021-04-13 | 2021-06-18 | 苏州沁游网络科技有限公司 | 代码分析方法、装置、计算机设备及存储介质 |
CN112988593B (zh) * | 2021-04-13 | 2024-02-06 | 苏州沁游网络科技有限公司 | 代码分析方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP2011022993A (ja) | 2011-02-03 |
US20110016460A1 (en) | 2011-01-20 |
CA2672337C (en) | 2017-01-03 |
US9946523B2 (en) | 2018-04-17 |
CA2672337A1 (en) | 2011-01-15 |
CN101957773B (zh) | 2014-10-29 |
JP5473768B2 (ja) | 2014-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101957773B (zh) | 用于多轮次动态概要分析的方法及其系统 | |
US9430353B2 (en) | Analysis and visualization of concurrent thread execution on processor cores | |
US9798528B2 (en) | Software solution for cooperative memory-side and processor-side data prefetching | |
US8938729B2 (en) | Two pass automated application instrumentation | |
Ma et al. | A memory access model for highly-threaded many-core architectures | |
Shen et al. | Cudaadvisor: Llvm-based runtime profiling for modern gpus | |
US20070079298A1 (en) | Thread-data affinity optimization using compiler | |
US20090150874A1 (en) | Binary programmable method for application performance data collection | |
JP4681491B2 (ja) | プロファイリングプログラムおよびプロファイリング方法 | |
CN103999056A (zh) | 管理工作负载存储器分配的方法和设备 | |
Ogilvie et al. | Fast automatic heuristic construction using active learning | |
JPH09330233A (ja) | 最適目的コード生成方法 | |
JP6342129B2 (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
Mancuso et al. | Light-PREM: Automated software refactoring for predictable execution on COTS embedded systems | |
US6360360B1 (en) | Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects | |
Novillo | Samplepgo-the power of profile guided optimizations without the usability burden | |
Sasongko et al. | ReuseTracker: fast yet accurate multicore reuse distance analyzer | |
Feller | Value profiling for instructions and memory locations | |
Pena et al. | A framework for tracking memory accesses in scientific applications | |
CN113138841A (zh) | 一种资源调度方法以及资源调度系统 | |
JP2022140995A (ja) | 情報処理装置、コンパイルプログラムおよびコンパイル方法 | |
Hu et al. | EVMTracer: Dynamic Analysis of the Parallelization and Redundancy Potential in the Ethereum Virtual Machine | |
Banditwattanawong et al. | Optimization of program loading by object class clustering | |
Nutile | Using profiling to improve the performance of automatically parallelized programs | |
Zhao et al. | Static classification of value predictability using compiler hints |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |