JPH11120003A - Parallel executing method for loop including loop jump-out and parallel program generating method - Google Patents

Parallel executing method for loop including loop jump-out and parallel program generating method

Info

Publication number
JPH11120003A
JPH11120003A JP28491397A JP28491397A JPH11120003A JP H11120003 A JPH11120003 A JP H11120003A JP 28491397 A JP28491397 A JP 28491397A JP 28491397 A JP28491397 A JP 28491397A JP H11120003 A JPH11120003 A JP H11120003A
Authority
JP
Japan
Prior art keywords
loop
jump
data
value
program
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
JP28491397A
Other languages
Japanese (ja)
Inventor
Makoto Sato
真琴 佐藤
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP28491397A priority Critical patent/JPH11120003A/en
Publication of JPH11120003A publication Critical patent/JPH11120003A/en
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

PROBLEM TO BE SOLVED: To speed up loop execution by overlapping calculation which is performed through the repetition of a loop over processors. SOLUTION: In a program generation part 120 in a loop parallelizing part 110, an overlap calculating process generation part 122 calculates the value of data which is updated in a loop including a loop jump-out and used after the jump-out by overlapping the loop repetition by processors while saving the value each time the loop is repeated as many times as specified. Further, a loop jump-out decision time process generation part 123 performs calculation for guaranteeing the value of the data after the loop jump-out by using the value of the last saved data when loop jump-out conditions are met. After the loop jump-out conditions are met, a processor having detected the loop jump-out informs another processor that the loop jump-out conditions have been met and the processor having been informed also informs another processor of that repeatedly one after another.

Description

【発明の詳細な説明】DETAILED DESCRIPTION OF THE INVENTION

【0001】[0001]

【発明の属する技術分野】ループ飛び出しを含む高級言
語プログラムを入力してプロセス間通信を含む並列プロ
グラムを生成するコンパイラにかかる。
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to a compiler that inputs a high-level language program including a loop jump and generates a parallel program including inter-process communication.

【0002】[0002]

【従来の技術】従来、ループ飛び出しを含む高級言語プ
ログラムを入力してベクトル化されたプログラムを生成
するコンパイラでは、マイケル ウルフ著、オプティマ
イズィングスーパーコンパイラーズフォー スーパーコ
ンピューターズ、エムアイティープレス 1989、第
151頁から第155頁(Michael Wolfe,Optimizin
g Supercompilers for Supercomputers,MIT Pres
s,1989,pp.151−155)で論じられているよ
うに、まず、ループ飛び出しを含むループのループ飛び
出し判定以外の文を全てのループ繰り返しないし規定回
数の繰り返しだけ計算し、次に上記回数だけループ飛び
出し判定のみを計算し、次に上記判定結果から最初に飛
び出し条件が成立するループ回数を調べ、最後に、その
回数までに計算された値のみをデータに設定して元のプ
ログラムの意味を変えないようにしている。
2. Description of the Related Art Conventionally, a compiler that generates a vectorized program by inputting a high-level language program including a loop jump has been proposed by Michael Wolf, Optimizing Supercompilers for Supercomputers, MTI Press 1989, No. 151. Page to page 155 (Michael Wolfe, Optimizin
g Supercompilers for Supercomputers, MIT Pres
s, 1989, pp. 151-155), first, a statement other than the loop jump determination of a loop including a loop jump is calculated for all loop iterations or a specified number of iterations. Only the loop jump judgment is calculated, then the number of loops where the jump condition is satisfied is first checked from the above judgment result, and finally, only the values calculated up to that number are set in the data, meaning the original program Is not changed.

【0003】以下、上記著作から2つのプログラム例を
引用する。
Hereinafter, two examples of programs will be cited from the above works.

【0004】最初に、第1の従来技術として、全てのル
ープ繰り返し回数だけ計算する例を挙げる。
First, as a first conventional technique, an example in which calculation is performed for all loop repetitions will be described.

【0005】(例1) do I=1,N A(I)=B(I)*C(I)+4/D(I) ef(A(I)=S(I)) goto label enddo 上記プログラムは下記のようにベクトル化される: S1: ATEMP(1:N)=B(1:N)*C(1:N)
+4/D(1:N) S2: bit(1:N)=ATEMP(1:N)=S(1:
N) S3: I=First1(bit(1:N)) S4: A(1:I)=ATEMP(1:I) S5: if(I>0)goto label ここでATEMPは一時配列であり、Aに余分な値まで
格納しないように一時的にこの配列に値を格納する。
(Example 1) do I = 1, NA (I) = B (I) * C (I) + 4 / D (I) ef (A (I) = S (I)) goto label enddo The above program Is vectorized as follows: S1: ATEMP (1: N) = B (1: N) * C (1: N)
+ 4 / D (1: N) S2: bit (1: N) = ATEMP (1: N) = S (1: N)
N) S3: I = First 1 (bit (1: N)) S4: A (1: I) = ATEMP (1: I) S5: if (I> 0) goto label where ATEMP is a temporary array and A Temporarily store values in this array so that no extra values are stored.

【0006】S1は1からNまでの全ての値Iに対し
て、ループ飛び出し判定を除いた文であるATEMP
(I)=B(I)*C(I)+4/D(I)をベクトル
計算によって計算することを表す。ベクトル計算に関し
ては、ハンス ジーマ、バーバラチャップマン共著、ス
ーパーコンパイラーズ フォー パラレル アンド ベ
クター コンピューターズ、アディソンウエスリ パブ
リッシングカンパニー インク(Hans Zima and Bar
bara Chapmann,Supercompilers for Parallel and
Vector Computers,Addison- Wesley Publishing
Company,Inc.)に詳しく記述されている。
S1 is an ATEMP statement for all values I from 1 to N excluding loop jump determination.
(I) = B (I) * C (I) + 4 / D (I) is calculated by vector calculation. Regarding vector calculation, Hans Zima and Barbara Chapman, Super Compilers for Parallel and Vector Computers, Addison Wesley Publishing Company, Inc. (Hans Zima and Bar)
bara Chapmann, Supercompilers for Paraallel and
Vector Computers, Addison- Wesley Publishing
Company, Inc.).

【0007】S2は1からNまでの全ての値Iに対し
て、ループ飛び出し判定文であるA(I)=S(I)の
みを実行し、もしこれが成立するならTRUEを、成立
しないならFALSEを、bit(I)に代入することを表
す。
In S2, only the loop jump determination statement A (I) = S (I) is executed for all values I from 1 to N, TRUE if this is true, FALSE if not. Is substituted for bit (I).

【0008】S3はループ飛び出し判定結果であるbit
(1)からbit(N)の内、最初にbit(I)の値がTRUEに
なる添字の値、即ちループ飛び出し条件が最初に成立す
るループ回数をIに代入することを表す。
S3 is a bit which is a loop jump determination result.
From (1) to bit (N), the value of the subscript whose bit (I) value is TRUE first, that is, the number of loops in which the loop jump condition is first satisfied is substituted into I.

【0009】S4はループ飛び出しが起こるまでの値を
Aに格納する。これによって、プログラムはベクトル化
しない場合と同じ実行結果を得る。
At S4, the value until the loop jumps out is stored in A. As a result, the program obtains the same execution result as when no vectorization is performed.

【0010】S5はループ飛び出し条件が成立する時の
み、指定された位置へプログラムの制御を移すことを表
す。
S5 represents that the control of the program is shifted to the designated position only when the loop jump condition is satisfied.

【0011】次に、第2の従来技術として、ループ繰り
返し依存があり、かつ、ループ繰り返し回数が不定であ
るループに対して、規定回数だけ計算する例を挙げる。
Next, as a second conventional technique, an example will be described in which a specified number of calculations are performed on a loop in which the loop repetition is dependent and the number of loop repetitions is undefined.

【0012】(例2) while(X>EPS)do X=F(X) endwhile 上記プログラムは下記のようにベクトル化される: S1: while(X>EPS)do S2: XTEMP(0)=X S3: doI=1,64 S4: XTEMP(I)=F(XTEMP(I−1)) S5: enddo S6: bit(1:64)=XTEMP(1:64)>EPS S7: J=First1(bit(1:64)) S8: X=ATEMP(J) S9: endwhile whileループではループ実行回数は不定なので、上記ベ
クトル化プログラムでは64回実行してループ飛び出し
条件が成立したか否か検査し、成立しなければ再び64
回実行する。これを繰り返すことでループ実行回数が不
定な場合に対応している。この64はベクトルレジスタ
の数であり、マシンによって異なる。
(Example 2) while (X> EPS) do X = F (X) endwhile The above program is vectorized as follows: S1: while (X> EPS) do S2: XTEMP (0) = X S3: doI = 1,64 S4: XTEMP (I) = F (XTEMP (I-1)) S5: enddo S6: bit (1:64) = XTEMP (1:64)> EPS S7: J = First1 (bit (1:64)) S8: X = ATEMP (J) S9: Since the number of times of loop execution is undefined in the endwhile while loop, the vectorization program executes 64 times to check whether or not the loop jump condition has been satisfied. If not, again 64
Execute it twice. By repeating this, the case where the number of times of loop execution is indefinite is supported. This 64 is the number of vector registers, which differs depending on the machine.

【0013】S3,S4,S5で示されるループはマシ
ンによってベクトル化される場合とベクトル化されない
場合がある。ベクトル化されない場合、この部分の実行
は逐次的になるため、whileループ全体の実行時間は元
の実行時間よりも遅くなる。
The loops indicated by S3, S4, and S5 may or may not be vectorized by the machine. If not vectorized, the execution of this part is sequential, so the execution time of the entire while loop is slower than the original execution time.

【0014】S6,S7はベクトル化されているが、S
8はスカラー実行され、その結果からS1でループ飛び
出しを実行するか否かを判定する。即ち、S8直前でベ
クトル実行終了のための同期が挿入される。
Although S6 and S7 are vectorized, S6
8 is scalar-executed, and it is determined from the result whether or not to execute loop jumping in S1. That is, immediately before S8, a synchronization for ending the vector execution is inserted.

【0015】[0015]

【発明が解決しようとする課題】上記第1の従来技術
は、少ないループ繰り返し回数に対してループ飛び出し
が発生する場合でも、あらかじめ全てのループ繰り返し
回数だけ実行するため、実行時間がかえって遅くなる、
という問題点がある。
In the first prior art, even when a loop jumps out for a small number of loop repetitions, the execution time is rather slow because the loop is executed in advance for all the loop repetitions.
There is a problem.

【0016】記第2の従来技術は、規定回数と同じ要素
数を持つ一時配列が必要になり、使用メモリ量が増大す
る、という問題点がある。
The second prior art has a problem that a temporary array having the same number of elements as the specified number of times is required, and the amount of used memory is increased.

【0017】また、上記第2の従来技術は、内側に逐次
実行されるループがある場合、そのループは高速化され
ない、という問題点がある。
Further, the second prior art has a problem that if there is a loop that is sequentially executed inside, the loop is not speeded up.

【0018】また、上記第2の従来技術は、規定回数ご
とに同期が挿入されるため、同期の分だけ実行時間が増
加するとともに、規定回数を増やすことによって利用で
きるループ繰り返し間の並列性が同期によって失われ、
その分の実行時間が増加する、という問題点がある。
In the second prior art, since synchronization is inserted at a specified number of times, the execution time is increased by the amount of synchronization, and the parallelism between loop iterations that can be used by increasing the specified number of times is reduced. Lost by synchronization,
There is a problem that the execution time increases accordingly.

【0019】本発明の目的は、ループ飛び出し条件成立
後の余分なループ実行にかかる時間を少なくすることで
ある。
An object of the present invention is to reduce the time required for executing an extra loop after a loop jump condition is satisfied.

【0020】また、本発明の別の目的は、使用メモリ量
の増加を少なくすることである。
It is another object of the present invention to reduce an increase in the amount of memory used.

【0021】また、本発明の別の目的は、内側に逐次実
行されるループがあっても、外側ループに関する並列性
を検出して高速化することである。
Another object of the present invention is to detect the parallelism of the outer loop and speed up the processing even if there is a loop executed sequentially inside.

【0022】また、本発明の別の目的は、ループ繰り返
し回数が不定の場合でも、規定回数ごとに処理を逐次化
させないことである。
Further, another object of the present invention is to prevent the processing from being performed every prescribed number of times even when the number of times of loop repetition is indefinite.

【0023】[0023]

【課題を解決するための手段】上記目的を達成するため
に、ループ飛び出しを含むループに対して、そのループ
内で値が更新されループ飛び出し後に値が使用されるデ
ータの値を、ループが指定回数だけ繰り返されるたびに
保存しながらループ繰り返しを複数プロセッサでオーバ
ラップさせて計算するオーバラップ計算手段と、ループ
飛び出し条件が成立した時、直前に保存したデータの値
を使用してそのデータのループ飛び出し後の値を保証す
る計算を行うループ飛び出し判定時手段と、を設けたも
のである。
In order to achieve the above object, for a loop including a loop jump, the loop specifies a data value whose value is updated in the loop and whose value is used after the loop jump. Overlap calculation means for calculating by overlapping the loop repetition with a plurality of processors while saving each time it is repeated, and when the loop jump condition is satisfied, the loop of the data is stored using the value of the data stored immediately before. And a loop pop-out determination means for performing a calculation for guaranteeing the value after pop-out.

【0024】また、上記目的を達成するために、上記オ
ーバラップ計算手段は、元のループでの上記データに対
するすべての値の格納を値保存用データへの格納に置き
換え、次のループ繰り返しでは、元のループでの上記デ
ータに対するすべての値の使用を値保存用データの使用
に置き換える保存兼計算手段、を含むものである。
Further, in order to achieve the above object, the overlap calculating means replaces the storage of all values for the data in the original loop with the storage of value storage data, and in the next loop iteration, Storage and calculation means for replacing the use of all values for the data in the original loop with the use of value storage data.

【0025】また、上記目的を達成するために、上記ル
ープ飛び出し条件判定手段は、複数のプロセッサの内、
1つのプロセッサが元のループのおけるループ飛び出し
条件判定を行い、その判定の結果を他プロセッサに通知
し、通知された判定結果を受け取る手段、を含むもので
ある。
Further, in order to achieve the above object, the loop jump condition judging means comprises:
One processor performs a loop jump condition determination in the original loop, notifies the other processor of the determination result, and receives the notified determination result.

【0026】また、上記目的を達成するために、プログ
ラムを入力し、構文解析し、プログラム解析を行い、並
列機向けの並列プログラムないし並列オブジェクトプロ
グラムを生成する並列化コンパイラであって、ループ飛
び出しがあるループを検出し、そのループ内で値が更新
されループ飛び出し後に値が使用されるデータを検出す
る適用性判定部と、上記データの値を、指定ループ繰り
返し回数ごとに保存しながらループ繰り返しを複数プロ
セッサでオーバラップさせて計算するオーバラップ計算
処理生成部と、ループ飛び出し条件が成立した時、直前
に保存したデータの値を使用してそのデータのループ飛
び出し後の値を保証する計算を行うループ飛び出し判定
時処理生成部と、を設けたものである。
In order to achieve the above object, a parallelizing compiler for inputting a program, analyzing a syntax, analyzing a program, and generating a parallel program or a parallel object program for a parallel machine, wherein a loop jumping out. An applicability determining unit that detects a certain loop, detects data whose value is updated in the loop, and uses the value after jumping out of the loop, and performs loop repetition while storing the value of the data for each designated loop repetition count An overlap calculation processing generation unit that calculates by overlapping with a plurality of processors, and when a loop jump condition is satisfied, performs a calculation that guarantees a value of the data after the loop jump using the value of the data stored immediately before And a loop jump determination process generation unit.

【0027】また、上記目的を達成するために、上記オ
ーバラップ計算処理生成部は、元のループでの上記デー
タに対するすべての値の格納を値保存用データへの格納
に置き換え、次のループ繰り返しでは、元のループでの
上記データに対するすべての値の使用を値保存用データ
の使用に置き換える保存兼計算処理生成部、を含むもの
である。
In order to achieve the above object, the overlap calculation processing generation unit replaces the storage of all values for the data in the original loop with the storage of value storage data, and repeats the next loop. Includes a storage / calculation processing generation unit that replaces the use of all values for the data in the original loop with the use of value storage data.

【0028】また、上記目的を達成するために、上記ル
ープ飛び出し判定時処理生成部は、複数のプロセッサの
内、1つのプロセッサが元のループのおけるループ飛び
出し条件判定を行い、その判定の結果を他プロセッサに
通知し、通知された判定結果を受け取る処理の生成部、
を含むものである。
Further, in order to achieve the above object, the loop jumping judgment processing generation unit performs a loop jumping condition judgment in an original loop by one processor among a plurality of processors, and determines a result of the judgment. A generation unit for processing that notifies other processors and receives the notified determination result;
Is included.

【0029】[0029]

【発明の実施の形態】以下、本発明の第1の実施例を図
1から図14を用いて説明する。
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS A first embodiment of the present invention will be described below with reference to FIGS.

【0030】図1は、本発明による並列化コンパイラの
構成を示したものである。
FIG. 1 shows a configuration of a parallelizing compiler according to the present invention.

【0031】100は並列化コンパイラであり、ソース
プログラム101を入力して辞書104及び中間語10
5を出力する構文解析部102、辞書104及び中間語
105を入力してプログラムの制御フロー、データフロ
ー、データ依存等を解析してその結果を中間語105に
反映させたり追加情報として付加するプログラム解析部
103、辞書104及び中間語105を入力してプログ
ラム内のループを解析してループ飛び出しを含むループ
を並列化してその結果を辞書104及び中間語105に
反映させるループ並列化部110、辞書104及び中間
語105を入力してプログラムを高速実行するように変
換してその結果を辞書104及び中間語105に反映す
る最適化部106、辞書104及び中間語105を入力
して並列化プログラム108を生成するコード生成部1
07より成る。
Reference numeral 100 denotes a parallelizing compiler, which inputs a source program 101 and inputs a dictionary 104 and an intermediate language 10.
5, a program for inputting the syntax analysis unit 102, the dictionary 104, and the intermediate language 105, analyzing the control flow, data flow, data dependence, and the like of the program and reflecting the result in the intermediate language 105 or adding it as additional information A loop parallelizing unit 110 that inputs the analysis unit 103, the dictionary 104, and the intermediate language 105, analyzes a loop in the program, parallelizes a loop including a loop jump, and reflects the result in the dictionary 104 and the intermediate language 105. Optimizer 106 that inputs and converts intermediate program 105 and intermediate language 105 to execute the program at high speed and reflects the result in dictionary 104 and intermediate language 105, and inputs dictionary 104 and intermediate language 105 and generates parallelized program 108 Code generation unit 1 that generates
07.

【0032】本実施例では、並列化プログラム108と
して分散メモリマシン向けのメッセージ通信入りの並列
化プログラムを生成する。
In this embodiment, a parallelized program with message communication for a distributed memory machine is generated as the parallelized program 108.

【0033】ループ並列化部110は、ループ飛び出し
を含むループの検出やそのループが並列化するための条
件を満たしているか否かを判定する適用性判定部11
1、その結果、適用可能と判定された場合、上記ループ
を並列化するために新規変数を導入してその辞書104
を作成することや、並列用に中間語105を作成したり
修正したりすることを行うプログラム生成部120、適
用性判定部111で適用不能と判定された場合、上記ル
ープに対して従来からある並列化が適用可能か否かを判
定する並列性判定部112、その結果、並列性有りと判
定された場合、辞書104や中間語105に対して並列
化変換を行う並列化変換部113より成る。
The loop parallelizing section 110 detects a loop including a loop jump and determines whether or not the loop satisfies a condition for parallelizing.
1. As a result, if it is determined that the dictionary can be applied, a new variable is introduced to parallelize the loop and the dictionary 104 is introduced.
If the program generation unit 120 and the applicability determination unit 111 determine that the loop is not applicable, the loop is conventionally created for the loop. A parallelism judging unit 112 for judging whether parallelization can be applied, and as a result, when it is judged that there is parallelism, a parallelization conversion unit 113 for performing parallelization conversion on the dictionary 104 and the intermediate language 105. .

【0034】次に本発明の並列化コンパイラの動作を、
図1を元に、図2から図14まで、具体例を用いて説明
する。
Next, the operation of the parallelizing compiler of the present invention will be described.
2 to 14 will be described based on FIG. 1 using specific examples.

【0035】図8はソースプログラム101の具体例で
ある。801から813までで示されるループの中に8
10のループ飛び出し判定文があり、この条件が満たさ
れる時に811の文によりループ外の文814に制御が
移る。ここで810のepsは定数である。810のルー
プ飛び出し判定で使用される変数sは802で初期化さ
れ、807で値が更新される。
FIG. 8 shows a specific example of the source program 101. 8 in the loop indicated by 801 to 813
There are ten loop jump determination statements, and when this condition is satisfied, the statement 811 transfers control to a statement 814 outside the loop. Here, eps of 810 is a constant. The variable s used in the loop jump determination at 810 is initialized at 802, and the value is updated at 807.

【0036】並列化コンパイラ100はこのソースプロ
グラム101を入力して構文解析部102で中間語10
5を生成する。
The parallelizing compiler 100 inputs the source program 101 and the syntax analyzer 102
5 is generated.

【0037】図9は中間語の例である。中間語900は
文805を構文解析した結果の中間語であり、中間語9
01は文806を構文解析した結果の中間語である。
FIG. 9 is an example of an intermediate language. The intermediate language 900 is an intermediate language as a result of parsing the sentence 805.
01 is an intermediate language as a result of parsing the sentence 806.

【0038】900は、演算ノード”=”,”+”,”
*”、変数ノード”a(i+1,j)”等、定数ノー
ド”−4”から成り、左側のノードからそのすぐ右側に
ある2つのノードへは、図9において矢印で示されるポ
インタで結合されている。
Reference numeral 900 denotes an operation node “=”, “+”, “
* ", A variable node" a (i + 1, j) ", etc., and a constant node" -4 ". The left node is connected to the two nodes immediately to the right by a pointer indicated by an arrow in FIG. ing.

【0039】901も同様に、演算ノード”=”,”
+”,”*”、変数ノード”a(i+1,j)”,”
t”等、定数ノード”omega”から成り、左側のノード
からそのすぐ右側にある2つのノードへは、ポインタで
結合されている。
Similarly, the operation node 901 has the operation nodes "=", ""
+ "," * ", Variable node" a (i + 1, j) ","
It consists of a constant node "omega" such as "t", and is linked by a pointer from the node on the left to the two nodes immediately on the right.

【0040】変数ノードはまた参照点とも呼ばれる。プ
ログラム解析部103は、この中間語を入力し解析情報
を中間語に付加して出力する。図9の902から906
はその情報の一部である参照点間の依存の方向を示した
ものである。参照点間には図中の矢印の向きにさらに以
下の情報が付加される: 902:kループにまたがるフロー依存がある 903:iループにまたがるフロー依存がある 904:kループにまたがるフロー依存がある 905:jループにまたがるフロー依存がある 906:ループ独立な逆依存がある これらの用語の説明は、ハンス ジーマ、バーバラチャ
ップマン共著、スーパーコンパイラーズ フォー パラ
レル アンド ベクター コンピューターズ、アディソ
ンウエスリ パブリッシングカンパニー インク(Han
s Zima and Barbara Chapmann,Supercompilers for
Parallel and Vector Computers,Addison- Wesle
y Publishing Company,Inc.)に詳しく記述されてい
る。
Variable nodes are also called reference points. The program analysis unit 103 inputs the intermediate language, adds the analysis information to the intermediate language, and outputs the result. 902 to 906 in FIG.
Indicates the direction of dependence between reference points that are part of the information. The following information is further added between the reference points in the direction of the arrow in the drawing: 902: There is a flow dependency that spans the k loop 903: There is a flow dependency that spans the i loop 904: A flow dependency that spans the k loop 905: There is a flow dependency across the j loop 906: There is a loop independent inverse dependency Description of these terms is provided by Hans Zima and Barbara Chapman, Supercompilers for Parallel and Vector Computers, Addison Wesley Publishing Company, Inc. (Han
s Zima and Barbara Chapmann, Supercompilers for
Parallel and Vector Computers, Addison- Wesle
y Publishing Company, Inc.).

【0041】中間語には以上の文または参照点の情報の
他に、プログラムの制御の流れを表現する情報がある。
図10は図8の入力プログラムに対する基本ブロックと
制御フローを表す。
The intermediate language includes information expressing the control flow of the program, in addition to the information on the sentence or the reference point.
FIG. 10 shows a basic block and a control flow for the input program of FIG.

【0042】基本ブロックは文の集合であり、最初の文
直前以外に、他の基本ブロックから制御が移ってくるこ
とはなく、最後の文直後以外に他の基本ブロックへ制御
が移ることがないようなものである。1000から10
10はすべて基本ブロックである。実線矢印は基本ブロ
ック間の制御フローを示したものである。1007、1
008、1010の左肩のラベルiend,jend,kendはそ
れぞれ、分岐先を明示するためのラベルである。たとえ
ば、1003の文中の”goto jend”は、1003の条
件文が成立すればラベル”jend”で示される基本ブロッ
クへ制御が移ることを表す。点線矢印はループ中の基本
ブロック同士を結合するポインタである。但し、2つの
ループに包含関係がある場合、一方を包含するループに
対しては、そのループに含まれるが他方のループに含ま
れない基本ブロックのみを結合する。
A basic block is a set of sentences. Control does not transfer from another basic block except immediately before the first sentence, and control does not transfer to another basic block except immediately after the last sentence. It is like. 1000 to 10
All 10 are basic blocks. Solid arrows indicate control flows between basic blocks. 1007, 1
Labels iend, jend, and kend on the left shoulder of 008 and 1010 are labels for specifying the branch destinations. For example, “goto jend” in the sentence 1003 indicates that control is transferred to the basic block indicated by the label “jend” if the conditional sentence 1003 is satisfied. A dotted arrow is a pointer that connects basic blocks in a loop. However, when there is an inclusion relationship between two loops, only a basic block included in the loop but not included in the other loop is connected to the loop including one.

【0043】文801から文813で示されるkループ
内の基本ブロックは、1001、1002、1008、
1009間の点線矢印で結合される。文803から文8
09で示されるjループ内の基本ブロックは、100
3、1004、1007間の点線矢印で結合される。文
804から文808で示されるjループ内の基本ブロッ
クは、1005、1006間の点線矢印で結合される。
The basic blocks in the k loop represented by statements 801 to 813 are 1001, 1002, 1008,
They are connected by dotted arrows between 1009. Sentence 803 to sentence 8
The basic block in the j loop denoted by 09 is 100
3, 1004 and 1007 are connected by a dotted arrow. The basic blocks in the j loop indicated by the statements 804 to 808 are connected by a dotted arrow between 1005 and 1006.

【0044】以上の基本ブロックと基本ブロック間の制
御フローは、構文解析部102ないしプログラム解析部
103で解析された結果である。また、ループおよびそ
のループ中の基本ブロック間の接続はプログラム解析部
103で解析された結果である。
The control flow between the basic blocks described above is a result of analysis performed by the syntax analysis unit 102 or the program analysis unit 103. Further, the connection between the loop and the basic block in the loop is a result analyzed by the program analysis unit 103.

【0045】プログラム解析部103は、中間語の解析
に関連してプログラム中からループを認識しループテー
ブルを作成する。
The program analysis unit 103 recognizes a loop from the program in relation to the analysis of the intermediate language and creates a loop table.

【0046】図11は、ループテーブルの一例である。
1100、1110、1120は各々ループk,ループ
j,ループiに対するループテーブルを示す。
FIG. 11 is an example of a loop table.
Reference numerals 1100, 1110, and 1120 denote loop tables for loop k, loop j, and loop i, respectively.

【0047】1101はループ制御変数、1102はル
ープ中の最初の基本ブロック、1103は最後の基本ブ
ロック、1104は内側にループを含む時、そのループ
に対するループテーブルへのポインタを示す。ループk
に対しては、それぞれ、k、1001、1008、ルー
プjに対するループテーブルである。1001、100
8は、図10の基本ブロックであり、それぞれ点線矢印
で結合された最初と最後の基本ブロックである。
Reference numeral 1101 denotes a loop control variable, 1102 denotes the first basic block in the loop, 1103 denotes the last basic block, and 1104 denotes a pointer to a loop table for the loop when a loop is included inside. Loop k
Is a loop table for k, 1001, 1008, and loop j, respectively. 1001, 100
Reference numeral 8 denotes a basic block in FIG. 10, which is the first and last basic blocks connected by dotted arrows.

【0048】同様にして、1110では、1111がル
ープ制御変数j、1112が最初の基本ブロック100
3、1113が最後の基本ブロック1007、1114
が内側ループiに対するループテーブルへのポインタを
示す。
Similarly, in 1110, 1111 is the loop control variable j, and 1112 is the first basic block 100.
3, 1113 is the last basic block 1007, 1114
Indicates a pointer to the loop table for the inner loop i.

【0049】また、同様にして、1120では、112
1がループ制御変数i、1122が最初の基本ブロック
1005、1123が最後の基本ブロック1006、1
124はもう内側ループはないので値は0である。
Similarly, at 1120, 112
1 is the loop control variable i, 1122 is the first basic block 1005, 1123 is the last basic block 1006, 1
The value 124 is 0 because there is no inner loop anymore.

【0050】次に図2を用いてループ並列化部110の
最初の処理である適用性判定部111を説明する。最初
の処理200は内側にループを含むことが図11の11
04がループテーブル1110をポイントすることから
わかるのでYESである。
Next, the applicability judging unit 111 which is the first process of the loop parallelizing unit 110 will be described with reference to FIG. The first process 200 may include a loop inside 11 in FIG.
Since it can be seen from the fact that 04 points to the loop table 1110, it is YES.

【0051】次の201はループ飛び出しがあるか否か
である。これは図11のループkに対するループテーブ
ル1100からループiに対するループテーブル112
0を順にたどって調べる。
The next step 201 is whether or not there is a loop jump. This is from the loop table 1100 for loop k to the loop table 112 for loop i in FIG.
0 is examined in order.

【0052】まず、ループテーブル1100の最初の基
本ブロック1102は1001である。図10よりこの
基本ブロックから制御が移るのは基本ブロック1010
と基本ブロック1002である。基本ブロック1001
はループヘッダというループを制御する特別の基本ブロ
ックであり基本ブロック1010への制御の遷移はルー
プの繰り返し回数が与えられた回数に達したときに実行
される特別なものなので、これはループ飛び出しではな
い。基本ブロック1002は基本ブロック1001から
点線矢印で結合されているのでループk内の基本ブロッ
クである。
First, the first basic block 1102 of the loop table 1100 is 1001. From FIG. 10, the control is transferred from this basic block to the basic block 1010.
And the basic block 1002. Basic block 1001
Is a special basic block that controls a loop called a loop header, and the transition of control to the basic block 1010 is a special one that is executed when the number of loop iterations reaches a given number. Absent. The basic block 1002 is a basic block in the loop k because it is connected to the basic block 1001 by a dotted arrow.

【0053】次に、基本ブロック1001から点線矢印
で結合されているループk内の基本ブロック1002に
ついて調べる。基本ブロック1002から制御が移るの
は基本ブロック1003である。これは図11の111
2が示す基本ブロックなので、ループkの内側ループ内
の基本ブロックである。したがって、ループ飛び出しで
はない。
Next, the basic block 1002 in the loop k connected by the dotted arrow from the basic block 1001 is examined. Control is transferred from the basic block 1002 to the basic block 1003. This is 111 in FIG.
Since the basic block 2 is a basic block, it is a basic block in the inner loop of the loop k. Therefore, it is not a loop jump.

【0054】次に、基本ブロック1002から点線矢印
で結合されているループk内の基本ブロック1008に
ついて調べる。基本ブロック1008から制御が移るの
は基本ブロック1009と基本ブロック1010であ
る。基本ブロック1009は基本ブロック1008から
点線矢印で結合されているのでループk内の基本ブロッ
クである。基本ブロック1010は、図11の各ループ
テーブルからポイントされる基本ブロックの範囲に含ま
れていないのでループ外の基本ブロックである。したが
って、ループkはループ飛び出しを持ち、図2の201
はYESである。
Next, the basic block 1008 in the loop k connected by the dotted arrow from the basic block 1002 will be examined. Control is transferred from the basic block 1008 to the basic block 1009 and the basic block 1010. The basic block 1009 is a basic block in the loop k because it is connected to the basic block 1008 by a dotted arrow. The basic block 1010 is a basic block outside the loop because it is not included in the range of the basic block pointed from each loop table in FIG. Therefore, the loop k has a loop jump, and 201 in FIG.
Is YES.

【0055】202は基本ブロック1008からsであ
るとわかる。
It can be seen that 202 is s from the basic block 1008.

【0056】203はループ中で、sが出現するのは基
本ブロック1008を除くと、基本ブロック1002で
の”s=0.0”と基本ブロック1006での”s=s
+abs(t)”のみとわかり、sは他の変数の値更新計算に
使用されないとわかるのでYESである。
In the loop 203, s appears in the loop except for the basic block 1008, where “s = 0.0” in the basic block 1002 and “s = s” in the basic block 1006.
+ Abs (t) "alone, and s is not used for the update calculation of the other variables.

【0057】204はs以外に図9で説明したループk
に対するループ繰り返しフロー依存として902、90
4があるのでYESである。
Reference numeral 204 denotes a loop k described with reference to FIG.
902 and 90 as loop iteration flow dependencies for
YES because there are four.

【0058】したがって205は、”a(i,j)”
と”a(i+1,j)”、および”a(i,j)”と”
a(i,j+1)”であるとわかる。
Therefore, 205 is "a (i, j)"
And "a (i + 1, j)" and "a (i, j)" and "
a (i, j + 1) ".

【0059】206は、最初の組についてはループiの
ループ制御変数iを含む添字の差が1、2番目の組につ
いてはループjのループ制御変数jを含む添字の差が1
であるとわかる。規定値を1とすると両方ともこれを満
たしているのでYESである。
In the reference numeral 206, the difference between the subscripts including the loop control variable i of the loop i is 1 for the first set, and the difference between the subscripts including the loop control variable j of the loop j is 1 for the second set.
It turns out that it is. If the prescribed value is set to 1, both of these conditions are satisfied, so that the result is YES.

【0060】207でのループ出口とはループ飛び出し
基本ブロック1008およびループヘッダ1001であ
る。ある変数がある基本ブロックの最後でLIVEと
は、その基本ブロック内またはそれ以前でその変数の値
が更新され、その基本ブロック以降でその値が使用され
る可能性があることである。ループ出口以降で使用され
る変数は基本ブロック1010中の配列aである。した
がってaはLIVEである。また、aは基本ブロック1
006中の”a(i,j)=a(i,j)+omega*t”
で値が更新される。したがって、配列aが終値保証配列
として登録される。 208において内側ループとして
ループjを取ると、配列aのループj内の各参照点のい
ずれにおいてもjはただ1つの次元である2次元目にだ
け出現するのでYESである。
The loop exit at 207 is a loop pop-out basic block 1008 and a loop header 1001. LIVE at the end of a basic block with a variable means that the value of the variable is updated in or before the basic block, and the value may be used after the basic block. The variable used after the loop exit is the array a in the basic block 1010. Therefore, a is LIVE. A is the basic block 1
“A (i, j) = a (i, j) + omega * t” in 006
Will update the value. Therefore, the array a is registered as a close-guaranteed array. If a loop j is taken as an inner loop at 208, YES is present at each of the reference points in the loop j of the array a because j appears only in the second dimension, which is only one dimension.

【0061】200ではjは配列aでの参照点に対して
も同一次元である2次元目に出現するのでYESであ
る。
In the case of 200, since j appears in the second dimension which is the same dimension with respect to the reference point in the array a, the result is YES.

【0062】以上より210で適用可能となる。As described above, application becomes possible at 210.

【0063】以上により適用性判定部111で適用可能
となり、プログラム生成部120の最初の処理である全
体制御処理生成部121に移る。
As described above, the application can be applied by the applicability determining unit 111, and the process proceeds to the overall control processing generating unit 121 which is the first processing of the program generating unit 120.

【0064】次に全体制御処理生成部121を図2から
図5と図12を用いて説明する。
Next, the overall control processing generator 121 will be described with reference to FIGS. 2 to 5 and FIG.

【0065】図3は全体制御処理生成部121のアルゴ
リズムを説明した図である。
FIG. 3 is a diagram for explaining the algorithm of the overall control processing generation unit 121.

【0066】図12はプログラム生成部120で生成さ
れる中間語をソースプログラムスタイルで記述したもの
である。
FIG. 12 describes the intermediate language generated by the program generator 120 in a source program style.

【0067】300では変数exit,ret,rest,kk,p,
ssに対する辞書を作成する。ssを除いたものは整数属性
で、ssは飛び出し条件判定で用いられる変数sと同じ属
性の配列で大きさは2*intervalである。ここで、inte
rvalはコンパイルオプションまたはコンパイラが決定す
る定数で、終値保証配列の値を1つの保存変数に保存す
る間隔を表す。
At 300, the variables exit, ret, rest, kk, p,
Create a dictionary for ss. Those excluding ss are integer attributes, and ss is an array of the same attribute as the variable s used in the jump condition determination, and has a size of 2 * interval. Where inte
rval is a compile option or a constant determined by the compiler, and indicates an interval at which the value of the close-guaranteed array is stored in one storage variable.

【0068】301では終値保証配列a(図8の入力プ
ログラムでも同じ配列名a)に対して、それと同じ変数
属性を持つ保存配列a1、a2の辞書を作成する。
In 301, a dictionary of storage arrays a1 and a2 having the same variable attributes as the final price guarantee array a (the same array name a in the input program of FIG. 8) is created.

【0069】302では”exit=0”,”ret=0”を
ループ直前に、”kk=mod(k,2*interval)”をル
ープ入口直後に生成する。この結果、図12において1
201、1202、1204が生成される。
At 302, "exit = 0" and "ret = 0" are generated immediately before the loop, and "kk = mod (k, 2 * interval)" is generated immediately after the loop entry. As a result, in FIG.
201, 1202, and 1204 are generated.

【0070】303ではs(k)をss(kk)に置き換える。
この結果、1205の条件文の中身、1241の条件文
が得られる。
In step 303, s (k) is replaced with ss (kk).
As a result, the contents of the conditional statement 1205 and the conditional statement 1241 are obtained.

【0071】304ではループ内にあり内側ループ外に
ある文の内、ループ飛び出し判定文以外をプロセッサ0
だけが実行するように条件文を作成する。条件を満たす
のは図2の802だけなので1205を得る。
At step 304, the processor 0 removes the statements outside the loop from the statements inside the loop and outside the inner loop.
Create conditional statements that only execute. Since only the condition 802 in FIG. 2 satisfies the condition, 1205 is obtained.

【0072】305により1240と1248から成る
条件文を作成する。
A conditional statement composed of 1240 and 1248 is created by 305.

【0073】次にループ飛び出し判定処理生成部306
に移る。これは図4を用いて説明する。
Next, a loop jump determination processing generation unit 306
Move on to This will be described with reference to FIG.

【0074】まず、400において、終値保証配列は
a、その保存配列はa1、a2、ループ飛び出しは”go
to10”なので、1230から1233を得る。
First, in 400, the closing price guarantee array is a, its storage sequences are a1 and a2, and the loop jump is "go".
Since it is to10 ", 1233 is obtained from 1230.

【0075】次に401においても同様にして、124
2から1246を得る。
Next, in the same manner as in 401,
2 is obtained from 1246.

【0076】次に保存兼計算処理生成部307に移る。Next, the process proceeds to the storage / calculation processing generation unit 307.

【0077】図5は保存兼計算処理生成部307のアル
ゴリズムを説明した図である。
FIG. 5 is a diagram for explaining the algorithm of the storage / calculation processing generation unit 307.

【0078】まず、500において、関数辞書Fを作成
する。
First, at 500, a function dictionary F is created.

【0079】次に501において、終値保証配列はaだ
けなので、終値保証配列用、保存配列用とss(kk),s,p,e
xit,rest,retから成る8個の引数リストを作成する。
Next, in 501, since the closing price guarantee array is only a, the ss (kk), s, p, e
Create an eight argument list consisting of xit, rest, ret.

【0080】次に502において、終値保証配列はaだ
けなので、引数の最初の2つは、上の行の引数から順
に、a,a1;a1,a;a,a;a,a2;a2,a;a,aとなる。結局、
1210から1222までを得る。
Next, at 502, since the final price guarantee array is only a, the first two arguments are a, a1; a1, a; a, a; a, a2; a2, a; a, a. After all,
1210 to 1222 are obtained.

【0081】これで図12の生成プログラムの全ての文
を得ることができた。
Thus, all the sentences of the generation program of FIG. 12 have been obtained.

【0082】次にオーバラップ計算処理生成部122を
図6、図8と図13を用いて説明する。
Next, the overlap calculation processing generation unit 122 will be described with reference to FIGS. 6, 8 and 13. FIG.

【0083】図6はオーバラップ計算処理生成部122
のアルゴリズムを説明した図である。
FIG. 6 shows an overlap calculation processing generation unit 122.
FIG. 3 is a diagram illustrating an algorithm of FIG.

【0084】図13はオーバラップ計算処理生成部12
2の生成した中間語をソースプログラムスタイルで記述
したものである。
FIG. 13 shows the overlap calculation processing generation unit 12.
2 describes the generated intermediate language in a source program style.

【0085】オーバラップ計算処理生成部122の入力
は図8の803から809の文である。
The input of the overlap calculation processing generation unit 122 is the sentences 803 to 809 in FIG.

【0086】まず、600において、803から809
を保存兼計算処理生成部307で生成された関数辞書F
を持ち、同生成部で作成された引数リストを持つサブル
ーチンとする。第1引数はa、第2引数はbとする。こ
れで1300が得られた。
First, in 600, 803 to 809
Is the function dictionary F generated by the storage / calculation processing generation unit 307.
And a subroutine having an argument list created by the generation unit. The first argument is a and the second argument is b. Thus, 1300 was obtained.

【0087】次に、601において終値保証配列aの内
側ループ制御変数jの出現次元は2次元目なので、aの
2次元目をblock分割する。block分割はデータ分割の一
種であり、配列の添字の連続部分が1つのプロセッサに
割り当てられるようにデータを分割する方法である。こ
のようなデータ分割方法およびデータ分割指示の仕様に
ついては、ハイ パフォーマンス フォートランフォー
ラム、ハイ パフォーマンス フォートラン ランゲー
ジ スペシフィケーション ヴァージョン1.0、セン
ター フォー リサーチ オン パラレル コンピュテ
ーション、ライス大学、ヒューストン、テキサス州、1
993年度発行(High PerformanceFortran Forum,
High Performance Fortran Language Specificati
on ver. 1.0,Center for Research on Parallel
Computation,Rice Univ.,Houston,Tx,199
3.)に詳しい。
Next, in 601, since the appearance dimension of the inner loop control variable j of the close price guarantee array a is the second dimension, the second dimension of a is divided into blocks. Block division is a type of data division, and is a method of dividing data such that a continuous part of an array subscript is assigned to one processor. Specifications for such data partitioning methods and data partitioning instructions are provided in High Performance Fortran Forum, High Performance Fortran Language Specification Version 1.0, Center for Research on Parallel Computation, Rice University, Houston, Texas,
Published in 993 (High Performance Fortran Forum,
High Performance Fortran Language Speccificati
on ver. 1.0, Center for Research on Paraallel
Computation, Rice Univ., Houston, Tx, 199
3. ).

【0088】602において、終値保証配列aの定義参
照即ち、aの値を更新する参照点は図8の806の左辺
なので、これを第2引数bで置き換えて1343を得
る。
In 602, since the reference to the definition of the close price guarantee array a, that is, the reference point for updating the value of a is the left side of 806 in FIG. 8, this is replaced with the second argument b to obtain 1343.

【0089】603により1344を得る。According to 603, 1344 is obtained.

【0090】604によりプロセッサ数をnpとしてル
ープjを分散する。このとき、ループ繰り返し範囲はn
pで割られるのでループ回数はN/npとなり、134
0を得る。また、本実施例ではメッセージ通信入り並列
化プログラムを生成するので、1301、1305から
1307、1308から1309、1313から131
4、1330から1331、1333から1334、1
350、1352から1354を得る。これらのメッセ
ージ通信の生成方法については、ヒラナンダニ、ケネデ
ィ、ツェン、エヴァリュエイティング オブ コンパイ
ラ オプティマイゼーションズ フォー フォートラン
ディー、ジャーナル オブ パラレルアンド デイス
トリビューテッド コンピューテイング、21号、第2
7頁から第45頁、1994年度発行(Hiranandani,
Kennedy,Tseng,Evaluating of Compiler Optimi
zations for Fortran D,Journal of Parallel and
Distributed Computing,21,pp.27−45,19
94.)に詳しい。
According to 604, the loop j is distributed with the number of processors as np. At this time, the loop repetition range is n
Since it is divided by p, the number of loops is N / np, and 134
Get 0. In this embodiment, since a parallelized program with message communication is generated, 1301, 1305 to 1307, 1308 to 1309, and 1313 to 131.
4, 1330 to 1331, 1333 to 1334, 1
350, 1352 to 1354 are obtained. For a method of generating these message communications, see Hilane Dani, Kennedy, Tseng, Evaluating of Compiler Optimizations for Fortlandy, Journal of Parallel and Distributed Computing, No. 21, No. 2,
Pages 7 to 45, published in 1994 (Hiranandani,
Kennedy, Tseng, Evaluating of Compiler Optimi
zations for Fortran D, Journal of Paraallel and
Distributed Computing, 21, pp. 27-45, 19
94. ).

【0091】605において、1330から1331、
1333から1334、1350、1352から135
4がプロセッサ番号が小さい方から大きい方への通信な
ので、これらの通信と融合することにより、ssの通信1
332、1351を得る。実際はこれらは融合して通信
するためのバッファ配列buf2からのデータの取り出し
と同配列への代入とにそれぞれ対応する。
At 605, 1330 to 1331,
1333 to 1334, 1350, 1352 to 135
4 is a communication from the smaller processor number to the larger processor number.
332, 1351 are obtained. Actually, these correspond to the extraction of data from the buffer array buf2 and the assignment to the same, respectively, for fusing and communicating.

【0092】次に、606において、1301、130
5から1307、1308から1309、1313から
1314がプロセッサ番号が大きい方から小さい方への
通信なので、これらの通信と融合することにより、13
02から1304、1310から1312を得る。これ
らも同様にして融合して通信するためのバッファ配列bu
f1への代入と受信したバッファからのデータの取り出
しとにそれぞれ対応する。
Next, in 606, 1301, 130
5 to 1307, 1308 to 1309, and 1313 to 1314 are communications from the larger processor number to the smaller processor number.
02 to 1304 and 1310 to 1312 are obtained. Similarly, a buffer array bu for fusing and communicating
This corresponds to the assignment to f1 and the retrieval of data from the received buffer, respectively.

【0093】607により、1320から1323を得
る。
According to 607, 1320 to 1323 are obtained.

【0094】以上により図13の全ての文を得る。Thus, all the sentences in FIG. 13 are obtained.

【0095】次にループ飛び出し判定時処理生成部12
3を図7と図14を用いて説明する。
Next, the process generation unit 12 for loop jump determination
3 will be described with reference to FIGS.

【0096】図7はループ飛び出し判定時処理生成部1
23のアルゴリズムを説明した図である。
FIG. 7 shows a process generation unit 1 for determining a loop jump.
It is a figure explaining 23 algorithms.

【0097】図14はループ飛び出し判定時処理生成部
123の生成した中間語をソースプログラムスタイルで
記述したものである。
FIG. 14 shows the intermediate language generated by the loop generation processing unit 123 in a source program style.

【0098】まず、700において、終値保証配列はa
のみなので、引数リストはa,a1,a2,s,rest,
exit,pとなる。したがって、1400を得る。
First, at 700, the closing price guarantee array is a
, A, a1, a2, s, rest,
exit, p. Therefore, 1400 is obtained.

【0099】次に、701で、オーバラップ計算処理生
成部122においてプロセッサ番号が大きい方から小さ
い方への通信は1301から1312までなので、その
中のaの部分を、restがintervalより小さい時はa1
に、それ以外はa2に置き換えることにより1401か
ら1411を得る。
Next, in 701, since the communication from the larger processor number to the smaller processor number is from 1301 to 1312 in the overlap calculation processing generation unit 122, the part a in it is replaced when rest is smaller than the interval. a1
Otherwise, 1401 to 1411 are obtained by substituting a2 with a2.

【0100】702で、”rest<interval”の時、オー
バラップ計算処理生成部122においてプロセッサ番号
が小さい方から大きい方へのssの通信を除く通信は13
30から1331、1333から1334、1350、
1352から1354であるので、これらから通信を融
合するためのバッファを使わないようにし、aへの受信
をa1に置き換えることで、1426、1428を得
る。ssの値更新計算を除く内側ループ計算は、1427
におけるサブルーチンFFの呼び出しと1450から1
456で示されたサブルーチンFFで実現される。第1
引数をa1にすることで終値保証配列aの使用が全てa
1に置き換わる。
In 702, when “rest <interval”, the overlap calculation processing generation unit 122 performs communication other than communication of ss from the smaller processor number to the larger processor number 13
30 to 1331, 1333 to 1334, 1350,
Since 1352 to 1354 are used, buffers 1426 and 1428 are obtained by not using a buffer for merging communications and replacing reception to a with a1. The inner loop calculation excluding the ss value update calculation is 1427
Call of subroutine FF and 1450 to 1
This is realized by a subroutine FF indicated by 456. First
By setting the argument to a1, all the uses of the close price guarantee array a
Replace with 1.

【0101】同様にして、”上記以外”の時、同じ通信
から通信を融合するためのバッファを使わないように
し、aへの受信をa2に置き換えることで、1430か
ら1432を得る。第1引数をa2にすることで終値保
証配列aの使用が全てa2に置き換わる。
Similarly, when "other than the above", a buffer for merging the same communication is not used, and the reception to a is replaced with a2 to obtain 1430 to 1432. By setting the first argument to a2, all the uses of the close price guarantee array a are replaced with a2.

【0102】結局、702の結果、1420から143
4までを得る。
After all, as a result of 702, 1420 to 143
Get up to 4.

【0103】703により、プロセッサ番号が小さい方
から大きい方へのssの通信を除く通信は1443、14
45で与えられる。また、プロセッサ番号が大きい方か
ら小さい方へのs,exit,restを除く通信は1441、
1442で与えられる。内側ループ計算は1444のサ
ブルーチン呼び出しで与えられる。これを(rest−1)
回繰り返すのであるから、1440、1446を得る。
According to 703, the communication except for the communication of ss from the smaller processor number to the larger processor number is 1443, 14
Given at 45. In addition, communication except for s, exit, and rest from the larger processor number to the smaller processor number is 1441.
1442. The inner loop calculation is provided by a 1444 subroutine call. This is (rest-1)
Since it is repeated twice, 1440 and 1446 are obtained.

【0104】図14より、ループ飛び出し通知元プロセ
ッサからの、直線のa1へのデータ保存回数からループ
飛び出し回数までのループ繰り返し回数rest、および、
直前の保存データa1ないしa2の値で通知先プロセッサ
で使用するデータ1406ないし1408の通知140
1から1411、通知先プロセッサでの保存データから
の値の代入ないしそれを用いたループ1回分の計算14
20から1434、残りの(rest−1)回のループ計算
1440、1446が得られた。
As shown in FIG. 14, the number of loop repetitions rest from the number of times data is stored in the straight line a1 to the number of times the loop pops out from the loop popping-out notification source processor, and
Notification 140 of data 1406 to 1408 used by the notification destination processor based on the value of immediately preceding stored data a1 or a2
1 to 1411, substitution of a value from saved data in the notification destination processor or calculation for one loop using the value 14
From 20 to 1434, the remaining (rest-1) loop calculations 1440 and 1446 were obtained.

【0105】以上より、ループ並列化部110の並列化
結果の中間語である図12、図13、図14を得た。
As described above, FIG. 12, FIG. 13, and FIG. 14, which are intermediate words of the parallelization result of the loop parallelization unit 110, are obtained.

【0106】最適化部106はこの結果を入力し、中間
語を最適な中間語に変換する。
The optimizing unit 106 receives the result and converts the intermediate language into an optimal intermediate language.

【0107】コード生成部は最適な中間語を入力し、ソ
ースプログラムの形またはオブジェクトプログラムの形
の並列化プログラム108として出力する。
The code generator inputs the optimal intermediate language and outputs it as a parallelized program 108 in the form of a source program or an object program.

【0108】図15は従来技術による図8のプログラム
の実行の様子を表したものである。
FIG. 15 shows the state of execution of the program of FIG. 8 according to the prior art.

【0109】(A)は2次元配列aのデータ分割の様子
を示した図である。2次元目の添字j方向でデータを4
分割し、それぞれプロセッサp0,p1,p2,p3が
計算することを示す。(B)はこのデータ分割に従って
分散されたプログラムの実行の様子である。横軸がプロ
セッサp0,p1,p2,p3を、縦軸が時間を表す。
t0がある繰り返し回のループkの最初の位置であり、
t1がループkの最後の位置に相当する。矩形の部分は
内側ループの計算時間を表し、矩形の中の数字はループ
の繰り返し回数を表す。これからループkの内側ループ
の計算は逐次化されていることがわかる。計算以外に通
信が発生するので、結局、1プロセッサで実行するより
時間がかかる。
(A) is a diagram showing a state of data division of a two-dimensional array a. Fourth data in the second dimension subscript j direction
The division is performed, and the processors p0, p1, p2, and p3 respectively calculate. (B) shows the state of execution of the program distributed according to the data division. The horizontal axis represents the processors p0, p1, p2, and p3, and the vertical axis represents time.
t0 is the first position of loop k for a given iteration,
t1 corresponds to the last position of the loop k. The rectangular part represents the calculation time of the inner loop, and the number in the rectangle represents the number of loop iterations. This shows that the calculation of the inner loop of the loop k is serialized. Since communication occurs in addition to the calculation, it takes longer than the execution by one processor.

【0110】図16は本発明による図8のプログラムの
実行の様子を表したものである。横軸がプロセッサp
0,p1,p2,p3を、縦軸が時間を表す。矩形の部
分は内側ループの計算時間を表し、矩形の中の数字は保
存配列a1へのデータの保存が開始されてからのループ
kの繰り返し回数を表わす。図12等におけるinterval
の値は10である。したがって、2*intervalは20で
あり、10繰り返しの間隔でa1ないしa2へデータの
値を保存している。t0は、2*intervalの新しい繰り
返しが始まった時刻を表し、ここから始まる第1回目の
ループkの繰り返し(図の矩形中の数字が1である計
算)では、データの値をa1に保存しながら同時に計算
も行う。
FIG. 16 shows how the program of FIG. 8 is executed according to the present invention. The horizontal axis is the processor p
0, p1, p2, and p3, and the vertical axis represents time. The rectangular portion represents the calculation time of the inner loop, and the number in the rectangle represents the number of repetitions of the loop k since the start of storing data in the storage array a1. Interval in FIG. 12 etc.
Is 10. Therefore, 2 * interval is 20, and data values are stored in a1 or a2 at intervals of 10 repetitions. t0 represents the time when a new repetition of 2 * interval starts, and in the first repetition of loop k starting from here (the calculation in which the number in the rectangle in the figure is 1), the value of the data is stored in a1 While doing the calculation at the same time.

【0111】また、第2回目のループkの繰り返し(図
の矩形中の数字が2である計算)では、a1に保存され
たデータの値を利用して計算を行う。図16では時刻t
2にプロセッサp3で、ループ飛び出し条件が成立した
ことを表し、その時にプロセッサp0,p1では既に第
3回目のループ繰り返しを計算していることを表してい
る。
In the second iteration of loop k (the calculation in which the number in the rectangle in the figure is 2), the calculation is performed using the value of the data stored in a1. In FIG. 16, time t
2 indicates that the loop jump condition is satisfied by the processor p3, and that the processors p0 and p1 have already calculated the third loop iteration.

【0112】t2直後でプロセッサp3はプロセッサp
2に対してループ飛び出しを通知する通信を行う。この
ときプロセッサp3は保存データの内で、プロセッサp
2がその計算に必要な部分も同時に通信する。そして、
第2回目の繰り返しに必要なデータがプロセッサp2か
ら通信されるのを待つ。
Immediately after t2, the processor p3 becomes the processor p.
2 is communicated to notify a loop jump. At this time, the processor p3 stores the processor p in the stored data.
2 also communicates the parts necessary for the calculation at the same time. And
It waits for data necessary for the second iteration to be communicated from the processor p2.

【0113】プロセッサp2ではプロセッサp3からル
ープ飛び出しを知り、保存データの内でプロセッサp1
がその計算に必要な部分と同時に飛び出しを通知する通
信をプロセッサp1に対して行う。そして、第2回目の
繰り返しに必要なデータがプロセッサp1から通信され
るのを待つ。このとき、プロセッサp0は第4回目の繰
り返しを計算している。
In the processor p2, the loop jumping out of the processor p3 is known, and the processor p1 is included in the stored data.
Performs communication for notifying the pop-out to the processor p1 at the same time as the part necessary for the calculation. Then, it waits for data necessary for the second repetition to be transmitted from the processor p1. At this time, the processor p0 has calculated the fourth iteration.

【0114】プロセッサp1でも同様にプロセッサp2
からループ飛び出しを知り、保存データの内でプロセッ
サp0がその計算に必要な部分と同時に飛び出しを通知
する通信をプロセッサp0に対して行う。そして、第2
回目の繰り返しに必要なデータがプロセッサp0から通
信されるのを待つ。
Similarly, the processor p1 also operates as the processor p2.
, The processor p0 communicates with the processor p0 notifying the jump at the same time as the part necessary for the calculation in the stored data. And the second
It waits for data necessary for the second repetition to be transmitted from the processor p0.

【0115】プロセッサp0ではループ飛び出しの通知
をプロセッサp1から受け、同時にプロセッサp1から
送られてきたデータと保存データからループ繰り返し第
2回目の計算を行い、計算結果の一部でプロセッサp1
の計算に必要なデータをプロセッサp1に送る。以下、
同様にp1、p2、p3は計算を続ける。
The processor p0 receives the notice of the loop jump from the processor p1, and at the same time, performs the second calculation of the loop repetition from the data sent from the processor p1 and the stored data.
Is sent to the processor p1. Less than,
Similarly, p1, p2, and p3 continue to calculate.

【0116】t3はループ飛び出しがp0にまで通知さ
れた時刻を、t4は全ての実行が終了した時刻を表す。
[0116] t3 represents the time when the loop jump is notified to p0, and t4 represents the time when all the executions have been completed.

【0117】本発明では、従来技術に比べてループkの
繰り返しにまたがる計算がプロセッサにまたがってオー
バラップされており、それだけループの実行が高速化さ
れる。
In the present invention, the calculation over the repetition of the loop k is overlapped over the processors as compared with the prior art, and the execution of the loop is accelerated accordingly.

【0118】尚、本実施例では、分散メモリマシン向け
のメッセージ通信入りの並列化プログラムに関する説明
を行ったが、共有メモリマシン向けの共有メモリを用い
たプロセス間通信を含む並列プログラムに対しても本発
明は適用可能である。
In this embodiment, a description has been given of a parallelized program with message communication for a distributed memory machine. However, a parallel program including inter-process communication using a shared memory for a shared memory machine is also described. The present invention is applicable.

【0119】図17は本発明のコンパイラが対象とする
並列計算機システムの構成の一例を示したものである。
1はローカルメモリ、2はプロセッサエレメント、3は
ネットワーク、4は入出力用プロセッサエレメント、5
は入出力用コンソールまたはワークステーションを表
す。
FIG. 17 shows an example of the configuration of a parallel computer system targeted by the compiler of the present invention.
1 is a local memory, 2 is a processor element, 3 is a network, 4 is an input / output processor element, 5
Represents an input / output console or workstation.

【0120】本発明のコンパイラは、入出力用コンソー
ルまたはワークステーション5において実行され、通信
を含む並列ソースプログラムまたは並列オブジェクトプ
ログラムに変換される。前者の並列ソースプログラム
は、さらに、プロセッサエレメント2向けのコンパイラ
により並列オブジェクトプログラムに変換される。上記
並列オブジェクトプログラムはリンカによりロードモジ
ュールに変換され、入出力用プロセッサエレメント4を
通じて各プロセッサエレメント2のローカルメモリ1に
ロードされ、各プロセッサエレメント2により実行され
る。実行時における各ロードモジュール間の通信はネッ
トワーク3を通じて行われる。
The compiler of the present invention is executed on the input / output console or the workstation 5, and is converted into a parallel source program or a parallel object program including communication. The former parallel source program is further converted into a parallel object program by a compiler for the processor element 2. The parallel object program is converted into a load module by a linker, loaded into the local memory 1 of each processor element 2 through the input / output processor element 4, and executed by each processor element 2. Communication between the load modules at the time of execution is performed through the network 3.

【0121】本発明のコンパイラは上記並列計算機シス
テムを有効利用してプログラムを高速化するものであ
る。
The compiler of the present invention speeds up a program by effectively utilizing the parallel computer system.

【0122】[0122]

【発明の効果】本発明によれば、ループ飛び出し条件が
成立した後、ループ飛び出しを検出したプロセッサは他
のプロセッサにループ飛び出し条件が成立したことを通
知し、通知されたプロセッサもまた別のプロセッサに通
知してこれを次々に続けるので、ループ飛び出し条件成
立後の余分なループ実行にかかる時間が少なくなる。
According to the present invention, after the loop jump condition is satisfied, the processor that has detected the loop jump notifies another processor that the loop jump condition has been satisfied, and the notified processor is another processor. And continues this one after another, so that the time required for extra loop execution after the loop jump condition is satisfied is reduced.

【0123】また、本発明によれば、使用メモリは2つ
のバッファ分だけ増やせばいいので、使用メモリ量の増
加を少ない。
Further, according to the present invention, since the used memory only needs to be increased by two buffers, the increase in the used memory amount is small.

【0124】また、本発明によれば、内側に逐次実行さ
れるループがあっても外側のループ繰り返しにまたがっ
て内側ループ処理がオーバラップするのでループの実行
は高速化される。
Further, according to the present invention, even if there is a loop that is executed sequentially inside, the execution of the loop is accelerated because the inner loop processing overlaps over the outer loop repetition.

【0125】また、本発明によれば、ループ繰り返し回
数が不定の場合でも、規定回数ごとに同期を取るなど処
理を逐次化させないので、ループの実行時間はその分、
高速化される。
Further, according to the present invention, even when the number of loop repetitions is indefinite, the processing is not serialized, such as synchronization every prescribed number of times, so that the loop execution time is reduced by
Speed up.

【図面の簡単な説明】[Brief description of the drawings]

【図1】本発明による並列化コンパイラの構成。FIG. 1 shows a configuration of a parallelizing compiler according to the present invention.

【図2】適用性判定部を説明した図。FIG. 2 is a diagram illustrating an applicability determining unit.

【図3】全体制御処理生成部を説明した図。FIG. 3 is a diagram illustrating an overall control processing generation unit.

【図4】ループ飛び出し判定処理生成部を説明した図。FIG. 4 is a diagram illustrating a loop pop-out determination processing generation unit.

【図5】保存兼計算処理生成部を説明した図。FIG. 5 is a diagram illustrating a storage and calculation processing generation unit.

【図6】オーバラップ計算処理生成部を説明した図。FIG. 6 is a diagram illustrating an overlap calculation processing generation unit.

【図7】ループ飛び出し判定時処理生成部を説明した
図。
FIG. 7 is a diagram illustrating a loop jumping out determination process generation unit.

【図8】入力プログラムの例を示した図。FIG. 8 is a diagram showing an example of an input program.

【図9】入力プログラムの一部の中間語によるツリー表
現を示した図。
FIG. 9 is a diagram showing a tree representation of a part of an input program by an intermediate language.

【図10】入力プログラムに対する基本ブロックと基本
ブロック間の制御フローを示した図。
FIG. 10 is a diagram showing a control flow between basic blocks for an input program.

【図11】入力プログラムに対するループテーブルの一
部を示した図。
FIG. 11 is a diagram showing a part of a loop table for an input program.

【図12】生成プログラムの内、全体制御処理生成部で
生成される中間語をソースプログラムスタイルで記述し
た図。
FIG. 12 is a diagram illustrating, in a source program style, an intermediate language generated by the overall control processing generation unit in the generation program.

【図13】生成プログラムの内、オーバラップ計算処理
生成部で生成される中間語をソースプログラムスタイル
で記述した図。
FIG. 13 is a diagram in which an intermediate language generated by an overlap calculation processing generation unit in a generation program is described in a source program style.

【図14】生成プログラムの内、ループ飛び出し判定時
処理生成部で生成される中間語をソースプログラムスタ
イルで記述した図。
FIG. 14 is a diagram illustrating, in a source program style, an intermediate language generated by a loop jump determination processing generation unit in a generation program.

【図15】従来技術による生成プログラムの実行の様子
を説明した図。
FIG. 15 is a view for explaining a state of execution of a generation program according to a conventional technique.

【図16】本発明による生成プログラムの実行の様子を
説明した図。
FIG. 16 is a view for explaining a state of execution of a generation program according to the present invention.

【図17】本発明のコンパイラが対象とする並列計算機
システムの構成の一例。
FIG. 17 shows an example of the configuration of a parallel computer system targeted by the compiler of the present invention.

【符号の説明】[Explanation of symbols]

100…並列化コンパイラ、101…ソースプログラ
ム、102…構文解析部、 103…プログラム解
析部、104…辞書、105…中間語、 10
6…最適化部、 107…コード生成部、108…並
列化プログラム、110…ループ並列化部、111…適
用性判定部、 112…並列性判定部、113…並列
化変換部、120…プログラム生成部、121…全体制
御処理生成部、122…オーバラップ計算処理生成部、
123…ループ飛び出し判定時処理生成部。
Reference numeral 100: parallelizing compiler, 101: source program, 102: syntax analysis unit, 103: program analysis unit, 104: dictionary, 105: intermediate language, 10
6: Optimizer 107: Code generator 108: Parallelized program 110: Loop parallelizer 111: Applicability determiner 112: Parallelism determiner 113: Parallelization converter 120: Program generation Unit, 121: overall control processing generation unit, 122: overlap calculation processing generation unit,
123: Loop jump determination time processing generation unit.

Claims (6)

【特許請求の範囲】[Claims] 【請求項1】ループ飛び出しを含むループに対して、そ
のループ内で値が更新されループ飛び出し後に値が使用
されるデータの値を、ループが指定回数だけ繰り返され
るたびに保存しながらループ繰り返しを複数プロセッサ
でオーバラップさせて計算するオーバラップ計算手段
と、ループ飛び出し条件が成立した時、直前に保存した
データの値を使用してそのデータのループ飛び出し後の
値を保証する計算を行うループ飛び出し判定時手段と、
から成ることを特徴とする、ループ飛び出しを含むルー
プに対する並列実行方法。
In a loop including a loop jump, a value of data whose value is updated within the loop and whose value is used after the loop jump is stored every time the loop is repeated a specified number of times, and the loop is repeated. Overlap calculation means for calculating by overlapping with a plurality of processors, and when a loop jump condition is satisfied, a loop jump for performing a calculation for guaranteeing the value of the data after the loop jump using the value of the data stored immediately before Determination means;
A parallel execution method for a loop including a loop jump.
【請求項2】請求項1記載のオーバラップ計算手段は、
元のループでの上記データに対するすべての値の格納を
値保存用データへの格納に置き換え、次のループ繰り返
しでは、元のループでの上記データに対するすべての値
の使用を値保存用データの使用に置き換える保存兼計算
手段、を含むことを特徴とする、ループ飛び出しを含む
ループに対する並列実行方法。
2. The overlap calculating means according to claim 1,
Replace the storage of all values for the above data in the original loop with the storage of value storage data, and use the values for the above data in the original loop in the next loop iteration. A parallel execution method for a loop including a loop jump-out.
【請求項3】請求項1記載のループ飛び出し条件判定手
段は、複数のプロセッサの内、1つのプロセッサが元の
ループのおけるループ飛び出し条件判定を行い、その判
定の結果を他プロセッサに通知し、通知された判定結果
を受け取る手段、を含むことを特徴とする、ループ飛び
出しを含むループに対する並列実行方法。
3. The loop jump condition determining means according to claim 1, wherein one of the plurality of processors determines a loop jump condition in an original loop, and notifies a result of the determination to another processor; A means for receiving the notified determination result. A parallel execution method for a loop including a loop jump.
【請求項4】プログラムを入力し、構文解析し、プログ
ラム解析を行い、並列機向けの並列プログラムないし並
列オブジェクトプログラムを生成する並列化コンパイラ
であって、ループ飛び出しがあるループを検出し、その
ループ内で値が更新されループ飛び出し後に値が使用さ
れるデータを検出する適用性判定部と、上記データの値
を、指定ループ繰り返し回数ごとに保存しながらループ
繰り返しを複数プロセッサでオーバラップさせて計算す
るオーバラップ計算処理生成部と、ループ飛び出し条件
が成立した時、直前に保存したデータの値を使用してそ
のデータのループ飛び出し後の値を保証する計算を行う
ループ飛び出し判定時処理生成部と、から成ることを特
徴とする、ループ飛び出しを含むループに対する並列プ
ログラム生成方法。
4. A parallelizing compiler for inputting a program, parsing the program, analyzing the program, and generating a parallel program or a parallel object program for a parallel machine. The applicability judgment unit that detects data whose value is updated and the value is used after jumping out of the loop, and calculates the data value by overlapping the loop repetition with multiple processors while saving the data value for each specified number of loop repetitions An overlap calculation processing generation unit that performs a calculation that guarantees a value of the data after the loop jump using the value of the data stored immediately before when the loop jump condition is satisfied; And a method for generating a parallel program for a loop including a loop jump out.
【請求項5】請求項4記載のオーバラップ計算処理生成
部は、元のループでの上記データに対するすべての値の
格納を値保存用データへの格納に置き換え、次のループ
繰り返しでは、元のループでの上記データに対するすべ
ての値の使用を値保存用データの使用に置き換える保存
兼計算処理生成部、を含むことを特徴とする、ループ飛
び出しを含むループに対する並列プログラム生成方法。
5. The overlap calculation processing generation unit according to claim 4, wherein the storage of all the values for the data in the original loop is replaced by the storage in the value storage data, and in the next loop iteration, the original loop A method for generating a parallel program for a loop including a loop jump, comprising: a storage and calculation processing generation unit that replaces use of all values for the data in the loop with use of data for storing values.
【請求項6】請求項4記載のループ飛び出し判定時処理
生成部は、複数のプロセッサの内、1つのプロセッサが
元のループのおけるループ飛び出し条件判定を行い、そ
の判定の結果を他プロセッサに通知し、通知された判定
結果を受け取る処理の生成部、を含むことを特徴とす
る、ループ飛び出しを含むループに対する並列プログラ
ム生成方法。
6. A loop jump determination processing generation unit according to claim 4, wherein one of the plurality of processors determines a loop jump condition in an original loop, and notifies a result of the determination to another processor. And generating a process for receiving the notified determination result. A method for generating a parallel program for a loop including loop jumping out.
JP28491397A 1997-10-17 1997-10-17 Parallel executing method for loop including loop jump-out and parallel program generating method Pending JPH11120003A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP28491397A JPH11120003A (en) 1997-10-17 1997-10-17 Parallel executing method for loop including loop jump-out and parallel program generating method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP28491397A JPH11120003A (en) 1997-10-17 1997-10-17 Parallel executing method for loop including loop jump-out and parallel program generating method

Publications (1)

Publication Number Publication Date
JPH11120003A true JPH11120003A (en) 1999-04-30

Family

ID=17684683

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28491397A Pending JPH11120003A (en) 1997-10-17 1997-10-17 Parallel executing method for loop including loop jump-out and parallel program generating method

Country Status (1)

Country Link
JP (1) JPH11120003A (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8799881B2 (en) 2010-09-27 2014-08-05 Kabushiki Kaisha Toshiba Program parallelization device and program product
CN114582314A (en) * 2022-02-28 2022-06-03 江苏楷文电信技术有限公司 ASR-based human-computer audio-video interaction logic model design method

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8799881B2 (en) 2010-09-27 2014-08-05 Kabushiki Kaisha Toshiba Program parallelization device and program product
CN114582314A (en) * 2022-02-28 2022-06-03 江苏楷文电信技术有限公司 ASR-based human-computer audio-video interaction logic model design method

Similar Documents

Publication Publication Date Title
US20180373509A1 (en) Loop execution with predicate computing for dataflow machines
US8296746B2 (en) Optimum code generation method and compiler device for multiprocessor
US5151991A (en) Parallelization compile method and system
EP3370150B1 (en) Program generation method and system for accelerator
US7134120B2 (en) Map compiler pipelined loop structure
JP2921190B2 (en) Parallel execution method
JP2001166949A (en) Method and device for compiling source code by using symbolic execution
Hoo et al. ParaLaR: A parallel FPGA router based on Lagrangian relaxation
EP1107115A2 (en) Method and apparatus for compiling source code by flattening hierarchies
Lin Efficient compilation of process-based concurrent programs without run-time scheduling
WO2007105309A1 (en) Paralleled program generation program, paralleled program generation device, and paralleled program generation method
JPH11120003A (en) Parallel executing method for loop including loop jump-out and parallel program generating method
CN110825380A (en) Kernel function generation method, target code generation method and combined processing device
Masten et al. Function/kernel vectorization via loop vectorizer
JP2008090541A (en) Parallelization program generation method, parallelization program generation device, and parallelization program generation program
JPH04293150A (en) Compiling method
Yuan et al. Demand-driven data flow analysis for communication optimization
Alblas Concurrent incremental attribute evaluation
JP3757825B2 (en) Inter-processor communication reduction method, parallel compiler apparatus and program
Song et al. A technique for variable dependence driven loop peeling
Kharche Matlab automatic differentiation using source transformation
Liolli et al. Profiling-Based Control-Flow Reduction in High-Level Synthesis
von Hanxleden et al. A balanced code placement framework
Kumar et al. Exploiting Parallelism Available in Loops Using Abstract Syntax Tree
Yuan et al. Compiling Loops with Branches on Static-Scheduling CGRA