CN100583042C - 针对程序中循环的编译方法和编译设备 - Google Patents

针对程序中循环的编译方法和编译设备 Download PDF

Info

Publication number
CN100583042C
CN100583042C CN200580042539A CN200580042539A CN100583042C CN 100583042 C CN100583042 C CN 100583042C CN 200580042539 A CN200580042539 A CN 200580042539A CN 200580042539 A CN200580042539 A CN 200580042539A CN 100583042 C CN100583042 C CN 100583042C
Authority
CN
China
Prior art keywords
instruction
combined command
command section
cycle
section
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
CN200580042539A
Other languages
English (en)
Other versions
CN101076780A (zh
Inventor
吴凡
孙彦孟
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.)
St Wireless
ST Ericsson SA
Original Assignee
Koninklijke Philips Electronics NV
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 Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Priority claimed from PCT/IB2005/054089 external-priority patent/WO2006064409A1/en
Publication of CN101076780A publication Critical patent/CN101076780A/zh
Application granted granted Critical
Publication of CN100583042C publication Critical patent/CN100583042C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

提供了一种对包括循环的程序进行编辑的方法。在程序中,循环包括K个指令(K>2)并且重复M次(M>2),该编译方法包括以下步骤:对循环中的K个指令执行资源冲突分析;将循环中的K个指令分为第一组合指令段、连接指令段和第二组合指令段,其中,在第一组合指令段中的指令和第二组合指令段中的指令各自之间没有资源冲突;以及编译程序,其中,将周期N(N=2,3,...M)中第一组合指令段中的指令和周期N-I中第二组合指令段中的指令组合以分别编辑。还提供了一种用于实现上述编译方法的编译设备和计算机系统。

Description

针对程序中循环的编译方法和编译设备
技术领域
本发明涉及一种对包括循环的程序进行编译的方法、设备和计算机系统,更具体地,涉及一种在VLIW(超长指令字)处理器中对包括循环的程序进行编译的方法、设备和计算机系统。
背景技术
在传统的计算机系统中,其硬件部分包括CPU(中央处理单元)、存储器等。计算机系统通过执行指令来进行操作。传统的指令集计算机包括RISC(精简指令集计算机)和CISC(复杂指令集计算机),并且VLIW在微处理器设计领域中成为越来越普及的技术。与RI SC和CISC处理器相比,VLIW处理器具有成本低、能耗低、结构简单和处理速度快的优点。
VLIW处理器使用包括可并行执行的若干较短指令的固定长度的长指令。此外,在操作中,VLIW处理器不需要多个复杂的控制电路,而超标量处理器协作以并行执行时必须使用多个复杂的控制电路。
此外,VLIW处理器还将多于两个的指令组合为指令包。编译器预先对指令包进行调度,以使VLIW处理器能够快速地并行执行指令,从而微处理器不需要执行复杂的时序分析,而在超标量RISC和CISC处理器中必须完成复杂的时序分析。
所谓的多发射处理器允许处理器在一个时钟周期内执行多个指令。有如下两种多发射处理器:
1.超标量处理器,每个时钟周期执行可变数量的指令,并且可使用诸如记分牌(score boarding)之类的技术由编译设备(例如硬件和/或软件)进行静态或动态调度。
2.VLIW(超长指令字)处理器,执行格式化为一个较大指令或固定指令包的固定数量的指令。固有地对VLIW处理器进行静态调度。
VLIW指令通常包括若干子指令。每个子指令与处理器中的特定功能单元(即模块)以及运算集相对应。例如,Computer Architecture的285-289页,a Quantitative Approach(2nd Edition)of Hennessy,John L.和David A.Patterson[1996],Morgan Kaufmann Publishers,Inc.,指出了一个VLIW指令包括两个整数运算、两个浮点数运算、两个存储器引导和分支。
VLIW处理器使用多个独立的功能单元,每个功能单元用于执行VLIW指令的一个子指令。这些操作的并行调度需要复杂的编译方案和工具。
图1示出了VLIW指令和VLIW处理器之间的关系。如图1所示,VLIW指令包括四个子指令,分别是ADD int a,b;MUL double c,3.142;READ d,ARO;和BNZ loop,e。这四个子指令与VLIW处理器中的四个功能单元相对应,即整数功能单元(INT FU)、浮点数功能单元(Float FU)、数据存储器(数据存储器)和程序存储器(程序存储器)。
传统的VLIW编译设备独立地解译每个指令并产生机器代码,即每个指令对应于具有特定长度(例如256比特)的一个VLIW二进制指令。该编译方案会导致操作余量的浪费,尤其是在循环结构中。
循环是高级和低级语言中均具有基本程序结构之一。在大多数DSP(数字信号处理)风格的应用程序中,使用大量循环来进行诸如滤波、相关等的计算。实际上,循环结构使处理器以最小程序存储空间来执行重复的指令块。
在采用传统编译方法解译指令之后,循环表达为机器(二进制)指令。每个二进制指令占用程序存储器中的256个比特。如果循环的重复次数是K,则处理器实现整个循环结构需要K个周期(假设整个循环结构是要重复执行一个循环并且是零开销的循环)。因此,对于循环来说,传统编译方法的优点之一是使处理器以有限的程序存储空间来执行长许多的重复循环结构。
对于非VLIW处理器,传统编译方法可以在程序存储器空间占用和循环执行效率两方面达到最佳结果。然而,对于VLIW处理器,传统编译方法无法确保循环执行效率。
众所周知,由于VLIW处理器的指令系统比较复杂,所以编译器产生的代码质量对其操作性能有显著影响。此外,由于在VLIW代码中使用大量循环,并且循环结构的操作时间占据整个操作时间的大部分,因此循环结构的执行效率直接影响整个VLIW处理器的操作效率。
在用传统编译方法对VLIW循环进行编译的情况下,循环结构的执行效率不高,从而造成循环时间的浪费,因此整个VLIW处理器的操作效率难以满足需求。
例如,如果程序中的一个循环需要重复M次,则在用传统编译方法对VLIW循环进行编译时,VLIW处理器中浪费了2(M-1)个指令周期。在M值相对较大的情况下,将导致操作性能的显著降低。
发明内容
鉴于现有技术中存在的问题,提出本发明,本发明的目的是提供一种对包括循环的程序进行编译的方法。在该程序中,循环包括K个指令(K≥2)并且重复M次(M≥2),该编译方法包括以下步骤:
对循环中的K个指令执行资源冲突分析;
将循环中的K个指令分为第一组合指令段、连接指令段和第二组合指令段,其中,在第一组合指令段中的指令和在第二组合指令段中的指令之间分别没有资源冲突;以及
编译程序,其中,分别对周期N(N=2,3,...M)中第一组合指令段中的指令和周期N-1中第二组合指令段中的指令进行并行编译。
根据本发明的另一方面,提供了一种对包括循环的程序进行编译的编译设备。在该程序中,循环包括K个指令(K≥2)并且重复M次(M≥2),该编译设备包括:
分析装置,用于对循环中的K个指令执行资源冲突分析;
划分装置,用于将循环中的K个指令分为第一组合指令段、连接指令段和第二组合指令段,其中,在第一组合指令段中的指令和在第二组合指令段中的指令之间分别没有资源冲突;以及
编译装置,用于编译程序,其中,分别对周期N(N=2,3,...M)中第一组合指令段中的指令和周期N-1中第二组合指令段中的指令进行并行编译。
根据本发明的另一方面,提供了一种计算机系统。该计算机系统包括存储器、输入和输出设备以及针对包括循环的程序的编译设备。在该程序中,循环包括K个指令(K≥2)并且重复M次(M≥2),该编译设备包括:
分析装置,用于对循环中的K个指令执行资源冲突分析;
划分装置,用于将循环中的K个指令分为第一组合指令段、连接指令段和第二组合指令段,其中,在分别在第一组合指令段中的指令和在第二组合指令段中的指令之间没有资源冲突;以及
编译装置,用于编译程序,其中,分别对周期N(N=2,3,...M)中第一组合指令段中的指令和周期N-1中第二组合指令段中的指令进行并行编译。
通过使用根据本发明的对包括循环的程序进行编译的方法、设备或计算机系统,可以显著提高程序的周期效率。
根据以下参照附图的本发明优选实施例的详细说明,本发明的这些和其它目的、特征和优点将变得显而易见。
附图说明
下面,将参考附图详细描述本发明的优选实施例。
图1是示意性地示出了传统VLIW指令和VLIW处理器之间的关系的图;
图2是根据本发明第一实施例、针对包括循环的程序的编译方法的流程图;
图3是图2所示编译方法的资源冲突分析步骤的流程图;
图4(a)示出了通过使用根据本发明第一实施例的针对包括循环的程序的编译方法,对包括偶数个指令的循环进行编译的情况;
图4(b)示出了通过使用根据本发明第一实施例的针对包括循环的程序的编译方法,对包括奇数个指令的循环进行编译的情况;
图5示出了VLIW循环及其编译结果的示例;
图6示出了对执行相同循环的三个相邻周期的指令段划分结果、以及相邻周期中的指令段组合结果;
图7举例示出了执行相同循环的三个相邻周期的具体指令集;
图8示出了通过使用根据本发明第一实施例的针对包括循环的程序的编译方法,在分别组合图7所示的执行相同循环的三个相邻周期的第一组合指令段和第二组合指令段之后的指令集;
图9示出了图8所示组合之后的指令集的编译结果;以及
图10示意性地示出了根据本发明第二实施例的用于实现编译方法的编译设备。
具体实施方式
下面,将参考附图来详细描述本发明的优选实施例。
为了清楚起见,本申请中使用的有关术语示出如下:
程序表示可由计算机执行的指令序列。循环表示可由程序重复执行、直到执行了固定次数或者直到某个条件为真或为假时才停止的语句组。周期表示执行循环的操作。指令表示使用计算机语言编写的动作语句。
在根据本发明第一实施例的VLIW处理器中针对包括循环的程序的编译方法中,引入资源冲突分析。换言之,在针对包括循环的程序的编译过程中,添加针对循环中的每个指令的分析。资源冲突分析过程包括两个部分:
1.功能单元冲突分析;以及
2.寄存器冲突分析。
功能单元分析的作用是用于避免执行两个指令所需的功能单元的冲突。寄存器冲突分析是用于检查两个指令之间的数据依赖性。通过资源冲突分析,可以在执行相同循环的多个周期中的两个相邻周期中确定可以并行执行的指令,从而提高周期执行效率,而不改变程序的功能。
两个指令之间没有资源冲突这一事实表示既没有功能单元冲突也没有寄存器冲突。
技术领域中存在多种算法,这些算法可以实现指令获取,以满足功能单元冲突和寄存器冲突的避免规则。例如,可使用编译设备具有的语法校正功能。
应该注意,各种编译设备的编译结果是相同的,但是用不同的算法可能产生不同的效果。所使用的算法直接影响编译设备的复杂程度。编译设备的智能化程度越高,其复杂程序越高。
图2是根据本发明第一实施例的针对包括循环的程序的编译方法的流程图,其中循环包括K个指令(K是等于或大于2的整数),并在程序中重复M次(M≥2)。
如图2所示,针对包括循环的程序的编译方法包括以下基本步骤:
在步骤S101中,对循环中的K个指令执行资源冲突分析,并判断在相应指令之间是否存在资源冲突。
然后在步骤S102中,根据步骤S101中的分析结果,将循环中的K个指令分为第一组合指令段、连接指令段和第二组合指令段,其中,在第一组合指令段中的指令与在第二组合指令段中的指令之间分别没有资源冲突。可以分别对第一组合指令段中的指令和第二组合指令段中的指令进行并行编译,并且连接指令段中的指令与第一或第二组合指令段中的指令有资源冲突。
在步骤S103中,编译程序,其中,以组合方式对周期N(N=2,3,...M)中的第一组合指令段和周期N-1中的第二组合指令段进行编译。
下面,详细描述图2的步骤S101中所述的资源冲突分析。
图3示出了当K是偶数时、在上述步骤S101中提到的资源冲突分析步骤的细节。
首先,设置两个变量i和j,并分别将变量i和j初始化为0和K/2(步骤S201)。变量i和j初始值的设置只是为了设计该流程图。
根据本发明的第一实施例,在K是偶数的情况下,变量i的变化范围是1≤i≤K/2,并且变量j的变化范围是(K/2+1)≤j≤K。实际上,在K是偶数的情况下,变量I指向的指令是循环的第一段指令(前半部分指令),而变量j指向的指令是循环的第二段指令(后半部分指令)。
然后,在步骤S202中,使变量i=i+1;并且在步骤S203中,使变量j=j+1。
接下来,在步骤S204中,判断循环中执行第i个指令的功能单元和执行第j个指令的功能单元是否冲突。
如果在两个指令的执行期间涉及相同的功能单元,则确定两个指令之间存在功能单元冲突,否则确定两个指令之间不存在功能单元冲突。
如果在步骤S204中的判断结果是“否”,则流程前进到步骤S205,进一步判断执行第i个指令的寄存器是否与执行第j个指令的寄存器冲突。
如果执行第i个指令的源寄存器或目标寄存器与执行第j到第K个指令中的任意一个的源寄存器或目标寄存器涉及相同的寄存器,则确定第i个指令和第j个指令之间存在寄存器冲突,否则确定第i个指令和第j个指令之间不存在寄存器冲突。
如果在步骤S204中的判断结果是“是”,则意味着相应指令之间存在功能单元冲突,流程返回步骤S203,并继续判断在变量i指向的第一段指令中的指令与变量j指向的第二段指令中的后继指令之间是否存在寄存器冲突(步骤S204)。
如果在步骤S205中的判断结果是“否”,则使j=j+1(步骤S206),并且流程继续判断执行第i个指令的寄存器与执行第j个指令的寄存器是否存在冲突(步骤S207)。
此外,如果步骤S205中的判断结果是“是”,则流程返回步骤S203。
如果步骤S207中的判断结果是“否”,则流程继续判断j是否小于K(步骤S208);如果答案是“是”,则流程返回步骤S206,否则流程前进到步骤S209。
如果步骤S207中的判断结果是“是”,则流程返回步骤S203。
在步骤S209中,相应指令既没有功能单元冲突也没有寄存器冲突,从而确定在相应指令之间没有资源冲突。
上述处理完成了对循环中第一段中的一个指令与第二段中的一个指令及其后继指令之间的资源冲突的判断。
在步骤S210中,判断变量i是否小于K/2。如果步骤S210中的判断结果是“否”,则流程返回步骤S202,否则终止对循环中指令的资源冲突判断,并且流程前进到步骤S102(图2)。
在步骤S202中,开始对循环中的第一段中的另一指令与第二段中的另一指令及其后继指令之间的资源冲突进行判断。
在K是奇数的情况下,资源冲突分析与K是偶数的情况类似,除了变量i的变化范围变为1≤i≤((K+1)/2-1)以及变量j的变化范围变为((K+1)/2+1)≤j≤K。在这种情况下,未考虑中心指令与循环中的其它指令冲突的情况。
图2和3所示的根据本发明第一实施例的针对包括循环的程序的编译方法适用于前n个指令与后n个指令匹配的循环,即适用于没有资源冲突的循环。其中,前n个指令和后n个指令必须连续排列,并表现出一一对应的匹配关系。循环中部的K-2n个指令可用作连接指令段。在编译程序时,顺序地编译连接指令段。
图4(a)示出了通过使用根据本发明第一实施例的针对包括循环的程序的编译方法,对包括偶数个指令的循环进行编译的情况。
图4(a)所示的循环包括A、B、C、D、E、F、G和H八个(K=8)指令,并且根据本发明的指令资源冲突分析方法,进行以下确定:指令A与指令E之间没有资源冲突(即指令A与指令E之间既没有功能单元冲突也没有寄存器冲突,并且在指令A与指令F、G和H之间也没有寄存器冲突);在指令B与指令F之间没有资源冲突(即指令B和指令F之间既没有功能单元冲突也没有寄存器冲突,并且在指令B与指令G和H之间没有寄存器冲突);在指令C与指令G之间没有资源冲突(即指令C与指令G之间既没有功能单元冲突也没有寄存器冲突,并且在指令C与指令H之间也没有寄存器冲突);以及在指令D与指令H之间没有资源冲突(即指令D与指令H之间既没有功能单元冲突也没有寄存器冲突)。
图4(a)中的箭头示出了各个相应指令之间匹配的情况(没有冲突),其中,双向箭头表示两个指令之间既没有功能单元冲突也没有寄存器冲突,单向箭头表示两个指令之间没有寄存器冲突。
如图4(a)所示,将循环分为第一组合指令段(包括指令A、B、C和D)和第二组合指令段(包括E、F、G和H)。在这种情况下,连接指令段中的指令个数为零。
当编译包括循环的程序时,可分别并行地编译周期N-1中的指令E、F、G和H以及周期N中的指令A、B、C和D,并且可分别并行地编译周期N中的指令E、F、G和H以及周期N+1中的指令A、B、C和D。因此,周期的执行时间显著缩短。
当然,如果通过使用根据本发明第一实施例的针对包括循环的程序的编译方法,判断出只有循环中的指令A和B与指令G和H之间没有资源冲突,则第一组合指令段包括指令A和B,第二组合指令段包括指令G和H,并且连接指令段包括C、D、E和F。但是在这种情况下,周期的执行时间稍长于图4(a)所示的情况。
图4(b)示出了通过使用根据本发明第一实施例的针对包括循环的程序的编译方法,对包括奇数个指令的循环进行编译的情况。图4(b)所示的循环包括7个指令A、B、C、D、E、F和G(K=7),并且根据本发明的指令资源冲突分析方法,进行以下确定:在指令A与指令E之间没有资源冲突(即指令A与指令E之间既没有功能单元冲突也没有寄存器冲突,并且在指令A与指令F和G之间也没有寄存器冲突);在指令B与指令F之间没有资源冲突(即在指令B与指令F之间没有功能单元冲突,并且在指令B与指令G之间也没有寄存器冲突);在指令C与指令G之间没有资源冲突(即在指令C与指令G之间既没有功能单元冲突也没有寄存器冲突)。
未考虑中心指令D与循环中的其它指令有资源冲突的情况,这与K是偶数的情况不同。
在图4(b)所示的情况下,第一组合指令段包括指令A、B和C,第二组合指令段包括指令E、F和G,连接指令段包括指令D。
当编译包括循环的程序时,可分别并行地编译周期N-1中的指令E、F和G以及周期N中的指令A、B和C,并可分别并行地编译周期N中的指令E、F和G以及周期N+1中的指令A、B和C。
可以顺序地编译各个周期中的连接指令段中的指令。
图5示出了VLIW循环,其中左边方框中是由汇编语言表示的VLIW循环,而在右边方框中是VLIW循环的编译结果。
在图5所示的周期中,指令A(READ a,AR0+;READ b,AR1+;)仅涉及读和写功能单元,并且执行指令A所需要操作的寄存器包括a和b;指令E(MUL int e,f,g;)仅涉及计算功能单元,并且执行指令E所需要操作的寄存器包括e、f和g。因此,指令A和E之间既没有功能单元冲突也没有寄存器冲突。指令A和F之间没有寄存器冲突。类似地,指令B(ADD int a,b,c;SUB int b,a,d)和指令F(WRITE g,AR2+;)也占用不同的功能单元,因此在指令B和F之间没有寄存器冲突。
因此,可并行地编译周期N中的指令E和F以及周期N+1中的指令A和B。
图6示出了执行相同循环的三个相邻周期的指令段的划分结果以及相邻周期中的指令段的组合结果。
如图6的左侧示意图所示,如果根据传统方法编译指令,则编译设备按照以下顺序编译周期N-1、周期N和周期N+1中的各个指令段:
周期N-1中的第一组合指令段、连接指令段和第二组合指令段;
周期N中的第一组合指令段、连接指令段和第二组合指令段;以及
周期N+1中的第一组合指令段、连接指令段和第二组合指令段。
在这种情况下,需要编译九个指令段。
如图6的右侧图所示,根据本发明,将周期N-1中的第二组合指令段和周期N中的第一组合指令段组合以进行编译,并将周期N中的第二组合指令段和周期N+1中的第一组合指令段组合以进行编译。在这种情况下,仅需要编译七个指令段。
可见,指令组合是使周期N中的第一组合指令段上移并与周期N-1中的第二组合指令段一起并行地执行,并使周期N+1中的第一组合指令段上移并与周期N中的第二组合指令段一起并行地执行。
与中间的周期相反,并不将执行循环的第一周期的第一组合指令段和执行循环的最后周期的第二组合指令段与相邻的指令段组合并一起编译,而是将其顺序地执行。
通过使用指令组合,减少了整个循环结构中的VLIW指令的个数。
图7举例示出了执行相同循环的三个相邻周期的具体指令集,其中,用虚线将周期N-1、周期N和周期N+1中执行的指令分开。
图8示出了通过使用根据本发明第一实施例的编译方法,在组合了图7所示的具体指令集的第一组合指令段和第二组合指令段之后获得的指令。
根据本发明第一实施例的针对包括循环的程序的编译方法,可将图7所示的循环划分为以下指令段:
第一组合指令段:
READ a,AR0+;READ b,AR1+;
ADD int a,b,c;SUB int b,a,d;
第二组合指令段:
MUL int e,f,g;
WRITE g,AR2+;
连接指令段:
MAC int c,d,e;ADD int a,32,f;
从图8中可见,将周期N-1中第二组合指令段的第一指令MUL inte,f,g和周期N中第一组合指令段的第一指令READ a,AR0+;READb,AR1+组合以进行编译,并且将周期N-1中第二组合指令段的第二指令WRITE g,AR2+和周期N中第一组合指令段的第二指令ADD inta,b,c;SUB int b,a,d组合以进行编译。类似地,将周期N中第二组合指令段的第一指令MUL int e,f,g与周期N+1中第一组合指令段的第一指令READ a,AR0+;READ b,AR1+组合以进行编译,并且将周期N中第二组合指令段的第二指令WRITE g,AR2+和周期N+1中第一组合指令段的第二指令ADD int a,b,c;SUB int b,a,d组合以进行编译。
图9示出了在图8所示组合之后的指令集的编译结果。
图10示意性地示出了根据本发明第二实施例的用于实现编译方法的编译设备,在程序中,循环包括K个指令(K≥2)并且重复M次(M≥2)。
如图10所示,编译设备包括:
资源冲突分析单元500,用于对循环中的K个指令执行资源冲突分析;
指令划分单元530,用于将循环中的K个指令划分为第一组合指令段、连接指令段和第二组合指令段,其中,第一组合指令段中的指令和在第二组合指令段中的指令之间分别没有资源冲突。在K是偶数的情况下,指令连接部分包括彼此之间分别存在资源冲突的偶数个指令,而在K是奇数的情况下,连接指令段包括循环的中心指令以及彼此之间分别存在资源冲突的偶数个指令;以及
程序编译器540,用于编译程序,其中将周期N(N=2,3,...M)中的第一组合指令段和周期N-1中的第二组合指令段组合以进行编译。
资源冲突分析单元500包括功能单元冲突分析单元510和寄存器冲突分析单元520。
功能单元冲突分析单元510用于顺序地判断执行K个指令中的第i个指令的功能单元与执行第j个指令的功能单元是否有冲突。在K是偶数的情况下,1≤i≤K/2,并且(K/2+1)≤j≤K。在K是奇数的情况下,1≤i≤((K+1)/2-1)并且((K+1)/2+1)≤j≤K。
寄存器冲突分析单元520用于顺序地判断执行K个指令中的第i个指令的寄存器和执行第j个至第K个指令的寄存器是否有冲突。在K是偶数的情况下,1≤i≤K/2,并且(K/2+1)≤j≤K。在K是奇数的情况下,1≤i≤((K+1)/2-1)并且((K+1)/2+1)≤j≤K。
在这种情况下,周期N(N=2,3,...M)中第一组合指令段的指令与周期(N-1)中第二组合指令段的指令分别既没有功能单元冲突也没有寄存器冲突,可分别组合以进行编译。
类似地,周期N中第二组合指令段的指令与周期N+1中第一组合指令段的指令分别既没有功能单元冲突也没有寄存器冲突,可分别组合以进行编译。
此外,可以顺序地编译各个周期中的连接指令段的指令。
如果循环中包括的指令个数K是偶数,并且前半部分指令中的指令与后半部分指令中的指令没有资源冲突,则将前半部分指令中的指令划分为第一组合指令段,并将后半部分指令中的指令划分为第二组合指令段。连接指令段中的指令个数是零,即没有连接指令段。
根据本发明的第三实施例,还提供了一种计算机系统,其包括存储器、输入和输出设备(未示出)以及针对包括循环的程序的编译设备。编译设备与参照图10所述的根据本发明第二实施例的编译设备相同。
通过使用根据本发明的针对包括循环的程序的编译方法、编译设备或计算机系统,可显著地提高程序的周期效率。
以图5所示的循环为例,假设循环的重复次数是K。由于循环包括5个指令,按照传统方式,总共需要5K个指令周期来完成整个循环结构的编译;如果使用根据本发明的针对包括循环的程序的编译方法,除了第一周期和最后周期之外,每个周期都有两个指令与前一周期中的两个指令一起并行编译,并且还有另外两个指令与后继周期中的两个指令一起并行编译,因此总共仅需要[5+(K-1)×(5-2)]=3K+2个指令周期来完成编译。与传统编译方法相比,根据本发明的针对循环的编译方法可节省5K-(3K+2)=2K-2个指令周期。
假设组合指令段的指令占整个循环的指令的比例为n%,并且循环重复K次。利用根据本发明的针对包括循环的程序的编译方法,程序的周期效率提高的比率应该是:
E = 1 - ( 1 - n % ) ( K - 1 ) + 1 K = ( K - 1 ) · n % K
当K相当大时,周期效率提高可以高达大约n%。
对于图5所示的情况,在n%=2/5=40%并且K=256时,效率提高可以高达大约39.84%(近似40%)。
尽管参考文中所述结构描述了本发明,但是本发明不局限于所述细节,本申请意欲涵盖落入所附权利要求的精神和范围内的多种修改和改变。

Claims (7)

1.一种在超长指令字处理器中对包括循环的程序进行编译的方法,所述程序中的所述循环包括K个指令,并且重复M次,其中K≥2,M≥2,所述编译方法包括以下步骤:
a)对所述循环中的K个指令执行资源冲突分析;
b)根据资源冲突分析的结果,将所述循环中的K个指令划分为第一组合指令段、连接指令段和第二组合指令段,其中,第一组合指令段中的各个指令和在第二组合指令段中的各个指令之间分别没有资源冲突;以及
c)编译所述程序,其中,分别对周期N(N=2,3,...M)中第一组合指令段中的指令和周期N-1中第二组合指令段中的指令进行并行编译;
其中,步骤a)包括:
对于K个指令、依次且重复地确定用于执行第i个指令的功能单元与用于执行第j个指令的功能单元是否有冲突,以及
对于K个指令、依次确定用于执行第i个指令的寄存器与用于执行第j个指令至第K个指令中的任意一个的寄存器是否有冲突,
其中,在K是偶数的情况下,1≤i≤K/2且(K/2+1)≤j≤K,在K是奇数的情况下,1≤i≤((K+1)/2-1)且((K+1)/2+1)≤j≤K。
2.根据权利要求1所述的方法,其中,连接指令段中的指令与第一或第二组合指令段中的指令有资源冲突。
3.根据权利要求2所述的方法,其中,连接指令段中的指令个数为零。
4.根据权利要求1所述的方法,其中,第一组合指令段中的指令个数与第二组合指令段中的指令个数相等。
5.根据权利要求1所述的方法,其中,依次编译各个周期中连接指令段中的指令。
6.根据权利要求1所述的方法,其中,依次编译第一周期的第一组合指令段和第M周期的第二组合指令段中的指令。
7.一种在超长指令字处理器中对包括循环的程序进行编译的编译设备,所述程序中的所述循环包括K个指令并且重复M次,其中K≥2,M≥2,所述编译设备包括:
分析装置,用于对所述循环中的K个指令执行资源冲突分析;
划分装置,用于根据资源冲突分析的结果,将所述循环中的K个指令划分为第一组合指令段、连接指令段和第二组合指令段,其中,第一组合指令段中的各个指令和在第二组合指令段中的各个指令之间分别没有资源冲突;以及
编译装置,用于编译所述程序,其中,分别对周期N(N=2,3,...M)中第一组合指令段中的指令和周期N-1中第二组合指令段中的指令进行并行编译;
其中,分析装置包括:
对于K个指令、依次且重复地确定用于执行第i个指令的功能单元与用于执行第j个指令的功能单元是否有冲突的装置;以及
对于K个指令、依次确定用于执行第i个指令的寄存器与用于执行第j个指令至第K个指令中的任意一个的寄存器是否有冲突的装置,
其中,在K是偶数的情况下,1≤i≤K/2且(K/2+1)≤j≤K,在K是奇数的情况下,1≤i≤((K+1)/2-1)且((K+1)/2+1)≤j≤K。
CN200580042539A 2004-12-13 2005-12-07 针对程序中循环的编译方法和编译设备 Expired - Fee Related CN100583042C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN200410098827 2004-12-13
CN200410098827.7 2004-12-13
PCT/IB2005/054089 WO2006064409A1 (en) 2004-12-13 2005-12-07 Compiling method, compiling apparatus and computer system for a loop in a program

Publications (2)

Publication Number Publication Date
CN101076780A CN101076780A (zh) 2007-11-21
CN100583042C true CN100583042C (zh) 2010-01-20

Family

ID=38982532

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200580042539A Expired - Fee Related CN100583042C (zh) 2004-12-13 2005-12-07 针对程序中循环的编译方法和编译设备

Country Status (1)

Country Link
CN (1) CN100583042C (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103116485B (zh) * 2013-01-30 2015-08-05 西安电子科技大学 一种基于超长指令字专用指令集处理器的汇编器设计方法
CN108279976B (zh) * 2017-12-26 2021-11-19 努比亚技术有限公司 一种编译资源调度方法、计算机及计算机可读存储介质
CN109933368B (zh) * 2019-03-12 2023-07-11 北京市合芯数字科技有限公司 一种指令的发射和验证方法及装置
CN112084013B (zh) * 2019-06-13 2024-04-05 武汉杰开科技有限公司 一种程序调用方法、芯片及计算机存储介质

Non-Patent Citations (8)

* Cited by examiner, † Cited by third party
Title
A software pipelining based VLIW architecture andoptimizingcompiler. BOGONG SU ET.IEEE COMPUT. 1990
A software pipelining based VLIW architecture andoptimizingcompiler. BOGONG SU ET.IEEE COMPUT. 1990 *
A software pipelining basedVLIWarchitectureandoptimizingcompiler. BOGONG SU ET.IEEE COMPUT. 1990
LOOP-FOLDING SCHEDULING BY USINGBOTTOM-UPAPPROACH. MOON S-J ET.Electronics and Communications in Japan,Vol.81 No.6. 1998
LOOP-FOLDING SCHEDULING BY USINGBOTTOM-UPAPPROACH. MOON S-J ET.Electronics and Communications in Japan,Vol.81 No.6. 1998 *
LOOP-FOLDINGSCHEDULINGBYUSINGBOTTOM-UPAPPROACH. MOON S-J ET.Electronics and Communications in Japan,Vol.81 No.6. 1998
Optimization of microprograms. TOKORO M ET.IEEE TRANSACTIONS ON COMPUTERS,Vol.c30 No.7. 1981
SOFTWARE PIPELINING. ALLAN V H ET.ACM COMPUTING SURVEYS,Vol.27 No.3. 1995

Also Published As

Publication number Publication date
CN101076780A (zh) 2007-11-21

Similar Documents

Publication Publication Date Title
US5303357A (en) Loop optimization system
Callahan et al. Instruction-level parallelism for reconfigurable computing
Hoogerbrugge et al. Transport-triggering vs. operation-triggering
Tirumalai et al. Parallelization of loops with exits on pipelined architectures
JP3896087B2 (ja) コンパイラ装置およびコンパイル方法
JPH09282179A (ja) オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置
Codina et al. A unified modulo scheduling and register allocation technique for clustered processors
CN1853164B (zh) 用于开发dsp编译器构件块的组合方法
CN100583042C (zh) 针对程序中循环的编译方法和编译设备
Rim et al. Global scheduling with code-motions for high-level synthesis applications
Shiue High level synthesis for peak power minimization using ILP
Kessler Compiling for VLIW DSPs
US8479179B2 (en) Compiling method, compiling apparatus and computer system for a loop in a program
Kessler Compiling for VLIW DSPs
Guo et al. Code generation for sta architecture
Tirumalai et al. Parallelization of while loops on pipelined architectures
Sánchez Loop pipelining with resource and timing constraints
Kuper et al. Improving GPU Utilization in ML Workloads Through Finer-Grained Synchronization
Verma et al. Fast, quasi-optimal, and pipelined instruction-set extensions
Krishnan et al. Executing sequential binaries on a clustered multithreaded architecture with speculation support
Raj DAGAR: An automatic pipelined microarchitecture synthesis system
Jain et al. An efficient technique for exploring register file size in ASIP synthesis
Karl Some design aspects for VLIW architectures exploiting fine-grained parallelism
Wang et al. Computing programs containing band linear recurrences on vector supercomputers
Lee et al. An effective and efficient code generation algorithm for uniform loops on non-orthogonal DSP architecture

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: NXP CO., LTD.

Free format text: FORMER OWNER: KONINKLIJKE PHILIPS ELECTRONICS N.V.

Effective date: 20080404

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20080404

Address after: Holland Ian Deho Finn

Applicant after: NXP B.V.

Address before: Holland Ian Deho Finn

Applicant before: Koninklijke Philips Electronics N.V.

C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: NXP BV

Free format text: FORMER OWNER: KONINKL PHILIPS ELECTRONICS NV

Effective date: 20110222

C41 Transfer of patent application or patent right or utility model
C56 Change in the name or address of the patentee

Owner name: ST WIRELESS SA

Free format text: FORMER NAME: NXP BV

COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: EINDHOVEN, HOLLAND TO: 1228 NO. 39, DEFEIYE ROAD, WUTESHANG, PULANGLAI, SWISS

CP01 Change in the name or title of a patent holder

Address after: One thousand two hundred and twenty-eight Swiss Prang Eli Ute Jean Deferre at No. 39

Patentee after: ST-ERICSSON S.A.

Address before: One thousand two hundred and twenty-eight Swiss Prang Eli Ute Jean Deferre at No. 39

Patentee before: ST Wireless

TR01 Transfer of patent right

Effective date of registration: 20110222

Address after: One thousand two hundred and twenty-eight Swiss Prang Eli Ute Jean Deferre at No. 39

Patentee after: ST Wireless

Address before: Holland Ian Deho Finn

Patentee before: NXP B.V.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100120

Termination date: 20181207

CF01 Termination of patent right due to non-payment of annual fee