CN1472646A - 适应性强具备最佳化功能的编译装置 - Google Patents
适应性强具备最佳化功能的编译装置 Download PDFInfo
- Publication number
- CN1472646A CN1472646A CNA031458025A CN03145802A CN1472646A CN 1472646 A CN1472646 A CN 1472646A CN A031458025 A CNA031458025 A CN A031458025A CN 03145802 A CN03145802 A CN 03145802A CN 1472646 A CN1472646 A CN 1472646A
- Authority
- CN
- China
- Prior art keywords
- indication
- mentioned
- unit
- optimization
- obtains
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
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
提供可以使用户对编译器的最佳化进行细致控制的灵活性高的编译器。编译器(100)具备解析部(110)以及由处理部(全局区域分配部(121)、软件流水线操作部(122)、循环展开部(123)、if变换部(124)及双指令生成部(125)构成的最佳化部(120)等;解析部(110)用来检测对编译器(100)的来自用户的指示(任选项及附注),处理部根据来自解析部(110)的指示等来执行通过用户做出的选项及附注而指定的个别最佳化处理;全局区域分配部(121)执行配置到全局区域的变量的最大数据长度的指定、和使之配置全局区域的变量的指定以及根据与使之不配置到全局区域的指定有关的选项及附注的最佳化处理。
Description
技术领域
本发明涉及将采用C语言等高级语言所描述的源程序变换为机器语言程序的编译器,特别是涉及到有关编译器的最佳化的指示。
背景技术
以往的编译器主要是面向控制处理的应用而制作的。在控制处理的应用过程中,精密的执行性能及代码长度的调整并不是那么必要,而从减少开发工数的观点出发,用户只给出「性能优先」、「代码长度优先」或者「性能和代码长度的平衡」之类的笼统指示(进行编译时所指定的选项等),将其最佳化策略的几乎全部委托给编译器。
另一方面,在需要关键性的执行性能及代码长度的媒体处理的应用领域方面,正在通过执行由汇编语言而产生的人工编码,以实现需求性能及代码长度为第一目标进行开发。
但是,近些年由于媒体处理应用的增大化、多样化,而使开发工数增多,并且在媒体处理领域中也使采用高级语言的应用开发逐渐变得重要起来。因此,正在进行用来实现采用高级语言的媒体处理应用开发的试验。此时,用户期待着即使是高级语言开发也可以进行更为精密的调整,并且需要对编译器所执行的最佳化策略进行详尽的控制。
因此,不是以往的那种笼统指示,而是需要极细致的控制,这些控制有对编译器的各种最佳化的每一种类指定ON/OFF和其程度,或通过程序中的变量和循环处理等单位使最佳化进行ON/OFF等。
发明内容
因此,本发明是鉴于这种状况而做出的,其目的为提供使用户可以对编译器的最佳化进行精密控制的适应性(flexible)高的编译器。
为达到上述目的,本发明所涉及的编译器是将源程序编译成机器语言程序的编译装置,其特征为,具备取得对所生成的机器语言程序进行最佳化的内容指示的指示取得单元、以及根据所取得的指示来生成机器语言指令串并以此实施最佳化的最佳化单元,上述最佳化单元在上述指示取得单元取得有关配置到全局存储区域的数组数据的指示的场合下,根据所取得的指示来判定在全局存储区域配置的数组数据并以此实施上述最佳化。
另外,本发明所涉及的编译器是将源程序编译成机器语言程序的编译装置,其特征为,具备取得对所生成的机器语言程序进行最佳化的指示的指示取得单元、以及根据所取得的指示来生成机器语言指令串并以此实施最佳化的最佳化单元,上述最佳化单元在上述指示取得单元取得有关软件流水线操作的最佳化的指示的场合下,根据所取得的指示来实施与软件流水线操作有关的最佳化。
另外,本发明所涉及的编译器是将源程序编译成机器语言程序的编译装置,其特征为,具备取得对所生成的机器语言程序进行最佳化的指示的指示取得单元、以及根据所取得的指示来生成机器语言指令串并以此实施最佳化的最佳化单元,上述最佳化单元在上述指示取得单元取得有关循环展开的最佳化的指示的场合下,根据所取得的指示来实施与循环展开有关的最佳化。
另外,本发明所涉及的编译器是将源程序编译成机器语言程序的编译装置,其特征为,具备取得对所生成的机器语言程序进行最佳化的指示的指示取得单元、以及根据所取得的指示来生成机器语言指令串并以此实施最佳化的最佳化单元,上述最佳化单元在上述指示取得单元取得有关if变换的指示的场合下,根据所取得的指示来实施与if变换有关的最佳化。
另外,本发明所涉及的编译器是将源程序编译成机器语言程序的编译装置,其特征为,具备取得对所生成的机器语言程序进行最佳化的指示的指示取得单元、以及根据所取得的指示来生成机器语言指令串并以此实施最佳化的最佳化单元,上述最佳化单元在取得有关配置到存储区域的数组数据对准的指示的场合下,根据所取得的指示将数据配置到存储区域中并以此实施上述最佳化。
还有,本发明不仅可以作为上述的那种编译装置来实现,而且也可以作为将这种编译装置所具备的单元当作步骤的程序来实现,或作为含有向编译器发出的指示的源程序来实现。而且,不言而喻那种程序可以通过CD-ROM等记录媒体和因特网等传输媒体使之广泛传播。
附图说明
图1是作为本发明所涉及的编译器对象的处理器的简略框图。
图2表示的是同一处理器的算术逻辑·比较运算器的简略图。
图3是表示同一处理器的桶式移位器结构的框图。
图4是表示同一处理器的变换器结构的框图。
图5是表示同一处理器的除法器结构的框图。
图6是表示同一处理器的乘法·积和运算器结构的框图。
图7是表示同一处理器的指令控制部结构的框图。
图8表示的是同一处理器的通用寄存器(R0~R31)结构。
图9表示的是同一处理器的连接寄存器(LR)的结构。
图10表示的是同一处理器的转移寄存器(TAR)的结构。
图11表示的是同一处理器的程序状态寄存器(PSR)的结构。
图12表示的是同一处理器的条件标志寄存器(CFR)的结构。
图13表示的是同一处理器的累加器(M0,M1)的结构。
图14表示的是同一处理器的程序计数器(PC)的结构。
图15表示的是同一处理器的PC保存用寄存器(IPC)的结构。
图16表示的是同一处理器的PSR保存用寄存器(IPSR)的结构。
图17是表示同一处理器的流水线动作的时间图。
图18是表示在执行同一处理器所发出的指令时的各个流水线动作的时间图。
图19表示的是同一处理器的并行动作。
图20表示的是同一处理器所执行的指令格式。
图21说明的是属于分类「ALUadd(加法)类」的指令。
图22说明的是属于分类「ALUsub(减法)类」的指令。
图23说明的是属于分类「ALUlogic(逻辑运算)类及其他」的指令。
图24说明的是属于分类「CMP(比较运算)类」的指令。
图25说明的是属于分类「mul(乘法)类」的指令。
图26说明的是属于分类「mac(积和运算)类」的指令。
图27说明的是属于分类「msu(积差运算)类」的指令。
图28说明的是属于分类「MEMld(存储读出)类」的指令。
图29说明的是属于分类「MEMstore(存储写入)类」的指令。
图30说明的是属于分类「BRA(转移)类」的指令。
图31说明的是属于分类「BSasl(算术桶式移位)类及其他」的指令。
图32说明的是属于分类「BSlsr(逻辑桶式移位)类」的指令。
图33说明的是属于分类「CNVvaln(算术变换)类」的指令。
图34说明的是属于分类「CNV(一般变换)类」的指令。
图35说明的是属于分类「SATvlpk(饱和处理)类」的指令。
图36说明的是属于分类「ETC(其他)类」的指令。
图37是表示本发明所涉及的编译器结构的功能框图。
图38(a)表示的是在全局区域中数据等的配置示例,(b)表示的是在全局区域之外的区域中数据的配置示例。
图39是表示全局区域分配部的动作的流程图。
图40表示的是全局区域分配部所做出的最佳化的具体示例。
图41表示的是全局区域分配部所做出的最佳化的具体示例。
图42表示的是全局区域分配部所做出的最佳化的具体示例。
图43说明的是软件流水线操作最佳化。
图44是表示软件流水线操作部的动作的流程图。
图45表示的是软件流水线操作部所做出的最佳化的具体示例。
图46是表示循环展开部的动作的流程图。
图47表示的是循环展开部所做出的最佳化的具体示例。
图48表示的是循环展开部所做出的最佳化的具体示例。
图49表示的是循环展开部所做出的最佳化的具体示例。
图50表示的是不能使用循环展开最佳化的示例。
图51表示的是循环展开部所做出的最佳化的具体示例。
图52是表示if变换部的动作的流程图。
图53表示的是if变换部所做出的最佳化的具体示例。
图54是表示双指令生成部的动作的流程图。
图55表示的是双指令生成部所做出的最佳化的具体示例。
图56表示的是双指令生成部所做出的最佳化的具体示例。
图57表示的是双指令生成部所做出的最佳化的具体示例。
具体实施方式
下面,对本发明所涉及的编译器的实施方式,采用附图予以详细说明。
本实施方式中的编译器是将采用C语言等高级语言所描述的源程序编译成特定的处理器可执行的机器语言程序的交叉编译器,并且具有这样的特征,这就是可以极细致地指定出与所生成的机器语言程序的代码长度和执行时间有关的最佳化指示。
[处理器]
首先,对作为本实施方式中的编译器对象的处理器的一个示例,采用图1~图36予以说明。
作为本实施方式中的编译器对象的处理器,例如与一般的微型计算机相比可执行的指令的并发性较高,并且是以AV媒体类信号处理技术领域为目标而开发的通用处理器。
图1是那种处理器的简略框图的一个示例。该处理器1由指令控制部10、译码部20、寄存器文件30、运算部40、I/F部50、指令存储部60、数据存储部70、扩充寄存器部80以及I/O接口部90来构成。运算部40由执行SIMD型指令运算的算术逻辑·比较运算器41~43、乘法·积和运算器44、桶式移位器45、除法器46以及变换器47来组成。乘法·积和运算器44在不降低位准确度的前提下,最长以65位进行累加。另外,乘法·积和运算器44与算术逻辑·比较运算器41~43相同,可以执行SIMD型指令。还有,该处理器1可以执行最大3并行算术逻辑·比较运算指令。
图2表示的是算术逻辑·比较运算器41~43的简略图。算术逻辑·比较运算器41~43分别由ALU部41a、饱和处理部41b以及标志部41c来构成。ALU部41a由算术运算器、逻辑运算器、比较器及TST器来组成。相应的运算数据的位幅度是8位(在4并行的状态下使用运算器)、16位(在2并行的状态下使用运算器)及32位(在全运算器中是32位数据处理)。还有,对于算术运算结果,可以通过标志部41c等来进行溢出的检测和条件标志的生成。对各运算器、比较器、TST器的结果执行算术右移位、由饱和处理部41b所做出的饱和、最大·最小值的检测、绝对值生成处理。
图3是表示桶式移位器45结构的框图。桶式移位器45由选择器45a、45b、高位桶式移位器45c、低位桶式移位器45d以及饱和处理部45e来构成,其执行数据的算术移位(2个补码结构的移位)或者逻辑移位(无符号移位)。一般情况下,以32位或64位的数据作为输入输出。对于寄存器30a、30b中所存储的被移位数据来说,可采用其他的寄存器或者立即值来指定位移量。数据被执行左63位~右63位的算术或逻辑移位并且以输入位长将其输出。
另外,桶式移位器45对SIMD指令可以使8、16、32、64位的数据产生移位。例如,可以在4并行的状态下处理8位数据的移位。
算术移位是2个补码结构的移位,并且为了进行加法和减法时的小数点的位置调整和2的取幂乘法(2、2的平方、2的(-1)次方、2的(-2)次方的倍数等)而执行。
图4是表示变换器47结构的框图。变换器47由饱和程序块(SAT)47a、BSEQ程序块47b、MSKGEN程序块47c、VSUMB程序块47d、BCNT程序块47e以及IL程序块47f来构成。
饱和程序块(SAT)47a执行对输入数据的饱和处理。由于具有2个对32位数据进行饱和处理的程序块,所以支持2并行的SIMD型指令。
BSEQ程序块47b对从MSB连续的0或1进行计数。
MSKGEN程序块47c将所指定的位区间设为1,此外设为0进行输出。
VSUMB程序块47d将输入数据分为所指定的位幅度,并输出其整体。
BCNT程序块47e对输入数据中为1的位的数目进行计数。
IL程序块47f将输入数据分为所指定的位幅度,并输出对各数据块进行置换后的值。
图5是表示除法器46结构的框图。除法器46将被除数设为64位,将除数设为32位,并分别以32位输出商和余数。至求出商和余数为止需要34周期。可以处理有符号、无符号的两种数据。但是,在被除数和除数方面,有无符号的设定是共用的。此外,还具有输出溢出标志、0位除法标志的功能。
图6是表示乘法·积和运算器44结构的框图。乘法·积和运算器44由2个32位的乘法器(MUL)44a、44b、3个64位的加法器(Adder)44c~44e、选择器44f以及饱和处理部(Saturation)44g来构成,并且执行下列乘法、积和运算。
·32×32位signed的乘法、积和、积差运算
·32×32位unsigned的乘法
·16×16位2并行signed的乘法、积和、积差运算
·32×16位2并行signed的乘法、积和、积差运算
这些运算是对整数、定点格式(h1、h2、w1、w2)的数据加以执行。并且,还要对这些运算执行四舍五入、饱和。
图7是表示指令控制部10结构的框图。指令控制部10由指令高速缓冲存储器10a、地址管理部10b、指令缓冲存储器10c~10e、转移缓冲存储器10f以及转动部(rotation)10g来构成,并进行正常时及转移时的指令提供。由于具有3个(指令缓冲存储器10c~10e)128位的指令缓冲存储器,所以与最大并行执行数目相适应。关于转移处理,在执行转移前预先通过转移缓冲存储器10f等,在下述的TAR寄存器中存储转移目的地地址(settar指令)。使用TAR寄存器中所存储的转移目的地地址来执行转移。
再者,作为本实施方式中的编译器对象的处理器1,例如是具有VLIM体系结构的处理器。在此,VLIM体系结构指的是在1条指令字中存储多个指令(装入、存储、运算、转移等),并将它们全部同时执行的体系结构。程序员可以通过以能够并行执行的指令作为1个发放组而进行描述,使该发放组进行并行处理。在本说明书中,用“;;”来表示发放组的分隔。下面,示出标记法示例。
(示例1)
mov rl,0x23;;
该指令描述出只执行指令mov的意思。
(示例2)
mov r1,0x38
add r0,r1,r2
sub r3,r1,r2;;
这些指令描述表示以3并行来执行指令mov、add、sub。
指令控制部10识别发放组并传送给译码部20。在译码部20中对发放组的指令进行解析,并控制必要的资源。
下面,对于这种处理器1所具备的寄存器予以说明。
处理器1的寄存器组如下面的表1所示。
【表1】
另外,这种处理器1的标志组(可在下述的条件标志寄存器等中予以管理的标志)如下面的表2所示。
【表2】
图8表示的是通用寄存器(R0~R31)30a的结构。通用寄存器(R0~R31)30a是构成作为执行对象的任务的上下文一部分,并为存储数据或地址的32位寄存器组。还有,通用寄存器R30及R31分别作为全局指针、栈指针,由硬件使用。
图9表示的是连接寄存器(LR)30c的结构。再者,与该连接寄存器(LR)30c相关联,该处理器1还具备未图示的保存寄存器(SVR)。连接寄存器(LR)30c是对函数调用时的返回地址进行存储的32位寄存器。还有,保存寄存器(SVR)是对函数调用时的条件标志寄存器的条件标志(CFR.CF)进行保存的16位寄存器。连接寄存器(LR)30c与下述的转移寄存器(TAR)相同,也能够使用于循环高速化。低1位一般可读0,但在写入时需要写0。
例如,在执行call(brl,jmpl)指令的场合下,该处理器1返回到连接寄存器(LR)30c并保存地址,在保存寄存器(SVR)中保存条件标志(CFR.CF)。另外,在执行jmp指令的场合下,从连接寄存器(LR)30c返回并取出地址(转移目的地地址),使程序计数器(PC)复原。再者,在执行ret(jmpr)指令的场合下,从连接寄存器(LR)30c取出转移目的地地址(返回地址),存储(复原)到程序计数器(PC)中。再者,从保存寄存器(SVR)取出条件标志,存储(复原)到条件标志寄存器(CFR)32的条件标志区域CFR.CF中。
图10表示的是转移寄存器(TAR)30d的结构。转移寄存器(TAR)30d是存储转移目标地址的32位寄存器。主要使用于循环的高速化。低1位一般可读0,但在写入时需要写入0。
例如,在执行jmp,jloop指令的场合下,处理器1从转移寄存器(TAR)30d取出转移目的地地址,存储到程序计数器(PC)中。在转移寄存器(TAR)30d中所存储的地址的指令已存储到转移用指令缓冲存储器的场合下,转移补偿(penalty)为0。通过在转移寄存器(TAR)30d中预先存储循环的起始地址,而可以使循环实现高速化。
图11表示的是程序状态寄存器(PSR)31的结构。程序状态寄存器(PSR)31是构成作为执行对象的任务的上下文一部分,并且对下面所示的程序状态信息进行存储的32位寄存器。
位SWE:表示启动VMP(Virtual Multi-Processor)的LP(LogicalProcessor)切换。「0」表示不允许LP切换,「1」表示允许LP切换。
位FXP:表示定点模式。「0」表示模式0,「1」表示模式1。
位IH:表示是中断处理标志,并且是可屏蔽中断处理中。「1」表示是中断处理中,「0」表示不是中断处理中。若产生中断,则会自动进行置位。在通过rti指令从中断复原后,用于辨别是其他中断处理中还是程序处理中。
位EH:是表示对错误或NMI处理中。「0」表示不是错误/NMI中断处理中,「1」表示是错误/NMI中断处理中。在EH=1时产生非同步错误或NMI的场合下,予以屏蔽。另外,在启动VMP时VMP的屏极(plate)切换被屏蔽。
位PL[1:0]:表示特权级。「00」表示特权级0,也就是处理器抽象级,「01」表示特权级1(不能设定),「10」表示特权级2,也就是系统程序级,「11」表示特权级3,也就是用户程序级。
位LPIE3:表示启动LP原有的中断3。「1」表示允许中断,「0」表示不允许中断。
位LPIE2:表示启动LP原有的中断2。「1」表示允许中断,「0」表示不允许中断。
位LPIE1:表示启动LP原有的中断1。「1」表示允许中断,「0」表示不允许中断。
位LPIE0:表示启动LP原有的中断0。「1」表示允许中断,「0」表示不允许中断。
位AEE:表示不一致(misalignment)例外启动。「1」表示允许不一致例外启动,「0」表示不允许不一致例外启动。
位IE:表示启动级中断。「1」表示允许级中断,「0」表示不允许级中断。
位IM[7:0]:表示中断屏蔽。定义成0~7级,并且在每一级都可以进行屏蔽。0级为最高级。只有未被IM屏蔽的中断请求中具有最高级的中断请求才能被处理器1受理。若受理中断请求,则所受理的级之下的级会通过硬件被自动屏蔽。IM「0」是0级屏蔽,IM「1」是1级屏蔽,IM「2」是2级屏蔽,IM「3」是3级屏蔽,IM「4」是4级屏蔽,IM「5」是5级屏蔽,IM 「6」是6级屏蔽,IM「7」是7级屏蔽。
reserved:表示保留位。一般情况下可读0。在写入时需要写入0。
图12表示的是条件标志寄存器(CFR)32的结构。条件标志寄存器(CFR)32是构成作为执行对象的任务的上下文一部分的32位寄存器,并且由条件标志(条件标志)、操作标志(运算标志)、向量条件标志(向量条件标志)、运算指令用位的位置指定字段以及SIMD数据对齐信息字段来构成。
位ALN[1:0]:表示对齐模式。对valnvc指令的对齐模式进行设定。
位BPO[4:0]:表示位的位置。在位的位置指定的必要指令中使用。
位VC0~VC3:是向量条件标志。从LSB一侧的字节或半字按顺序对应于VC0,MSB一侧对应于VC3。
位OVS:是溢出标志(概要)。可在饱和的产生和溢出的检测中进行设定。在没有检测出的场合下,保持指令执行前的值。清除必须通过软件来进行。
位CAS:是进位标志(概要)。在采用addc指令产生进位或者采用subc指令产生借位的场合下,进行设定。在采用addc指令未产生进位或者采用subc指令未产生借位的场合下,保持指令执行前的值。清除必须通过软件来进行。
位C0~C7:是条件标志。表示有条件执行指令中的条件(TRUE/FALSE)。有条件指令的条件和位C0~C7之间的对应可以由指令中含有的谓词·位来决定。还有,标志C7一般情况下值为1。可以忽视向标志C7的FALSE条件的反映(写入0)。
reserved:表示保留位。一般情况下读0。在写入时需要写0。
图13表示的是累加器(M0,M1)30b的结构。该累加器(M0,M1)30b构成作为执行对象的任务的上下文(context)一部分,并且由图13(a)所示的32位寄存器MH0-MH1(乘除法·积和用寄存器(高位32位))以及图13(b)所示的32位寄存器ML0-ML1(乘除法·积和用寄存器(低位32位))来组成。
寄存器MH0-MH1,在乘法指令中用于存储结果的高位32位。在积和指令中,可作为累加器的高位32位来使用。另外,在处理位流的场合下可以与通用寄存器配合使用。寄存器ML0-ML1,在乘法指令中用于存储结果的低位32位。在积和指令方面,作为累加器的低位32位来使用。
图14表示的是程序计数器(PC)33的结构。该程序计数器(PC)33是构成作为执行对象的任务的上下文一部分,并对执行过程中的指令地址进行保存的32位寄存器。
图15表示的是PC保存用寄存器(IPC)34的结构。该PC保存用寄存器(IPC)34是构成作为执行对象的任务的上下文一部分的32位寄存器。
图16表示的是PSR保存用寄存器(IPSR)35的结构。该PSR保存用寄存器(IPSR)35是构成作为执行对象的任务的上下文一部分,并用于保存程序状态寄存器(PSR)31的32位寄存器,与程序状态寄存器(PSR)31的保留位相对应的部分始终读出0,但在写入时需要写0。
下面,对于作为本实施方式中的编译器对象的处理器1的存储空间,予以说明。例如,在处理器1中将4GB的线性存储空间分割为32个,并给128MB单位的空间分派指令SRAM(Static RAM)和数据SRAM。以该128MB的空间作为1个程序块(block),来设定准备对SAR(SRAM Area Register)进行存取的程序块。在所存取的地址是用SAR所设定的空间的场合下,对直接指令SRAM/数据SRAM进行存取,但在不是用SAR所设定的空间的场合下,对总线控制器(BCU)发出存取请求。在BCU上连接有单片存储器(OCM)、外部存储器、外部设备以及I/O端口等,可对这些设备进行读写。
图17是表示作为本实施方式中的编译器对象的处理器1的流水线动作的时间图。该处理器1如本图所示,例如基本上由取指令、指令分派(分派)、译码、执行、写入的5步流水线(pipeline)来构成。
图18是表示在执行这种处理器1所发出的指令时的各个流水线动作的时序(timing)图。在取指令阶段,对通过程序计数器(PC)33指定的地址的指令存储器进行访问,并将指令传送给指令缓冲存储器10c~10e等。在分派指令阶段,执行对转移类指令的转移目的地地址信息的输出、输入寄存器控制信号的输出以及可变长指令的分派,并将指令传送给指令寄存器(IR)。在译码阶段,将IR输入给译码部20,并输出运算器控制信号以及存储器存取信号。在执行阶段,执行运算,并将运算结果输出给数据存储器或通用寄存器(R0~R31)30a。在写入阶段,将数据传输、运算结果存储到通用寄存器中。
作为本实施方式中的编译器的对象的处理器1,例如可以通过VLIW体系结构在最高3并行的状态下执行上述处理。因此,对于图18所示的动作,本处理器1以图19所示的时刻并行执行。
下面,对于如上构成的处理器1的指令表的示例,予以说明。
下面的表3~表5是将作为本实施方式中的编译器对象的处理器1所执行的指令按照不同类别分类的表格。
【表3】
【表4】
【表5】
再者,表格中的「运算器」表示该指令所使用的运算器。运算器的缩写词的意思如下所述。即,「A」是ALU指令,「B」是转移指令,「C」是变换指令,「DIV」是除法指令,「DBGM」是调试指令,「M」是存储器存取指令,「S1」、「S2」是移位指令,「X1」、「X2」是乘法指令。
图20表示的是本处理器1所执行的指令格式。
还有,在图中缩写词的意思如下所述。即,「P」是谓词(执行条件:指定8个条件标志C0~C7中的任一个)、「OP」是操作码字段、「R」是寄存器字段、「I」是立即值字段,「D」是位移字段。
图21~图36说明的是处理器1所执行的指令的大致功能。图21说明的是属于分类「ALUadd(加法)类」的指令,图22说明的是属于分类「ALUsub(减法)类」的指令,图23说明的是属于分类「ALUlogic(逻辑运算)类及其他」的指令,图24说明的是属于分类「CMP(比较运算)类」的指令,图25说明的是属于分类「mul(乘法)类」的指令,图26说明的是属于分类「mac(积和运算)类」的指令,图27说明的是属于分类「msu(积差运算)类」的指令,图28说明的是属于分类「MEMld(存储读出)类」的指令,图29说明的是属于分类「MEMstore(存储写入)类」的指令,图30说明的是属于分类「BRA(转移)类」的指令,图31说明的是属于分类「BSasl(算术桶式移位)类及其他」的指令,图32说明的是属于分类「BSlsr(逻辑桶式移位)类及其他」的指令,图33说明的是属于分类「CNVvaln(算术变换)类」的指令,图34说明的是属于分类「CNV(一般变换)类」的指令,图35说明的是属于分类「SATvlpk(饱和处理)类」的指令,图36说明的是属于分类「ETC(其他)类」的指令。
在这些附图中,项目「SIMD」表示该指令的类型(区别SISD(SINGLE)还是SIMD),项目「长度」表示作为运算对象的各个操作数(operand)的长度,项目「指令」表示该指令的操作码,项目「操作数」表示该指令的操作数,项目「CFR」表示条件标志寄存器的变化,项目「PSR」表示处理器状态寄存器的变化,项目「代表性的动作」表示动作的概要,项目「运算器」表示可使用的运算器,项目「3116」表示指令的长度。
下面,对有关在下述的具体示例中所使用的主要指令的处理器1的动作进行说明。
ld Rb,(Ra,D10)
从对寄存器Ra加上位移(displacement)值(D10)后的地址将字数据装入寄存器Rb。
ldh Rb,(Ra+)I9
从寄存器Ra所示的地址对半字数据进行代码扩充并装入。还有,对寄存器Ra加上立即值(I9)并存储到寄存器Ra中。
ldp Rb:Rb+1,(Ra+)
从寄存器Ra所示的地址在寄存器Rb和Rb+1中对2个字数据进行代码扩充并装入。还有,对寄存器Ra加上8并存储到寄存器Ra中。
ldhp Rb:Rb+1,(Ra+)
从寄存器Ra所示的地址对2个半字数据进行代码扩充并装入。还有,对寄存器Ra加上4并存储到寄存器Ra中。
setlo Ra,I16
在寄存器Ra中对立即值(I16)进行代码扩充并存储。
sethi Ra,I16
在寄存器Ra的高位16bit上存储立即值(I16)。不影响到寄存器Ra的低位16bit。
ld Rb,(Ra)
从寄存器Ra所示的地址将字数据装入寄存器Rb。
add Rc,Ra,Rb
对寄存器Ra和Rb进行加法运算,并存储到寄存器Rb中。
addu Rb,GP,I13
对寄存器GP加上立即值(I13),并存储到寄存器Rb中。
st(GP,D13),Rb
在这样的地址中存储寄存器Rb中所存储的半字数据,该地址是对寄存器GP加上位移值(D13)后的地址。
sth(Ra+)I9,Rb
在寄存器Ra所示的地址中存储寄存器Rb中所存储的半字数据。并且,对寄存器Ra加上立即值(I9)并存储到寄存器Ra中。
stp(Ra+),Rb:Rb+1
在寄存器Ra所示的地址中存储寄存器Rb和Rb+1中所存储的2个字数据。还有,对寄存器Ra加上8并存储到寄存器Ra中。
ret
使用于来自子程序调用的返回。转移到LR中所存储的地址。将SVR.CF转送到CFR.CF。
mov Ra,I16
在寄存器Ra中对立即值(I16)进行代码扩充并存储。
settar C6,D9
执行下面的处理。(1)将对PC和位移值(D9)进行了加法运算的地址存储到转移寄存器TAR中。(2)取出该地址指令存储到转移用指令缓冲存储器中。(3)将C6置位为1。
settar C6,Cm,D9
执行下面的处理。(1)将对PC和位移值(D9)进行了加法运算的地址存储到转移寄存器TAR中。(2)取出该地址指令存储到转移用指令缓冲存储器中。(3)将C6置位为1,将Cm置位为0。
settar C6,C2:C4,D9
执行下面的处理。(1)将对PC和位移值(D9)进行了加法运算的地址存储到转移寄存器TAR中。(2)取出该地址指令存储到转移用指令缓冲存储器中。(3)将C4和C6置位为1,将C2和C3置位为0。
jloop C6,TAR,Ra2,-1
在循环中使用。执行下面的处理。(1)对寄存器Ra2加上-1,并存储到寄存器Ra2中。若寄存器Ra2变得比0小,则给C6置位0。(2)转移到转移寄存器TAR所示的地址。
jloop C6,Cm,TAR,Ra2,-1
在循环中使用。执行下面的处理。(1)给Cm置位1。(2)对寄存器Ra2加上-1,并存储到寄存器Ra2中。若寄存器Ra2变得比0小,则给C6置位0。(3)转移到转移寄存器TAR所示的地址。
jloop C6,C2:C4,TAR,Ra2,-1
在循环中使用。执行下面的处理。(1)将C3转送给C2,将C4转送给C3和C6。(2)对寄存器Ra2加上-1,并存储到寄存器Ra2中。若寄存器Ra2变得比0小,则给C4置位0。(3)转移到转移寄存器TAR所示的地址。
mul Mm,Rb,Ra,I8
对寄存器Ra和立即值(I8)进行有符号的乘法运算,并将结果存储到寄存器Mm和寄存器Rb中。
mac Mm,Rc,Ra,Rb,Mn
对寄存器Ra和Rb进行整数乘法运算,并与寄存器Mn进行加法运算。将结果存储到寄存器Mm和寄存器Rc中。
lmac Mm,Rc,Ra,Rb,Mn
以半字向量方式使用寄存器Rb。对寄存器Ra和Rb的低位16bit进行整数乘法运算,并与寄存器Mn进行加法运算。将结果存储到寄存器Mm和寄存器Rc中。
jloop C6,C2:C4,TAR,Ra2,-1
在循环中使用。执行下面的处理。(1)将C3转送给C2,将C4转送给C3和C6。(2)对寄存器Ra2加上-1,并存储到寄存器Ra2中。若寄存器Ra2变得比0小,则给C4置位0。(3)转移到转移寄存器TAR所示的地址。
asr Rc,Ra,Rb
使寄存器Ra只以Rb所示的位数目产生算术右移位。寄存器Rb在±31之内予以饱和,在为负时成为算术左移位。
br D9
对当前的PC加上位移值(D9),并转移到该地址。
jmpf TAR
转移到转移寄存器TAR中存储的地址。
cmpCC Cm,Ra,I5
在CC中可描述下面的CC比较条件。
eq/ne/gt/ge/gtu/geu/le/lt/leu/ltu
在CC为eq/ne/gt/ge/le/lt的场合下,I5是有符号的值,并进行代码扩充加以比较。在CC为gtu/geu/leu/ltu的场合下,I5是无符号的值。
[编译器]
接着,对以上面的处理器1为目标的本实施方式中的编译器,予以说明。
图37是表示本实施方式中的编译器100结构的功能框图。该编译器100是将采用C语言等高级语言所指定描述的源程序101变换为以上述处理器1为目标处理器的机器语言程序102的交叉处理器,并通过在个人计算机等的计算机可执行的程序来实现。其大致划分由解析部110、最佳化部120以及输出部130来构成。
解析部110通过对作为编译对象的源程序101及对该编译器100的来自用户的指示等进行词法解析,将对编译器100的指示(选项及附注)传达到最佳化部120和输出部130,将作为编译器对象的程序变换成内部格式数据。
还有,「选项」指的是当起动编译器100时作为编译器对象的源程序101的指定,同时为用户可以任意指定的给编译器100的指示,其包括对所生成的机器语言程序102的代码长度及执行时间进行最佳化的指示等。例如,用户在对源程序101「sample.c」进行编译时,可以采用指令「ammmp-cc」在计算机上输入
c:¥>ammmp-cc-o-max-gp-datasize=40sample.c。
该指令中附加的指示「-o」及「-max-gp-datasize=40」就是选项。采用这样的选项所发出的指示是作为对源程序101整体的指示来使用的。
另外,「附注(或编译指示)」指的是,在源程序101中用户可以任意指定(配置)的给编译器100的指示,并且与选项相同包括对所生成的机器语言程序102的代码长度及执行时间进行最佳化的指示等。在本实施方式的编译器100中是以「#pragma」开始的字符串。例如,用户可以在源程序101中预先描述出
#pragma_no_gp_access变量名
这样的语句。该语句就是附注(编译指示)。这样的附注与选项有所不同,是作为紧接在该附注之后所配置的只对变量和循环处理等的个别指示来使用的。
最佳化部120具有处理部(全局区域分配部121、软件流水线操作部122、循环展开部123、if变换部124以及双指令生成部125),该处理部对于从解析部110所输出的源程序101(内部格式数据),按照来自解析部110的指示等,除去执行为实现从下述的(1)(2)(3)之中所选择出的最佳化所需的整体性最佳化处理之外,还执行通过用户所做出的选项及附注所指定出的分别最佳化处理,(1)是使提高执行速度优先的最佳化,(2)是使减小代码长度优先的最佳化,(3)是执行速度和代码长度双方的最佳化。
全局(global)区域分配部121执行按照选项及附注的最佳化处理,该选项及附注与配置在全局区域(作为公用的数据区域而超出函数并可参照的存储区域)中的变量(数组)的最大数据长度的指定、使之配置到全局区域的变量的指定以及使之不配置到全局区域的变量的指定有关。
软件流水线操作部122执行按照选项及附注的最佳化处理,该选项及附注与不执行软件流水线操作的指示、在可消除序言部分·结尾部分的范围内执行软件流水线操作的指示以及不消除序言部分·结尾部分而在可能范围内执行软件流水线操作的指示有关。
循环展开部123执行按照选项及附注的最佳化处理,该选项及附注与执行循环展开的指示、不执行循环展开的指示、使循环进行重复的最低次数的保证、使循环进行偶数次重复的保证以及使循环进奇数次行重复的保证有关。
if变换部124执行按照选项及附注的最佳化处理,该选项及附注与执行if变换的指示以及不执行if变换的指示有关。
双指令生成部125执行按照附注的最佳化处理,该附注与数组和结构的起始地址调整的指定以及函数自变量的指针变量和局部指针变量所指出的数据调整的保证有关。
输出部130通过对实施过由最佳化部120所做出的最佳化处理的源程序101,将内部格式数据置换成对应的机器语言指令或对标号和模块等的地址加以解决,而生成机器语言程序102,并作为文件等予以输出。
下面,对于如上所构成的本实施方式中的编译器100的特征性动作,通过列举具体示例予以说明。
[全局区域分配部121]
首先,对于全局区域分配部121的动作及其作用,予以说明。全局区域分配部121大致划分为执行(1)与全局区域配置的最大数据长度的指定有关的最佳化,(2)与全局区域配置的指定有关的最佳化。
首先,对(1)与全局区域配置的最大数据长度的指定有关的最佳化,予以说明。
在上述处理器1中已备有全局指针寄存器(gp:通用寄存器R30),并且保持全局区域(以下为gp区域)的起始地址。对于从gp区域起始的位移为最大14位的范围,可采用1条指令进行存取。
在该gp区域中,可以配置外部变量·静态变量等的数组。但是,在超出可用1条指令存取的范围的场合下反过来会使性能下降,因而需要引起注意。
图38(a)表示的是在全局区域内数据等的配置示例。在此,数组A的数据长度是不超过最大数据长度的值,数组C的数据长度是超过最大数据长度的值。
在gp区域中向置有实体的数组A的存取,象下面的示例那样可采用1条指令来进行。
示例:ld rl,(gP,_A-.MN.gptop);;
还有,在该示例中「.MN.gptop」是表示与全局指针寄存器相同的地址的节名(标号)。
另一方面,在超过gp区域配置的最大数据长度的数组C的场合下,可在gp区域之外配置实体,并且在gp区域只配置数组C的地址(再者,在使用下述的#pragma_no_gp_access指令的场合下,在gp区域中既不存储实体也不存储地址)。
这种场合下,向数组C的存取,象下面的示例那样需要多个指令。
示例:gp地址间接存取的场合下
ld r1,(gP,_C$-.MN.gptop);;
ld r1,(r1,8);;
示例:绝对地址存取的场合下
setlo r0,LO(_C+8);;
sethi r0,HI(_C+8);;
1d r0,(r0);;
还有,象图38(b)所示的在全局区域之外的区域的配置示例那样,即使在gp区域的可用1条指令进行存取的范围外配置有实体的数组Z的场合下,也能够生成如下的代码。
ld r0,(gP,_Z-.MN.gptop);;
由于该代码已超出可用1条指令进行存取的范围,所以可通过连接程序将其展开为多个指令。因此,不能是1条指令存取。
还有,gp区域的1条指令存取范围是最大14位的范围,但是根据对象类型的长度其范围不同。也就是说,若为8字节类型则是14位范围,若为4字节类型则是13位范围,若为2字节类型则是12位范围,若为1字节类型则是11位范围。
编译器100在gp区域配置最大数据长度(默认32字节)以下的数组·结构的实体。另一方面,对于超过全局区域配置的最大数据长度的对象,在gp区域之外配置实体,在gp区域中只配置该对象的起始地址。
在此,如果在gp区域中有余量,则配置数据长度32字节之上的对象,可生成更好的代码。
因此,通过使用下面的选项,用户可以将该最大数据长度指定为任意的值。
·编译选项
-mmax-gp-datasize=NUM
在此,NUM是可以配置到全局区域的一个数组及结构的最大数据长度的指定字节(默认32字节)。
图39是表示全局区域分配部121的动作的流程图。在通过解析部110检测出上述选项的场合下(步骤S100、S101),全局区域分配部121将在源程序101说明的不超过所指定的长度(NUM字节)的所有变量(数组),配置到全局区域中;并且,对于超过NUM字节的变量,只将其起始地址配置到全局区域,并且将其实体配置到全局区域之外的存储区域(步骤S102)。通过该选项,可以进行提高速度和减小长度这样的最佳化。
还有,在该-mmax-gp-datasize选项中不能对不同变量进行配置指定。为了对不同的变量指定配置/不配置到gp区域,使用后述的#pragma_gp_access指令则较好。另外,外部变量·静态变量最好尽可能地配置到可进行1条指令存取的gp区域中。还有,在使用extem说明对在其他文件所定义的外部变量进行存取的场合下,最好不要省略其外部变量的长度而加以明确描述。例如,在外部变量的定义为
int a[8];
的场合下,在所使用的文件中最好说明为
extem int a[8];。
再者,在对extem说明的外部变量使用#pragma_gp_access指令的场合下,需要使定义的指定(所配置的区域)和使用方的指定(进行存取的方法)一定相吻合。
下面,示出通过使用这种选项而产生的最佳化的具体示例。
图40表示的是变更了最大数据长度时的最佳化的具体示例。也就是说,由于在默认的状态下进行编译,其结果是在gp区域仍然有填充位,所以象下面的指令示例那样,表示出在对最大数据量进行变更并加以编译时在两个实例中得到的生成代码的示例。
c:¥>ammmp-cc-O-mmax-gp-datasize=40sample.c
在此,假设数组c的对象长度为40字节。本图的左栏是在默认状态下进行编译时所生成的代码示例,本图的右栏是在将最大数据长度变更为40进行编译时所生成的代码示例。还有,本图的最上部、中上部、中下部、最下部分别表示出各栏的标题、取样程序(源程序101)、由此生成的代码(机器语言程序102)、该生成代码的周期数及代码长度(下面,对于表示最佳化具体示例的其他附图也是一样的)。
如从本图左栏的生成代码所了解的那样,由于数组c的实体配置在gp区域之外,所以成为采用多个指令的绝对地址存取。另一方面,如从本图右栏的生成代码所了解的那样,由于已指定最大数据长度(40)为可使数组c的实体配置于gp区域,所以数组c的实体可配置在gp区域,成为采用1条指令存取的gp相对存取,使执行速度得到提高。也就是说,在默认方式中,生成可在10个周期中执行的8字节代码,并与此相反,通过最大数据长度的变更而生成可以7个周期中执行的5字节代码。
作为另一个具体示例,在图41中表示出在文件外定义的外部变量时的具体示例。在此,假设gp区域配置的最大数据长度为40。本图的左栏示出在与文件外定义的外部变量有关而没有长度指定的场合下所生成的代码示例,本图的右栏示出在有长度指定的场合下所生成的代码示例。
如本图的左栏所示,由于外部定义数组a和外部定义数组c的长度都不清楚,因而不能通过编译器100判断是否已配置在gp区域中,而生成采用多个指令的绝对地址存取的代码。
另一方面,如本图的右栏所示,由于数组a的定义长度未超过40字节,因而在gp区域配置实体,并使用全局指针寄存器(gp)来生成采用1条指令的gp相对存取的代码。另外,由于也已明确指定出外部定义数组c的长度,并且是不超过gp区域配置的最大数据长度,所以视为数组c的实体已配置在gp区域的数据长度,生成gp相对存取的代码。这样,在不指定文件外定义的外部变量长度的场合下,生成可在10个周期中执行的12字节代码,与此相比,在已执行最大数据长度的变更和外部变量的长度指定的场合下,生成可在7个周期中执行的5字节代码。
其次,对于由全局区域分配部121所做出的(2)与全局区域配置的指定有关的最佳化,予以说明。
在上述的全局区域配置的最大数据长度指定(-mmax-gp-datasize任选项)过程中,由于只用最大数据长度来指定gp区域的配置,所以有时连不希望的变量也会配置到gp区域中。
因此,对每个变量备有指定gp区域配置的pragma指令。
·#pragma指令
#pragma_no_gp_access变量名[,变量名,…]
#pragma_gp_access变量名[,变量名,…]
此处,[]内的内容意味着可以省略。在进行多个指定的场合下,可以用″,″(逗号)隔开变量名。还有,在选项和附注指令出现重复或自相矛盾的场合下,使附注指令优先。
对于这样的附注指令,编译器100如下所述进行动作。也就是说,在图39中,在通过解析部110检测出附注指令「#pragma_no_gp_access变量名[,变量名,…]」的场合下(S100、S101),全局区域分配部121对于此处所指定的变量,不管选项指定而生成不会使之配置到全局区域的代码(步骤S103);另一方面在通过解析部110检测出附注指令「#pragma_gp_access变量名[,变量名,…]」的场合下(S100、S101),全局区域分配部121对于此处所指定的变量,不管选项指定而生成使之配置到全局区域的代码(步骤S104)。通过这些#pragma指令,使提高速度和减小长度这样的最佳化成为可能。
再者,在指定出pragma_no_gp_access指令的场合下,全局区域分配部121对于该变量,在gp区域中既不配置实体也不配置地址。另外,比起最大数据长度指定,使pragma_gp_access指令方面更为优先。倘若,在与同一变量有关而出现不同的指定的场合下,则会使编译器100的动作不确定。对于外部变量·静态变量,最好尽可能配置到可进行1条指令存取的gp区域中。
下面,示出使用这种附注指令而产生的最佳化的具体示例。若使用#pragma_gp_access指令,则可以使超过gp区域配置的最大数据长度的外部变量·静态变量配置到gp区域中,因而示出其最佳示例。
图42表示的是在使用#pragma_no_gp_access指令的场合下所生成的代码示例(左栏)和在使用#pragma_gp_access指令的场合下所生成的代码示例(右栏)。
如本图左栏所示,因为数组c的长度是40字节,所以在默认的场合下只有起始地址可配置在gp区域,实体不能配置在gp区域。另外,因为进行过外部定义的数组a的长度是32字节,所以在默认的场合下编译器100判断出实体已配置在gp区域。
但是,采用#pragma_no_gp_access指令,对于数组c来说在gp区域中既不配置起始地址也不配置实体,而在gp区域之外配置实体并生成绝对地址存取的代码。对于外部定义的数组a,假定为已在gp区域之外配置有实体,而生成绝对地址存取的代码。
另一方面,如本图右栏所示,由于数组c长度为40字节,因而在默认的场合下不能配置到gp区域,但可采用#pragma_gp_access指令使数组c的实体配置到gp区域。文件外定义的数组a虽然长度不清楚,但采用#pragma指令作为已配置到gp区域的数组,而生成gp相对存取代码。
这样,在使用#pragma_no_gp_access指令的场合下,生成可在10个周期中执行的12字节代码,与此相反在使用#pragma_gp_access指令的场合下,生成可在7个周期中执行的5字节代码。
再者,在对extern说明的外部变量使用#pragma_gp_access指令的场合下,最好使定义的指定(所配置的区域)和使用方的指定(进行存取的方法)一定相吻合。
[软件流水线操作部122]
下面,对于软件流水线操作部122的动作和其作用,予以说明。
软件流水线操作的最佳化是循环高速化的手法之一。若执行该最佳化,则使循环结构变换成序言部分、核心部分、结尾部分。再者,软件流水线操作的最佳化是在判断出据此可提高执行速度的场合下执行。核心部分使各个迭代(重复)做出其前后的迭代和重叠。由此,可减少每1迭代的平均处理时间。
图43(a)是循环处理中的序言部分、核心部分、结尾部分的概念图。在此,表示出在迭代之间没有依赖关系的指令X、Y、Z做出5次重复时的指令代码、执行图、生成代码图的示例。还有,循环处理指的是采用for语句、while语句、do语句等的重复处理。
在此,序言部分、结尾部分如果有可能,则象图43(b)及(c)的方法所示的那样,可将其消除。但是,如果没有可能则不能将其消除,而有时会增加代码长度。因此,备有对软件流水线操作最佳化的动作进行指定的选项及#pragma指令。
图43(b)是表示在循环处理中为消除序言部分·结尾部分所需的处理的示意图。也就是说,对于图43(a)所示的在迭代之间没有依赖关系的指令X、Y、Z的5次重复,示出重新排列在上述序言部分·结尾部分的示意图中所示的循环的生成代码图。但是,图中带有[]的指令可以读入但不能执行。
这样一来,就会知道序言部分·结尾部分成为与核心部分相同的指令排列。因此,循环次数只增加序言部分·结尾部分的执行量(4次),但通过由谓词(执行条件)控制带有[]的指令,如图43(c)所示,可以只在核心部分生成代码。
图43(c)所示的生成代码的执行顺序如下。
在第1次,不执行附加有谓词[C2]、[C3]的指令。因而,只执行[C4]X。
在第2次,不执行附加有谓词[C2]的指令。因而,只执行[C3]Y、[C4]X。
在第3~5次,执行[C2]Z、[C3]Y、[C4]X的全部。
在第6次,不执行附加有谓词[C4]的指令。因而,只执行[C2]Z、[C3]Y。
在第7次,不执行附加有谓词[C3]、[C4]的指令。因而,只执行[C2]Z。
这样,就会在核心部分的第1次、第2次循环中执行序言部分,在第6次、第7次中执行结尾部分。
因此,在有序言部分·结尾部分的循环过程中会使代码长度增加,但由于会减少循环次数,所以能够期望执行速度的提高。相反地,在消除序言部分·结尾部分的循环过程中虽然可以减小代码长度,但会使循环次数增加,因此会增加执行周期数。
因此,为了能够对这样的最佳化选择进行指定,而备有下面的编译选项和附注指令。
·编译选项
-fno-software-pipelining
·#pragma指令
#pragma_no_software_pipelining
#pragma_software_pipelining_no_proepi
#pragma_software_pipelining_with_proepi
还有,在选项和附注指令出现重复或自相矛盾的场合下,使附注指令优先。
图44是表示软件流水线操作部122的动作的流程图。在通过解析部110检测出选项[-fno-software-pipelining]的场合下(步骤S110、S111),软件流水线操作部122不对作为对象的源程序101中的全部循环处理执行软件流水线操作最佳化(步骤S112)。通过该任选项,可以避免使增加代码长度。
另外,在通过解析部110检测出附注指令[#pragma_no_software_pipelining]的场合下(步骤S110、S111),软件流水线操作部122不管选项指定,而对于处在紧接着该指定之后的1个循环处理,不执行软件流水线操作最佳化(步骤S113)。据此,可减小代码长度。
另外,在通过解析部110检测出附注指令[#pragma_software_pipelining_no_proepi]的场合下(步骤S110、S111),软件流水线操作部122不管任选项指定,而对于处在紧接着该指定之后的1个循环处理,在可消除序言部分·结尾部分的范围内执行软件流水线操作最佳化(步骤S114)。据此,可以谋求速度的提高和长度的减小。
另外,在通过解析部110检测出附注指令[#pragma_software_pipelining_with_proepi]的场合下(步骤S110、S111),软件流水线操作部122不管任选项指定,而对于处在紧接着该指定之后的1个循环处理,不消除序言部分·结尾部分而在可能的范围内执行软件流水线操作最佳化(步骤S115)。据此,可以使速度得到提高。
再者,软件流水线操作部122对于#pragma_software_pipelining_no_proepi指令,在可消除序言部分·结尾部分的范围内执行软件流水线操作最佳化,而对于#pragma_software_pipelining_with_proepi,即使可以消除序言部分·结尾部分也不会将其消除。原因是,即使是可以消除序言部分·结尾部分的循环,如图45所示的示例那样通过对序言部分·结尾部分的消除进行抑制,虽然会使代码长度增加,但可以期望执行速度的提高。另外,如下所述,在循环处理的最低重复次数超过因软件流水线操作而重叠的迭代数的场合下,软件流水线操作部122执行软件流水线操作的最佳化。
图45表示的是软件流水线操作最佳化的示例。再者,在该示例中,为了执行软件流水线操作最佳化,而附加编译选项-O(执行速度和代码长度减小的最佳化)来进行编译。
如从本图左栏的中下部所示的机器语言程序102的示例所了解的那样,在执行了默认的软件流水线操作最佳化的场合下,序言部分·结尾部分的代码也被消除,循环次数是101次,核心部分的周期数为2个周期,合计以207个周期执行,使循环的性能得到提高。
另一方面,如从本图右栏的中下部所示的源程序101所了解的那样,是对左栏的源程序101追加指定#pragma_software_pipelining_with_proepi指令,并对循环的序言部分·结尾部分的消除进行抑制的示例。据此,如从右栏的中下部所示的机器语言程序102的示例所了解的那样,由于生成序言部分·结尾部分的代码,因而虽然与左侧相比使代码长度增加,但是由于循环次数已减少到99次,并且核心部分周期数是2个周期,因此以合计204个周期执行,并比起左栏的情形使执行速度进一步提高。还有,在序言部分·结尾部分可以与外部代码并行执行的场合下,可以忽略因序言部分·结尾部分而带来的速度下降的影响。
[循环展开部123]
下面,对于循环展开部123的动作和其作用,予以说明。循环展开部123大致划分为执行(1)与循环展开的指定有关的最佳化,(2)与关于循环的重复次数的保证有关的最佳化。
首先,对于(1)与循环展开的指定有关的最佳化,予以说明。
循环展开最佳化是指循环高速化的手法之一。通过同时执行多个迭代,使循环内的执行速度得以高速化。由于执行循环展开最佳化,因而可以通过ldp/stp指令的生成和并行程度的提高来谋求执行速度的提高。但是,会产生使代码长度增加以及由于场合的不同而发生因寄存器不够而引起的漏失,反而使性能下降这样的状况。
还有,双装入(双存储)指令(1dp/stp指令)指的是用1条指令来实现二个装入指令(存储指令)的指令。另外,「漏失」指的是为了确保空闲寄存器,而使正在使用的寄存器暂时保存为栈式存储器。这种场合下,由于寄存器的保存·复原,而生成装入·存储指令。
备有对这种循环展开最佳化的动作进行指定的选项及#pragma指令。
·编译选项
-fino-loop-unroll
·#pragma指令
#pragma_loop_unroll
#pragma_no_loop_unrolling
图46是表示循环展开部123的动作的流程图。在通过解析部110检测出选项[-fno-loop-unroll]的场合下(步骤S120、S121),循环展开部123不对作为对象的源程序101中的全部循环处理执行循环展开最佳化(步骤S122)。通过该选项,可以避免增加代码长度。
另外,在通过解析部110检测出附注指令[#pragma_loop_unroll]的场合下(步骤S120、S121),循环展开部123对处在紧下面的1个循环处理执行循环展开最佳化(步骤S123)。据此,可以使速度得到提高。
另外,在通过解析部110检测出附注指令[#pragma_no_loop_unrolling]的场合下(步骤S120、S121),循环展开部123不对处在紧下面的1个循环处理执行循环展开最佳化(步骤S124)。据此,可以避免增加代码长度。
再者,在最佳化级的指定中已指定出-O/-Ot(使执行速度优先的最佳化)的场合下,若循环展开部123可以进行循环展开最佳化,则以默认方式执行循环展开最佳化。在最佳化级指定中已指定出-Os(使代码长度减小优先的最佳化)的场合下,循环展开部123不执行循环展开最佳化。因此,用户可以配合这些最佳化级指定编译选项,以通过#pragma_no_loop_unrolling指令及#pragma_loop_unrolling指令来控制各个循环的循环展开最佳化的使用。
图47表示的是采用#pragma_loop_unrolling指令所做出的最佳化示例。本图的左栏是只附加最佳化级指定编译选项-O进行编译时的示例,本图的右栏是配合#pragma_loop_unrolling指令进行编译时的示例。
如从本图左栏的中下部所示的机器语言程序102的示例所了解的那样,可以应用已消除序言部分·结尾部分的软件流水线操作最佳化。因此,核心部分的3指令(2个周期)执行101次,并且作为整体合计需要207个周期。
另一方面,如从右栏的中下部所示的机器语言程序102的示例所了解的那样,与左侧相同执行软件流水线操作最佳化,消除序言部分·结尾部分。而且,在该右栏的机器语言程序102中通过循环展开最佳化而使循环次数减半,因此核心部分的6指令(2个周期)执行52次,并且作为整体以合计110个周期执行,使速度得到提高。
接着,示出通过双存储器存取指令(ldp/stp)的生成而更为有效地使用循环展开最佳化的方法。
在循环展开最佳化中,由于同时执行当前迭代和下一个迭代,所以有时会生成如下连续的区域的数据装入·存储。
ld rl,(r4);;
ld r2,(r4,4);;
如果存取的数据必须对齐8字节而配置,则可以生成如下的双存储器存取指令(ldp指令)。
ldp r1:r2(r4+);;
图48表示的是通过双存储器存取指令(ldp/stp)的生成而更为有效地使用循环展开最佳化的示例。此处,可以应用软件流水线操作最佳化。
在本图右栏的示例中,如从中下部所示的机器语言程序102的示例所了解的那样,通过循环展开最佳化使循环次数减半。另外,通过使用#pragma_align_local_pointer指令明确表示出已使指针变量pa、pb调整8字节的地址,而生成双装入(双存储)指令。
通过这些最佳化,在左栏的示例中核心部分的5指令3个周期执行101次,并作为整体合计为308个周期,而在右栏的示例中核心部分的7指令3个周期执行一半的51次,并作为整体以合计158周期执行,使速度得到提高。
其次,对于由循环展开部123所做出的(2)与循环的重复次数的保证有关的最佳化,予以说明。
在程序的描述方面,在不能用编译器100特别指定循环次数的场合下,不能够有效执行循环高速化的各个最佳化。
因此,用户可以通过用下面所示的#pragma指令来提供循环次数的信息,而更为有效地使软件流水线操作等的循环高速化的最佳化得以执行。
·#pragma指令
#pragma_min_iteration=NUM
#pragma_iteration_even
#pragma_iteration_odd
在图46中,在通过解析部110检测出附注指令[#pragma_min_iteration=NUM]的场合下(步骤S120、S121),循环展开部123以处在紧下面的1个循环处理最低重复NUM次为前提,来执行循环展开最佳化(步骤S125)。例如,在被保证的重复最低次数大于循环展开的展开次数的场合下,循环展开部123进行该循环处理的循环展开。据此,可以谋求速度的提高和长度的减小。
另外,在通过解析部110检测出附注指令[#pragma_iteration_even]的场合下(步骤S120、S121),循环展开部123以处在紧下面的1个循环处理重复偶数次为前提,来执行循环展开最佳化(步骤S126)。据此,可以使执行速度得到提高。
另外,在通过解析部110检测出附注指令[#pragma_iteration_odd]的场合下(步骤S120、S121),循环展开部123以处在紧下面的1个循环处理重复奇数次为前提,来执行循环展开最佳化(步骤S127)。据此,可以使执行速度得到提高。
再者,在采用#pragma_min_iteration指令指定出超过1的值的场合下,也会产生可以消除由于一次也不能进行循环而生成的转义代码这样的效果。另外,在对重复次数不清楚的循环期望循环展开最佳化的场合下,如果已确定偶数次循环还是奇数次循环,则通过使用#pragma_iteration_even/#pragma_iteration_odd指令,使循环展开最佳化的使用成为可能,因此可以期望执行速度的提高。
图49表示的是由#pragma_min_iteration指令所做出的最佳化的示例。在此,表示出在重复次数不清楚的循环中的#pragma_min_iteration指令的使用效果。但是,为了做出周期比较,而将自变量end的值设为100。
在本图的左栏中,如从中下部所示的机器语言程序102的示例所了解的那样,由于循环次数不清楚,所以在一次也不执行循环的场合下生成为跳过循环本体所需的cmple/br指令(转义代码)。另外,由于不能执行循环指令的生成,因而通过加法指令·比较指令·转移指令生成循环。周期数使循环部分成为7指令4个周期的100次重复,整体合计成为405个周期。
另一方面,在本图的右栏中,如从中上部所示的源程序101的示例所了解的那样,虽然重复次数不清楚,但是采用#pragma_min_iteration指令已指定出最低的4次重复。据此,由于没有必要考虑循环次数为0次的情形,所以循环展开部123不需要生成转义代码。
另外,考虑到循环的最低次数,可以使循环展开部123生成循环指令。例如,由于所保证的重复最低次数(4)超过因循环展开而做出的扩展数(在该示例中为3周期),所以循环展开部123执行循环展开。
还有,在该示例中进一步使软件流水线操作最佳化成为可能。其原因是,由于所保证的重复最低次数(4)超过因软件流水线操作而重叠的迭代数,因而软件流水线操作部122执行软件流水线操作的最佳化。
如从本图的中下部所示的机器语言程序102的示例所了解的那样,周期数使循环部分成为5指令3个周期的101次重复,整体合计成为308周期,使执行速度和长度减小得以实现。
图50及图51表示的是采用#pragma iteration_even/#pragma_iteration_odd指令的最佳化的示例。图50表示的是在循环次数不清楚时的源程序101的示例(左栏),以及由此生成的机器语言程序102的示例(右栏)。如从本图所了解的那样,在实际的循环次数不清楚的场合下,不能应用循环展开最佳化。其原因是,在循环次数为偶数次的场合和为奇数次的场合下,通过循环展开最佳化而生成的代码不一样。
可是,如图51所示,即使是重复次数不清楚的循环的场合下,也可以通过指定偶数次循环还是奇数次循环,来应用循环展开最佳化。
在本图的左栏中,由于用#pragma_iteration_even指令指定出循环次数为偶数次,所以执行由循环展开部123所做出的循环展开最佳化,并且如从左栏的中下部所示的机器语言程序102的示例所了解的那样,生成偶数次用的代码。
另外,在本图的右栏中,由于用#pragma_iteration_odd指令指定出循环次数为奇数次,所以可执行由循环展开部123所做出的循环展开最佳化,并且如从右栏的中下部所示的机器语言程序102的示例所了解的那样,生成奇数次用的代码。如从该右栏的示例所了解的那样,左栏所示的偶数次时的生成代码与初始化部分·循环部分基本相同,在后处理部生成对循环的最后一次加以执行的代码。
这样,即使循环次数不清楚,也会通过保证偶数次或是数次,使循环展开部123可以执行循环展开最佳化,由此使执行速度得到提高。
[if变换部124]
下面,对于if变换部124的动作及其作用,予以说明。
一般情况下,如果对C语言程序的if结构进行编译,就会生成转移指令(br指令)。对此,if变换是指不使用转移指令而只按有条件执行指令对C语言程序的if结构予以重写。据此,使执行顺序固定(为依次执行),因而能够避免流水线的混乱并使执行速度得到提高。还有,有条件执行指令指的是只在其指令中含有的条件(谓词)与处理器1的状态(条件标志)相一致的情况下予以执行的指令。
通过if变换可缩短在if构造的最坏情况下的执行时间,但在最佳情况下的执行时间与(缩短后的)最坏执行时间相等。因此,根据if构造的特性(条件成立·不成立的各自产生频率和各路径的执行周期数),会产生两种情形,这就是适合应用if变换的情形和不适合应用的情形。
因而,用户可以采用编译选项和#pragma指令对使用的可否进行指示。
·编译选项
-fno-if-conversion
·#pragma指令
#pragma_if_conversion
#pragma_no_if_conversion
还有,在任选项和附注指令出现重复或自相矛盾的场合下,使附注指令优先。
图52是表示if变换部124的动作的流程图。在通过解析部110检测出选项[-fno-if-conversion]的场合下(步骤S130、S131),if变换部124不对作为对象的源程序101中的所有if结构语句执行if变换(步骤S132)。再者,在未检测出选项的场合下,if变换部124可以执行if变换,并且在作为其最坏情况的时间对进行if变换前来说是较短的if结构语句的场合下,对其if结构语句执行if变换。
另外,在通过解析部110检测出附注指令[#pragma_if_conversion]的场合下(步骤S130、S131),if变换部124不管选项指定,而对处在紧下面的1个if结构语句,如果有可能就执行if变换(步骤S133)。据此,可使速度得到提高。
另外,在通过解析部110检测出附注指令[#pragma_no_if_conversion]的场合下(步骤S130、S131),if变换部124不管选项指定,而不对处在紧下面的1个if结构语句执行if变换(步骤S134)。据此,可使速度得到提高。
图53表示的是采用#pragma_no_if_conversion指令进行编译时和采用#pragma_if_conversion指令进行编译时的机器语言程序102的示例。
在本图的左栏中,如从中下部的机器语言程序102的示例所了解的那样,通过抑制if变换,而生成转移指令(执行周期数:5或7,代码长度:12字节)。
另一方面,在本图的右栏中,如从中下部的机器语言程序102的示例所了解的那样,通过使利用#pragma指令执行if变换,使转移指令置换为有条件指令(有谓词指令)(执行周期数:4,代码长度:8字节)。这样,通过实施if变换,而使执行速度比和代码长度比分别达到1.25倍和67%。
[双指令生成部125]
下面,对于双指令生成部125的动作和其作用,予以说明。双指令生成部125大致划分为执行(1)与数组·结构的对准设定有关的最佳化,(2)与假变量指针·局部指针的对齐保证有关的最佳化。
首先,对于(1)与数组·结构的对准设定有关的最佳化,予以说明。
用户可以采用下面的选项对数组和结构的起始地址的对齐进行指定。通过调整对准,可以使存储器存取指令成对(用一个指令执行2个寄存器和存储器之间的传输),并可以期望执行速度的提高。反之,若增大对准值,则有可能使数据的未使用区域增加并增大数据长度。
·编译选项
-falign_char_array=NUM(NUM=2,4或8)
-falign_short_array=NUM(NUM=4或8)
-falign_int_array=NUM(NUM=8)
-falign_all_array=NUM(NUM=2,4或8)
-falign_struct=NUM(NUM=2,4或8)
上述选项从上按顺序指定出char型数组、short型数组、int型数组、它们3个数据类型的所有数组以及结构的对齐。另外,″NUM″表示所对齐的长度(字节)。
图54是表示双指令生成部125的动作的流程图。在通过解析部110检测出上述选项中的任-个的场合下(步骤S140、S141),双指令生成部125对于作为对象的采用源程序101说明的所指定的类型的所有数组或者结构,在使其起始地址达到所指定的NUM字节对齐的前提下将数组或结构配置到存储器中,对于向数组或结构进行存取的指令,在可能的场合下执行配对(并行执行2个寄存器和存储器之间的指令生成)(步骤S142)。据此,可使执行速度得到提高。
图55表示的是在没有选项的情况下对取样程序进行编译时和采用选项′-falign-short-array=4′进行编译时的汇编码。
在没有本图左栏所示的选项的场合下,如从中下部所示的机器语言程序102的示例所了解的那样,由于对准不明确,所以不能进行装入指令的配对(用一个指令执行2个寄存器和存储器之间的传输)(执行周期数:25,代码长度:22)。
另一方面,在由本图右栏所示的选项的场合下,由于以4字节使数组对齐,所以如从中下部所示的机器语言程序102的示例所了解的那样,实现出由最佳化部120所做出的配对(执行周期数:15,代码长度:18)。这样,通过对准的指定,使执行速度比和代码长度比分别达到1.67倍和82%。
下面,对由双指令生成部125所做出的(2)与假变量指针·局部指针的对齐保证有关的最佳化,予以说明。
用户通过采用下面的附注指令对函数自变量的指针变量所指定的数据对准和局部指针变量所指定的数据对准进行保证,而使由最佳化部120所做出的存储器存取指令的配对成为可能,并且可以期望执行速度的提高。
·#pragma指令
#pragma_align_parm_pointer=NUM变量名[,变量名,…]
#pragma_align_local_pointer=NUM变量名[,变量名,…]
还有,″NUM″表示所对齐的长度(2,4或8字节)。另外,在数据没有在所指定的字节界限上对齐的场合下,不能保证程序的正常动作,而该数据由采用上述#pragma指令所保证的指针变量来指定。
在图54中,在通过解析部110检测出附注指令「#pragma_align_parm_pointer=NUM变量名[,变量名,…]」的场合下(步骤S140、S141),双指令生成部125当作数据在自变量通过时已在NUM字节上对齐的数组,而该数据由采用″变量名″表示的自变量的指针变量来指定,对于向该数组存取的指令,在可能的场合下执行配对(步骤S143)。据此,使执行速度得到提高。
另外,在通过解析部110检测出附注指令「#pragma_align_local_pointer=NUM变量名[,变量名,…]」的场合下(步骤S140、S141),双指令生成部125当作数据在函数内部一直在NUM字节上对齐的数组,而该数据由采用″变量名″表示的局部指针变量来指定,对于向其数组进行存取的指令在可能的场合下执行配对(步骤S144)。据此,使执行速度得到提高。
图56表示是由附注指令「#pragma_align_parm_pointer=NUM变量名[,变量名,…]」所做出的最佳化的示例。
如本图的左栏所示,在不给出#pragma_align_parm_pointer的场合下,因为指针变量src所指定的数据对准不明确,所以如从中下部所示的机器语言程序102的示例所了解的那样,各个数据各自独立地进行装入(执行周期数:160,代码长度:24字节)。
另一方面,如本图的右栏所示,如果给出#pragma指令,因为数据在4字节边界上对齐,所以如从中下部的机器语言程序102的示例所了解的那样,就可以执行存储器读出的配对(执行周期数:107,代码长度:18字节)。这样,通过指定其对准,而可以使执行速度比和代码量比分别达到1.50倍和43%。
图57表示是由附注指令「#pragma_align_local_pointer=NUM变量名[,变量名,…]」所做出的最佳化的示例。
如本图的左栏所示,在不给出#pragma_align_local_pointer的场合下,因为指针变量from、to所指定的数据对准不明确,所以如从中下部所示的机器语言程序102的示例所了解的那样,数据元素各自独立地进行装入(执行周期数:72,代码长度:30)。
另一方面,如本图的右栏所示,通过给出#pragma_align_parm_pointer指令,如从中下部所示的机器语言程序102的示例所了解的那样,使存储器读出的配对成为可能,而该存储器读出使用由指针变量from、to所指定的数据在4字节边界上对齐。(执行周期数:56,代码长度:22)。这样,通过指定其对准,而可以使执行速度比和代码长度比分别达到1.32倍和73%。
如从上面的说明所明确的那样,本发明所涉及的编译器接收与变量向全局区域的分配有关的指示,并以该指示为依据来执行各种变量向全局区域的变换。
作为其中之一,用户可以通过编译时的选项对分配给全局区域的变量的最大数据长度进行指定。据此,用户可以对使之配置到全局区域的变量的数据长度进行控制,并且可以谋求最佳化以做到对全局区域进行有效运用。
另外,用户可以采用处于源程序中的附注指令,对每个变量指定进行/不进行向全局区域的分配。据此,分别区分出应当优先分配给全局区域的变量、没有分配的变量,以使用户可以对最佳的全局区域的分配进行管理。
另外,本发明所涉及的编译器受理软件流水线操作的指示,并且执行以该指示为依据的软件流水线操作的最佳化。
作为其中之一,用户可以通过编译时的选项来指定不进行软件流水线操作。据此,可以抑制因软件流水线操作而引起的代码长度的增加。另外,由于可执行软件流水线操作的汇编码比较复杂,所以为了程序的功能检验而对软件流水线操作进行抑制,使调试变得较容易。
另外,用户可以采用源程序中的附注指令,来对每个循环处理指定进行/不进行软件流水线操作,或指定在消除/不消除序言部分·结尾部分的情况下进行软件流水线操作。据此,可以对每个循环处理选择是否进行软件流水线操作,或者选择注重代码长度(消除序言结尾)或注重速度(不消除序言结尾)的软件流水线操作。
另外,本发明所涉及的编译器受理循环展开的指示并且执行以该指示为依据的循环展开的最佳化。
作为其中之一,用户可以通过编译时的选项来指示不进行循环展开。据此,能够避免因循环展开而引起的代码长度的增加。
另外,用户可以采用源程序中的附注指令来对每个循环处理指示进行/不进行循环展开。据此,用户可以对每个循环处理考虑其重复次数等,并且选择注重执行速度或注重代码长度的最佳化。
另外,本发明所涉及的编译器接收与循环处理的重复次数有关的指示,并且执行以该指示为依据的最佳化。
作为其中之一,用户可以通过源程序中的附注指令来对每个循环处理保证最低的重复次数。据此,在重复次数为0的场合下,不需要生成认为必要的代码(转义代码),与此同时可以执行软件流水线操作和循环展开的最佳化。
另外,用户可以采用源程序中的附注指令,来对每个循环处理保证重复次数为偶数次/奇数次。据此,即使重复次数不清楚,也可以对每个循环处理执行循环展开的最佳化,并能够提高执行速度。
另外本发明所涉及的编译器受理与if变换有关的指示,并且执行以该指示为依据的if变换的最佳化。
作为其中之一,用户可以通过编译时的任选项指示不进行if变换。据此,在if结构的then方和else方指令数的平衡不佳的场合下,可以防止因if变换而使指令数少的一方的执行对指令数多的一方产生限制这样的不良状况的产生。
另外,用户可以采用源程序中的附注指令来对每个循环处理指示进行/不进行if变换。据此,考虑到各个循环处理的特性(then方和else方各自指令数的平衡、可预测的产生频率的平衡等),可以进行选择(进行/不进行if变换),该选择可预测出使执行速度进一步提高。
另外,本发明所涉及的编译器受理在数组数据向存储区域的配置过程中与对准有关的指示,并且执行以该指示为依据的最佳化。
作为其中之一,用户可以通过编译时的选项,对于特定类型的数组数据指定出根据字节数做出的对齐。据此,能够生成对2个数据的同时执行存储器·寄存器之间的传输的双指令,并使执行速度得到提高。
另外,用户可以采用源程序中的附注指令,来对指针变量所指定的数据对齐进行指定。据此,可以对每个数据使生成双指令成为可能,并使执行速度得到提高。
如上所述,根据本发明所涉及的编译器,用户可以进行细致的控制,这些控制不是以往的那种笼统指示,而是对编译器所做出的各种最佳化的每一分类来指定ON/OFF和其程度,或采用程序中的变量和循环处理等的单位使最佳化进行ON/OFF等,特别是在以精密的最佳化调整为必要的媒体处理的应用开发中是有效的,其实用价值非常高。表1
表2
表3
表4
表5
寄存器名 | 位宽度 | 根数 | 用途 |
R0~R31 | 32位 | 32根 | 通用寄存器。使用于数据存储器的指针、运算指令方面的数据存储等。 |
TAR | 32位 | 1根 | 转移用寄存器。使用于转移时的转移地址的存储。 |
LR | 32位 | 1根 | 连接用寄存器。 |
SVR | 16位 | 2根 | 保存用寄存器。对条件标志(CFR)和各种模式予以保存。 |
M0~M1(MH0:ML0~MH1:ML1) | 64位 | 2根 | 运算用寄存器。使用于运算指令方面的数据存储。 |
C0~C7 | 1位 | 8根 | 条件标志。表示条件成立·不成立。 |
VC0~VC3 | 1位 | 4根 | 媒体处理扩充指令用条件标志。表示条件成立·不成立。 |
OVS | 1位 | 1根 | 溢出标志。检测运算时的溢出。 |
CAS | 1位 | 1根 | 进位标志。检测运算进位。 |
BPO | 5位 | 1根 | 位的位置的指定。在屏蔽处理时对作为处理对象的位位置进行指定。 |
ALN | 2位 | 1根 | 字节对齐的指定。 |
FXP | 1位 | 1根 | 定点运算模式。 |
UDR | 32位 | 1根 | 未定义寄存器。 |
种类 | 运算器 | 命令操作代码 |
存储转送指令(装入) | M | ld,ldh,ldhu,ldb,ldbu,ldp,ldhp,ldbp,ldbh,ldbuh,ldbhp,ldbuhp |
存储转送指令(存储) | M | st,sth,stb,stp,sthp,stbp,stbh,stbhp |
存储转送指令(其他) | M | dpref,ldstb |
外部寄存器转送指令 | M | rd,rde,wt,wte |
转移指令 | B | br,brl,call,jmp,jmpl,jmpr,ret,jmpf,jloop,setbb,setlr,settar |
软件中断指令 | B | rti,pi0,pi0l,pi1,pi1l,pi2,pi2l,pi3,pi31,pi4,pi4l,pi5,pi5l,pi6,pi6l,pi7,pi7l,sc0,sc1,sc2,sc3,sc4,sc5,sc6,sc7 |
VMP/中断控制指令 | B | intd,inte,vmpsleep,vmpsus,vmpswd,vmpswe,vmpwait |
算术运算指令 | A | abs,absvh,absvw,add,addarvw,addc,addmsk,adds,addsr,addu,addvh,addvw,neg,negvh,negvw,rsub,s1add,s2add,sub,subc,submsk,subs,subvh,subvw,max,min |
逻辑运算指令 | A | and,andn,or,sethi,xor,not |
比较指令 | A | cmpCC,cmpCCa,cmpCCn,cmpCCo,tstn,tstna,tstnn,tstno,tstz,tstza,tstzn,tstzo |
转送指令 | A | mov,movcf,mvclcas,mvclovs,setlo,vcchk |
NOP指令 | A | nop |
移位指令1 | S1 | asl,aslvh,aslvw,asr,asrvh,asrvw,lsl,lsr,rol,ror |
移位批令2 | S2 | aslp,aslpvw,asrp,asrpvw,lslp,lsrp |
种类 | 运算器 | 命令操作代码 |
提取指令 | S2 | ext,extb,extbu,exth,exthu,extr,extru,extu |
屏蔽指令 | C | msk,mskgen |
饱和指令 | C | sat12,sat9,satb,satbu,sath,satw |
变换指令 | C | valn,valn1,valn2,valn3,valnvc1,valnvc2,valnvc3,valnvc4,vhpkb,vhpkh,vhunpkb,vhunpkh,vintlhb,vintlhh,vintllb,vintllh,vlpkb,vlpkbu,vlpkh,vlpkhu,vlunpkb,vlunpkbu,vlunpkh,vlunpkhu,vstovb,vstovh,vunpk1,vunpk2,vxchngh,vexth |
位计数命令 | C | bcnt1,bseq,bseq0,bseq1 |
其他 | C | byterev,extw,mskbrvb,mskbrvh,rndvh,movp |
乘法运算指令1 | X1 | fmulhh,fmulhhr,fmulhw,fmulhww,hmul,lmul |
乘法运算指令2 | X2 | fmulww,mul,mulu |
积和指令1 | X1 | fmachh,fmachhr,fmachw,fmachww,hmac,lmac |
积和指令2 | X2 | fmacww,mac |
积差指令1 | X1 | fmsuhh,fmsuhhr,fmsuhw,fmsuww,hmsu,lmsu |
积差指令2 | X2 | fmsuww,msu |
除法运算指令 | DlV | div,divu |
调试器指令 | DBGM | dbgm0,dbgm1,dbgm2,dbgm3 |
种类 | 运算器 | 命令操作代码 |
SIMD算术运算指令 | A | vabshvh,vaddb,vaddh,vaddhvc,vaddhvh,vaddrhvc,vaddsb,vaddsh,vaddsrb,vaddsrh,vasubb,vcchk,vhaddh,vhaddhvh,vhsubh,vhsubhvh,vladdh,vladdhvh,vlsubh,vlsubhvh,vnegb,vnegh,vneghvh,vsaddb,vsaddh,vsgnh,vsrsubb,vsrsubh,vssubb,vssubh,vsubb,vsubh,vsubhvh,vsubsh,vsumh,vsumh2,vsumrh2,vxaddh,vxaddhvh,vxsubh,vxsubhvh,vmaxb,vmaxh,vminb,vminh,vmovt,vsel |
SIMD比较指令 | A | vcmpeqb,vcmpeqh,vcmpgeb,vcmpgeh,vcmpgtb,vcmpgth,vcmpleb,vcmpleh,vcmpltb,vcmplth,vcmpneb,vcmpneh,vscmpeqb,vscmpeqh,vscmpgeb,vscmpgeh,vscmpgtb,vscmpgth,vscmpleb,vscmpleh,vscmpltb,vscmplth,vscmpneb,vscmpneh |
SIND移位指令1 | S1 | vaslb,vaslh,vaslvh,vasrb,vasrh,vasrvh,vlslb,vlslh,vlsrb,vlsrh,vrolb,vrolh,vrorb,vrorh |
SIND移位指令2 | S2 | vasl,vaslvw,vasr,vasrvw,vlsl,vlsr |
SIMD饱和指令 | C | vsath,vsath12,vsath8,vsath8u,vsath9 |
SIMD其他指令 | C | vabssumb,vrndvh |
SIMD乘法运算指令 | X2 | vfmulh,vfmulhr,vfmulw,vhfmulh,vhfmulhr,vhfmulw,vhmul,vlfmulh,vlfmulhr,vlfmulw,vlmul,vmul,vpfmulhww,vxfmulh,vxfmulhr,vxfmulw,vxmul |
SIMD积和指令 | X2 | vfmach,vfmachr,vfmacw,vhfmach,vhfmachr,vhfmacw,vhmac,vlfmach,vlfmachr,vlfmacw,vlmac,vmac,vpfmachww,vxfmach,vxfmachr,vxfmacw,vxmac |
SIMD积差指令 | X2 | vfmsuh,vfmsuw,vhfmsuh,vhfmsuw,vhmsu,vlfmsuh,vlfmsuw,vlmsu,vmsu,vxfmsuh,vxfmsuw,vxmsu |
Claims (41)
1.一种将源程序编译成机器语言程序的编译装置,其特征为:具备
取得使生成的机器语言程序进行最佳化的指示的指示取得单元、
根据所取得的指示生成机器语言指令串,并据此实施最佳化的最佳化单元,
上述最佳化单元,在上述指示取得单元取得了有关配置在全局存储区域的数组数据的指示的场合下,根据所取得的指示来确定配置在全局存储区域的数组数据,并据此实施上述最佳化。
2.根据权利要求1中记载的编译装置,其特征为:
上述指示取得单元取得编译上述源程序的指示、及有关配置在全局存储区域的数组数据的最大数据长度的指定,
上述最佳化单元,将在上述源程序中所说明的数组数据中,数据长度不超过上述最大数据长度的数组数据,配置到全局存储区域;将数据长度超过上述最大数据长度的数组数据,配置到全局存储区域之外的存储区域。
3.根据权利要求1中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测有关特定的数组数据不配置到全局存储区域的指示,
上述最佳化单元,将作为通过上述指示取得单元所检测出的指示的对象的数组数据,配置到全局存储区域之外的存储区域。
4.根据权利要求1中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测有关特定的数组数据配置到全局存储区域的指示,
上述最佳化单元,将作为通过上述指示取得单元所检测出的指示的对象的数组数据,配置到全局存储区域。
5.一种记录有采用高级语言所描述的源程序并且计算机可以读取的记录媒体,其特征为:
在上述源程序中含有对将该源程序编译成机器语言程序的编译器而做出的下述两种描述中的至少一个,这两种描述(1)是指示有关特定的数组数据不配置到全局存储区域的描述以及(2)是指示有关特定的数组数据配置到全局存储区域的描述。
6.一种将源程序编译成机器语言程序的编译装置,其特征为:具备
取得使生成的机器语言程序进行最佳化的指示的指示取得单元、
根据所取得的指示来生成机器语言指令串并据此实施最佳化的最佳化单元,
上述最佳化单元,在上述指示取得单元取得有关软件流水线操作的最佳化的指示的场合下,根据所取得的指示实施与软件流水线操作有关的最佳化。
7.根据权利要求6中记载的编译装置,其特征为:
上述指示取得单元取得编译上述源程序的指示,同时取得不进行软件流水线操作的最佳化的指示,
上述最佳化单元,在上述指示取得单元取得不进行行软件流水线操作的最佳化的指示的场合下,对上述源程序中的所有循环处理,抑制其执行软件流水线操作的最佳化。
8.根据权利要求6中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测对特定的循环处理不进行软件流水线操作的最佳化的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,抑制其执行软件流水线操作的最佳化。
9.根据权利要求6中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测对特定的循环处理进行消除了序言部分及结尾部分的软件流水线操作的最佳化的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,在可消除序言部分及结尾部分的范围内进行软件流水线操作的最佳化。
10.根据权利要求6中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测对特定的循环处理在不消除序言部分及结尾部分的情况下进行软件流水线操作的最佳化的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,在不消除序言部分及结尾部分的可能的范围内进行软件流水线操作的最佳化。
11.根据权利要求6中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测关于特定的循环处理的重复次数的指定,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,根据所指定的重复次数执行最佳化。
12.根据权利要求11中记载的编译装置,其特征为:
与上述重复次数有关的指定是上述循环处理进行重复的最低次数,
上述最佳化单元,在上述最低次数超过因软件流水线操作而重叠的迭代数的场合下,执行软件流水线操作的最佳化。
13.一种记录有采用高级语言所描述的源程序并且计算机可以读取的记录媒体,其特征为:
在上述源程序中含有对将该源程序编译成机器语言程序的编译器而做出的下述三种描述中的至少一个,这三种描述(1)是指示对特定的循环处理不进行软件流水线操作所的最佳化的描述,(2)是指示对特定的循环处理进行消除了序言部分及结尾部分的软件流水线操作最佳化的描述,(3)是指示对特定的循环处理在不消除序言部分及结尾部分的情况下进行软件流水线操作的最佳化的描述。
14.一种将源程序编译成机器语言程序的编译装置,其特征为:具备
取得使生成的机器语言程序最佳化的指示的指示取得单元、
根据所取得的指示生成机器语言指令串并据此实施最佳化的最佳化单元,
上述最佳化单元,在上述指示取得单元取得有关循环展开的最佳化的指示的场合下,根据所取得的指示实施与循环展开有关的最佳化。
15.根据权利要求14中记载的编译装置,其特征为:
上述指示取得单元取得编译上述源程序的指示、及不进行循环展开的最佳化的指示,
上述最佳化单元,在上述指示取得单元取得不进行循环展开的最佳化的指示的场合下,对上述源程序中的所有循环处理,抑制其执行循环展开的最佳化。
16.根据权利要求14中记载的编译装置,其特征为:
上述指示取得单元检测在上述源程序中对特定的循环处理进行循环展开的最佳化的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,执行循环展开的最佳化。
17.根据权利要求14中记载的编译装置,其特征为:
上述指示取得单元检测在上述源程序中对特定的循环处理不进行循环展开的最佳化的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,抑制其执行循环展开。
18.根据权利要求14中记载的编译装置,其特征为:
上述指示取得单元检测在上述源程序中关于特定的循环处理的重复次数的指定,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的循环处理,根据所指定的重复次数执行最佳化。
19.根据权利要求18中记载的编译装置,其特征为:
与关于上述重复次数的指定是上述循环处理进行重复的最低次数,
上述最佳化单元,在上述最低次数不小于1的场合下,对在重复次数为0时需要的转义代码的生成进行抑制。
20.根据权利要求18中记载的编译装置,其特征为:
与上述重复次数有关的指定是上述循环处理进行重复的最低次数,
上述最佳化单元,在上述最低次数超过因循环展开而产生的展开数的场合下,执行循环展开的最佳化。
21.根据权利要求18中记载的编译装置,其特征为:
与上述重复次数有关的指定是使上述循环处理只以偶数次进行重复的保证,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指定的对象的循环处理,作为只以偶数次进行重复的处理而执行循环展开的最佳化。
22.根据权利要求18中记载的编译装置,其特征为:
与上述重复次数有关的指定是上述循环处理只以奇数次进行重复的保证,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指定的对象的循环处理,作为只以奇数次进行重复的处理而执行循环展开的最佳化。
23.一种记录有采用高级语言所描述的源程序并且计算机可以读取的记录媒体,其特征为:
在上述源程序中含有对将该源程序编译成机器语言程序的编译器而做出的下述三种描述中的至少一个,这三种描述(1)是指示对特定的循环处理进行循环展开的最佳化的描述、(2)是指示对特定的循环处理不进行循环展开的最佳化的描述,(3)是表示与特定的循环处理的重复次数有关的保证的描述。
24.一种将源程序编译成机器语言程序的编译装置,其特征为:具备
取得使所生成的机器语言程序进行最佳化的指示的指示取得单元、
根据所取得的指示来生成机器语言指令串并据此实施最佳化的最佳化单元,
上述最佳化单元,在上述指示取得单元取得有关if变换的指示的场合下,根据所取得的指示实施与if变换有关的最佳化。
25.根据权利要求24中记载的编译装置,其特征为:
上述指示取得单元取得编译上述源程序的指示、及不进行if变换的指示,
上述最佳化单元,在上述指示取得单元取得了不进行if变换的指示的场合下,对上述源程序中的所有if结构语句,抑制其执行if变换。
26.根据权利要求24中记载的编译装置,其特征为:
上述指示取得单元检测在上述源程序中有关特定的if结构语句进行if变换的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的if结构语句,进行if变换。
27.根据权利要求24中记载的编译装置,其特征为:
上述指示取得单元检测在上述源程序中有关特定的if结构语句不进行if变换的指示,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的if结构语句,抑制其执行if变换。
28.一种记录有采用高级语言所描述的源程序并且计算机可以读取的记录媒体,其特征为:
在上述源程序中含有对将该源程序编译成机器语言程序的编译器而做出的下述两种描述中的至少一个,这两种描述(1)是指示对特定的if结构语句进行if变换的描述,(2)是指示对特定的if结构语句不进行if变换的描述。
29.一种将源程序编译成机器语言程序的编译装置,其特征为:具备
取得使所生成的机器语言程序进行最佳化的指示的指示取得单元、
根据所取得的指示来生成机器语言指令串并据此实施最佳化的最佳化单元,
上述最佳化单元,在取得有关配置到存储区域的数组数据对准的指示的场合下,通过根据所取得的指示将数据配置到存储区域而实施上述最佳化。
30.根据权利要求29中记载的编译装置,其特征为:
上述指示取得单元取得编译上述源程序的指示、及对特定类型的数组数据对准的指定,
上述最佳化单元,对于在上述源程序所说明的上述特定类型的所有数组数据,以使其起始地址达到上述对准的方式配置到存储区域。
31.根据权利要求29中记载的编译装置,其特征为:
上述指示取得单元与编译上述源程序的指示一起取得对于结构对准的指定,
上述最佳化单元,对于在上述源程序所说明的上述结构数据,以使其起始地址达到上述对准的方式,配置到存储区域。
32.根据权利要求29中记载的编译装置,其特征为:
上述指示取得单元检测在上述源程序中对数据对准的指定,而该数据是由采用特定的变量名表示的自变量的指针变量来指定,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的数据,作为通过指定的对准而配置到存储区域的数据,实施上述最佳化。
33.根据权利要求29中记载的编译装置,其特征为:
上述指示取得单元在上述源程序中检测对数据对准的指定,而该数据是由采用特定的变量名表示的全局指针变量来指定,
上述最佳化单元,对于成为通过上述指示取得单元所检测出的指示的对象的数据,作为通过所指定的对准而配置到存储区域的数据,实施上述最佳化。
34.根据权利要求30~33中的任一个中记载的编译装置,其特征为:
上述最佳化单元对配置到存储区域的上述数据进行存取的存储器存储指令,生成同时传输2个以上数据的双指令。
35.一种记录有采用高级语言所描述的源程序并且计算机可以读取的记录媒体,其特征为:
在上述源程序中含有对将该源程序编译成机器语言程序的编译器做出下述两种描述之中的至少一个,这两种描述(1)是保证数据对准的描述,而该数据是由采用特定的变量名表示的自变量的指针变量来指定,(2)是保证数据对准的描述,而该数据是由采用特定的变量名表示的全局指针变量来指定。
36.一种将源程序编译成机器语言程序的编译装置所用的程序,其特征为:
以权利要求1~4、6~12、14~22、24~27、29~34中的任一个中记载的编译装置所具备的所有单元使计算机发挥作用。
37.一种将源程序编译成机器语言程序的编译装置所用的程序,其特征为:
以权利要求1中记载的编译装置所具备的所有单元使计算机发挥作用。
38.一种将源程序编译成机器语言程序的编译装置所用的程序,其特征为:
以权利要求6中记载的编译装置所具备的所有单元使计算机发挥作用。
39.一种将源程序编译成机器语言程序的编译装置所用的程序,其特征为:
以权利要求14中记载的编译装置所具备的所有单元使计算机发挥作用。
40.一种将源程序编译成机器语言程序的编译装置所用的程序,其特征为:
以权利要求24中记载的编译装置所具备的所有单元使计算机发挥作用。
41.一种将源程序编译成机器语言程序的编译装置所用的程序,其特征为:
以权利要求29中记载的编译装置所具备的所有单元使计算机发挥作用。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP195305/2002 | 2002-07-03 | ||
JP2002195305A JP3847672B2 (ja) | 2002-07-03 | 2002-07-03 | コンパイラ装置及びコンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1472646A true CN1472646A (zh) | 2004-02-04 |
CN100483350C CN100483350C (zh) | 2009-04-29 |
Family
ID=29720285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031458025A Expired - Lifetime CN100483350C (zh) | 2002-07-03 | 2003-07-03 | 适应性强具备最佳化功能的编译装置 |
Country Status (4)
Country | Link |
---|---|
US (2) | US7698696B2 (zh) |
EP (1) | EP1378831A3 (zh) |
JP (1) | JP3847672B2 (zh) |
CN (1) | CN100483350C (zh) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3847672B2 (ja) * | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
JP2004303113A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法 |
JP2004318502A (ja) * | 2003-04-16 | 2004-11-11 | Matsushita Electric Ind Co Ltd | 電力制御機能を備えたマイクロプロセッサ及び命令変換装置 |
US7367023B2 (en) * | 2003-07-10 | 2008-04-29 | International Business Machines Corporation | Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability |
WO2005078579A1 (ja) * | 2004-02-12 | 2005-08-25 | Matsushita Electric Industrial Co., Ltd. | プログラム変換装置およびプログラム変換方法 |
JP2006107339A (ja) * | 2004-10-08 | 2006-04-20 | Matsushita Electric Ind Co Ltd | プログラム処理装置 |
JP2006107338A (ja) * | 2004-10-08 | 2006-04-20 | Matsushita Electric Ind Co Ltd | プログラム処理装置 |
EP1854024A4 (en) | 2005-01-13 | 2008-11-05 | Hsbc North America Holdings In | COMPUTER SOFTWARE IMPLEMENTED FRAME FOR THE CONFIGURATION AND OUTPUT MANAGEMENT OF GROUP SYSTEM SOFTWARE AND METHOD THEREFOR |
US7721267B2 (en) * | 2005-05-16 | 2010-05-18 | Texas Instruments Incorporated | Efficient protocol for encoding software pipelined loop when PC trace is enabled |
US8108845B2 (en) * | 2007-02-14 | 2012-01-31 | The Mathworks, Inc. | Parallel programming computing system to dynamically allocate program portions |
US8615747B2 (en) * | 2007-04-18 | 2013-12-24 | Apple Inc. | Method and apparatus for dynamic code optimization |
JP2008293378A (ja) * | 2007-05-25 | 2008-12-04 | Panasonic Corp | プログラム書き換え装置 |
US8433927B2 (en) * | 2007-05-29 | 2013-04-30 | International Business Machines Corporation | Cryptographically-enabled privileged mode execution |
US8332635B2 (en) * | 2007-05-29 | 2012-12-11 | International Business Machines Corporation | Updateable secure kernel extensions |
US8422674B2 (en) * | 2007-05-29 | 2013-04-16 | International Business Machines Corporation | Application-specific secret generation |
US8332636B2 (en) * | 2007-10-02 | 2012-12-11 | International Business Machines Corporation | Secure policy differentiation by secure kernel design |
US20090193402A1 (en) * | 2008-01-28 | 2009-07-30 | Guy Bashkansky | Iterative Compilation Supporting Entity Instance-Specific Compiler Option Variations |
JP2010108258A (ja) * | 2008-10-30 | 2010-05-13 | Panasonic Corp | コンパイル方法及びコンパイルプログラム |
JP5576605B2 (ja) | 2008-12-25 | 2014-08-20 | パナソニック株式会社 | プログラム変換装置およびプログラム変換方法 |
US9207921B2 (en) * | 2009-06-22 | 2015-12-08 | Oracle America, Inc. | Fault tolerant compilation with automatic optimization adjustment |
US8423974B2 (en) * | 2009-08-12 | 2013-04-16 | Apple Inc. | System and method for call replacement |
JP5496792B2 (ja) * | 2010-06-29 | 2014-05-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コード変換プログラム、方法及びシステム |
US8713529B2 (en) * | 2010-07-30 | 2014-04-29 | Red Hat, Inc. | Replacing memory pointers with implicit pointers to be used in compiler-generated debug output |
US8910135B2 (en) * | 2010-11-02 | 2014-12-09 | Advanced Micro Devices, Inc. | Structure layout optimizations |
US8918770B2 (en) * | 2011-08-25 | 2014-12-23 | Nec Laboratories America, Inc. | Compiler for X86-based many-core coprocessors |
US20130061213A1 (en) * | 2011-08-26 | 2013-03-07 | Cognitive Electronics, Inc. | Methods and systems for optimizing execution of a program in a parallel processing environment |
US8752036B2 (en) * | 2011-10-31 | 2014-06-10 | Oracle International Corporation | Throughput-aware software pipelining for highly multi-threaded systems |
US9256408B2 (en) * | 2012-01-20 | 2016-02-09 | Qualcomm Incorporated | Optimizing texture commands for graphics processing unit |
KR101962248B1 (ko) * | 2012-03-16 | 2019-03-27 | 삼성전자주식회사 | 재구성 가능 프로세서의 검증 지원 장치 및 방법 |
CN102662713B (zh) * | 2012-04-12 | 2014-04-16 | 腾讯科技(深圳)有限公司 | 提高应用程序运行速度的方法、装置及终端 |
JP2013242823A (ja) * | 2012-05-23 | 2013-12-05 | Toshiba Corp | 情報処理装置、情報処理方法および制御プログラム |
US9038042B2 (en) * | 2012-06-29 | 2015-05-19 | Analog Devices, Inc. | Staged loop instructions |
US9244677B2 (en) | 2012-09-28 | 2016-01-26 | Intel Corporation | Loop vectorization methods and apparatus |
US9027007B2 (en) | 2013-03-06 | 2015-05-05 | Qualcomm Incorporated | Reducing excessive compilation times |
US9996325B2 (en) | 2013-03-06 | 2018-06-12 | Qualcomm Incorporated | Dynamic reconfigurable compiler |
CN104969179B (zh) * | 2013-03-15 | 2019-07-16 | 英特尔公司 | 用于将具有循环承载的依赖的标量计算机程序循环向量化的方法和系统 |
JP6245031B2 (ja) * | 2014-03-27 | 2017-12-13 | 富士通株式会社 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
US9268597B2 (en) * | 2014-04-01 | 2016-02-23 | Google Inc. | Incremental parallel processing of data |
US10613844B2 (en) * | 2017-11-10 | 2020-04-07 | International Business Machines Corporation | Using comments of a program to provide optimizations |
KR20210046426A (ko) | 2019-10-18 | 2021-04-28 | 삼성전자주식회사 | 어플리케이션의 최적화 방법 및 이를 지원하는 전자 장치 |
CN112540767B (zh) * | 2020-12-25 | 2023-07-25 | 北京百度网讯科技有限公司 | 程序代码的生成方法、装置、电子设备及存储介质 |
US11714620B1 (en) | 2022-01-14 | 2023-08-01 | Triad National Security, Llc | Decoupling loop dependencies using buffers to enable pipelining of loops |
Family Cites Families (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63155264A (ja) | 1986-12-18 | 1988-06-28 | Fujitsu Ltd | ベクトル計算機用言語チユ−ニング処理方式 |
JPH0241562A (ja) | 1988-08-01 | 1990-02-09 | Fujitsu Ltd | ベクトル演算列分割処理方式 |
JPH03164835A (ja) | 1989-11-22 | 1991-07-16 | Hitachi Ltd | インタプリタ型言語処理系における大域変数処理のコンパイル方法 |
US5247696A (en) * | 1991-01-17 | 1993-09-21 | Cray Research, Inc. | Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory |
JP3032031B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
JP3164835B2 (ja) | 1991-05-29 | 2001-05-14 | 池上通信機株式会社 | 人物画像認識における前処理方法および後処理方法 |
CA2078315A1 (en) * | 1991-09-20 | 1993-03-21 | Christopher L. Reeve | Parallel processing apparatus and method for utilizing tiling |
JPH05224944A (ja) | 1992-02-12 | 1993-09-03 | Oki Electric Ind Co Ltd | アラインメント整合方法 |
JPH06222928A (ja) | 1993-01-27 | 1994-08-12 | Hitachi Ltd | ループ最適化方法 |
US5452457A (en) * | 1993-01-29 | 1995-09-19 | International Business Machines Corporation | Program construct and methods/systems for optimizing assembled code for execution |
JPH06290057A (ja) | 1993-04-05 | 1994-10-18 | Hitachi Ltd | ループ最適化方法 |
JP3233245B2 (ja) | 1993-07-01 | 2001-11-26 | 日本電気株式会社 | 言語処理方法 |
JP3261239B2 (ja) * | 1993-07-27 | 2002-02-25 | 富士通株式会社 | データ転送の一括化処理方法 |
JP3190773B2 (ja) * | 1993-09-30 | 2001-07-23 | 日本電気株式会社 | 言語処理プログラムのコンパイル処理方法 |
US6064819A (en) * | 1993-12-08 | 2000-05-16 | Imec | Control flow and memory management optimization |
JP3544397B2 (ja) | 1994-09-30 | 2004-07-21 | 富士通株式会社 | コンパイラ装置およびループ最適化制御方法 |
JPH08305672A (ja) * | 1995-05-09 | 1996-11-22 | Hitachi Ltd | 計算分割最適化方法 |
JPH08328870A (ja) | 1995-05-30 | 1996-12-13 | Fujitsu Ltd | コンパイル処理装置 |
US6067542A (en) * | 1995-10-20 | 2000-05-23 | Ncr Corporation | Pragma facility and SQL3 extension for optimal parallel UDF execution |
US5797013A (en) * | 1995-11-29 | 1998-08-18 | Hewlett-Packard Company | Intelligent loop unrolling |
JPH09265402A (ja) | 1996-03-28 | 1997-10-07 | Hitachi Software Eng Co Ltd | プログラム変換支援方法および装置 |
JPH1091456A (ja) | 1996-05-31 | 1998-04-10 | Fujitsu Ltd | プログラムの入出力反復処理方法及びシステム及びプログラムの入出力反復処理プログラムを格納した記憶媒体 |
JPH10116197A (ja) | 1996-10-09 | 1998-05-06 | Hitachi Ltd | プログラム解析方法 |
JPH10187665A (ja) | 1996-12-27 | 1998-07-21 | Fujitsu Ltd | ベクトル化装置 |
JPH10228382A (ja) * | 1997-02-14 | 1998-08-25 | Nec Corp | コンパイル方式 |
US6064818A (en) * | 1997-04-10 | 2000-05-16 | International Business Machines Corporation | Straight path optimization for compilers |
JPH10340193A (ja) | 1997-06-06 | 1998-12-22 | Nec Corp | 言語処理装置、言語処理方法およびその記録媒体 |
JP3327818B2 (ja) | 1997-08-29 | 2002-09-24 | 松下電器産業株式会社 | プログラム変換装置及び記録媒体 |
US5905894A (en) * | 1997-10-29 | 1999-05-18 | Microsoft Corporation | Meta-programming methods and apparatus |
WO1999030231A1 (fr) | 1997-12-10 | 1999-06-17 | Hitachi, Ltd. | Procede permettant d'optimiser l'acces memoire |
US6282706B1 (en) * | 1998-02-10 | 2001-08-28 | Texas Instruments Incorporated | Cache optimization for programming loops |
JP3551353B2 (ja) * | 1998-10-02 | 2004-08-04 | 株式会社日立製作所 | データ再配置方法 |
US6341371B1 (en) * | 1999-02-23 | 2002-01-22 | International Business Machines Corporation | System and method for optimizing program execution in a computer system |
US6539541B1 (en) * | 1999-08-20 | 2003-03-25 | Intel Corporation | Method of constructing and unrolling speculatively counted loops |
JP3633404B2 (ja) | 1999-11-04 | 2005-03-30 | 日本電気株式会社 | メモリ割り付け最適化システム、方法、及び記録媒体 |
US6754893B2 (en) * | 1999-12-29 | 2004-06-22 | Texas Instruments Incorporated | Method for collapsing the prolog and epilog of software pipelined loops |
US6892380B2 (en) * | 1999-12-30 | 2005-05-10 | Texas Instruments Incorporated | Method for software pipelining of irregular conditional control loops |
US6567895B2 (en) | 2000-05-31 | 2003-05-20 | Texas Instruments Incorporated | Loop cache memory and cache controller for pipelined microprocessors |
JP2002007140A (ja) | 2000-06-16 | 2002-01-11 | Hitachi Ltd | 記録媒体、システム開発装置及びマイクロコンピュータ |
JP2002073579A (ja) | 2000-08-29 | 2002-03-12 | Hitachi Ltd | 分散共有メモリ向けコンパイル方法 |
JP2002116917A (ja) * | 2000-10-05 | 2002-04-19 | Fujitsu Ltd | オブジェクト指向型プログラミング言語によるソース・プログラムをコンパイルするコンパイラ |
JP3933380B2 (ja) * | 2000-10-05 | 2007-06-20 | 富士通株式会社 | コンパイラ |
US7000213B2 (en) * | 2001-01-26 | 2006-02-14 | Northwestern University | Method and apparatus for automatically generating hardware from algorithms described in MATLAB |
US6388586B1 (en) * | 2001-07-02 | 2002-05-14 | Hewlett-Packard Company | Method for reversing the bits of a computer data structure |
US6865614B2 (en) * | 2001-07-02 | 2005-03-08 | Hewlett-Packard Development Company, L.P. | Method for transferring a packed data structure to an unpacked data structure by copying the packed data using pointer |
JP2003173262A (ja) * | 2001-12-06 | 2003-06-20 | Hitachi Ltd | プログラムチューニングシステムとプログラムチューニング方法およびプログラムと記録媒体 |
JP4044756B2 (ja) * | 2001-12-11 | 2008-02-06 | 松下電器産業株式会社 | プログラム変換装置、プログラム変換方法、及び当該プログラム変換装置を実現するプログラム |
JP3847672B2 (ja) * | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
JP4934267B2 (ja) * | 2003-10-17 | 2012-05-16 | パナソニック株式会社 | コンパイラ装置 |
JP4157016B2 (ja) * | 2003-11-05 | 2008-09-24 | 株式会社東芝 | コンパイラ装置及びコンパイル方法 |
US7318223B2 (en) * | 2004-08-26 | 2008-01-08 | International Business Machines Corporation | Method and apparatus for a generic language interface to apply loop optimization transformations |
JP5226328B2 (ja) * | 2007-03-27 | 2013-07-03 | パナソニック株式会社 | コード変換装置 |
-
2002
- 2002-07-03 JP JP2002195305A patent/JP3847672B2/ja not_active Expired - Lifetime
-
2003
- 2003-06-26 EP EP03013492A patent/EP1378831A3/en not_active Withdrawn
- 2003-06-30 US US10/608,040 patent/US7698696B2/en active Active
- 2003-07-03 CN CNB031458025A patent/CN100483350C/zh not_active Expired - Lifetime
-
2010
- 2010-02-16 US US12/706,329 patent/US8418157B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US7698696B2 (en) | 2010-04-13 |
JP3847672B2 (ja) | 2006-11-22 |
EP1378831A3 (en) | 2008-04-09 |
US8418157B2 (en) | 2013-04-09 |
US20040098713A1 (en) | 2004-05-20 |
CN100483350C (zh) | 2009-04-29 |
EP1378831A2 (en) | 2004-01-07 |
US20100175056A1 (en) | 2010-07-08 |
JP2004038597A (ja) | 2004-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1472646A (zh) | 适应性强具备最佳化功能的编译装置 | |
CN100338568C (zh) | 开发片上系统用的开发环境的生成方法 | |
CN1482540A (zh) | 编译程序、编译程序装置和编译方法 | |
CN1497435A (zh) | 处理器 | |
CN1186718C (zh) | 微控制器指令集 | |
CN1246772C (zh) | 处理器 | |
CN1202470C (zh) | 处理器 | |
CN1135468C (zh) | 对存储设备中信号数据字执行数字信号处理的方法和装置 | |
CN1308818C (zh) | 用于结构仿真的系统 | |
CN1264089C (zh) | 编译设备和编译方法 | |
CN1103961C (zh) | 协处理器的数据访问控制装置和方法 | |
CN1149476C (zh) | 资源分配装置 | |
CN1584824A (zh) | 一种基于cisc结构的微处理器构架及指令实现方式 | |
CN1302380C (zh) | 处理器和编译器 | |
CN1875345A (zh) | 在编译过程中表示和检查程序组件的一致性的可扩展类型系统 | |
CN1664779A (zh) | 软件开发基础架构 | |
CN1073276A (zh) | 语言的中性对象 | |
CN1469241A (zh) | 处理器、程序变换装置和变换方法以及计算机程序 | |
CN1886744A (zh) | 在可扩展的处理器架构中增加高级指令所用的方法和装置 | |
CN1226323A (zh) | 数据处理装置寄存器 | |
CN1758221A (zh) | 程序处理装置 | |
CN1484787A (zh) | 处理器流水线中的硬件指令翻译 | |
CN1664777A (zh) | 用于控制信息处理设备的内部状态的装置和方法 | |
CN1269052C (zh) | 支持缩小代码长度的常量还原型处理器 | |
CN1577291A (zh) | 程序调试装置、程序调试方法及程序 |
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 | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20151104 Address after: Kanagawa Patentee after: SOCIONEXT Inc. Address before: Osaka Japan Patentee before: Matsushita Electric Industrial Co.,Ltd. |
|
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20090429 |