JP2001005792A - Method for deciding paralleled loop - Google Patents

Method for deciding paralleled loop

Info

Publication number
JP2001005792A
JP2001005792A JP11174972A JP17497299A JP2001005792A JP 2001005792 A JP2001005792 A JP 2001005792A JP 11174972 A JP11174972 A JP 11174972A JP 17497299 A JP17497299 A JP 17497299A JP 2001005792 A JP2001005792 A JP 2001005792A
Authority
JP
Japan
Prior art keywords
loop
processing unit
processing
loops
parallelized
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
JP11174972A
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.)
REAL WORLD COMPUTING PARTNERSH
Hitachi Ltd
Real World Computing Partnership
Original Assignee
REAL WORLD COMPUTING PARTNERSH
Hitachi Ltd
Real World Computing Partnership
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 REAL WORLD COMPUTING PARTNERSH, Hitachi Ltd, Real World Computing Partnership filed Critical REAL WORLD COMPUTING PARTNERSH
Priority to JP11174972A priority Critical patent/JP2001005792A/en
Publication of JP2001005792A publication Critical patent/JP2001005792A/en
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

PROBLEM TO BE SOLVED: To reduce the number of combinations of paralleled loop candidates and to permit flexible loop division that does not use approximately extending over a plurality of loop nests. SOLUTION: A reference pattern detection processing part 104 detects the data reference pattern of array data in a loop with respect to a loop control variable for each parallelable loop, a loop type graph preparation processing part 105 puts together loop groups having the same data reference pattern to one sort, and a paralleled loop decision processing part 106 decides the allocated range to each processor from the execution range of each loop for each loop in a loop sort, evaluates an execution period in the case of paralleling each loop according to the range and decides an optimum paralleled loop.

Description

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

【0001】[0001]

【発明の属する技術分野】本発明は、ソースプログラム
を入力して、並列計算機向けにループを分割する指示文
を含むプログラムまたは並列化されたオブジェクトコー
ドを出力する並列化ツールまたは並列化コンパイラに係
わり、特に、ループを並列化する場合に、その最適な候
補の選択を効率的に行なうのに好適な並列化ループ決定
方法に関するものである。
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to a parallelizing tool or a parallelizing compiler for inputting a source program and outputting a program including a directive for dividing a loop for a parallel computer or a parallelized object code. In particular, the present invention relates to a parallelized loop determination method suitable for efficiently selecting an optimal candidate when a loop is parallelized.

【0002】[0002]

【従来の技術】従来、ソースプログラムを入力して、主
として共有メモリ型並列計算機向けに、ループを分割す
る指示文を含むプログラムまたは並列化されたオブジェ
クトコードを出力する並列化ツールまたは並列化コンパ
イラでは、例えば、コンスタンチン ディー ポリクロノ
ポーラス、ディビッド ジェー クック、および ディビ
ッド エイ パデュア著、「ユーティライジング マルチ
ディメンショナル ループパラレリズム オン ラージス
ケール パラレル プロセッサ システムズ」(アイイーイ
ーイー トランザクションズ オン コンピューターズ、v
ol.38,no.9、9月、1989年)の第1285頁か
ら第1296頁(Constantine D. Polychronopoulos, D
avid J. Kuck, and David A. Padua, Utilizing Multid
imensionalLoop Parallelism on Large-Scale Parallel
Processor Systems, IEEE Transactions on computer
s, vol.38, no.9, september 1989, pp.1285-1296)で
論じられているように、一つのループネスト内のみに注
目して、並列化ループを決定していた(第1の従来技
術)。
2. Description of the Related Art Conventionally, a parallelizing tool or a parallelizing compiler for inputting a source program and outputting a program including a directive to divide a loop or a parallelized object code mainly for a shared memory type parallel computer has been proposed. See, for example, "Utilizing Multidimensional Loop Parallelism on Large Scale Parallel Processor Systems" by Konstantin Dee Polychronoporous, David J. Cook and David A. Padua (IEE Transactions on Computers, v
ol. 38, no. 9, September, 1989), pages 1285 to 1296 (Constantine D. Polychronopoulos, D.
avid J. Kuck, and David A. Padua, Utilizing Multid
imensionalLoop Parallelism on Large-Scale Parallel
Processor Systems, IEEE Transactions on computer
s, vol. 38, no. 9, september 1989, pp. 1285-1296), the parallelized loop was determined by focusing only on one loop nest (first). Prior art).

【0003】また、ディー ジェー パレルモ、ピィー
バナジー著、オートマチック セレクション オブ ダイ
ナミック パーティショニング スキームズ フォー ディ
ストリビューテッドメモリー マルチコンピューター
ズ、イン シィー エイチ ファン等編、プロシーディン
グス オブ エイス アニュアル ワークショップ オン ラ
ンゲージズ アンド コンパイラーズ フォー パラレル
コンピューティング、コロンバス、オハイオ、オーガス
ト、1995、レクチャー ノーツ イン コンピュータ
サイエンス 1033、シュプリンガー フェアラーク、
第392頁から第406頁(D. J. Palermo, P. Banerje
e, Automatic selection of dynamic partitioning sch
emes for distributed-memory multicomputers, In C.-
H. Huang etal. (Eds.), Proceedings of 8th Annual W
orkshop on Languages and Compilers for Parallel Co
mputing, Columbus, Ohio, August 1995, Lecture Note
s inComputer Science 1033, Springer Verlag, pp.392
-406)で論じられているように、データ分割問題を近似
的に解くことで、並列化ループを決定している(第2の
従来技術)。
[0003] Deejay Palermo, Pee
By Vanergy, Automatic Selection of Dynamic Partitioning Schemes for Distributed Memory Multicomputers, Incy H Fans, etc., Proceedings of Ace Annual Workshop on Languages and Compilers for Parallels
Computing, Columbus, Ohio, August, 1995, Lecture Notes in Computer
Science 1033, Springer Verlag,
392 to 406 (DJ Palermo, P. Banerje
e, Automatic selection of dynamic partitioning sch
emes for distributed-memory multicomputers, In C.-
H. Huang etal. (Eds.), Proceedings of 8th Annual W
orkshop on Languages and Compilers for Parallel Co
mputing, Columbus, Ohio, August 1995, Lecture Note
s inComputer Science 1033, Springer Verlag, pp.392
As discussed in -406), a parallelization loop is determined by approximately solving a data division problem (second conventional technique).

【0004】[0004]

【発明が解決しようとする課題】解決しようとする問題
点は、上記第1の従来技術では、複数のループネストに
またがったループ並列化を考慮せず各々のループネスト
にのみ注目して並列化するため、先行するループネスト
で一つのプロセッサが書き換えたデータを、後続のルー
プネストで他のプロセッサが読み込む場合、ループネス
ト間でプロセッサ間同期が必要になり、その同期の時間
だけ、プログラムの実行が遅くなってしまう点である。
The problem to be solved is that, in the first prior art, the parallelization is performed by paying attention only to each loop nest without considering the loop parallelization over a plurality of loop nests. Therefore, if data read by one processor in the preceding loop nest is read by another processor in the following loop nest, inter-processor synchronization is required between the loop nests. Is that it becomes slow.

【0005】また、上記第2の従来技術では、近似的に
解くため、および、データ分割パターンが決まっており
ループ分割方法に柔軟性がないため、必ずしも最良の解
が得られずに、プログラムの実行が遅くなるという点で
ある。
In the second prior art, the best solution cannot always be obtained because the approximate solution is obtained and the data division pattern is fixed and the loop division method is not flexible. The point is that execution is slow.

【0006】本発明の目的は、これら従来技術の課題を
解決し、複数のループネストにまたがったループ並列化
を考慮した最適な並列ループの決定を短い解析時間で可
能とすること、および、近似を用いずに最適な並列ルー
プの決定を短い解析時間で可能とすること、さらに、ル
ープ分割をより柔軟に行なって最適な並列ループの決定
を可能とする並列化ループ決定方法を提供することであ
る。
SUMMARY OF THE INVENTION An object of the present invention is to solve the above-mentioned problems of the prior art, and to make it possible to determine an optimal parallel loop in a short analysis time in consideration of parallelization of a loop over a plurality of loop nests, and to provide an approximation. By enabling the optimal parallel loop to be determined in a short analysis time without using, and by providing a parallelized loop determining method that enables the optimal parallel loop to be determined by making the loop division more flexible. is there.

【0007】[0007]

【課題を解決するための手段】上記目的を達成するた
め、本発明の並列化ループ決定方法は、ソースプログラ
ムを入力して、並列化可能なループを検出し、この検出
した並列化可能なループを並列計算機向けに分割する指
示文を含むプログラムもしくは並列化されたオブジェク
トコードを出力する並列化ツールまたは並列化コンパイ
ラによる並列化可能なループの決定方法において、参照
パターン検出処理部を設けて、各並列可能なループに対
し、ループ制御変数に対するループ内のデータのデータ
参照パターンを検出し、またループ類グラフ作成処理部
を設けて、同じデータ参照パターンを持つループ群を1
つの類に含め、それらの類の間の制御フロー関係を表わ
すループ類グラフを作成し、そして並列化ループ決定処
理部を設けて、ループ類グラフを用いて、ループ類中の
全てのループに対し、各プロセッサが分担して計算する
データの分担範囲を決定し、その分担に従って各ループ
を並列化した場合の実行時間を評価し、得られた評価値
から最適な並列化ループを選択する処理を行なうことを
特徴とする。
In order to achieve the above object, a method for determining a parallelized loop according to the present invention detects a parallelizable loop by inputting a source program, and detects the detected parallelizable loop. In a method of determining a loop that can be parallelized by a parallelization tool or a parallelization compiler that outputs a program including a directive or a parallelized object code that divides the parallelized code for a parallel computer, a reference pattern detection processing unit is provided. For a loop that can be parallelized, a data reference pattern of data in the loop with respect to the loop control variable is detected, and a loop type graph creation processing unit is provided so that one loop group having the same data reference pattern is set.
A loop class graph representing the control flow relations between the classes, and a parallelized loop decision processing unit is provided, and the loop class graph is used for all the loops in the loop class. The processing for determining the sharing range of the data to be shared and calculated by each processor, evaluating the execution time when each loop is parallelized according to the sharing, and selecting the optimal parallelized loop from the obtained evaluation value is performed. It is characterized by performing.

【0008】[0008]

【発明の実施の形態】以下、本発明の実施の形態を、図
面により詳細に説明する。図1は、本発明の並列化ルー
プ決定方法を実行するシステムの構成例を示すブロック
図であり、図16は、図1におけるシステムのハードウ
ェア構成例を示すブロック図である。
Embodiments of the present invention will be described below in detail with reference to the drawings. FIG. 1 is a block diagram showing a configuration example of a system that executes the parallelized loop determination method of the present invention, and FIG. 16 is a block diagram showing a hardware configuration example of the system in FIG.

【0009】図16において、1はCRT(Cathode Ra
y Tube)等からなり文字や画像を表示出力する表示装
置、1はキーボードやマウス等からなり操作者からの指
示を入力する入力装置、3はHDD(Hard Disk Driv
e)等からなり大容量のデータやプログラムを記憶する
外部記憶装置、4はCPU(Central Processing Uni
t)や主メモリを有して蓄積プログラム方式によるコン
ピュータ処理を行なう情報処理装置、5は本発明の処理
手順に係るプログラムやデータを記録した記録媒体とし
ての光ディスク、6は情報処理装置4からの指示に基づ
き外部記憶装置3に記憶させる光ディスク5内のデータ
やプログラムを読み出す駆動装置である。
In FIG. 16, reference numeral 1 denotes a CRT (Cathode Ra).
y Tube) etc., a display device for displaying and outputting characters and images, 1 an input device consisting of a keyboard, a mouse, etc. for inputting instructions from an operator, 3 an HDD (Hard Disk Drive)
e) and an external storage device for storing large amounts of data and programs, and 4 is a CPU (Central Processing Uniform).
t), an information processing apparatus having a main memory and performing computer processing by a storage program method, 5 is an optical disk as a recording medium on which a program and data according to the processing procedure of the present invention are recorded, and 6 is an information processing apparatus The drive device reads out data and programs in the optical disk 5 to be stored in the external storage device 3 based on instructions.

【0010】情報処理装置4は、外部記憶装置3に記憶
した光ディスク5からのデータやプログラムを主メモリ
にロードすることにより、図1に示す各処理部からなる
並列化コンパイラ100を構成する。
The information processing device 4 loads the data and programs from the optical disk 5 stored in the external storage device 3 into the main memory to configure the parallelizing compiler 100 including the respective processing units shown in FIG.

【0011】図1において、100は本発明に係る処理
を行なう並列化コンパイラ、110は並列化の処理対象
となるソースプログラムである。並列化コンパイラ10
0は、構文解析処理部101、データ依存解析処理部1
02、並列性解析処理部103、参照パターン検出処理
部104、ループ類グラフ作成処理部105、並列化ル
ープ決定処理部106、ループ並列化処理部107、お
よび、コード生成処理部108により構成されている。
In FIG. 1, reference numeral 100 denotes a parallelizing compiler for performing the processing according to the present invention, and 110 denotes a source program to be processed for parallelization. Parallelizing compiler 10
0 indicates the syntax analysis processing unit 101 and the data dependence analysis processing unit 1
02, a parallelism analysis processing unit 103, a reference pattern detection processing unit 104, a loop type graph creation processing unit 105, a parallelization loop determination processing unit 106, a loop parallelization processing unit 107, and a code generation processing unit 108. I have.

【0012】構文解析処理部101は、ソースプログラ
ム110を入力して辞書120および中間語130を出
力する。データ依存解析処理部102は、辞書120お
よび中間語130を入力してデータ依存関係を解析し、
同時にループテーブル140も出力する。
The syntax analysis processing unit 101 inputs a source program 110 and outputs a dictionary 120 and an intermediate language 130. The data dependency analysis processing unit 102 analyzes the data dependency by inputting the dictionary 120 and the intermediate language 130,
At the same time, a loop table 140 is also output.

【0013】並列性解析処理部103は、辞書120と
中間語130、および、データ依存解析処理部102か
らのデータ依存解析情報を入力して、プログラムのルー
プの並列化可能性を判定し、その結果をループテーブル
140に出力する。以上、構文解析処理部101とデー
タ依存解析処理部102および並列性解析処理部103
の処理は従来技術に基づくものである。
The parallelism analysis processing unit 103 inputs the dictionary 120, the intermediate language 130, and the data dependence analysis information from the data dependence analysis processing unit 102, and determines the parallelizability of the program loop. The result is output to the loop table 140. As described above, the syntax analysis processing unit 101, the data dependence analysis processing unit 102, and the parallelism analysis processing unit 103
Is based on the prior art.

【0014】参照パターン検出処理部104は、辞書1
20と中間語130およびループテーブル140からの
情報を入力して、並列性解析処理部103で並列化可能
と判定されたループ中に現れる配列参照の添字に、その
配列参照を囲むループ群のループ制御変数がどのような
パターンで現れるかを検出して、その結果を参照パター
ンテーブル150に出力する。
The reference pattern detection processing unit 104 stores the dictionary 1
20, the information from the intermediate language 130 and the loop table 140 are input, and the subscript of the array reference appearing in the loop determined to be parallelizable by the parallelism analysis processing unit 103 is added to the loop of the loop group surrounding the array reference. The pattern in which the control variable appears is detected, and the result is output to the reference pattern table 150.

【0015】ループ類グラフ作成処理部105は、ルー
プテーブル140および参照パターンテーブル150か
らの情報を入力し、ループ群を後に述べるループ類に分
類して、各ループ類を1つのノードとするループ類グラ
フ160を出力する。
The loop type graph creation processing unit 105 receives information from the loop table 140 and the reference pattern table 150, classifies the loops into loops to be described later, and sets the loops as one node. A graph 160 is output.

【0016】並列化ループ決定処理部106は、中間語
130とループテーブル140およびループ類グラフ1
60からの情報を入力して、ループ類に含まれるループ
は1つのループであるかのように扱うことによって、並
列ループ候補の組合わせ数を削減し、削減された各組合
わせに対してプログラムの実行時間を評価し、最も実行
時間が短いと評価された時の並列ループの組合わせを選
択して、その結果をループテーブル140に出力する。
以上、参照パターン検出処理部104とループ類グラフ
作成処理部105および並列化ループ決定処理部106
の処理は本発明に係わるものである。
The parallelized loop determination processing unit 106 includes an intermediate language 130, a loop table 140, and a loop type graph 1
60, the number of combinations of parallel loop candidates is reduced by treating the loops included in the loops as if they were one loop, and a program is executed for each reduced combination. Is evaluated, the combination of the parallel loops when the execution time is estimated to be the shortest is selected, and the result is output to the loop table 140.
As described above, the reference pattern detection processing unit 104, the loop type graph creation processing unit 105, and the parallelized loop determination processing unit 106
Is related to the present invention.

【0017】ループ並列化処理部107は、従来技術に
基づき辞書120と中間語130およびループテーブル
140からの情報を入力して、並列化が決定されたルー
プを並列化変換して、その結果を辞書120および中間
語130に反映する。コード生成処理部108も、従来
技術に基づき辞書120と中間語130を入力して、ソ
ースプログラムレベルまたはオブジェクトコードレベル
の並列化プログラム180を出力する。
The loop parallel processing unit 107 inputs information from the dictionary 120, the intermediate language 130, and the loop table 140 based on the prior art, converts the loop determined to be parallel into parallel, and converts the result. This is reflected in the dictionary 120 and the intermediate language 130. The code generation processing unit 108 also inputs the dictionary 120 and the intermediate language 130 based on the conventional technology, and outputs a source program level or object code level parallelized program 180.

【0018】ループ類グラフ作成処理部105は、細分
テーブル作成処理部1051と、ループ類検出処理部1
052、エッジ接続処理部1053からなり、細分テー
ブル作成処理部1051では、ループテーブル140を
入力してループネスト中の最内側ループに対応したテー
ブルを作成して、そのテーブル間を最内側ループを含
む、あるループ同士の制御フローに従って接続し、その
結果を細分ループテーブル170として出力する。
The loop type graph creation processing unit 105 includes a subdivision table creation processing unit 1051 and a loop type detection processing unit 1.
052, an edge connection processing unit 1053, the subdivision table creation processing unit 1051 receives the loop table 140, creates a table corresponding to the innermost loop in the loop nest, and includes the innermost loop between the tables. Are connected according to a control flow of a certain loop, and the result is output as a subdivided loop table 170.

【0019】また、ループ類検出処理部1052は、ル
ープテーブル140と参照パターンテーブル150およ
び細分ループテーブル170からの情報を入力して、同
値な関係にあるループテーブルをループ類グラフ160
のノードであるループ類テーブルに接続して、ノード間
がエッジで未接続な状態のループ類グラフ160を出力
する。
The loop detection processing unit 1052 receives information from the loop table 140, the reference pattern table 150, and the subdivision loop table 170, and converts the loop tables having the same relation into the loop class graph 160.
And outputs a loop type graph 160 in a state where the nodes are not connected by edges at the edges.

【0020】また、エッジ接続処理部1053は、ルー
プテーブル140と細分ループテーブル170およびル
ープ類グラフ160からの情報を入力して、ループ類グ
ラフのノード間がエッジで接続されたループ類グラフ1
60を出力する。
The edge connection processing unit 1053 receives information from the loop table 140, the subdivision loop table 170, and the loop type graph 160, and generates a loop type graph 1 in which nodes of the loop type graph are connected by edges.
60 is output.

【0021】このような構成の並列化コンパイラ100
の具体的な動作例を、図2〜図15を用いて説明する。
図7は、図1におけるソースプログラムの具体例を示す
説明図である。図7において、行700は、Fortranの
文法による配列a,b,cおよびスカラ変数x, yの宣言
である。
The parallelizing compiler 100 having such a configuration is described.
A specific operation example will be described with reference to FIGS.
FIG. 7 is an explanatory diagram showing a specific example of the source program in FIG. In FIG. 7, a line 700 is a declaration of arrays a, b, c and scalar variables x, y according to Fortran grammar.

【0022】行701と行712で囲まれた部分は、k
をループ制御変数とするループである。以下、ループは
先頭行の行番号を用いて表わす。即ち、このループはル
ープ701と表わす。行702と行706で囲まれた部
分は、jをループ制御変数とするループ702であり、
行703と行705で囲まれた部分は、iをループ制御
変数とするループ703である。行707と行711で
囲まれた部分も同様に、iをループ制御変数とするルー
プ707であり、行708と行710で囲まれた部分も
同様に、jをループ制御変数とするループ708であ
る。
The portion between the rows 701 and 712 is k
Is a loop in which is a loop control variable. Hereinafter, the loop is represented using the line number of the first line. That is, this loop is represented as a loop 701. A portion surrounded by a row 702 and a row 706 is a loop 702 in which j is a loop control variable.
A portion surrounded by the lines 703 and 705 is a loop 703 in which i is a loop control variable. Similarly, a portion surrounded by rows 707 and 711 is a loop 707 in which i is a loop control variable, and a portion surrounded by rows 708 and 710 is also a loop 708 in which j is a loop control variable. is there.

【0023】以下、並列化コンパイラ100の中の個々
の処理を説明する。構文解析処理部101は、ソースプ
ログラム110を入力して辞書120と中間語130を
生成する。尚、中間語130はソースプログラム110
に対応しているので、以下の説明では、図7のソースプ
ログラム110を、中間語130のソースプログラムス
タイルの表現として代用する。また、辞書130の詳細
は省略する。
Hereinafter, individual processes in the parallelizing compiler 100 will be described. The syntax analysis processing unit 101 receives the source program 110 and generates a dictionary 120 and an intermediate language 130. The intermediate language 130 is the source program 110
Therefore, in the following description, the source program 110 of FIG. 7 will be used as the expression of the source program style of the intermediate language 130. Details of the dictionary 130 are omitted.

【0024】データ依存解析処理部102および並列性
解析処理部103の詳細動作に関しては、ハンス・ジー
マ、バーバラ・チャップマン著「スーパーコンパイラー
ズフォー パラレル アンド ベクトル コンピューター
ズ」(アディッソン-ウエスリー、1991)(Hans Zi
ma and Barbara Chapman. "Supercompilers for Parall
el and Vector Computers", Addison-Wesley, 1991.)
に説明されているのでここでの説明は省略する。
Regarding the detailed operations of the data dependence analysis processing section 102 and the parallelism analysis processing section 103, see "Super Compilers for Parallel and Vector Computers" by Hans Zima and Barbara Chapman (Addison-Wesley, 1991) (Hans Zi
ma and Barbara Chapman. "Supercompilers for Parall
el and Vector Computers ", Addison-Wesley, 1991.)
Therefore, the description is omitted here.

【0025】参照パターン検出処理部104は、辞書1
20と中間語130およびループテーブル140を入力
して、並列性解析処理部103で並列化可能と判定され
たループ中に現れる各配列参照の添字に、その配列参照
を囲むループ群のループ制御変数がどのようなパターン
で現れるかを検出して、その結果を参照パターンテーブ
ル150に出力する。
The reference pattern detection processing unit 104 stores the dictionary 1
20 and the intermediate language 130 and the loop table 140, and the subscript of each array reference appearing in the loop determined to be parallelizable by the parallelism analysis processing unit 103 is a loop control variable of a loop group surrounding the array reference. Is detected in what pattern, and the result is output to the reference pattern table 150.

【0026】以下、この参照パターン検出処理部104
の処理動作例を説明する。図2は、図1における参照パ
ターン検出処理部の処理動作例を示す説明図であり、図
8は、図1における参照パターンテーブルの構成例を示
す説明図である。図8に示す例は、図1の参照パターン
検出処理部104が図7の入力プログラム110に対し
て図2の処理を行なった結果得られた参照パターンテー
ブル150の例である。
Hereinafter, the reference pattern detection processing unit 104
An example of the processing operation will be described. FIG. 2 is an explanatory diagram illustrating an example of a processing operation of the reference pattern detection processing unit in FIG. 1, and FIG. 8 is an explanatory diagram illustrating a configuration example of the reference pattern table in FIG. The example shown in FIG. 8 is an example of the reference pattern table 150 obtained as a result of the reference pattern detection processing unit 104 of FIG. 1 performing the processing of FIG. 2 on the input program 110 of FIG.

【0027】図8において、参照パターンテーブル群8
00,810,820,830,840は各々、図7に
おけるループ701,702,703,707,708
における、配列aに対する参照パターンテーブルであ
る。このような参照パターンテーブルの各フィールドに
ついて、テーブル800を例に用いて説明する。
In FIG. 8, reference pattern table group 8
00, 810, 820, 830, and 840 are loops 701, 702, 703, 707, and 708 in FIG.
5 is a reference pattern table for an array a. Each field of the reference pattern table will be described using the table 800 as an example.

【0028】フィールド801,803,805には、
各々、配列aの1,2,3次元目の添字の特徴を表わす
値が格納される。ここで、添字の特徴を表わす値は"li
n"、"inv"、"oth"の3種類であり、各々、添字が現ルー
プのループ制御変数の1次式であること(lin)、添字
が現ループ不変であること(inv)、上記2つの場合以
外であること(oth)を示す。
The fields 801, 803, 805 contain
Each stores a value representing the characteristic of the first, second, or third dimension of the subscript of the array a. Here, the value representing the characteristic of the subscript is "li
n "," inv ", and" oth ", where the subscript is a linear expression of the loop control variable of the current loop (lin), and the subscript is that the current loop is invariant (inv). It indicates that it is other than two cases (oth).

【0029】また、フィールド802,804,806
には、各々、配列aの1,2,3次元目の添字の特徴を
表わす値が"lin"、"inv"である時にその添字が格納され
る。"oth"の時には常にNULLである。
Also, fields 802, 804, and 806
Is stored when the value representing the feature of the first, second and third subscripts of the array a is "lin" or "inv", respectively. Always null for "oth".

【0030】以下、図7の入力プログラム110中の、
ループ703とループ702の2つのループ中の配列a
に、参照パターン検出処理部104の処理を適用した結
果について説明する。まず、ループ703中の配列aに
参照パターン検出処理部104の処理を適用する。
Hereinafter, in the input program 110 of FIG.
Sequence a in two loops, loop 703 and loop 702
Next, the result of applying the processing of the reference pattern detection processing unit 104 will be described. First, the processing of the reference pattern detection processing unit 104 is applied to the array a in the loop 703.

【0031】すなわち、図2に示したステップ200で
の処理を配列aの1次元目に適用すると、1次元目の添
字iは、現ループ703のループ制御変数の1次式なの
で、ステップ200での処理中の(1)に相当し、値"l
in"とその添字"i"を、図8における参照パターンテーブ
ル820の1次元目に設定する。これらは各々、フィー
ルド821,822に対応する。
That is, when the processing in step 200 shown in FIG. 2 is applied to the first dimension of the array a, the subscript i in the first dimension is a linear expression of the loop control variable of the current loop 703. Corresponds to (1) during the processing of
"in" and its subscript "i" are set in the first dimension of the reference pattern table 820 in Fig. 8. These correspond to the fields 821 and 822, respectively.

【0032】同様にして、図2のステップ200での処
理を配列aの2次元目に適用すると、2次元目の添字j
は、現ループ703に対してループ不変なので、ステッ
プ200での処理中の(2)に相当し、値"inv"とその
添字"j"を、図8の参照パターンテーブル820の2次
元目に設定する。これらは各々、フィールド823,8
24に対応する。
Similarly, when the processing in step 200 of FIG. 2 is applied to the second dimension of the array a, the subscript j of the second dimension
Is invariant to the current loop 703, and thus corresponds to (2) being processed in step 200. The value “inv” and its subscript “j” are added to the second dimension of the reference pattern table 820 in FIG. Set. These are respectively the fields 823, 8
Corresponding to 24.

【0033】同様にして、図2のステップ200での処
理を配列aの3次元目に適用すると、3次元目の添字k
は、現ループ703に対してループ不変なので、ステッ
プ200での処理中の(2)に相当し、値"inv"とその
添字"k"を、図8の参照パターンテーブル820の3次
元目に設定する。これらは各々、フィールド825,8
26に対応する。
Similarly, when the processing in step 200 of FIG. 2 is applied to the third dimension of the array a, the subscript k of the third dimension
Is invariant to the current loop 703, and thus corresponds to (2) in the processing in step 200. The value “inv” and its subscript “k” are stored in the third dimension of the reference pattern table 820 in FIG. Set. These are respectively the fields 825, 8
26.

【0034】次に、図7に示すソーステーブル110に
おけるループ702中の配列aに図2に示す参照パター
ン検出処理部104の処理を適用する。図2のステップ
200での処理を配列aの1次元目に適用すると、1次
元目の添字iは、現ループ702の1回の繰り返しにお
いて、ループ703が示すように1〜30までの値を取
る。
Next, the processing of the reference pattern detection processing unit 104 shown in FIG. 2 is applied to the array a in the loop 702 in the source table 110 shown in FIG. When the processing in step 200 of FIG. 2 is applied to the first dimension of the array a, the subscript i of the first dimension indicates a value of 1 to 30 as shown by the loop 703 in one iteration of the current loop 702. take.

【0035】従って、現ループ702のループ制御変数
の1次式にならず、また、ループ不変にもならないの
で、ステップ200での処理中の(3)に相当し、値"o
th"を図8の参照パターンテーブル810の1次元目に
設定する。これらは、フィールド811,812に対応
する。しかし添字は設定されないので、フィールド81
2はNULLである。
Therefore, since it does not become a linear expression of the loop control variable of the current loop 702 and does not become a loop invariant, it corresponds to (3) in the processing in step 200 and has a value "o".
"th" is set in the first dimension of the reference pattern table 810 in FIG. 8. These correspond to the fields 811, 812. However, since the subscript is not set, the field 81 is set.
2 is NULL.

【0036】次に、図2のステップ200での処理を配
列aの2次元目に適用すると、2次元目の添字jは、現
ループ702のループ制御変数の1次式なので、ステッ
プ200での処理中の(1)に相当し、値"lin"とその
添字"j"を、図8の参照パターンテーブル810の2次
元目に設定する。これらは各々、フィールド813,8
14に対応する。
Next, when the processing in step 200 of FIG. 2 is applied to the second dimension of the array a, the suffix j of the second dimension is a linear expression of the loop control variable of the current loop 702. The value “lin” and its subscript “j” are set in the second dimension of the reference pattern table 810 in FIG. 8, which corresponds to (1) in the process. These are the fields 813 and 8 respectively.
14 corresponds to.

【0037】同様にして、図2のステップ200での処
理を配列aの3次元目に適用すると、3次元目の添字k
は、現ループ702に対してループ不変なので、ステッ
プ200での処理中の(2)に相当し、値"inv"とその
添字"k"を、図8の参照パターンテーブル810の3次
元目に設定する。これらは各々、フィールド815,8
16に対応する。以上の処理は、他のループについても
全く同様である。
Similarly, when the processing in step 200 of FIG. 2 is applied to the third dimension of the array a, the subscript k of the third dimension
Is invariant to the current loop 702, and thus corresponds to (2) being processed in step 200. The value “inv” and its subscript “k” are added to the third dimension of the reference pattern table 810 in FIG. Set. These are the fields 815, 8 respectively.
16 corresponds to 16. The above processing is exactly the same for other loops.

【0038】このようにして、参照パターン検出処理部
104では、並列化可能ループ中に現れる各配列参照の
添字に、その配列参照を囲むループ群のループ制御変数
がどのようなパターンで現れるかを検出して、その結果
を参照パターンテーブル150に出力する。
As described above, the reference pattern detection processing unit 104 indicates, in the subscript of each array reference appearing in the parallelizable loop, the pattern in which the loop control variable of the loop group surrounding the array reference appears. The detection is performed, and the result is output to the reference pattern table 150.

【0039】次に、図1のループ類グラフ作成処理部1
05の動作を説明する。ループ類グラフ作成処理部10
5は、細分テーブル作成処理部1051、ループ類検出
処理部1052、エッジ接続処理部1053よりなり、
細分テーブル作成処理部1051は、ループテーブル1
40を入力してループネスト中の最内側ループに対応し
たテーブルを作成して、そのテーブル間を最内側ループ
を含む、あるループ同士の制御フローに従って接続し、
その結果を細分ループテーブル170として出力する。
Next, the loop type graph creation processing unit 1 shown in FIG.
05 will be described. Loop type graph creation processing unit 10
Reference numeral 5 includes a subdivision table creation processing unit 1051, a loop detection processing unit 1052, and an edge connection processing unit 1053.
The subdivision table creation processing unit 1051 executes the loop table 1
Enter 40 to create a table corresponding to the innermost loop in the loop nest, connect the tables according to a control flow between certain loops, including the innermost loop,
The result is output as the subdivision loop table 170.

【0040】以下、細分テーブル作成処理部1051の
処理動作を図3および図9を用いて説明する。図3は、
図1における細分テーブル作成処理部の処理動作例を示
すフローチャートであり、図9は、図1におけるループ
テーブルの構成例を示す説明図である。図9において、
900,920,930,940,950は、各々、ル
ープ702,703,707,701,708に対応す
るループテーブルを示したものである。この内、ループ
テーブル900のみフィールドを詳細に示している。
Hereinafter, the processing operation of the subdivision table creation processing unit 1051 will be described with reference to FIGS. FIG.
10 is a flowchart illustrating a processing operation example of a subdivision table creation processing unit in FIG. 1, and FIG. 9 is an explanatory diagram illustrating a configuration example of a loop table in FIG. 1. In FIG.
Reference numerals 900, 920, 930, 940, and 950 denote loop tables corresponding to the loops 702, 703, 707, 701, and 708, respectively. Of these, only the loop table 900 shows the fields in detail.

【0041】以下、このループテーブル900を用い
て、ループテーブル中のフィールドを説明する。フィー
ルド901は、現在のループより一つ外側にあるループ
に対応するループテーブルを指すポインタである。図7
においてループ702より一つ外側にあるループはルー
プ701なので、フィールド901には、ループ701
に対応するループテーブル940へのポインタが格納さ
れる。
Hereinafter, the fields in the loop table will be described using the loop table 900. A field 901 is a pointer that points to a loop table corresponding to a loop that is one outside the current loop. FIG.
Is a loop 701 outside the loop 702, the field 901 includes the loop 701
Is stored in the loop table 940 corresponding to.

【0042】またフィールド902は、現在のループよ
り一つ内側にあるループ群の内の、先頭ループに対応す
るループテーブルを指すポインタである。図7において
ループ702より一つ内側にあるループはループ703
のみなので、フィールド902には、ループ703に対
応するループテーブル920へのポインタが格納され
る。
A field 902 is a pointer that points to a loop table corresponding to the first loop in a group of loops one inward from the current loop. In FIG. 7, a loop one inner side of the loop 702 is a loop 703.
Therefore, a pointer to the loop table 920 corresponding to the loop 703 is stored in the field 902.

【0043】フィールド903は、現在のループからプ
ログラムの出口方向に向かって最初に現れるループに対
応するループテーブルを指すポインタである。図7にお
いてループ702からプログラムの出口方向に向かって
最初に現れるループは、ループ707なので、フィール
ド903には、ループ707に対応するループテーブル
930へのポインタが格納される。
A field 903 is a pointer to a loop table corresponding to a loop that first appears from the current loop toward the exit of the program. In FIG. 7, the loop that first appears from the loop 702 toward the exit of the program is the loop 707, and therefore, the field 903 stores a pointer to the loop table 930 corresponding to the loop 707.

【0044】フィールド904は、ループ制御変数に対
する辞書を指す。図7においてループ702のループ制
御変数はjなので、jの辞書へのポインタが格納され
る。フィールド905は、後で述べる細分ループテーブ
ルを指す。細分テーブル作成処理部1051の処理前な
ので、NULLが格納されている。
Field 904 points to a dictionary for loop control variables. In FIG. 7, since the loop control variable of the loop 702 is j, a pointer to the dictionary of j is stored. Field 905 points to a subdivision loop table, described below. Since it is before the processing of the subdivision table creation processing unit 1051, NULL is stored.

【0045】フィールド906,907,908は、各
々、ループの下限値、上限値、ストライドを表わす。フ
ィールド909,910,911は、後で述べるテンプ
レートの下限値、上限値、ストライドを表わす。未設定
なので、NULLが格納されている。
Fields 906, 907, and 908 represent the lower limit, upper limit, and stride of the loop, respectively. Fields 909, 910, and 911 represent a lower limit, an upper limit, and a stride of a template described later. Since it has not been set, NULL is stored.

【0046】フィールド912は、ループが並列化可能
であるか否かを示すフラグである。図7におけるループ
702は、図1の並列性解析処理部103により、並列
化可能と判定されるので、この値はTRUEとなる。
The field 912 is a flag indicating whether or not the loop can be parallelized. Since the loop 702 in FIG. 7 is determined to be parallelizable by the parallelism analysis processing unit 103 in FIG. 1, this value is TRUE.

【0047】フィールド913は、実際に、並列化する
か否かを示す並列化フラグである。この決定は、後の並
列化ループ決定処理部106でなされるため、NULL
が格納されている。
A field 913 is a parallel flag indicating whether or not to actually perform parallel processing. Since this determination is made by the parallelization loop determination processing unit 106 later, NULL
Is stored.

【0048】次に、このようなループテーブル140を
入力して図1における細分ループテーブル170を作成
する細分テーブル作成処理部1051の処理動作を図3
を用いて説明する。まず、ステップ300での処理によ
り、全ての最内側ループに対して細分ループテーブルを
作成し、それらを最内側ループに接続する。この動作を
図10に示す。
Next, the processing operation of the subdivision table creation processing unit 1051 for inputting such a loop table 140 and creating the subdivision loop table 170 in FIG. 1 will be described with reference to FIG.
This will be described with reference to FIG. First, the processing in step 300 creates a subdivided loop table for all the innermost loops and connects them to the innermost loop. This operation is shown in FIG.

【0049】図10は、図1における細分ループテーブ
ルとループテーブルとの関連を示す説明図である。本例
は、図1における細分テーブル作成処理部1051の出
力となる細分ループテーブル170を、入力となるルー
プテーブル140とともに示したものである。
FIG. 10 is an explanatory diagram showing the relationship between the subdivision loop table and the loop table in FIG. In this example, a subdivision loop table 170 that is an output of the subdivision table creation processing unit 1051 in FIG. 1 is shown together with a loop table 140 that is an input.

【0050】本図10において、ループテーブル(94
0,900,920,930,950)間の実線の右向
きの矢印と実線の下向きの矢印は、各々、現在のループ
より一つ内側にあるループ群の内の、先頭ループに対応
するループテーブルを指すポインタと、現在のループか
らプログラムの出口方向に向かって最初に現れるループ
に対応するループテーブルを指すポインタを表わす。
In FIG. 10, the loop table (94
0, 900, 920, 930, 950), the right arrow of the solid line and the downward arrow of the solid line indicate the loop table corresponding to the first loop in the group of loops one inside the current loop. A pointer that points to a loop table and a pointer that points to a loop table corresponding to a loop that first appears from the current loop toward the exit of the program.

【0051】1011,1012は各々、最内側ループ
703,708に対応する細分ループテーブルである。
最内側ループ703,708の各々に対応するループテ
ーブルは、920,950なので、図3におけるステッ
プ300での処理により、細分ループテーブル101
1,1012は各々、ループテーブル920,950に
接続される。ポインタ1031,1032は各々、この
接続関係を表わしたものである。
Reference numerals 1011 and 1012 are subdivided loop tables corresponding to the innermost loops 703 and 708, respectively.
Since the loop tables corresponding to the innermost loops 703 and 708 are 920 and 950, respectively, the processing in step 300 in FIG.
1 and 1012 are connected to loop tables 920 and 950, respectively. The pointers 1031 and 1032 each represent this connection relationship.

【0052】1021,1023は、細分ループテーブ
ル1011,1012の入口リストを模式的に表わした
ものである。同様にして、1022,1024は、細分
ループテーブル1011,1012の出口リストを模式
的に表わしたものである。これらの入口リストや出口リ
ストには、ループテーブルまたはループ類テーブルへの
ポインタが接続される。図10は何も接続されていない
状態を表わしている。
Reference numerals 1021 and 1023 schematically show entry lists of the subdivision loop tables 1011 and 1012. Similarly, reference numerals 1022 and 1024 schematically show exit lists of the subdivided loop tables 1011 and 1012. A pointer to a loop table or a loop type table is connected to these entry lists and exit lists. FIG. 10 shows a state where nothing is connected.

【0053】次に、図3におけるステップ301での処
理により、細分ループテーブル1011,1012の組
に対して、各々が接続する最内側ループテーブルは92
0,950であり、これらのループを共通に含むループ
の中で最も内側にあるループ(図7におけるループ70
1)を検出する。これはループテーブル920,950
における901に相当するフィールドを、共通なループ
テーブル940に到達するまでたどることによって得ら
れる。
Next, by the processing in step 301 in FIG. 3, the innermost loop table to which each of the subdivided loop tables 1011 and 1012 is connected is 92
0,950, and the innermost loop (loop 70 in FIG. 7) among the loops including these loops in common.
1) is detected. This is the loop table 920, 950
In the common loop table 940 until the common loop table 940 is reached.

【0054】次に、図3におけるステップ302での処
理により、ステップ301の処理で得たループ701内
で、ループ701より1つだけ内側で、ループ703,
708を含むループとして、各々、ループ702,70
7を得る。これはステップ301での処理において、ル
ープテーブル920,950におけるフィールド901
に相当するフィールドを、共通なループテーブル940
に到達するまでたどる際に、ループテーブル940の直
前にたどったループテーブルを記録しておくことによっ
て得られる。
Next, according to the processing in step 302 in FIG. 3, in the loop 701 obtained in the processing in step 301, only one loop inside the loop 701,
Loops 702 and 70
Get 7. This is because in the processing in step 301, the fields 901 in the loop tables 920 and 950
In the common loop table 940
Is obtained by recording the loop table traced immediately before the loop table 940 when the loop table is reached.

【0055】そして最後に、ステップ303の処理によ
り、ステップ302の処理で得たループ702からルー
プ707の方向に制御フローが存在するので、細分ルー
プテーブル1011から細分ループテーブル1012の
方向に、向きの付いたエッジで細分ループテーブル10
11と細分ループテーブル1012を接続する。図10
における細分ループテーブル1011から細分ループテ
ーブル1012への実線の矢印はこのエッジを表わす。
Finally, since the control flow exists in the direction from the loop 702 to the loop 707 obtained in the processing in step 302 by the processing in step 303, the control flow is directed in the direction from the subdivided loop table 1011 to the subdivided loop table 1012. Subdivided loop table 10 with attached edges
11 and the subdivision loop table 1012. FIG.
The solid arrow from the subdivision loop table 1011 to the subdivision loop table 1012 in FIG.

【0056】図1におけるループ類検出処理部1052
は、ループテーブル140、参照パターンテーブル15
0および細分ループテーブル170を入力して同値な関
係にあるループテーブルをループ類グラフ160のノー
ドであるループ類テーブルに接続して、ノード間がエッ
ジで未接続な状態の主要なノードだけから成るループ類
グラフ160を出力する。以下、このループ類検出処理
部1052の処理動作を、図4および図11を用いて説
明する。
The loop detection processing unit 1052 in FIG.
Are the loop table 140 and the reference pattern table 15
By inputting 0 and the subdivided loop table 170, the equivalent loop table is connected to the loop table which is a node of the loop class graph 160, and the nodes are composed of only the main nodes which are not connected at the edge. The loop type graph 160 is output. Hereinafter, the processing operation of the loop detection processing unit 1052 will be described with reference to FIGS.

【0057】図4は、図1におけるループ類検出処理部
の処理動作例を示すフローチャートであり、図11は、
図1におけるループテーブルと細分ループテーブルおよ
びループ類テーブル間の関係を表わした説明図である。
図11において、1101〜1103はループ類を表わ
すループ類テーブルである。また、1111〜1113
は、ループ類テーブルにループテーブルを接続するため
のリストを模式的に表わしたものである。
FIG. 4 is a flowchart showing an example of the processing operation of the loop type detection processing unit in FIG. 1. FIG.
FIG. 2 is an explanatory diagram showing a relationship among a loop table, a subdivided loop table, and a loop type table in FIG. 1.
In FIG. 11, reference numerals 1101 to 1103 denote loop type tables indicating loop types. Also, 1111-1113
Shows a list for connecting a loop table to the loop table.

【0058】これらのリストには、ループテーブルへの
ポインタが格納される。図中の実線の矢印は、矢印の始
点となるループ類テーブル中のあるフィールドに、矢印
の終点となるループテーブルへのポインタが格納されて
いることを示す。尚、ループ類テーブル間の矢印は、ル
ープ類グラフのエッジとは異なる。
These lists store pointers to the loop table. The solid arrow in the drawing indicates that a pointer to the loop table that is the end point of the arrow is stored in a certain field in the loop type table that is the start point of the arrow. The arrows between the loop type tables are different from the edges of the loop type graph.

【0059】図4において、図1におけるループ類検出
処理部1052は、まずステップ400での処理によ
り、開始点をプログラム入口とする。次に、ステップ4
01での処理により、未処理ループがあるか否かを判別
し、ここでは未処理ループがあるのでステップ402の
処理に移る。ステップ402では、開始点であるプログ
ラム入口に最も近い未処理ループとして、図7における
ループ701を選択する。
In FIG. 4, the loop detection processing unit 1052 shown in FIG. Next, step 4
In step 01, it is determined whether or not there is an unprocessed loop. Since there is an unprocessed loop, the process proceeds to step 402. In step 402, the loop 701 in FIG. 7 is selected as the unprocessed loop closest to the entry point of the program.

【0060】そして、ステップ403での処理により、
ループ701内の最初の最内側ループ703に対応する
図11における細分ループテーブル1011の入口リス
ト1021に、ループ701に対応するループテーブル
940を接続する。図11中の、入口リスト1021を
始点とし、ループテーブル940を終点とする点線の矢
印は、入口リスト1021にループテーブル940への
ポインタが格納されたことを示す。
Then, by the processing in step 403,
The loop table 940 corresponding to the loop 701 is connected to the entry list 1021 of the subdivided loop table 1011 in FIG. 11 corresponding to the first innermost loop 703 in the loop 701. In FIG. 11, a dotted arrow starting from the entry list 1021 and ending at the loop table 940 indicates that a pointer to the loop table 940 is stored in the entry list 1021.

【0061】次にステップ404での処理により、図1
1におけるループ類テーブル1101が作成され、図7
のループ701に対応するループテーブル940がルー
プ類テーブル1101に接続される。図11中の、リス
ト1111を始点とし、ループテーブル940を終点と
する実線の矢印は、リスト1111にループテーブル9
40へのポインタが格納されたことを示す。ステップ4
05での処理において、ループ701の後続ループネス
トはないので、ステップ409の処理に移る。
Next, by the processing in step 404, FIG.
7 is created, and the loop type table 1101 in FIG.
The loop table 940 corresponding to the loop 701 is connected to the loop table 1101. In FIG. 11, a solid arrow starting from the list 1111 and ending at the loop table 940 indicates that the list 1111 is the loop table 9.
Indicates that the pointer to 40 has been stored. Step 4
In the process at 05, there is no subsequent loop nest of the loop 701, so the process proceeds to the process of step 409.

【0062】このステップ409での処理により、開始
点をプログラム入口とする。さらにステップ410での
処理により、ループ701内の最後の最内側ループ70
8に対応する細分ループテーブル1012の出口リスト
1024に、ループ701に対応するループテーブル9
40を接続する。図11中の、入口リスト1024を始
点とし、ループテーブル940を終点とする点線の矢印
は、入口リスト1024にループテーブル940へのポ
インタが格納されたことを示す。
By the processing in step 409, the starting point is set as the program entry point. Further, by the processing in step 410, the last innermost loop 70 in the loop 701 is executed.
In the exit list 1024 of the subdivided loop table 1012 corresponding to 8, the loop table 9 corresponding to the loop 701 is included.
40 is connected. In FIG. 11, a dotted arrow starting from the entry list 1024 and ending at the loop table 940 indicates that a pointer to the loop table 940 is stored in the entry list 1024.

【0063】再び、ステップ401での処理により、未
処理ループがあるのでステップ402の処理に移る。こ
のステップ402での処理により、開始点であるプログ
ラム入口に最も近い未処理ループとして、図7のループ
702を選択する。
[0063] Again, there is an unprocessed loop due to the processing in step 401, so the processing moves to step 402. By the processing in step 402, the loop 702 in FIG. 7 is selected as the unprocessed loop closest to the program entrance which is the starting point.

【0064】そしてステップ403での処理により、ル
ープ702内の最初の最内側ループ703に対応する細
分ループテーブル1011の入口リスト1021に、図
7のループ702に対応するループテーブル900を接
続する。図11中の、入口リスト1021を始点とし、
ループテーブル900を終点とする点線の矢印は、入口
リスト1021にループテーブル900へのポインタが
格納されたことを示す。
By the processing in step 403, the loop table 900 corresponding to the loop 702 in FIG. 7 is connected to the entry list 1021 of the subdivided loop table 1011 corresponding to the first innermost loop 703 in the loop 702. Starting from the entrance list 1021 in FIG.
A dotted arrow ending with the loop table 900 indicates that a pointer to the loop table 900 has been stored in the entry list 1021.

【0065】さらにステップ404での処理により、ル
ープ類テーブル1102が作成され、図7のループ70
2に対応するループテーブル900がループ類テーブル
1102に接続される。図11中の、リスト1112を
始点とし、ループテーブル900を終点とする実線の矢
印は、リスト1112にループテーブル900へのポイ
ンタが格納されたことを示す。
Further, the loop type table 1102 is created by the processing in step 404, and the loop 70 shown in FIG.
2 is connected to the loop table 1102. In FIG. 11, a solid arrow starting from the list 1112 and ending at the loop table 900 indicates that the list 1112 stores a pointer to the loop table 900.

【0066】またステップ405の処理では、図7にお
いてループ702の後続ループネスト707が存在する
ので、ステップ406の処理に移る。このステップ40
6での処理により、図7のループ702と後続ループネ
スト707中のループとで、同値なものがあるか否かを
調べる。
In the process of step 405, the process proceeds to the process of step 406 because a loop nest 707 following the loop 702 exists in FIG. This step 40
By the processing in 6, it is checked whether or not there is an equivalent in the loop 702 of FIG.

【0067】本例では、2つのループL1, L2が同値であ
るとは、以下の(1)〜(6)の条件を満足する時と定
める。 (1)L1とL2は包含関係にない。 (2)L1とL2は共に並列化可能。
In this example, the two loops L1 and L2 are defined as having the same value when the following conditions (1) to (6) are satisfied. (1) L1 and L2 do not have an inclusion relationship. (2) Both L1 and L2 can be parallelized.

【0068】(3)L1とL2を並列化する時のループ繰り
返し範囲の分割方法は同じである。 (4)L1とL2のストライドは等しい。 (5)L1とL2の上限値と下限値の差を、各々、LU, LLと
する時、LU, LLは共に定数で、LU, LLの絶対値はある一
定値以下。
(3) The method of dividing the loop repetition range when L1 and L2 are parallelized is the same. (4) L1 and L2 have the same stride. (5) When the difference between the upper limit value and the lower limit value of L1 and L2 is LU and LL, respectively, LU and LL are constants, and the absolute values of LU and LL are less than a certain fixed value.

【0069】(6)L1とL2の両方に現われる全ての配列
に対して、L1内の全ての参照点で、ある次元の添字は同
じで、かつ、L1のループ制御変数の1次式であり、L2内
の全ての参照点で、ある次元の添字は同じで、かつ、L2
のループ制御変数の1次式であり、(a)の添字のルー
プ制御変数をL2のループ制御変数に置換したものと、
(b)の添字との差は定数で、その絶対値はある一定値
以下。
(6) For all arrays appearing in both L1 and L2, at all reference points in L1, the suffix of a certain dimension is the same and is a linear expression of the loop control variable of L1. , L2, the index of a certain dimension is the same at all reference points, and L2
Is a linear expression of the loop control variable of (a), wherein the subscript of the loop control variable of (a) is replaced with the loop control variable of L2,
The difference from the subscript in (b) is a constant, and its absolute value is not more than a certain fixed value.

【0070】尚、上記各条件中の一定値を、本例では
「1」と定める。また、入力プログラム中のループは全
て並列化可能で、並列化する時のループ繰り返し範囲の
分割方法は、全てブロック分割であるとする。
The constant value in each of the above conditions is defined as "1" in this example. Further, it is assumed that all loops in the input program can be parallelized, and the method of dividing the loop repetition range at the time of parallelization is block division.

【0071】この時、図7におけるループ702と同値
な、後続ループネスト707中のループはループ708
であることがわかる。よって、図4におけるステップ4
06での処理においてはYesとなり、ステップ407の
処理へ移る。
At this time, a loop in the subsequent loop nest 707 equivalent to the loop 702 in FIG.
It can be seen that it is. Therefore, step 4 in FIG.
In the process at 06, the result is Yes, and the routine goes to the process at step 407.

【0072】ステップ407での処理により、図7のル
ープ708に対応するループテーブル950を、ループ
702に対応するループテーブル900と同じループ類
テーブル1112に接続し、ループ708をループAと
する。図11中の、リスト1112を始点とし、ループ
テーブル950を終点とする実線の矢印は、リスト11
12にループテーブル950へのポインタが格納された
ことを示す。
By the processing in step 407, the loop table 950 corresponding to the loop 708 in FIG. 7 is connected to the same loop type table 1112 as the loop table 900 corresponding to the loop 702, and the loop 708 is set as loop A. In FIG. 11, a solid arrow starting from the list 1112 and ending at the loop table 950 is the list 11
12 indicates that the pointer to the loop table 950 has been stored.

【0073】次に、ステップ405の処理に戻る。ここ
では、図7におけるループ708の後続ループネストは
ないので、ステップ409の処理に移る。このステップ
409での処理により、開始点をプログラム入口とす
る。
Next, the process returns to step 405. Here, there is no subsequent loop nest of the loop 708 in FIG. With the processing in step 409, the starting point is set as the program entry point.

【0074】そしてステップ410での処理により、図
7におけるループ708内の最後の最内側ループ708
に対応する細分ループテーブル1012の出口リスト1
024に、ループ708に対応するループテーブル95
0を接続する。図11中の、入口リスト1024を始点
とし、ループテーブル950を終点とする点線の矢印
は、入口リスト1024にループテーブル950へのポ
インタが格納されたことを示す。
Then, by the processing in step 410, the last innermost loop 708 in the loop 708 in FIG.
List 1 of the subdivision loop table 1012 corresponding to
024, a loop table 95 corresponding to the loop 708
0 is connected. In FIG. 11, a dotted arrow starting from the entry list 1024 and ending at the loop table 950 indicates that a pointer to the loop table 950 is stored in the entry list 1024.

【0075】再び、ステップ401での処理において、
未処理ループがあるのでステップ402の処理に移る。
このステップ402での処理により、開始点であるプロ
グラム入口に最も近い未処理ループとして、図7におけ
るループ703を選択する。
Again, in the processing of step 401,
Since there is an unprocessed loop, the process proceeds to step 402.
By the processing in step 402, the loop 703 in FIG. 7 is selected as the unprocessed loop closest to the program entry which is the starting point.

【0076】次のステップ403での処理により、図7
におけるループ703内の最初の最内側ループ703に
対応する細分ループテーブル1011の入口リスト10
21に、ループ703に対応するループテーブル920
を接続する。図11中の、入口リスト1021を始点と
し、ループテーブル920を終点とする点線の矢印は、
入口リスト1021にループテーブル920へのポイン
タが格納されたことを示す。
By the processing in the next step 403, FIG.
, The entry list 10 of the subdivided loop table 1011 corresponding to the first innermost loop 703 in the loop 703
21, a loop table 920 corresponding to the loop 703.
Connect. In FIG. 11, a dotted arrow starting from the entrance list 1021 and ending at the loop table 920 is
The entry list 1021 indicates that the pointer to the loop table 920 has been stored.

【0077】さらにステップ404での処理により、ル
ープ類テーブル1103が作成され、図7のループ70
3に対応するループテーブル920がループ類テーブル
1103に接続される。図11中の、リスト1113を
始点とし、ループテーブル920を終点とする実線の矢
印は、リスト1113にループテーブル920へのポイ
ンタが格納されたことを示す。
Further, the loop type table 1103 is created by the processing in step 404, and the loop 70 shown in FIG.
3 is connected to the loop table 1103. In FIG. 11, a solid arrow starting from the list 1113 and ending at the loop table 920 indicates that a pointer to the loop table 920 is stored in the list 1113.

【0078】次のステップ405での処理においては、
図7のループ703の後続ループネスト707が存在す
るので、ステップ406の処理に移る。このステップ4
06での処理により、図7におけるループ703と後続
ループネスト707中のループとで、同値なものがある
か否かを調べる。
In the processing in the next step 405,
Since there is a subsequent loop nest 707 of the loop 703 in FIG. 7, the process proceeds to step 406. This step 4
By the process at 06, it is checked whether or not there is an equivalent between the loop 703 in FIG. 7 and the loop in the subsequent loop nest 707.

【0079】このループ703と同値な、後続ループネ
スト707中のループはループ707であることがわか
る。よって、ステップ406での処理結果はYesとな
り、ステップ407の処理へ移る。
It can be seen that the loop in the subsequent loop nest 707 which is equivalent to the loop 703 is the loop 707. Therefore, the processing result in step 406 is Yes, and the process proceeds to step 407.

【0080】ステップ407での処理により、図7のル
ープ707に対応するループテーブル930を、ループ
703に対応するループテーブル920と同じループ類
テーブル1113に接続し、ループ707をループAと
する。図11中の、リスト1113を始点とし、ループ
テーブル930を終点とする実線の矢印は、リスト11
13にループテーブル930へのポインタが格納された
ことを示す。
By the processing in step 407, the loop table 930 corresponding to the loop 707 in FIG. 7 is connected to the same loop type table 1113 as the loop table 920 corresponding to the loop 703, and the loop 707 is defined as loop A. In FIG. 11, the solid arrow starting from the list 1113 and ending at the loop table 930 is the list 1113.
13 indicates that the pointer to the loop table 930 has been stored.

【0081】次に、ステップ405の処理に戻る。この
ステップ405での処理においては、図7におけるルー
プ707の後続ループネストはないので、ステップ40
9の処理に移る。
Next, the process returns to step 405. In the processing in step 405, there is no subsequent loop nest of the loop 707 in FIG.
Move to the process of No. 9.

【0082】ステップ409での処理により、開始点を
プログラム入口とする。そしてステップ410での処理
により、図7におけるループ707内の最後の最内側ル
ープ708に対応する細分ループテーブル1012の出
口リスト1024に、ループ707に対応するループテ
ーブル930を接続する。図11中の、入口リスト10
24を始点とし、ループテーブル930を終点とする点
線の矢印は、入口リスト1024にループテーブル93
0へのポインタが格納されたことを示す。
By the processing in step 409, the starting point is set as the program entry point. Then, by the processing in step 410, the loop table 930 corresponding to the loop 707 is connected to the exit list 1024 of the subdivided loop table 1012 corresponding to the last innermost loop 708 in the loop 707 in FIG. Entrance list 10 in FIG.
A dotted arrow starting at 24 and ending at the loop table 930 indicates a loop table 93 in the entry list 1024.
Indicates that the pointer to 0 has been stored.

【0083】再び、ステップ401の処理に移り、未処
理ループはないので処理を終了する。尚、以上の処理で
得られたループ類テーブル1101,1102,110
3が、主要なノードだけからなるループ類グラフ160
を構成する。
The process again proceeds to the step 401, and since there is no unprocessed loop, the process ends. Note that the loop type tables 1101, 1102, 110 obtained by the above processing
3 is a loop type graph 160 including only major nodes
Is configured.

【0084】図1におけるエッジ接続処理部1053
は、このようなループテーブル140、細分ループテー
ブル170、主要なノードだけからなるループ類グラフ
160を入力してループ類グラフのノード間がエッジで
接続されたループ類グラフ160を出力する。以下、エ
ッジ接続処理部1053の処理動作を、図5および図1
1〜図13を用いて説明する。
The edge connection processing unit 1053 in FIG.
Inputs such a loop table 140, a subdivided loop table 170, and a loop type graph 160 including only major nodes, and outputs a loop type graph 160 in which nodes of the loop type graph are connected by edges. Hereinafter, the processing operation of the edge connection processing unit 1053 will be described with reference to FIGS.
This will be described with reference to FIGS.

【0085】図5は、図1におけるエッジ接続処理部の
処理動作例を示す説明図であり、図12は、図5におけ
るステップ500の処理を行なった結果の細分テーブル
とループ類テーブルとの関係を示す説明図、図13は、
図1におけるループ類グラフの構成例を示す説明図であ
る。
FIG. 5 is an explanatory diagram showing an example of the processing operation of the edge connection processing section in FIG. 1. FIG. 12 is a diagram showing the relationship between the subdivision table and the loop table as a result of performing the processing of step 500 in FIG. FIG. 13 is an explanatory diagram showing
FIG. 2 is an explanatory diagram illustrating a configuration example of a loop type graph in FIG. 1.

【0086】図5のステップ500での処理により、図
11における全てのループ類テーブル1101,110
2,1103と、それらのループ類テーブルに接続され
たループテーブル940,900,920,930,9
50に対して、以上のループテーブルが細分ループテー
ブルに接続されているか調べる。
By the processing in step 500 of FIG. 5, all the loop type tables 1101, 110 in FIG.
2, 1103 and the loop tables 940, 900, 920, 930, 9 connected to the loop tables.
For 50, it is checked whether the above loop table is connected to the subdivided loop table.

【0087】図11の細分ループテーブル1011の入
口リスト1021と、細分ループテーブル1012の出
口リスト1024から、全てのループテーブルがいずれ
かの細分ループテーブルに接続されていることが分か
る。
From the entry list 1021 of the subdivision loop table 1011 and the exit list 1024 of the subdivision loop table 1012 in FIG. 11, it can be seen that all the loop tables are connected to one of the subdivision loop tables.

【0088】この場合、細分ループテーブル1011,
1012から各ループテーブル900,920,93
0,940,950へのポインタを、そのループテーブ
ルが接続されたループ類テーブル1101〜1103へ
のポインタに付け替える。例えば、細分ループテーブル
1011からループテーブル940へのポインタを、細
分ループテーブル1011からループテーブル940が
接続されたループ類テーブル1101へのポインタに付
け替えるのは、以下のように行なう。
In this case, the subdivision loop table 1011
From 1012, each loop table 900, 920, 93
The pointers to 0, 940, and 950 are replaced with pointers to the loop type tables 1101 to 1103 to which the loop table is connected. For example, replacement of the pointer from the subdivided loop table 1011 to the loop table 940 with the pointer to the loop type table 1101 to which the subdivided loop table 1011 is connected to the loop table 940 is performed as follows.

【0089】まず、ループ類テーブル1101のリスト
1111からループテーブル940を見つけ、ループテ
ーブル940から、その2つの最内側ループのループテ
ーブル920、950を見つけ、それらが指す細分ルー
プテーブル1011,1012を、ポインタ1031,
1032より見つける。
First, the loop table 940 is found from the list 1111 of the loop table 1101, the loop tables 920 and 950 of the two innermost loops are found from the loop table 940, and the subdivided loop tables 1011 and 1012 indicated by them are Pointer 1031,
Find from 1032.

【0090】細分ループテーブル1011の入口リスト
1021にループテーブル940が接続されているの
で、これをループ類テーブル1101へのポインタに付
け替える。同様にして、細分ループテーブル1012の
出口リスト1024にループテーブル940が接続され
ているので、これをループ類テーブル1101へのポイ
ンタに付け替える。
Since the loop table 940 is connected to the entry list 1021 of the subdivision loop table 1011, it is replaced with a pointer to the loop type table 1101. Similarly, since the loop table 940 is connected to the exit list 1024 of the subdivided loop table 1012, this is replaced with a pointer to the loop type table 1101.

【0091】このようなステップ500での処理を行な
った結果の細分ループテーブルとループ類テーブルとの
関係を表わしたものが図12である。この図12におい
て、細分ループテーブル1011の入口リスト1021
から、ループ類テーブル1101への点線の矢印と、細
分ループテーブル1012の出口リスト1024から、
ループ類テーブル1101への点線の矢印が、ポインタ
が付け替えられた結果を表わしている。他のループテー
ブル、ループ類テーブルについても同様である。この結
果、図12中の点線の矢印が示すポインタの付け替え結
果が得られる。
FIG. 12 shows the relationship between the subdivision loop table and the loop type table as a result of performing the processing in step 500. In FIG. 12, the entry list 1021 of the subdivision loop table 1011
From the dotted arrow to the loop type table 1101 and the exit list 1024 of the subdivided loop table 1012,
A dotted arrow to the loop type table 1101 indicates the result of the pointer change. The same applies to other loop tables and loop type tables. As a result, a pointer replacement result indicated by a dotted arrow in FIG. 12 is obtained.

【0092】次に、図5におけるステップ501での処
理に移るが、その処理の説明の前に、図13を説明す
る。図13は、図1におけるループ類グラフ160を表
わしたものであり、ノード1301は入口ノード、ノー
ド1302は出口ノードを表わし、ループ類テーブル1
101,1102,1103は、一般のノードを表わ
す。以上のノード同士を接続する点線の矢印は、ループ
類グラフのノードを接続するエッジを表わす。
Next, the process proceeds to step 501 in FIG. 5. Before describing the process, FIG. 13 will be described. FIG. 13 shows the loop type graph 160 in FIG. 1. The node 1301 represents the entry node, the node 1302 represents the exit node, and the loop type table 1.
101, 1102 and 1103 represent general nodes. The dotted arrows connecting the above nodes represent edges connecting the nodes of the loop type graph.

【0093】図5のステップ501での処理により、図
13における入口ノード1301を作成し、この入口ノ
ード1301から、最初の細分ループテーブル1011
の入口リスト1021に接続されたループ類テーブル1
101,1102,1103に向かうエッジで、両者を
接続する。図13中、入口ノード1301からノード1
101,1102,1103に向かう点線の矢印がその
エッジを示す。
The entry node 1301 shown in FIG. 13 is created by the processing in step 501 in FIG. 5, and the first subdivided loop table 1011 is created from the entry node 1301.
Table 1 connected to the entry list 1021
Both are connected at the edge toward 101, 1102, 1103. In FIG. 13, from the entry node 1301 to the node 1
Dotted arrows pointing toward 101, 1102, and 1103 indicate the edges.

【0094】次のステップ502での処理により、図1
3における出口ノード1302を作成し、最後の細分ル
ープテーブル1012の出口リスト1024に接続され
たループ類テーブル1101,1102,1103か
ら、出口ノード1302に向かうエッジで、両者を接続
する。図13中、ノード1101,1102,1103
から出口ノード1302に向かう点線の矢印がそのエッ
ジを示す。
By the processing in the next step 502, FIG.
3 is created, and the two are connected at the edge toward the exit node 1302 from the loop type tables 1101, 1102, and 1103 connected to the exit list 1024 of the last subdivided loop table 1012. 13, nodes 1101, 1102, 1103
A dotted arrow directed from to the exit node 1302 indicates the edge.

【0095】次のステップ503での処理においては、
隣接する細分テーブル1011,1012に対して、プ
ログラム入口に近い細分ループテーブル1011の出口
リスト1022と、プログラム出口に近い細分ループテ
ーブル1012の入口リスト1023に接続されたルー
プ類テーブルはないので、何も処理を行なわない。以上
のようにして、図13のループ類グラフ160を得る。
In the processing in the next step 503,
For the adjacent subdivision tables 1011 and 1012, there is no loop type table connected to the exit list 1022 of the subdivision loop table 1011 near the program entry and the entry list 1023 of the subdivision loop table 1012 near the program exit. Do not process. As described above, the loop type graph 160 of FIG. 13 is obtained.

【0096】図1における並列化ループ決定処理部10
6は、中間語130、ループテーブル140およびルー
プ類グラフ160を入力して、同じループ類に含まれる
ループは1つのループであるかのように扱うことによっ
て、並列ループ候補の組合わせ数を削減し、削減された
各組合わせに対してプログラムの実行時間を評価し、最
も実行時間が短いと評価された時の並列ループの組合わ
せを選択して、その結果をループテーブル140に出力
する。
The parallelization loop decision processing unit 10 in FIG.
No. 6 reduces the number of combinations of parallel loop candidates by inputting the intermediate language 130, the loop table 140, and the loop type graph 160, and treating the loops included in the same loop type as one loop. Then, the execution time of the program is evaluated for each of the reduced combinations, the combination of the parallel loops when the execution time is estimated to be the shortest is selected, and the result is output to the loop table 140.

【0097】以下、このような並列化ループ決定処理部
106の処理を説明する。図6は、図1における並列化
ループ決定処理部の処理動作例を示すフローチャートで
ある。まずステップ600での処理により、ループ類テ
ーブルに接続された各ループとそのループ内で参照され
る配列に対して、そのループのループ制御変数を含む次
元の参照範囲を添字より計算し、ループ類テーブルに接
続された全ループに対し、その参照範囲の和集合を計算
し、上記配列が上記和集合の範囲を参照するようなルー
プ範囲を、各ループのループテーブルに設定する。
Hereinafter, the processing of the parallelization loop determination processing unit 106 will be described. FIG. 6 is a flowchart illustrating an example of a processing operation of the parallelization loop determination processing unit in FIG. First, by the processing in step 600, for each loop connected to the loop table and the array referred to in the loop, the reference range of the dimension including the loop control variable of the loop is calculated from the subscript, The union of the reference ranges is calculated for all the loops connected to the table, and a loop range in which the array refers to the union range is set in the loop table of each loop.

【0098】以下、ループ内で参照される配列として配
列aのみを考える。図11においてループ類テーブル1
101に接続されたループはループ701だけであり、
この場合、ステップ600での処理で設定されるループ
範囲は元のループ範囲と同じなので、その上限値「2」
と、下限値「1」と、ストライド「1」を、図9における
ループテーブル940のフィールド909,910,9
11に設定する。
Hereinafter, only the array a is considered as the array to be referred to in the loop. In FIG. 11, the loop type table 1
The only loop connected to 101 is loop 701,
In this case, since the loop range set in the processing in step 600 is the same as the original loop range, its upper limit value is “2”.
, The lower limit value “1”, and the stride “1” are stored in the fields 909, 910, and 9 of the loop table 940 in FIG.
Set to 11.

【0099】また、図11においてループ類テーブル1
102に接続されたループはループ702とループ70
8である。図7に示すループ702における、配列a
の、ループ702のループ制御変数jを含む次元の参照
範囲は、行704での配列aのjを含む添字がjである
ことから、「1〜30」までである。
In FIG. 11, the loop type table 1
The loop connected to 102 is a loop 702 and a loop 70
8 Array a in loop 702 shown in FIG.
The reference range of the dimension including the loop control variable j of the loop 702 is “1 to 30” since the subscript including j of the array a in the row 704 is j.

【0100】一方、ループ708における、配列aの、
ループ708のループ制御変数jを含む次元の参照範囲
は、行709での配列aのjを含む添字がj−1であるこ
とから、「1〜28」までである。よって、両方の参照
範囲の和集合は「1〜30」までである。
On the other hand, in the loop 708,
The reference range of the dimension including the loop control variable j of the loop 708 is “1-28” since the subscript including j of the array a in the row 709 is j−1. Therefore, the union of both reference ranges is “1 to 30”.

【0101】そして,ループ702において、配列aが
上記和集合の範囲(「1〜30」)を参照するようなル
ープ範囲は、行704での配列aのjを含む添字がjで
あることから、「1〜30」までである。よって、その
上限値「30」と、下限値「1」と、ストライド「1」
を、図9におけるループテーブル900のフィールド9
09,910,911に設定する。
In the loop 702, the loop range in which the array a refers to the range of the union (“1 to 30”) is because the subscript including j of the array a in the row 704 is j. , “1 to 30”. Therefore, the upper limit “30”, the lower limit “1”, and the stride “1”
To field 9 of the loop table 900 in FIG.
09, 910 and 911 are set.

【0102】一方、ループ708において、配列aが上
記和集合の範囲(「1〜30」)を参照するようなルー
プ範囲は、行709での配列aのjを含む添字がj−1で
あることから、「2〜31」までである。よって、その
上限値「31」と、下限値「2」と、ストライド「1」
を、図9におけるループテーブル950のフィールド9
09,910,911に対応するフィールドに設定す
る。
On the other hand, in the loop 708, the subscript including j of the array a in the row 709 is j−1 in the loop range in which the array a refers to the range of the union (“1 to 30”). Therefore, the number is from "2 to 31". Therefore, the upper limit value “31”, the lower limit value “2”, and the stride “1”
To field 9 of loop table 950 in FIG.
Fields corresponding to 09, 910, and 911 are set.

【0103】また、図11におけるループ類テーブル1
103に接続されたループはループ703と707であ
る。図7のループ703における、配列aの、ループ7
03のループ制御変数iを含む次元の参照範囲は、行7
04での配列aのiを含む添字がiであることから、「1
〜30」である。
The loop table 1 shown in FIG.
The loops connected to 103 are loops 703 and 707. In the loop 703 in FIG.
The reference range of the dimension including the loop control variable i of 03
04, since the subscript including i in the array a is i, “1
~ 30 ".

【0104】一方、図7のループ707における、配列
aの、ループ707のループ制御変数iを含む次元の参照
範囲は、行709での配列aのiを含む添字がi−1である
ことから、「1〜29」である。よって、両方の参照範
囲の和集合は「1〜30」である。
On the other hand, in the loop 707 of FIG.
The reference range of the dimension of a including the loop control variable i of the loop 707 is “1 to 29” because the subscript including i of the array a in the row 709 is i−1. Therefore, the union of both reference ranges is “1 to 30”.

【0105】そして、ループ703において、配列aが
上記和集合の範囲(「1〜30」)を参照するようなル
ープ範囲は、行704での配列aのiを含む添字がiであ
ることから、「1〜30」である。よって、その上限値
「30」と、下限値「1」と、ストライド「1」を、図9
のループテーブル920の、フィールド909,91
0,911に対応するフィールドに設定する。
In the loop 703, a loop range in which the array a refers to the range of the union (“1 to 30”) is because the subscript including i of the array a in the row 704 is i. , “1 to 30”. Therefore, the upper limit value “30”, the lower limit value “1”, and the stride “1” are set in FIG.
Fields 909 and 91 of the loop table 920 of FIG.
Set in the field corresponding to 0,911.

【0106】一方、ループ707において、配列aが上
記和集合の範囲1から30までを参照するようなループ
範囲は、行709での配列aのiを含む添字がiであるこ
とから、「1〜30」である。よって、その上限値「3
0」と、下限値「1」と、ストライド「1」を、図9のル
ープテーブル930の、フィールド909,910,9
11に対応するフィールドに設定する。
On the other hand, in the loop 707, the loop range in which the array a refers to the union ranges 1 to 30 is “1” since the subscript including i of the array a in the row 709 is i. ~ 30 ". Therefore, the upper limit “3”
0, the lower limit value “1”, and the stride “1” are stored in the fields 909, 910, 9 in the loop table 930 of FIG.
Set in the field corresponding to 11.

【0107】次に図6のステップ601での処理におい
ては、図13に示すループ類グラフの入口ノード130
1から出口ノード1302までは、ループ類テーブル1
101,1102,1103を通る3つのパスがあり、
各パス上には一つのループ類のみ存在するので、以下に
示すように、それらのループ類の予測実行時間を評価
し、その値が最小になるパスを選択すれば良い。
Next, in the processing in step 601 of FIG. 6, the entry node 130 of the loop type graph shown in FIG.
1 to the exit node 1302, the loop table 1
There are three paths through 101, 1102, 1103,
Since there is only one loop on each path, as shown below, the estimated execution time of those loops is evaluated, and the path having the minimum value may be selected.

【0108】ここではループの並列化方法として、ルー
プの繰り返し範囲を等分割することとし、プロセッサ数
は「3」として説明する。まず、図13におけるループ
類テーブル1101に接続されたループ701を並列化
する。
Here, as a method of parallelizing the loop, the loop repetition range is equally divided, and the number of processors is described as "3". First, the loop 701 connected to the loop type table 1101 in FIG. 13 is parallelized.

【0109】すなわち、図6におけるステップ601で
の処理(1)により、ステップ600の処理で設定され
た各ループの上限値「2」と下限値「1」を持つ仮想的な
ループの並列化によるループ繰り返し範囲の分割は、
「1」から「1」、「2」から「2」までとなり、3台目の
プロセッサにはループ範囲は割り当てられない。
That is, by the processing (1) in step 601 in FIG. 6, the virtual loop having the upper limit value “2” and the lower limit value “1” of each loop set in the processing in step 600 is parallelized. The division of the loop repetition range is
From "1" to "1" and from "2" to "2", no loop range is allocated to the third processor.

【0110】また、ステップ601での処理(2)によ
り、上記分割されたループ繰り返し範囲と、図7のルー
プ701の元の繰返し範囲の積集合は、「1」から
「1」、「2」から「2」、空集合となり、これをループ
701を並列化した時のループ範囲とする。
By the process (2) in the step 601, the intersection of the divided loop repetition range and the original repetition range of the loop 701 in FIG. 7 is changed from “1” to “1”, “2”. From “2” to an empty set, which is a loop range when the loop 701 is parallelized.

【0111】次に、図13におけるループ類テーブル1
102に接続されたループ702,708を並列化す
る。図6におけるステップ601での処理(1)によ
り、図7のループ702に対しては、ステップ600の
処理で設定された各ループの上限値「30」と下限値
「1」を持つ仮想的なループの並列化によるループ繰り
返し範囲の分割は、「1〜10」、「11〜20」、「2
1〜30」となる。
Next, the loop type table 1 in FIG.
The loops 702 and 708 connected to 102 are parallelized. As a result of the processing (1) in step 601 in FIG. 6, the virtual loop having the upper limit value “30” and the lower limit value “1” of each loop set in the processing in step 600 for the loop 702 in FIG. The division of the loop repetition range by the parallelization of the loop includes “1 to 10”, “11 to 20”, “2”.
1 to 30 ".

【0112】また,図7のループ708に対しては,ス
テップ600の処理で設定された各ループの上限値「3
1」と下限値「2」を持つ仮想的なループの並列化による
ループ繰り返し範囲の分割は、「2〜11」、「12〜
21」、「22〜31」となる。尚、これらはコンパイラ
の実際の処理では、プロセッサ番号をp(p=0,1,2)とす
ると、各々、10*p+1から10*(p+1)、10*p+2から10*(p+1)
+1と表現される。
For the loop 708 of FIG. 7, the upper limit value of each loop set in the processing of step 600 is “3”.
The division of the loop repetition range by parallelizing a virtual loop having “1” and the lower limit “2” is “2 to 11”, “12 to
21 "and" 22 to 31 ". In the actual processing of the compiler, these are 10 * p + 1 to 10 * (p + 1) and 10 * p + 2 to 10 *, assuming that the processor number is p (p = 0, 1, 2). * (p + 1)
Expressed as +1.

【0113】ステップ601での処理(2)により、上
記分割されたループ繰り返し範囲と、図7におけるルー
プ701の元の繰返し範囲の積集合は、ループ702に
対しては、「1〜10」、「11〜20」、「21〜3
0」までとなり、ループ708に対しては、「2〜1
1」、「12〜21」、「22〜29」までとなる。尚、
これらはコンパイラの実際の処理では、プロセッサ番号
をp(p=0,1,2)とすると、各々、min(1, 10*p+1)からma
x(30, 10*(p+1))、min(2, 10*p+2)からmax(29, 10*(p+
1)+1)と表現される。
As a result of the processing (2) in step 601, the product set of the divided loop repetition range and the original repetition range of the loop 701 in FIG. "11-20", "21-3"
0 ”, and for the loop 708,“ 2 to 1 ”
1 "," 12 to 21 ", and" 22 to 29 ". still,
In the actual processing of the compiler, if the processor number is p (p = 0, 1, 2), these are calculated from min (1, 10 * p + 1) to ma
x (30, 10 * (p + 1)), min (2, 10 * p + 2) to max (29, 10 * (p +
It is expressed as 1) +1).

【0114】以上の2つの範囲を各々、ループ702,
708を並列化した時のループ範囲とする。ループ類テ
ーブル1103に接続されたループ703,707につ
いても同様に、並列化できる。
Each of the above two ranges is defined as a loop 702,
Let 708 be the loop range when parallelized. The loops 703 and 707 connected to the loop table 1103 can be similarly parallelized.

【0115】以上の並列化により、ループ類テーブル1
102に接続されたループ702,708を並列化する
時が、最も予測実行時間が短いとして、図6における残
りの処理を説明する。
With the above parallelization, the loop type table 1
The remaining processing in FIG. 6 will be described on the assumption that the prediction execution time is the shortest when the loops 702 and 708 connected to 102 are parallelized.

【0116】図6におけるステップ602での処理によ
り、選択されたループ702,708に対するループテ
ーブル900,950の並列化フラグ913に対応する
フィールドをTRUEにする。
The field corresponding to the parallel flag 913 of the loop tables 900 and 950 for the selected loops 702 and 708 is set to TRUE by the processing in step 602 in FIG.

【0117】図1におけるループ並列化処理部107
は、辞書120、中間語130およびループテーブル1
40を入力して並列化が決定されたループを並列化変換
して、その結果を辞書120、中間語130に反映す
る。尚、このループ並列化処理部107の処理に関して
は従来の技術であり省略する。
Loop parallel processing section 107 in FIG.
Is the dictionary 120, the intermediate language 130, and the loop table 1
40 is input, the loop for which parallelization is determined is converted into parallel, and the result is reflected in the dictionary 120 and the intermediate language 130. Note that the processing of the loop parallel processing unit 107 is a conventional technique and will not be described.

【0118】図1におけるコード生成処理部108は、
辞書120、中間語130を入力してソースプログラム
レベルまたはオブジェクトコードレベルの並列化プログ
ラム180を出力する。このコード生成処理部108の
処理に関しても従来の技術であり省略する。
The code generation processing unit 108 in FIG.
The dictionary 120 and the intermediate language 130 are input, and a parallel program 180 at a source program level or an object code level is output. The processing of the code generation processing unit 108 is also a conventional technique, and will not be described.

【0119】このような図1における並列化コンパイラ
100の処理で得られた並列化プログラム180の具体
例を図14で示す。図14は、図1における並列化プロ
グラムの具体例を示す説明図である。本例は、ソースプ
ログラムスタイルで書いたものであり、行1401のfo
rk関数呼出し、行1414のjoin関数呼出しで囲まれた
部分の行1402〜行1413までが各プロセッサで並
列に実行される。
FIG. 14 shows a specific example of the parallelized program 180 obtained by the processing of the parallelizing compiler 100 in FIG. FIG. 14 is an explanatory diagram showing a specific example of the parallelized program in FIG. This example is written in the source program style,
An rk function call and a row 1402 to a row 1413 of a portion surrounded by a join function call in a row 1414 are executed in parallel by each processor.

【0120】行1403と行1409中のループ範囲が
図1の並列化ループ決定処理部106の図6に示す処理
で決定された、各々、図7におけるループ702と70
8のループ繰り返し範囲である。図1の並列化ループ決
定処理部106でのループ範囲の分割方法から、ループ
ネスト1403とループネスト1408内で参照される
配列の、プロセッサごとの参照範囲が両ループネストで
等しいので、両ループネスト間にはプロセッサ間同期は
生成されない。
The loop ranges in rows 1403 and 1409 are determined by the processing shown in FIG. 6 by the parallelized loop determination processing unit 106 in FIG. 1, and the loops 702 and 70 in FIG. 7, respectively.
8 is a loop repetition range. According to the method of dividing the loop range in the parallelized loop determination processing unit 106 in FIG. 1, the reference range of the array referenced in the loop nest 1403 and the loop nest 1408 for each processor is equal in both loop nests. No interprocessor synchronization is generated between them.

【0121】図15は、図1における並列化コンパイラ
を実装する並列計算機システムの構成例を示すブロック
図である。本図15において、1501は共有メモリ、
1502は論理プロセッサエレメント、1503は制御
用ネットワーク、1504は入出力用論理プロセッサエ
レメント、1505は入出力用コンソールまたはワーク
ステーションを表す。
FIG. 15 is a block diagram showing a configuration example of a parallel computer system in which the parallelizing compiler shown in FIG. 1 is mounted. In FIG. 15, reference numeral 1501 denotes a shared memory;
Reference numeral 1502 denotes a logical processor element, 1503 denotes a control network, 1504 denotes an input / output logical processor element, and 1505 denotes an input / output console or workstation.

【0122】図1に示した並列化コンパイラ100は、
入出力用コンソールまたはワークステーション1505
において実行され、並列ソースプログラムまたは並列オ
ブジェクトプログラムに変換される。並列ソースプログ
ラムは、さらに、論理プロセッサエレメント1502向
けのコンパイラにより並列オブジェクトプログラムに変
換される。
The parallelizing compiler 100 shown in FIG.
I / O console or workstation 1505
And converted into a parallel source program or a parallel object program. The parallel source program is further converted into a parallel object program by a compiler for the logical processor element 1502.

【0123】また、並列オブジェクトプログラムはリン
カによりロードモジュールに変換され、入出力用論理プ
ロセッサエレメント1504を通じて共有メモリ150
1にロードされ、各論理プロセッサエレメント1502
により実行される。この論理プロセッサエレメント15
02の起動、終了などの制御は制御用ネットワーク15
03を通じて行われる。
The parallel object program is converted into a load module by the linker, and is shared by the shared memory 150 through the input / output logical processor element 1504.
1 and each logical processor element 1502
Is executed by This logical processor element 15
02 is controlled by the control network 15
03.

【0124】以上、図1〜図16を用いて説明したよう
に、本例の並列化コンパイラでは、配列データの参照パ
ターンが同じループ群を一つの同値なループとして扱う
ことが可能となる。これによって、ループネストにまた
がった並列化ループ候補の組合せ数を削減でき、短い解
析時間で複数のループネストにまたがったループ並列化
を考慮した最適な並列ループが決定できる。
As described above with reference to FIGS. 1 to 16, the parallelizing compiler of this embodiment can handle a group of loops having the same reference pattern of array data as one equivalent loop. This makes it possible to reduce the number of combinations of parallelized loop candidates spanning loop nests, and to determine an optimal parallel loop in a short analysis time in consideration of loop parallelism spanning a plurality of loop nests.

【0125】また、ループネストにまたがった並列化ル
ープ候補の組合せ数を削減でき、短い解析時間で近似を
用いずに最適な並列ループが決定できる。また、ループ
類中のループに対して、各プロセッサが分担して計算す
るデータの分担範囲を、データの宣言範囲によらずに各
ループでの配列データの参照範囲から決定できるので、
ループ分割をより柔軟に行なうことができ、最適な並列
ループが決定できる。尚、本発明は、図1〜図16を用
いて説明した実施例に限定されるものではなく、その要
旨を逸脱しない範囲において種々変更可能である。
Further, it is possible to reduce the number of combinations of parallelized loop candidates spanning loop nests, and to determine an optimal parallel loop in a short analysis time without using approximation. In addition, since the allocation range of data to be calculated by being shared by each processor with respect to the loops in the loops can be determined from the reference range of the array data in each loop without depending on the declaration range of the data,
Loop division can be performed more flexibly, and an optimal parallel loop can be determined. The present invention is not limited to the embodiment described with reference to FIGS. 1 to 16 and can be variously modified without departing from the gist thereof.

【0126】[0126]

【発明の効果】本発明によれば、複数のループネストに
またがったループ並列化を考慮し、近似を用いずに、か
つ、ループ分割をより柔軟に行なって、最適な並列ルー
プの決定を行なうことが可能である。
According to the present invention, an optimum parallel loop is determined without using approximation and with more flexible loop division in consideration of parallelization of loops over a plurality of loop nests. It is possible.

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

【図1】本発明の並列化ループ決定方法を実行するシス
テムの構成例を示すブロック図である。
FIG. 1 is a block diagram illustrating a configuration example of a system that executes a parallelized loop determination method according to the present invention.

【図2】図1における参照パターン検出処理部の処理動
作例を示す説明図である。
FIG. 2 is an explanatory diagram showing a processing operation example of a reference pattern detection processing unit in FIG. 1;

【図3】図1における細分テーブル作成処理部の処理動
作例を示すフローチャートである。
FIG. 3 is a flowchart illustrating an example of a processing operation of a subdivision table creation processing unit in FIG. 1;

【図4】図1におけるループ類検出処理部の処理動作例
を示すフローチャートである。
FIG. 4 is a flowchart illustrating an example of a processing operation of a loop detection processing unit in FIG. 1;

【図5】図1におけるエッジ接続処理部の処理動作例を
示す説明図である。
FIG. 5 is an explanatory diagram illustrating an example of a processing operation of an edge connection processing unit in FIG. 1;

【図6】図1における並列化ループ決定処理部の処理動
作例を示すフローチャートである。
FIG. 6 is a flowchart illustrating an example of a processing operation of a parallelization loop determination processing unit in FIG. 1;

【図7】図1におけるソースプログラムの具体例を示す
説明図である。
FIG. 7 is an explanatory diagram showing a specific example of a source program in FIG. 1;

【図8】図1における参照パターンテーブルの構成例を
示す説明図である。
FIG. 8 is an explanatory diagram showing a configuration example of a reference pattern table in FIG. 1;

【図9】図1におけるループテーブルの構成例を示す説
明図である。
FIG. 9 is an explanatory diagram showing a configuration example of a loop table in FIG. 1;

【図10】図1における細分ループテーブルとループテ
ーブルとの関連を示す説明図である。
FIG. 10 is an explanatory diagram showing the relationship between the subdivision loop table and the loop table in FIG. 1;

【図11】図1におけるループテーブルと細分ループテ
ーブルおよびループ類テーブル間の関係を表わした説明
図である。
FIG. 11 is an explanatory diagram showing a relationship among a loop table, a subdivision loop table, and a loop type table in FIG. 1;

【図12】図5におけるステップ500の処理を行なっ
た結果の細分テーブルとループ類テーブルとの関係を示
す説明図である。
FIG. 12 is an explanatory diagram showing a relationship between a subdivision table and a loop type table as a result of performing the processing of step 500 in FIG. 5;

【図13】図1におけるループ類グラフの構成例を示す
説明図である。
FIG. 13 is an explanatory diagram showing a configuration example of a loop type graph in FIG. 1;

【図14】図1における並列化プログラムの具体例を示
す説明図である。
FIG. 14 is an explanatory diagram showing a specific example of the parallelized program in FIG. 1;

【図15】図1における並列化コンパイラを実装する並
列計算機システムの構成例を示すブロック図である。
FIG. 15 is a block diagram showing a configuration example of a parallel computer system implementing the parallelizing compiler in FIG. 1;

【図16】図1におけるシステムのハードウェア構成例
を示すブロック図である。
FIG. 16 is a block diagram illustrating an example of a hardware configuration of the system in FIG. 1;

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

1:表示装置、2:入力装置、3:外部記憶装置、4:
情報処理装置、5:光ディスク、6:駆動装置、10
0:並列化コンパイラ、101:構文解析処理部、10
2:データ依存解析処理部、103:並列性解析処理
部、104:参照パターン検出処理部、105:ループ
類グラフ作成処理部、106:並列化ループ決定処理
部、107:ループ並列化処理部、108:コード生成
処理部、110:ソースプログラム、120:辞書、1
30:中間語、140:ループテーブル、150:参照
パターンテーブル、160:ループ類グラフ、170:
細分ループテーブル、180:並列化プログラム、10
51:細分ループテーブル作成処理部、1052:ルー
プ類検出処理部、1053:エッジ接続処理部、80
0,810,820,830,840:参照パターンテ
ーブル、801〜805,811〜816,821〜8
26,831〜836,841〜846:フィールド、
900,920,930,940,950:ループテー
ブル、901〜913:フィールド、1011,101
2:細分ループテーブル、1021,1023:入口リ
スト、1022,1024:出口リスト、1031,1
032:ポインタ、1101〜1103:ループ類テー
ブル、1111〜1113:リスト、1301:入口ノ
ード、1302:出口ノード、1501:共有メモリ、
1502:論理プロセッサエレメント、1503:制御
用ネットワーク、1504:入出力論理プロセッサエレ
メント、1505:入出力用コンソールまたはワークス
テーション。
1: display device, 2: input device, 3: external storage device, 4:
Information processing device, 5: optical disk, 6: drive device, 10
0: parallelizing compiler, 101: syntax analysis processing unit, 10
2: data dependence analysis processing unit, 103: parallelism analysis processing unit, 104: reference pattern detection processing unit, 105: loop type graph creation processing unit, 106: parallelization loop determination processing unit, 107: loop parallelization processing unit, 108: code generation processing unit, 110: source program, 120: dictionary, 1
30: intermediate language, 140: loop table, 150: reference pattern table, 160: loop type graph, 170:
Subdivision loop table, 180: parallelized program, 10
51: subdivision loop table creation processing unit, 1052: loop detection processing unit, 1053: edge connection processing unit, 80
0, 810, 820, 830, 840: Reference pattern table, 801 to 805, 811 to 816, 821 to 8
26,831 to 826,841 to 846: field,
900, 920, 930, 940, 950: loop table, 901 to 913: field, 1011, 101
2: subdivision loop table, 1021, 1023: entrance list, 1022, 1024: exit list, 1031, 1
032: pointer, 1101 to 1103: loop table, 1111 to 1113: list, 1301: entry node, 1302: exit node, 1501: shared memory,
1502: logical processor element, 1503: control network, 1504: input / output logical processor element, 1505: input / output console or workstation.

Claims (1)

【特許請求の範囲】[Claims] 【請求項1】 ソースプログラムを入力して、並列化可
能なループを検出し、該並列化可能なループを並列計算
機向けに分割する指示文を含むプログラムもしくは並列
化されたオブジェクトコードを出力するシステムによる
上記並列化可能なループの決定方法であって、上記並列
化可能ループ中に現れる各配列参照の添字に、該配列参
照を囲むループのループ制御変数がどのようなパターン
で現れるかを検出するステップと、所定の条件に基づき
上記パターンが同類とされる複数のループを一つの類に
まとめてループ類を生成するステップと、上記ループ類
中の各ループ範囲に基づき該ループ類中の各ループを並
列化する場合の各々のループ範囲を求め、該ループ範囲
に従って各ループ類の各ループを並列化した場合の実行
時間を評価して、並列化するのに最適なループ類を特定
するステップとを有し、上記最適なループ類中の各ルー
プを上記並列化可能なループとして選択することを特徴
とする並列化ループ決定方法。
1. A system for inputting a source program, detecting a parallelizable loop, and outputting a program or a parallelized object code including a directive for dividing the parallelizable loop for a parallel computer. Wherein the loop control variable of the loop surrounding the array reference appears in a subscript of each array reference appearing in the parallelizable loop. A step of generating loops by grouping a plurality of loops having the same pattern based on predetermined conditions into one class, and generating each loop in the loops based on each loop range in the loops. Are obtained in the case where the loops are parallelized, the execution time when each loop of each loop is parallelized according to the loop range is evaluated, and A step of identifying loops that are optimal for queuing, and selecting each loop in the optimal loops as the parallelizable loop.
JP11174972A 1999-06-22 1999-06-22 Method for deciding paralleled loop Pending JP2001005792A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11174972A JP2001005792A (en) 1999-06-22 1999-06-22 Method for deciding paralleled loop

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11174972A JP2001005792A (en) 1999-06-22 1999-06-22 Method for deciding paralleled loop

Publications (1)

Publication Number Publication Date
JP2001005792A true JP2001005792A (en) 2001-01-12

Family

ID=15987970

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11174972A Pending JP2001005792A (en) 1999-06-22 1999-06-22 Method for deciding paralleled loop

Country Status (1)

Country Link
JP (1) JP2001005792A (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015141543A (en) * 2014-01-29 2015-08-03 富士通株式会社 Loop division detection program and loop division detection method

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015141543A (en) * 2014-01-29 2015-08-03 富士通株式会社 Loop division detection program and loop division detection method
US9182960B2 (en) 2014-01-29 2015-11-10 Fujitsu Limited Loop distribution detection program and loop distribution detection method

Similar Documents

Publication Publication Date Title
US5293631A (en) Analysis and optimization of array variables in compiler for instruction level parallel processor
US4821181A (en) Method for converting a source program of high level language statement into an object program for a vector processor
US6681388B1 (en) Method and compiler for rearranging array data into sub-arrays of consecutively-addressed elements for distribution processing
Wang et al. Partitioning streaming parallelism for multi-cores: a machine learning based approach
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
CA2288614C (en) Loop allocation for optimizing compilers
Rauchwerger et al. Run-time methods for parallelizing partially parallel loops
US5790862A (en) Resource assigning apparatus which assigns the variable in a program to resources
Scarborough et al. A vectorizing Fortran compiler
US5339420A (en) Partitioning case statements for optimal execution performance
JP6502616B2 (en) Processor for batch thread processing, code generator and batch thread processing method
JPH06250846A (en) Compiling device
JP2001167060A (en) Task paralleling method
US9213548B2 (en) Code generation method and information processing apparatus
Ortega et al. Non-dominated sorting procedure for Pareto dominance ranking on multicore CPU and/or GPU
US6360355B1 (en) Hardware synthesis method, hardware synthesis device, and recording medium containing a hardware synthesis program recorded thereon
JP2008500654A (en) Banking for register banks with partitions
CN116627396A (en) Polyhedral model nested cyclic transformation dynamic solving acceleration method
Herrera et al. On a hybrid MPI-Pthread approach for simplicial branch-and-bound
US20050166194A1 (en) Method and apparatus for static single assignment form dead code elimination
JP2001005792A (en) Method for deciding paralleled loop
Dufrechou et al. Automatic selection of sparse triangular linear system solvers on GPUs through machine learning techniques
JPH0844577A (en) Data dividing method and multi-processor system
US20240069880A1 (en) Method and system to determine execution inefficiencies in dataflow programs
Ayguadé et al. Data redistribution in an automatic data distribution tool