编译方法和编译器的制作方法

文档序号:6608505阅读:161来源:国知局
专利名称:编译方法和编译器的制作方法
技术领域
本发明涉及编译方法和编译器,特别是涉及一种针对包含单指令多数据 扩展指令执行部件的处理器的编译方法和编译器。
背景技术
随着多媒体应用的广泛发展,现在很多嵌入式处理器都支持多媒体扩展
指令集。多媒体扩展一般都具有一种单指令多数据(SIMD, Single Instruction Multiple Data)体系结构,这种结构基于一种短的、固定长度的向量,通常为 64位或128位,多个数据存储在一个寄存器或存储单元中。
以往的简单指令只能一次处理8位、16位、32位或64位的数据操作,现在 随着128位超字的出现,SIMD结构可以在一条指令中并行地处理4个32位的数 据操作或8个16位的数据操作,例如一个4x32位的SIMD加法指令w = w+vZ 的 操作实例如图4所示。
SIMD指令集的出现为程序性能的提升带来了巨大的潜力,通常认为,如 果不去使用SIMD扩展指令,那么50%—75°/。的处理器能力都被浪费了。使用 这种SIMD指令集的最理想的方法是编译器能进行自动识别,针对普通的程 序,编译器尽可能地识别出程序中能使用SIMD指令的部分,从而自动生出 SIMD指令,达到加速的目的。该技术不需要用户参与,但现阶段仍受限于 SIMD识别率不高,适用性比较差。目前用的最多的方法是通过内嵌汇编或库 调用的方法使用SIMD扩展指令集;直接使用内嵌汇编的方法不利于编译器的 优化,编译出来的目标程序代码效率比较低,所以一般都针对SIMD扩展指令 集提供扩展类型和一组扩展的编译器内部函数接口 ,例如针对4x32的SIMD指 令可以增加一种扩展类型intv4, 4x32的SIMD加法就可以在程序中表示成intv4 va,v6,vc
调用编译器内部函数接口是目前使用SIMD扩展指令最为普遍和有效的 方法,能够保证SIMD运算能进行常规的编译器优化。
在SIMD扩展指令硬件实现方法上,现在最常用的是在已有简单指令执行 部件的处理器中,再单独增加SIMD指令执行部件(例如龙芯)。这种处理器 的简单指令执行部件和增加的SIMD指令执行部件可以独立发射指令和并行 执行,这时若程序可以充分利用简单指令执行部件和SIMD指令执行部件的并 行性,能明显提高程序的执行效率。
如何充分利用好简单指令执行部件和SIMD指令执行部件,这需要用户在 撰写包含有SIMD指令的程序过程中,同时考虑用好简单指令执行部件,合理 分配简单指令执行部件和SIMD指令执行部件的工作量。但是,由用户在撰写 程序过程中考虑如何充分利用好简单指令执行部件和SIMD指令执行部件会 存在以下问题
1. 用户负担太重。在程序中显式地使用扩展数据类型和调用扩展内部函 数接口,这对用户已是一种很大的负担。还需额外考虑部件之间工作量平衡, 这要求用户对系统非常了解,难度非常大。
2. 可移植性较差。只要简单指令执行部件和SIMD指令执行部件的执行 能力有变化,原来的程序就不能很好的适用,这里所说的执行部件的执行能 力是指每个时钟周期发射的指令数,其是由执行部件的硬件设计实现的。

发明内容
本发明解决的问题是,提供一种编译方法和编译器,以充分利用处理器 中的指令执行部件的并行性,提高程序的执行效率,减轻用户的编程负担。 为解决上述问题,本发明提供一种编译方法,包括下述步骤 识别包含第一指令的循环,所述循环在执行过程中有确定的控制参数,
7所述循环不包含转移指令,且循环中所有的第一指令不存在迭代间的相关性; 统计所述循环中第 一指令和第二指令的指令数;
根据所述循环中的第一指令和第二指令的指令数、以及第一指令执行部 件和第二指令执行部件的执行能力,计算循环展开次数和第一指令转换成第
二指令的循环次数;
若所述循环展开次数不等于1,根据所述循环展开次数对所述循环进行循 环展开,并根据所述第一指令转换成第二指令的循环次数将所述循环展开中 的第 一指令转换成对应的第二指令。
可选的,所述第一指令是单指令多数据定点指令,第二指令是简单定点 指令。
可选的,所述第一指令是单指令多数据浮点指令,第二指令是简单浮点 指令。
可选的,所述循环的控制参数包括上界、下界和步长。
可选的,所述循环展开次数、第一指令转换成第二指令的循环次数根据
下面的条件计算循环展开和指令转换后的第一指令的指令数与第二指令的 指令数的比值约等于第 一指令执行部件的执行能力与第二指令执行部件的执 行能力的比值,所述循环展开和指令转换后的第二指令的指令数为 02ra〃*/+fr<ms*"),第一指令的指令数为(0"ra〃-Zra"力51^),其中,w"ra〃为循 环展开次数,^ww为第一指令转换成第二指令的循环次数,/为所述循环中第 二指令的指令数,m为所述循环中第一指令的指令数,w为将m条第一指令 转换得到的第二指令的指令数。
可选的,根据所述第一指令转换成第二指令的循环次数将所述循环展开 中的第 一指令转换成对应的第二指令是指将所述循环展开中的前次循环 体的第 一指令转换成对应的第二指令。
可选的,根据所述第 一指令转换成第二指令的循环次数将所述循环展开
8中的第 一指令转换成对应的第二指令是指将所述循环展开中的后次循环 体的第 一指令转换成对应的第二指令。
可选的,所述编译方法还包括对所述循环展开和指令转换后的循环进行 指令调度。
为解决上述问题,本发明还提供一种编译方法,包括下述步骤
查找到一个未处理的包含第 一指令的循环,所述循环在执行过程中有确
定的控制参数,所述循环不包含转移指令,且循环中所有的第一指令不存在
迭代间的相关性;
统计所述循环中第一指令和第二指令的指令数;
根据所述循环中的第一指令和第二指令的指令数、以及第一指令执行部 件和第二指令执行部件的执行能力,计算循环展开次数和第一指令转换成第 二指令的循环次数;
若所述循环展开次数不等于1,根据所述循环展开次数对所述循环进行循 环展开,并根据所述第一指令转换成第二指令的循环次数将所述循环展开中 的第 一指令转换成对应的第二指令;
若所述循环展开次数等于1,继续查找下一个未处理的包含第一指令的循 环,重复上述步骤。
对应于上述编译方法,本发明还提供一种编译器,包括
识别模块,用于识别包含第一指令的循环,所述循环在执行过程中有确 定的控制参数,所述循环不包含转移指令,且循环中所有的第一指令不存在 迭代间的相关性;
统计模块,用于统计所述识别模块识别到的循环中的第一指令和第二指 令的指令数;
计算模块,用于根据所述统计模块统计得到的所述循环中的第一指令和 第二指令的指令数、以及第一指令执行部件和第二指令执行部件的执行能力,计算循环展开次数和第一指令转换成第二指令的循环次数;
转换模块,用于在所述循环展开次数不等于1时,根据所述计算模块计 算得到的循环展开次数对所述循环进行循环展开,并根据所述第一指令转换 成第二指令的循环次数将所述循环展开中的第一指令转换成对应的第二指令。
可选的,所述编译器还包括调度模块,用于对所述转换模块进行循环展 开和指令转换得到的循环进行指令调度。
与现有技术相比,上述技术方案是通过编译器来实现的,具有以下优点
1. 通过循环展开和指令转换,处理器可以将不同的指令分配给不同的指 令执行部件,因此,上述技术方案不需要用户参与就可以控制执行部件之间 的负载平衡,充分利用了处理器中的指令执行部件的并行性,提高程序的执 行效率,减轻用户的编程负担。
2. 被循环展开的循环需要满足以下条件在执行过程中具有确定的控制 参数,不包含转移指令,以及循环中所有的第一指令不存在迭代间的相关性。 这样可以保证第 一指令转换成的第二指令和其它的第 一指令不存在数据相 关。因此,循环展开和指令转换后的第一指令和第二指令能够并行执行,进 而达到较好的执行效率。
3. 循环展开次数、第一指令转换成第二指令的循环次数是由第一指令执 行部件的执行能力、第二指令执行部件的执行能力计算得到的,也就是比较 精确考虑了部件之间的工作能力,因而在循环展开和指令转换后,处理器可 以根据指令执行部件的执行能力的比例将不同的指令分配到不同的指令执行 部件。
4. 当第一指令执行部件和第二指令执行部件的执行能力有变化,由用户 编写的程序就不能很好的适用,而上述技术方案具有较好的可移植性,只需 要要修改优化过程中的相应参数,源程序不做改动,就可以适用新的处理器。


图1是本发明实施例的编译方法的基本流程步骤; 图2是本发明实施例的编译方法的详细流程步骤; 图3是本发明实施例的编译器的结构图; 图4是一个4x32位的SIMD加法指令的操作实例。
具体实施例方式
本发明实施例是在编译时,自动识别含SIMD扩展类型的循环程序,并 对该循环程序进行处理,把其中的一部分SIMD指令转换成简单指令,将工 作合理分配到简单指令执行部件和SIMD指令执行部件,从而充分利用简单 指令执行部件和SIMD指令执行部件的并行性,提高程序的执行效率,并且 无需用户参与。
下面即结合附图和实施例对本发明的具体实施方式
做详细的说明。本发 明实施例的编译方法的基本流程步骤如图l所示,所述编译方法包括
步骤Sll,识别包含第一指令的循环,所述循环在执行过程中有确定的控 制参数,所述循环不包含转移指令,且循环中所有的第一指令不存在迭代间 的相关性。
步骤S12,统计所述循环中第一指令和第二指令的指令数;
步骤S13,根据所述循环中的第一指令和第二指令的指令数、以及第一指 令执行部件和第二指令执行部件的执行能力,计算循环展开次数和第一指令 转换成第二指令的循环次数;
步骤S14,若所述循环展开次数不等于1,根据所述循环展开次数对所述 循环进行循环展开,并根据所述第一指令转换成第二指令的循环次数将所述 循环展开中的第 一指令转换成对应的第二指令。
所述第一指令是SIMD定点指令,第二指令是简单定点指令;或者,第 一指令是SIMD浮点指令,第二指令是简单浮点指令。其中,定点指令是指指令的操作数的数据类型是整数类型,浮点指令是指指令的操作数的数据类 型是浮点类型。下面是以第一指令是SIMD定点指令,第二指令是筒单定点
指令为例,结合图2对上述各步骤进行详细说明。
步骤S21,在对源程序进行编译的过程中,首先找到一个未处理的含SIMD 定点指令的DOLOOP循环。所述DOLOOP循环是指在循环执行过程中,循 环的控制参数不发生改变。所述DOLOOP循环还需要满足以下条件不包含 转移指令,以及循环中所有的SIMD定点指令不存在迭代间的相关性。满足 上述条件的DOLOOP循环可以保证SIMD定点指令转换成的简单定点指令和 其它的SIMD定点指令不存在数据相关。
本实施例中,SIMD定点指令是指定义了指令的操作数的数据类型为多整 型数据操作的指令,例如
intv4 va, v6, vc
intv4定义了va、 v6、 vc为4x32位的整型数据,vc=va+v6就是一条SIMD定 点指令,对4个32位的整型数据进行操作。
DOLOOP循环是指该循环在执行过程中有确定的控制参数(即上界、下 界和步长),也就是说,在循环执行过程中,该循环的上界、下界和步长不发 生改变,因此循环的执行次数即((下界-上界)/步长)也是确定的。 例如
do/=l, 100,4
{……
……} end do
该循环的上界为l,下界为100,步长为4。 又例如
do /=a, 6{…… ……}
end do
该循环的上界为a,下界为6,步长为l,若在程序执行到该循环时,a、 6为 确定的值,那么该循环也是DOLOOP循环。
转移指令是指会使循环在执行过程时跳出循环的指令,例如goto指令。
通常,1次循环又被称为1个迭代,迭代间的相关性是指本次循环的操作 与上次循环的操:作相关,例如
intv4 va[100]
doz=l, 100
end do
上述SIMD定点指令中,第i次循环中,计算v4/]的值时用到了上次循环计算得 到的va[Z-l]的值。
步骤S22,统计DOLOOP循环中SIMD定点指令和简单定点指令的指令数。 在找到满足步骤S21所述条件的DOLOOP循环后,对该DOLOOP循环中SIMD 定点指令和简单定点指令进行统计,得到该DOLOOP循环中简单定点指令的 指令数为/, SIMD定点指令的指令数为m,若将所有m条SIMD定点指令都转换 成简单定点指令,转换得到的简单定点指令的指令数为"。转换得到的简单定 点的指令数w与SIMD定点指令的指令数m的关系与SIMD定点指令的类型和各 类型的SIMD定点指令在程序中所占的比例有关,例如,l条intv4的SIMD加法 指令可以转换成4条32位的筒单加法指令,l条intl28的SIMD逻辑指令可以转 换成2条64位的简单逻辑指令。
步骤S23,根据所述DOLOOP循环中的SIMD定点指令和简单定点指令的 指令数、以及SIMD定点指令执行部件和简单定点指令执行部件的执行能力, 计算循环展开次数和SIMD定点指令转换成简单定点指令的循环次数。
13.点指令执行部件
和SIMD定点指令执行部件,所述执行部件的执行能力是指每个时钟周期处理 器可以发射给执行部件的指令数,执行能力可以由简单定点指令执行部件和
SIMD定点指令执行部件的硬件设计实现。本实施例中,简单定点指令执行部 件最多可以处理64位数据,SIMD定点指令执行部件最多可以处理128位数据。 设定简单定点指令执行部件的执行能力为x, SIMD定点指令执行部件的执行
fj匕
力为》
循环展开是指按照循环展开次数,将循环部分展开或全部展开,以减少 循环次数(或者说,迭代个数)。设定循环展开次数为w"ra仏其中包括/rara 个迭代需要把SIMD定点指令转换成简单定点指令(或者说,SIMD定点指令 转换成简单定点指令的循环次数为frara),因此,不需要把SIMD定点指令转 换成简单定点指令的迭代个数为(wwra〃- rara)。
当循环展开和指令转换后,简单定点指令的指令数为(朋^//*/+^^^*"), SIMD定点指令的指令数(0"w〃一ra"s"m)。
步骤S23计算所得的循环展开次数柳ra//、 SIMD定点指令转换成简单定点 指令的循环次数frara,应使循环展开和指令转换后的简单定点指令的指令数
SIMD定点指令的指令数(O"ra/"rarafm)的比值要尽量接 近(约等于)简单定点指令执行部件的执行能力x与SIMD定点指令执行部件 的执行能力y的比值。例如,执行下面的程序就可以得到循环展开次数w"ra〃 和SIMD定点指令转换成简单定点指令的循环次数 rara:
w"ra〃=l;
va/Me=abs(〃w-x/_y); for(z=2;/<MAX—UNROLL"++)
{ — forC+)上述程序中,DOLOOP循环中简单定点指令的指令数/, SIMD定点指令的指令 数m,转换得到的简单定点指令的指令数w,简单定点指令执行部件的执行能 力;c, SIMD定点指令执行部件的执行能力少确定后,就可以得到循环展开次数 ""ra//、 SIMD定点指令转换成简单定点指令的循环次数frara。
因为循环展开次数、SIMD定点指令转换成简单定点指令的循环次数是由 简单定点指令执行部件的执行能力、SIMD定点指令执行部件的执行能力计算 得到的,也就是比较精确考虑了部件之间的工作能力,因而在循环展开和指 令转换后,处理器可以合理地将简单定点指令、SIMD定点指令分配给简单定 点指令执行部件、SIMD定点指令执行部件。
步骤S24,判断步骤823计算所得的循环展开次数柳^//是否等于1,若是, 则返回至步骤S21,继续找下一个未处理的含SIMD定点指令的DOLOOP循环; 若否,则继续执行步骤S25。
步骤S25,根据计算所得的循环展开次数1#^0//对001^00 循环进行循环 展开,并根据计算所得的SIMD定点指令转换成简单定点指令的循环次数 rara 将所述循环展开中的SIMD定点指令转换成对应的简单定点指令。
举例来"^兌,对于下面的程序
intv4 —100],竭IOO], vc[100]
do/=l, 100
vc[/]=vfl[/]+v6[/];
end do
循环中,简单定点指令的指令数/ = 0, SIMD定点指令的指令数m = 1,将SIMD 定点指令转换成简单定点指令,转换得到的简单定点指令的指令数为"=4。
15若步骤S23计算所得的循环展开次数w"ra〃= 5,那么循环展开为 do/=l,100, 5 vc[d=v<3[/]+v6[/]; vc[/+l]=va[/+l]+v6[/+l]; vc[/+2]=va[/+2]+v6[/+2]; vc[z'+3]=va[/+3]+ ; vc[/+4]=va[/+4]+v6[/+4]; end do
在对循环进行循环展开后,再将循环展开后的程序中的部分SIMD定点 指令转换成简单定点指令,若步骤S23计算所得的SIMD定点指令转换成简 单定点指令的循环次数fram = 2,那么就将循环展开后的前2次循环体的 SIMD定点指令转换成对应的简单定点指令,例如
do/=l, 100,5
vc[/]. s 1 =va[/]. s 1 . s 1;
vc[/]. s2=va[/] .s2+v W]. s2;
vc [/]. s3 =va [/]. s3+v W]. s3;
vc[/].s4=ra[。-s4+v6[/].s4;
vc[/+l].sl,[/+l].sl+vZ)[/+l].sl; [/+1 ] s2=va[/+1 ]. s2+v6 [/+1 ]. s2;
vc[/+l].s3,|7+l].s3+ .s3;
vc[/+l].s4=va|7+l].s4+vW+l].s4;
vc[7+2]=—斗2]+v6 [/+2];
vc[f+3]=va|>'+3]+v6[/+3];
vc[/+4]=v4/+4]+v6 [/+4];
end do
其中,vc[/].sl表示w[/]中的第1个32位数据,依次类推,vc[/].s2表示vc[/]中的第2个32位数据,vc[/].s3表示vc[。中的第3个32位数据,vc[/].s4表示 w[/]中的第4个32位数据。因此,循环展开和指令转换后,简单定点指令的 指令数Ow^/W+frara*") = 8, SIMD定点指令的指令数((w"ra〃-frarafm) = 3。
需要说明的是,本实施例为使实施起来更为方便,是将循环展开后的前2 次循环体中的SIMD定点指令转换成对应的简单定点指令,实际上,将循环展 开后的最后2次循环体或者任意2次循环体的SIMD定点指令转换成对应的筒 单定点指令也是可以的。
本实施例中,为了充分利用处理器资源,还包括步骤S26,对步骤S25的 循环展开和指令转换后的循环进行指令调度。由于循环展开和指令转换后, 循环的指令顺序可能会是多条SIMD定点指令排列在多条简单定点指令后,这 样处理器在分配指令时会根据指令顺序先将简单定点指令发射给简单定点指 令执行部件,再将SIMD定点指令发射给SIMD定点指令执行部件,也就是不 能并行发射和执行简单定点指令和SIMD定点指令。指令调度就是按照数据相 关、控制相关和结构相关等约束条件,重排指令顺序,将筒单定点指令和SIMD 定点指令间隔开,以此提高处理器的资源利用率和指令并行度。指令调度有 多种为本领域技术人员所熟知的方法,并且也不是本发明的重点,在此即不 展开说明。
另外,还需要说明的是,本实施例的处理器包括简单定点指令执行部件 和SIMD定点指令执行部件,因此是以简单定点指令和SIMD定点指令为例进 行说明的。如果处理器还包括简单浮点指令执行部件,并扩展了SIMD浮点指 令执行部件,上述编译方法同样也是适用的。
对应上述编译方法,本实施例还提供一种编译器,用于将高级语言源程 序翻译成目标机器可以执行的目标程序。所述目标机器的处理器包含有筒单 指令执行部件和SIMD指令执行部件。简单指令执行部件可以是简单定点指令 执行部件,或者是简单浮点指令执行部件,或者是包括简单定点指令执行部件和简单浮点指令执行部件;SIMD指令执行部件可以是SIMD定点指令执行 部件,或者是SIMD浮点指令执行部件,或者是包括SIMD定点指令执行部件 和SIMD浮点指令执行部件。
如图3所示,所述编译器包括识别模块31、统计模块32、计算模块33、 转换模块34和调度模块35。
识别模块31 ,用于识别包含SIMD指令的循环,所述循环在执行过程中 有确定的控制参数,所述循环不包含转移指令,且循环中所有的第一指令不 存在迭代间的相关性。
统计模块32,用于统计所述识别模块31识别到的循环中的SIMD指令和 简单指令的指令数。
计算模块33,用于根据所述统计模块32统计得到的所述循环中的SIMD 指令和简单指令的指令数、以及SIMD指令执行部件和简单指令执行部件的 执行能力,计算循环展开次数和SIMD指令转换成简单指令的循环次数。
转换模块34,用于在所述循环展开次数不等于l时,根据所述计算模块33 计算得到的循环展开次数对所述循环进行循环展开,并根据所述SIMD指令转 换成简单指令的循环次数将所述循环展开中的SIMD指令转换成对应的简单 指令。
调度模块35,用于对所述转换模块34进行循环展开和指令转换得到的循 环进行指令调度。
综上所述,上述技术方案是一种针对包含单指令多数据扩展指令执行部 件的处理器的编译方法和编译器,实现了对包含有SIMD指令的程序的编译优 化,其具有以下优点
1.通过循环展开和指令转换,将循环中一部分SIMD指令转换成简单指 令,处理器可以合理地将简单指令、SIMD指令分配给简单指令执行部件、 SIMD指令执行部件,因此,上述技术方案可以控制执行部件之间的负载平衡,
18充分利用了处理器中的指令执行部件的并行性,提高程序的执行效率,减轻 用户的编程负担。
2. 被循环展开的循环需要满足以下条件在执行过程中具有确定的控制 参数,不包含转移指令,以及循环中所有的SIMD指令不存在迭代间的相关性。 这样可以保证SIMD指令转换成的简单指令和其它的SIMD指令不存在数据相 关。因此,循环展开和指令转换后的简单指令和SIMD指令能够并行执行,进 而达到较好的执行效率。
3. 循环展开次数、SIMD指令转换成简单指令的循环次数是由简单指令 执行部件的执行能力、SIMD指令执行部件的执行能力计算得到的,也就是比 较精确考虑了部件之间的工作能力,因而在循环展开和指令转换后,处理器 可以根据指令执行部件的执行能力的比例将简单指令、SIMD指令分配给简单 指令执行部件、SIMD指令执行部件。
4. 当简单指令执行部件和SIMD指令执行部件的执行能力有变化,由用 户手工优化的程序就不能很好的适用,而上述技术方案具有较好的可移植性, 只需要要修改优化过程中的相应参数,源程序不做改动,就可以适用新的处 理器。
本发明虽然以寿交佳实施例公开如上,但其并不是用来限定本发明,任何 本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和 修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
权利要求
1. 一种编译方法,其特征在于,包括下述步骤识别包含第一指令的循环,所述循环在执行过程中有确定的控制参数,所述循环不包含转移指令,且循环中所有的第一指令不存在迭代间的相关性;统计所述循环中第一指令和第二指令的指令数;根据所述循环中的第一指令和第二指令的指令数、以及第一指令执行部件和第二指令执行部件的执行能力,计算循环展开次数和第一指令转换成第二指令的循环次数;若所述循环展开次数不等于1,根据所述循环展开次数对所述循环进行循环展开,并根据所述第一指令转换成第二指令的循环次数将所述循环展开中的第一指令转换成对应的第二指令。
2. 根据权利要求1所述的编译方法,其特征在于,所述第一指令是单指令 多数据定点指令,第二指令是简单定点指令。
3. 根据权利要求1所述的编译方法,其特征在于,所述第一指令是单指令 多数据浮点指令,第二指令是简单浮点指令。
4. 根据权利要求1所述的编译方法,其特征在于,所述循环的控制参数包 括上界、下界和步长。
5. 根据权利要求1所述的编译方法,其特征在于,所述循环展开次数、第 一指令转换成第二指令的循环次数根据下面的条件计算循环展开和指令转换后的第一指令的指令数与第二指令的指令数的比值 约等于第 一指令执行部件的执行能力与第二指令执行部件的执行能力的比 值,其中,所述循环展开和指令转换后的第二指令的指令数为0^0//*/+^朋^"),第 一指令的指令数为((wwo/"rara)5^),其中,朋ra〃为循环展开次数,为 第一指令转换成第二指令的循环次数,/为所述循环中第二指令的指令数,w为所述循环中第一指令的指令数,"为将m条第一指令转换得到的第二指令的指令数。
6. 根据权利要求5所述的编译方法,其特征在于,根据所述第一指令转换 成第二指令的循环次数将所述循环展开中的第 一指令转换成对应的第二指令 是指将所述循环展开中的前次循环体的第一指令转换成对应的第二指 令。
7. 根据权利要求5所述的编译方法,其特征在于,根据所述第一指令转换 成第二指令的循环次数将所述循环展开中的第 一指令转换成对应的第二指令是指将所述循环展开中的后/rara次循环体的第一指令转换成对应的第二指令。
8. 根据权利要求1所述的编译方法,其特征在于,还包括对所述循环展开 和指令转换后的循环进行指令调度。
9. 一种编译方法,其特征在于,包括下述步骤 查找到一个未处理的包含第一指令的循环,所述循环在执行过程中有确定的控制参数,所述循环不包含转移指令,且循环中所有的第一指令不存在 迭代间的相关性;统计所述循环中第 一指令和第二指令的指令数;根据所述循环中的第一指令和第二指令的指令数、以及第一指令执行部 件和第二指令执行部件的执行能力,计算循环展开次数和第一指令转换成第二指令的循环次数;若所述循环展开次数不等于1,根据所述循环展开次数对所述循环进行循 环展开,并根据所述第一指令转换成第二指令的循环次数将所述循环展开中 的第 一指令转换成对应的第二指令;若所述循环展开次数等于1,继续查找下一个未处理的包含第一指令的循 环,重复上述步骤。
10. 根据权利要求9所述的编译方法,其特征在于,所述循环展开次数、第一指令转换成第二指令的循环次数4艮据下面的条件计算循环展开和指令转换后的第 一指令的指令数与第二指令的指令数的比值 约等于第 一 指令执行部件的执行能力与第二指令执行部件的执行能力的比 值,其中,所述循环展开和指令转换后的第二指令的指令数为0^0//*/+化""^"),第一指令的指令数为(07ra〃Vra"力5^),其中,w"ra〃为循环展开次数,frara为 第一指令转换成第二指令的循环次数,/为所述循环中第二指令的指令数,附为所述循环中第一指令的指令数,"为将m条第一指令转换得到的第二指令 的指令数。
11. 一种编译器,其特征在于,包括识别模块,用于识别包含第一指令的循环,所述循环在执行过程中有确 定的控制参数,所述循环不包含转移指令,且循环中所有的第一指令不存在 迭代间的相关性;统计模块,用于统计所述识别模块识别到的循环中的第 一指令和第二指 令的指令数;计算模块,用于根据所述统计模块统计得到的所述循环中的第一指令和 第二指令的指令数、以及第一指令执行部件和第二指令执行部件的执行能力, 计算循环展开次数和第一指令转换成第二指令的循环次数;转换模块,用于在所述循环展开次数不等于1时,根据所述计算模块计 算得到的循环展开次数对所述循环进行循环展开,并根据所述第一指令转换 成第二指令的循环次数将所述循环展开中的第 一指令转换成对应的第二指令。
12. 根据权利要求11所述的编译器,其特征在于,所述第一指令是单指令多 数据定点指令,第二指令是简单定点指令。
13. 根据权利要求11所述的编译器,其特征在于,所述第一指令是单指令多数据浮点指令,第二指令是简单浮点指令。
14. 根据权利要求11所述的编译器,其特征在于,所述循环的控制参数包括 上界、下界和步长。
15. 根据权利要求11所述的编译器,其特征在于,所述计算模块根据下面的 条件计算循环展开次数、第一指令转换成第二指令的循环次数循环展开和指令转换后的第 一指令的指令数与第二指令的指令数的比值 约等于第 一 指令执行部件的执行能力与第二指令执行部件的执行能力的比 值,其中,所述循环展开和指令转换后的第二指令的指令数为,第 一指令的指令数为(O2ra〃一rara)51^),其中,wwra〃为循环展开次数,为 第一指令转换成第二指令的循环次数,/为所述循环中第二指令的指令数,m为所述循环中第一指令的指令数,"为将m条第一指令转换得到的第二指令 的指令数。
16. 根据权利要求15所述的编译器,其特征在于,所述转换模块将所述循环 展开中的第 一指令转换成对应的第二指令是指将所述循环展开中的前次 循环体的第 一指令转换成对应的第二指令。
17. 根据权利要求15所述的编译器,其特征在于,所述转换模块将所述循环 展开中的第 一指令转换成对应的第二指令是指将所述循环展开中的后次 循环体的第 一指令转换成对应的第二指令。
18. 根据权利要求11所述的编译器,其特征在于,还包括调度模块,用于对 所述转换模块进行循环展开和指令转换得到的循环进行指令调度。
全文摘要
一种编译方法和编译器。所述编译方法包括识别包含第一指令的循环,所述循环在执行过程中有确定的控制参数,所述循环不包含转移指令,且所有的第一指令不存在迭代间的相关性;统计所述循环中第一指令和第二指令的指令数,并根据第一指令执行部件和第二指令执行部件的执行能力计算循环展开次数和第一指令转换成第二指令的循环次数;若所述循环展开次数不等于1,对所述循环进行循环展开,并根据所述第一指令转换成第二指令的循环次数将所述循环展开中的第一指令转换成对应的第二指令。所述编译方法和编译器可以充分利用处理器中的指令执行部件的并行性,提高程序的执行效率,减轻用户的编程负担。
文档编号G06F9/45GK101452394SQ20071009432
公开日2009年6月10日 申请日期2007年11月28日 优先权日2007年11月28日
发明者尉红梅, 李中升, 漆锋滨, 勇 郭 申请人:无锡江南计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1