CN100388203C - 优化编码自动生成系统 - Google Patents

优化编码自动生成系统 Download PDF

Info

Publication number
CN100388203C
CN100388203C CNB2005800025169A CN200580002516A CN100388203C CN 100388203 C CN100388203 C CN 100388203C CN B2005800025169 A CNB2005800025169 A CN B2005800025169A CN 200580002516 A CN200580002516 A CN 200580002516A CN 100388203 C CN100388203 C CN 100388203C
Authority
CN
China
Prior art keywords
code
optimization
kernel
consensus sequence
module
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.)
Expired - Fee Related
Application number
CNB2005800025169A
Other languages
English (en)
Other versions
CN1930552A (zh
Inventor
F·博丹
W·雅尔比
X·勒巴斯德
C·勒米埃
E·库尔图瓦
J·帕帕佐普洛
P·勒卡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ASSOCIATION TRANSVERSA
Universite de Versailles Saint Quentin en Yvelines
Commissariat a lEnergie Atomique et aux Energies Alternatives CEA
Original Assignee
ASSOCIATION TRANSVERSA
Commissariat a lEnergie Atomique CEA
Universite de Versailles Saint Quentin en Yvelines
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ASSOCIATION TRANSVERSA, Commissariat a lEnergie Atomique CEA, Universite de Versailles Saint Quentin en Yvelines filed Critical ASSOCIATION TRANSVERSA
Publication of CN1930552A publication Critical patent/CN1930552A/zh
Application granted granted Critical
Publication of CN100388203C publication Critical patent/CN100388203C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

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)
  • General Factory Administration (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Chair Legs, Seat Parts, And Backrests (AREA)
  • Control Of Position, Course, Altitude, Or Attitude Of Moving Bodies (AREA)
  • Pinball Game Machines (AREA)

Abstract

本发明涉及一种基于源码(17)的优化编码(19)自动生成系统,该优化编码在一预定的硬件平台(90)上运行,该硬件平台包括至少一个处理器,该处理器(91)基于用户提供的码源,并且包括接收符号代码序列或者标准序列(1)的装置(51,52),该标准序列代表了所述处理器在预定应用领域的性能表现,用于接收静态参数(2)的装置(53),用于接收动态参数(7)的装置(55),一个根据状态测试和评估确定出优化规则(9)的分析装置(10),该状态测试和评估是基于所述标准序列(1)、静态参数(2)和动态参数(7)参数来确定的,一代码优化和生成装置(80),其接收标准序列(1)和优化规则(9)以检测用户的码源(17),检测可优化循环,将其分解为内核,并且将所述代码进行汇编及将优化编码进行注入,一装置(74)用于再次注入来自编码优化及生成装置(80)的信息,并且并将其返回所述基准序列与内核相联系。

Description

优化编码自动生成系统
技术领域
本发明涉及一种优化编码自动生成系统,该优化编码适用于在包括至少一个处理器的预定硬件平台上运行,并且适用于一预定的应用领域和来自用户提交的源代码(这里,用户应当被理解为一个广义的概念,不仅包括终端用户,也包括应用程序员和系统程序员)。
背景技术
在计算初始,编译器做了大量工作。
编译器的工作是分析用高级语言撰写的源代码,然后生成适用于目标机的相应的二进制代码。总的来说,该过程固定在操作前进行。还有解释程序(interpreter)能够实现动态编译技术,该动态编译技术使得在操作执行时生成代码,从而消除了固有的局限。
编译器是程序准备链中的一个要素。编译的结果可与已经编译并生成的程序(独立编译或者库中调用的程序)相关联,它们在装载时静态连接或者在执行中动态连接。
编译器通常按以下三个步骤工作:
1)生成中间代码:始于源代码,所述编译器匹配模式并生成一抽象形式,其独立于所述源代码的语言,通常称为中间语言。这种语言独立于目标机。
2)高级优化:该步骤将独立于目标结构的不同种类的优化方法加以组合:传送常数,强制简化,通用表达等等。这些优化方法总体上对应于简化机制:减少指令数,简化编码结构。
3)生成编码和低级优化:在本步骤中,将进行所有专用于目标机的操作和优化:生成并选择指令,分配寄存器,指令排序等等。
编译器的质量不仅与所述目标结构有关(生成代码的性能),而且与源语言(是否易于编译)及其作为软件的特性(鲁棒性,选择多样性,执行速度等)有关。
除了所述动态编译的特殊情况之外,在执行操作前必须执行上述三个步骤,而且必须在合适的时机执行,从而相应地限制了可应用于编译器上的最优化算法的复杂性。
因此很大一部分关于编译器的研究都是关于选择及确定高级源代码语言的。
编译器的发展也与处理器结构的发展有关,确切地说是与描述该结构表现的执行模块的发展有关。在所有的最优化问题中,一个主要的困难在于定义一个表示执行时间的成本函数。
最初的指令集操作很简单:一个指令序列的执行时间可以通过将序列中的每个指令的执行时间相加而简单地获得。这样,最优化的过程也很简单,主要的优化策略包括降低生成指令的数量和复杂程度。
第一台复杂指令集计算机(CISCs)的出现使得情况有了一些改变,从而使得处理非常复杂的指令变得可行。这样,最优化的问题实质上就变为了模式匹配。这类计算机还可以包含矢量指令集和矢量分析器,它能够识别循环从而直接生成矢量编码。当需要的时候,源代码也可以被转化为矢量代码结构。
当出现流水线的时候,最优化策略出现了飞跃,该结构的进步性在于将指令的执行分解为若干顺序执行的操作,就像工厂里的流水线一样。这项技术使得在一个给定的瞬间并行执行多个指令成为可能,从而极大地提高了系统的性能,但是这也导致了在出现流水线“中断”的情况下的严重偏差,例如出现了一个分支指令。它也使得预测一给定码段的表现变得不再可能。另一个突破源自于对分级存储结构的应用:这样最优化就需要依赖于对于一个精确计算量的准确评估:局部(在时间和空间上)。然而,由于处理器和存储系统之间的交互很简单,所述最优化过程的一个主要目标就是尽可能地减少错误的数量,因为每个错误都会增加补偿执行时间。
然而,应该明白使得数量最小化是困难的,并且实质上仅能应用于简单的循环型码结构。局部特性的静态评估的困难导致了通过控制曲线来进行最优化的方法的应用:通过第一次执行代码来准确地确定其局部特性曲线(建立曲线)。接下来,所述曲线被应用于第二阶段来执行与对所述局部的应用有关的最优化。在这样的结构复杂程度上,已经很难以一种简单的方式来确定一个有效的最优化策略了。具体的说,要知道如何将不同的最优化方法相结合是很困难的,即便是在很简单的环境下:不再有适合于模块执行的机构或将其以有效的方式加以考虑的机构。在这样的背景下,迭代编译技术得以发展,将执行与最优化相结合从而生成可能的最优化编码。确切的说,迭代编译在于执行一个循环(loop),该循环用于转换代码并且评估其性能(静态或者动态)。那些技术主要用于探究最低成本代码变换空间,用于保持那些提供最佳解决方案的方案。上述迭代方法在计算时间和开发时间的高成本,将它们的应用领域限制为优化程序库。
使用简单且统一指令集(相对于CISC)的精简指令集计算机结构(RISC)出现于80年代中期。第一代RISC处理器的功能很有限,其所生成的代码的质量就成为性能竞争中的关键因素。相似的,超长指令字(VLIW)结构所使用的编译技术与对硬件的最佳利用很相似。RISC和VLIW结构总是有一个简单的执行模式,该执行模式是确定的,因为所有的指令作为生成的程序码时都以同样的顺序执行,这样,极大地简化了上述结构的工作,并且简化了最优化的过程。然而,上述结构很快普及了对流水线和高速缓冲存储系统的应用,以获得更好的性能(更确切的说,促使了可预见性亏损的平均水平的提高)。
超标量体系结构(能够在一个循环内执行若干指令)的出现,及上述所有用于处理指令的无序处理机构使得最优化操作的性能更加困难。不仅如此,存储器分级结构也得到了快速发展:分级的数量增加了,并且各种以更加直接或者不直接的方式管理各个高速缓存(预加载,优先权管理等)的机构也出现了。总之,上述机构使得码段的性能即使在非常简单的情况下(如,能够访问两个或三个数据表的循环),也非常难于预测,这样就使得在简单执行模式的基础上进行最优化无法实现。由于处理器的性能和存储器的性能差距越来越大,这种情况变得更糟了。
总之,在过去的20年中,处理器结构在性能上极大丰富了。这样,寄存器的数量也相应提高了:从标准CISC结构中的八个寄存器,RISC结构增至32个,超标量体系结构进而达到了80个寄存器。一开始,可能会认为寄存器数量的增加会简化最优化过程。而实际上,存储器的发展使得寄存器的使用更加困难,在寄存器分配问题上,有效寄存器分配算法的成本也提高了,因为其复杂程度是现有寄存器数量的指数函数。
响应于最新的发展,编译技术没怎么变化:所执行的最优化操作数量增加了,但是确定整体最优化策略的能力并没有提高,甚至有所下降。
最后,最近的发展趋势是“动态”编译。该原则简单而富有吸引力:动态编译(或者专业化操作)是在最后时刻,即在操作中,优化编码。一代码序列被转化(专业化)为程序的输入数据(执行背景)的函数。在执行中,一个机构按照该指令序列被执行的频率检验程序的性能,并确定是否实施为一特定执行背景而优化的版本。这种实质上的动态机构被限制于最优化技术中,它在执行自身操作时耗时不长,因为他们无需补偿其所优化的代码的操作时间。
需要重申的是,程序库是代表一个领域或者部分该领域的一系列程序的集合:程序库的组成部分需要对应于标准的并且常用的程序。程序库的概念由来已久,比编译器的概念还老,它是软件工程的一个主要支柱(重复使用的部分)。具体的说,例如,Java就是一种非常系统地使用了程序库概念的语言。
程序库可以对应于不同的抽象层(abstraction),从最简单到最复杂:BLAS1(“基础线性代数子程序第一级”)是一组与矢量有关的非常简单的操作集合,但是它能够表达大量的常规线性代数算法。另一个极端的例子,LINPACK和EISPACK是分别用于解决线性系统和特征向量和/或特征值的完整程序集。在下述的特定领域中开发并广泛应用了大量的程序库:
●科学计算:BLAS1,BLAS2,BLAS3,BLAST,SPARSE BLAS,LINPACK,LAPPACK,BLACS,PVM.MPI等等;
●信号处理:FFTPACK,VSIPI,等;和
●图像:Directx,OpenGL。
在某一给定应用领域定义并确定一些程序库也表明了该领域能够被“整合”。
程序库的最大的缺点是,其能力是非常有限的,并且需要人工应用(即,它们需要明确地调用需要插入源程序中的子程序)。
第一代程序库(对应于简单的小程序)总的来说是用汇编语言手动开发的。当性能是一个主要指标(自然的,倘若所述程序保持一个合理的大小)时,其总是保持这种情况。
然而,不象编译操作,其通常是一个“在线”过程(编译次数必须保持适中),优化程序库本质上是一个“脱线”操作,并且可以应用一些耗费计算时间的方法。因此,迭代编译是用于开发程序库的优秀的最优化工具,但是不幸的是,考虑到其应用成本,它只能用于最简单的代码。
自动调整型线性代数软件技术使得某些最优化操作得以实现(选择好的参数,如块大小)。不幸的是,这项技术在应用中非常受限,因为它很大程度上取决于所要应用的类型(稠密矩阵的计算,对时间有着高度需求的计算)。
现有的性能分析工具种类很多(特别是作为所追求目标的函数):
●性能测试(标准检测程序):它们是一些代码段,其或多或少的代表了一个应用领域,并且可以将不同机器的性能加以比较。
●仿真器:它们能够在最终的层次了解一个结构的性能。但是不幸的是,仿真器价格昂贵,难以开发,很慢,并且不一定能够精确的表现目标处理器的性能。
●数学模型:该方法是将目标机的性能转换为方程的形式。总体来说,其应用是非常局限的,仅在研究一段非常简单的代码的不同简单变量时有效。
●检测和/或管理曲线的工具:这些工具用于回收与程序执行相关的信息(通过使用有特定硬件的计算机),其中所述信息与循环数,错误数等有关。
下面的评述可以简单的阐述为:
●性能测试:几乎没有进步,并且总体上说它已经成为了相当巨大的商业支柱的一个主题。通常,供应商最优化编码在基准测试中表现良好,这就导致了所获得误导结果的指示性和有效性。
●仿真器:由于目标机结构变得很复杂,因此要应用仿真器提供结果(以最优化编码)就变得越来越困难。
●数学模型:它们没有什么进展,并且除了上述提到的局部应用,它们几乎没有应用场合。其中的一个原因是良好的数学模型依赖于操作的“平均一致”,这与实践相去甚远。
●检测和/或管理曲线的工具:它们主要受三个缺点的影响:它们所提供的信息是整体的,而与一个操作在时域上的分布无关;
它们不能使编码和性能在最终阶段相关联;最后,由于目标结构的复杂性,有效应用非常困难(如同仿真器)。
发明内容
本发明致力于克服上述缺陷,从而实现在一个特定应用领域,在包括至少一个处理器的一预定硬件平台上,自动将用户提供的源代码生成运行于其上的最优化编码。
更具体的说,本发明致力于提高计算机系统的性能,使其独立于所选择的源语言,该系统所使用的处理器可以使用简单或者复杂的指令,可以有数量多或者少的寄存器、功能单元和高速缓存级别。
本发明的另一个目的是避免局限特定程序库的功能范围,并致力于开发一个自动生成代码的系统,所述系统是针对大量的类似码结构进行优化的,它可能呈现出不同的复杂程度。
根据本发明,上述目标通过下述系统得以实现,所述系统根据用户提供的源代码自动生成适合运行于预定硬件平台的优化编码,该硬件平台包括至少一个处理器,并且适用于一预定的应用领域,该系统的特征在于它包括接收符号代码序列的装置,该符号代码序列也记为基准序列,代表了所述处理器在预定应用领域的性能表现;还包括接收第一静态参数的装置,该第一静态参数是基于预定的硬件平台、其处理器及基准序列定义的;还包括接收动态参数的装置,该动态参数也是基于预定的硬件平台、其处理器及基准序列定义的;包括一个分析装置,其通过使用基准序列,所述静态参数和动态参数而展开的性能测试和评估来设定优化规则;包括一个代码生成及优化装置,它首先接收基准序列,然后接收检测用户源代码的优化规则,检测可优化循环,将其分解为内核(kernel),组装并生成代码以传输最优化编码;再次生成来自于代码生成和优化装置的信息,并使之与基准序列中的内核相联系的装置。
更具体的,所述分析装置包括一个测试发生器,其首先与接收基准序列的装置相连,而后与接收静态参数的装置相连,从而自动生成大量的测试变量,这些变量由传输装置传输以存储于变量数据库中;一个执行器,它首先与传输装置相连,以接收存储于变量数据库中的测试变量,然后连接于接收动态变量的装置以在所述动态参数的变化范围内操作所述测试变量,并通过传输装置将结果传输至存储结果的数据库;一分析器,连接于所述传输装置以获得存储于结果数据库中的结果,加以分析,从而推导出优化规则,该规则通过传输装置传输到优化规则数据库。
有利地,所述分析器包括滤波装置,其有一个随机门限值来优化性能,从而如果一个结果数据库中的变量符合滤波原则,就可以将其视为参数空间中的最佳。
在优选实施例中,所述分析器进一步包括修正静态参数的装置和修改动态参数的装置。
所述代码生成及优化装置包括一个生成最优化编码的装置和一个优化器,所述优化器包括一个策略选择模块,其首先与在接收初始源代码中识别出内核的装置相连,而后与接收基准序列的装置相连,再与接收最优化规则的装置相连,这样根据每一个对应于被测试的基准序列的内核生成一些版本,每一个版本在特定的参数组合下都是最优的,一个组合与汇编模块连接于所述接收最优化规则的装置,还连接于接收来自于策略选择模块的信息的装置,还连接于接收所述若干版本的装置,从而通过传输装置发送信息,该信息包含相应的优化版本,其使用区域,及在何处执行适当的检测,从而动态地确定哪个版本是最合适的。
在另一个优选实施例中,所述系统包括一个优化内核数据库,所述组合及汇编(assemble)模块通过传输装置连接于所述优化内核数据库,从而将信息存储到所述优选内核数据库,所述信息包括优选版本及应用区域,为了动态地确定哪个版本是最合适的而执行适当的测试。
所述代码生成及优化装置包括一个优化器和一个优化编码生成装置,该装置包括一个检测可优化循环模块,该模块连接于用户源代码接收装置,连接于一个将其分解为内核的模块,及一个情况分析、汇编、代码注入(inject)模块,该模块通过传输装置连接于优化器以传输检测到的内核的识别信息,所述传输装置用以接收描述相应优化内核的信息,同时情况分析、汇编、代码注入模块与优化编码提供装置相连。
情况分析、汇编、代码注入模块也与所述优化内核数据库相连,如果查找的内核已经存贮于其中,则无需调用所述优化器即可获得描述优化内核的信息。
根据本发明的一个优选实施例,所述用于情况分析、汇编及代码注入模块进一步包括一基准序列增加装置,以向基准序列中增加在该模块中发现的内核,该内核在所述优化内核数据库或所述基准序列中没有相应的识别信息。
在一个具体实施例中,所述系统包括一个编译器和一个连接编辑器,用于接收来自于代码生成及优化装置的重新组织的源代码,及用于产生适用于所述硬件平台的优化二进制码。
所述系统可以包括一个源代码传输装置,用于将所述优化内核的源代码从所述优化内核数据库传输至所述编译器。
根据本发明的另一个实施例,所述系统可以包括一个编译器和一个安装模块,用于在硬件平台上设置一个动态库,该库包含所述优化内核的所有性能。
本发明可以应用于不同的领域,特别是科学计算、信号处理及图像处理。
根据本发明的一个实施例,所述基准序列包括一组简单通用循环型码段,它用一种源语言撰写,按照循环体代码的复杂性渐增的顺序组织于一分级层次结构中。
其中,所述基准序列包括0级基准序列,其中仅测试一个单独的操作,并且对应于一个循环体,该循环体由单个用0高度树所表示的算术表达式组成。
此外,所述基准序列可以包含1级基准序列,这里需要考量并测试:两个0级操作的组合;1级基准序列操作对应于一个循环体,该循环体或者由单个用1高度树所表示的算术表达式组成;或者由两个用0高度树所表示的算术表达式构成。
在一个可能的实施例中,所述基准序列包括2级基准序列,这里需要考量和测试两个1级操作或者三个0级操作的组合。
所述静态参数具体包括每个基准序列的循环迭代数、数据表访问步长、操作数类型、所使用指令的类型、所述预加载策略,和指令及迭代的排序策略。
所述动态参数包括位于分级存储结构的不同级的数据表操作数的位置、所述数据表起始地址的相对位置,及分支历史。
有益地,所述优化内核数据库包括循环型源代码序列,其对应于真实而有用的码段,并且以复杂性渐增的顺序组织排列。
所述预定的硬件平台可以包括,例如,至少一个处理器,该处理器可以使用Intel提供的Itanium型处理器,或者至少一个由IBM提供的Power或Power PC型处理器。
在一个可能的实施例中,该系统更适用于一个包含一Itanium型处理器的系统,所述优化规则至少包括下述规则中的一部分:
a)在写操作的性能不如读操作的情况下,尽量减少写操作的数量;
b)在浮点操作中,使用成对装载很重要;
c)将循环的展开度调整为循环体的复杂程度的函数;
d)利用运算操作的操作等待时间;
e)对短向量应用屏蔽技术;
f)对存储器的操作使用区域后缀(读,写,预加载);
g)确定预加载间隔;
h)执行第4级向量化,从而避免某些L2存储冲突;
i)考虑多个变量以避免在读/写序列中的其他L2存储冲突及读写序列中的冲突;
j)考虑与不同的优化法相关的性能改善;
k)使用能够尽量减少错误预测(短向量)的分支链;
l)合并存储器入口(将象素集合起来);和
m)将象素的处理向量化。
另一个可能的实施例特别适合于一包含有一个Power或Power PC型的处理器的系统,所述优化规则至少包括下述规则的一部分:
a)重新排序读操作从而将高速缓冲存储器的错误集合起来;
b)只对写操作进行预加载;
c)将循环的展开度调整为循环体的复杂程度的函数;
d)在运算操作中使用可操作的等待时间;
e)对存储器的操作使用区域后缀(读,写,预加载);
f)确定预加载间隔;
g)考虑多个变量以避免在读/写序列中的冲突;
h)考虑与不同的优化法相关的性能的改善;
附图说明
本发明的其他特性和优势在下述结合附图的具体实施例的描述中加以展现,其中:
图1是构成本发明所述优化编码自动生成系统的模块的方块图;
图2是可应用于图1所示的系统的性能分析模块的详细结构方块图;
图3是可应用于图1所示的系统的代码优化与生成模块的详细结构方块图;
图4是本发明第一实施例的重组源代码生成模块,及与之相关的为相应的目标平台生成优化二进制代码;
图5是本发明第二实施例的重组源代码生成模块,及与之相关的为相应的目标平台生成优化二进制代码。
具体实施方式
首先参照显示了整个系统的附图1,该系统自动生成优化编码,通过代码生成及优化模块80的输出73提供优化编码,该优化编码适用于运行在一预定的包括至少一个处理器91的硬件平台90上。
所述优化编码生成系统开发用于特定的应用领域,它通过模块80的输入71接收用户发送的源代码17,其中用户应当广义地加以理解,它不仅包括终端用户,还包括应用程序员和系统程序员。
符号码序列,被称为基准序列1,其通过处理器在应用领域来显示处理器91的性能,其连接至模块80的输入52以优化和生成代码,并传输至分析模块10的输入51。
通过分析不同环境参数的影响和基准序列之间的相互作用,就可能确定出性能优劣的区域,并且能够清楚其优劣的原因。所述基准序列无需表示由常规编程语言生成的实际代码序列。仅有一部分被测试的基准序列对应于优化用户代码的内核。
可优化循环是一个程序结构,其将代表复杂程度较深或较浅的可变向量的操作的算术表达式进行编码。
一个内核或者基本循环就构成了一个简单的可优化循环。本发明的模块80能够自动生成可优化内核,其数量比专用算术程序库中函数的数量大得多。总的来说,可以生成一给定内核的若干版本,每个版本基于某些环境参数的组合进行优化。
这样,如图3,由优化器12完成的所述优化步骤包括自动生成一组内核或一个内核库,它们按照所述目标平台90加以优化,表现出所代表的应用领域的性能。
所述优化步骤与在代码生成器18(图3)中进行的代码生成步骤相关联,该代码生成器检测来自于用户的源代码,以检测其中可进行优化的循环,从而强制使用优化内核而非标准编译器生成的代码。
装置74用于将来自模块80的信息再次注入到基准序列1中。
所述代码优化和生成步骤之前执行一在分析模块10中进行的分析步骤,其中考虑了硬件平台90和应用领域,用于确定优化规则以获得优化性能。所述分析模块10的输出57用于将优化规则传输到优化规则数据库9中,其自身通过传输装置59连接至所述模块80的优化器12。
所述分析模块10将结合附图2加以详细描述。
所述分析模块10通过装置53和54接收静态参数2和动态参数7,该动态参数7是所述处理器91的结构的函数,更广义的说是所述系统的函数,所述需要优化的目标平台90基于该系统,同时也是所述基准序列的函数。
具体地,所述静态参数2可以包括每个基准序列的循环迭代数,所述数据表访问步长和操作数类型,使用的指令类型,所述预加载策略,及指令及迭代的排序策略。
具体地,所述动态参数7可以包括数据表操作数在各级分层存储机构中的位置,所述数据表起始地址的相对位置和分支历史。
在性能分析模块10中,一测试生成器利用通过输入53和55传输的静态参数2和动态参数7相关的数据,生成大量的变量,并通过传输装置61输送至变量数据库4。
另一个自动工具5是执行器,它通过传输装置62接收变量数据和变量数据库4,并进行如下的测试,使由传输装置55提供的动态参数在整个变化范围内变化,并将有关的测量值通过传输装置63输送至结果数据库。
存贮于所述结果数据库6中的所述测量值通过传输装置64自动传输至分析器8,分析器8通过识别所述参数的函数的优劣性能区域来形成优化规则9,所述优化规则通过传输装置57输送至优化规则数据库9。
所述分析器8还包括用以调整静态参数2的装置54,及用以调整动态参数的装置56,如,当发现对于某个给定参数的变化灵敏度很低时。
所述分析器8可以包括一个产生优化性能随机门限值的滤波装置。这样,一个在结果数据库中的变量,该变量并不对应于优化性能,如果满足所述滤波原则,就可以因为在参数空间为最优而得以保留。
下面结合附图3详细描述所述代码生成及优化模块80。
所述优化装置12包括一个策略选择模块13,其通过装置92连接于代码生成装置18,用以接收识别出的初始源代码中的内核。所述策略选择模块13还连接于装置52以获取基准序列1,以及连接于装置58以获取优化规则9。所述策略选择模块13在其输出口67,为每个对应于一测试基准序列的内核生成n个版本,每个版本对于某一特定参数组合的为最优。
用于组合及汇编版本的模块14,连接于所述装置59以接收优化规则9,连接于装置66以获取来自模块13的策略选择信息,连接于装置68以获取从1到n的若干个版本15。所述模块14通过传输装置93发出信息,所述信息包括相应的优化版本,其在应用区域进行合适的测试,从而动态地确定哪个版本最合适。
所述优化编码生成模块18包括一可优化循环检测模块20,其连接于装置71以获取用户源代码17。所述模块20的输出口75连接至一模块22,该模块用于分解为内核,它包含一输出口77连接于一模块23,模块23用于情况分析、汇编及代码注入,该模块通过传输装置92连接至优化器12来传输识别出的内核。所述模块23通过所述传输装置93还接收相应优化内核的描述信息。模块23还连接于装置73以提供优化编码19。
在一个优选实施例中,代码生成及优化模块80包括一优化内核数据库16。所述组合与汇编模块14通过传输装置79连接于所述优化内核数据库16,从而向所述数据库存储:优化内核,优化版本信息,它们的应用区域,及在何处进行适当的测试以动态确定哪个版本是最合适的。在本实施例中,用于情况分析、汇编及代码注入的所述模块23通过传输装置72还连接于所述优化内核数据库16,从而在不调用优化器12的情况下就可以获取优化内核表述信息,如果所查询的内核已经存储到所述数据库16。
如图3所示,用于情况分析、汇编及代码注入的模块23进一步包括装置74,用于向基准序列1添加内核,所添加的内核在所述模块23中被发现,并且在所述优化内核数据库16或者所述基准序列中没有对应项。
在图4所示的实施例中,所述优化器12没有示出,因为其与图3中所示优化器结构相同,其中有一个优化内核数据库16。
在本实施例中,代码生成模块18在用于情况分析、汇编及代码注入的所述模块23的输出口73生成一个重组源代码19,其随后由常规工具81和82加以处理进行程序准备,从而获得对应于所述目标平台90的二进制编码83。
图4所示的实施例非常易于实施。所述初始用户源代码17在上述代码生成及优化模块80中进行重组,于是其可优化的循环被替换为子程序的调用,对应于所述子程序的代码从所述优化内核数据库中添加入所述重组源代码19。通过这种方式加以重组的所述源代码19在经过一个包含编译器81和连接编辑器82的常规链后,就包含了生成适用于所述硬件平台90的优化二进制码83所需的一切。
在另一个可能的实施例中,所述优化内核数据库16中的优化内核的源代码能够在编译步骤中,作为附加源程序库直接使用。这在图4中由连接所述优化内核数据库16和所述编译器81的点划线箭头85表示。该改动能够避免将优化内核的源代码直接加入所述重组源代码,也使得在模块18中的代码生成步骤的执行变得更简单。
图5所示的实施例包含了图4所示实施例的改动。
图5所示的变型中利用了某些操作系统的功能,其中程序库能够以可执行二进制代码的形式加以安装,这样程序可以在执行时通过动态连接编译对所述二进制代码库进行操作。
在图5所示的变型中,无需将代码从所述优化内核数据库16注入至所述重组源代码19。然而,必须通过一编译器181和一安装模块182将一个包含所有优化内核功能的动态程序库安装于所述的目标平台90。也可以使用一个编译器来替代图5中的编译器81和181。在图5所示的变体中,对于每个目标平台仅需要进行一次安装操作,这样该变体在处理整个最优化操作上就更加经济。
本发明的优化编码生成系统特别适合于以下三个领域的应用:科学计算,信号处理,和图像处理。
在上述三个领域中的代码有着CHAR1至CHAR4所示的不同的特性,这些特性在目标实现中有着重要的作用。
●CHAR1:循环体型结构(或者嵌套循环)所包含的那些所需的执行时间最长代码部分。
●CHAR2:所使用的数据结构通常是多维的数据表,并且以很常规的方式加以访问(行,列,块等)
●CHAR3:所述循环体(或循环嵌套)通常由相互独立的迭代组成,所述迭代可以并行运行。
●CHAR4:所述循环体通常由一算术表达式序列组成,其对应于基于大量数据的通用(或者准通用)计算。
自然的,虽然科学计算、信号处理和图像处理这三个领域有相似之处,但是他们也表现出了某些主要区别。在信号处理领域,复数数据是一种非常重要的数据,然而该数据在另外两个领域就不那么重要了。在图像处理领域,非常有代表性的是使用一种名为象素的数据以及特定的算法。此外,在图像中,与二维数据流相关的数据结构和算法是至关重要的。
上述的四个特性(CHAR1至CHAR4)对于最优化编码非常重要,并且它们促进了完整专用技术的开发。
●CHAR1=>最优化操作致力于循环体结构,其带来两个重要的优势:周期性(和可预测性)及代码的简洁。
●CHAR2=>对数据表的访问因其常规性地能够简单得以分析和优化,上述访问操作占用了执行时间的一大部分(考虑到对高速缓冲存储器的应用,甚至占据了执行时间的主要部分)。
●CHAR3=>在循环体及嵌套循环体中迭代的相互独立性使得使用(优化)通过迭代空间的路径作为数据表访问的函数成为可能,这要根据目标结构的特性。可以说访问数据表中的N个元素可以以n的阶乘种不同的方式(顺序)实现。
●CHAR4=>根据数学表达式的循环体的简单结构使得,基于一代表数学表达式的树使用一系统化及层次化的方法成为可能。
所述的分析阶段其本质上仍然是实验性的,在其尾声需要:
●已经确定了所述结构的优势和劣势;
●知道如何将代码结构和其性能相联系;
●已经找到了好的优化策略,该策略可能是与所述代码相关的各不同参数的函数。
如前所述,所述起点是一组源型代码段,它们简单而通用,并被称为“基准序列”。这些代码段为循环体结构,所述“源型”用于表示所述操作是由高级语言呈现而不是汇编语言。
这些代码段以分级层次按照如下所述的循环体代码复杂性渐增的顺序加以组织:
●0级基准序列:在本级,测试一单个独立操作,即,所述循环体包含一单个操作:从一数据表中读取数据,向数据表中写数据,进行浮点数加法,等。这些操作所对应的循环体由一单个数学表达式构成,由0高度树表示。
●1级基准序列:在本级,所考虑并测试的是两个0级操作的组合:一数据表的读、写操作,两个不同数据表的读操作,数据表中的读取和添加操作,等。这些操做所对应的循环体或由一个1高度树所表示的数学表达式,或由两个0高度树所表示的数学表达式构成。
●2级基准序列:在本级,所考虑并测试的是两个1级操作的组合或者是三个0级操作的组合:从三个不同的数据表中读取数据,一个元素一个元素地读取并添加入两个不同的数据表,并将结果写入第三个表,等。
●K级基准序列:K级可以通过从前面各级进行简单推论而加以定义。
所有的0级基准序列所对应的码段都是“人为”的,即,它们并不代表“真实”的循环。
这种按照复杂程度递增的方式加以组织同样应用于优化阶段。
按上述方式定义的基准序列可以是无限的。
这些基准序列使用两种不同的类别参数:
●静态参数:这些参数是静止定义的(即,在执行之前,并且独立于执行)。这些静态参数本身可以分为两个主要的子类:高级静态参数(循环迭代数,数据表访问步长,操作数类型,等),和低级静态参数(使用特定指令,指令顺序,等)。
●动态参数:这些参数在执行所述循环时加以定义。例如,它们包括:在分级存储器中数据表操作数的位置,数据表起始地址的相对位置,等。
这两类不同的参数的使用方式也完全不同:静态参数结合下面将要描述的变量和/或优化法用于生成不同的测试码段,而动态参数仅仅在试验台操作中使用。
高级静态参数相对有限,并且主要对应于用高级语言(例如,Fortran或C)表达的循环和数据表的环境参数,而没有与所述目标处理器相关的特性。
低级静态参数考虑了与处理器(结构)及指令顺序(目标代码生成器)有关的所有特性。所述基准序列是高度的抽象(以一种源语言定义,并且与所述目标处理器的结构无关)的源语言,并且特别的,它们不包含任何优化。为了在一给定处理器上对其进行测试,必须生成并优化所述对应的汇编代码段。在生成过程中,会自动生成若干变量(汇编指令序列)。所有与同样的基准序列相关的变量都是与初始基准序列语意相同的码段。所有这些变量进行执行并评估。这些变量对应于不同的代码最优化技术(即,低级静态参数)。这些优化法能够以一种抽象的方式加以定义,无需参照具体的基准序列结构,并且它们组成了所述低级静态参数的主要部分。
所述低级静态参数包括:
●使用汇编指令:一源级的操作可通过不同的指令序列加以实现,特别的,这里必须处理不同的策略,用于使用预加载数据及指令;
●所述循环体的结构:展开(对于不同的级)循环体;
●所述循环体的排序:对循环体中的指令进行排序(预加载间隔,向量化,汇总高速缓存错误,处理序列间的冲突);并且
●迭代排序:软件流水线(不同深度)。
在很多编译器中,上述低级静态参数对应于编译时的选项,该选项用于以明确的方式实现所需的优化。
所述测试生成器3的作用是生成上述不同的变量,其首先对应于高级静态参数(例如,数据表访问步长),同时也对应于低级静态参数。
值得注意的是,对于1级基准序列,所要生成及分析的变量的总数是非常巨大的,可能数以百万计。尽管如此,所述生成与分析过程却是简单自动操作。
在执行器5和分析器8中,希望的目标是测试不同变量的特性并且选择可能的最佳变量和/或优化法。
该步骤意味着生成大量的结果,其被存储于结果数据库6中。所述试验以分级的方式与所述分析步骤交叉展开:这样,最初的实验基于0级基准序列的变量展开。在该初始试验的尾声,可以对不同变量进行第一次分类,所述变量为所得试验结果的函数。这样就可以立刻将一些变量排除,并且在后续的各级中不再考虑。这样就可以限制需要进行的试验的组合数量。
最初会认为,所述结果分析步骤执行起来很简单,因为仅需要使用一个衡量标准(性能)。实际上,该过程的复杂度很大程度上源于下面的事实:通常选择最佳变量很大程度上取决于所述参数。
第一次分类可以通过基于所述结构的特性计算每个基准序列的优化性能而简单的加以实施。不幸的是,当涉及结构和代码(包括0级和1级基准序列这样简单的码段)之间的复杂相互影响时,困难就产生了:这就产生了作为参数的函数来描述变量性能的复杂的图形。这种复杂的性能能够通过使用图像处理算法得以初始分析,然后通过将一给定变量限定为一特定参数范围而加以综合。这样,所述分析步骤并不仅仅生成一为每个基准序列提供一个最佳(唯一)变量和优化技术的列表:还确定出每个基准序列的参数范围列表,而且对于所述的每个范围,给定最佳的变量和最优化技术:上述这种信息就是所谓的“优化规则”。
进行测试的基准序列组仅仅是基准序列整体的一个很小的部分。后面用于优化目的的所述组被称为“参考基准序列组”。
在实践中,设定一个“合理”的优化目标是非常重要的:不计代价的进行优化会导致非常多的变量,然而放松优化需求并且满足于5%-10%的优化性能,就可以在一个非常宽泛的参数范围内使用一个变量。为此,就要实施滤波,例如,以优化性能的90%为门限值。
在实践中,如果仅仅为获取并确认主要优化技术,则测试并分析0,1,2级基准序列就足够了。所述参考基准序列组将逐渐的不包含3级以上的基准序列。
要进行的试验数量很快增加,特别是在2级以上。
所述试验作为一个整体在理想状况下可以并行操作:所述测试可以在100或1000台机器上并行操作。该并行化特性非常的有用,并且使得在可接受的时间长度内承担系统研究成为可能。
该过程能够被完全的自动化,并且验证结果的质量和连续性也可以自动化。只有在识别来自于分析质量和连续性验证过程中自动产生的结果的错误和/或异常时,才需要人为介入。
在分析阶段的尾声,希望获得的目标是有大量的简单代码段,称为“内核”,其特别针对目标结构进行优化,所述优化过程主要依赖于在分析阶段尾声获得的优化技术。
严格的说,所述“内核”是循环体源代码序列,其构成了通常称为基准序列的一部分。与基准序列的不同之处在于,所述内核对应的代码段是真实而有用的。与基准序列的相似之处在于,其以复杂度渐增的顺序加以组织。
上述内核的生成和/或优化在下述四个阶段执行:
●与一个或者多个参考基准序列相关联:对于最简单的内核,所述内核和基准序列之间存在直接对应,而对于更复杂的内核,所述内核需要被分解为多个参考基准序列。这种相关和/或分解在源级作为所述内核循环体特性的函数得以实施:数据表数量,数据表访问步长,等。
●代码生成和/或指令排序和/或指令优化:在所述分析阶段获得的优化技术(作为相应基准序列的函数)现在得到了利用,其直接用于生成和/或优化所述内核的代码。对于任意给定内核,可以生成若干个可能的版本,这些版本是所述参数的函数。
●寄存器分配:大量优化技术的使用极大地增加了现有寄存器的压力。在这种情况下,适合的组织方式是将所有现有的寄存器加以分配。
●试验和/或验证:所述生成并优化了的内核在分析阶段用试验台加以测试。在该阶段的尾声,建立一个所述内核性能的简单模型。
与传统的应用于编译器中的优化法相比,这里使用的优化法非常的不同:首先,它们是从一个具体的性能评估(在分析阶段实施)过程中直接获得的,其次,由于是脱线操作,即没有时间的限制,它们更为复杂并且性能(特别是在寄存器分配中)更好。
对于参考基准序列及生成规则的应用,就有可能首先考虑所述结构的全部优点(测试得到的操作特性而不是理论特性),其次可以选择作为所述参数的函数的不同版本。
在该阶段的尾声,就建立了一个优化内核数据库16,其不仅包括所生成的内核,还包括所述内核作为不同参数的函数的性能信息。每个内核使用和所述基准序列同样的步骤进行测试。
在实践中,所述优化内核数据库16以系统的,详尽的方式包括所有1,2,3,4,5级内核。建立该数据库的计算量是巨大的,然而就像所述性能分析阶段那样,可以通过并行操作非常有效的执行。
用户码优化操作发生在以下三个步骤:
●检测可优化循环(模块20):包括识别源代码中可以分解为内核的循环。该步骤所使用的技术与在自动并行化和/或矢量化中所使用的技术相似。当需要的时候,所述源代码被重构,使得循环以最便于优化的形式呈现。
●分析可优化循环并将其分解为内核(模块22):这需要使用结构匹配和分解技术,其与优化所述内核所使用的技术类似,将循环分解为一系列的内核。
●汇编及发射代码(模块23):用于分解目的的各个内核被汇编并加入源代码。
所述分解过程通常确定为初始源循环的特性函数的参数。
上述提出的最优化可以被综合为:
●不论是现有编译链中的处理器,其中上述执行方式是显然的,即无须操作编译器中的代码;或者
●直接在编译器中,很自然的就需要对于编译器中的代码进行修改。
参照图3如上所述,在所述分析阶段的尾声,可以得到一定数量的优化规则:这些规则是所述基准序列和所述参数范围的函数。一个可能的变量不是通过中间内核步骤,而是将可优化循环与所述基准序列直接相联系,并且将所述优化规则直接应用于可优化循环而不使用存贮于所述优化内核数据库16中的内核。
这个变量比使用内核简单并且使得可以使用的优化规则更灵活。然而,因为它是完全的在线操作,因此所产生的变量数必然大为减少,这样所获得的性能将会先验(a priori)欠佳。
在优化阶段的最后,所述系统为一定数量的可优化循环生成了优化编码,由于需要一分解操作,因此先验并不直接存在于所述的内核数据库。这些优化了的代码自身能够存储于所述的可优化内核数据库16中,以后可以再利用。这样,所述内核数据库16通过这种训练就可以自动地丰富。

Claims (26)

1.一种基于用户源代码(17)自动生成适合运行于一预定硬件平台(90)的优化编码(19)的系统:该硬件平台至少包含一个处理器(91),并用于一预定的应用领域,其特征在于:
包括接收被称为基准序列(1)的符号码的装置(51,52),该基准序列表示了所述处理器(91)在预定应用领域的性能表现;接收基于所述预定硬件平台(90),其处理器(91),及所述基准序列(1)定义的第一静态参数(2)的装置(53);接收同样基于所述预定硬件平台(90),其处理器(91),及所述基准序列(1)定义的动态参数(2)的装置(55);一通过使用所述基准序列(1),静态参数(2)及动态参数(7)所进行的性能测试及评估来设定优化规则的分析装置(10);一代码优化及生成装置(80),其首先接收所述基准序列,然后接收所述优化规则,用于检查用户源代码(17),检测可优化循环,将其分解为内核,并对代码进行汇编及注入以发送优化编码(19);和一装置(74),用于再注入来自于所述装置(80)的信息,并将其返回所述基准序列与内核相联系。
2.根据权利要求1所述的系统,其特征在于所述分析装置(10)包括一测试生成器(3),其首先与所述用于接收基准序列的装置(51)相连,然后与所述用于接收静态参数的装置(53)相连,从而自动生成大量的测试变量,这些变量通过传输装置(61)存贮于一变量数据库(4)中;一个执行器(5)首先与传输装置(62)相连以接收存储于所述变量数据库(4)中的测试变量,然后与装置(55)相连以接收动态变量,从而在所述动态变量的一宽泛的变化范围内对测试变量进行操作,将所产生的结果通过传输装置(63)传送至一结果数据库(6)加以储存;及一个分析器(8)连接于所述传输装置(64)以接收存贮在结果数据库(6)中的结果,并进行分析,从而推导出优化规则,通过传输装置(57)将其送入一优化规则数据库(9)。
3.根据权利要求2所述的系统,其特征在于所述分析器(8)包括滤波装置,该装置有一随机门限值用于优化性能,从而如果一个结果数据库中的变量符合滤波原则,则认为其在所述参数空间是最优的。
4.根据权利要求2或3所述的系统,其特征在于:所述分析器(8)进一步包括静态参数(2)调整装置(54)和动态参数(7)调整装置(56)。
5.根据权利要求1所述的系统,其特征在于所述代码优化及生成装置(80)包括一优化编码生成装置(18)和一个优化器(12),所述优化器包括一策略选择模块(13),其首先与所述装置(92)相连,以获取从所述源代码中识别的内核,然后与装置(52)相连,以接收基准序列(1),第三与装置(58)相连以接收优化规则(9),从而为每个与一被测试基准序列相应的内核生成若干版本(15),每个版本在一特定的参数组合下为最佳,一个组合及汇编模块(14),其连接于装置(59)以接收优化规则(9),连接于装置(66)以接收来自于策略选择模块(13)的信息,连接于装置(68)以接收所述若干版本(15),从而通过传输装置(93)发送包含有相应优化版本,其使用区域,及在何处执行适当的测试的信息,从而能够动态的确定哪个版本是最合适的。
6.根据权利要求5所述的系统,其特征在于:包括一优化内核数据库(16),由于所述组合及汇编模块(14)与所述优化内核数据库(16)通过传输装置(79)相连以向所述优化内核数据库存储数据,所述信息包括所述优化版本,其使用区域,及在何处执行适当的测试,从而能够动态的确定哪个版本是最合适的。
7.根据权利要求1所述的系统,其特征在于所述代码优化及生成装置(80)包括一个优化器(12)和一个优化编码生成装置(18),该装置包括一装置(20)用于检测可优化循环,其连接于装置(71)以接收用户源代码(17),一模块(22)用于将其分解为内核,一模块(23)用于情况分析,汇编及代码注入,其通过传输装置(92)与所述优化器(12)相连以传输对所检测内核的识别信息,及传输装置(93)用于接收相应优化内核的描述信息,而模块(23)用于情况分析,汇编及代码注入同样连接于装置(73)以提供优化编码。
8.根据权利要求6和7中任一项权利要求所述的系统,其特征在于所述用于情况分析,汇编及代码注入的模块(23)还连接于所述优化内核数据库(16)从而如果所查询的内核已经存储于其中,则无须调用所述优化器(12)即可接收该内核的描述信息。
9.根据权利要求8所述的系统,其特征在于:所述用于情况分析,汇编及代码注入的模块(23)进一步包括装置(74)用于向所述基准序列(1)中添加内核,所添加的内核是在所述用于情况分析,汇编及代码注入的模块(23)中发现的,并且其在所述优化内核数据库(16)及所述基准序列中都没有相应的识别信息。
10.根据权利要求6所述的系统,其特征在于:包括一编译器(81)和一个连接编辑器(82)用于接收来自于所述代码优化及生成装置(80)的重组源代码(19),并产生适用于所述硬件平台(90)的优化二进制代码。
11.根据权利要求10所述的系统,其特征在于:包括装置(85)用于从所述优化内核数据库(16)向所述编译器(81)传输所述优化内核的源代码。
12.根据权利要求10所述的系统,其特征在于:包括一个编译器(181)和一个安装模块(182),用于在所述硬件平台(90)上安装一动态程序库,该程序库包括所述优化内核的全部性能。
13.根据权利要求1所述的系统,其特征在于:所述预定应用领域是科学计算。
14.根据权利要求1所述的系统,其特征在于:所述预定应用领域是信号处理。
15.根据权利要求1所述的系统,其特征在于:所述预定应用领域是图像处理。
16.根据权利要求1所述的系统,其特征在于:所述基准序列(1)包括一组简单且通用的循环型代码片断,其以一种源程序语言书写并且以所述循环体代码复杂性渐增的顺序分级别组织。
17.根据权利要求16所述的系统,其特征在于:所述基准序列包括0级基准序列,其中仅进行一个单独操作的测试并且对应于一由单个算数表达式组成的循环体,由0高度树表示。
18.根据权利要求17所述的系统,其特征在于:所述基准序列包括1级基准序列,其中需要考虑并测试的是:两个0级操作的组合;1级基准序列操作所对应的循环体或由一个1高度树表示的数学表达式组成,或由两个由0高度树所表示的数学表达式构成。
19.根据权利要求18所述的系统,其特征在于:所述基准序列(1)包括1级基准序列,这里需要考虑并测试的是两个1级操作的组合或三个0级操作的组合。
20.根据权利要求16所述的系统,其特征在于:所述静态参数特别包括每个基准序列的循环迭代数,数据表访问步长及操作数类型,所使用的指令类型,预加载策略及指令及迭代排序策略。
21.根据权利要求16所述的系统,其特征在于:所述动态参数特别包括所述数据表操作数在不同级分层存储结构中的位置,所述数据表起始地址的相对位置及所述分支历史。
22.根据权利要求6所述的系统,其特征在于:所述优化内核数据库(16)包括循环型源代码序列,其对应于真实而有用的码段并以复杂度渐增的顺序加以组织。
23.根据权利要求1所述的系统,其特征在于:预定的硬件平台至少包括一个Itanium型处理器。
24.根据权利要求1所述的系统,其特征在于:所述预定硬件平台包括至少一个Power或Power PC型处理器。
25.根据权利要求13-15及权利要求23中任一项权利要求所述的系统,其特征在于:所述的优化规则至少包括部分下列规则:
a)在写操作的性能不如读操作的情况下,尽量减少写操作的数量;
b)在浮点操作中,使用成对装载很重要;
c)将循环的展开度调整为循环体的复杂程度的函数;
d)利用运算操作的操作等待时间;
e)对短向量应用屏蔽技术;
f)在读、写或预加载中对存储器的操作使用区域后缀;
g)确定预加载间隔;
h)执行4级向量化,从而避免某些L2存储冲突;
i)考虑多个变量以避免在读/写序列中的其他L2存储冲突及读写序列中的冲突;
j)考虑与不同的优化法相关的性能改善;
k)使用能够尽量减少错误预测的分支链;
l)合并存储器入口;
m)将象素的处理向量化。
26.根据权利要求13-15及权利要求24中任一项权利要求所述的系统,其特征在于:所述的优化规则(9)至少包括部分下列规则:
a)重新排序读操作从而将高速缓冲存储器错误集合起来;
b)只对写操作进行预加载;
c)将循环的展开度调整为循环体的复杂程度的函数;
d)利用运算操作的操作等待时间;
e)在读、写或预加载中对存储器的操作使用区域后缀;
f)确定预加载间隔;
g)考虑多个变量以避免在读/写序列中的冲突;
h)考虑与不同的优化法相关的性能的提高。
CNB2005800025169A 2004-01-14 2005-01-13 优化编码自动生成系统 Expired - Fee Related CN100388203C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0400291A FR2865047B1 (fr) 2004-01-14 2004-01-14 Systeme de generation automatique de codes optimises
FR0400291 2004-01-14

Publications (2)

Publication Number Publication Date
CN1930552A CN1930552A (zh) 2007-03-14
CN100388203C true CN100388203C (zh) 2008-05-14

Family

ID=34684970

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005800025169A Expired - Fee Related CN100388203C (zh) 2004-01-14 2005-01-13 优化编码自动生成系统

Country Status (17)

Country Link
US (1) US7979852B2 (zh)
EP (1) EP1704476B8 (zh)
JP (1) JP4823075B2 (zh)
CN (1) CN100388203C (zh)
AR (2) AR047360A1 (zh)
AT (1) ATE428974T1 (zh)
CA (1) CA2553133A1 (zh)
CY (1) CY1109218T1 (zh)
DE (1) DE602005013908D1 (zh)
DK (1) DK1704476T3 (zh)
ES (1) ES2326126T3 (zh)
FR (1) FR2865047B1 (zh)
PL (1) PL1704476T3 (zh)
PT (1) PT1704476E (zh)
TW (1) TW200537379A (zh)
UY (1) UY28703A1 (zh)
WO (1) WO2005073851A2 (zh)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546588B2 (en) * 2004-09-09 2009-06-09 International Business Machines Corporation Self-optimizable code with code path selection and efficient memory allocation
WO2006064409A1 (en) * 2004-12-13 2006-06-22 Koninklijke Philips Electronics N.V. Compiling method, compiling apparatus and computer system for a loop in a program
US9378002B2 (en) * 2006-12-22 2016-06-28 Core Wireless Licensing S.A.R.L. System, method, apparatus and computer program product for providing memory footprint reduction
US20080244607A1 (en) * 2007-03-27 2008-10-02 Vladislav Rysin Economic allocation and management of resources via a virtual resource market
US8689194B1 (en) * 2007-08-20 2014-04-01 The Mathworks, Inc. Optimization identification
US8370823B2 (en) * 2007-08-27 2013-02-05 International Business Machines Corporation Device, system, and method of computer program optimization
JP4339907B2 (ja) * 2007-10-24 2009-10-07 株式会社日立製作所 マルチプロセッサ向け最適コード生成方法及びコンパイル装置
CN101911047A (zh) * 2007-11-06 2010-12-08 瑞士信贷证券(美国)有限责任公司 根据服务水平协议预测并管理资源分配
US8782627B2 (en) * 2007-11-29 2014-07-15 Microsoft Corporation Path specializations for runtime code with phase behavior
US20090193402A1 (en) * 2008-01-28 2009-07-30 Guy Bashkansky Iterative Compilation Supporting Entity Instance-Specific Compiler Option Variations
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8219358B2 (en) * 2008-05-09 2012-07-10 Credit Suisse Securities (Usa) Llc Platform matching systems and methods
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
WO2010118416A2 (en) * 2009-04-10 2010-10-14 Vision Genesis, Inc. Software database system and process of building and operating the same
CN101872301A (zh) * 2009-04-24 2010-10-27 深圳富泰宏精密工业有限公司 测量程序优化系统及方法
US8972961B2 (en) * 2010-05-19 2015-03-03 International Business Machines Corporation Instruction scheduling approach to improve processor performance
US8819652B2 (en) * 2010-07-30 2014-08-26 General Electric Company System and method for parametric system evaluation
US20120124555A1 (en) * 2010-11-11 2012-05-17 Codekko Software, Inc. Optimization of Compiled Control Objects
US8572594B2 (en) 2010-12-22 2013-10-29 Microsoft Corporation Invasion analysis to identify open types
US20140040858A1 (en) * 2011-04-20 2014-02-06 Freescale Semiconductor, Inc. Method and apparatus for generating resource efficient computer program code
US8423986B1 (en) * 2011-10-12 2013-04-16 Accenture Global Services Limited Random utility generation technology
US9185513B1 (en) * 2011-12-02 2015-11-10 Google Inc. Method and system for compilation with profiling feedback from client
US9613083B2 (en) 2012-04-26 2017-04-04 Hewlett Packard Enterprise Development Lp Nesting level
JP2013235386A (ja) * 2012-05-08 2013-11-21 Internatl Business Mach Corp <Ibm> 最適化装置、最適化方法、及び最適化プログラム
KR101940265B1 (ko) * 2012-05-23 2019-01-18 충남대학교산학협력단 명령어 집합 아키텍처 자동 맵핑 기법
US9244677B2 (en) * 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
CN103901810B (zh) * 2012-12-31 2017-04-12 施耐德电器工业公司 可编程控制器用户应用的优化系统及方法
US9268541B2 (en) 2013-03-15 2016-02-23 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
US9158511B2 (en) * 2013-05-20 2015-10-13 Advanced Micro Devices, Inc. Scalable partial vectorization
WO2014200501A1 (en) * 2013-06-14 2014-12-18 Intel Corporation Compiler optimization for complex exponential calculations
GB2521367A (en) 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems
JP5988444B2 (ja) 2014-02-14 2016-09-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
CN103760965B (zh) * 2014-02-21 2016-08-17 中南大学 一种能量受限嵌入式系统的算法源程序节能优化方法
CN104239055A (zh) * 2014-09-15 2014-12-24 大连楼兰科技股份有限公司 检测软件代码复杂度的方法
US9706013B2 (en) * 2014-09-17 2017-07-11 Oracle International Corporation Mobile runtime conditional sections for surveys
US9489181B2 (en) * 2014-10-09 2016-11-08 National Instruments Corporation Correlation analysis of program structures
CN105988855B (zh) * 2015-02-16 2019-11-12 龙芯中科技术有限公司 即时编译参数优化方法及装置
EP3376373A1 (en) * 2017-03-15 2018-09-19 Siemens Aktiengesellschaft A method for deployment and execution of a machine learning model on a field device
JP7407192B2 (ja) * 2018-08-09 2023-12-28 イーエニエーエスセー テック インスティチュート デ エンゲンハリア デ システマス エ コンピュータドレス テクノロジア エ シエンシア フィールド・プログラマブル・ゲート・アレイのためのコードを最適化する方法および装置
US10956137B2 (en) * 2019-06-10 2021-03-23 International Business Machines Corporation Compiling source code using source code transformations selected using benchmark data
KR102132933B1 (ko) * 2019-09-09 2020-07-10 국방과학연구소 소프트웨어의 제어 흐름 보호장치 및 그 방법
CN110727437B (zh) * 2019-09-10 2024-04-09 平安普惠企业管理有限公司 代码优化项获取方法、装置、存储介质及电子设备
US11720351B2 (en) * 2020-03-17 2023-08-08 Onspecta, Inc. Microkernel-based software optimization of neural networks
TWI755112B (zh) * 2020-10-23 2022-02-11 財團法人工業技術研究院 電腦程式碼之優化方法、優化系統及應用其之電子裝置
CN113286148A (zh) * 2020-11-25 2021-08-20 常熟友乐智能科技有限公司 一种基于大数据和物联网的视频设备优化方法、装置及服务器
CN117908902A (zh) * 2024-03-12 2024-04-19 苏州元脑智能科技有限公司 性能优化方法、装置、计算机设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815721A (en) * 1996-04-25 1998-09-29 Hewlett-Packard Company Method and apparatus for optimizing complex control structures using abstract web patterns
JP2000078262A (ja) * 1998-08-31 2000-03-14 Nippon Telegr & Teleph Corp <Ntt> 携帯電話端末

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62219130A (ja) * 1986-03-20 1987-09-26 Fujitsu Ltd プログラムの最適化方式
JPS62271024A (ja) * 1986-05-20 1987-11-25 Mitsubishi Electric Corp 最適化処理方式
JPH02176938A (ja) * 1988-12-28 1990-07-10 Hitachi Ltd 機械語命令最適化方式
JPH03157731A (ja) * 1989-11-16 1991-07-05 Hitachi Ltd チユーニング支援システム
DE4112090A1 (de) * 1991-04-12 1992-10-15 Siemens Ag Verfahren zum maschinellen erstellen eines aus mehreren programmteilen bestehenden programmes
JPH09319587A (ja) * 1996-05-30 1997-12-12 Nec Corp 計測情報を使ったポストオプティマイズによるプログラムの生成方式
US6895580B2 (en) * 2001-09-20 2005-05-17 International Business Machines Corporation Expression reduction during compilation through routine cloning
JP2003173262A (ja) * 2001-12-06 2003-06-20 Hitachi Ltd プログラムチューニングシステムとプログラムチューニング方法およびプログラムと記録媒体
US7975256B2 (en) * 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815721A (en) * 1996-04-25 1998-09-29 Hewlett-Packard Company Method and apparatus for optimizing complex control structures using abstract web patterns
JP2000078262A (ja) * 1998-08-31 2000-03-14 Nippon Telegr & Teleph Corp <Ntt> 携帯電話端末

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Generating Code for High-Level Operations through Codecomposition. Thomas,Gross,David,R.O'Hallaron.. 1997
Generating Code for High-Level Operations through Codecomposition. Thomas,Gross,David,R.O'Hallaron.. 1997 *
编译程序中代码生成研究的现状. 郑茂松.计算机工程与应用,第1期. 1982
编译程序中代码生成研究的现状. 郑茂松.计算机工程与应用,第1期. 1982 *

Also Published As

Publication number Publication date
EP1704476B1 (fr) 2009-04-15
UY28703A1 (es) 2005-07-29
TW200537379A (en) 2005-11-16
CA2553133A1 (en) 2005-08-11
FR2865047A1 (fr) 2005-07-15
EP1704476B8 (fr) 2009-09-23
US7979852B2 (en) 2011-07-12
FR2865047B1 (fr) 2006-04-07
WO2005073851A3 (fr) 2006-05-04
CY1109218T1 (el) 2014-07-02
US20080034360A1 (en) 2008-02-07
AR049794A1 (es) 2006-09-06
WO2005073851A2 (fr) 2005-08-11
PT1704476E (pt) 2009-07-21
PL1704476T3 (pl) 2010-01-29
JP4823075B2 (ja) 2011-11-24
ES2326126T3 (es) 2009-10-01
AR047360A1 (es) 2006-01-18
JP2007518176A (ja) 2007-07-05
ATE428974T1 (de) 2009-05-15
DE602005013908D1 (de) 2009-05-28
DK1704476T3 (da) 2009-08-17
CN1930552A (zh) 2007-03-14
EP1704476A2 (fr) 2006-09-27

Similar Documents

Publication Publication Date Title
CN100388203C (zh) 优化编码自动生成系统
Petke et al. Genetic improvement of software: a comprehensive survey
Martins et al. Clustering-based selection for the exploration of compiler optimization sequences
Ye et al. Scalehls: A new scalable high-level synthesis framework on multi-level intermediate representation
Fursin et al. MILEPOST GCC: machine learning based research compiler
Schaefer et al. Atune-IL: An instrumentation language for auto-tuning parallel applications
Guyer et al. Broadway: A compiler for exploiting the domain-specific semantics of software libraries
Martins et al. 50k-c: A dataset of compilable, and compiled, java projects
Kästner et al. Generic control flow reconstruction from assembly code
Mendes et al. Integrated compilation and scalability analysis for parallel systems
Ivanenko et al. TuningGenie: auto-tuning framework based on rewriting rules
Doroshenko et al. A mixed method of parallel software auto-tuning using statistical modeling and machine learning
Ashouri Compiler autotuning using machine learning techniques
Nyland et al. A design methodology for data-parallel applications
Huang et al. Alcop: Automatic load-compute pipelining in deep learning compiler for ai-gpus
Alòs et al. Optilog V2: model, solve, tune and run
Thoman et al. On the compilation performance of current sycl implementations
Pouchet et al. Hybrid iterative and model-driven optimization in the polyhedral model
Slepak et al. Rank polymorphism viewed as a constraint problem
Ivanov et al. STen: Productive and Efficient Sparsity in PyTorch
Fursin et al. Practical run-time adaptation with procedure cloning to enable continuous collective compilation
Finkel et al. Report of the Workshop on Program Synthesis for Scientific Computing
Chikin et al. Memory-access-aware safety and profitability analysis for transformation of accelerator-bound OpenMP loops
Ferrandi et al. Automatic parallelization of sequential specifications for symmetric mpsocs
Doroshenko et al. Optimization of Parallel Software Tuning with Statistical Modeling and Machine Learning.

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080514

Termination date: 20120113