JP2009070070A - Compiler and compile method - Google Patents
Compiler and compile method Download PDFInfo
- Publication number
- JP2009070070A JP2009070070A JP2007236818A JP2007236818A JP2009070070A JP 2009070070 A JP2009070070 A JP 2009070070A JP 2007236818 A JP2007236818 A JP 2007236818A JP 2007236818 A JP2007236818 A JP 2007236818A JP 2009070070 A JP2009070070 A JP 2009070070A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- vector
- dividing
- value
- intermediate text
- 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.)
- Pending
Links
Images
Landscapes
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
本発明は、FortranやC言語となどの高級言語を入力し、ベクトルプロセッサ向けの目的プログラムを生成するコンパイラ及びコンパイル方法に関する。 The present invention relates to a compiler and a compiling method for inputting a high-level language such as Fortran or C language and generating a target program for a vector processor.
FortranやC言語などの高級言語からベクトルプロセッサ向けの目的プログラムを生成するコンパイラは、一般にソースプログラム中のループを、ベクトル処理を行うベクトル命令列に変換するベクトル化機能を備える。このベクトル化において生成される1個のベクトル命令が処理するデータ要素数は、ループの繰り返し数以下となる。 A compiler that generates a target program for a vector processor from a high-level language such as Fortran or C language generally has a vectorization function for converting a loop in a source program into a vector instruction sequence for performing vector processing. The number of data elements processed by one vector instruction generated in this vectorization is equal to or less than the number of loop iterations.
ここで、ループの繰り返し数が、ベクトルプロセッサの最大ベクトル長よりも小さな場合、ベクトルプロセッサの備える演算器などのハードウェア資源に空きが生じてしまう。そのため、生成された目的プログラムの実行効率が低くなってしまう。 Here, when the number of loop repetitions is smaller than the maximum vector length of the vector processor, a hardware resource such as an arithmetic unit provided in the vector processor is vacant. For this reason, the execution efficiency of the generated target program is lowered.
そこで、ベクトル化するループの繰り返し数を大きくする手法として、ループを一重化する技術が考えられている(例えば、特許文献1参照。)。 Therefore, as a technique for increasing the number of loop iterations to be vectorized, a technique for unifying the loops has been considered (for example, see Patent Document 1).
また、多重ループのループ交換により、ベクトル化するループの繰り返し数を大きくする技術が考えられている(例えば、非特許参考文献1参照。)。 Further, a technique for increasing the number of loop repetitions to be vectorized by exchanging multiple loops has been considered (for example, see Non-patent Reference 1).
また、ループ内の複数の同一演算に対して1個のベクトル命令を生成する方法が考えられている(例えば、特許文献2参照。)。
しかし、特許文献1に記載された技術を用いたループ一重化は、多重ループ内で使用されているすべての配列が連続でなければならないという条件がある。そのため、適用できる多重ループがかなり限定されてしまうという問題点がある。
However, loop unification using the technique described in
また、非特許文献1に記載された技術を用いたループ交換においては、多重ループを構成するループ中の最大の繰り返し数以上にはできない。そのため、すべてのループの繰り返し数が最大ベクトル長よりも小さな場合は、実行効率を改善することが困難であるという問題点がある。
Further, in the loop exchange using the technique described in
また、特許文献2に記載された技術においては、同一演算を複数含むループにしか適用することができないという問題点がある。
In addition, the technique described in
本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、ループの繰り返し数が、ベクトルプロセッサの最大ベクトル長よりも小さな2重ループであっても、実行効率の高いベクトルプロセッサ向けの目的プログラムを制限なく生成することができるコンパイラ及びコンパイル方法を提供することを目的とする。 The present invention has been made in view of the problems of the conventional technology as described above, and even if the number of loop iterations is a double loop smaller than the maximum vector length of the vector processor, the execution efficiency is improved. An object of the present invention is to provide a compiler and a compiling method that can generate a target program for a vector processor having a high level without limitation.
上記目的を達成するために本発明は、
外側ループと内側ループとの2重ループを有するソースプログラムを目的プログラムに変換するコンパイラであって、
前記外側ループの繰り返し数をMとし、前記内側ループの繰り返し数をNとし、前記ソースプログラムの最大ベクトル長をVLとし、前記Nが前記VLの1/2以下である場合、
前記2重ループを、
前記Nの要素の演算を行うベクトル演算をループ本体とし、前記Mを、前記VLを前記Nで割った値と前記Mとのどちらか小さな値で割った余りの値を繰り返し数とするループと、
前記VLを前記Nで割った値と前記Mとのどちらか小さな値に前記Nを乗じた値の要素の演算を行うベクトル演算をループ本体とし、前記Mを、前記VLを前記Nで割った値と前記Mとのどちらか小さな値で割った値を繰り返し数とするループとの2重ループに変換する。
In order to achieve the above object, the present invention provides:
A compiler for converting a source program having a double loop of an outer loop and an inner loop into a target program,
When the number of iterations of the outer loop is M, the number of iterations of the inner loop is N, the maximum vector length of the source program is VL, and N is 1/2 or less of the VL,
The double loop,
A loop that uses a vector operation for calculating the elements of N as a loop body, and that uses the remainder of dividing M by a value obtained by dividing VL by N or the smaller value of M; ,
A vector operation for calculating an element of a value obtained by multiplying the value obtained by dividing the VL by the value obtained by dividing the VL by the N or the value obtained by multiplying the N by the N is used as a loop body, and the M is divided by the VL It is converted into a double loop with a loop having a value obtained by dividing a value divided by the smaller value of M and the value M.
以上説明したように本発明においては、ソースプログラムが有する2重ループのうち、外側ループの繰り返し数をMとし、内側ループの繰り返し数をNとし、ソースプログラムの最大ベクトル長をVLとし、NがVLの1/2以下である場合、2重ループを、Nの要素の演算を行うベクトル演算をループ本体とし、Mを、VLをNで割った値とMとのどちらか小さな値で割った余りの値を繰り返し数とするループと、VLをNで割った値とMとのどちらか小さな値にNを乗じた値の要素の演算を行うベクトル演算をループ本体とし、Mを、VLをNで割った値とMとのどちらか小さな値で割った値を繰り返し数とするループとの2重ループに変換する構成としたため、ループの繰り返し数が、ベクトルプロセッサの最大ベクトル長よりも小さな2重ループであっても、実行効率の高いベクトルプロセッサ向けの目的プログラムを制限なく生成することができる。 As described above, in the present invention, among the double loops of the source program, the number of iterations of the outer loop is M, the number of iterations of the inner loop is N, the maximum vector length of the source program is VL, and N is When VL is ½ or less, the double loop is a vector operation for calculating the elements of N as a loop body, and M is divided by a value obtained by dividing VL by N or M, whichever is smaller. A loop having the remainder as the number of repetitions, and a vector operation for calculating an element of a value obtained by multiplying a value obtained by dividing N by a value obtained by dividing VL by N or M, is set as M. Since the loop is converted into a double loop with a loop obtained by dividing the value divided by N or M, whichever is smaller, the number of loop iterations is smaller than the maximum vector length of the vector processor. Even in a double loop, a target program for a vector processor with high execution efficiency can be generated without restriction.
以下に、本発明の実施の形態について図面を参照して説明する。 Embodiments of the present invention will be described below with reference to the drawings.
図1は、本発明のコンパイラの実施の一形態を示す図である。 FIG. 1 is a diagram showing an embodiment of a compiler of the present invention.
本形態は図1に示すように、ソースプログラム記憶装置1と、コンパイラ2と、目的プログラム記憶装置3とから構成されている。
As shown in FIG. 1, this embodiment includes a source
ソースプログラム記憶装置1は、FortranやC言語などの高級言語で記述されたソースプログラムを記憶する。
The source
コンパイラ2は、ソースプログラム記憶装置1に記憶されているソースプログラムからコンピュータが実行できる形式であるオブジェクトコード(目的プログラム)を生成する。つまり、ソースプログラムを目的プログラムに変換する。そして、生成した目的プログラムを目的プログラム記憶装置3へ送信する。
The
目的プログラム記憶装置3は、コンパイラ2から送信されてきた目的プログラムを記憶する。
The target
さらに、コンパイラ2は、ソースプログラム解析部21と、ループ解析部22と、ループ変換部23と、目的プログラム生成部24と、第1中間テキスト記憶部25と、ループ情報記憶部26と、第2中間テキスト記憶部27とから構成されている。
Furthermore, the
ソースプログラム解析部21は、ソースプログラム記憶装置1に記憶されているソースプログラムを入力し、解析処理および変換処理で使用するための第1中間テキストを生成する。そして、生成した第1中間テキストを第1中間テキスト記憶部25に記憶させる。
The source
第1中間テキスト記憶部25は、ソースプログラム解析部21にて生成された第1中間テキストを記憶する。
The first intermediate
ループ解析部22は、ソースプログラム解析部21にて生成されて第1中間テキスト記憶部25に記憶された第1中間テキストを入力し、ループの入れ子構造およびループの繰り返し回数、ループインデックス、ループ内の文のデータ依存、制御依存情報を含むループ情報を生成する。そして、生成したループ情報をループ情報記憶部26に記憶させる。
The
ループ情報記憶部26は、ループ解析部22にて生成されたループ情報を記憶する。
The loop
ループ変換部23は、ループ解析部22にて生成されてループ情報記憶部26に記憶されたループ情報に基づいて第2中間テキストを生成する。具体的には、内側ループがベクトル化可能かつ繰り返し数N(Nは1以上の整数)が最大ベクトル長VL(VLは1以上の整数)の1/2以下で外側ループの繰り返し数M(Mは1以上の整数)が2以上かつ変換可能条件を満たす2重ループを選択する。ここで、最大ベクトル長とは、1つのベクトル命令で処理できる最大要素数である。第1中間テキスト記憶部25から入力した第1中間テキスト中の選択された2重ループを、N要素の演算を行うベクトル演算をループ本体とする繰り返し数mod(M, min(M, VL/N))のループと、Nにmin(M, VL/N)を乗算するN*min(M, VL/N)要素の演算を行うベクトル演算をループ本体とする繰り返し数M/min(M, VL/N)のループとに変換した第2中間テキストを生成する。そして、生成した第2中間テキストを第2中間テキスト記憶部27に記憶させる。ここで、mod(x,y)は、xをyで割った(除算した)余りの値を示す。また、min(x,y)は、xとyとのどちらか小さな値を示す。また、VL/Nを第1の除算処理、M/min(M, VL/N)を第2の除算処理とする。
The
第2中間テキスト記憶部27は、ループ変換部23にて生成された第2中間テキストを記憶する。
The second intermediate
目的プログラム生成部24は、第2中間テキスト記憶部27からループ変換部23にて生成された第2中間テキストを入力し、目的プログラムを生成して、目的プログラム記憶装置3へ送信する。この入力は、目的プログラム生成部24によって第2中間テキスト記憶部27から第2中間テキストが読み出されることによるものであっても良い。
The target
以下に、図1に示したコンパイラ2におけるコンパイル方法について説明する。
A compiling method in the
図2は、図1に示したコンパイラ2におけるコンパイル方法を説明するためのフローチャートである。
FIG. 2 is a flowchart for explaining a compiling method in the
まず、ソースプログラム解析部21に、ソースプログラム記憶装置1に記憶されているソースプログラムが入力する。ソースプログラム解析部21は、入力したソースプログラムの字句解析および構文解析などを行い、解析処理および変換処理で使用するための第1中間テキストを生成する。そして、生成した第1中間テキストを第1中間テキスト記憶部25に記憶させる。
First, the source program stored in the source
その後、ループ解析部22に、第1中間テキスト記憶部25に記憶された第1中間テキストが入力する。この入力は、ループ解析部22によって第1中間テキスト記憶部25から第1中間テキストが読み出されることによるものであっても良い。
Thereafter, the first intermediate text stored in the first intermediate
ループ解析部22は、入力した第1中間テキストについて、当該第1中間テキストのプログラム中に現れる全ループ構造を解析し、ループインデックス、ループの繰り返し数、ループ間の入れ子関係、ループ内の文のデータ依存および制御依存関係を調査する。そして、調査した結果の情報を有するループ情報を生成する。生成されたループ情報をループ情報記憶部26に記憶させる。
The
その後、ループ変換部23は、ループ情報記憶部26に記憶されているループ情報を読み出す。読み出されたループ情報に基づいて、変換対象となる2重ループを選択する。ループ変換部23の動作は以下に示す通りである。
Thereafter, the
まず、ループ内の文のデータ依存および制御依存がベクトル化可能条件を満たすループを選択する(ステップS101)。 First, a loop in which the data dependency and control dependency of a statement in the loop satisfy the vectorizable condition is selected (step S101).
ステップS101にて選択されたループの中から、ループの繰り返し数Nがベクトルプロセッサの最大ベクトル長VLの1/2以下であるものを選択する(ステップS102)。 From the loops selected in step S101, a loop whose loop repetition number N is 1/2 or less of the maximum vector length VL of the vector processor is selected (step S102).
ステップS102にて選択されたループが別のループの内側ループとなっているものを選択する(ステップS103)。 The loop selected in step S102 is selected as an inner loop of another loop (step S103).
ステップS103にて選択されたループの外側ループの繰り返し数が2以上であるものを選択する(ステップS104)。 A loop with the number of repetitions of the outer loop selected in step S103 being 2 or more is selected (step S104).
ステップS104にて選択されたループの外側ループ内の文の間でデータ依存および制御依存が存在しないものを選択する(ステップS105)。 A sentence that does not have data dependency and control dependency among the statements in the outer loop of the loop selected in step S104 is selected (step S105).
以上のステップS101からステップS105で選択されたループおよびそのループの外側ループから構成される2重ループに対応する第1中間テキストを変換し、第2中間テキストとして生成する(ステップS106)。そして、生成した第2中間テキストを第2中間テキスト記憶部27に記憶させる。
The first intermediate text corresponding to the double loop composed of the loop selected in steps S101 to S105 and the outer loop of the loop is converted and generated as the second intermediate text (step S106). Then, the generated second intermediate text is stored in the second intermediate
なお、3重以上入れ子になった多重ループの場合でも、それを構成している最内側の2重ループがステップS101からステップS105の条件を満たしていれば、その内側の2重ループ部分を変換対象とすることができる。 Even in the case of multiple loops nested in three or more layers, if the innermost double loop constituting the loop satisfies the conditions of steps S101 to S105, the inner double loop portion is converted. Can be targeted.
変換処理では、繰り返し数mod(M, min(M, VL/N))の第1のループと、それに続く、ループインデックスJ2の始値がmod(M, min(M, VL/N))+1、限界値がM、増分値INCがmin(M, VL/N)の第2のループとを生成する。 In the conversion process, the first loop of the repetition number mod (M, min (M, VL / N)) and the subsequent opening value of the loop index J2 is mod (M, min (M, VL / N)) + 1. A second loop having a limit value M and an increment value INC of min (M, VL / N) is generated.
第1のループのループ本体は、もとの2重ループの内側ループのループ本体中で参照されている外側ループのループインデックスJを第1のループのループインデックスに置換し、内側ループのループインデックスIの始値から限界値の範囲の要素の演算を行うベクトル演算とする。 The loop body of the first loop replaces the loop index J of the outer loop referenced in the loop body of the inner loop of the original double loop with the loop index of the first loop, and the loop index of the inner loop It is assumed that a vector operation is performed for calculating an element in the range from the starting value of I to the limit value.
第2のループのループ本体は、2種類のベクトル転送と1種類のベクトル演算とから構成される。1つ目のベクトル転送は、もとの2重ループの内側ループのループ本体で参照されている各配列Xn(I,J)に対し、Xn(1:N, J2)を大きさN*INCの作業用配列WXnの1からN番目の要素であるWXn(1:N)に、Xn(1:N,J2+1) をWXn(N+1:2*N)に、・・・、Xn(1:N, J2+INC-1) をWXn((INC-1)*N+1:INC*N)にそれぞれ転送するベクトル転送である。また、ベクトル演算は、内側ループ内の演算のオペランドの配列Xn(I,J)を対応する作業配列WXn(1:N*INC)に置換し、演算結果の格納先の配列Yn(I,J)を大きさN*INCの作業配列WYn(1:N*INC)に置換したベクトル演算である。また2つ目のベクトル転送は、ループ本体内で定義されている各配列Yn(I,J)に対し、対応する作業配列WYn(1:N)をYn(1:N,J2)に、WYn(N+1:2*N)をYn(1:N,J2+1)に、・・・、WYn((INC-1)*N+1:INC*N)をYn(1:N,J+INC-1)にそれぞれ転送するベクトル転送である。 The loop body of the second loop is composed of two types of vector transfers and one type of vector operation. The first vector transfer takes Xn (1: N, J2) of size N * INC for each array Xn (I, J) referenced in the loop body of the inner loop of the original double loop. , Xn (1: N, J2 + 1) into WXn (N + 1: 2 * N), WXn (1: N) as the 1st to Nth elements of the working array WXn In this vector transfer, (1: N, J2 + INC-1) is transferred to WXn ((INC-1) * N + 1: INC * N). The vector operation replaces the operand array Xn (I, J) of the operation in the inner loop with the corresponding work array WXn (1: N * INC), and stores the operation result storage array Yn (I, J ) Is replaced with a work array WYn (1: N * INC) of size N * INC. In the second vector transfer, for each array Yn (I, J) defined in the loop body, the corresponding work array WYn (1: N) is changed to Yn (1: N, J2) and WYn (N + 1: 2 * N) to Yn (1: N, J2 + 1), ..., WYn ((INC-1) * N + 1: INC * N) to Yn (1: N, J + INC-1) is a vector transfer.
そして、目的プログラム生成部24は、第2中間テキスト記憶部27から第2中間テキストを読み出し、読み出した第2中間テキストに基づいてベクトルプロセッサの目的プログラムを生成して目的プログラム記憶装置3へ送信する。
(実施例)
以下に本発明の実施例を示す。
Then, the target
(Example)
Examples of the present invention are shown below.
図3は、Fortran言語で記述された2重ループを含むソースプログラムの一例を示す図である。 FIG. 3 is a diagram illustrating an example of a source program including a double loop described in the Fortran language.
図3に示すソースプログラムは、配列Bと配列Cとの加算を行い、結果を配列Aに求めるものである。このソースプログラムを入力し、最大ベクトル長VLが100であるベクトルプロセッサの目的プログラムを生成する場合を例に挙げる。 The source program shown in FIG. 3 adds the array B and the array C and obtains the result in the array A. As an example, the source program is input and a target program of a vector processor having a maximum vector length VL of 100 is generated.
ループ解析部22は、ソースプログラム解析部21が図3に示したソースプログラムから生成した第1中間テキストを解析し、ループ情報を生成する。生成されるループ情報は、ループL1の繰り返し数が10、ループL2の繰り返し数が30、ループL1,L2ともにデータ依存と制御依存なし、ループL1がループL2の外側ループとなっているという情報である。
The
次に、ループ変換部23は、ループ解析部22が生成したループ情報から、ループL2がベクトル化可能であること、また30である繰り返し数が最大ベクトル長100の1/2以下であること、またループL2の外側にループL1が存在すること、ループL1の繰り返し数が2以上であることを判断する。そして、ループL1とループL2とから構成される2重ループを変換対象として選択し、第2中間テキストを生成する。
Next, from the loop information generated by the
図4は、図1に示したループ変換部23にて生成された第2中間テキストの一例を示す図である。
FIG. 4 is a diagram showing an example of the second intermediate text generated by the
図4に示した第2中間テキストは、ループ変換部23にて変換されたループL11及びループL12を有する。
The second intermediate text shown in FIG. 4 has a loop L11 and a loop L12 converted by the
ループL11は、繰り返し数mod(10, min(10, 100/30))=mod(10, 3)=1でループインデックスがJ1とする。ループL11のループ本体は、ループL2内の文中に現れる外側ループL1のループインデックスJをループL11のループインデックスJ1に置換し、ループL2のループインデックスIを1から30の要素のアクセスに置換したベクトル演算A(1:30,J1)←B(1:30,J1)+C(1:30,J1)とする。 The loop L11 has a repetition number mod (10, min (10, 100/30)) = mod (10, 3) = 1 and a loop index J1. The loop body of the loop L11 is a vector in which the loop index J of the outer loop L1 appearing in the sentence in the loop L2 is replaced with the loop index J1 of the loop L11, and the loop index I of the loop L2 is replaced with access of 1 to 30 elements. Operation A (1:30, J1) ← B (1:30, J1) + C (1:30, J1).
ループL12は、始値がmod(10, min(10, 100/30))+1=mod(10, 3)+1=2、限界値がループL11と同じ10、増分値がmin(10, 100/30)=3であり、ループインデックスはJ2である。ループL12のループ本体は、3種類のベクトルと1種類のベクトル加算とから構成される。 In the loop L12, the opening price is mod (10, min (10, 100/30)) + 1 = mod (10,3) + 1 = 2, the limit value is the same as the loop L11, and the increment value is min (10, 100/30) = 3 and the loop index is J2. The loop body of the loop L12 includes three types of vectors and one type of vector addition.
1つ目のベクトル転送は、配列B(1:30,J2) を大きさ30*3=90の作業用配列WX1の先頭30の要素に、またB(1:30,J2+1)をWX1の31から60の要素に、またB(1:30,J2+2)をWX1の61から90の要素にそれぞれ格納する3個のベクトル転送である。2つ目のベクトル転送は、C(1:30,J2) を作業用配列WX2の先頭30の要素に、またC(1:30,J2+1)をWX2の31から60の要素に、またC(1:30,J2+2)をWX2の61から90の要素にそれぞれ転送する3個のベクトル転送である。ベクトル加算は、WX1とWX2との90の要素の加算結果を一時配列WY1に求めるベクトル加算である。3つ目のベクトル転送は、WY1の先頭30の要素をA(1:30,J2)に、またWY1の31から60の要素をA(1:30,J2+1)に、またWY1の61から90の要素をA(1:30,J2+2)にそれぞれ転送する3個のベクトル転送である。
In the first vector transfer, array B (1: 30, J2) is set to the top 30 elements of work array WX1 of
ループ変換部23は、変換した第2中間テキストを、第2中間テキスト記憶部27に記憶させる。
The
そして、目的プログラム生成部24は、第2中間テキスト記憶部27から第2中間テキストを読み出し、読み出した第2中間テキストに基づいてベクトルプロセッサの目的プログラムを生成して目的プログラム記憶装置3へ送信する。この第2中間テキストに基づいて目的プログラムを生成する方法については、一般的な方法を用いるもので良い。
Then, the target
以上説明したように本発明においては、最大ベクトル長をVL、外側ループの繰り返し数をM、内側ループの繰り返し数をNとした場合、従来技術ではN要素の演算を行うmin(m,VL/N) 個のベクトル演算命令で処理していたのと同等の処理を、ループ変換部23により、N*min(M, VL/N)要素の演算を行うベクトル演算命令1個で処理できる目的プログラムを生成できる。
As described above, in the present invention, when the maximum vector length is VL, the number of iterations of the outer loop is M, and the number of iterations of the inner loop is N, the conventional technique performs the calculation of N elements min (m, VL / N) A target program that can process the same processing as that performed by vector operation instructions with a single vector operation instruction that performs N * min (M, VL / N) element operations by the
これにより、プログラム中の内側ループの繰り返し数が最大ベクトル長の1/2以下である2重ループに対して、実効効率の高いベクトルプロセッサ向けの目的プログラムを生成できる。 As a result, a target program for a vector processor with high effective efficiency can be generated for a double loop in which the number of iterations of the inner loop in the program is 1/2 or less of the maximum vector length.
1 ソースプログラム記憶装置
2 コンパイラ
3 目的プログラム記憶装置
21 ソースプログラム解析部
22 ループ解析部
23 ループ変換部
24 目的プログラム生成部
25 第1中間テキスト記憶部
26 ループ情報記憶部
27 第2中間テキスト記憶部
L1,L2,L11,L12 ループ
1 source
Claims (4)
前記外側ループの繰り返し数をMとし、前記内側ループの繰り返し数をNとし、前記ソースプログラムの最大ベクトル長をVLとし、前記Nが前記VLの1/2以下である場合、
前記2重ループを、
前記Nの要素の演算を行うベクトル演算をループ本体とし、前記Mを、前記VLを前記Nで割った値と前記Mとのどちらか小さな値で割った余りの値を繰り返し数とするループと、
前記VLを前記Nで割った値と前記Mとのどちらか小さな値に前記Nを乗じた値の要素の演算を行うベクトル演算をループ本体とし、前記Mを、前記VLを前記Nで割った値と前記Mとのどちらか小さな値で割った値を繰り返し数とするループとの2重ループに変換するコンパイラ。 A compiler for converting a source program having a double loop of an outer loop and an inner loop into a target program,
When the number of iterations of the outer loop is M, the number of iterations of the inner loop is N, the maximum vector length of the source program is VL, and N is 1/2 or less of the VL,
The double loop,
A loop that uses a vector operation for calculating the elements of N as a loop body, and that uses the remainder of dividing M by a value obtained by dividing VL by N or the smaller value of M; ,
A vector operation for calculating an element of a value obtained by multiplying the value obtained by dividing the VL by the value obtained by dividing the VL by the N or the value obtained by multiplying the N by the N is a loop body, and the M is obtained by dividing the VL by the N. A compiler that converts a loop obtained by dividing a value obtained by dividing a value by M, whichever is smaller, into a double loop.
前記変換した2重ループに基づいて前記目的プログラムを生成することを特徴とするコンパイラ。 The compiler according to claim 1,
A compiler that generates the object program based on the converted double loop.
前記外側ループの繰り返し数をMとし、前記内側ループの繰り返し数をNとし、前記ソースプログラムの最大ベクトル長をVLとし、前記Nが前記VLの1/2以下である場合、
前記VLを前記Nによって除算する第1の除算処理と、
前記Mを前記第1の除算処理の結果と前記Mとのどちらか小さな値によって除算する第2の除算処理と、
前記第1の除算処理の結果と前記Mとのどちらか小さな値に前記Nを乗ずる乗算処理と、
前記Nの要素の演算を行うベクトル演算をループ本体とし、前記第2の除算処理の結果の余りの値を繰り返し数とするループと、前記乗算処理の結果の値の要素の演算を行うベクトル演算をループ本体とし、前記第2の除算処理の結果の値を繰り返し数とするループとの2重ループに変換する処理とを有するコンパイル方法。 A compiling method for converting a source program having a double loop of an inner loop and an outer loop into a target program,
When the number of iterations of the outer loop is M, the number of iterations of the inner loop is N, the maximum vector length of the source program is VL, and N is 1/2 or less of the VL,
A first division process for dividing the VL by the N;
A second division process for dividing M by the smaller value of the result of the first division process and M;
A multiplication process for multiplying the smaller value of the result of the first division process and the M by the N;
A vector operation for calculating the element of N is a loop operation in which a vector operation for calculating the element of N is used as a loop body, and the number of repetitions is a remainder value of the result of the second division process. And a process of converting the loop body into a double loop with a loop having the value of the result of the second division process as the number of repetitions.
前記変換した2重ループに基づいて前記目的プログラムを生成する処理を有することを特徴とするコンパイル方法。 The compiling method according to claim 3,
A compiling method comprising processing for generating the object program based on the converted double loop.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007236818A JP2009070070A (en) | 2007-09-12 | 2007-09-12 | Compiler and compile method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007236818A JP2009070070A (en) | 2007-09-12 | 2007-09-12 | Compiler and compile method |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009070070A true JP2009070070A (en) | 2009-04-02 |
Family
ID=40606265
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007236818A Pending JP2009070070A (en) | 2007-09-12 | 2007-09-12 | Compiler and compile method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009070070A (en) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62169272A (en) * | 1986-01-22 | 1987-07-25 | Fujitsu Ltd | Unrolling processing system for vector arithmetic string loop |
JPS6454570A (en) * | 1987-08-25 | 1989-03-02 | Nec Corp | Vectorization system |
JPH02236775A (en) * | 1989-03-10 | 1990-09-19 | Nec Corp | Compiler |
JPH0594470A (en) * | 1991-09-30 | 1993-04-16 | Nec Corp | Vectrization system |
JPH05324346A (en) * | 1992-05-20 | 1993-12-07 | Nec Corp | Vectorization system |
-
2007
- 2007-09-12 JP JP2007236818A patent/JP2009070070A/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62169272A (en) * | 1986-01-22 | 1987-07-25 | Fujitsu Ltd | Unrolling processing system for vector arithmetic string loop |
JPS6454570A (en) * | 1987-08-25 | 1989-03-02 | Nec Corp | Vectorization system |
JPH02236775A (en) * | 1989-03-10 | 1990-09-19 | Nec Corp | Compiler |
JPH0594470A (en) * | 1991-09-30 | 1993-04-16 | Nec Corp | Vectrization system |
JPH05324346A (en) * | 1992-05-20 | 1993-12-07 | Nec Corp | Vectorization system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3896087B2 (en) | Compiler device and compiling method | |
US20060080645A1 (en) | System and method for optimizing source code | |
JP2921190B2 (en) | Parallel execution method | |
Rupnow et al. | A study of high-level synthesis: Promises and challenges | |
JPH0814817B2 (en) | Automatic vectorization method | |
JP2006338616A (en) | Compiler device | |
JP2004038225A (en) | Compiler program and compiling method | |
JP6245031B2 (en) | Compilation program, compilation method, and compilation apparatus | |
JP2009104422A (en) | Optimum code generation method for multiprocessor, and compiling device | |
JP6666554B2 (en) | Information processing apparatus, conversion program, and conversion method | |
US6993756B2 (en) | Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program | |
Katel et al. | High performance gpu code generation for matrix-matrix multiplication using mlir: some early results | |
JP2008305337A (en) | Program converter, program conversion method, program, storage medium, debugging device, debugging method and program development system | |
JP4719415B2 (en) | Information processing system and code generation method | |
Stitt et al. | Techniques for synthesizing binaries to an advanced register/memory structure | |
JP5227646B2 (en) | Compiler and code generation method thereof | |
CN114385180A (en) | Data processing method, device and equipment and computer storage medium | |
JP2009070070A (en) | Compiler and compile method | |
JPH04293150A (en) | Compiling method | |
WO2020116025A1 (en) | Compile device, compile method, and non-transitory computer-readable medium | |
JP2019067117A (en) | Code creating device, code creating method and code creating program | |
El Moussawi et al. | Superword level parallelism aware word length optimization | |
JP2009181558A (en) | Program conversion device | |
De Sutter et al. | On the use of subword parallelism in medical image processing | |
WO2011010435A1 (en) | Program conversion device and program conversion system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Effective date: 20110819 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110831 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110922 |
|
A02 | Decision of refusal |
Effective date: 20120321 Free format text: JAPANESE INTERMEDIATE CODE: A02 |