CN102165428A - 软件应用性能增强 - Google Patents
软件应用性能增强 Download PDFInfo
- Publication number
- CN102165428A CN102165428A CN2009801314253A CN200980131425A CN102165428A CN 102165428 A CN102165428 A CN 102165428A CN 2009801314253 A CN2009801314253 A CN 2009801314253A CN 200980131425 A CN200980131425 A CN 200980131425A CN 102165428 A CN102165428 A CN 102165428A
- Authority
- CN
- China
- Prior art keywords
- input code
- code
- intermediate representation
- parallelization
- described input
- 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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- 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/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
从输入代码生成并行化的可执行代码包括静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;动态分析所述输入代码以确定所述输入代码的数据流和控制流的另外方面;至少部分基于通过所述静态分析标识的所述输入代码的数据流和控制流的所述方面,以及通过所述动态分析标识的所述输入代码的数据和控制流的所述另外方面,生成所述输入代码的中间表示;并处理所述中间表示以确定所述中间表示的合格于并行执行的部分;以及根据所处理的中间表示生成并行化的可执行代码。
Description
其它申请的交叉引用
此申请要求于2008年8月13日提交的题目为METHOD AND APPARATUS TO ENHANCE PERFORMANCE OF SOFTWARE APPLICATIONS的美国临时专利申请号61/188,905的优先权,为了所有目的在此将其并入以供参考。
背景技术
在计算机系统中,在软件的性能和效率方面的改进能够实现新的和改进的应用和功能。在要求更强大的硬件(更强大的硬件进而能够实现更强大的软件)的更强大的软件之间的这种互相促进的交互作用已经成为过去数十年的信息革命的驱动器。在“指令集兼容的”计算的历史中,较新的各代计算机硬件已经对现有应用提供了相当大的改进,而新的且重新编译的应用提供了超过硬件改进的另外改进。
然而,由于计算机硬件体系结构技术已经成熟,所以对于微处理器厂商而言,通过微体系结构技术给出增大的性能已变得愈加困难。由于技术正扩展到用以在计算的线程内改进指令级并行性的成本效益技术的极限,所以许多业内人士把线程级并行性看作用以继续性能单调工作的最好技术。因此,制造者已经开始生产在单个半导体“芯片”内包含多个处理器的“多核”CPU。与此相呼应,主要的SW开发者已经开始利用多核处理器的性能潜力要求重新编写应用。
作为这些发展的结果,现有应用可能常常不再期望新的各代计算机硬件在性能方面有相当大的改进。大规模的性能改进通常仅可获得于具体地以较新的多核处理器为目标的重新编写的应用。此外,对多线程应用进行编程以利用多处理器体系结构的过程常常是复杂且易于出错的。
附图说明
在下面的详细描述和附图中公开了本发明的各种实施例。
图1是图示多处理器硬件系统的实施例的框图。
图2是图示具有增强的应用性能的软件系统的实施例的框图。
图3A是图示应用到不存在性能增强的多处理器硬件系统中的CPU的映射的图。
图3B是图示应用到性能增强的多处理器硬件系统的实施例中的CPU的映射的图。
图4是图示用于从输入代码生成并行可执行码的过程的实施例的流程图。
图5是图示用于从输入代码生成并行可执行码的过程的另一实施例的流程图。
图6是图示静态分析过程的实施例的流程图。
图7示图示动态分析过程的实施例的流程图。
图8是图示实现图4和5中描述的过程的性能增强的系统的实施例的框图。
图9是图示中间表示的示例的图。
图10是图示程序表示以及它们的相互关系的若干示例的图。
具体实施方式
本发明可以以众多方式被实现为,包括过程;设备;系统;物之组合;体现在计算机可读存储媒体上的计算机程序产品;和/或处理器,诸如一处理器,其被配置成执行存储在耦合到该处理器的存储器上和/或由耦合到该处理器的存储器提供的指令。在此说明书中,这些实现方式,或者本发明可以采用的任何其它形式,可以被称作技术。总的来说,在本发明的范围内,可以对所公开过程的步骤的次序进行改变。除非另外声明,诸如被描述为被配置成实行任务的处理器或存储器之类的部件可以被实现为被临时配置成在给定时间实行任务的通用部件或者被制造成实行任务的特定部件。如本文所使用的,术语“处理器”指一个或多个装置、电路、和/或被配置成处理诸如计算机程序指令之类的数据的处理核。
下面连同图示本发明的原理的附图一起提供对本发明的一个或多个实施例的详细描述。虽然结合这样的实施例对本发明进行了描述,但是本发明并不限于任何实施例。本发明的范围仅由权利要求限制,且本发明包括众多的变体、修改和等效体。在下面的描述中阐述了众多特定细节以便提供对本发明的透彻理解。这些细节是作为示例的目的而被提供的,因此可以在没有这些特定细节中的一些或全部的情况下依据权利要求来实践本发明。为了清楚的目的,未对与本发明有关的技术领域中已知的技术材料进行详细描述以使得本发明不会被不必要地混淆。
公开了一种用于从输入代码生成并行化的可执行代码的技术。所述输入代码被静态分析以确定所述输入代码的数据流和控制流的方面。在一些实施例中,输入代码还被动态分析以确定数据流和控制流的另外方面。中间表示(Intermediate Representation,IR)是至少部分基于所确定的方面生成的。对所述IR进行处理,并标识IR的合格于并行执行的部分。在一些实施例中,生成被配置成并行执行所标识的部分的并行化代码并保存在高速缓冲存储器中以使得对原始输入代码的后期调用就改为调用此高速缓冲的代码。
图1是图示多处理器硬件系统的实施例的框图。示例系统100包括一个或多个多核中央处理单元(CPU)102,一个或多个动态存储器104,诸如网卡、显示器、键盘等等之类的一个或多个输入/输出(I/O)装置106以及诸如盘存储器或闪速存储器之类的一个或多个非易失性存储器108。这些部件彼此互连。
图2是图示具有增强的应用性能的软件系统的实施例的框图。在此示例中,应用性能增强器204(也被称作加速器)被配置成处理诸如202之类的应用的可执行文件(executable)并增强该应用的性能。如将在下面将更详细描述的,该应用性能增强器将可执行文件转换成中间表示并使用静态和动态分析标识该中间表示中能够并行执行的部分。
图3A是图示应用到不存在性能增强的多处理器硬件系统中的CPU的映射的图。在此示例中,诸如302之类的应用具有单个线程并在单个CPU上运行而其它CPU核空闲。即使该应用是多线程的,但对于编程者而言通常是以最简单的方式而不是以产生最好性能的方式进行线程化的。换句话说,常常是为了编程容易而对应用进行划分,而不是为了最好性能而在多个线程之间对应用进行平衡。例如,采用WindowsTM图形用户接口(GUI)的应用常常被划分为用于主应用的线程和用于GUI管理的单独线程。然而,此形式的多线程化并不能优化主处理线程的性能。此外,在现代时间片、多任务、多处理器的环境中,可以同时运行多个应用,每一个应用运行在单独的核上。那些应用中的每一个和对应的执行CPU之间的关系通常是图3A中所示的一对一关系,其大抵不会导致对多个CPU的处理能力的最好利用。
图3B是图示在应用到性能增强的多处理器硬件系统的实施例中的CPU的映射的图。为了并行计算,对应用的(一个或多个)主线程进行分析。对被认为合格于并行计算的部分,诸如组成部分i,ii,…,m,进行重新配置以便以多个线程的形式在各自的CPU上运行,因此这达到了高度的并行化和改进的性能。
图4是图示用于从输入代码生成并行可执行代码的过程的实施例的流程图。在各种实施例中,过程400可以在端用户的计算机上进行,或者在软件开发时间在开发者的系统上进行。在各种实施例中,源代码、汇编代码、和/或者二进制代码能够被用作输入代码。在402,对所述输入代码进行静态分析。如本文所使用的,所述静态分析指对在该分析期间不被要求是正执行的代码的分析。静态分析可以在对系统资源的需求低的时间脱机进行。在一些实施例中,所述静态分析对所述输入代码进行反汇编,并标识所述输入码的数据部分和代码部分,包括指令、操作、以及数据流和控制流的方面。被标识出的信息中的一些包括被包含在数据段中的数据,被包含在代码段中的代码,有助于上述数据的处理的头信息。
数据流和控制流的某些方面,诸如依赖于代码的行为的信息,可能难以使用静态分析获得。因而,在404,对所述输入代码进行动态分析以标识数据流和控制流的另外方面。如本文所使用的,动态分析指在代码执行时进行的联机或者运行时分析。在各种实施例中,执行频率、热点和其它简档信息、分支目标、存储器别名信息、以及动态循环计数等等是经由动态分析标识的方面中的一些。此信息可以在运行时经由对代码的解析或者仿真,和/或通过执行测量(instrumented)代码来收集。
在406,基于通过所述静态分析标识的方面以及通过所述动态过程标识出的另外方面,生成输入代码的中间表示(IR)。在408,IR被进一步处理以标识合格于并行执行的部分,并且对该中间表示进行操纵以形成包括并行化部分的经修改的IR。可以使用多种并行化技术。例如,可以使用诸如软件流水线化之类的技术展开循环,可以插入动态检查以将数据依赖转变成控制依赖。在410,IR被发送给代码生成器,所述代码生成器基于该IR生成并行化的可执行代码。在412,存储该并行化的可执行代码。
图5是图示用于从输入代码生成并行可执行代码的过程的另一实施例的流程图。在各种实施例中,过程500可以在端用户的计算机上进行,或在软件开发时间在开发者的系统上进行。在502,对输入代码进行静态分析以标识该输入代码的数据流和控制流的方面。在一些实施例中,任选地实行动态分析以确定该输入代码的数据流和控制流的另外方面。在一些实施例中,动态分析被省略。在504,至少部分基于通过静态分析确定的数据流和控制流的所述方面生成所述输入代码的中间表示。如果已经实行了动态分析,则IR也还会至少部分地基于所述另外方面的。在506,对IR进行处理。标识IR中可并行化的部分,并且生成并行化的可执行代码。在508,存储该并行化的可执行代码,以使得后期可以再次使用它。保持该并行化的可执行代码和原始输入代码之间的映射。在510,响应于执行该输入代码的请求,把存储的并行化的可执行代码加载到存储器并执行以代替原始代码。如下面将更加全面地描述的,在不同实施例中,可以使用多种高速缓冲技术来存储可执行文件。
图6是图示静态分析过程的实施例的流程图。该过程开始于602,响应于用户请求、响应于程序调用等等而处于启动时间。在604,扫描文件系统以获得可执行文件、任何引用的动态链接库(dynamically linked libraries,DLL)、和/或共享对象(shared object,SO)文件。任选地,标识频繁使用/最近使用的和/或更新的应用和库。在606,对于每个文件,打开并读取该文件。在608,如果可获得则分析诸如来自先前运行的运行时统计之类的动态数据。在610,对该文件进行反汇编并转变成静态生成的中间表示。在612,对IR实行转换。在一些实施例中,所述转换涉及分析该代码并标识所述IR中能够并行运行的部分。在一些实施例中,所述转换涉及添加测量代码,所述测量代码将便于对运行时信息的测量,诸如热点和其它简档信息、分支目标信息、存储器别名信息、以及动态循环计数信息等等的分析。在一些实施例中,所述转换涉及修改所述代码。
在614,创建可能的线程,包括检查器代码和其它测量,诸如针对要求运行时助手(runtime assistance)的项的向回到运行时的链接,诸如针对错误恢复。在616,发射(emit)代码和注解。如果该应用尚未被并行化,则存储所述代码和注解。DLL或者其它库代码可以以不同的方式被并行化,这取决于调用代码。在一些实施例中,针对这些DLL生成多个并行化,且每个拷贝都与调用应用/功能相关联。
图7是图示动态分析过程的实施例的流程图。过程700起始于702,响应于用户请求、响应于程序调用等等而处于启动时间。该过程观察(observe)以获得程序调用。在704,发现了调用且所述代码被截取。在706,确定该程序是否已经被加速。如果存在所存储的部分或完全并行化的版本,则该程序被认为已经被加速。所述并行化的和/或加强的版本可能来自上面描述的静态分析过程,或来自先前的动态分析过程。
在708,如果该程序已经被加速,则获取先前存储的代码。在710,在适宜时实行优化和链接。在712,转移控制并执行该代码。在714,在执行期间,在适宜时收集诸如运行时统计之类的动态数据。诸如被添加到该代码的计数器之类的测量代码可以提供这样的运行时统计。存储所述数据。
然而,在716,如果未发现并行化的和/或加强的版本且该程序未被预并行化,则该过程截取该代码并开始诸如测量之类的最小侵犯性监测以标识热点。在717,分析以及并入诸如来自先前或当前的执行的运行时统计之类的动态数据。在718,对该程序代码进行反汇编并转变成中间表示。在720,分析和转换所述IR,其中,根据需要插入测量代码,并且可以对该代码进行并行化。在722,创建可能的线程。在724,发射可执行代码和注解,并在适宜时写入和存储到非易失性存储器。在未修改/最低限度的测量代码和被修改的/并行化的代码之间建立映射。然后,在712,将控制转移到被修改的/并行化的代码,并且收集诸如运行时统计之类的动态数据。
如果需要,可以重复过程700。例如,该运行时系统可以指示应当重复该过程并应当重新生成代码,这是因为所述热点已经随时间改变了,或者,如同后面将更详细地描述的,推测选择不正确。
图8是图示实现图4和5中所描述的过程的性能得以增强的系统的实施例的框图。在示出的该示例中,所述输入代码包括一个或多个源可执行文件1,其通常通过对以高级语言编写的应用程序的编译过程来创建。在一些实施例中,所述源可执行文件包括二进制代码,诸如由编译器生成的代码、动态链接库(DLLs)、共享对象文件(SOs)、或组合。在示出的该示例中,所述源可执行文件被安装在与所述性能增强器相同的系统中。该应用可以包括直接的、显式的线程化,基于线程库的间接线程化,或者组合。
假设示出的该系统将存储器组织为多个段,诸如可执行区域,已初始化和未初始化的静态分配的数据,堆栈和动态分配的数据。当程序被调用(作为用户动作(诸如鼠标点击)的直接结果或者其它原因(例如,由另一程序触发或响应于网络事件))时,对存储器空间进行初始分配。操作系统将使用加载器把可执行文件加载到存储器中,并在必要时重新分配并与其它可执行文件链接。控制随后被转移给新调用的程序。
在示出的该示例中,所述性能增强器包括下列功能组件:反汇编器/转变器5,并行化器7,代码发射器8,执行管理器9,配置管理器12,以及文件高速缓冲存储器管理器4。一些组件的操作可以部分或完全包括在其它组件中。所述组件中的一些是任选的。
在接收指向代码的区域(即,用于存储操作码的第一位的存储单元)的指针时,反汇编器/转变器5对该指令进行反汇编。此过程标识所述输入代码中的指令和操作数,并将此信息连同其它全局信息(诸如处理器模式)转变为中间表示(IR)6。
该中间表示表示所述输入代码的数据结构和程序信息。可以由编译器分析和操纵该IR,该编译器基于所述IR实行优化和转换。一些编译器采用多个IR,以使得数据格式随着时间改变以便于不同的编译阶段。IR通常包括关于要实行的操作的信息、这些操作所依赖的(源)数据以及目标数据。
图9是图示中间表示的示例的图。在此示例中,示出了用于计算斐波纳契(Fibonacci)序列的功能的低级虚拟机(Low Level Virtual Machine,LLVM)IR。针于该功能的源代码如下:
返回到图8,从反汇编得到的该IR被并行化器7处理,该并行化器7生成新的IR。在此示例中,该并行化器类似于现代的、优化的编译器,其包含最终导致可执行代码的生成的多个优化“遍次(pass)”。在源输入已经被转变为中间表示之后,这些遍次将对所述中间表示进行转换。每个遍次直接或间接地改进了IR,这为随后的优化阶段准备IR。示例优化包括死代码消除、常量传用、循环不变量分析以及循环展开。在一些实施例中,一些遍次可能简单对IR进行分析并为随后的遍次创建另外的优化结构。除了多个优化和转换算法它们自身之外,还存在指导何时或在何种环境下应用这些优化的程式化地编码判断(也被称作启发式)。例如,如果展开循环将增加代码大小并超出存储需求,因此抵消了展开的好处的话,则可能并不希望展开循环。另外,还存在对各种遍次进行排序的较高级别控制。在所述并行化器的一些实施例中,采用多个遍次来标识和提取线程级并行性。这些优化使得能够在共享公共存储器的各自CPU上运行的独立的执行线程得以创建。
并行化器可以静态或动态操作。在一些实施例中,并行化器混合了静态/脱机分析和动态/运行时分析二者以改进性能。
当并行化器正动态操作以实行比简单的运行时检查更复杂的优化时,可以改变实行这些操作的地方和方式以使该另外处理的性能影响最小化。在一些实施例中,所述操作和分析在来自于正在运行的应用的单独的进程或线程中实行。在一些实施例中,所述操作在与该应用相同的进程或线程中实行。
在一些实施例中,并行化器可以调用涉及性能增强的线程级并行性的猜测(guess)的优化。在这样的情况下,所述并行化器被说成用以对并行性进行“推测(speculate)”。插入代码以证实该推测正确。例如,所述并行化器推测长运行过程调用将返回结果“0”。推测使得先前需要等待此结果的代码能够并行运行。然而,在允许此代码提交结果之前,有必要验证前述过程确实真返回结果“0”。在另一示例中,如果循环的多次迭代在不同的线程中执行,则可能有必要确保仅仅提交来自编程者规定数目次迭代的结果。因而,错误迭代的影响可能需要被消除或者缓冲。在这些类型的推测并行化中,生成的代码被构造为依赖于与运行时环境11结合描述的运行时支持并与其紧密工作。
可以存在控制推测、数据推测以及存储器定序推测中的任何或全部。在一些实施例中,所述并行化器把所述推测和存储器模型视为是事务性的。
在一些实施例中,推测在系统中实行,所述系统允许实时或者脱机但仍在目标系统上的重新编译。在推测的和/或事务性的系统中,有必要检测冲突并支持数据版本化(data versioning)。各种实施例利用被分类为“热切”或“懒慢”的方法。例如,热切数据版本化方法将采用撤消-日志以把不正确计算的值恢复到它们的先前状态,而懒慢方法将采用把数据的不同版本写入到的写缓冲器。每种方法都有优点和缺点。在静态编译器中,尤其是不具备简档引导的反馈的编译器,该编译器能猜测哪个模式将是最好的并选择那个选项。实际上,最好的技术常常依赖于在编译时间不可获得的运行时信息(诸如实际延迟)。换句话说,最好的选择可能是在运行时做出的选择。此外,由于程序可能经受不同的执行阶段(各阶段之间具有非常不同的特性),所以可能不存在单个的最好选择。动态并行化器可以对要采用的技术的最好组合做出初始猜测,随着时间的推移观察该程序的行为,并随着该程序变化改进其选择以及生成采用产生更好结果的替换技术的新代码。
返回到图8,代码发射器8处理并行化的IR以创建二进制编码的、可运行的指令。通常在此阶段分配寄存器并选择具体指令。在一些实施例中,除了直接对应于原始源程序的指令之外,可以包括用以执行测量的另外指令。所述测量能够标识程序特性,诸如代码被反复调用的热点、诸如分支目标或存储器别名信息之类的运行时信息。在一些实施例中,所述代码发射器操作在来自正运行的所述应用的单独的进程或线程中被实行。在一些实施例中,所述代码发射器操作被包含在并行化器7中或执行管理器9中。
修改的(例如,测量的和/或并行化的)应用可以包括控制/指令的多个线程、静态和/或动态分配的数据、以及用以提供另外的运行时支持的到库的钩子(hook)或者链接。在具有动态反汇编的和动态生成的代码的环境中,存储器中映像(in-memory image)10,其中,每个代码块末尾可以包括返回到控制/管理过程的分支。在诸如此之类的协作的、多线程化的环境中,每个线程都被看作是“轻量”的并希望将计算组织成这样的线程的工作队列。所述工作队列由运行时系统11管理。
在应用被安装并运行的系统上对应用进行并行化的环境中(与在软件开发时间进行并行化相反),为该应用创建修改的操作环境以便维持单个线程的操作的外部特征(appearance)和正确性。例如,经修改的应用可以具有同时在多个CPU上运行且需要共享存储器的多个线程。所述多个线程需要具有对应的资源拷贝,诸如多个“程序计数器”和多个堆栈。这些资源被组织和管理为虚拟机和运行时环境11。运行时资源可以包括线程管理器、存储器管理器、异常处理程序和通用程序库和OS设备的新/替换的拷贝。这些中的所有都被用于便于推测的/事务性的操作。在一些实施例中,运行时功能可以是该经修改的应用的存储器中映像的一部分。
当进行在计算上昂贵的优化和转换并发射代码时,在一些实施例中,此工作的输出被保存以供调用该源程序的未来时机使用。例如,在分析之后,创建添加了用以收集简档信息的测量代码的该程序的新版本。下一次运行该程序,添加的测量代码被用来搜集信息,诸如程序花费了其大量执行时间的“热点”的位置。另一示例是插入运行时存储器别名分析。另一示例是该应用的并行化版本,或者具有另外的、最小运行时检查的多个并行化版本。新的加强的可执行文件被写到一个或多个文件。在一些实施例中,为了限制用来存储这些文件的空间量,任选采用文件高速缓冲存储器管理器4。
在一些实施例中,文件高速缓冲存储器管理器管理保留最频繁使用的文件的高速缓冲存储器。在其它实施例中,可以采用不同的管理策略。例如,可以使用最近使用的策略或最频繁使用的策略的一些组合。保持(一个或多个)源可执行文件和这些文件之间的映射。只要程序被调用且并行化被认为是希望的,就要对此高速缓冲存储器进行检察以确定该应用的并行化的(或测量的版本)是否存在。如果有,则把此信息送给执行管理器9,以使得将对应的文件加载到存储器中并运行以代替原始调用的可执行文件。
在一些实施例中,包括任选的执行管理器9以跨越上述多个模块和多个“静态”和“动态”步骤进行协调。在目标系统上在公共管理器下将这些功能链接在一起允许根据需要混合和调用该动态和静态工作。例如,执行管理器可以注意到由于已经下载并安装了更新所以应用已经改变。因此所述执行管理器会启动静态分析。在一些实施例中,执行管理器操作可以被包含在高速缓冲存储器管理器4中、并行化器7中、或代码发射器8中。
图10是图示程序表示以及它们彼此的关系的若干示例的图。例如,程序可以以源形式(以高级语言或汇编环境编码)、作为二进制可执行文件的目标形式(已编译但仍不可执行)存在。系统模块能够将多个目标文件链接在一起,这创建了更大、更完整的可执行文件。当程序被调用时,其它系统模块能够将该程序加载到存储器中。运行的驻留存储器应用可以直接或在解释器内运行。该程序也可以以其中间表示的形式存在于编译器内,且编译器的代码生成器能够将那个相同的程序转换成可执行形式,该可执行形式可以被写入文件,加载到存储器中,并直接运行或者传递给解释器或运行时以供执行。
尽管为了清楚理解的目的,已经对上述实施例进行了详细描述,但本发明并不限于所提供的细节。存在许多实现本发明的替换方式。这里所公开的实施例是例证性的而并非限制性的。
Claims (19)
1.一种用于从输入代码生成并行化的可执行代码的系统,包括:
一个或多个处理器,其被配置成:
静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;
动态分析所述输入代码以确定所述输入代码的数据流和控制流的另外方面;
至少部分基于通过所述静态分析标识的所述输入代码的数据流和控制流的所述方面以及通过所述动态分析所标识的所述输入代码的数据流和控制流的所述另外方面生成所述输入代码的中间表示;以及
处理所述中间表示以确定所述中间表示的可能合格于并行执行的部分;以及
生成并行化的可执行代码。
耦合到所述一个或多个处理器的一个或多个存储器,其被配置成向所述一个或多个处理器提供指令。
2.如权利要求1所述的系统,其中,所述输入代码是二进制代码。
3.如权利要求1所述的系统,其中,所述静态分析包括对所述输入代码进行反汇编并将所述输入代码转换成静态生成的中间表示。
4.如权利要求1所述的系统,其中,所述静态分析包括标识所述静态中间表示中可能合格于并行执行的部分。
5.如权利要求1所述的系统,其中,所述静态分析包括插入测量代码。
6.如权利要求1所述的系统,其中,所述静态分析包括插入测量代码;以及所述动态分析包括执行所述测量代码。
7.如权利要求1所述的系统,其中,所述动态分析包括确定简档信息。
8.如权利要求1所述的系统,其中,所述动态分析包括确定热点信息。
9.如权利要求1所述的系统,其中,所述动态分析包括确定分支目标信息。
10.如权利要求1所述的系统,其中,所述动态分析包括确定存储器别名信息。
11.如权利要求1所述的系统,其中,所述动态分析包括确定动态循环计数信息。
12.如权利要求1所述的系统,还包括修改所述中间表示以包含并行化的部分;以及基于修改的中间表示生成加速代码。
13.如权利要求1所述的系统,其中,推测地确定所述中间表示的合格于并行执行的部分。
14.如权利要求1所述的系统,其中推测地确定所述中间表示的合格于并行执行的部分,并插入验证代码。
15.一种从输入代码生成并行化的可执行代码的方法,包括:
静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;
动态分析所述输入代码以确定所述输入代码的数据流和控制流的另外方面;
至少部分基于通过所述静态分析标识的所述输入代码的数据流和控制流的所述方面以及通过所述动态分析标识的所述输入代码的数据流和控制流的所述另外方面生成所述输入代码的中间表示;以及
处理所述中间表示以确定所述中间表示的合格于并行执行的部分。
16.一种从输入代码生成并行化的可执行代码的计算机程序产品,所述计算机程序产品被包含在计算机可读存储媒体中,并包括用于下列的计算机指令:
静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;
动态分析所述输入代码以确定所述输入代码的数据流和控制流的另外方面;
至少部分基于通过所述静态分析标识的所述输入代码的数据流和控制流的所述方面以及通过所述动态分析标识的所述输入代码的数据流和控制流的所述另外方面生成所述输入代码的中间表示;
处理所述中间表示以确定所述中间表示的合格于并行执行的部分。
17.一种从输入代码生成并行化的可执行代码的系统,包括:
一个或多个处理器,其被配置成:
静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;
至少部分基于数据流和控制流的所述方面生成所述输入代码的中间表示;
处理所述中间表示以生成并行化的可执行代码;
存储所述并行化的可执行代码;以及
响应于执行所述输入代码的请求,执行所存储的并行化的可执行代码;以及
耦合到所述一个或多个处理器的一个或多个存储器,其被配置成向所述一个或多个处理器提供指令。
18.一种从输入代码生成并行化的可执行代码的方法,包括:
静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;
至少部分基于数据流和控制流的所述方面生成所述输入代码的中间表示;
处理所述中间表示以生成并行化的可执行代码;
存储所述并行化的可执行代码;以及
响应于执行所述输入代码的请求,执行所存储的并行化的可执行代码。
19.一种从输入代码生成并行化的可执行代码的计算机程序产品,所述计算机程序产品被包含在计算机可读存储媒体中,且包括用于下列的计算机指令:
静态分析所述输入代码以确定所述输入代码的数据流和控制流的方面;
至少部分基于数据流和控制流的所述方面生成所述输入代码的中间表示;
处理所述中间表示以生成并行化的可执行代码;
存储所述并行化的可执行代码;以及
响应于执行所述输入代码的请求,执行所存储的并行化的可执行代码。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US18890508P | 2008-08-13 | 2008-08-13 | |
US61/188905 | 2008-08-13 | ||
PCT/US2009/004649 WO2010019254A1 (en) | 2008-08-13 | 2009-08-13 | Software application performance enhancement |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102165428A true CN102165428A (zh) | 2011-08-24 |
CN102165428B CN102165428B (zh) | 2015-05-20 |
Family
ID=41669151
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980131425.3A Expired - Fee Related CN102165428B (zh) | 2008-08-13 | 2009-08-13 | 软件应用性能增强 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8799884B2 (zh) |
EP (1) | EP2329389A4 (zh) |
JP (2) | JP2011530768A (zh) |
CN (1) | CN102165428B (zh) |
WO (1) | WO2010019254A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105242929A (zh) * | 2015-10-13 | 2016-01-13 | 西安交通大学 | 一种针对多核平台的二进制程序自动并行化的设计方法 |
CN106933642A (zh) * | 2015-12-29 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 应用程序的处理方法及处理装置 |
CN112988593A (zh) * | 2021-04-13 | 2021-06-18 | 苏州沁游网络科技有限公司 | 代码分析方法、装置、计算机设备及存储介质 |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10713069B2 (en) * | 2008-09-04 | 2020-07-14 | Synopsys, Inc. | Software and hardware emulation system |
US9189233B2 (en) | 2008-11-24 | 2015-11-17 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US9672019B2 (en) | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US10621092B2 (en) | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
US9081928B2 (en) * | 2009-06-02 | 2015-07-14 | Vector Fabrics, B.V. | Embedded system development |
US8549523B2 (en) | 2009-11-23 | 2013-10-01 | International Business Machines Corporation | Performing runtime analysis and control of folding identified threads by assuming context of another thread and executing in lieu of another thread folding tool |
US8832663B2 (en) * | 2009-11-23 | 2014-09-09 | International Business Machines Corporation | Thread serialization and disablement tool |
US8881106B2 (en) * | 2009-12-26 | 2014-11-04 | Intel Corporation | Debugging parallel software using speculatively executed code sequences in a multiple core environment |
US9141350B2 (en) | 2010-04-23 | 2015-09-22 | Vector Fabrics B.V. | Embedded system performance |
US8645934B2 (en) * | 2010-05-06 | 2014-02-04 | International Business Machines Corporation | Simultaneous compiler binary optimizations |
CN101853183B (zh) * | 2010-05-14 | 2012-11-21 | 中国科学院声学研究所 | 一种用于动态管理片上指令便签存储器的方法 |
US8412744B2 (en) * | 2010-06-23 | 2013-04-02 | Microsoft Corporation | Visualization of runtime analysis across dynamic boundaries |
US8938721B2 (en) * | 2010-07-21 | 2015-01-20 | Microsoft Corporation | Measuring actual end user performance and availability of web applications |
US8661424B2 (en) * | 2010-09-02 | 2014-02-25 | Honeywell International Inc. | Auto-generation of concurrent code for multi-core applications |
US9678747B2 (en) * | 2011-02-08 | 2017-06-13 | Openspan, Inc. | Code injection and code interception in an operating system with multiple subsystem environments |
US9785470B2 (en) * | 2011-06-20 | 2017-10-10 | Microsoft Technology Licensing, Llc | Memory management model and interface for unmodified applications |
US10466989B2 (en) | 2011-09-02 | 2019-11-05 | Microsoft Technology Licensing, Llc. | Fast presentation of markup content having script code |
WO2013048468A1 (en) | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
CN103365668B (zh) * | 2012-03-26 | 2017-12-26 | 联想(北京)有限公司 | 一种动态链接库装载和链接的方法、装置 |
US9038054B1 (en) * | 2012-06-01 | 2015-05-19 | Google Inc. | System and method for automated product version rollback |
US8909990B2 (en) | 2012-08-04 | 2014-12-09 | Microsoft Corporation | Historical software diagnostics using lightweight process snapshots |
US9411715B2 (en) * | 2012-12-12 | 2016-08-09 | Nvidia Corporation | System, method, and computer program product for optimizing the management of thread stack memory |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
US9292898B2 (en) * | 2013-03-15 | 2016-03-22 | Intel Corporation | Conditional end of thread mechanism |
US9891936B2 (en) | 2013-09-27 | 2018-02-13 | Intel Corporation | Method and apparatus for page-level monitoring |
EP3060984A4 (en) * | 2013-10-24 | 2017-05-31 | Intel Corporation | Conjugate code generation for efficient dynamic optimizations |
US10289411B2 (en) | 2013-11-18 | 2019-05-14 | Microsoft Technology Licensing, Llc | Diagnosing production applications |
JP6322968B2 (ja) * | 2013-11-19 | 2018-05-16 | 日本電気株式会社 | 情報処理装置、情報処理方法およびプログラム |
US9448788B1 (en) * | 2014-01-22 | 2016-09-20 | SecondWrite LLC | Binary rewriting system |
US9632915B2 (en) | 2014-10-29 | 2017-04-25 | Microsoft Technology Licensing, Llc. | Historical control flow visualization in production diagnostics |
US9513832B2 (en) | 2015-03-25 | 2016-12-06 | International Business Machines Corporation | Accessing global data from accelerator devices |
KR20170047957A (ko) * | 2015-10-26 | 2017-05-08 | 삼성전자주식회사 | 반도체 장치의 동작 방법 및 반도체 시스템 |
US9823998B2 (en) * | 2015-12-02 | 2017-11-21 | International Business Machines Corporation | Trace recovery via statistical reasoning |
US10509634B2 (en) | 2016-03-30 | 2019-12-17 | International Business Machines Corporation | Data flow analysis for dynamic application, skipping views |
US10078505B2 (en) * | 2016-07-20 | 2018-09-18 | International Business Machines Corporation | Partial connection of iterations during loop unrolling |
US10481876B2 (en) | 2017-01-11 | 2019-11-19 | Microsoft Technology Licensing, Llc | Methods and systems for application rendering |
KR102327913B1 (ko) * | 2017-04-28 | 2021-11-19 | 엔에이치엔 주식회사 | 블록 기반 데이터 분석 방법 및 시스템 |
US10503626B2 (en) | 2018-01-29 | 2019-12-10 | Oracle International Corporation | Hybrid instrumentation framework for multicore low power processors |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030110481A1 (en) * | 2001-12-06 | 2003-06-12 | Kiyomi Wada | Program tuning method |
US20080005547A1 (en) * | 2006-06-20 | 2008-01-03 | Papakipos Matthew N | Systems and methods for generating reference results using a parallel-processing computer system |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9600823D0 (en) * | 1996-01-16 | 1996-03-20 | British Telecomm | Distributed processing |
US5966537A (en) * | 1997-05-28 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for dynamically optimizing an executable computer program using input data |
US8127121B2 (en) * | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US8065504B2 (en) * | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
JP2001075802A (ja) * | 1999-09-08 | 2001-03-23 | Fujitsu Ltd | 投機的実行装置および検証装置 |
US6986128B2 (en) * | 2000-01-07 | 2006-01-10 | Sony Computer Entertainment Inc. | Multiple stage program recompiler and method |
US7516446B2 (en) * | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
US6970985B2 (en) * | 2002-07-09 | 2005-11-29 | Bluerisc Inc. | Statically speculative memory accessing |
US7805710B2 (en) * | 2003-07-15 | 2010-09-28 | International Business Machines Corporation | Shared code caching for program code conversion |
EP1875339A2 (en) * | 2005-04-20 | 2008-01-09 | Transitive Limited | Method and apparatus for precise handling of exceptions during program code conversion |
US8037465B2 (en) * | 2005-09-30 | 2011-10-11 | Intel Corporation | Thread-data affinity optimization using compiler |
US8271943B2 (en) * | 2007-04-24 | 2012-09-18 | National Instruments Corporation | Automatically generating a graphical program with a plurality of models of computation |
-
2009
- 2009-08-13 CN CN200980131425.3A patent/CN102165428B/zh not_active Expired - Fee Related
- 2009-08-13 JP JP2011522999A patent/JP2011530768A/ja active Pending
- 2009-08-13 WO PCT/US2009/004649 patent/WO2010019254A1/en active Application Filing
- 2009-08-13 US US12/583,188 patent/US8799884B2/en not_active Expired - Fee Related
- 2009-08-13 EP EP09806977A patent/EP2329389A4/en not_active Withdrawn
-
2015
- 2015-01-05 JP JP2015000240A patent/JP2015084251A/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030110481A1 (en) * | 2001-12-06 | 2003-06-12 | Kiyomi Wada | Program tuning method |
US20080005547A1 (en) * | 2006-06-20 | 2008-01-03 | Papakipos Matthew N | Systems and methods for generating reference results using a parallel-processing computer system |
Non-Patent Citations (1)
Title |
---|
EFE YARDIMCI,ETC: "Dynamic Parallelization and Vectorization of Binary Executables on Hierarchical Platforms", 《JOURNAL OF INSTRUCTION-LEVEL PARALLELISM》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105242929A (zh) * | 2015-10-13 | 2016-01-13 | 西安交通大学 | 一种针对多核平台的二进制程序自动并行化的设计方法 |
CN105242929B (zh) * | 2015-10-13 | 2018-07-17 | 西安交通大学 | 一种针对多核平台的二进制程序自动并行化的设计方法 |
CN106933642A (zh) * | 2015-12-29 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 应用程序的处理方法及处理装置 |
CN112988593A (zh) * | 2021-04-13 | 2021-06-18 | 苏州沁游网络科技有限公司 | 代码分析方法、装置、计算机设备及存储介质 |
CN112988593B (zh) * | 2021-04-13 | 2024-02-06 | 苏州沁游网络科技有限公司 | 代码分析方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP2329389A4 (en) | 2013-02-27 |
EP2329389A1 (en) | 2011-06-08 |
CN102165428B (zh) | 2015-05-20 |
JP2011530768A (ja) | 2011-12-22 |
JP2015084251A (ja) | 2015-04-30 |
US8799884B2 (en) | 2014-08-05 |
WO2010019254A1 (en) | 2010-02-18 |
US20100042981A1 (en) | 2010-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102165428B (zh) | 软件应用性能增强 | |
US8443349B2 (en) | Systems and methods for determining compute kernels for an application in a parallel-processing computer system | |
US8745603B2 (en) | Application program interface of a parallel-processing computer system that supports multiple programming languages | |
US8458680B2 (en) | Systems and methods for dynamically choosing a processing element for a compute kernel | |
US7814486B2 (en) | Multi-thread runtime system | |
US8146066B2 (en) | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system | |
US8584106B2 (en) | Systems and methods for compiling an application for a parallel-processing computer system | |
US8972943B2 (en) | Systems and methods for generating reference results using parallel-processing computer system | |
US8381202B2 (en) | Runtime system for executing an application in a parallel-processing computer system | |
WO2016135712A1 (en) | Hardware instruction generation unit for specialized processors | |
EP2090983A1 (en) | Determining an architecture for executing code in a multi architecture environment | |
US7065754B1 (en) | Method and apparatus for switching between multiple implementations of a routine | |
US11204767B2 (en) | Context switching locations for compiler-assisted context switching | |
JP2017010077A (ja) | 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法 | |
Guide | Cuda c++ best practices guide | |
Baskaran et al. | Automatic code generation and data management for an asynchronous task-based runtime | |
Wimmer | Linear scan register allocation for the Java HotSpotTM client compiler | |
Guide | Cuda c best practices guide | |
Ivanov | JVM JIT-compiler overview | |
Groß | Attacking client-side jit compilers | |
Hong | Code Optimization on GPUs | |
Gaspar | Automatic Selection of Software Code Regions for Migrating to GPUs | |
Waduge | Taming Irregular Control-Flow with Targeted Compiler Transformations | |
Ansaloni | Rapid Development of Flexible and Efficient Dynamic Program Analysis Tools | |
Sakdhnagool | Improving Productivity of Accelerator Computing Through Programming Models and Compiler Optimizations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: QUALCOMM INC. Free format text: FORMER OWNER: TRANSCELLA INC. Effective date: 20130128 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20130128 Address after: American California Applicant after: Qualcomm Inc. Address before: American California Applicant before: Transcella Inc. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150520 Termination date: 20190813 |