CN1284080C - 基于值特化来优化软件代码的方法和装置 - Google Patents
基于值特化来优化软件代码的方法和装置 Download PDFInfo
- Publication number
- CN1284080C CN1284080C CN02819243.5A CN02819243A CN1284080C CN 1284080 C CN1284080 C CN 1284080C CN 02819243 A CN02819243 A CN 02819243A CN 1284080 C CN1284080 C CN 1284080C
- Authority
- CN
- China
- Prior art keywords
- candidate
- territory
- value
- advancing fast
- specialization
- 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
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/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- 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
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)
Abstract
本发明说明了一种方法和装置,用于使用具有简化的数据和控制流的域以及值特化来提供代码的编译器变换。在一个实施例中,所述方法包括:在代码中标识多个用于值特化的潜在候选者;基于与每个潜在候选者相关联的值特性,从所述多个潜在候选者选择一组候选者;使用对应的值特性,为每个所选择的候选者确定特化数据;基于特化数据形成多个快速前进域,其中每个快速前进域都包括一个或多个所选择的候选者;以及在独立的线程上创建与多个快速前进域中的每一个相关联的检查器代码以用于推测式执行。
Description
技术领域
本发明一般地涉及编译器,更具体地说涉及能够基于值特化(valuespecialization)来优化软件代码的编译器。
背景技术
一般地,使用一趟编译器(one-pass compiler)的结果是获得了这样的目标代码,如果在它的编译上花费更多功夫则它会执行得更加有效。因此,需要优化目标代码。
在文章Sanjay J.Patel and Steven S.Lumetta.rePlay:A HardwareFramework for Dynamic Program Optimization.CRHC Technical Report Draft,Decemeber 1999中,公开了一种称为“rePlay”的优化技术。然而,rePlay主要依赖于硬件来形成多个域(region)并在运行时优化所述域。这一对硬件的依赖性可能是不实际的,因为许多优化可能很复杂并需要相当多的硬件和软件编译时间。
其他优化技术包括部分冗余消除(partial redundancy elimination,PRE)和部分死代码消除(partial dead-code elimination,PDE),其有时也可能不太有效,并且实现起来相当复杂。PDE公开在Rajiv Gupta,DavidE.Benson,and Jesse Z.Fang.“Path profile guided partial dead code eliminationusing predication”.Parallel Architectures and Compilation Techniques,1997中。
另外,另一种称为“超级块“(superblock)的优化技术公开在Wen-mei W.Hwu et al.“The Superblock:An Effective Technique for VLIW andSuperscalar Compilation”,The Journal of Supercomputing.Kluwer AcademicPublishers,1993,pp.229-248中。超级块中通常简化了优化与调度的数据和控制流。然而,超级块仍然是一个多出口域(multiple exit region)。因此,优化与调度需要处理诸如边际退出(side exit)和推测(speculation)之类的问题。
发明内容
根据本发明一个方面,公开了一种使用快速前进域和值特化来进行软件代码的编译器变换的方法,该方法包括以下步骤:在软件代码中标识用于值特化的多个潜在候选者;基于与所述多个潜在候选者中的每一个潜在候选者相关联的值特性,从所述多个潜在候选者选择一组候选者;使用对应的值特性,为所述候选者组中的每一个候选者确定特化数据;基于对应的特化数据形成多个快速前进域,其中所述多个快速前进域中的每一个快速前进域都包括一个或多个来自所述候选者组的候选者;以及在独立的线程上创建与所述多个快速前进域中的每一个快速前进域相关联的检查器代码以用于推测式执行,其中所述检查器代码包括对应于所述多个快速前进域中的所述快速前进域的初始代码。
根据本发明另一方面,还公开了一种快速前进域和值特化来进行软件代码的编译器变换的装置,该装置包括:候选者选择器,用于在软件代码中标识用于值特化的多个潜在候选者;特化值计算器,用于基于与所述多个潜在候选者中的每一个潜在候选者相关联的值特性,从所述多个潜在候选者选择一组候选者,并且使用对应的值特性,为所述候选者组中的每一个候选者确定特化数据;域创建器,用于基于对应的特化数据形成多个快速前进域,其中所述多个快速前进域中的每一个快速前进域都包括一个或多个来自所述候选者组的候选者;以及域预测器,用于在独立的线程上创建与所述多个快速前进域中的每一个快速前进域相关联的检查器代码以用于推测式执行,其中所述检查器代码包括对应于所述多个快速前进域中的所述快速前进域的初始代码。
根据本发明又一方面,还公开了一种系统,该系统包括编译器、用于存储软件代码和所述编译器的存储器以及耦合到所述存储器以执行所述编译器的处理器。其中所述编译器具有与前述装置相同的内部部件组成。
附图说明
在附图中以例示而非限制性的方式示出了本发明,其中相似的标号表示相似的元件:
图1是计算系统的一个实施例的框图;
图2是用于基于值特化来进行程序代码的编译器变换的过程的一个实施例的流程图;
图3示出了FFR的形成以及检查器(checker)代码中异常终止(abort)指令的使用;
图4示出了FFR的形成以及检查器(checker)代码中断言(assert)指令的使用;
图5是形成FFR的过程的一个实施例的流程图;
图6示出了基于子域值特化的程序代码的变换;
图7是用于基于子域值特化而提供程序代码的编译器变换的过程的框图;
图8示出了基于装载值特化的程序代码变换;并且
图9是用于基于装载指令的值特化而提供程序代码的编译器变换的过程的方框图。
具体实施方式
本发明说明了一种方法和装置,用于基于值特化来执行软件代码的编译器变换。
下面的详细说明的一些部分是以对计算机存储器内的数据位的操作的算法和符号表示提供的。这些算法描述和表示是数据处理领域内的技术人员用来向其同行最有效地传达其工作的实质的手段。在此并且一般地,算法是自一致的步骤序列,从而获得所需的结果。这些步骤需要对物理量进行物理操纵。一般但非必然地,这些量采用了电或磁信号的形式,能够被存储、传输、结合、比较或操纵。主要是出于通用的原因,人们经常发现将这些信号指称为位、值、元素、符号、字符、项、数字等是很方便的。
然而应该认识到,所有这些以及类似的术语将和适当的物理量相关联,只是应用到这些量上的便捷标签。除非有可从下面的讨论中明显看出的其他的具体说明,否则应该认识到在整个发明中,使用象“处理”、“计算”、“运算”、“确定”或“显示”之类的术语的讨论可指称计算机系统或类似电子计算设备的动作和处理,所述计算机系统操纵该系统的寄存器和存储器内表示为物理(电学)量的数据并转换成所述计算机系统存储器、寄存器或其他形式的这种信息存储、传输或显示设备中类似地表示为物理量的其他数据。
本发明还涉及用于执行此处的操作的装置。这一装置可为所需的目的而专门地构造,或者它可包含通用计算机,该计算机被存储在其中的计算机程序所选择性地激活或重配置。这种计算机程序可存储在计算机可读存储介质中,例如但不局限于任意类型的磁盘,包括软盘、光盘、CD-ROM和磁光盘,以及只读存储器(ROM)、随机访问存储器(RAM)、EPROM、EEPROM、磁或光卡,或者任意类型的适于存储电子指令的介质,每个所述介质都耦合到计算机系统总线。使用一个或多个处理设备(例如处理器、中央处理单元等)可执行多条指令。
在此提供的算法和显示并非内在地与任何特定计算机或其他装置相关。各种通用机器可与根据此处的教导的程序一起使用,或者,构造更加专用的装置来执行所需的方法步骤可能是很方便的。从下面的描述可看出多种这些机器所必需的结构。另外,本发明并非是参照任何特定的编程语言来说明的。可以认识到,可使用多种编程语言来实现本发明在此说明的教导。
在下面对实施例的详细说明中,参考了附图,所述附图以图示的方式示出了具体的实施例,其中可实施本发明。在附图中,所有视图中的类似的标号表示基本类似的组件。以充分的细节来说明了这些实施例,以使得本领域内的技术人员可实施本发明。可以利用其他实施例,并且可做出各种结构性、逻辑或电学改变而不会偏离本发明的范围。而且,应该理解到,本发明的各种实施例尽管有所不同,但并非彼此互斥。例如,在一个实施例中说明的特定特征、结构或特性可被包含在其他实施例中。因此,下面的详细说明不应当理解成限制性的,本发明的范围只由所附的权利要求来限定,并包含了这些权利要求的等同物的所有范围。
概述
本发明的方法和装置提供了一种机制,用于基于值特化来进行编译器变换。一个程序可具有多数时间都取特定值的表达式。值特化涉及用可能是这些表达式的结果的值来取代这些表达式,从而简化了程序的控制和数据流。
在一个实施例中,对程序进行检查,以标识代码内可用于值特化的潜在候选者。所述潜在候选者可能是代码的子域或特定指令(例如将值从存储器读到寄存器的装载指令)。标识用于值特化的潜在候选者时可考虑各种因素。例如,潜在候选者可能需要具有可预测的控制和数据流和/或位于关键路径上(即经常被使用)。
然后,对每个潜在候选者,使用对应的历史数据来定义一个值特性(value profile)。在一个其中潜在候选者是子域的实施例中,历史数据包括内在值(live-in value)集合和外在值(live-out value)集合,所述值源自这一子域以前的执行。在另一个其中的潜在候选者是装载指令的实施例中,历史数据包括在装载指令以前的执行期间从指定的存储器地址装载的值。
基于这些值特性,对潜在候选者进行评估,并将那些很可能会满足预定义的阈值的潜在候选者添加到所选择的候选者组中。对于每个所选择的候选者,将它很可能会呈现的值指定为特化值。例如,每个候选子域与它最经常出现的内在值和最经常出现的外在值相关联。每个候选装载指令与它最可能出现的装载值相关联。
而且,特化值被用来形成包括对应的所选择的候选者的优化域。在一个实施例中,优化域的形成开始于修改初始代码,以对每个所选择的候选者,使用与该候选者相关联的特化值,创建很可能偏向于一个方向的分支。然后,定义具有简化的控制和数据流的域。在一个实施例中,这些域是快速前进域(fastforward region,FFR),其是使用所述有偏分支来特化的。在一个实施例中,通过包含有偏分支,并用对应的特化值来取代高概率分支而忽略低概率分支来特化FFR。或者,通过使用断言指令来提升低概率分支,并使用特化数据来取代高概率分支来特化FFR。然后,优化所获得的域。
之后,对于每个优化域,在独立的线程上预备初始代码以用于执行,从而如果在执行期间出现了低概率值也可确保正确性。
因此,值特化使得编译器可创建具有简化的控制和数据流的域,从而使得编译器可实现更激进的代码优化。例如,值特化的使用可消除另外的死代码(例如,如果去除了低概率分支,则依赖于分支条件的代码也可能编程死的)。另外,简化的控制流在许多情形下可消除对推测与补偿代码的需求,并且可减少存活变量(live variable)的数量,从而减轻了寄存器压力。而且,大的域被选择调度,因而获得了更好的“每周期可执行的指令数量”(instruction-per-cycle,IPC)参数。所有这些以及其他优点都显著提高了程序性能。
图1是计算系统100的一个实施例的框图。处理系统100包括处理器120和存储器130。处理器120是能够编译软件并执行所获得的目标代码的处理器。处理器120还可以是能够同时在两个线程上推测式地执行代码的处理器。处理器120可以是能够执行软件的任意类型的处理器,例如微处理器、数字信号处理器、微控制器等等。处理系统100可以是个人计算机(PC)、大型机、手持设备、便携式计算机、机顶盒或包含软件的任意其他的系统。
存储器130可以是硬盘、软盘、随机访问存储器(RAM)、只读存储器(ROM)、闪存、或处理器120可读的任意其他类型的机器介质。存储器130可存储用于执行本发明的各种方法实施例的指令。
存储器130存储程序104、编译器118和缓冲区102,编译器118用于编译程序104并创建目标代码,缓冲区102用于存储与目标代码的在先执行相关的历史数据。在一个实施例中,编译器118包括候选者选择器106、特化值计算器108、域创建器110和优化器112。
候选者选择器106负责分析程序104,以标识值特化的潜在候选者。在这一分析中可考虑各种因素。在一个其中的潜在候选者是装载指令的实施例中,主要因素是,装载指令是否在程序的控制流的关键路径上以及装载指令是否是只读指令。在另一个其中的潜在候选者是子域的实施例中,合格的子域需要包括至少一个指令,位于关键路径上,并且具有内在和外在寄存器。另外,候选子域不应包含存储器更新指令(例如存储指令)和函数调用指令,并且它的装载指令应该限于只读装载指令等等。
特化值计算器108负责基于存储在缓冲区102中的对应的历史数据,为每个潜在候选者定义值特性。对应的历史数据包括和该潜在候选者的在先执行相关的值集合。例如,如果潜在候选者是子域,则对应的历史数据包括它的某些内在寄存器和外在寄存器的多个值集合,所述寄存器在程序104内的所述子域的在先执行期间被记录过。如果潜在候选者是装载指令,则对应的历史数据包括程序104内的装载指令的在先执行期间所记录的多个被装载的值。
然后,特化值计算器108使用值特性来确定应选择哪个潜在候选者用于进一步的处理。在一个实施例中,如果潜在候选者最经常出现的历史数据具有高于预定阈值的频度比,则选择该潜在候选者以用于进一步的处理,下面将更详细地描述。然后,对于每个所选择的候选者,将它最经常出现的数据指定为特化数据。
域创建器110使用每个候选者的特化数据来形成具有简化的控制和数据流图的域。每个域可包括单个候选者或多个候选者。在一个实施例中,使用快速前进技术来形成所述域,下面将更详细地描述。或者,可以使用本领域内公知的任意其他编译器技术,只要这种编译器技术能够在程序的编译期间基于对应的特化值来形成具有简化的控制和数据流的域。
形成所述域之后,优化器112对它们进行优化以创建更有效的代码。而且,在一个实施例中,域创建器110评估每个优化域,以确定使用优化域所带来的益处是否超过与使用优化域相关联的额外开销。如果额外开销高于所述益处,则丢弃该优化域。在一个实施例中,最终完成优化域之后,在一个独立的线程上为每个优化域预备初始代码以用于后续执行,这样在该程序的执行期间如果出现了低概率值也可确保正确性。在一个实施例中,初始代码和对应的优化域在两个推测式线程上同时执行。
在一个实施例中,处理器120包括域预测器114和存储缓冲区116。域预测器114负责控制优化域的执行。存储缓冲区116临时存储每个优化域的执行期间所产生的结果。如果初始代码的执行确认优化域的结果是正确的,则可提交(commit)存储缓冲区116中的结果(在产生所述结果之后)。如果在初始代码的执行期间出现了低概率值,则中断优化域的执行并丢弃存储缓冲区116中的结果。
图2是过程200的一个实施例的流程图,用于基于值特化来执行程序代码的编译器变换。该过程可由可包含硬件(例如电路、专用逻辑等)、软件(例如运行在通用计算机系统或专用机器上的软件)或二者的组合的处理逻辑来执行。
参考图2,过程200开始于处理逻辑检查该程序以标识值特化的潜在候选者(处理框204)。潜在候选者可以是具有代码或特定指令(例如将值从存储器转移到寄存器的装载指令)的子域。如上面更详细地描述的,在标识值特化的潜在候选者时可考虑各种因素(例如潜在候选者是否具有可预测的数据流,它是否在关键路径上等等)。
在处理框206,处理逻辑使用与潜在候选者相关联的值特性,从潜在候选者中选择一组特化候选者。值特性是使用一组对应的历史数据来定义的。在一个其中的潜在候选者是子域的实施例中,历史数据包括源自该子域的在先执行的内在值集合和外在值集合。在另一个其中的潜在候选者是装载指令的实施例中,历史数据包括从装载指令的在先执行期间在该装载指令中所指定的存储器地址所装载的值。
在一个实施例中,基于其值特性来评估每个潜在候选者,并且确定它最经常出现的历史数据是否满足预定阈值(即,它的历史数据集合是否包括高概率值)。如果这一确定是肯定的,则将该潜在候选者添加到所选定的候选者组。或者,丢弃该潜在候选者。
在处理框208,处理逻辑为每个所选择的候选者标识特化值。所述特化值包括一个或多个从历史数据中选择的高概率值。例如,每个候选子域的特化数据包括它最经常出现的内在值以及对应的最经常出现的外在值。每个候选装载指令的特化数据包括它最经常装载的值。
在一个实施例中,在处理框210,处理逻辑使用每个候选者的特化值,将该候选者的初始代码修改成强烈地偏向一个方向的分支(例如通过对假设值的有效性进行检查),下面将更详细地描述。
在处理框212,处理逻辑形成包括对应的所选择的候选者的域。这些域具有简化的控制和数据流。在一个实施例中,这些域是快速前进域(FFR),这些域是使用有偏分支来特化的。在一个实施例中,通过包含有偏分支,并用对应的特化值来取代高概率分支而忽略低概率分支来特化FFR,下面将结合图3而更详细地描述。或者,通过使用断言指令来提升低概率分支,并使用特化数据来取代高概率分支来特化FFR,下面将结合图4来更详细地描述。然后,优化所获得的域。
在处理框214,在独立的线程上预备对应于每个优化域的初始代码以用于执行,这样在执行期间如果出现了低概率值也可确保正确性。
之后,在处理框216,去除未包含在任何优化域中的所创建的分支,以恢复对应的初始代码。
快速前进技术
快速前进技术是一种用来通过忽略不经常执行的条件而形成经常执行的代码的特化域(称为快速前进域或FFR)的编译器技术。采用推测式多线程硬件和编译器变换来处理不经常执行的代码,从而确保正确性。特化的一个示例是去除低概率分支。即,编译器通过从FFR拷贝子控制流图并去除低概率分支来形成FFR。对于FFR中每一个被消除的分支,编译器或者在FFR中插入一个断言指令,或者在初始代码中置入一个异常终止指令。编译器通过比较与使用每个指令相关联的益处来选择合适的指令。所述益处主要取决于与每个指令相关联的调度周期。例如,如果其周期发生在执行的开始处,则使用异常终止指令更为有益。如果指令的执行被调度到稍后的时间,则使用断言指令更为有益。
初始代码(如果合适的话还有异常终止指令)构成了检查器代码。在称为检查器的独立线程上执行检查器代码。
图3示出了FFR的形成以及检查器代码中对异常终止指令的使用。参考图3,代码310表示源程序的一部分。图312是对应于代码310的初始控制流图。FFR 302是通过去除两个不经常发生的分支B3和B6而形成的。如图3所示,FFR 302具有简化的控制和数据流,从而使得编译器可执行更有效而激进的优化。
检查器代码304是基于初始图312的,具有两个异常终止指令306。如果在检查器代码304的推测式执行期间遇到了不经常出现的代码,则每个异常终止指令306可停止FFR 302的执行(“杀掉FFR 302”)。“通知FFR”(notice FFR)指令308停止检查器代码304的执行。通知FFR指令308被放置在检查器代码304的这一位置,因为检查器代码304的后续执行不包含任何不经常出现的分支。通知FFR指令308使得FFR 302产生的结果在完成时可被提交。
图4示出了使用了断言指令的FFR的形成。参考图4,FFR 402包括断言指令408和406,所述断言指令源自初始图312中不经常出现的分支314和316。断言指令或者可以将被去除的分支的预测谓词(predicate)作为唯一的操作数,或者将被去除的检查的源寄存器作为操作数。当预测谓词变为真或者源寄存器具有NAT(Not a Thing)值时,断言指令生效。生效的断言指令杀掉FFR 402的执行,并触发检查器代码304的执行。
应该注意到,尽管图3和4示出了分支特化的示例,但是在此提供的对FFR形成的说明也适用于值特化。
在去除了所有的冷边缘(cold edge)后,每个候选FFR通常是单入口、单出口域。候选FFR可包括内部分支(包括循环返回分支),或者包括一组这样的块,所述块中不包含任何函数调用,并由无条件分支、内部分支(包括循环返回分支)所连接。应该注意到,存在许多种这样的代码优化方案,与应用到具有更复杂的结构的域相比较,这些优化方案应用于单入口、单出口域更为有效。
因此,候选FFR应该具有高度的完成概率(即发生边际退出的概率很低),并具有很好的优化机会。
图5是用于形成FFR的过程的一个实施例的流程图。该过程可由可包含硬件(例如电路、专用逻辑等)、软件(例如运行在通用计算机系统或专用机器上的软件)或二者的结合的处理逻辑来执行。
参考图5,过程500开始于处理框504,其中处理逻辑为程序选择并形成候选FFR之前,对程序应用标准的可用的优化方案(包括优势性能分析(edge profiling)反馈和调度),以尽可能提供最好的基准代码。基准代码是不包含任何FFR的初始代码。而且,应该注意到,只有当所述域可对从其导出该域的基准代码提供性能改进时才选择并形成FFR。
然后,处理逻辑继续到定义候选域,并从候选域形成FFR。在定义候选域时,首先选择候选域的孕育块(seed block)(处理框506)。典型的孕育块应经常被执行,应包括高度有偏分支指令,不应已包含在另一个候选域种,并且不应具有可被选为孕育块的任何前导块。一旦被选择,孕育块就被复制并扩展成候选域(处理框508)。候选域应该满足若干需求。例如,候选域应该具有主入口和主出口,它的控制流应当很可能是从主入口到达主出口(即高完成概率)等。另外,候选域可具有若干边际出口,但每个边际出口应该具有非常低的退出概率(例如<0.5%)。
在处理框510,分析每个候选域的益处和额外开销(例如使用诸如退出概率和关键路径周期之类的信息)。在一个实施例中,在分析期间,可对域进行剪裁(trim)以减少额外开销。当分析完成时,在判决框514处确定使用候选域的益处是否仍低于源自使用该候选域的额外开销。如果确定是肯定的,则丢弃该候选域(处理框516)。或者,复制候选域的子控制流图以形成候选FFR(处理框518)。
而且,还确定是否有其他候选域需要进行分析(判决框520)。如果确定是肯定的,则分析下一个候选域(处理框522),并且对下一个候选域执行框514-518。对每个剩下的候选域重复上述处理。
形成了所有的FFR后(即判决框520处的确定是肯定的),将它们连接到具有快速前进和等待-提交指令的控制流图,如图3所示。随后,对每个候选FFR应用基于域的优化。而且,通过将每个FFR处理为原子操作,对整个程序进行全局优化。优化之后,比较每个候选FFR相对于初始代码的实际益处。如果其益处未超过额外开销则丢弃候选FFR。
基于子域的值特化
如上所述,编译器可基于子域值特化来变换程序。图6示出了基于子域值特化的程序代码变换。
参考图6,假设代码域602中的数组A是只读的,并且循环604经常是重复20次并产生相同的输出值(例如,和=1000)。如果与这一输出值相关联的频度比超过预定阈值,则循环604可被特化成和的这一高概率值(例如特化成1000)。可以使用所述子域值特化来创建FFR 606。FFR606是一个特化域,因为它使用了子域604的特化值,并跳过了对其他值的所有计算。其他值的计算在方框610中由检查器代码608处理。检查器代码608执行在一个独立的线程上。如果循环604的执行重复20次,则执行一个通知FFR指令,该指令停止检查器代码608的进一步执行。如果循环604重复的次数小于或大于20次,则执行一个异常终止指令来杀掉FFR 606,并且检查器代码608继续执行框610中所示的代码。
图7是过程700的框图,该过程用于提供基于子域值特化的程序代码的编译器变换。该过程可由可包含硬件(例如电路、专用逻辑等)、软件(例如运行在通用计算机系统或专用机器上的软件)或二者的结合的处理逻辑来执行。
参考图7,过程700开始于处理逻辑定义潜在子域候选者的值特性(处理框704),并确定该潜在子域候选者是否适格于值特化(处理框706)。下面的示例示出了如何执行子域R的适格(qualification)。
对于候选子域R,假设它的内在寄存器是LVI(R),而外在寄存器是LVO(R)。子域R的入口处的LVI(R)中的值集合是内在设置值。子域R的出口处的LVO(R)的值集合是外在设置值。值特性由下述信息构成:
F1(I):在子域R的执行期间很可能出现的内在值和外在值集合的发生频度;
F(R):子域R的内在值和外在值的历史集合的总数量;
VI(R):高概率内在设置值;
VO(R):高概率外在设置值。
如果所述频度比超过预定阈值,则选择子域R进行特化。即,如果F1(R)/F(R)>阈值(例如99%),则选择子域R。
然后,在处理框708,确定所选择的子域的特化值。在上述示例中,特化值是VI(R)和VO(R)。在处理框710,将值特化用于创建所选择的子域的有偏分支。例如,对于上述示例中的子域R,可以创建下面的有偏分支(对于LVI(R)={r1,r2,...,rk}和VI(R)={c1,c2,...,ck},使用聚合比较LVI(R)==VI(R)作为一系列简单比较r1==c1&&r2==c2&&...&&rk==ck的便捷方式):
IF(LVI(R)==VI(R))
LVO(R)=VO(R)/*特化代码*/
ELSE
R
将频度比F1(R)/F(R)分配给从IF语句到特化代码的分支。由于F1(R)/F(R)>阈值(例如99%),因此强烈地偏向这一分支。
然后在形成包括子域R的FFR时使用所述有偏分支(处理框710)。在处理框712,还创建同时包括高概率分支和低概率分支的检查器代码,如图6所示。
基于装载的值特化
图8示出了基于装载值特化的程序代码的变换。参考图8,代码域802包括装载指令804。假设装载指令804所装载的值经常等于100。如果装载指令804的频度比超过预定阈值,则装载值100可被选择为装载指令804的特化值。使用这一特化值,装载指令804可被转换成域806中所示的有偏分支。基于所述有偏分支,创建FFR 808。在FFR 808内,消除了装载指令,并可前移依赖于所述装载的代码以提高性能。检查器代码810同时包括来自代码806的高概率和低概率分支。检查器代码810可由传统的值转发(value forwarding)来优化,获得了新的检查器代码812。
注意,即使特化代码806在工作分支“IF(v==100)”之前包含装载指令,FFR域808也只包含所述特化代码。在FFR形成期间,(通过在检查器代码810中插入异常终止指令)去除该工作分支,结果,也消除了这一分支前的装载指令,因为只有这一分支使用了装载值。如果使用断言指令(而非异常终止指令),则装载指令仍保留在FFR 808中。然而,FFR使得特化代码和装载指令彼此独立。即,特化代码可与装载指令并行地执行。因为装载操作要花费几个周期,因此特化代码之后的代码也可能在装载指令的执行完成之前执行,从而减少了周期数量。
图9是过程900的框图,该过程用于提供基于装载指令的值特化的程序代码的编译器变换。该过程可由可包含硬件(例如电路、专用逻辑等)、软件(例如运行在通用计算机系统或专用机器上的软件)或二者的结合的处理逻辑来执行。
参考图9,过程900开始于处理逻辑定义潜在装载指令候选者的值特性(处理框904),并确定潜在装载指令候选者是否适格于值特化(处理框906)。下面的示例说明了如何执行装载指令I的适格。
对于候选装载指令I,假设该装载定义的寄存器是LO(I)。值特性由下述信息构成:
F1(I):装载指令I执行期间最可能出现的装载值的频度;
F(I):装载指令I的历史装载值的总数量;
V(I):高概率装载值。
如果所述频度比超过预定阈值,则选择装载指令I进行特化。即,如果F1(I)/F(I)>阈值(例如99%),则选择装载指令I。
然后,在处理框908,确定所选择的装载指令的特化值。在上述示例中,特化值是V(I)。在处理框910,使用值特化来创建所选择的装载指令的有偏分支。例如,假设装载指令中的存储器地址是ADDR(I)。基于特化值,可以创建下述有偏分支:
v=load[ADDR(I)]
IF(V==LV(I))
LO(I)=V(I)/*特化代码*/
ELSE
LO(I)=v
将频度比F1(I)/F(I)分配给从IF语句到特化代码的分支。由于F1(I)/F(I)>阈值(例如99%),因此强烈地偏向这一分支。
然后在形成包括装载指令I的FFR时使用高概率分支(处理框910)。在处理框912,还创建同时包括高概率分支和低概率分支的检查器代码,如图8所示。
在一个实施例中,如果丢弃了FFR(例如由于其不具有足够的益处),则恢复被修改的代码以去除有偏分支。
应该理解到,上述说明是说明性而非限制性的。在阅读并理解上述说明后,许多其他的实施例对本领域内的技术人员来说是很清楚的。因此,本发明的范围应参考所附权利要求来确定,并包括这些权利要求的等同物的全部范围。
Claims (22)
1.一种方法,包括:
在软件代码中标识用于值特化的多个潜在候选者;
基于与所述多个潜在候选者中的每一个潜在候选者相关联的值特性,从所述多个潜在候选者选择一组候选者;
使用对应的值特性,为所述候选者组中的每一个候选者确定特化数据;
基于对应的特化数据形成多个快速前进域,其中所述多个快速前进域中的每一个快速前进域都包括一个或多个来自所述候选者组的候选者;以及
在独立的线程上创建与所述多个快速前进域中的每一个快速前进域相关联的检查器代码以用于推测式执行,其中所述检查器代码包括对应于所述多个快速前进域中的所述快速前进域的初始代码。
2.如权利要求1所述的方法,其中所述多个快速前进域中的所述快速前进域包括一个或多个断言指令,以当所述多个快速前进域中的所述快速前进域的执行期间出现了所述特化数据之外的数据时,杀掉所述多个快速前进域中的所述快速前进域的执行。
3.如权利要求1所述的方法,其中所述检查器代码包括一个或多个异常终止指令,以当所述检查器代码的执行期间出现了所述特化数据之外的数据时,停止所述多个快速前进域中的所述快速前进域的执行。
4.如权利要求1所述的方法,其中选择所述候选者组还包括:
基于与所述多个潜在候选者中的每一个潜在候选者相关联的历史数据,定义所述多个潜在候选者中的每一个潜在候选者的值特性;
分析每个值特性,以在所述值特性当中发现一组具有最高发生频度的历史数据;
确定所述最高频度比是否大于预定频度比阈值;
如果所述频度比大于所述阈值,则将对应的潜在候选者添加到所述所选择的候选者组;以及
如果所述频度比不大于所述阈值,则丢弃所述对应的潜在候选者。
5.如权利要求1所述的方法,其中每个候选者的特化数据是所述多个潜在候选者中对应的潜在候选者的值特性当中具有最高发生频度的一组历史数据。
6.如权利要求1所述的方法,其中形成所述多个快速前进域包括:
修改初始代码,以使用所述特化数据来为所述候选者组中的每个候选者创建有偏分支;
使用对应的有偏分支来定义所述多个快速前进域;
将与使用所述多个快速前进域中的每一个快速前进域相关联的益处和与使用所述多个快速前进域中的所述快速前进域相关联的额外开销进行比较;以及
如果所述额外开销超过所述益处,则丢弃所述多个快速前进域中的所述快速前进域。
7.如权利要求1所述的方法,其中所述候选者组包括一个或多个装载指令。
8.如权利要求7所述的方法,其中与所述装载指令中的每一个装载指令有关的特化数据是与所述装载指令中的所述每个装载指令相关联的值特性当中具有最高发生频度的装载值。
9.如权利要求1所述的方法,其中所述候选者组包括一个或多个代码子域。
10.如权利要求9所述的方法,其中与所述子域中的每一个子域有关的特化数据包括与所述子域中的所述每个子域相关联的值当中最经常出现的内在值集合与最经常出现的外在值集合。
11.一种装置,包括:
候选者选择器,用于在软件代码中标识用于值特化的多个潜在候选者;
特化值计算器,用于基于与所述多个潜在候选者中的每一个潜在候选者相关联的值特性,从所述多个潜在候选者选择一组候选者,并且使用对应的值特性,为所述候选者组中的每一个候选者确定特化数据;
域创建器,用于基于对应的特化数据形成多个快速前进域,其中所述多个快速前进域中的每一个快速前进域都包括一个或多个来自所述候选者组的候选者;以及
域预测器,用于在独立的线程上创建与所述多个快速前进域中的每一个快速前进域相关联的检查器代码以用于推测式执行,其中所述检查器代码包括对应于所述多个快速前进域中的所述快速前进域的初始代码。
12.如权利要求11所述的装置,其中所述特化值计算器还通过下述操作来选择所述候选者组:
基于与所述多个潜在候选者中的每一个潜在候选者相关联的历史值,定义所述多个潜在候选者中的每一个潜在候选者的值特性;
分析每个值特性,以在所述值特性内发现一个或多个具有最高发生频度的历史数据;
确定所述最高频度比是否大于预定频度比阈值;
如果所述频度比大于所述阈值,则将对应的潜在候选者添加到所述所选择的候选者组;以及
如果所述频度比不大于所述阈值,则丢弃所述对应的潜在候选者。
13.如权利要求11所述的装置,其中每个候选者的特化数据是所述多个潜在候选者中对应的潜在候选者的值特性当中具有最高发生频度的一个或多个历史值。
14.如权利要求11所述的装置,其中所述域创建器通过下述操作来形成多个快速前进域:
修改初始代码,以使用所述特化数据来为所述候选者组中的每个候选者创建有偏分支;
使用对应的有偏分支来定义所述多个快速前进域;
将与使用所述多个快速前进域中的每一个快速前进域相关联的益处和与使用所述多个快速前进域中的所述快速前进域相关联的额外开销进行比较;以及
如果所述额外开销超过所述益处,则丢弃所述多个快速前进域中的所述快速前进域。
15.如权利要求11所述的装置,其中所述候选者组包括一个或多个装载指令。
16.如权利要求15所述的装置,其中与所述装载指令中的每一个装载指令有关的特化数据是与所述装载指令中的所述每个装载指令相关联的值特性当中具有最高发生频度的装载值。
17.如权利要求11所述的装置,其中所述候选者组包括一个或多个代码子域。
18.如权利要求17所述的装置,其中与所述子域中的每一个子域有关的特化数据包括与所述子域中的所述每个子域相关联的值特性当中最经常出现的内在值集合与最经常出现的外在值集合。
19.一种系统,包括:
编译器,该编译器包括:
候选者选择器,用于在软件代码中标识用于值特化的多个潜在候选者;
特化值计算器,用于基于与所述多个潜在候选者中的每一个潜在候选者相关联的值特性,从所述多个潜在候选者选择一组候选者,并且使用对应的值特性,为所述候选者组中的每一个候选者确定特化数据;
域创建器,用于基于对应的特化数据形成多个快速前进域,其中所述多个快速前进域中的每一个快速前进域都包括一个或多个来自所述候选者组的候选者;以及
域预测器,用于在独立的线程上创建与所述多个快速前进域中的每一个快速前进域相关联的检查器代码以用于推测式执行,其中所述检查器代码包括对应于所述多个快速前进域中的所述快速前进域的初始代码;
存储器,用于存储所述软件代码和所述编译器;以及
处理器,耦合到所述存储器以执行所述编译器。
20.如权利要求19所述的系统,其中每个候选者的特化数据是所述多个潜在候选者中对应的潜在候选者的历史数据当中具有最高发生频度的一个或多个历史值。
21.如权利要求19所述的系统,其中所述候选者组包括一个或多个装载指令。
22.如权利要求19所述的系统,其中所述候选者组包括一个或多个代码子域。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/969,962 US7039909B2 (en) | 2001-09-29 | 2001-09-29 | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization |
US09/969,962 | 2001-09-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1571954A CN1571954A (zh) | 2005-01-26 |
CN1284080C true CN1284080C (zh) | 2006-11-08 |
Family
ID=25516231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN02819243.5A Expired - Fee Related CN1284080C (zh) | 2001-09-29 | 2002-08-30 | 基于值特化来优化软件代码的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7039909B2 (zh) |
CN (1) | CN1284080C (zh) |
AU (1) | AU2002332811A1 (zh) |
DE (1) | DE10297279T5 (zh) |
GB (1) | GB2398141A (zh) |
WO (1) | WO2003029972A2 (zh) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6748589B1 (en) | 1999-10-20 | 2004-06-08 | Transmeta Corporation | Method for increasing the speed of speculative execution |
US7257810B2 (en) * | 2001-11-02 | 2007-08-14 | Sun Microsystems, Inc. | Method and apparatus for inserting prefetch instructions in an optimizing compiler |
US7234136B2 (en) * | 2001-11-02 | 2007-06-19 | Sun Microsystems, Inc. | Method and apparatus for selecting references for prefetching in an optimizing compiler |
US7219352B2 (en) * | 2002-04-15 | 2007-05-15 | Microsoft Corporation | Methods and apparatuses for facilitating processing of interlaced video images for progressive video displays |
US7065759B2 (en) * | 2002-06-18 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | System and method for assigning basic blocks to computer control flow paths |
US7143403B2 (en) * | 2002-06-18 | 2006-11-28 | Hewlett-Packard Development Company, L.P. | System and method for merging control flow paths |
US6970985B2 (en) | 2002-07-09 | 2005-11-29 | Bluerisc Inc. | Statically speculative memory accessing |
US7467377B2 (en) * | 2002-10-22 | 2008-12-16 | Intel Corporation | Methods and apparatus for compiler managed first cache bypassing |
US7366932B2 (en) * | 2002-10-30 | 2008-04-29 | Stmicroelectronics, Inc. | Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation |
US7299458B2 (en) * | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US7643675B2 (en) * | 2003-08-01 | 2010-01-05 | Microsoft Corporation | Strategies for processing image information using a color information data structure |
US20050114850A1 (en) | 2003-10-29 | 2005-05-26 | Saurabh Chheda | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control |
US7996671B2 (en) * | 2003-11-17 | 2011-08-09 | Bluerisc Inc. | Security of program executables and microprocessors based on compiler-architecture interaction |
US8607209B2 (en) | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
EP1771812B1 (en) * | 2004-07-29 | 2011-09-14 | Microsoft Corporation | Image processing using linear light values and other image processing improvements |
ATE517477T1 (de) | 2004-09-25 | 2011-08-15 | Aware Inc | Crc-zähler-normierung |
US20070130114A1 (en) * | 2005-06-20 | 2007-06-07 | Xiao-Feng Li | Methods and apparatus to optimize processing throughput of data structures in programs |
US7774769B2 (en) * | 2005-09-22 | 2010-08-10 | Intel Corporation | Transmitting trace-specific information in a transformed application |
US20070294181A1 (en) * | 2006-05-22 | 2007-12-20 | Saurabh Chheda | Flexible digital rights management with secure snippets |
US20080126766A1 (en) | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
DE102007056528B3 (de) * | 2007-11-16 | 2009-04-02 | Seereal Technologies S.A. | Verfahren und Vorrichtung zum Auffinden und Verfolgen von Augenpaaren |
US8561026B2 (en) * | 2007-11-27 | 2013-10-15 | International Business Machines Corporation | Method, apparatus and computer program for facilitating the improvement of a user interface |
EP2698710A3 (en) * | 2008-02-12 | 2014-05-28 | Scrutiny, INC. | Systems and methods for information flow analysis |
US10713069B2 (en) | 2008-09-04 | 2020-07-14 | Synopsys, Inc. | Software and hardware emulation system |
US9317399B2 (en) | 2012-09-28 | 2016-04-19 | Synopsys, Inc. | Policy evaluation based upon dynamic observation, static analysis and code change history |
US9009689B2 (en) * | 2010-11-09 | 2015-04-14 | Intel Corporation | Speculative compilation to generate advice messages |
US20130031537A1 (en) * | 2011-07-28 | 2013-01-31 | International Business Machines Corporation | Specialized Function Implementation Using Code Frequency Profiling |
US8671397B2 (en) * | 2011-09-27 | 2014-03-11 | International Business Machines Corporation | Selective data flow analysis of bounded regions of computer software applications |
US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
US9032376B2 (en) | 2012-09-28 | 2015-05-12 | Synopsys, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US9367314B2 (en) * | 2013-03-15 | 2016-06-14 | Intel Corporation | Converting conditional short forward branches to computationally equivalent predicated instructions |
US9223714B2 (en) | 2013-03-15 | 2015-12-29 | Intel Corporation | Instruction boundary prediction for variable length instruction set |
WO2014154917A1 (es) * | 2013-03-27 | 2014-10-02 | Intel Corporation | Mecanismo para facilitar la fusión dinámica y eficaz de instrucciones informáticas en programas de software |
US9182955B1 (en) * | 2014-06-06 | 2015-11-10 | Microsoft Technology Licensing, Llc | Data-dependent control flow reduction |
CA2980333A1 (en) * | 2015-04-02 | 2016-10-06 | Dataware Ventures, Llc | Field specialization systems and methods for improving program performance |
KR102472131B1 (ko) * | 2015-09-03 | 2022-11-29 | 삼성전자주식회사 | 쉐이더 프로그램을 생성하는 방법 및 장치 |
US10733099B2 (en) | 2015-12-14 | 2020-08-04 | Arizona Board Of Regents On Behalf Of The University Of Arizona | Broadening field specialization |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5764885A (en) * | 1994-12-19 | 1998-06-09 | Digital Equipment Corporation | Apparatus and method for tracing data flows in high-speed computer systems |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
JP2924882B1 (ja) * | 1998-01-27 | 1999-07-26 | 日本電気株式会社 | 論理シミュレーションモデルの作成方法および装置ならびに記録媒体 |
US6175948B1 (en) * | 1998-02-05 | 2001-01-16 | Motorola, Inc. | Method and apparatus for a waveform compiler |
US6609248B1 (en) * | 1999-06-30 | 2003-08-19 | Microsoft Corporation | Cross module representation of heterogeneous programs |
US6779114B1 (en) * | 1999-08-19 | 2004-08-17 | Cloakware Corporation | Tamper resistant software-control flow encoding |
US6487716B1 (en) * | 1999-10-08 | 2002-11-26 | International Business Machines Corporation | Methods and apparatus for optimizing programs in the presence of exceptions |
US20020170034A1 (en) * | 2000-06-16 | 2002-11-14 | Reeve Chris L. | Method for debugging a dynamic program compiler, interpreter, or optimizer |
-
2001
- 2001-09-29 US US09/969,962 patent/US7039909B2/en not_active Expired - Fee Related
-
2002
- 2002-08-30 GB GB0407203A patent/GB2398141A/en not_active Withdrawn
- 2002-08-30 DE DE10297279T patent/DE10297279T5/de not_active Ceased
- 2002-08-30 CN CN02819243.5A patent/CN1284080C/zh not_active Expired - Fee Related
- 2002-08-30 WO PCT/US2002/027985 patent/WO2003029972A2/en not_active Application Discontinuation
- 2002-08-30 AU AU2002332811A patent/AU2002332811A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
CN1571954A (zh) | 2005-01-26 |
GB2398141A (en) | 2004-08-11 |
AU2002332811A1 (en) | 2003-04-14 |
WO2003029972A2 (en) | 2003-04-10 |
US7039909B2 (en) | 2006-05-02 |
WO2003029972A8 (en) | 2004-11-04 |
US20030066061A1 (en) | 2003-04-03 |
GB0407203D0 (en) | 2004-05-05 |
WO2003029972A3 (en) | 2004-02-26 |
DE10297279T5 (de) | 2004-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1284080C (zh) | 基于值特化来优化软件代码的方法和装置 | |
Martinez et al. | Astor: A program repair library for java | |
Nuzman et al. | Outer-loop vectorization: revisited for short simd architectures | |
Triantafyllis et al. | Compiler optimization-space exploration | |
CN1257454C (zh) | 用于展开计算机程序中超级块的编译装置和方法 | |
US20160085528A1 (en) | Automated adaptive compiler optimization | |
US9552193B2 (en) | Automated compiler specialization for global optimization | |
CN1752934A (zh) | 编译器、编译方法以及编译程序 | |
Fursin et al. | Midatasets: Creating the conditions for a more realistic evaluation of iterative optimization | |
CN101667135A (zh) | 一种交互式并行化编译系统及其编译方法 | |
US8037463B2 (en) | Computer program functional partitioning system for heterogeneous multi-processing systems | |
Shobaki et al. | Preallocation instruction scheduling with register pressure minimization using a combinatorial optimization approach | |
CN101000556A (zh) | 编译装置 | |
Kulkarni et al. | Fast and efficient searches for effective optimization-phase sequences | |
US20090019431A1 (en) | Optimised compilation method during conditional branching | |
Haneda et al. | Optimizing general purpose compiler optimization | |
Juega et al. | Adaptive mapping and parameter selection scheme to improve automatic code generation for gpus | |
Sondag et al. | Predictive thread-to-core assignment on a heterogeneous multi-core processor | |
Maramzin et al. | “it looks like you’re writing a parallel loop”: a machine learning based parallelization assistant | |
CN101076780A (zh) | 针对程序中循环的编译方法、编译设备和计算机系统 | |
Lotfi et al. | ReHLS: resource-aware program transformation workflow for high-level synthesis | |
Renganarayana et al. | Compact multi-dimensional kernel extraction for register tiling | |
O’Boyle et al. | Feedback assisted iterative compilation | |
Baghdadi et al. | The potential of synergistic static, dynamic and speculative loop nest optimizations for automatic parallelization | |
Ibrahim et al. | Code transformations and SIMD impact on embedded software energy/power consumption |
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: 20061108 Termination date: 20130830 |