JP2009070070A - Compiler and compile method - Google Patents

Compiler and compile method Download PDF

Info

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
Application number
JP2007236818A
Other languages
Japanese (ja)
Inventor
Yuji Yokoya
雄司 横谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2007236818A priority Critical patent/JP2009070070A/en
Publication of JP2009070070A publication Critical patent/JP2009070070A/en
Pending legal-status Critical Current

Links

Images

Landscapes

  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

<P>PROBLEM TO BE SOLVED: To generate an object program for a vector processor of high execution efficiency without limitation even in a double loop in which the number of repeated loops is smaller than the maximum vector length. <P>SOLUTION: When the number N of an inner loop repeated in a source program having a double loop of an outer loop and an inner loop is half or smaller than the maximum vector length VL of the source program in a compiler, the double loop is converted by a loop conversion part 23 into a loop in which a vector operation to operate N elements is a loop body, and the number of repetitions is a remainder obtained by dividing the number M of the repeated outer loops by the smaller of a value VL/N, or M, and a loop in which a vector operation to operate an element of a value obtained by multiplying a smaller of the value VL/N, or M, by N is a loop body, and the number of repetitions is a value obtained by dividing M by the smaller of a value VL/N, or M. <P>COPYRIGHT: (C)2009,JPO&INPIT

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参照。)。
特開平6−4300号公報 特開平2−236775号公報 Hans Zima/Barbara Chapman共著、村岡洋一訳、「スーパーコンパイラ」、オーム社、1995年4月、p.223−230、262
In addition, a method of generating one vector instruction for a plurality of identical operations in a loop has been considered (see, for example, Patent Document 2).
JP-A-6-4300 JP-A-2-236775 Co-authored by Hans Zima / Barbara Chapman, translated by Yoichi Muraoka, “Super Compiler”, Ohmsha, April 1995, p. 223-230, 262

しかし、特許文献1に記載された技術を用いたループ一重化は、多重ループ内で使用されているすべての配列が連続でなければならないという条件がある。そのため、適用できる多重ループがかなり限定されてしまうという問題点がある。   However, loop unification using the technique described in Patent Document 1 has a condition that all the sequences used in the multiple loops must be continuous. Therefore, there is a problem that applicable multiple loops are considerably limited.

また、非特許文献1に記載された技術を用いたループ交換においては、多重ループを構成するループ中の最大の繰り返し数以上にはできない。そのため、すべてのループの繰り返し数が最大ベクトル長よりも小さな場合は、実行効率を改善することが困難であるという問題点がある。   Further, in the loop exchange using the technique described in Non-Patent Document 1, it is not possible to exceed the maximum number of repetitions in the loop constituting the multiple loop. Therefore, when the number of iterations of all loops is smaller than the maximum vector length, there is a problem that it is difficult to improve execution efficiency.

また、特許文献2に記載された技術においては、同一演算を複数含むループにしか適用することができないという問題点がある。   In addition, the technique described in Patent Document 2 has a problem that it can be applied only to a loop including a plurality of identical operations.

本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、ループの繰り返し数が、ベクトルプロセッサの最大ベクトル長よりも小さな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 program storage device 1, a compiler 2, and a target program storage device 3.

ソースプログラム記憶装置1は、FortranやC言語などの高級言語で記述されたソースプログラムを記憶する。   The source program storage device 1 stores a source program written in a high-level language such as Fortran or C language.

コンパイラ2は、ソースプログラム記憶装置1に記憶されているソースプログラムからコンピュータが実行できる形式であるオブジェクトコード(目的プログラム)を生成する。つまり、ソースプログラムを目的プログラムに変換する。そして、生成した目的プログラムを目的プログラム記憶装置3へ送信する。   The compiler 2 generates object code (object program) in a format that can be executed by a computer from the source program stored in the source program storage device 1. That is, the source program is converted into the target program. Then, the generated target program is transmitted to the target program storage device 3.

目的プログラム記憶装置3は、コンパイラ2から送信されてきた目的プログラムを記憶する。   The target program storage device 3 stores the target program transmitted from the compiler 2.

さらに、コンパイラ2は、ソースプログラム解析部21と、ループ解析部22と、ループ変換部23と、目的プログラム生成部24と、第1中間テキスト記憶部25と、ループ情報記憶部26と、第2中間テキスト記憶部27とから構成されている。   Furthermore, the compiler 2 includes a source program analysis unit 21, a loop analysis unit 22, a loop conversion unit 23, a target program generation unit 24, a first intermediate text storage unit 25, a loop information storage unit 26, a second And an intermediate text storage unit 27.

ソースプログラム解析部21は、ソースプログラム記憶装置1に記憶されているソースプログラムを入力し、解析処理および変換処理で使用するための第1中間テキストを生成する。そして、生成した第1中間テキストを第1中間テキスト記憶部25に記憶させる。   The source program analysis unit 21 inputs a source program stored in the source program storage device 1 and generates a first intermediate text for use in analysis processing and conversion processing. Then, the generated first intermediate text is stored in the first intermediate text storage unit 25.

第1中間テキスト記憶部25は、ソースプログラム解析部21にて生成された第1中間テキストを記憶する。   The first intermediate text storage unit 25 stores the first intermediate text generated by the source program analysis unit 21.

ループ解析部22は、ソースプログラム解析部21にて生成されて第1中間テキスト記憶部25に記憶された第1中間テキストを入力し、ループの入れ子構造およびループの繰り返し回数、ループインデックス、ループ内の文のデータ依存、制御依存情報を含むループ情報を生成する。そして、生成したループ情報をループ情報記憶部26に記憶させる。   The loop analysis unit 22 inputs the first intermediate text generated by the source program analysis unit 21 and stored in the first intermediate text storage unit 25, and includes a loop nesting structure, the number of loop repetitions, a loop index, Generate loop information including data dependency and control dependency information of the statement. Then, the generated loop information is stored in the loop information storage unit 26.

ループ情報記憶部26は、ループ解析部22にて生成されたループ情報を記憶する。   The loop information storage unit 26 stores the loop information generated by the loop analysis unit 22.

ループ変換部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 loop conversion unit 23 generates the second intermediate text based on the loop information generated by the loop analysis unit 22 and stored in the loop information storage unit 26. Specifically, the inner loop can be vectorized and the number of iterations N (N is an integer of 1 or more) is less than or equal to 1/2 of the maximum vector length VL (VL is an integer of 1 or more), and the number of iterations M (M Is an integer greater than or equal to 1, and a double loop satisfying the convertible condition is selected. Here, the maximum vector length is the maximum number of elements that can be processed by one vector instruction. The number of repetitions mod (M, min (M, VL / N) having the loop operation as a vector operation for performing N element operations on the selected double loop in the first intermediate text input from the first intermediate text storage unit 25 )) Loop and a vector operation that performs N * min (M, VL / N) element operation that multiplies N by min (M, VL / N) loop number M / min (M, VL / N) to generate a second intermediate text converted into a loop. Then, the generated second intermediate text is stored in the second intermediate text storage unit 27. Here, mod (x, y) represents a remainder value obtained by dividing (dividing) x by y. Min (x, y) indicates a smaller value of either x or y. Further, VL / N is a first division process, and M / min (M, VL / N) is a second division process.

第2中間テキスト記憶部27は、ループ変換部23にて生成された第2中間テキストを記憶する。   The second intermediate text storage unit 27 stores the second intermediate text generated by the loop conversion unit 23.

目的プログラム生成部24は、第2中間テキスト記憶部27からループ変換部23にて生成された第2中間テキストを入力し、目的プログラムを生成して、目的プログラム記憶装置3へ送信する。この入力は、目的プログラム生成部24によって第2中間テキスト記憶部27から第2中間テキストが読み出されることによるものであっても良い。   The target program generation unit 24 receives the second intermediate text generated by the loop conversion unit 23 from the second intermediate text storage unit 27, generates a target program, and transmits it to the target program storage device 3. This input may be performed by reading the second intermediate text from the second intermediate text storage unit 27 by the target program generation unit 24.

以下に、図1に示したコンパイラ2におけるコンパイル方法について説明する。   A compiling method in the compiler 2 shown in FIG. 1 will be described below.

図2は、図1に示したコンパイラ2におけるコンパイル方法を説明するためのフローチャートである。   FIG. 2 is a flowchart for explaining a compiling method in the compiler 2 shown in FIG.

まず、ソースプログラム解析部21に、ソースプログラム記憶装置1に記憶されているソースプログラムが入力する。ソースプログラム解析部21は、入力したソースプログラムの字句解析および構文解析などを行い、解析処理および変換処理で使用するための第1中間テキストを生成する。そして、生成した第1中間テキストを第1中間テキスト記憶部25に記憶させる。   First, the source program stored in the source program storage device 1 is input to the source program analysis unit 21. The source program analysis unit 21 performs lexical analysis and syntax analysis of the input source program, and generates a first intermediate text for use in analysis processing and conversion processing. Then, the generated first intermediate text is stored in the first intermediate text storage unit 25.

その後、ループ解析部22に、第1中間テキスト記憶部25に記憶された第1中間テキストが入力する。この入力は、ループ解析部22によって第1中間テキスト記憶部25から第1中間テキストが読み出されることによるものであっても良い。   Thereafter, the first intermediate text stored in the first intermediate text storage unit 25 is input to the loop analysis unit 22. This input may be due to the first intermediate text being read from the first intermediate text storage unit 25 by the loop analysis unit 22.

ループ解析部22は、入力した第1中間テキストについて、当該第1中間テキストのプログラム中に現れる全ループ構造を解析し、ループインデックス、ループの繰り返し数、ループ間の入れ子関係、ループ内の文のデータ依存および制御依存関係を調査する。そして、調査した結果の情報を有するループ情報を生成する。生成されたループ情報をループ情報記憶部26に記憶させる。   The loop analyzing unit 22 analyzes the entire loop structure appearing in the program of the first intermediate text with respect to the input first intermediate text, and determines the loop index, the number of loop repetitions, the nesting relationship between the loops, and the sentence in the loop. Investigate data dependencies and control dependencies. And the loop information which has the information of the investigated result is produced | generated. The generated loop information is stored in the loop information storage unit 26.

その後、ループ変換部23は、ループ情報記憶部26に記憶されているループ情報を読み出す。読み出されたループ情報に基づいて、変換対象となる2重ループを選択する。ループ変換部23の動作は以下に示す通りである。   Thereafter, the loop conversion unit 23 reads the loop information stored in the loop information storage unit 26. Based on the read loop information, a double loop to be converted is selected. The operation of the loop converter 23 is as follows.

まず、ループ内の文のデータ依存および制御依存がベクトル化可能条件を満たすループを選択する(ステップ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 text storage unit 27.

なお、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 program generation unit 24 reads the second intermediate text from the second intermediate text storage unit 27, generates a vector processor target program based on the read second intermediate text, and transmits it to the target program storage device 3. .
(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 loop analysis unit 22 analyzes the first intermediate text generated from the source program shown in FIG. 3 by the source program analysis unit 21, and generates loop information. The generated loop information is information that the number of repetitions of the loop L1 is 10, the number of repetitions of the loop L2 is 30, both the loops L1 and L2 have no data dependency and control dependency, and the loop L1 is an outer loop of the loop L2. is there.

次に、ループ変換部23は、ループ解析部22が生成したループ情報から、ループL2がベクトル化可能であること、また30である繰り返し数が最大ベクトル長100の1/2以下であること、またループL2の外側にループL1が存在すること、ループL1の繰り返し数が2以上であることを判断する。そして、ループL1とループL2とから構成される2重ループを変換対象として選択し、第2中間テキストを生成する。   Next, from the loop information generated by the loop analysis unit 22, the loop conversion unit 23 can vectorize the loop L2, and the number of repetitions of 30 is 1/2 or less of the maximum vector length 100, Also, it is determined that the loop L1 exists outside the loop L2, and that the number of repetitions of the loop L1 is two or more. And the double loop comprised from the loop L1 and the loop L2 is selected as conversion object, and a 2nd intermediate text is produced | generated.

図4は、図1に示したループ変換部23にて生成された第2中間テキストの一例を示す図である。   FIG. 4 is a diagram showing an example of the second intermediate text generated by the loop conversion unit 23 shown in FIG.

図4に示した第2中間テキストは、ループ変換部23にて変換されたループL11及びループL12を有する。   The second intermediate text shown in FIG. 4 has a loop L11 and a loop L12 converted by the loop conversion unit 23.

ループ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 size 30 * 3 = 90, and B (1: 30, J2 + 1) is set to WX1. The three vector transfers store B in the 31 to 60 elements and B (1:30, J2 + 2) in the 61 to 90 elements of WX1, respectively. In the second vector transfer, C (1: 30, J2) is the first 30 elements of the working array WX2, C (1: 30, J2 + 1) is the 31st to 60th elements of WX2, and Three vector transfers for transferring C (1:30, J2 + 2) to 61 to 90 elements of WX2. The vector addition is a vector addition for obtaining the addition result of 90 elements of WX1 and WX2 in the temporary array WY1. In the third vector transfer, the first 30 elements of WY1 are set to A (1:30, J2), 31 to 60 elements of WY1 are set to A (1:30, J2 + 1), and 61 of WY1 is set. To vector transfer 3 to transfer 90 elements to A (1:30, J2 + 2) respectively.

ループ変換部23は、変換した第2中間テキストを、第2中間テキスト記憶部27に記憶させる。   The loop conversion unit 23 stores the converted second intermediate text in the second intermediate text storage unit 27.

そして、目的プログラム生成部24は、第2中間テキスト記憶部27から第2中間テキストを読み出し、読み出した第2中間テキストに基づいてベクトルプロセッサの目的プログラムを生成して目的プログラム記憶装置3へ送信する。この第2中間テキストに基づいて目的プログラムを生成する方法については、一般的な方法を用いるもので良い。   Then, the target program generation unit 24 reads the second intermediate text from the second intermediate text storage unit 27, generates a vector processor target program based on the read second intermediate text, and transmits it to the target program storage device 3. . As a method for generating the target program based on the second intermediate text, a general method may be used.

以上説明したように本発明においては、最大ベクトル長を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 loop conversion unit 23. Can be generated.

これにより、プログラム中の内側ループの繰り返し数が最大ベクトル長の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.

本発明のコンパイラの実施の一形態を示す図である。It is a figure which shows one Embodiment of the compiler of this invention. 図1に示したコンパイラにおけるコンパイル方法を説明するためのフローチャートである。It is a flowchart for demonstrating the compilation method in the compiler shown in FIG. Fortran言語で記述された2重ループを含むソースプログラムの一例を示す図である。It is a figure which shows an example of the source program containing the double loop described by the Fortran language. 図1に示したループ変換部にて生成された第2中間テキストの一例を示す図である。It is a figure which shows an example of the 2nd intermediate text produced | generated by the loop conversion part shown in FIG.

符号の説明Explanation of symbols

1 ソースプログラム記憶装置
2 コンパイラ
3 目的プログラム記憶装置
21 ソースプログラム解析部
22 ループ解析部
23 ループ変換部
24 目的プログラム生成部
25 第1中間テキスト記憶部
26 ループ情報記憶部
27 第2中間テキスト記憶部
L1,L2,L11,L12 ループ
1 source program storage device 2 compiler 3 target program storage device 21 source program analysis unit 22 loop analysis unit 23 loop conversion unit 24 target program generation unit 25 first intermediate text storage unit 26 loop information storage unit 27 second intermediate text storage unit L1 , L2, L11, L12 loop

Claims (4)

外側ループと内側ループとの2重ループを有するソースプログラムを目的プログラムに変換するコンパイラであって、
前記外側ループの繰り返し数を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.
請求項1に記載のコンパイラにおいて、
前記変換した2重ループに基づいて前記目的プログラムを生成することを特徴とするコンパイラ。
The compiler according to claim 1,
A compiler that generates the object program based on the converted double loop.
内側ループと外側ループとの2重ループを有するソースプログラムを目的プログラムに変換するコンパイル方法であって、
前記外側ループの繰り返し数を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.
請求項3に記載のコンパイル方法において、
前記変換した2重ループに基づいて前記目的プログラムを生成する処理を有することを特徴とするコンパイル方法。
The compiling method according to claim 3,
A compiling method comprising processing for generating the object program based on the converted double loop.
JP2007236818A 2007-09-12 2007-09-12 Compiler and compile method Pending JP2009070070A (en)

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)

* Cited by examiner, † Cited by third party
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

Patent Citations (5)

* Cited by examiner, † Cited by third party
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