JPH08305672A - 計算分割最適化方法 - Google Patents
計算分割最適化方法Info
- Publication number
- JPH08305672A JPH08305672A JP7110473A JP11047395A JPH08305672A JP H08305672 A JPH08305672 A JP H08305672A JP 7110473 A JP7110473 A JP 7110473A JP 11047395 A JP11047395 A JP 11047395A JP H08305672 A JPH08305672 A JP H08305672A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- statement
- range
- section
- intersecting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 ループ内に複数文がある場合、ループ分割せ
ず、ループ内に実行時判定文のない変換プログラムを生
成すること。 【構成】 並列化コンパイラ100は、構文解析部102、デ
ータ分割解析部103、計算分割部104、通信生成部105、
および、各プロセスに対し、その区間内では各文は実行
されるか否かのいずれかに決まるような区間の集合であ
る非交差区間列をループ実行範囲から生成する非交差区
間列生成部107、非交差区間列をループの実行範囲と
し、ループ本体は元のものを用いたループを複製するル
ープ複製部108、ループ中の文の実行時判定文を削除す
るコード変換部109からなる計算分割最適化部106から構
成される。
ず、ループ内に実行時判定文のない変換プログラムを生
成すること。 【構成】 並列化コンパイラ100は、構文解析部102、デ
ータ分割解析部103、計算分割部104、通信生成部105、
および、各プロセスに対し、その区間内では各文は実行
されるか否かのいずれかに決まるような区間の集合であ
る非交差区間列をループ実行範囲から生成する非交差区
間列生成部107、非交差区間列をループの実行範囲と
し、ループ本体は元のものを用いたループを複製するル
ープ複製部108、ループ中の文の実行時判定文を削除す
るコード変換部109からなる計算分割最適化部106から構
成される。
Description
【0001】
【産業上の利用分野】本発明は、電子計算機を用いて、
データ分割指示付きソースプログラムを、並列ライブラ
リ呼び出しを含む分散記憶型並列機向けソースプログラ
ムまたは分散記憶型並列機向けオブジェクトプログラム
に変換するトランスレータまたはコンパイラに関し、特
に、分散記憶型並列計算機への計算分割を最適化する計
算分割最適化方法に関する。
データ分割指示付きソースプログラムを、並列ライブラ
リ呼び出しを含む分散記憶型並列機向けソースプログラ
ムまたは分散記憶型並列機向けオブジェクトプログラム
に変換するトランスレータまたはコンパイラに関し、特
に、分散記憶型並列計算機への計算分割を最適化する計
算分割最適化方法に関する。
【0002】
【従来技術】データ分割および計算分割を含む並列化コ
ンパイラの従来の構成を図40に示す。同図において、
4000は従来の並列化コンパイラ、101はデータ分
割指示付きソースプログラム、111はデータ通信入り
ソースプログラム、112は辞書、113は中間語であ
る。並列化コンパイラ4000は、データ分割指示付き
ソースプログラム101を入力して辞書112および中
間語113を出力する構文解析部102、辞書112お
よび中間語113を入力してデータ分割を行なった結果
を辞書112に反映させるデータ分割解析部103、辞
書112および中間語113を入力してプログラム内の
計算を各プロセッサに分割してその結果を中間語113
に反映させる計算分割部104、辞書112および中間
語113を入力して他のプロセッサの持つデータを参照
するための通信命令中間語を生成して、それを中間語1
13に挿入する通信生成部105、中間語113を入力
してデータ通信入りソースプログラム111を生成する
ソースコード生成部110から構成される。
ンパイラの従来の構成を図40に示す。同図において、
4000は従来の並列化コンパイラ、101はデータ分
割指示付きソースプログラム、111はデータ通信入り
ソースプログラム、112は辞書、113は中間語であ
る。並列化コンパイラ4000は、データ分割指示付き
ソースプログラム101を入力して辞書112および中
間語113を出力する構文解析部102、辞書112お
よび中間語113を入力してデータ分割を行なった結果
を辞書112に反映させるデータ分割解析部103、辞
書112および中間語113を入力してプログラム内の
計算を各プロセッサに分割してその結果を中間語113
に反映させる計算分割部104、辞書112および中間
語113を入力して他のプロセッサの持つデータを参照
するための通信命令中間語を生成して、それを中間語1
13に挿入する通信生成部105、中間語113を入力
してデータ通信入りソースプログラム111を生成する
ソースコード生成部110から構成される。
【0003】まず従来技術を説明する前に、本明細書で
使用する「データ分割指示」、「分散記憶型並列機向け
プログラム」、「計算分割」、「ループ分割」の各用語
について、図2に示したデータ分割指示付きソースプロ
グラム101の具体例を用いて説明しておく。最初に
「データ分割指示」について説明する。「データ分割指
示」とは、例えば、図2における文202ないし文20
5で表現されるものである。ここで、文202ないし文
204でデータを分割することを、文205で分割した
データを異なるプロセッサないしプロセスに割り付ける
ことを、それぞれコンパイラに指示している。さらに具
体的に説明すると、文202は仮想プロセッサ群の配置
を宣言した文である。仮想プロセッサ群にMPという名
前を付け、それらが4台、1次元的に配置されているこ
とを表わしている。即ち、4台の仮想プロセッサは、そ
れぞれ、MP(1)、MP(2)、MP(3)、MP
(4)という名前で参照される。これら4台の仮想プロ
セッサと実際のプロセッサ(以後、物理プロセッサと呼
ぶ)との対応付けは、通常、OS(オペレーティングシ
ステム)が行なっている。また、OSは、仮想プロセッ
サをプロセスで実現するので、複数の仮想プロセッサを
1台の物理プロセッサに対応させることも可能である。
本明細書では、以後、仮想プロセッサとプロセスを同じ
意味で用いる。
使用する「データ分割指示」、「分散記憶型並列機向け
プログラム」、「計算分割」、「ループ分割」の各用語
について、図2に示したデータ分割指示付きソースプロ
グラム101の具体例を用いて説明しておく。最初に
「データ分割指示」について説明する。「データ分割指
示」とは、例えば、図2における文202ないし文20
5で表現されるものである。ここで、文202ないし文
204でデータを分割することを、文205で分割した
データを異なるプロセッサないしプロセスに割り付ける
ことを、それぞれコンパイラに指示している。さらに具
体的に説明すると、文202は仮想プロセッサ群の配置
を宣言した文である。仮想プロセッサ群にMPという名
前を付け、それらが4台、1次元的に配置されているこ
とを表わしている。即ち、4台の仮想プロセッサは、そ
れぞれ、MP(1)、MP(2)、MP(3)、MP
(4)という名前で参照される。これら4台の仮想プロ
セッサと実際のプロセッサ(以後、物理プロセッサと呼
ぶ)との対応付けは、通常、OS(オペレーティングシ
ステム)が行なっている。また、OSは、仮想プロセッ
サをプロセスで実現するので、複数の仮想プロセッサを
1台の物理プロセッサに対応させることも可能である。
本明細書では、以後、仮想プロセッサとプロセスを同じ
意味で用いる。
【0004】文203は、n個の要素T(1),・・・,
T(n)からなる仮想配列の宣言であり、複数のユーザ
配列に対してデータ分割をまとめて指示する場合に用い
る。即ち、文204およびそれに続く2行により、複数
のユーザ配列を仮想配列T(J)に対応させ、後述する
ように文205により仮想配列に対するデータ分割を指
示すれば、上記複数配列にデータ分割指示をしたことと
同じことになる。ここで、「仮想配列」とは、実際には
この配列に対するメモリ領域は確保せず、単に、ユーザ
がデータ分割を記述しやすくするためだけに用いる配列
のことである。
T(n)からなる仮想配列の宣言であり、複数のユーザ
配列に対してデータ分割をまとめて指示する場合に用い
る。即ち、文204およびそれに続く2行により、複数
のユーザ配列を仮想配列T(J)に対応させ、後述する
ように文205により仮想配列に対するデータ分割を指
示すれば、上記複数配列にデータ分割指示をしたことと
同じことになる。ここで、「仮想配列」とは、実際には
この配列に対するメモリ領域は確保せず、単に、ユーザ
がデータ分割を記述しやすくするためだけに用いる配列
のことである。
【0005】文204は、A(1)とT(1),A
(2)とT(2),・・・,A(n)とT(n)が同じ仮
想プロセッサにある、というユーザ配列A(J)と仮想
配列T(J)との間の対応関係を表わしたものである。
また、それに続く2行は、B(1)とT(1),B
(2)とT(2),・・・,B(n)とT(n)が同じ仮
想プロセッサにあり、C(1)とT(1),C(2)と
T(2),...,C(n)とT(n)が同じ仮想プロセ
ッサにある、というユーザ配列B(J)およびC(J)
と仮想配列T(J)との間の対応関係を表わしたもので
ある。ここで、Jは配列添字のパラメータを表わしてお
り、Tの宣言文203にある1からnまでの全ての添字
にわたって、上記配列要素毎の対応関係が成立すること
を表わしている。
(2)とT(2),・・・,A(n)とT(n)が同じ仮
想プロセッサにある、というユーザ配列A(J)と仮想
配列T(J)との間の対応関係を表わしたものである。
また、それに続く2行は、B(1)とT(1),B
(2)とT(2),・・・,B(n)とT(n)が同じ仮
想プロセッサにあり、C(1)とT(1),C(2)と
T(2),...,C(n)とT(n)が同じ仮想プロセ
ッサにある、というユーザ配列B(J)およびC(J)
と仮想配列T(J)との間の対応関係を表わしたもので
ある。ここで、Jは配列添字のパラメータを表わしてお
り、Tの宣言文203にある1からnまでの全ての添字
にわたって、上記配列要素毎の対応関係が成立すること
を表わしている。
【0006】文205は、仮想配列T(J)のデータ分
割方法と分割データの仮想プロセッサへの割り付け方法
を指示した文である。文205の「T(BLOCK)」
は仮想配列T(J)を配列添字Jが連続する部分配列へ
分割することを表わしている。文205の「ONTO
MP」は分割された部分配列を仮想プロセッサMPへ割
り付けることを表わしている。
割方法と分割データの仮想プロセッサへの割り付け方法
を指示した文である。文205の「T(BLOCK)」
は仮想配列T(J)を配列添字Jが連続する部分配列へ
分割することを表わしている。文205の「ONTO
MP」は分割された部分配列を仮想プロセッサMPへ割
り付けることを表わしている。
【0007】即ち、文200よりnが「512」であ
り、文202より仮想プロセッサMPは「4台」である
ので、このデータ分割指示は、T(1),・・・,T(1
28)をMP(1)へ、T(129),・・・,T(25
6)をMP(2)へ、T(257),・・・,T(38
4)をMP(3)へ、T(385),・・・,T(51
2)をMP(4)へ、それぞれ割り付けることを表して
いる。このとき、配列A,B,Cの宣言は、文201よ
り範囲が(0:n+1)であって仮想配列Tの宣言
(1:n)より大きいため、例えば、A(0)およびA
(513)に対する割り付けは特に指定されてないが、
「BLOCK」が添字が連続する部分配列へ分割するこ
とを表わすことから、それぞれMP(1)およびMP
(4)へ割り付けることとする。
り、文202より仮想プロセッサMPは「4台」である
ので、このデータ分割指示は、T(1),・・・,T(1
28)をMP(1)へ、T(129),・・・,T(25
6)をMP(2)へ、T(257),・・・,T(38
4)をMP(3)へ、T(385),・・・,T(51
2)をMP(4)へ、それぞれ割り付けることを表して
いる。このとき、配列A,B,Cの宣言は、文201よ
り範囲が(0:n+1)であって仮想配列Tの宣言
(1:n)より大きいため、例えば、A(0)およびA
(513)に対する割り付けは特に指定されてないが、
「BLOCK」が添字が連続する部分配列へ分割するこ
とを表わすことから、それぞれMP(1)およびMP
(4)へ割り付けることとする。
【0008】次に、「分散記憶型並列機向けプログラ
ム」について説明する。「分散記憶型並列機向けプログ
ラム」とは、ここでは、SPMD(Single Program
Multiple Data)型プログラムを指している。SPM
D型プログラムとは、多数のプロセッサないしプロセス
(以後、両者をまとめてプロセスと呼ぶ)を動作させる
ときに用いるプログラムの一種である。即ち、多数のプ
ロセスに対してそれらを動作させるプログラムは唯1つ
(Single Program)であるが、プロセス毎にデータが
異なる(Multiple Data)プログラムのことをいう。
ここで、各プロセスは同じプログラムを実行するが、こ
のことは必ずしも各プロセスがプログラムの同じ部分を
実行することを意味するものではない。即ち、プロセス
は固有のプロセス番号を持っており、プログラム中にこ
のプロセス番号を獲得する文と、その番号により、処理
の仕方を変える文があれば、プロセス毎に異なる処理を
記述することが可能である。
ム」について説明する。「分散記憶型並列機向けプログ
ラム」とは、ここでは、SPMD(Single Program
Multiple Data)型プログラムを指している。SPM
D型プログラムとは、多数のプロセッサないしプロセス
(以後、両者をまとめてプロセスと呼ぶ)を動作させる
ときに用いるプログラムの一種である。即ち、多数のプ
ロセスに対してそれらを動作させるプログラムは唯1つ
(Single Program)であるが、プロセス毎にデータが
異なる(Multiple Data)プログラムのことをいう。
ここで、各プロセスは同じプログラムを実行するが、こ
のことは必ずしも各プロセスがプログラムの同じ部分を
実行することを意味するものではない。即ち、プロセス
は固有のプロセス番号を持っており、プログラム中にこ
のプロセス番号を獲得する文と、その番号により、処理
の仕方を変える文があれば、プロセス毎に異なる処理を
記述することが可能である。
【0009】図3は、図2のデータ分割指示付きソース
プログラムを図40の並列化コンパイラ4000中の構
文解析部102ないし通信生成部105およびソースコ
ード生成部110を用いて変換した結果生成されるデー
タ通信入りソースプログラム111を示している。この
データ通信入りソースプログラム111はSPMD型プ
ログラムの一例である。即ち、図2の文202で指示し
た4つのプロセスがこの一つのプログラムを実行し、各
プロセスは配列A,B,Cの異なる部分を用いて計算を
行なう。例えば、図3の文300中の配列Aの宣言は0
から129になっているが、これは各プロセスのデータ
が全て同じであることを意味しているのではなく、元の
プログラムの配列Aの添字と各プロセスに割り付けられ
た配列Aの添字との対応はプロセスにより異なってい
る。図3のプログラムでは、プロセス番号は0から3ま
でであり、プロセス番号0、1、2、3のプロセスが、
それぞれ、前述したMP(1)、MP(2)、MP
(3)、MP(4)に対応しており、例えば、プロセス
番号0、1、2、3における配列要素A(1)は、それぞ
れ、データ分割前の配列要素A(1)、A(129)、A(25
7)、A(385)に対応している。
プログラムを図40の並列化コンパイラ4000中の構
文解析部102ないし通信生成部105およびソースコ
ード生成部110を用いて変換した結果生成されるデー
タ通信入りソースプログラム111を示している。この
データ通信入りソースプログラム111はSPMD型プ
ログラムの一例である。即ち、図2の文202で指示し
た4つのプロセスがこの一つのプログラムを実行し、各
プロセスは配列A,B,Cの異なる部分を用いて計算を
行なう。例えば、図3の文300中の配列Aの宣言は0
から129になっているが、これは各プロセスのデータ
が全て同じであることを意味しているのではなく、元の
プログラムの配列Aの添字と各プロセスに割り付けられ
た配列Aの添字との対応はプロセスにより異なってい
る。図3のプログラムでは、プロセス番号は0から3ま
でであり、プロセス番号0、1、2、3のプロセスが、
それぞれ、前述したMP(1)、MP(2)、MP
(3)、MP(4)に対応しており、例えば、プロセス
番号0、1、2、3における配列要素A(1)は、それぞ
れ、データ分割前の配列要素A(1)、A(129)、A(25
7)、A(385)に対応している。
【0010】また、図3のプログラムはプロセス毎に、
プログラムの実行の仕方が異なることも示している。文
302はプロセス番号を獲得する文である。この文を実
行することにより変数MPにプロセスに固有なプロセス
番号が格納される。
プログラムの実行の仕方が異なることも示している。文
302はプロセス番号を獲得する文である。この文を実
行することにより変数MPにプロセスに固有なプロセス
番号が格納される。
【0011】図4は、図3における"LOWLIM1,UPPLIM1,L
OWLIM2,UPPLIM2,LOWLIM3,UPPLIM3の値設定コード"30
4を表わしたものである。ここでは、例えば、文40
0、403、406が示すように、プロセス番号MPの
値により、処理を変えている。
OWLIM2,UPPLIM2,LOWLIM3,UPPLIM3の値設定コード"30
4を表わしたものである。ここでは、例えば、文40
0、403、406が示すように、プロセス番号MPの
値により、処理を変えている。
【0012】次に、「計算分割」について説明する。
「計算分割」とは、データ分割指示付きソースプログラ
ムをデータ通信入りソースプログラムに変換する際に、
各プロセスが分担すべき計算部分を求めることを意味し
ている。例えば、図3の文305はDOループの実行範
囲がLOWLIM1からUPPLIM1までであることを表わしている
が、この値はプロセスによって異なっている。文30
4、即ち、それを表した図4において、文401と文4
02、文404と文405、文407と文408が、そ
れぞれ、プロセス番号がプロセス0、プロセス1〜2、
プロセス3に対するLOWLIM1とUPPLIM1の値を設定してい
る。
「計算分割」とは、データ分割指示付きソースプログラ
ムをデータ通信入りソースプログラムに変換する際に、
各プロセスが分担すべき計算部分を求めることを意味し
ている。例えば、図3の文305はDOループの実行範
囲がLOWLIM1からUPPLIM1までであることを表わしている
が、この値はプロセスによって異なっている。文30
4、即ち、それを表した図4において、文401と文4
02、文404と文405、文407と文408が、そ
れぞれ、プロセス番号がプロセス0、プロセス1〜2、
プロセス3に対するLOWLIM1とUPPLIM1の値を設定してい
る。
【0013】ここで、計算分割に際しては、"owner com
pute rule"を用いる。これは、ある代入文をどのプロセ
スが実行するかを決める規則である。この規則では、代
入文は、その左辺の配列要素を持つプロセスが計算を行
なうものとする。このルールに従うと、図2におけるA
(1)およびA(129)は、それぞれ、プロセス番号0および
プロセス番号1のプロセスに割り付けられているので、
Jの値が1および129の時のループ206内の文20
7は、それぞれ、プロセス番号0および1のプロセスに
よって実行される。
pute rule"を用いる。これは、ある代入文をどのプロセ
スが実行するかを決める規則である。この規則では、代
入文は、その左辺の配列要素を持つプロセスが計算を行
なうものとする。このルールに従うと、図2におけるA
(1)およびA(129)は、それぞれ、プロセス番号0および
プロセス番号1のプロセスに割り付けられているので、
Jの値が1および129の時のループ206内の文20
7は、それぞれ、プロセス番号0および1のプロセスに
よって実行される。
【0014】次に、「ループ分割」について説明する。
「ループ分割」とは、1つのループを複数のループに分
割することを意味している。図5に一つのループをルー
プ分割した例を示す。図5の文500および文501
が、図2のDOループ206を2つのループにループ分
割したものを示している。
「ループ分割」とは、1つのループを複数のループに分
割することを意味している。図5に一つのループをルー
プ分割した例を示す。図5の文500および文501
が、図2のDOループ206を2つのループにループ分
割したものを示している。
【0015】次に、データ分割指示付きソースプログラ
ムを入力し、分散記憶型並列機向けプログラムに変換す
るトランスレータ乃至コンパイラに関する2つの従来技
術を説明する。第1の従来技術は、ループ内に複数の代
入文があり、かつ、上記トランスレータ乃至コンパイラ
のプログラム変換過程において、そのループ内の、ある
2つの代入文の実行範囲が異なる場合、即ち、あるプロ
セスを固定した時、ある文と別の文をそのプロセスが実
行する時のループ制御変数の動く範囲が異なる場合、そ
のループ計算を各プロセスに分割する計算分割の結果と
して、上記ループの実行範囲をループ内の各文の実行範
囲の和集合とし、ループ内の各文を条件文の下で自分の
実行範囲の時のみを実行するコードを生成するものであ
る。上記第1の従来技術として、例えば、コミュニケー
ションズ オブ ジ エイー・シー・エム、オーガスト
1992/ボリューム35、ナンバー8、第66頁〜
第80頁(COMMUNICATIONS OF THE ACM, August 1992/V
ol.35, No.8, pp.66-80)に記載されたものがある。
ムを入力し、分散記憶型並列機向けプログラムに変換す
るトランスレータ乃至コンパイラに関する2つの従来技
術を説明する。第1の従来技術は、ループ内に複数の代
入文があり、かつ、上記トランスレータ乃至コンパイラ
のプログラム変換過程において、そのループ内の、ある
2つの代入文の実行範囲が異なる場合、即ち、あるプロ
セスを固定した時、ある文と別の文をそのプロセスが実
行する時のループ制御変数の動く範囲が異なる場合、そ
のループ計算を各プロセスに分割する計算分割の結果と
して、上記ループの実行範囲をループ内の各文の実行範
囲の和集合とし、ループ内の各文を条件文の下で自分の
実行範囲の時のみを実行するコードを生成するものであ
る。上記第1の従来技術として、例えば、コミュニケー
ションズ オブ ジ エイー・シー・エム、オーガスト
1992/ボリューム35、ナンバー8、第66頁〜
第80頁(COMMUNICATIONS OF THE ACM, August 1992/V
ol.35, No.8, pp.66-80)に記載されたものがある。
【0016】図3および図4は、図2のプログラムを上
述した第1の従来技術により変換した結果を示す図であ
る。文300は配列A、B、Cをデータ分割した結果の
配列宣言である。添字0と129を追加したことは、通
信のための一時領域(隣からの通信データを格納するた
めの通信用バッファ領域)として用いるために配列の宣
言を拡張したことを表わしている。文301はプロセス
番号を格納する変数を宣言する文である。文302はM
Pにプロセス番号を格納する手続き呼び出し文である。
文303はデータ通信を表わすコードであるが、本明細
書では省略している。
述した第1の従来技術により変換した結果を示す図であ
る。文300は配列A、B、Cをデータ分割した結果の
配列宣言である。添字0と129を追加したことは、通
信のための一時領域(隣からの通信データを格納するた
めの通信用バッファ領域)として用いるために配列の宣
言を拡張したことを表わしている。文301はプロセス
番号を格納する変数を宣言する文である。文302はM
Pにプロセス番号を格納する手続き呼び出し文である。
文303はデータ通信を表わすコードであるが、本明細
書では省略している。
【0017】図2の文200によりnの値は「512」
であり、文202〜文205により、元の配列A、B
の、各プロセスへの割り付けは、A(0)〜A(128)とB
(0)〜B(128)がプロセス0に、A(129)〜A(256)とB(1
29)〜B(256)がプロセス1に、A(257)〜A(384)とB(2
57)〜B(384)がプロセス2に、A(385)〜A(513)とB(3
85)〜B(513)がプロセス3に、それぞれ、割り付けられ
ることを示している。
であり、文202〜文205により、元の配列A、B
の、各プロセスへの割り付けは、A(0)〜A(128)とB
(0)〜B(128)がプロセス0に、A(129)〜A(256)とB(1
29)〜B(256)がプロセス1に、A(257)〜A(384)とB(2
57)〜B(384)がプロセス2に、A(385)〜A(513)とB(3
85)〜B(513)がプロセス3に、それぞれ、割り付けられ
ることを示している。
【0018】これと上述した"owner compute rule"よ
り、文207を実行するJの値は、プロセス0、1、
2、3に対応して、それぞれ、1〜128、129〜256、257
〜384、385〜512となる。これを図3の文300のよう
に配列を宣言した場合には、各プロセスに対して、すべ
て1〜128となる。これを表わしたのが、図4の文409
から文417である。この詳細は上記文献に記述されて
いる。
り、文207を実行するJの値は、プロセス0、1、
2、3に対応して、それぞれ、1〜128、129〜256、257
〜384、385〜512となる。これを図3の文300のよう
に配列を宣言した場合には、各プロセスに対して、すべ
て1〜128となる。これを表わしたのが、図4の文409
から文417である。この詳細は上記文献に記述されて
いる。
【0019】同様にして、文208を実行する(J+
1)の値は、プロセス0、1、2、3に対応して、それ
ぞれ、2〜128、129〜256、257〜384、385〜513となる。
従って、文208を実行するJの値は、プロセス0、
1、2、3に対応して、それぞれ、1〜127、128〜255、
256〜383、384〜512となる。これを図3の文300のよ
うに配列を宣言した場合には、プロセス0、1、2、3
に対応して、それぞれ、1〜127、0〜127、0〜127、
0〜128となる。これを表わしたのが、図4の文418か
ら文426である。
1)の値は、プロセス0、1、2、3に対応して、それ
ぞれ、2〜128、129〜256、257〜384、385〜513となる。
従って、文208を実行するJの値は、プロセス0、
1、2、3に対応して、それぞれ、1〜127、128〜255、
256〜383、384〜512となる。これを図3の文300のよ
うに配列を宣言した場合には、プロセス0、1、2、3
に対応して、それぞれ、1〜127、0〜127、0〜127、
0〜128となる。これを表わしたのが、図4の文418か
ら文426である。
【0020】上記のように、ループ内の2つの文の実行
範囲が異なるので、第1の従来技術では、これらの実行
文を実行するために、ループの実行範囲を大きく取らな
ければならない。即ち、上記2つの実行範囲の和集合を
各プロセス範囲毎に取る。和集合をとることによって文
207と文208に対する実行範囲は、プロセス0、
1、2、3に対して、それぞれ、1〜128と1〜127、1〜1
28と0〜127、1〜128と0〜127、1〜128と0〜128なので、
和集合を取った結果は、それぞれ、1〜128、0〜128、0
〜128、0〜128となる。これを表わしたのが図4の文4
00から文408である。この結果、各文は余分な計算
をしないように、和集合で表わされる実行範囲の内、実
行に必要な範囲だけを判定して実行しなければならな
い。これを表わしたのが、図3の文306と文308で
ある。
範囲が異なるので、第1の従来技術では、これらの実行
文を実行するために、ループの実行範囲を大きく取らな
ければならない。即ち、上記2つの実行範囲の和集合を
各プロセス範囲毎に取る。和集合をとることによって文
207と文208に対する実行範囲は、プロセス0、
1、2、3に対して、それぞれ、1〜128と1〜127、1〜1
28と0〜127、1〜128と0〜127、1〜128と0〜128なので、
和集合を取った結果は、それぞれ、1〜128、0〜128、0
〜128、0〜128となる。これを表わしたのが図4の文4
00から文408である。この結果、各文は余分な計算
をしないように、和集合で表わされる実行範囲の内、実
行に必要な範囲だけを判定して実行しなければならな
い。これを表わしたのが、図3の文306と文308で
ある。
【0021】次に、第2の従来技術について説明する。
第2の従来技術は、ループ内に複数の代入文があったと
しても、そのループがループ分割可能で、その結果、分
割された各ループ内の代入文の実行範囲が全て同じ場合
には、計算分割の結果として、上記分割された各ループ
の実行範囲がループ内の各代入文の実行範囲と同一で、
ループ内の各文には条件文が付かないようなコードを生
成するものである。上記第2の従来技術として、Hans
Zima& Barbara Chapman 著「Supercompilers fo
r Parallel and Vector Computers」 1991年 (Ad
dison-Wesley Publishing Company 発行) に記載さ
れたものがある。
第2の従来技術は、ループ内に複数の代入文があったと
しても、そのループがループ分割可能で、その結果、分
割された各ループ内の代入文の実行範囲が全て同じ場合
には、計算分割の結果として、上記分割された各ループ
の実行範囲がループ内の各代入文の実行範囲と同一で、
ループ内の各文には条件文が付かないようなコードを生
成するものである。上記第2の従来技術として、Hans
Zima& Barbara Chapman 著「Supercompilers fo
r Parallel and Vector Computers」 1991年 (Ad
dison-Wesley Publishing Company 発行) に記載さ
れたものがある。
【0022】上述した第2の従来技術を用いた具体例を
以下に説明する。図5は図2の一つのループを複数のル
ープに分割した結果を示したものである。すなわち、図
2の一つのDOループ206〜208を図5の2つのD
Oループ500,501に分割している。図6は、図5
を上記第2の従来技術により変換した結果である。文6
00は"LOWLIM1,UPPLIM1の値設定コード"であり、この
内容は図7に表わしている。DOループ601は図5の
DOループ500を計算分割した結果である。文603
は"LOWLIM2,UPPLIM2の値設定コード"であり、この内容
は図8に示されている。DOループ604はDOループ
501を計算分割した結果である。計算分割によって得
られたDOループ601,604を見れば分かるよう
に、ループ内の各文には条件文が付いていない。なお、
図7および図8におけるLOWLIM1,UPPLIM1,LOWLIM2,UPPL
IM2の値の求め方は、それぞれ、図4で説明したLOWLIM
2,UPPLIM2,LOWLIM3,UPPLIM3の求め方と同じである。
以下に説明する。図5は図2の一つのループを複数のル
ープに分割した結果を示したものである。すなわち、図
2の一つのDOループ206〜208を図5の2つのD
Oループ500,501に分割している。図6は、図5
を上記第2の従来技術により変換した結果である。文6
00は"LOWLIM1,UPPLIM1の値設定コード"であり、この
内容は図7に表わしている。DOループ601は図5の
DOループ500を計算分割した結果である。文603
は"LOWLIM2,UPPLIM2の値設定コード"であり、この内容
は図8に示されている。DOループ604はDOループ
501を計算分割した結果である。計算分割によって得
られたDOループ601,604を見れば分かるよう
に、ループ内の各文には条件文が付いていない。なお、
図7および図8におけるLOWLIM1,UPPLIM1,LOWLIM2,UPPL
IM2の値の求め方は、それぞれ、図4で説明したLOWLIM
2,UPPLIM2,LOWLIM3,UPPLIM3の求め方と同じである。
【0023】
【発明が解決しようとする課題】次に、上述した従来技
術における問題点について検討する。上記第1の従来技
術は変換プログラムの処理速度の点について考慮されて
おらずDOループ内に条件文が入っているため処理の高
速化が図れない。例えば、図3において、プログラム変
換後のDOループ305内の代入文307,309の実
行時には、それぞれ条件文306,308を毎回実行し
なくてはならないため、条件文の実行時間が余計にかか
り処理の高速化が図れない、という問題点がある。ま
た、上記第2の従来技術は、変換プログラムの処理速度
の点について考慮されておらずループが増加するに伴い
終了判定に実行時間が余計にかかり処理の高速化が図れ
ない。例えば、図2のDOル−プ206がル−プ分割さ
れ並列化されて、図6のDOル−プ601,604とな
った結果、増加したループの個数だけループの終了判定
回数が増加してしまう、また、ループ分割により1ルー
プ内の文の数が図2の207,208の2文から図6の
602,605の各1文づつに減少するのに伴い、命令
スケジューリングやスーパースカラ等の効果が減少し、
さらに、分割ループの間でデータをやり取りする必要の
ある場合には、余分なLOAD/STORE命令が必要となる、と
いう問題点があった。また、上記第2の従来技術はルー
プ分割が可能な場合に限定されており、ループ分割不可
能なプログラムに対する変換方法の点については全く考
慮されていないため適用範囲が狭い、という問題点があ
った。
術における問題点について検討する。上記第1の従来技
術は変換プログラムの処理速度の点について考慮されて
おらずDOループ内に条件文が入っているため処理の高
速化が図れない。例えば、図3において、プログラム変
換後のDOループ305内の代入文307,309の実
行時には、それぞれ条件文306,308を毎回実行し
なくてはならないため、条件文の実行時間が余計にかか
り処理の高速化が図れない、という問題点がある。ま
た、上記第2の従来技術は、変換プログラムの処理速度
の点について考慮されておらずループが増加するに伴い
終了判定に実行時間が余計にかかり処理の高速化が図れ
ない。例えば、図2のDOル−プ206がル−プ分割さ
れ並列化されて、図6のDOル−プ601,604とな
った結果、増加したループの個数だけループの終了判定
回数が増加してしまう、また、ループ分割により1ルー
プ内の文の数が図2の207,208の2文から図6の
602,605の各1文づつに減少するのに伴い、命令
スケジューリングやスーパースカラ等の効果が減少し、
さらに、分割ループの間でデータをやり取りする必要の
ある場合には、余分なLOAD/STORE命令が必要となる、と
いう問題点があった。また、上記第2の従来技術はルー
プ分割が可能な場合に限定されており、ループ分割不可
能なプログラムに対する変換方法の点については全く考
慮されていないため適用範囲が狭い、という問題点があ
った。
【0024】本発明の目的は、ループ分割せず、ループ
内に条件文のない変換プログラムを生成することであ
る。本発明の別の目的は、上記性質を持つ変換プログラ
ムを生成する際、変換プログラム中に新たに生成される
ループの数を減らすことである。本発明の別の目的は、
ループ分割せず、実行回数が比較的少ないループに対し
ては、各文毎に条件文を生成し、実行回数が多いループ
に対しては、ループ内に条件文がない変換プログラムを
生成することである。本発明の別の目的は、上記いずれ
かの性質を持つ変換プログラムを生成する際、実行しな
いコードを削除することである。
内に条件文のない変換プログラムを生成することであ
る。本発明の別の目的は、上記性質を持つ変換プログラ
ムを生成する際、変換プログラム中に新たに生成される
ループの数を減らすことである。本発明の別の目的は、
ループ分割せず、実行回数が比較的少ないループに対し
ては、各文毎に条件文を生成し、実行回数が多いループ
に対しては、ループ内に条件文がない変換プログラムを
生成することである。本発明の別の目的は、上記いずれ
かの性質を持つ変換プログラムを生成する際、実行しな
いコードを削除することである。
【0025】
【課題を解決するための手段】本発明の計算分割最適化
方法は、上記目的を達成するために、データ分割指示付
きプログラムを解析して配列要素とそれを割り付けるプ
ロセスとの関係を決定するステップと、各プロセスにつ
いて、配列と文を関係づける規則および配列添字とルー
プ制御変数の間の関係に基づいてループ中の文を自プロ
セスで実行するためのループ制御変数の値の範囲である
文の実行範囲をループ中の各文について決定するステッ
プと、各プロセスについて、互いに重なりのない複数の
区間からなり、それらの和集合が各文の実行範囲の和集
合を包含するような非交差区間列を生成する非交差区間
列生成処理を行なうステップと、非交差区間列の個々の
区間をループ実行範囲とし、ループ内の文は元のループ
と同一のループを複製するループ複製処理を行なうステ
ップと、ループ実行範囲と各文の実行範囲を用いて複製
したループ内の各文に対するコードを変換するコード変
換処理を行なうステップとを有している。
方法は、上記目的を達成するために、データ分割指示付
きプログラムを解析して配列要素とそれを割り付けるプ
ロセスとの関係を決定するステップと、各プロセスにつ
いて、配列と文を関係づける規則および配列添字とルー
プ制御変数の間の関係に基づいてループ中の文を自プロ
セスで実行するためのループ制御変数の値の範囲である
文の実行範囲をループ中の各文について決定するステッ
プと、各プロセスについて、互いに重なりのない複数の
区間からなり、それらの和集合が各文の実行範囲の和集
合を包含するような非交差区間列を生成する非交差区間
列生成処理を行なうステップと、非交差区間列の個々の
区間をループ実行範囲とし、ループ内の文は元のループ
と同一のループを複製するループ複製処理を行なうステ
ップと、ループ実行範囲と各文の実行範囲を用いて複製
したループ内の各文に対するコードを変換するコード変
換処理を行なうステップとを有している。
【0026】ここで、上記非交差区間列生成処理を行う
ステップは、互いに重なりのない各区間内において各文
は実行されるか否かのいずれかに決まるような非交差区
間列を生成するものである。さらに、上記非交差区間列
生成処理を行うステップは、与えられた非交差区間列に
対し、非交差区間列の内、指定された区間選択方法で選
択したいくつかの区間の集合を第1の非交差区間列と
し、選択しなかった区間の内、隣接する区間を融合して
一つの区間として得られる区間の集合を第2の非交差区
間列とし、上記第1の非交差区間列と上記第2の非交差
区間列の和集合を新しい非交差区間列とするものであ
る。なお、上記区間選択方法は、区間の長さが長い順に
並べ、先頭から指定個数までの区間を選択するか、また
は、区間の長さが長い順に並べ、先頭から各区間の長さ
の和を求め、該長さの和が指定の値に達するまでの区間
を選択するようにしたものである。また、上記ループ複
製処理を行うステップは、各プロセスについて、当該プ
ロセスか否かを判定する条件文を生成し、条件文の条件
が成立したとき、プロセスの非交差区間列を用いてルー
プを複製するものである。さらに、上記ループ複製処理
を行うステップは、非交差区間の選択順序を全プロセス
にまたがって決定するために順序表現の作成を行ない、
順序表現に基づいて、全プロセスから、選択するプロセ
スと非交差区間を決定する非交差区間選択処理を行な
い、非交差区間を選択したプロセスに対しては、選択さ
れた非交差区間をループ実行範囲とするプロセスに共通
な単一のループを生成するループ複製処理を行ない、非
交差区間を選択しなかったプロセスに対しては、ループ
を実行しないようなコードを生成し、これらの処理をど
のプロセスにも選択されない非交差区間がなくなるまで
続けるものである。
ステップは、互いに重なりのない各区間内において各文
は実行されるか否かのいずれかに決まるような非交差区
間列を生成するものである。さらに、上記非交差区間列
生成処理を行うステップは、与えられた非交差区間列に
対し、非交差区間列の内、指定された区間選択方法で選
択したいくつかの区間の集合を第1の非交差区間列と
し、選択しなかった区間の内、隣接する区間を融合して
一つの区間として得られる区間の集合を第2の非交差区
間列とし、上記第1の非交差区間列と上記第2の非交差
区間列の和集合を新しい非交差区間列とするものであ
る。なお、上記区間選択方法は、区間の長さが長い順に
並べ、先頭から指定個数までの区間を選択するか、また
は、区間の長さが長い順に並べ、先頭から各区間の長さ
の和を求め、該長さの和が指定の値に達するまでの区間
を選択するようにしたものである。また、上記ループ複
製処理を行うステップは、各プロセスについて、当該プ
ロセスか否かを判定する条件文を生成し、条件文の条件
が成立したとき、プロセスの非交差区間列を用いてルー
プを複製するものである。さらに、上記ループ複製処理
を行うステップは、非交差区間の選択順序を全プロセス
にまたがって決定するために順序表現の作成を行ない、
順序表現に基づいて、全プロセスから、選択するプロセ
スと非交差区間を決定する非交差区間選択処理を行な
い、非交差区間を選択したプロセスに対しては、選択さ
れた非交差区間をループ実行範囲とするプロセスに共通
な単一のループを生成するループ複製処理を行ない、非
交差区間を選択しなかったプロセスに対しては、ループ
を実行しないようなコードを生成し、これらの処理をど
のプロセスにも選択されない非交差区間がなくなるまで
続けるものである。
【0027】また、上記順序表現の作成は、与えられた
数と与えられた区間に対し、上記数が上記区間の下限値
より小さいときに1、上記区間に含まれるときに2、上
記区間の上限値より大きいときに3を、上記数に対応さ
せることを数の区間に対する順序表現といい、与えられ
た数と与えられた順序付けられた複数の区間に対し、上
記数の区間に対する順序表現を与えられた順序付けに従
って並べてできる数列を、数の順序付き区間に対する順
序表現といい、与えられた数列と与えられた順序付き区
間に対し、上記数列中の各数の上記順序付き区間に対す
る順序表現を上記数列の値の小さい順に並べてできる数
列を数列の順序付き区間に対する順序表現というとき、
各プロセスについて、与えられたループ内の各文に対す
る実行範囲と与えられた非交差区間列に対し、上記非交
差区間列の下限値からなる数列を生成し、上記実行範囲
に指定された順序付けを与え、上記生成された数列の順
序付き区間に対する順序表現を求めるものである。ま
た、上記非交差区間選択処理は、各プロセスについて、
上記求められた順序表現のまだ選択されてない数列の
内、最小の値を選択し、上記選択された値の内、全プロ
セスで最小の数に対応する非交差区間とそのプロセスを
選択するものである。また、上記コード変換処理は、ル
ープ内文の実行範囲がループ実行範囲を包含するとき当
該ループ中の当該文を実行時判定なしで実行するコード
に変換する実行時判定削除処理と、ループ内文の実行範
囲とループ実行範囲が互いに重なりがないとき当該ルー
プ中の当該文を削除する文削除処理とのうち少なくとも
いずれか一方を行ない、上記以外の場合は当該ループ中
の当該文をループ制御変数が当該文の実行範囲に含まれ
る時のみ実行するコードに変換するものである。さら
に、上記コード変換処理は、各プロセスについて、もし
ループ中の全ての文が上記文削除処理により削除される
場合当該ループを実行しないコードに変換するものであ
る。
数と与えられた区間に対し、上記数が上記区間の下限値
より小さいときに1、上記区間に含まれるときに2、上
記区間の上限値より大きいときに3を、上記数に対応さ
せることを数の区間に対する順序表現といい、与えられ
た数と与えられた順序付けられた複数の区間に対し、上
記数の区間に対する順序表現を与えられた順序付けに従
って並べてできる数列を、数の順序付き区間に対する順
序表現といい、与えられた数列と与えられた順序付き区
間に対し、上記数列中の各数の上記順序付き区間に対す
る順序表現を上記数列の値の小さい順に並べてできる数
列を数列の順序付き区間に対する順序表現というとき、
各プロセスについて、与えられたループ内の各文に対す
る実行範囲と与えられた非交差区間列に対し、上記非交
差区間列の下限値からなる数列を生成し、上記実行範囲
に指定された順序付けを与え、上記生成された数列の順
序付き区間に対する順序表現を求めるものである。ま
た、上記非交差区間選択処理は、各プロセスについて、
上記求められた順序表現のまだ選択されてない数列の
内、最小の値を選択し、上記選択された値の内、全プロ
セスで最小の数に対応する非交差区間とそのプロセスを
選択するものである。また、上記コード変換処理は、ル
ープ内文の実行範囲がループ実行範囲を包含するとき当
該ループ中の当該文を実行時判定なしで実行するコード
に変換する実行時判定削除処理と、ループ内文の実行範
囲とループ実行範囲が互いに重なりがないとき当該ルー
プ中の当該文を削除する文削除処理とのうち少なくとも
いずれか一方を行ない、上記以外の場合は当該ループ中
の当該文をループ制御変数が当該文の実行範囲に含まれ
る時のみ実行するコードに変換するものである。さら
に、上記コード変換処理は、各プロセスについて、もし
ループ中の全ての文が上記文削除処理により削除される
場合当該ループを実行しないコードに変換するものであ
る。
【0028】
【作用】本発明では、各プロセスについて、互いに素な
(重なりのない)複数の区間からなり、それらの和集合
がループ中の各文の実行範囲の和集合を包含し、かつ、
その区間内ではループ内の各文は実行されるか否かのい
ずれかに決まるような非交差区間列を生成し、上記非交
差区間列の個々の区間をループ実行範囲としループ本体
は元のループと同じであるループを複製するようにして
いるので、上記各ループ中の各実行文はループ内におい
て、常に実行されるか、常に実行されないかのいずれか
に決まるので、ループ内に条件文のないプログラムの生
成が可能である。よって、コード変換において、ループ
内文の実行範囲がループ実行範囲を包含するなら当該ル
ープ中の当該文を実行時判定なしで実行するコードに変
換し、ループ内文の実行範囲とループ実行範囲が互いに
素なら当該ループ中の当該文を削除すればよい。ここ
で、各プロセス毎に異なる上記非交差区間をループ実行
範囲として持つループをSPMD型プログラムとして生
成するための1方法として、ループ生成処理において、
各プロセスについて、当該プロセスか否かを判定する条
件文を生成し、上記条件文の条件が成立したとき、その
プロセスの非交差区間列を用いたループ実行するよう
に、ループを生成すればよい。以上により、ループ分割
せず、ループ内に条件文のない変換プログラムが生成で
きる。
(重なりのない)複数の区間からなり、それらの和集合
がループ中の各文の実行範囲の和集合を包含し、かつ、
その区間内ではループ内の各文は実行されるか否かのい
ずれかに決まるような非交差区間列を生成し、上記非交
差区間列の個々の区間をループ実行範囲としループ本体
は元のループと同じであるループを複製するようにして
いるので、上記各ループ中の各実行文はループ内におい
て、常に実行されるか、常に実行されないかのいずれか
に決まるので、ループ内に条件文のないプログラムの生
成が可能である。よって、コード変換において、ループ
内文の実行範囲がループ実行範囲を包含するなら当該ル
ープ中の当該文を実行時判定なしで実行するコードに変
換し、ループ内文の実行範囲とループ実行範囲が互いに
素なら当該ループ中の当該文を削除すればよい。ここ
で、各プロセス毎に異なる上記非交差区間をループ実行
範囲として持つループをSPMD型プログラムとして生
成するための1方法として、ループ生成処理において、
各プロセスについて、当該プロセスか否かを判定する条
件文を生成し、上記条件文の条件が成立したとき、その
プロセスの非交差区間列を用いたループ実行するよう
に、ループを生成すればよい。以上により、ループ分割
せず、ループ内に条件文のない変換プログラムが生成で
きる。
【0029】また、ループ生成処理において、非交差区
間をループ実行範囲と考えたとき、各プロセスの非交差
区間に対する順序表現が同じになる場合は、順序表現の
定義から、ループ内で常に実行される文の集合が一致す
るので、各プロセスは、ループの実行範囲はプロセス毎
に異なるが、プロセスで共通なループを使うことができ
る。これは、順序表現に基づいて、全プロセスから、選
択するプロセスと非交差区間を決定する非交差区間選択
処理を行ない、上記非交差区間を選択したプロセスに対
しては、選択された非交差区間をループ実行範囲とする
上記プロセスに共通な単一のループを生成するループ生
成処理を行ない、上記非交差区間を選択しなかったプロ
セスに対しては、ループを実行しないようなコードを生
成し、上記ステップをどのプロセスにも選択されない非
交差区間がなくなるまで続けることにより実現できる。
以上により、ループ分割せず、ループ内に条件文のない
変換プログラムを生成する際、変換プログラム中に新た
に生成されるループの数が少ないプログラムが生成でき
る。
間をループ実行範囲と考えたとき、各プロセスの非交差
区間に対する順序表現が同じになる場合は、順序表現の
定義から、ループ内で常に実行される文の集合が一致す
るので、各プロセスは、ループの実行範囲はプロセス毎
に異なるが、プロセスで共通なループを使うことができ
る。これは、順序表現に基づいて、全プロセスから、選
択するプロセスと非交差区間を決定する非交差区間選択
処理を行ない、上記非交差区間を選択したプロセスに対
しては、選択された非交差区間をループ実行範囲とする
上記プロセスに共通な単一のループを生成するループ生
成処理を行ない、上記非交差区間を選択しなかったプロ
セスに対しては、ループを実行しないようなコードを生
成し、上記ステップをどのプロセスにも選択されない非
交差区間がなくなるまで続けることにより実現できる。
以上により、ループ分割せず、ループ内に条件文のない
変換プログラムを生成する際、変換プログラム中に新た
に生成されるループの数が少ないプログラムが生成でき
る。
【0030】また、与えられた非交差区間列に対し、上
記非交差区間列の内、指定された区間選択方法で選択し
たいくつかの区間の集合を第1の非交差区間列とし、選
択しなかった区間の内、隣接する区間を融合して一つの
区間として得られる区間の集合を第2の非交差区間列と
し、上記第1の非交差区間列と上記第2の非交差区間列
の和集合を新しい非交差区間列とし、区間選択方法とし
て、区間の長さが長い順に指定個数まで選択するか、区
間の長さが長い順に長さの和が指定の値に達するまで選
択することにより、実行回数が比較的少ないループに対
しては、各文毎に条件文を生成し、第1の非交差区間列
には実行回数が比較的多いループを、また、第2の非交
差区間列には実行回数が比較的少ないループを対応させ
られる。
記非交差区間列の内、指定された区間選択方法で選択し
たいくつかの区間の集合を第1の非交差区間列とし、選
択しなかった区間の内、隣接する区間を融合して一つの
区間として得られる区間の集合を第2の非交差区間列と
し、上記第1の非交差区間列と上記第2の非交差区間列
の和集合を新しい非交差区間列とし、区間選択方法とし
て、区間の長さが長い順に指定個数まで選択するか、区
間の長さが長い順に長さの和が指定の値に達するまで選
択することにより、実行回数が比較的少ないループに対
しては、各文毎に条件文を生成し、第1の非交差区間列
には実行回数が比較的多いループを、また、第2の非交
差区間列には実行回数が比較的少ないループを対応させ
られる。
【0031】また、このとき、第1の非交差区間列に対
応する各ループ内では、ループ中の各実行文はループ内
において、常に実行されるか、常に実行されないかのい
ずれかに決まるので、ループ内に条件文のないプログラ
ムの生成が可能である。一方、第2の非交差区間列に対
応する各ループ内では、これは成り立たないので、ルー
プ中の各実行文には条件文を付ける必要がある。これ
は、コード変換において、ループ内文の実行範囲がルー
プ実行範囲を包含するなら当該ループ中の当該文を実行
時判定なしで実行するコードに変換し、ループ内文の実
行範囲とループ実行範囲が互いに素(重なりがない)な
ら当該ループ中の当該文を削除し、上記以外の場合は当
該ループ中の当該文をループ制御変数が当該文の実行範
囲に含まれる時のみ実行するコードに変換することによ
り実現できる。以上により、ループ分割せず、実行回数
が比較的少ないループに対しては、各文毎に条件文を生
成し、実行回数が多いループに対しては、ループ内に条
件文がない変換プログラムが生成できる。また、コード
変換の実行時判定削除処理において、各プロセスについ
て、もしループ中の全ての文が削除されるなら当該ルー
プを実行しないコードに変換すれば、上述したいずれか
の性質を持つ変換プログラムを生成する際、実行しない
コードを削除した変換プログラムが生成できる。
応する各ループ内では、ループ中の各実行文はループ内
において、常に実行されるか、常に実行されないかのい
ずれかに決まるので、ループ内に条件文のないプログラ
ムの生成が可能である。一方、第2の非交差区間列に対
応する各ループ内では、これは成り立たないので、ルー
プ中の各実行文には条件文を付ける必要がある。これ
は、コード変換において、ループ内文の実行範囲がルー
プ実行範囲を包含するなら当該ループ中の当該文を実行
時判定なしで実行するコードに変換し、ループ内文の実
行範囲とループ実行範囲が互いに素(重なりがない)な
ら当該ループ中の当該文を削除し、上記以外の場合は当
該ループ中の当該文をループ制御変数が当該文の実行範
囲に含まれる時のみ実行するコードに変換することによ
り実現できる。以上により、ループ分割せず、実行回数
が比較的少ないループに対しては、各文毎に条件文を生
成し、実行回数が多いループに対しては、ループ内に条
件文がない変換プログラムが生成できる。また、コード
変換の実行時判定削除処理において、各プロセスについ
て、もしループ中の全ての文が削除されるなら当該ルー
プを実行しないコードに変換すれば、上述したいずれか
の性質を持つ変換プログラムを生成する際、実行しない
コードを削除した変換プログラムが生成できる。
【0032】
【実施例】以下、本発明の第1の実施例を図1〜図4、
図9〜図26を用いて詳細に説明する。図1は、本発明
に関わる並列化コンパイラの全体構成を示したものであ
る。同図において、100は並列化コンパイラ、101
はデータ分割指示付きソースプログラム、111はデー
タ通信入りソースプログラム、112は辞書、113は
中間語である。並列化コンパイラ100は、データ分割
指示付きソースプログラム101を入力して辞書112
および中間語113を出力する構文解析部102、辞書
112および中間語113を入力してデータ分割を行な
った結果を辞書112に反映させるデータ分割解析部1
03、辞書112および中間語113を入力してプログ
ラム内の計算を各プロセッサに分割してその結果を中間
語113に反映させる計算分割部104、辞書112お
よび中間語113を入力して他のプロセッサの持つデー
タを参照するための通信命令中間語を生成して、それを
中間語113に挿入する通信生成部105、中間語11
3を入力して計算分割結果を最適化する計算分割最適化
部106、中間語113を入力してデータ通信入りソー
スプログラム111を生成するソースコード生成部11
0から構成される。なお、簡単化のために、同図におい
て図40の従来の並列化コンパイラと同じ構成要素には
同じ符号を付けてある。計算分割最適化部106は、本
発明の特徴とする部分であり、通信生成部105で生成
された中間語113を入力して、その中の全てのループ
に対して、ループ内の文の実行範囲から互いに重なりの
ない実行範囲の集合である非交差区間列を生成する非交
差区間列生成部107、非交差区間列をループの実行範
囲とし、ループ本体は元のものを用いたループを複製す
るループ複製部108、ループ中の文の実行時判定文を
削除するコード変換部109より構成される。
図9〜図26を用いて詳細に説明する。図1は、本発明
に関わる並列化コンパイラの全体構成を示したものであ
る。同図において、100は並列化コンパイラ、101
はデータ分割指示付きソースプログラム、111はデー
タ通信入りソースプログラム、112は辞書、113は
中間語である。並列化コンパイラ100は、データ分割
指示付きソースプログラム101を入力して辞書112
および中間語113を出力する構文解析部102、辞書
112および中間語113を入力してデータ分割を行な
った結果を辞書112に反映させるデータ分割解析部1
03、辞書112および中間語113を入力してプログ
ラム内の計算を各プロセッサに分割してその結果を中間
語113に反映させる計算分割部104、辞書112お
よび中間語113を入力して他のプロセッサの持つデー
タを参照するための通信命令中間語を生成して、それを
中間語113に挿入する通信生成部105、中間語11
3を入力して計算分割結果を最適化する計算分割最適化
部106、中間語113を入力してデータ通信入りソー
スプログラム111を生成するソースコード生成部11
0から構成される。なお、簡単化のために、同図におい
て図40の従来の並列化コンパイラと同じ構成要素には
同じ符号を付けてある。計算分割最適化部106は、本
発明の特徴とする部分であり、通信生成部105で生成
された中間語113を入力して、その中の全てのループ
に対して、ループ内の文の実行範囲から互いに重なりの
ない実行範囲の集合である非交差区間列を生成する非交
差区間列生成部107、非交差区間列をループの実行範
囲とし、ループ本体は元のものを用いたループを複製す
るループ複製部108、ループ中の文の実行時判定文を
削除するコード変換部109より構成される。
【0033】次に、本発明に関わる並列化コンパイラに
おける処理を、図1の並列化コンパイラの構成図を基に
し、図2〜図4および図9〜図26を用いて詳細に説明
する。図2はデータ分割指示付きソースプログラム10
1の具体例である。図2に関する説明は従来技術の説明
の際に既に行なったので省略する。図3は図2のデータ
分割指示付きソースプログラムを図1の並列化コンパイ
ラ100中の構文解析部102から通信生成部105ま
でと、ソースコード生成部110を用いて変換した結果
の、データ通信入りソースプログラム111の具体例で
ある。図4は図3における"LOWLIM1,UPPLIM1,LOWLIM2,U
PPLIM2,LOWLIM3,UPPLIM3の値設定コード"を表わしたも
のである。これらに関する説明も従来技術の説明の際に
既に行なったので省略する。
おける処理を、図1の並列化コンパイラの構成図を基に
し、図2〜図4および図9〜図26を用いて詳細に説明
する。図2はデータ分割指示付きソースプログラム10
1の具体例である。図2に関する説明は従来技術の説明
の際に既に行なったので省略する。図3は図2のデータ
分割指示付きソースプログラムを図1の並列化コンパイ
ラ100中の構文解析部102から通信生成部105ま
でと、ソースコード生成部110を用いて変換した結果
の、データ通信入りソースプログラム111の具体例で
ある。図4は図3における"LOWLIM1,UPPLIM1,LOWLIM2,U
PPLIM2,LOWLIM3,UPPLIM3の値設定コード"を表わしたも
のである。これらに関する説明も従来技術の説明の際に
既に行なったので省略する。
【0034】図16および図18〜図20は、上記図3
および図4に対する通信生成部105における処理直後
の中間語を表わしたもの、および該中間語によって指さ
れる各種テーブルを示すものであり、これらが本実施例
における計算分割最適化部106の入力となる。以下、
これらについて詳細に説明する。図16は中間語の構造
体を表わすための英字と、中間語同士を結ぶポインタを
表わす矢印からなる。ここで、矢印は、その始点にあた
る中間語の構造体の中に、終点にあたる中間語のアドレ
スが格納されていることを表わしている。図16中、LI
NK1600はある中間語に不定個の中間語を接続するの
に用いられる中間語である。例えば、STML1607に、
SINFO1608,ASGN1609,SINFO1614,ASGN16
15の4つの中間語を接続したい場合には、それらの中
間にLINK1600を挿入してLINK1600に前記4つの
中間語を接続し、LINK同士を接続し、STML1607には
先頭のLINK1600のみ接続すればよい。このLINKを用
いることにより不定個の中間語を接続するのが可能にな
る。
および図4に対する通信生成部105における処理直後
の中間語を表わしたもの、および該中間語によって指さ
れる各種テーブルを示すものであり、これらが本実施例
における計算分割最適化部106の入力となる。以下、
これらについて詳細に説明する。図16は中間語の構造
体を表わすための英字と、中間語同士を結ぶポインタを
表わす矢印からなる。ここで、矢印は、その始点にあた
る中間語の構造体の中に、終点にあたる中間語のアドレ
スが格納されていることを表わしている。図16中、LI
NK1600はある中間語に不定個の中間語を接続するの
に用いられる中間語である。例えば、STML1607に、
SINFO1608,ASGN1609,SINFO1614,ASGN16
15の4つの中間語を接続したい場合には、それらの中
間にLINK1600を挿入してLINK1600に前記4つの
中間語を接続し、LINK同士を接続し、STML1607には
先頭のLINK1600のみ接続すればよい。このLINKを用
いることにより不定個の中間語を接続するのが可能にな
る。
【0035】LINFO1601はループテーブル1701
(図17参照)を指す中間語である。この中間語および
ループテーブル1701の作成は計算分割部104が行
なう。LOOP1602はDOループを表わす中間語であ
る。これは2つのポインタ格納部分をもっており、それ
ぞれLOOPH1603とSTML1607の中間語のアドレス
が格納されている。LOOPH1603はDOループの情報
を表わす中間語である。これは3つのポインタ格納部分
をもっており、それぞれJ1604,LOWLIM11605,
UPPLIM11606の中間語のアドレスが格納されてい
る。J1604は、ループ制御変数を表わす中間語であ
る。LOWLIM11605は、ループの下限値を表わす中間
語である。図16では変数を表わしている。UPPLIM11
606は、ループの上限値を表わす中間語である。図1
6では変数を表わしている。STML1607は、複数の文
をまとめる働きをする中間語である。図16ではDOル
ープ内の文をまとめる中間語を表わしている。
(図17参照)を指す中間語である。この中間語および
ループテーブル1701の作成は計算分割部104が行
なう。LOOP1602はDOループを表わす中間語であ
る。これは2つのポインタ格納部分をもっており、それ
ぞれLOOPH1603とSTML1607の中間語のアドレス
が格納されている。LOOPH1603はDOループの情報
を表わす中間語である。これは3つのポインタ格納部分
をもっており、それぞれJ1604,LOWLIM11605,
UPPLIM11606の中間語のアドレスが格納されてい
る。J1604は、ループ制御変数を表わす中間語であ
る。LOWLIM11605は、ループの下限値を表わす中間
語である。図16では変数を表わしている。UPPLIM11
606は、ループの上限値を表わす中間語である。図1
6では変数を表わしている。STML1607は、複数の文
をまとめる働きをする中間語である。図16ではDOル
ープ内の文をまとめる中間語を表わしている。
【0036】SINFO1608は、文実行範囲テーブル1
700(図17参照)を指す中間語である。この中間語
(SINFO)および文実行範囲テーブル1700の作成は
計算分割部104が行なう。ASGN1609は、代入文に
おける等号を表わす中間語である。これは2つのポイン
タ格納部分をもっており、それぞれ代入文の左辺である
A(J)1610と代入文の右辺であるMUL1611の中間
語のアドレスが格納されている。A(J)1610は、配列
を表わす中間語である。MUL1611は、掛け算を表わ
す中間語である。C(J)1612は、配列を表わす中間語
である。AA1613は、変数を表わす中間語である。AS
GN1609〜AA1613の5つの中間語は、図3の文3
07に対応する”A(J)=C(J)*AA”を表わしている。ま
た、ASGN1615とそれに接続される中間語は全体で図
3の文309に対応する”B(J+1)=C(J)*BB”を表わし
ている。
700(図17参照)を指す中間語である。この中間語
(SINFO)および文実行範囲テーブル1700の作成は
計算分割部104が行なう。ASGN1609は、代入文に
おける等号を表わす中間語である。これは2つのポイン
タ格納部分をもっており、それぞれ代入文の左辺である
A(J)1610と代入文の右辺であるMUL1611の中間
語のアドレスが格納されている。A(J)1610は、配列
を表わす中間語である。MUL1611は、掛け算を表わ
す中間語である。C(J)1612は、配列を表わす中間語
である。AA1613は、変数を表わす中間語である。AS
GN1609〜AA1613の5つの中間語は、図3の文3
07に対応する”A(J)=C(J)*AA”を表わしている。ま
た、ASGN1615とそれに接続される中間語は全体で図
3の文309に対応する”B(J+1)=C(J)*BB”を表わし
ている。
【0037】次に、図17を用いて、それぞれ中間語SI
NFO,LINFOによって指される文実行範囲テーブル170
0,ループテーブル1701について説明する。文実行
範囲テーブル1700は、DOループ内の実行文の計算
分割後の実行範囲、すなわち、DOループ内の実行文の
計算が各プロセスに分割されたとき、各プロセスがその
文を実行するときのループ繰り返し範囲を表わしてい
る。文実行範囲テーブル1700は、nextp1706,p
lownum1707,puppnum1708,slowlim1709,
supplim1710から構成される。nextp1706は、次
の文実行範囲テーブルへのポインタを表わす。plownum
1707は、この文実行範囲テーブルを持つプロセス番
号の下限値である。puppnum1708は、この文実行範
囲テーブルを持つプロセス番号の上限値である。slowli
m1709は、plownum1707とpuppnum1708が示
す範囲内にあるプロセス番号を持つプロセスが、文を実
行するときのループ繰り返し範囲の下限値である。supp
lim1710は、plownum1707とpuppnum1708が
示す範囲内にあるプロセス番号を持つプロセスが、文を
実行するときのループ繰り返し範囲の上限値である。
NFO,LINFOによって指される文実行範囲テーブル170
0,ループテーブル1701について説明する。文実行
範囲テーブル1700は、DOループ内の実行文の計算
分割後の実行範囲、すなわち、DOループ内の実行文の
計算が各プロセスに分割されたとき、各プロセスがその
文を実行するときのループ繰り返し範囲を表わしてい
る。文実行範囲テーブル1700は、nextp1706,p
lownum1707,puppnum1708,slowlim1709,
supplim1710から構成される。nextp1706は、次
の文実行範囲テーブルへのポインタを表わす。plownum
1707は、この文実行範囲テーブルを持つプロセス番
号の下限値である。puppnum1708は、この文実行範
囲テーブルを持つプロセス番号の上限値である。slowli
m1709は、plownum1707とpuppnum1708が示
す範囲内にあるプロセス番号を持つプロセスが、文を実
行するときのループ繰り返し範囲の下限値である。supp
lim1710は、plownum1707とpuppnum1708が
示す範囲内にあるプロセス番号を持つプロセスが、文を
実行するときのループ繰り返し範囲の上限値である。
【0038】ループテーブル1701は、DOループの
計算分割後の実行範囲を表わすループ実行範囲テーブル
1702を指すとともに、ループの付加情報を表わすテ
ーブルであり、lptblp1711およびnstmt1712か
ら構成される。lptblp1711はループ実行範囲テーブ
ル1702へのポインタを表わす。nstmt1712はル
ープ内の実行文の数を表わす。
計算分割後の実行範囲を表わすループ実行範囲テーブル
1702を指すとともに、ループの付加情報を表わすテ
ーブルであり、lptblp1711およびnstmt1712か
ら構成される。lptblp1711はループ実行範囲テーブ
ル1702へのポインタを表わす。nstmt1712はル
ープ内の実行文の数を表わす。
【0039】ループ実行範囲テーブル1702は、DO
ループの計算分割後の実行範囲、すなわち、DOループ
の計算が各プロセスに分割されたとき、各プロセスがル
ープを実行するときのループ繰り返し範囲を表わすテー
ブルであり、nextp1713,plownum1714,puppnu
m1715,llowlim1716,lupplim1717,lary
(lary2)1718,selectp1719,snum1720,
sflag1721から構成される。nextp1713は、次の
ループ実行範囲テーブルへのポインタを表わす。plownu
m1714は、このループ実行範囲テーブルを持つプロ
セス番号の下限値である。puppnum1715は、このル
ープ実行範囲テーブルを持つプロセス番号の上限値であ
る。llowlim1716は、plownum1714とpuppnum1
715が示す範囲内にあるプロセス番号を持つプロセス
が、ループを実行するときのループ繰り返し範囲の下限
値である。lupplim1717は、plownum1714とpupp
num1715が示す範囲内にあるプロセス番号を持つプ
ロセスが、ループを実行するときのループ繰り返し範囲
の上限値である。lary(lary2)1718は、ポインタ
配列1703の要素数を表わす数である。これは以下の
説明の都合上、初めはlaryと言う変数名で参照される
が、後にlary2という変数名に変わる。selectp1719
は、ポインタ配列1703へのポインタである。snum1
720とsflag1721は第1の実施例では用いない。
ループの計算分割後の実行範囲、すなわち、DOループ
の計算が各プロセスに分割されたとき、各プロセスがル
ープを実行するときのループ繰り返し範囲を表わすテー
ブルであり、nextp1713,plownum1714,puppnu
m1715,llowlim1716,lupplim1717,lary
(lary2)1718,selectp1719,snum1720,
sflag1721から構成される。nextp1713は、次の
ループ実行範囲テーブルへのポインタを表わす。plownu
m1714は、このループ実行範囲テーブルを持つプロ
セス番号の下限値である。puppnum1715は、このル
ープ実行範囲テーブルを持つプロセス番号の上限値であ
る。llowlim1716は、plownum1714とpuppnum1
715が示す範囲内にあるプロセス番号を持つプロセス
が、ループを実行するときのループ繰り返し範囲の下限
値である。lupplim1717は、plownum1714とpupp
num1715が示す範囲内にあるプロセス番号を持つプ
ロセスが、ループを実行するときのループ繰り返し範囲
の上限値である。lary(lary2)1718は、ポインタ
配列1703の要素数を表わす数である。これは以下の
説明の都合上、初めはlaryと言う変数名で参照される
が、後にlary2という変数名に変わる。selectp1719
は、ポインタ配列1703へのポインタである。snum1
720とsflag1721は第1の実施例では用いない。
【0040】ポインタ配列1703は、非交差区間テー
ブル1704を指すポインタからなる配列である。その
要素数はループ実行範囲テーブル1702中のlary(la
ry2)1718に格納されている。
ブル1704を指すポインタからなる配列である。その
要素数はループ実行範囲テーブル1702中のlary(la
ry2)1718に格納されている。
【0041】非交差区間テーブル1704は、各プロセ
ス毎のループ実行範囲を、「非交差区間」と呼ぶ互いに
重なりのない区間に分割した時の区間情報を表わすテー
ブルであり、nextp1722,nlowlim1723,nuppli
m1724,length1725,orderp1726から構成
される。nextp1722は次の非交差区間テーブルへの
ポインタである。nlowlim1723は非交差区間の下限
値である。nupplim1724は非交差区間の上限値であ
る。length1725は非交差区間の区間の長さである。
orderp1726は第1の実施例では用いない。
ス毎のループ実行範囲を、「非交差区間」と呼ぶ互いに
重なりのない区間に分割した時の区間情報を表わすテー
ブルであり、nextp1722,nlowlim1723,nuppli
m1724,length1725,orderp1726から構成
される。nextp1722は次の非交差区間テーブルへの
ポインタである。nlowlim1723は非交差区間の下限
値である。nupplim1724は非交差区間の上限値であ
る。length1725は非交差区間の区間の長さである。
orderp1726は第1の実施例では用いない。
【0042】図18は、SINFO1608が指す文実行範
囲テーブルを模式的に表したものである。文実行範囲テ
ーブルは、3つのプロセス範囲(プロセス番号0,1〜
2,3)に対応して、3つの文実行範囲テーブル180
0、1801、1802がポインタ(図17のnextp参
照)で順に接続されている。最初の文実行範囲テーブル
1800は図4の文409〜文411に対応している。
文409はプロセス番号が0の場合を扱うための判定文
である。これは1803でプロセス番号の下限値が
「0」、1804でプロセス番号の上限値が「0」であ
ることに対応している。このとき、文410は実行文3
07を実行するループ範囲の下限値LOWLIM2が「1」で
あることを表わしているので、1805は「1」であ
る。同様にして文411は実行文307を実行するルー
プ範囲の上限値UPPLIM2が「128」であることを表わ
しているので、1806は「128」である。
囲テーブルを模式的に表したものである。文実行範囲テ
ーブルは、3つのプロセス範囲(プロセス番号0,1〜
2,3)に対応して、3つの文実行範囲テーブル180
0、1801、1802がポインタ(図17のnextp参
照)で順に接続されている。最初の文実行範囲テーブル
1800は図4の文409〜文411に対応している。
文409はプロセス番号が0の場合を扱うための判定文
である。これは1803でプロセス番号の下限値が
「0」、1804でプロセス番号の上限値が「0」であ
ることに対応している。このとき、文410は実行文3
07を実行するループ範囲の下限値LOWLIM2が「1」で
あることを表わしているので、1805は「1」であ
る。同様にして文411は実行文307を実行するルー
プ範囲の上限値UPPLIM2が「128」であることを表わ
しているので、1806は「128」である。
【0043】次の文実行範囲テーブル1801は図4の
文412〜文414に対応している。文412はプロセ
ス番号が1から2までの場合を扱う判定文である。これ
は1807でプロセス番号の下限値が「1」、1808
でプロセス番号の上限値が「2」であることに対応して
いる。このとき、文413は実行文307を実行するル
ープ範囲の下限値LOWLIM2が「1」であることを表わし
ているので、1809は「1」である。同様にして文4
14は実行文307を実行するループ範囲の上限値UPPL
IM2が「128」であることを表わしているので、18
10は「128」である。
文412〜文414に対応している。文412はプロセ
ス番号が1から2までの場合を扱う判定文である。これ
は1807でプロセス番号の下限値が「1」、1808
でプロセス番号の上限値が「2」であることに対応して
いる。このとき、文413は実行文307を実行するル
ープ範囲の下限値LOWLIM2が「1」であることを表わし
ているので、1809は「1」である。同様にして文4
14は実行文307を実行するループ範囲の上限値UPPL
IM2が「128」であることを表わしているので、18
10は「128」である。
【0044】次の文実行範囲テーブル1802は図4の
文415〜文417に対応している。文415はプロセ
ス番号が3の場合を扱う判定文である。これは1811
でプロセス番号の下限値が「3」、1812でプロセス
番号の上限値が「3」であることに対応している。この
とき、文416は実行文307を実行するループ範囲の
下限値LOWLIM2が「1」であることを表わしているの
で、1813は「1」である。同様にして文417は実
行文307を実行するループ範囲の上限値UPPLIM2が
「128」であることを表わしているので、1814は
「128」である。
文415〜文417に対応している。文415はプロセ
ス番号が3の場合を扱う判定文である。これは1811
でプロセス番号の下限値が「3」、1812でプロセス
番号の上限値が「3」であることに対応している。この
とき、文416は実行文307を実行するループ範囲の
下限値LOWLIM2が「1」であることを表わしているの
で、1813は「1」である。同様にして文417は実
行文307を実行するループ範囲の上限値UPPLIM2が
「128」であることを表わしているので、1814は
「128」である。
【0045】図19は、SINFO1614が指す文実行範
囲テーブルを模式的に表わしたものである。文実行範囲
テーブルは、3つのプロセス範囲(プロセス番号0,1
〜2,3)に対応して、3つの文実行範囲テーブル19
00、1901、1902がポインタで順に接続されて
いる。最初の文実行範囲テーブル1900は図4の文4
18〜文420に対応している。文418はプロセス番
号が0の場合を扱う判定文である。これは1903でプ
ロセス番号の下限値が「0」、1904でプロセス番号
の上限値が「0」であることに対応している。このと
き、文419は実行文309を実行するループ範囲の下
限値LOWLIM3が「1」であることを表わしているので、
1905は「1」である。同様にして文420は実行文
309を実行するループ範囲の上限値UPPLIM3が「12
7」であることを表わしているので、1906は「12
7」である。
囲テーブルを模式的に表わしたものである。文実行範囲
テーブルは、3つのプロセス範囲(プロセス番号0,1
〜2,3)に対応して、3つの文実行範囲テーブル19
00、1901、1902がポインタで順に接続されて
いる。最初の文実行範囲テーブル1900は図4の文4
18〜文420に対応している。文418はプロセス番
号が0の場合を扱う判定文である。これは1903でプ
ロセス番号の下限値が「0」、1904でプロセス番号
の上限値が「0」であることに対応している。このと
き、文419は実行文309を実行するループ範囲の下
限値LOWLIM3が「1」であることを表わしているので、
1905は「1」である。同様にして文420は実行文
309を実行するループ範囲の上限値UPPLIM3が「12
7」であることを表わしているので、1906は「12
7」である。
【0046】次の文実行範囲テーブル1901は図4の
文421〜文423に対応している。文421はプロセ
ス番号が1から2までの場合を扱う判定文である。これ
は1907でプロセス番号の下限値が「1」、1908
でプロセス番号の上限値が「2」であることに対応して
いる。このとき、文422は実行文309を実行するル
ープ範囲の下限値LOWLIM3が「0」であることを表わし
ているので、1909は「0」である。同様にして文4
23は実行文307を実行するループ範囲の上限値UPPL
IM3が「127」であることを表わしているので、19
10は「127」である。次の文実行範囲テーブル19
02は図4の文424〜文426に対応している。文4
24はプロセス番号が3の場合を扱う判定文である。こ
れは1911でプロセス番号の下限値が「3」、191
2でプロセス番号の上限値が「3」であることに対応し
ている。このとき、文425は実行文309を実行する
ループ範囲の下限値LOWLIM3が「0」であることを表わ
しているので、1913は「0」である。同様にして文
426は実行文307を実行するループ範囲の上限値UP
PLIM3が「128」であることを表わしているので、1
914は「128」である。
文421〜文423に対応している。文421はプロセ
ス番号が1から2までの場合を扱う判定文である。これ
は1907でプロセス番号の下限値が「1」、1908
でプロセス番号の上限値が「2」であることに対応して
いる。このとき、文422は実行文309を実行するル
ープ範囲の下限値LOWLIM3が「0」であることを表わし
ているので、1909は「0」である。同様にして文4
23は実行文307を実行するループ範囲の上限値UPPL
IM3が「127」であることを表わしているので、19
10は「127」である。次の文実行範囲テーブル19
02は図4の文424〜文426に対応している。文4
24はプロセス番号が3の場合を扱う判定文である。こ
れは1911でプロセス番号の下限値が「3」、191
2でプロセス番号の上限値が「3」であることに対応し
ている。このとき、文425は実行文309を実行する
ループ範囲の下限値LOWLIM3が「0」であることを表わ
しているので、1913は「0」である。同様にして文
426は実行文307を実行するループ範囲の上限値UP
PLIM3が「128」であることを表わしているので、1
914は「128」である。
【0047】図20は、LINFO1601が指すループテ
ーブルとループ実行範囲テーブルを表わしたものであ
る。ループテーブル2000はループ実行範囲テーブル
をポインタで接続し、ループ実行範囲テーブルは、3つ
のプロセス範囲(プロセス番号0,1〜2,3)に対応
して、3つのループ実行範囲テーブル2001、200
2、2003がポインタ(図17の1713)で順に接
続されている。ループテーブル2000は図2の文20
6に対応しており、ループ中に2つの実行文があること
から、2004は「2」となる。最初のループ実行範囲
テーブル2001は図4の文400〜文402に対応し
ている。文400はプロセス番号が0の場合を扱う判定
文である。これは2005でプロセス番号の下限値が
「0」、2006でプロセス番号の上限値が「0」であ
ることに対応している。このとき、文401はループ3
05のループ範囲の下限値LOWLIM1が「1」であること
を表わしているので、2007は「1」である。同様に
して文402はループ305のループ範囲の上限値UPPL
IM1が「128」であることを表わしているので、20
08は「128」である。
ーブルとループ実行範囲テーブルを表わしたものであ
る。ループテーブル2000はループ実行範囲テーブル
をポインタで接続し、ループ実行範囲テーブルは、3つ
のプロセス範囲(プロセス番号0,1〜2,3)に対応
して、3つのループ実行範囲テーブル2001、200
2、2003がポインタ(図17の1713)で順に接
続されている。ループテーブル2000は図2の文20
6に対応しており、ループ中に2つの実行文があること
から、2004は「2」となる。最初のループ実行範囲
テーブル2001は図4の文400〜文402に対応し
ている。文400はプロセス番号が0の場合を扱う判定
文である。これは2005でプロセス番号の下限値が
「0」、2006でプロセス番号の上限値が「0」であ
ることに対応している。このとき、文401はループ3
05のループ範囲の下限値LOWLIM1が「1」であること
を表わしているので、2007は「1」である。同様に
して文402はループ305のループ範囲の上限値UPPL
IM1が「128」であることを表わしているので、20
08は「128」である。
【0048】次のループ実行範囲テーブル2002は図
4の文403〜文405に対応している。文403はプ
ロセス番号が1から2までの場合を扱う判定文である。
これは2009でプロセス番号の下限値が「1」、20
10でプロセス番号の上限値が「2」であることに対応
している。このとき、文404はループ305のループ
範囲の下限値LOWLIM1が「0」であることを表わしてい
るので、2011は「0」である。同様にして文405
はループ305のループ範囲の上限値UPPLIM1が「12
8」であることを表わしているので、2012は「12
8」である。次のループ実行範囲テーブル2003は図
4の文406〜文408に対応している。文406はプ
ロセス番号が3の場合を扱う判定文である。これは20
13でプロセス番号の下限値が「3」、2014でプロ
セス番号の上限値が「3」であることに対応している。
このとき、文407はループ305のループ範囲の下限
値LOWLIM1が「0」であることを表わしているので、2
015は「0」である。同様にして文408はループ3
05のループ範囲の上限値UPPLIM1が「128」である
ことを表わしているので、2016は「128」であ
る。ループ実行範囲テーブル2001、2002、20
03の上記以外の欄には、初期化されて「0」が入って
いる。
4の文403〜文405に対応している。文403はプ
ロセス番号が1から2までの場合を扱う判定文である。
これは2009でプロセス番号の下限値が「1」、20
10でプロセス番号の上限値が「2」であることに対応
している。このとき、文404はループ305のループ
範囲の下限値LOWLIM1が「0」であることを表わしてい
るので、2011は「0」である。同様にして文405
はループ305のループ範囲の上限値UPPLIM1が「12
8」であることを表わしているので、2012は「12
8」である。次のループ実行範囲テーブル2003は図
4の文406〜文408に対応している。文406はプ
ロセス番号が3の場合を扱う判定文である。これは20
13でプロセス番号の下限値が「3」、2014でプロ
セス番号の上限値が「3」であることに対応している。
このとき、文407はループ305のループ範囲の下限
値LOWLIM1が「0」であることを表わしているので、2
015は「0」である。同様にして文408はループ3
05のループ範囲の上限値UPPLIM1が「128」である
ことを表わしているので、2016は「128」であ
る。ループ実行範囲テーブル2001、2002、20
03の上記以外の欄には、初期化されて「0」が入って
いる。
【0049】次に、上記図16〜図20を入力として、
計算分割最適化部106が行なう処理を、図1、図9〜
図15、および図21〜図26を用いて説明する。計算
分割最適化部106において、全てのループに対して、
非交差区間列生成部107,ループ複製部108,コー
ド変換部109の処理が行われる。まず、非交差区間列
生成部107について説明する。非交差区間列生成部1
07は、各プロセッサ毎に、指定された区間選択法を用
いて非交差区間列を生成する部分である。図9は非交差
区間列生成部107の処理の説明図である。まず、ステ
ップ900において未処理のプロセス範囲があるか否か
を判定する。今の場合、プロセス範囲の数はループ実行
範囲テーブルや文実行範囲テーブルの数と同じになるよ
うに設計されているので、プロセス範囲は図20の20
05、2006、2009、2010、2013、10
14の値から分かるように、0、1〜2、3の3つがあ
るため、ステップ900は判定結果はYESとなる。以
下、プロセス範囲は、0、1〜2、3の順に動かし、以
降の処理はすべて指定されたプロセス範囲内で行なうも
のとする。
計算分割最適化部106が行なう処理を、図1、図9〜
図15、および図21〜図26を用いて説明する。計算
分割最適化部106において、全てのループに対して、
非交差区間列生成部107,ループ複製部108,コー
ド変換部109の処理が行われる。まず、非交差区間列
生成部107について説明する。非交差区間列生成部1
07は、各プロセッサ毎に、指定された区間選択法を用
いて非交差区間列を生成する部分である。図9は非交差
区間列生成部107の処理の説明図である。まず、ステ
ップ900において未処理のプロセス範囲があるか否か
を判定する。今の場合、プロセス範囲の数はループ実行
範囲テーブルや文実行範囲テーブルの数と同じになるよ
うに設計されているので、プロセス範囲は図20の20
05、2006、2009、2010、2013、10
14の値から分かるように、0、1〜2、3の3つがあ
るため、ステップ900は判定結果はYESとなる。以
下、プロセス範囲は、0、1〜2、3の順に動かし、以
降の処理はすべて指定されたプロセス範囲内で行なうも
のとする。
【0050】次に、ステップ901において、2個の整
数からなる構造体ARYの配列で、要素数がループ中の文
の数の2倍のものを確保する。今の場合、ループ中の文
の数は図20の2004(ループ中の実行文の数)の値
が「2」なので、ステップ901では要素数が4個(2
の2倍)の構造体ARYの配列を確保する。図10は構造
体ARYを説明するための図である。構造体ARYは2つの構
成要素からなり、それぞれ整数型である。第1の構成要
素LIM1000には区間の上限値または下限値を表わす
数が格納され、第2の構成要素FLAG1001にはLIM1
000に格納された数が上限値であるか下限値であるか
の区別を表わす数が格納される。
数からなる構造体ARYの配列で、要素数がループ中の文
の数の2倍のものを確保する。今の場合、ループ中の文
の数は図20の2004(ループ中の実行文の数)の値
が「2」なので、ステップ901では要素数が4個(2
の2倍)の構造体ARYの配列を確保する。図10は構造
体ARYを説明するための図である。構造体ARYは2つの構
成要素からなり、それぞれ整数型である。第1の構成要
素LIM1000には区間の上限値または下限値を表わす
数が格納され、第2の構成要素FLAG1001にはLIM1
000に格納された数が上限値であるか下限値であるか
の区別を表わす数が格納される。
【0051】次に、非交差基本区間列生成ステップ90
2の処理を行なう。非交差基本区間列生成ステップ90
2は、任意の1つのプロセスに対して、ループ中の各文
の実行範囲の上限値、下限値から、重なりのない区間列
である非交差区間列を生成するステップである。図11
は非交差基本区間列生成ステップ902の詳細を説明す
る図である。図11では、まずステップ1100におい
て、jが1から(ループ中の文の数)まで、ARY(2*j-
1).LIMにj番目の文の実行範囲の下限値を、ARY(2*j-
1).FLAGに1を、ARY(2*j).LIMにj番目の文の実行範囲
の上限値を、ARY(2*j).FLAGに2を格納する。今の場
合、(ループ中の文の数)は2なので、以下、ステップ
1100における代入処理を2回行なう。j=1の時、
1番目の文の実行範囲の下限値は、図18におけるプロ
セス範囲が0の場合を考えればよいのだから、1805
より「1」となる。j=1の時、ARY(2*j-1)=ARY(1)な
ので、ARY(1).LIMには「1」が格納される。ここで、AR
Y(1).LIMは、1番目の配列要素ARY(1)の第1の構成要素
LIMを表わす。同様にして、1番目の文の実行範囲の上
限値は1806より「128」となり、ARY(2).LIMに
は「128」が格納される。j=2の時、2番目の文の
実行範囲の下限値は、図19における、プロセス範囲が
0の場合を考えればよいのだから、1905より「1」
となる。j=2の時、ARY(2*j-1)=ARY(3)なので、ARY
(3).LIMには「1」が格納される。同様にして、2番目
の文の実行範囲の上限値は1906より「127」とな
り、ARY(4).LIMには「127」が格納される。
2の処理を行なう。非交差基本区間列生成ステップ90
2は、任意の1つのプロセスに対して、ループ中の各文
の実行範囲の上限値、下限値から、重なりのない区間列
である非交差区間列を生成するステップである。図11
は非交差基本区間列生成ステップ902の詳細を説明す
る図である。図11では、まずステップ1100におい
て、jが1から(ループ中の文の数)まで、ARY(2*j-
1).LIMにj番目の文の実行範囲の下限値を、ARY(2*j-
1).FLAGに1を、ARY(2*j).LIMにj番目の文の実行範囲
の上限値を、ARY(2*j).FLAGに2を格納する。今の場
合、(ループ中の文の数)は2なので、以下、ステップ
1100における代入処理を2回行なう。j=1の時、
1番目の文の実行範囲の下限値は、図18におけるプロ
セス範囲が0の場合を考えればよいのだから、1805
より「1」となる。j=1の時、ARY(2*j-1)=ARY(1)な
ので、ARY(1).LIMには「1」が格納される。ここで、AR
Y(1).LIMは、1番目の配列要素ARY(1)の第1の構成要素
LIMを表わす。同様にして、1番目の文の実行範囲の上
限値は1806より「128」となり、ARY(2).LIMに
は「128」が格納される。j=2の時、2番目の文の
実行範囲の下限値は、図19における、プロセス範囲が
0の場合を考えればよいのだから、1905より「1」
となる。j=2の時、ARY(2*j-1)=ARY(3)なので、ARY
(3).LIMには「1」が格納される。同様にして、2番目
の文の実行範囲の上限値は1906より「127」とな
り、ARY(4).LIMには「127」が格納される。
【0052】図21はステップ1100の処理の結果、
値を格納された構造体の配列アレイを表わしたものであ
る。配列アレイ2100はプロセス範囲が0の場合に対
応するアレイである。ARY(1).LIM、ARY(2).LIM、ARY
(3).LIM、ARY(4).LIMはそれぞれ、2103、210
4、2105、2106に対応し、上の説明で格納され
た値が入っている。ステップ1100における、”ARY
(2*j-1).FLAG←1”、”ARY(2*j).FLAG←2”の処理結
果は2107、2108、2109、2110に対応し
ている。
値を格納された構造体の配列アレイを表わしたものであ
る。配列アレイ2100はプロセス範囲が0の場合に対
応するアレイである。ARY(1).LIM、ARY(2).LIM、ARY
(3).LIM、ARY(4).LIMはそれぞれ、2103、210
4、2105、2106に対応し、上の説明で格納され
た値が入っている。ステップ1100における、”ARY
(2*j-1).FLAG←1”、”ARY(2*j).FLAG←2”の処理結
果は2107、2108、2109、2110に対応し
ている。
【0053】次に、ステップ1101において、配列ア
レイをLIMとFLAGによる辞書式順序で昇順にソートす
る。即ち、LIMの値が小さい配列要素を前に移動し、LIM
の値が同じ場合には、FLAGの値が小さいものを前に移動
する。次に、ステップ1102で、ソートされた配列ア
レイから重複を除いたものをARY(1),...,ARY(lary)とす
る。図22は、以上の処理結果の、構造体の配列アレイ
を表わしたものである。例えば、図21の配列アレイ2
100に対して、ステップ1101、1102を施した
結果が配列アレイ2200である。図21の配列アレイ
2100において、2105と2109は2103と2
107と重複しているので、図22の配列アレイ220
0では除かれている。このとき、配列要素の数laryは
「3」になる。
レイをLIMとFLAGによる辞書式順序で昇順にソートす
る。即ち、LIMの値が小さい配列要素を前に移動し、LIM
の値が同じ場合には、FLAGの値が小さいものを前に移動
する。次に、ステップ1102で、ソートされた配列ア
レイから重複を除いたものをARY(1),...,ARY(lary)とす
る。図22は、以上の処理結果の、構造体の配列アレイ
を表わしたものである。例えば、図21の配列アレイ2
100に対して、ステップ1101、1102を施した
結果が配列アレイ2200である。図21の配列アレイ
2100において、2105と2109は2103と2
107と重複しているので、図22の配列アレイ220
0では除かれている。このとき、配列要素の数laryは
「3」になる。
【0054】次に、ステップ1103、1104の説明
を図22、図23を用いて行なう。ステップ1103で
は、(lary−1)個の非交差区間テーブルNIIAを確保
し、ポインタで順に接続する。図22の配列アレイ22
00の場合、laryが3なので、2個(=lary−1)の非
交差区間テーブルNIIAを確保し、ポインタで順に接続す
る。図23はステップ1103、1104の結果の、非
交差区間テーブルNIIAを表わしたものである。ステップ
1103で確保された2個の非交差区間テーブルNIIA
は、図23(a)の非交差区間テーブル2300、23
01に対応している。両者は矢印で示される方法でポイ
ンタで接続されている。
を図22、図23を用いて行なう。ステップ1103で
は、(lary−1)個の非交差区間テーブルNIIAを確保
し、ポインタで順に接続する。図22の配列アレイ22
00の場合、laryが3なので、2個(=lary−1)の非
交差区間テーブルNIIAを確保し、ポインタで順に接続す
る。図23はステップ1103、1104の結果の、非
交差区間テーブルNIIAを表わしたものである。ステップ
1103で確保された2個の非交差区間テーブルNIIA
は、図23(a)の非交差区間テーブル2300、23
01に対応している。両者は矢印で示される方法でポイ
ンタで接続されている。
【0055】次に、ステップ1104において、全ての
非交差区間テーブルNIIAについて、j=1から(lary−
1)まで、ARY(j).FLAG=1ならNIIA.nlowlimにARY(j).
LIMを、ARY(j).FLAG=2ならNIIA.nlowlimにARY(j).LIM
+1を、ARY(j+1).FLAG=1ならNIIA.nupplimにARY(j+
1).LIM-1を、ARY(j+1).FLAG=2ならNIIA.nupplimにAR
Y(j+1).LIMを格納する。以下、ステップ1104の処理
を、図22の配列アレイ2200と図23(a)の2つ
の非交差区間テーブル2300、2301を用いて説明
する。この場合、laryが3なので、jは1から2(=j
−1))までの範囲を動く。j=1の時、非交差区間テ
ーブル2300を結果の格納に用いる。図22の配列ア
レイ2200のの2107よりARY(1).FLAG=1なので、
NIIA.nlowlim2307には2103に対応したARY(1).
LIM=「1」が入る。また、2110よりARY(2).FLAG=
2なので、NIIA.nupplim2308には2106に対応し
たARY(2).LIM=「127」が入る。なお、2309、
2310は初期化により「0」が格納されている。j=
2の時、非交差区間テーブル2301を結果の格納に用
いる。図22の配列アレイ2200の2110よりARY
(2).FLAG=2なので、NIIA.nlowlim2311には210
6に対応したARY(2).LIM=127に1を加えた「12
8」が入る。また、2108よりARY(3).FLAG=2なの
で、NIIA.nupplim2312には2104に対応したARY
(3).LIM=「128」が入る。なお、2313、231
4は初期化により「0」が格納されている。
非交差区間テーブルNIIAについて、j=1から(lary−
1)まで、ARY(j).FLAG=1ならNIIA.nlowlimにARY(j).
LIMを、ARY(j).FLAG=2ならNIIA.nlowlimにARY(j).LIM
+1を、ARY(j+1).FLAG=1ならNIIA.nupplimにARY(j+
1).LIM-1を、ARY(j+1).FLAG=2ならNIIA.nupplimにAR
Y(j+1).LIMを格納する。以下、ステップ1104の処理
を、図22の配列アレイ2200と図23(a)の2つ
の非交差区間テーブル2300、2301を用いて説明
する。この場合、laryが3なので、jは1から2(=j
−1))までの範囲を動く。j=1の時、非交差区間テ
ーブル2300を結果の格納に用いる。図22の配列ア
レイ2200のの2107よりARY(1).FLAG=1なので、
NIIA.nlowlim2307には2103に対応したARY(1).
LIM=「1」が入る。また、2110よりARY(2).FLAG=
2なので、NIIA.nupplim2308には2106に対応し
たARY(2).LIM=「127」が入る。なお、2309、
2310は初期化により「0」が格納されている。j=
2の時、非交差区間テーブル2301を結果の格納に用
いる。図22の配列アレイ2200の2110よりARY
(2).FLAG=2なので、NIIA.nlowlim2311には210
6に対応したARY(2).LIM=127に1を加えた「12
8」が入る。また、2108よりARY(3).FLAG=2なの
で、NIIA.nupplim2312には2104に対応したARY
(3).LIM=「128」が入る。なお、2313、231
4は初期化により「0」が格納されている。
【0056】次に、非交差区間列選択ステップ903を
図12、図13、図24、図25を用いて説明する。非
交差区間列選択ステップ903は、図11で生成した非
交差基本区間列のうち、図13で説明する区間選択法に
より選択されなかった区間について、それらの内で隣接
する区間があれば融合するステップである。図12は非
交差区間列選択ステップ903を詳細に説明するための
図である。ステップ1200では、要素数(lary−1)
の配列Selectを確保し、(lary−1)個の非交差区間テ
ーブルのアドレスを格納する。今の場合、laryが3なの
で、要素数2(=lary−1)の配列Selectを確保し、2
個の非交差区間テーブルのアドレスを格納する。要素数
2の配列Selectを表わしたのが、図24(a)の240
0、2401で、2個の非交差区間テーブル2300、
2301へ向かう矢印がポインタを表わしている。
図12、図13、図24、図25を用いて説明する。非
交差区間列選択ステップ903は、図11で生成した非
交差基本区間列のうち、図13で説明する区間選択法に
より選択されなかった区間について、それらの内で隣接
する区間があれば融合するステップである。図12は非
交差区間列選択ステップ903を詳細に説明するための
図である。ステップ1200では、要素数(lary−1)
の配列Selectを確保し、(lary−1)個の非交差区間テ
ーブルのアドレスを格納する。今の場合、laryが3なの
で、要素数2(=lary−1)の配列Selectを確保し、2
個の非交差区間テーブルのアドレスを格納する。要素数
2の配列Selectを表わしたのが、図24(a)の240
0、2401で、2個の非交差区間テーブル2300、
2301へ向かう矢印がポインタを表わしている。
【0057】次に区間選択ステップ1201の処理を行
なう。区間選択ステップ1201は、図11で生成した
非交差基本区間の内、与えられた指定方法により区間を
選択する区間選択を行なうステップである。本実施例で
は区間の長さが長い順に指定個数まで選択する区間選択
法について説明する。他の区間選択法として区間の長さ
が長い順に長さの和が指定の値に達するまで選択する区
間選択法がある。この区間選択法は、指定個数まで選択
する本実施例の処理に、区間の長さを求める処理と、上
記長さの和が指定値に達したか否かを判定する処理を付
加すればよい。
なう。区間選択ステップ1201は、図11で生成した
非交差基本区間の内、与えられた指定方法により区間を
選択する区間選択を行なうステップである。本実施例で
は区間の長さが長い順に指定個数まで選択する区間選択
法について説明する。他の区間選択法として区間の長さ
が長い順に長さの和が指定の値に達するまで選択する区
間選択法がある。この区間選択法は、指定個数まで選択
する本実施例の処理に、区間の長さを求める処理と、上
記長さの和が指定値に達したか否かを判定する処理を付
加すればよい。
【0058】図13は区間選択ステップ1201の詳細
なフローチャートである。図13において、ステップ1
300で、全ての非交差区間テーブルNIIAについて、j=
1〜(lary−1)まで、NIAA.lengthを、NIIA.nupplim-N
IIA.nlowlim+1にする処理を行なう。今の場合、lary
が「3」なので、2個(=lary−1)の非交差区間テー
ブル2300、2301について、jが1から2までの
処理を行なう。非交差区間テーブル2300におけるNI
IA.nupplimは2308より「127」であり、NIIA.nlo
wlimは2307より1である。従って、NIIA.length2
309には「127」が入る。また、非交差区間テーブ
ル2301におけるNIIA.nupplimは2312より「12
8」であり、NIIA.nlowlimは2311より「128」で
ある。従って、NIIA.length2313には「1」が入
る。これらの結果を図24(a)に示す。図24は区間
選択ステップ1201の処理後の配列Selectと非交差区
間テーブルを示したものである。
なフローチャートである。図13において、ステップ1
300で、全ての非交差区間テーブルNIIAについて、j=
1〜(lary−1)まで、NIAA.lengthを、NIIA.nupplim-N
IIA.nlowlim+1にする処理を行なう。今の場合、lary
が「3」なので、2個(=lary−1)の非交差区間テー
ブル2300、2301について、jが1から2までの
処理を行なう。非交差区間テーブル2300におけるNI
IA.nupplimは2308より「127」であり、NIIA.nlo
wlimは2307より1である。従って、NIIA.length2
309には「127」が入る。また、非交差区間テーブ
ル2301におけるNIIA.nupplimは2312より「12
8」であり、NIIA.nlowlimは2311より「128」で
ある。従って、NIIA.length2313には「1」が入
る。これらの結果を図24(a)に示す。図24は区間
選択ステップ1201の処理後の配列Selectと非交差区
間テーブルを示したものである。
【0059】ステップ1301では、ステップ1300
で求めたlengthをキーにして配列Selectを降順にソート
する。2300におけるlength、即ち、NIIA.lengthは
「127」であり、2301におけるlength、即ち、NI
IA.lengthは「1」なので、配列Select2400、24
01のソート結果は元のままである。次のステップ13
02では、Select(1)からSelect(ns)までが指す非交差
区間テーブルを選択する。今の場合、ns=1として、
Select(1)が指す非交差区間テーブルのみを選択する。
ここで、nsは選択した非交差区間の数を表わし、以降、
ns=1とする。以上でステップ1201の処理を終わ
る。以降の処理では、選択したことを表わす印は何も必
要なく、単にnsに値が保存されていればよい。
で求めたlengthをキーにして配列Selectを降順にソート
する。2300におけるlength、即ち、NIIA.lengthは
「127」であり、2301におけるlength、即ち、NI
IA.lengthは「1」なので、配列Select2400、24
01のソート結果は元のままである。次のステップ13
02では、Select(1)からSelect(ns)までが指す非交差
区間テーブルを選択する。今の場合、ns=1として、
Select(1)が指す非交差区間テーブルのみを選択する。
ここで、nsは選択した非交差区間の数を表わし、以降、
ns=1とする。以上でステップ1201の処理を終わ
る。以降の処理では、選択したことを表わす印は何も必
要なく、単にnsに値が保存されていればよい。
【0060】次に、ステップ1202では、Select(ns
+1),・・・Select(lary-1)をそれらが指す非交差区間テ
ーブルの下限値をキーにして昇順にソートする。今の場
合、nsが1、laryが3なので、(ns+1)=(lary-1)=
2であり、1つの配列要素Select(2)2401が指す非
交差区間テーブルを下限値をキーにして昇順にソートす
る。配列要素は唯1つなので、ソートの結果は元のまま
である。ステップ1203では、jにns+1を、jjに
jを入れ、j<(lary-1)かつjj<(lary-1)の間、uppJ
JにSelect(jj)が指すテーブルの上限値を、uppJJ1にSe
lect(jj+1)が指すテーブルの下限値を、uppJJ+1=u
ppJJ1ならSelect(j)が指すテーブルの上限値をSelect
(jj+1)が指すテーブルの上限値を格納し、jjにjj+1を
入れる。また、上記以外ならjにj+1を、jjにjj+1を入
れ、Select(j)にSelect(jj)を入れる。今の場合、ns
が「1」、laryが「3」なので、jの初期値は「2」、
ステップ1203中のループはjが2未満の時、ループ
処理を行なう。従って、今の場合jが2未満でないの
で、ステップ1203ではループ処理を行なわない。
+1),・・・Select(lary-1)をそれらが指す非交差区間テ
ーブルの下限値をキーにして昇順にソートする。今の場
合、nsが1、laryが3なので、(ns+1)=(lary-1)=
2であり、1つの配列要素Select(2)2401が指す非
交差区間テーブルを下限値をキーにして昇順にソートす
る。配列要素は唯1つなので、ソートの結果は元のまま
である。ステップ1203では、jにns+1を、jjに
jを入れ、j<(lary-1)かつjj<(lary-1)の間、uppJ
JにSelect(jj)が指すテーブルの上限値を、uppJJ1にSe
lect(jj+1)が指すテーブルの下限値を、uppJJ+1=u
ppJJ1ならSelect(j)が指すテーブルの上限値をSelect
(jj+1)が指すテーブルの上限値を格納し、jjにjj+1を
入れる。また、上記以外ならjにj+1を、jjにjj+1を入
れ、Select(j)にSelect(jj)を入れる。今の場合、ns
が「1」、laryが「3」なので、jの初期値は「2」、
ステップ1203中のループはjが2未満の時、ループ
処理を行なう。従って、今の場合jが2未満でないの
で、ステップ1203ではループ処理を行なわない。
【0061】次のステップ1204では、ns≧lary-1
ならlary2にnsを、それ以外ならlary2にjを入れる。
今の場合、nsが「1」、laryが「3」なので、ns ≧
lary-1は成立せず、lary2にはj、即ち、ステップ12
03における初期値「2」が代入される。ステップ12
05では、Select(1)、・・・Select(lary2)をそれらが指
す非交差区間テーブルの下限値をキーとして昇順にソー
トする。今の場合、lary2が2なので、Select(1)240
0, Select(2)2401をそれらが指す非交差区間テー
ブルの下限値をキーにして昇順にソートする。Select
(1)2400が指す非交差区間テーブル2300の下限
値2307は「1」、Select(2)2401が指す非交差
区間テーブル2301の下限値2311は「128」な
ので、ソートの結果は元のままである。図25は非交差
区間列生成部107の処理後の、非交差区間テーブルを
表わす。
ならlary2にnsを、それ以外ならlary2にjを入れる。
今の場合、nsが「1」、laryが「3」なので、ns ≧
lary-1は成立せず、lary2にはj、即ち、ステップ12
03における初期値「2」が代入される。ステップ12
05では、Select(1)、・・・Select(lary2)をそれらが指
す非交差区間テーブルの下限値をキーとして昇順にソー
トする。今の場合、lary2が2なので、Select(1)240
0, Select(2)2401をそれらが指す非交差区間テー
ブルの下限値をキーにして昇順にソートする。Select
(1)2400が指す非交差区間テーブル2300の下限
値2307は「1」、Select(2)2401が指す非交差
区間テーブル2301の下限値2311は「128」な
ので、ソートの結果は元のままである。図25は非交差
区間列生成部107の処理後の、非交差区間テーブルを
表わす。
【0062】図9のフローチャートで示されるように、
以上でプロセス範囲が0の場合の非交差区間列生成部1
07の処理が終了する。従って、図25(a)がプロセ
ス範囲が0の場合の、非交差区間列生成部107におけ
る処理後の非交差区間テーブルの状態を表したものとな
っている。上記ステップ1205までの説明により、図
25(a)における2400、2401、2300、2
301は図24(a)のままである。以上でプロセス範
囲0の場合の非交差区間列生成部107の処理を終了す
る。
以上でプロセス範囲が0の場合の非交差区間列生成部1
07の処理が終了する。従って、図25(a)がプロセ
ス範囲が0の場合の、非交差区間列生成部107におけ
る処理後の非交差区間テーブルの状態を表したものとな
っている。上記ステップ1205までの説明により、図
25(a)における2400、2401、2300、2
301は図24(a)のままである。以上でプロセス範
囲0の場合の非交差区間列生成部107の処理を終了す
る。
【0063】次に、ステップ904で、次のプロセス範
囲に処理を移す。今の場合、プロセス範囲が1〜2の場
合がまだ存在するので、ステップ900における判定は
YESとなる。以下、プロセス範囲が0の場合と同様に
処理を行なうので、簡単に説明する。ループ中の文の数
は図20の実行文の数を示す2004より「2」なの
で、ステップ901では要素数が4個の構造体ARYの配
列を確保する。次に、非交差基本区間列生成ステップ9
02の処理を行なう。ステップ902では、その詳細を
示す図11のステップ1100における(ループ中の文
の数)は「2」なので、以下、ステップ1100の代入
処理を2回行なう。j=1の時、1番目の文の実行範囲
の下限値は、図18における、プロセス範囲が1〜2の
場合、即ち、1801を考えればよいのだから、180
9より「1」となる。同様にして、1番目の文の実行範
囲の上限値は1810より「128」となる。j=2の
時、2番目の文の実行範囲の下限値は、図19におけ
る、プロセス範囲が1〜2の場合、即ち、1901を考
えればよいのだから、1909より「0」となる。同様
にして、2番目の文の実行範囲の上限値は1910より
「127」となる。
囲に処理を移す。今の場合、プロセス範囲が1〜2の場
合がまだ存在するので、ステップ900における判定は
YESとなる。以下、プロセス範囲が0の場合と同様に
処理を行なうので、簡単に説明する。ループ中の文の数
は図20の実行文の数を示す2004より「2」なの
で、ステップ901では要素数が4個の構造体ARYの配
列を確保する。次に、非交差基本区間列生成ステップ9
02の処理を行なう。ステップ902では、その詳細を
示す図11のステップ1100における(ループ中の文
の数)は「2」なので、以下、ステップ1100の代入
処理を2回行なう。j=1の時、1番目の文の実行範囲
の下限値は、図18における、プロセス範囲が1〜2の
場合、即ち、1801を考えればよいのだから、180
9より「1」となる。同様にして、1番目の文の実行範
囲の上限値は1810より「128」となる。j=2の
時、2番目の文の実行範囲の下限値は、図19におけ
る、プロセス範囲が1〜2の場合、即ち、1901を考
えればよいのだから、1909より「0」となる。同様
にして、2番目の文の実行範囲の上限値は1910より
「127」となる。
【0064】以上より、図21の配列アレイ2101に
おける、2111、2112、2113、2114の値
は、それぞれ、「1」、「128」、「0」、「12
7」となる。また、ステップ1100における、FLAGへ
の代入文の処理結果より、2115、2116、211
7、2118はそれぞれ、「1」、「2」、「1」、
「2」となる。次に、ステップ1101においてLIMとF
LAGによる辞書式順序で昇順にソートする。その結果を
図22の配列アレイ2201に示す。ステップ1101
でソートした結果は重複を持たないので、ステップ11
01、1102の処理結果は、図22の配列アレイ22
01に示すようになる。このとき、配列要素の数laryは
「4」となる。次のステップ1103では、laryが
「4」なので、3個(=lary−1)の非交差区間テーブ
ルNIIAを確保し、ポインタで順に接続する。上で確保さ
れた3個の非交差区間テーブルNIIAは、図23(b)の
2302、2303、2304に対応している。
おける、2111、2112、2113、2114の値
は、それぞれ、「1」、「128」、「0」、「12
7」となる。また、ステップ1100における、FLAGへ
の代入文の処理結果より、2115、2116、211
7、2118はそれぞれ、「1」、「2」、「1」、
「2」となる。次に、ステップ1101においてLIMとF
LAGによる辞書式順序で昇順にソートする。その結果を
図22の配列アレイ2201に示す。ステップ1101
でソートした結果は重複を持たないので、ステップ11
01、1102の処理結果は、図22の配列アレイ22
01に示すようになる。このとき、配列要素の数laryは
「4」となる。次のステップ1103では、laryが
「4」なので、3個(=lary−1)の非交差区間テーブ
ルNIIAを確保し、ポインタで順に接続する。上で確保さ
れた3個の非交差区間テーブルNIIAは、図23(b)の
2302、2303、2304に対応している。
【0065】次に、ステップ1104において、laryが
「4」なので、jは1から3(=lary−1)までの範囲
を動く。以下、図22の配列アレイ2201と図23
(b)の非交差区間テーブルNIIA2302、2303、
2304を用いて説明する。j=1の時、2217より
ARY(1).FLAG=1なので、NIIA.nlowlim2315には21
13に対応したARY(1).LIM=「0」が入る。また、2
115よりARY(2).FLAG=1なので、NIIA.nupplim23
16には2111に対応したARY(2).LIM=1から1を
引いた「0」が入る。j=2の時、2115よりARY
(2).FLAG=1なので、NIIA.nlowlim2319には211
1に対応したARY(2).LIM=「1」が入る。また、21
18よりARY(3).FLAG=2なので、NIIA.nupplim232
0には2114に対応したARY(3).LIM=「127」が
入る。j=3の時、2118よりARY(2).FLAG=2なの
で、NIIA.nlowlim2323には2114に対応したARY
(2).LIM=127に1を加えた「128」が入る。ま
た、2116よりARY(3).FLAG=2なので、NIIA.nuppli
m2324には2112に対応したARY(3).LIM=「12
8」が入る。以上でプロセス1〜2でのステップ902
の処理を終わる。この時の結果を図23(b)に示す。
「4」なので、jは1から3(=lary−1)までの範囲
を動く。以下、図22の配列アレイ2201と図23
(b)の非交差区間テーブルNIIA2302、2303、
2304を用いて説明する。j=1の時、2217より
ARY(1).FLAG=1なので、NIIA.nlowlim2315には21
13に対応したARY(1).LIM=「0」が入る。また、2
115よりARY(2).FLAG=1なので、NIIA.nupplim23
16には2111に対応したARY(2).LIM=1から1を
引いた「0」が入る。j=2の時、2115よりARY
(2).FLAG=1なので、NIIA.nlowlim2319には211
1に対応したARY(2).LIM=「1」が入る。また、21
18よりARY(3).FLAG=2なので、NIIA.nupplim232
0には2114に対応したARY(3).LIM=「127」が
入る。j=3の時、2118よりARY(2).FLAG=2なの
で、NIIA.nlowlim2323には2114に対応したARY
(2).LIM=127に1を加えた「128」が入る。ま
た、2116よりARY(3).FLAG=2なので、NIIA.nuppli
m2324には2112に対応したARY(3).LIM=「12
8」が入る。以上でプロセス1〜2でのステップ902
の処理を終わる。この時の結果を図23(b)に示す。
【0066】次に、ステップ903の詳細を示した図1
2のステップ1200では、laryが「4」なので、要素
数3(=lary−1)の配列Select2402、2403、
2404を確保し、上記3個の非交差区間テーブルのア
ドレスを順に格納する。次に区間選択ステップ1201
を行なう。区間選択ステップ1201の詳細を示す図1
3のステップ1300では、laryが「4」なので、3個
(=lary−1)の非交差区間テーブル2302、230
3、2304について、jが1から3までの間、処理を
行なう。その結果はそれぞれ、図24で示すとおり、2
317が「1」、2321が「127」、2325が
「1」となる。ステップ1301では、上記ステップ1
300で求めたlengthをキーにしてSelectを降順にソー
トするので、結果は、2303、2302、2304の
順になり、2402、2403、2404がそれぞれ、
図24に矢印で示しているように、2303、230
2、2304を指す。ステップ1302では、ns=1
として、Select(1)が指す非交差区間テーブル2303
のみを選択する。次のステップ1202では、nsが
「1」、laryが「4」なので、Select(2)2402、Se
lect(3)2404が指す非交差区間テーブルを下限値を
キーにして昇順にソートする。ソートの結果は元のまま
である。
2のステップ1200では、laryが「4」なので、要素
数3(=lary−1)の配列Select2402、2403、
2404を確保し、上記3個の非交差区間テーブルのア
ドレスを順に格納する。次に区間選択ステップ1201
を行なう。区間選択ステップ1201の詳細を示す図1
3のステップ1300では、laryが「4」なので、3個
(=lary−1)の非交差区間テーブル2302、230
3、2304について、jが1から3までの間、処理を
行なう。その結果はそれぞれ、図24で示すとおり、2
317が「1」、2321が「127」、2325が
「1」となる。ステップ1301では、上記ステップ1
300で求めたlengthをキーにしてSelectを降順にソー
トするので、結果は、2303、2302、2304の
順になり、2402、2403、2404がそれぞれ、
図24に矢印で示しているように、2303、230
2、2304を指す。ステップ1302では、ns=1
として、Select(1)が指す非交差区間テーブル2303
のみを選択する。次のステップ1202では、nsが
「1」、laryが「4」なので、Select(2)2402、Se
lect(3)2404が指す非交差区間テーブルを下限値を
キーにして昇順にソートする。ソートの結果は元のまま
である。
【0067】ステップ1203では、nsが「1」、la
ryが「4」なので、jおよびjjの初期値は「2」、ス
テップ1203中のループはjおよびjjが3未満の
時、処理を行なう。まず、uppjj, uppjj1の値は、それ
ぞれ、Select(2)が指すテーブル2302の上限値
「0」, Select(3)が指すテーブル2304の下限値
「128」なので、uppjj+1=uppjj1は成立しない。よっ
て、j,jjは共に3となり、Select(3)からSelect(3)
へ代入が行なわれるが、これは結局、何もしないのと同
じである。このとき、j,jjの値はループの判定条件
を満たさなくなるので、ループ処理はこれで終了する。
ステップ1204では、nsが「1」、laryが「4」な
ので、ns ≧ lary-1は成立せず、lary2にはj、即ち、ス
テップ1203において得られた「3」が代入される。
ステップ1205では、lary2が「3」なので、Select
(1)2403, Select(2)2402、Select(3)2404
をそれらが指す非交差区間テーブルの下限値をキーにし
て昇順にソートする。上記下限値は、順に、「1」、
「0」、「128」なので、昇順にソートした結果は図
25(b)の2402、2403、2404のようにな
る。以上でプロセス範囲1〜2の処理を終了する。
ryが「4」なので、jおよびjjの初期値は「2」、ス
テップ1203中のループはjおよびjjが3未満の
時、処理を行なう。まず、uppjj, uppjj1の値は、それ
ぞれ、Select(2)が指すテーブル2302の上限値
「0」, Select(3)が指すテーブル2304の下限値
「128」なので、uppjj+1=uppjj1は成立しない。よっ
て、j,jjは共に3となり、Select(3)からSelect(3)
へ代入が行なわれるが、これは結局、何もしないのと同
じである。このとき、j,jjの値はループの判定条件
を満たさなくなるので、ループ処理はこれで終了する。
ステップ1204では、nsが「1」、laryが「4」な
ので、ns ≧ lary-1は成立せず、lary2にはj、即ち、ス
テップ1203において得られた「3」が代入される。
ステップ1205では、lary2が「3」なので、Select
(1)2403, Select(2)2402、Select(3)2404
をそれらが指す非交差区間テーブルの下限値をキーにし
て昇順にソートする。上記下限値は、順に、「1」、
「0」、「128」なので、昇順にソートした結果は図
25(b)の2402、2403、2404のようにな
る。以上でプロセス範囲1〜2の処理を終了する。
【0068】次に、ステップ904で次のプロセス範囲
に処理を移す。まだプロセス範囲3が存在するので、ス
テップ900における判定はYESとなる。ループ中の
文の数は図20の2004より「2」なので、ステップ
901では要素数が4個(2の2倍)の構造体ARYの配
列を確保する。
に処理を移す。まだプロセス範囲3が存在するので、ス
テップ900における判定はYESとなる。ループ中の
文の数は図20の2004より「2」なので、ステップ
901では要素数が4個(2の2倍)の構造体ARYの配
列を確保する。
【0069】次に、非交差基本区間列生成ステップ90
2の処理を行なう。ステップ1100における(ループ
中の文の数)は「2」なので、以下、ステップ1100
に書かれた代入処理を2回行なう。j=1の時、1番目
の文の実行範囲の下限値は、図18における、プロセス
範囲が3の場合、即ち、1802を考えればよいのだか
ら、1813より「1」となる。同様にして、1番目の
文の実行範囲の上限値は1814より「128」とな
る。j=2の時、2番目の文の実行範囲の下限値は、図
19における、プロセス範囲が3の場合、即ち、190
2を考えればよいのだから、1913より「0」とな
る。同様にして、2番目の文の実行範囲の上限値は19
14より「128」となる。以上より、2102におけ
る、2119、2120、2121、2122の値は、
それぞれ、「1」、「128」、「0」、「128」と
なる。また、ステップ1100における、FLAGへの代入
文の処理結果より、2123、2124、2125、2
126はそれぞれ、「1」、「2」、「1」、「2」と
なる。ステップ1101でソートした結果は重複を持つ
ので、ステップ1101、1102の処理結果は、22
02のようになる。このとき、配列要素の数laryは
「3」となる。ステップ1103では、laryが「3」な
ので、2個(=lary−1)の非交差区間テーブルNIIAを
確保し、ポインタで順に接続する。上で確保された2個
の非交差区間テーブルNIIAは、図23(c)の230
5、2306に対応している。
2の処理を行なう。ステップ1100における(ループ
中の文の数)は「2」なので、以下、ステップ1100
に書かれた代入処理を2回行なう。j=1の時、1番目
の文の実行範囲の下限値は、図18における、プロセス
範囲が3の場合、即ち、1802を考えればよいのだか
ら、1813より「1」となる。同様にして、1番目の
文の実行範囲の上限値は1814より「128」とな
る。j=2の時、2番目の文の実行範囲の下限値は、図
19における、プロセス範囲が3の場合、即ち、190
2を考えればよいのだから、1913より「0」とな
る。同様にして、2番目の文の実行範囲の上限値は19
14より「128」となる。以上より、2102におけ
る、2119、2120、2121、2122の値は、
それぞれ、「1」、「128」、「0」、「128」と
なる。また、ステップ1100における、FLAGへの代入
文の処理結果より、2123、2124、2125、2
126はそれぞれ、「1」、「2」、「1」、「2」と
なる。ステップ1101でソートした結果は重複を持つ
ので、ステップ1101、1102の処理結果は、22
02のようになる。このとき、配列要素の数laryは
「3」となる。ステップ1103では、laryが「3」な
ので、2個(=lary−1)の非交差区間テーブルNIIAを
確保し、ポインタで順に接続する。上で確保された2個
の非交差区間テーブルNIIAは、図23(c)の230
5、2306に対応している。
【0070】次に、ステップ1104において、laryが
「3」なので、jは1から2までの範囲を動く。以下、
図22の2202と図23の2305、2306を用い
て説明する。j=1の時、2125よりARY(1).FLAG=1
なので、NIIA.nlowlim2327には2121に対応した
ARY(1).LIM=「0」が入る。また、2123よりARY
(2).FLAG=1なので、NIIA.nupplim2328には211
9に対応したARY(2).LIM=1から1を引いた「0」が
入る。j=2の時、2123よりARY(2).FLAG=1なの
で、NIIA.nlowlim2331には2119に対応したARY
(2).LIM=「1」が入る。また、2124よりARY(3).
FLAG=2なので、NIIA.nupplim2332には2120に
対応したARY(3).LIM=「128」が入る。ステップ1
200では、laryが「3」なので、要素数2(=lary−
1)の配列Select2405、2406を確保し、これら
2個の非交差区間テーブルのアドレスを順に格納する。
「3」なので、jは1から2までの範囲を動く。以下、
図22の2202と図23の2305、2306を用い
て説明する。j=1の時、2125よりARY(1).FLAG=1
なので、NIIA.nlowlim2327には2121に対応した
ARY(1).LIM=「0」が入る。また、2123よりARY
(2).FLAG=1なので、NIIA.nupplim2328には211
9に対応したARY(2).LIM=1から1を引いた「0」が
入る。j=2の時、2123よりARY(2).FLAG=1なの
で、NIIA.nlowlim2331には2119に対応したARY
(2).LIM=「1」が入る。また、2124よりARY(3).
FLAG=2なので、NIIA.nupplim2332には2120に
対応したARY(3).LIM=「128」が入る。ステップ1
200では、laryが「3」なので、要素数2(=lary−
1)の配列Select2405、2406を確保し、これら
2個の非交差区間テーブルのアドレスを順に格納する。
【0071】次に区間選択ステップ1201を行なう。
ステップ1201の詳細を示す図13のステップ130
0では、laryが「3」なので、2個(=lary−1)の非
交差区間テーブル2305、2306について、jが1
から2までの間、処理を行なう。その結果はそれぞれ、
図24(c)で示すとおり、2329が「1」、233
3が「128」となる。ステップ1301では、ステッ
プ1300で求めたlengthをキーにしてSelectを降順に
ソートするので、その結果は、2306、2305の順
になり、2405、2406がそれぞれ、図24に矢印
で示しているように、2306、2305を指す。ステ
ップ1302では、ns=1として、Select(1)が指す
非交差区間テーブル2306のみを選択する。
ステップ1201の詳細を示す図13のステップ130
0では、laryが「3」なので、2個(=lary−1)の非
交差区間テーブル2305、2306について、jが1
から2までの間、処理を行なう。その結果はそれぞれ、
図24(c)で示すとおり、2329が「1」、233
3が「128」となる。ステップ1301では、ステッ
プ1300で求めたlengthをキーにしてSelectを降順に
ソートするので、その結果は、2306、2305の順
になり、2405、2406がそれぞれ、図24に矢印
で示しているように、2306、2305を指す。ステ
ップ1302では、ns=1として、Select(1)が指す
非交差区間テーブル2306のみを選択する。
【0072】次のステップ1202では、nsが
「1」、laryが「3」なので、1個の配列要素Select
(2)2406が指す非交差区間テーブルを下限値をキー
にして昇順にソートする。配列要素は唯1つなので、ソ
ートの結果は元のままである。ステップ1203では、
nsが「1」、laryが「3」なので、jの初期値は
「2」(=ns+1)、ステップ1203中のループは
jが2未満の時、ループ処理を行なう。従って、今の場
合、jは2未満でないから、ステップ1203ではルー
プ処理を行なわない。次のステップ1204では、ns
が「1」、laryが「3」なので、ns ≧ lary-1は成立せ
ず、lary2には「j」、即ち、ステップ1203におけ
る初期値「2」が代入される。ステップ1205では、
lary2が「2」なので、Select(1)2405, Select(2)
2406をそれらが指す非交差区間テーブルの下限値を
キーにして昇順にソートする。上記下限値は、順に、
「1」、「0」なので、ソートした結果は図25(c)
の2405、2406のようになる。以上でプロセス範
囲3の処理を終了する。次に、ステップ904では次の
プロセス範囲に処理を移すが、他にプロセス範囲は存在
しないので、ステップ900における判定はNOとな
り、これで非交差区間列生成部107の処理を全て終了
する。
「1」、laryが「3」なので、1個の配列要素Select
(2)2406が指す非交差区間テーブルを下限値をキー
にして昇順にソートする。配列要素は唯1つなので、ソ
ートの結果は元のままである。ステップ1203では、
nsが「1」、laryが「3」なので、jの初期値は
「2」(=ns+1)、ステップ1203中のループは
jが2未満の時、ループ処理を行なう。従って、今の場
合、jは2未満でないから、ステップ1203ではルー
プ処理を行なわない。次のステップ1204では、ns
が「1」、laryが「3」なので、ns ≧ lary-1は成立せ
ず、lary2には「j」、即ち、ステップ1203におけ
る初期値「2」が代入される。ステップ1205では、
lary2が「2」なので、Select(1)2405, Select(2)
2406をそれらが指す非交差区間テーブルの下限値を
キーにして昇順にソートする。上記下限値は、順に、
「1」、「0」なので、ソートした結果は図25(c)
の2405、2406のようになる。以上でプロセス範
囲3の処理を終了する。次に、ステップ904では次の
プロセス範囲に処理を移すが、他にプロセス範囲は存在
しないので、ステップ900における判定はNOとな
り、これで非交差区間列生成部107の処理を全て終了
する。
【0073】次に、ループ複製部108を、図14、図
25、図26を用いて説明する。ループ複製部108
は、プログラムを実行するプロセス番号を判定する条件
文と、各プロセス毎に、そのプロセスの非交差区間列の
各区間の上下限値をループの上下限値とする、区間の数
だけのループを、元のループから複製して生成する部分
である。図14はループ複製部108を説明するための
図である。図26はループ複製部108、およびコード
変換部109の処理結果を中間語の代わりに、ソースプ
ログラムスタイルで表わしたものである。まず、図14
のステップ1400において、未処理のプロセス範囲が
あるか否かを判定する。今の場合、図20のループ実行
範囲テーブルが、プロセス範囲が0、1〜2、3の3つ
あることから、上記判定はYESとなる。以下、プロセ
ス範囲が0、1〜2、3の順に処理を行なう。
25、図26を用いて説明する。ループ複製部108
は、プログラムを実行するプロセス番号を判定する条件
文と、各プロセス毎に、そのプロセスの非交差区間列の
各区間の上下限値をループの上下限値とする、区間の数
だけのループを、元のループから複製して生成する部分
である。図14はループ複製部108を説明するための
図である。図26はループ複製部108、およびコード
変換部109の処理結果を中間語の代わりに、ソースプ
ログラムスタイルで表わしたものである。まず、図14
のステップ1400において、未処理のプロセス範囲が
あるか否かを判定する。今の場合、図20のループ実行
範囲テーブルが、プロセス範囲が0、1〜2、3の3つ
あることから、上記判定はYESとなる。以下、プロセ
ス範囲が0、1〜2、3の順に処理を行なう。
【0074】次に、ステップ1401において、プロセ
ス番号がプロセス範囲に含まれる条件を表す条件文IL
を生成し、上記条件文を元のループ直前で実行するよう
にプログラムILに接続する。ここで、プロセス番号を
表わす変数は適当に作成する。今の場合、MPをプロセ
ス番号を表わす変数とする。生成プログラムでは、MP
に実際のプロセス番号を格納するために、実行時にシス
テム問い合わせサブルーチンを呼ぶ。図26の文260
0のWHOAMIがこれにあたり、これによって、MPに実際
のプロセス番号が格納される。今はプロセス範囲が0の
場合を考えているので、ステップ1401における、プ
ロセス番号がプロセス範囲に含まれる条件は、"IF(MP.E
Q.0)"となる。この条件文を元のループ直前で実行する
ようにプログラムILに接続したものをソースプログラ
ムスタイルで表わしたものが図26のIF文2601で
ある。ここで、IF文2601のブロックの直後には、
元のループがあるはずだが、これは後にステップ140
5により削除されるので、図26には書かれていない。
ス番号がプロセス範囲に含まれる条件を表す条件文IL
を生成し、上記条件文を元のループ直前で実行するよう
にプログラムILに接続する。ここで、プロセス番号を
表わす変数は適当に作成する。今の場合、MPをプロセ
ス番号を表わす変数とする。生成プログラムでは、MP
に実際のプロセス番号を格納するために、実行時にシス
テム問い合わせサブルーチンを呼ぶ。図26の文260
0のWHOAMIがこれにあたり、これによって、MPに実際
のプロセス番号が格納される。今はプロセス範囲が0の
場合を考えているので、ステップ1401における、プ
ロセス番号がプロセス範囲に含まれる条件は、"IF(MP.E
Q.0)"となる。この条件文を元のループ直前で実行する
ようにプログラムILに接続したものをソースプログラ
ムスタイルで表わしたものが図26のIF文2601で
ある。ここで、IF文2601のブロックの直後には、
元のループがあるはずだが、これは後にステップ140
5により削除されるので、図26には書かれていない。
【0075】次のステップ1402では、元のループI
Lのコピーをlary2個作成し、上記条件の成立時、順に
ループを実行するように上記条件文ILに接続する。プ
ロセス範囲が0の場合のlary2は、図25における配列S
elect2400、2401の要素数と同じなので「2」
である。従って、ステップ1402では、元のループI
Lのコピーを2個作成し、条件文2601が成立すると
きに実行するように接続する。次のステップ1403で
は、上記lary2個のループILの上限値、下限値をSelec
t(1),・・・Select(lary2)が示す非交差区間テーブルの上
限値、下限値に設定する。今の場合、図25のSelect
(1)2400が指す非交差区間テーブルの上限値、下限
値はそれぞれ、2307、2308より、「1」、「1
27」なので、第1のDOループの上限値、下限値はそ
れぞれ、「1」、「127」となる。これを表わしたの
が図26の2602であり、このDOループは条件文2
601が成立するときのみ実行される。また、図25の
Select(2)2401が指す非交差区間テーブルの上限
値、下限値はそれぞれ、2311、2312より、「1
28」、「128」なので、第2のDOループの上限
値、下限値はそれぞれ、「128」、「128」とな
る。これを表わしたのが図26の2605であり、この
DOループは条件文2601が成立するときのみ実行さ
れる。以上でプロセス範囲0における処理を終了する。
Lのコピーをlary2個作成し、上記条件の成立時、順に
ループを実行するように上記条件文ILに接続する。プ
ロセス範囲が0の場合のlary2は、図25における配列S
elect2400、2401の要素数と同じなので「2」
である。従って、ステップ1402では、元のループI
Lのコピーを2個作成し、条件文2601が成立すると
きに実行するように接続する。次のステップ1403で
は、上記lary2個のループILの上限値、下限値をSelec
t(1),・・・Select(lary2)が示す非交差区間テーブルの上
限値、下限値に設定する。今の場合、図25のSelect
(1)2400が指す非交差区間テーブルの上限値、下限
値はそれぞれ、2307、2308より、「1」、「1
27」なので、第1のDOループの上限値、下限値はそ
れぞれ、「1」、「127」となる。これを表わしたの
が図26の2602であり、このDOループは条件文2
601が成立するときのみ実行される。また、図25の
Select(2)2401が指す非交差区間テーブルの上限
値、下限値はそれぞれ、2311、2312より、「1
28」、「128」なので、第2のDOループの上限
値、下限値はそれぞれ、「128」、「128」とな
る。これを表わしたのが図26の2605であり、この
DOループは条件文2601が成立するときのみ実行さ
れる。以上でプロセス範囲0における処理を終了する。
【0076】次のステップ1404により、次のプロセ
ス範囲の処理へ移る。まず、ステップ1400における
判定は、現在のプロセス範囲が1〜2であることから、
YESとなる。今度はプロセス範囲が1〜2なので、ス
テップ1401における、プロセス番号がプロセス範囲
に含まれる条件は、"IF(MP.GE.1.AND.MP.LE.2)"とな
る。この条件文を元のループ直前で実行するようにプロ
グラムILに接続したものをソースプログラムスタイル
で表わしたものが図26の2607である。プロセス範
囲が1から2の場合のlary2は、図25における配列Sel
ect2402、2403、2404の要素数と同じなの
で「3」である。従って、ステップ1402において、
元のループILのコピーを3個作成し、条件文2607
が成立するときに実行するように接続する。
ス範囲の処理へ移る。まず、ステップ1400における
判定は、現在のプロセス範囲が1〜2であることから、
YESとなる。今度はプロセス範囲が1〜2なので、ス
テップ1401における、プロセス番号がプロセス範囲
に含まれる条件は、"IF(MP.GE.1.AND.MP.LE.2)"とな
る。この条件文を元のループ直前で実行するようにプロ
グラムILに接続したものをソースプログラムスタイル
で表わしたものが図26の2607である。プロセス範
囲が1から2の場合のlary2は、図25における配列Sel
ect2402、2403、2404の要素数と同じなの
で「3」である。従って、ステップ1402において、
元のループILのコピーを3個作成し、条件文2607
が成立するときに実行するように接続する。
【0077】次に、ステップ1403において、図25
のSelect(1)2402が指す非交差区間テーブルの上限
値、下限値はそれぞれ、2315、2316より、
「0」、「0」なので、第1のDOループの上限値、下
限値はそれぞれ、「0」、「0」となる。これを表わし
たのが2608であり、このDOループは条件文260
7が成立するときのみ実行される。また、図25のSele
ct(2)2403が指す非交差区間テーブルの上限値、下
限値はそれぞれ、2319、2320より、「1」、
「127」なので、第2のDOループの上限値、下限値
はそれぞれ、「1」、「127」となる。これを表わし
たのが2610であり、このDOループは条件文260
7が成立するときのみ実行される。また、図25のSele
ct(3)2404が指す非交差区間テーブルの上限値、下
限値はそれぞれ、2323、2324より、「12
8」、「128」なので、第3のDOループの上限値、
下限値はそれぞれ、「128」、「128」となる。こ
れを表わしたのがDOループ2613であり、このDO
ループは条件文2607が成立するときのみ実行され
る。以上でプロセス範囲1〜2の処理を終了する。
のSelect(1)2402が指す非交差区間テーブルの上限
値、下限値はそれぞれ、2315、2316より、
「0」、「0」なので、第1のDOループの上限値、下
限値はそれぞれ、「0」、「0」となる。これを表わし
たのが2608であり、このDOループは条件文260
7が成立するときのみ実行される。また、図25のSele
ct(2)2403が指す非交差区間テーブルの上限値、下
限値はそれぞれ、2319、2320より、「1」、
「127」なので、第2のDOループの上限値、下限値
はそれぞれ、「1」、「127」となる。これを表わし
たのが2610であり、このDOループは条件文260
7が成立するときのみ実行される。また、図25のSele
ct(3)2404が指す非交差区間テーブルの上限値、下
限値はそれぞれ、2323、2324より、「12
8」、「128」なので、第3のDOループの上限値、
下限値はそれぞれ、「128」、「128」となる。こ
れを表わしたのがDOループ2613であり、このDO
ループは条件文2607が成立するときのみ実行され
る。以上でプロセス範囲1〜2の処理を終了する。
【0078】ステップ1404により、次のプロセス範
囲の処理へ移る。まず、ステップ1400における判定
は、現在のプロセス範囲が3であることから、YESと
なる。今はプロセス範囲が3なので、ステップ1401
における、プロセス番号がプロセス範囲に含まれる条件
は、"IF(MP.EQ.3)"となる。この条件文を元のループ直
前で実行するようにプログラムILに接続したものをソ
ースプログラムスタイルで表わしたものが図26の条件
文2615である。プロセス範囲が3の場合のlary2
は、図25における配列Select2405、2406の要
素数と同じなので「2」である。従って、ステップ14
02において、元のループILのコピーを2個作成し、
条件文2615が成立するときに実行するように接続す
る。
囲の処理へ移る。まず、ステップ1400における判定
は、現在のプロセス範囲が3であることから、YESと
なる。今はプロセス範囲が3なので、ステップ1401
における、プロセス番号がプロセス範囲に含まれる条件
は、"IF(MP.EQ.3)"となる。この条件文を元のループ直
前で実行するようにプログラムILに接続したものをソ
ースプログラムスタイルで表わしたものが図26の条件
文2615である。プロセス範囲が3の場合のlary2
は、図25における配列Select2405、2406の要
素数と同じなので「2」である。従って、ステップ14
02において、元のループILのコピーを2個作成し、
条件文2615が成立するときに実行するように接続す
る。
【0079】次に、ステップ1403において、図25
のSelect(1)2405が指す非交差区間テーブルの上限
値、下限値はそれぞれ、2327、2328より、
「0」、「0」なので、第1のDOループの上限値、下
限値はそれぞれ、「0」、「0」となる。これを表わし
たのがDOループ2616であり、このDOループは条
件文2615が成立するときのみ実行される。
のSelect(1)2405が指す非交差区間テーブルの上限
値、下限値はそれぞれ、2327、2328より、
「0」、「0」なので、第1のDOループの上限値、下
限値はそれぞれ、「0」、「0」となる。これを表わし
たのがDOループ2616であり、このDOループは条
件文2615が成立するときのみ実行される。
【0080】また、図25のSelect(2)2406が指す
非交差区間テーブルの上限値、下限値はそれぞれ、23
31、2332より、「1」、「128」なので、第2
のDOループの上限値、下限値はそれぞれ、「1」、
「128」となる。これを表わしたのがDOループ26
18であり、このDOループは条件文2615が成立す
るときのみ実行される。以上でプロセス範囲3の処理を
終了する。次に、ステップ1404により、次のプロセ
ス範囲の処理へ移る。ステップ1400では現在のプロ
セス範囲が他に存在しないことから、判定はNOとな
り、ステップ1405へ移る。ステップ1405におい
て元のループILを削除する。これでループ複製部10
8の処理を全て終了する。
非交差区間テーブルの上限値、下限値はそれぞれ、23
31、2332より、「1」、「128」なので、第2
のDOループの上限値、下限値はそれぞれ、「1」、
「128」となる。これを表わしたのがDOループ26
18であり、このDOループは条件文2615が成立す
るときのみ実行される。以上でプロセス範囲3の処理を
終了する。次に、ステップ1404により、次のプロセ
ス範囲の処理へ移る。ステップ1400では現在のプロ
セス範囲が他に存在しないことから、判定はNOとな
り、ステップ1405へ移る。ステップ1405におい
て元のループILを削除する。これでループ複製部10
8の処理を全て終了する。
【0081】次に、コード変換部109の処理を図15
と図26を用いて説明する。コード変換部109は、図
14で生成した各ループ内の各文について、文をそのま
まにするか、削除するか、条件文を文に付加するか、あ
るいはループそのものを削除するか、の処理を行う部分
である。図15はコード変換部109の処理の処理を説
明するための図である。ステップ1500は、複製ルー
プがあるか否かを判定するステップである。今の場合、
ループ複製部108で複製されたループが、図26に示
すように、2602、2605、2608、2610、
2613、2616、2618だけあるので、判定はY
ESである。以下、上記順序で各ループに対して処理を
行なう。
と図26を用いて説明する。コード変換部109は、図
14で生成した各ループ内の各文について、文をそのま
まにするか、削除するか、条件文を文に付加するか、あ
るいはループそのものを削除するか、の処理を行う部分
である。図15はコード変換部109の処理の処理を説
明するための図である。ステップ1500は、複製ルー
プがあるか否かを判定するステップである。今の場合、
ループ複製部108で複製されたループが、図26に示
すように、2602、2605、2608、2610、
2613、2616、2618だけあるので、判定はY
ESである。以下、上記順序で各ループに対して処理を
行なう。
【0082】ステップ1501においてループ内に文が
あるか否かを判定する。今の場合、各ループ内には、AS
GN1609から始まる文とASGN1615から始まる文の
2つの文があるので、判定はYESである。以下、上記
順序で各文に対して処理を行なう。さらに、第1の文の
処理には、ASGN1609および直前のSINFO1608が
指す文実行範囲テーブルを参照しながら処理を行なう。
同様に、第2の文の処理には、ASGN1615および直前
のSINFO1614が指す文実行範囲テーブルを参照しな
がら処理を行なう。
あるか否かを判定する。今の場合、各ループ内には、AS
GN1609から始まる文とASGN1615から始まる文の
2つの文があるので、判定はYESである。以下、上記
順序で各文に対して処理を行なう。さらに、第1の文の
処理には、ASGN1609および直前のSINFO1608が
指す文実行範囲テーブルを参照しながら処理を行なう。
同様に、第2の文の処理には、ASGN1615および直前
のSINFO1614が指す文実行範囲テーブルを参照しな
がら処理を行なう。
【0083】以下、ループ2602はプロセス範囲が0
の場合のループなので、文実行範囲テーブルもプロセス
範囲が0の場合を参照することに注意する。ステップ1
502において、文の実行範囲がループ実行範囲を包含
するなら文ILをそのままにし、文の実行範囲とループ
実行範囲が互いに素(重なりがない)なら文ILを削除
し、上記以外ならループ制御変数が文の実行範囲内にあ
ることを表す条件ILを生成、上記条件の成立時に文を
実行するように文ILを上記条件ILに接続し、上記条
件ILをプログラムILに接続する。今の場合、DOル
ープ2602のループ実行範囲は文2602に示されて
いるように「1〜127」であり、第1の文の実行範囲
は図18の文実行範囲テーブルの1805、1806に
示されているように、「1〜128」なので、文の実行
範囲がループ実行範囲を包含している。従って、ステッ
プ1502は、文ILに対して何も処理しない。これを
示したのが図26の文2603である。
の場合のループなので、文実行範囲テーブルもプロセス
範囲が0の場合を参照することに注意する。ステップ1
502において、文の実行範囲がループ実行範囲を包含
するなら文ILをそのままにし、文の実行範囲とループ
実行範囲が互いに素(重なりがない)なら文ILを削除
し、上記以外ならループ制御変数が文の実行範囲内にあ
ることを表す条件ILを生成、上記条件の成立時に文を
実行するように文ILを上記条件ILに接続し、上記条
件ILをプログラムILに接続する。今の場合、DOル
ープ2602のループ実行範囲は文2602に示されて
いるように「1〜127」であり、第1の文の実行範囲
は図18の文実行範囲テーブルの1805、1806に
示されているように、「1〜128」なので、文の実行
範囲がループ実行範囲を包含している。従って、ステッ
プ1502は、文ILに対して何も処理しない。これを
示したのが図26の文2603である。
【0084】次のステップ1504で次の文へ移る。ス
テップ1501では、まだ第2の文があるので、判定は
YESである。第2の文の実行範囲は図19の文実行範
囲テーブルの1905、1906に示すように、「1〜
127」なので、文の実行範囲とループ実行範囲は等し
い。これは包含していると言い替えることができる。従
って、ステップ1502は、文ILに対して何も処理し
ない。これを示したのが、図26の文2604である。
テップ1501では、まだ第2の文があるので、判定は
YESである。第2の文の実行範囲は図19の文実行範
囲テーブルの1905、1906に示すように、「1〜
127」なので、文の実行範囲とループ実行範囲は等し
い。これは包含していると言い替えることができる。従
って、ステップ1502は、文ILに対して何も処理し
ない。これを示したのが、図26の文2604である。
【0085】再びステップ1504で次の文へ移る。次
のステップ1501では、ループ2602に対して2つ
の文の処理を終えたので、他に文は存在しない。よっ
て、今度はステップ1501の判定はNOとなり、ステ
ップ1503へ移る。ステップ1503では、ループ内
に文は元のまま2つあるので、何も処理せず、次の複製
ループへ移る。
のステップ1501では、ループ2602に対して2つ
の文の処理を終えたので、他に文は存在しない。よっ
て、今度はステップ1501の判定はNOとなり、ステ
ップ1503へ移る。ステップ1503では、ループ内
に文は元のまま2つあるので、何も処理せず、次の複製
ループへ移る。
【0086】ステップ1500における判定は、まだ複
製ループ2605が存在するので、YESである。次の
ステップ1501における判定は、ループ内にASGN16
09およびASGN1615で示される2つの文があるの
で、これもYESである。以下、上記順序で各文に対し
て処理を行なう。また、ループ2605はプロセス範囲
が0の場合のループなので、文実行範囲テーブルもプロ
セス範囲が0の場合を参照する。ループ2605のルー
プ実行範囲は2605に示すように「128〜128」
であり、第1の文の実行範囲は図18の文実行範囲テー
ブルの1805、1806に示すように、「1〜12
8」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2606
である。
製ループ2605が存在するので、YESである。次の
ステップ1501における判定は、ループ内にASGN16
09およびASGN1615で示される2つの文があるの
で、これもYESである。以下、上記順序で各文に対し
て処理を行なう。また、ループ2605はプロセス範囲
が0の場合のループなので、文実行範囲テーブルもプロ
セス範囲が0の場合を参照する。ループ2605のルー
プ実行範囲は2605に示すように「128〜128」
であり、第1の文の実行範囲は図18の文実行範囲テー
ブルの1805、1806に示すように、「1〜12
8」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2606
である。
【0087】ステップ1504で次の文へ移る。ステッ
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1905、1906に示すように、「1〜12
7」なので、文の実行範囲とループ実行範囲は互いに素
(重なりがない)である。従って、ステップ1502に
おいて第2の文を削除する。これにより文2605のル
ープ内には第2の文は現われない。
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1905、1906に示すように、「1〜12
7」なので、文の実行範囲とループ実行範囲は互いに素
(重なりがない)である。従って、ステップ1502に
おいて第2の文を削除する。これにより文2605のル
ープ内には第2の文は現われない。
【0088】ステップ1504で次の文へ移る。ステッ
プ1501では、ループ2605に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定は
NOとなり、ステップ1503へ移る。ステップ150
3では、ループ内に文は1つ存在するので、何も処理せ
ず、次の複製ループへ移る。
プ1501では、ループ2605に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定は
NOとなり、ステップ1503へ移る。ステップ150
3では、ループ内に文は1つ存在するので、何も処理せ
ず、次の複製ループへ移る。
【0089】ステップ1500における判定は、複製ル
ープ2608が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。以下、上記順序で各文に対して処理を行なう。
また、ループ2608はプロセス範囲が1〜2の場合の
ループなので、文実行範囲テーブルもプロセス範囲が1
〜2の場合を参照する。ループ2608のループ実行範
囲は文2608に示すように「0〜0」であり、第1の
文の実行範囲は図18の文実行範囲テーブルの180
9、1810に示すように、「1〜128」なので、文
の実行範囲とループ実行範囲は互いに素(重なりがな
い)である。従って、ステップ1502において第1の
文を削除する。これにより文2608のループ内には第
1の文は現われない。
ープ2608が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。以下、上記順序で各文に対して処理を行なう。
また、ループ2608はプロセス範囲が1〜2の場合の
ループなので、文実行範囲テーブルもプロセス範囲が1
〜2の場合を参照する。ループ2608のループ実行範
囲は文2608に示すように「0〜0」であり、第1の
文の実行範囲は図18の文実行範囲テーブルの180
9、1810に示すように、「1〜128」なので、文
の実行範囲とループ実行範囲は互いに素(重なりがな
い)である。従って、ステップ1502において第1の
文を削除する。これにより文2608のループ内には第
1の文は現われない。
【0090】ステップ1504で次の文へ移る。ステッ
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1909、1910に示すように、「0〜12
7」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2609
である。
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1909、1910に示すように、「0〜12
7」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2609
である。
【0091】ステップ1504で次の文へ移る。ステッ
プ1501では、ループ2608に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定は
NOとなり、ステップ1503へ移る。ステップ150
3では、ループ内に文は1つ存在するので、何も処理せ
ず、次の複製ループへ移る。
プ1501では、ループ2608に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定は
NOとなり、ステップ1503へ移る。ステップ150
3では、ループ内に文は1つ存在するので、何も処理せ
ず、次の複製ループへ移る。
【0092】ステップ1500における判定は、複製ル
ープ2610が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。
ープ2610が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。
【0093】以下、上記順序で各文に対して処理を行な
う。また、ループ2610はプロセス範囲が1〜2の場
合のループなので、文実行範囲テーブルもプロセス範囲
が1〜2の場合を参照する。ループ2610のループ実
行範囲は文2610に示すように「1〜127」であ
り、第1の文の実行範囲は図18の文実行範囲テーブル
の1809、1810に示すように、「1〜128」な
ので、文の実行範囲がループ実行範囲を包含している。
従って、ステップ1502は、文ILに対して何も処理
しない。これを示したのが、図26の文2611であ
る。
う。また、ループ2610はプロセス範囲が1〜2の場
合のループなので、文実行範囲テーブルもプロセス範囲
が1〜2の場合を参照する。ループ2610のループ実
行範囲は文2610に示すように「1〜127」であ
り、第1の文の実行範囲は図18の文実行範囲テーブル
の1809、1810に示すように、「1〜128」な
ので、文の実行範囲がループ実行範囲を包含している。
従って、ステップ1502は、文ILに対して何も処理
しない。これを示したのが、図26の文2611であ
る。
【0094】ステップ1504で次の文へ移る。ステッ
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1909、1910に示すように、「0〜12
7」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2612
である。
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1909、1910に示すように、「0〜12
7」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2612
である。
【0095】ステップ1504で次の文へ移る。ステッ
プ1501では、ループ2610に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は元のまま2つあるので、何
も処理せず、次の複製ループへ移る。
プ1501では、ループ2610に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は元のまま2つあるので、何
も処理せず、次の複製ループへ移る。
【0096】ステップ1500における判定は、複製ル
ープ2613が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。以下、上記順序で各文に対して処理を行なう。
また、ループ2613はプロセス範囲が1〜2の場合の
ループなので、文実行範囲テーブルもプロセス範囲が1
〜2の場合を参照する。ループ2613のループ実行範
囲は文2613に示すように「128〜128」であ
り、第1の文の実行範囲は図18の文実行範囲テーブル
の1809、1810に示すように、「1〜128」な
ので、文の実行範囲がループ実行範囲を包含している。
従って、ステップ1502は、文ILに対して何も処理
しない。これを示したのが、図26の文2614であ
る。ステップ1504で次の文へ移る。ステップ150
1では、第2の文があるので、判定はYESである。第
2の文の実行範囲は図19の文実行範囲テーブルの19
09、1910に示すように、「0〜127」なので、
文の実行範囲とループ実行範囲は互いに素(重なりがな
い)である。従って、ステップ1502は、第2の文を
削除する。これにより図26の文2613のループ内に
は第2の文は現われない。
ープ2613が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。以下、上記順序で各文に対して処理を行なう。
また、ループ2613はプロセス範囲が1〜2の場合の
ループなので、文実行範囲テーブルもプロセス範囲が1
〜2の場合を参照する。ループ2613のループ実行範
囲は文2613に示すように「128〜128」であ
り、第1の文の実行範囲は図18の文実行範囲テーブル
の1809、1810に示すように、「1〜128」な
ので、文の実行範囲がループ実行範囲を包含している。
従って、ステップ1502は、文ILに対して何も処理
しない。これを示したのが、図26の文2614であ
る。ステップ1504で次の文へ移る。ステップ150
1では、第2の文があるので、判定はYESである。第
2の文の実行範囲は図19の文実行範囲テーブルの19
09、1910に示すように、「0〜127」なので、
文の実行範囲とループ実行範囲は互いに素(重なりがな
い)である。従って、ステップ1502は、第2の文を
削除する。これにより図26の文2613のループ内に
は第2の文は現われない。
【0097】ステップ1504で次の文へ移る。ステッ
プ1501では、ループ2613に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は1つ存在するので、何も処
理せず、次の複製ループへ移る。ステップ1500にお
ける判定は、複製ループ2616が存在するので、YE
Sである。ステップ1501における判定は、ループ内
にASGN1609およびASGN1615で示される2つの文
があるので、YESである。以下、上記順序で各文に対
して処理を行なう。また、ループ2616はプロセス範
囲が3の場合のループなので、文実行範囲テーブルもプ
ロセス範囲が3の場合を参照する。ループ2616のル
ープ実行範囲は文2616に示すように「0〜0」であ
り、第1の文の実行範囲は図18の文実行範囲テーブル
の1813、1814に示すように、「1〜128」な
ので、文の実行範囲とループ実行範囲は互いに素(重な
りがない)である。従って、ステップ1502は、第1
の文を削除する。これにより図26の文2616のルー
プ内には第1の文は現われない。
プ1501では、ループ2613に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は1つ存在するので、何も処
理せず、次の複製ループへ移る。ステップ1500にお
ける判定は、複製ループ2616が存在するので、YE
Sである。ステップ1501における判定は、ループ内
にASGN1609およびASGN1615で示される2つの文
があるので、YESである。以下、上記順序で各文に対
して処理を行なう。また、ループ2616はプロセス範
囲が3の場合のループなので、文実行範囲テーブルもプ
ロセス範囲が3の場合を参照する。ループ2616のル
ープ実行範囲は文2616に示すように「0〜0」であ
り、第1の文の実行範囲は図18の文実行範囲テーブル
の1813、1814に示すように、「1〜128」な
ので、文の実行範囲とループ実行範囲は互いに素(重な
りがない)である。従って、ステップ1502は、第1
の文を削除する。これにより図26の文2616のルー
プ内には第1の文は現われない。
【0098】ステップ1504で次の文へ移る。ステッ
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1913、1914に示すように、「0〜12
8」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2617
である。
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1913、1914に示すように、「0〜12
8」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2617
である。
【0099】ステップ1504で次の文へ移る。ステッ
プ1501では、ループ2616に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は1つ存在するので、何も処
理せず、次の複製ループへ移る。
プ1501では、ループ2616に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は1つ存在するので、何も処
理せず、次の複製ループへ移る。
【0100】ステップ1500における判定は、複製ル
ープ2618が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。以下、上記順序で各文に対して処理を行なう。
また、ループ2618はプロセス範囲が3の場合のルー
プなので、文実行範囲テーブルもプロセス範囲が3の場
合を参照する。ループ2618のループ実行範囲は文2
618に示すように「1〜128」であり、第1の文の
実行範囲は図18の文実行範囲テーブルの1813、1
814に示すように、「1〜128」なので、文の実行
範囲がループ実行範囲を包含している。従って、ステッ
プ1502は、文ILに対して何も処理しない。これを
示したのが、図26の文2619である。
ープ2618が存在するので、YESである。ステップ
1501における判定は、ループ内にASGN1609およ
びASGN1615で示される2つの文があるので、YES
である。以下、上記順序で各文に対して処理を行なう。
また、ループ2618はプロセス範囲が3の場合のルー
プなので、文実行範囲テーブルもプロセス範囲が3の場
合を参照する。ループ2618のループ実行範囲は文2
618に示すように「1〜128」であり、第1の文の
実行範囲は図18の文実行範囲テーブルの1813、1
814に示すように、「1〜128」なので、文の実行
範囲がループ実行範囲を包含している。従って、ステッ
プ1502は、文ILに対して何も処理しない。これを
示したのが、図26の文2619である。
【0101】ステップ1504で次の文へ移る。ステッ
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1913、1914に示すように、「0〜12
8」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2620
である。
プ1501における判定は、第2の文があるので、YE
Sである。第2の文の実行範囲は図19の文実行範囲テ
ーブルの1913、1914に示すように、「0〜12
8」なので、文の実行範囲がループ実行範囲を包含して
いる。従って、ステップ1502は、文ILに対して何
も処理しない。これを示したのが、図26の文2620
である。
【0102】ステップ1504で次の文へ移る。ステッ
プ1501では、ループ2618に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は元のまま2つあるので、何
も処理せず、次の複製ループへ移る。
プ1501では、ループ2618に対して2つの文の処
理を終えたので、他に文は存在しない。よって、判定結
果はNOとなり、ステップ1503へ移る。ステップ1
503では、ループ内に文は元のまま2つあるので、何
も処理せず、次の複製ループへ移る。
【0103】ステップ1500における判定は、他に複
製ループは存在しないので、今度はNOである。これ
で、不要な文を削除するコード変換部109の処理を全
て終了する。以上の処理を行った後、ソースコード生成
部110を経て出力されたデータ通信入りソースプログ
ラムが図26に示すものである。
製ループは存在しないので、今度はNOである。これ
で、不要な文を削除するコード変換部109の処理を全
て終了する。以上の処理を行った後、ソースコード生成
部110を経て出力されたデータ通信入りソースプログ
ラムが図26に示すものである。
【0104】次に、本発明の第2の実施例を図1、図1
6、図17、図18〜図20、図25、図27〜図38
を用いて説明する。第2実施例と第1実施例の違いは図
1におけるループ複製部108のみである。従って、こ
こでは、非交差区間列生成部107までの部分の説明は
省略して、ループ複製部108以降の処理についてのみ
説明する。ループ複製部108に対する入力は、図16
の中間語、図18から図20までのテーブル、および図
25の配列Selectと非交差区間テーブルである。但し、
図20において、lary21718に対応する部分には、
配列Selectの要素数が格納されており、selectp171
9に対応する部分には、配列Selectの先頭要素のアドレ
スが格納されている。ここで、図17における1705
は、順序表現を格納する配列orderを示し、orderp17
26には配列order1705の先頭アドレスが格納され
る。
6、図17、図18〜図20、図25、図27〜図38
を用いて説明する。第2実施例と第1実施例の違いは図
1におけるループ複製部108のみである。従って、こ
こでは、非交差区間列生成部107までの部分の説明は
省略して、ループ複製部108以降の処理についてのみ
説明する。ループ複製部108に対する入力は、図16
の中間語、図18から図20までのテーブル、および図
25の配列Selectと非交差区間テーブルである。但し、
図20において、lary21718に対応する部分には、
配列Selectの要素数が格納されており、selectp171
9に対応する部分には、配列Selectの先頭要素のアドレ
スが格納されている。ここで、図17における1705
は、順序表現を格納する配列orderを示し、orderp17
26には配列order1705の先頭アドレスが格納され
る。
【0105】図27は第2の実施例におけるループ複製
部108の処理を説明するための図である。ループ複製
部108は、プログラムを実行する全てのプロセスに対
して、同じ数だけのループを、元のループから複製して
生成する部分である。まず、順序表現作成ステップ27
00の処理を行なう。この処理内容は図28で説明され
る。図28は、後述する図29のプロセス間共用ループ
複製ステップにおいて各プロセス毎の非交差区間列から
どの区間を選択するか、またはそのプロセスからは選択
しないかを決定するのに必要な順序表現を作成するステ
ップである。図30は、図28の処理の結果得られる、
ループ実行範囲テーブル、およびそれからポイントされ
るテーブルの状態を示したものである。
部108の処理を説明するための図である。ループ複製
部108は、プログラムを実行する全てのプロセスに対
して、同じ数だけのループを、元のループから複製して
生成する部分である。まず、順序表現作成ステップ27
00の処理を行なう。この処理内容は図28で説明され
る。図28は、後述する図29のプロセス間共用ループ
複製ステップにおいて各プロセス毎の非交差区間列から
どの区間を選択するか、またはそのプロセスからは選択
しないかを決定するのに必要な順序表現を作成するステ
ップである。図30は、図28の処理の結果得られる、
ループ実行範囲テーブル、およびそれからポイントされ
るテーブルの状態を示したものである。
【0106】以下、図30を使って、図28の順序表現
作成ステップを詳細に説明する。ステップ2800にお
いて、nstmt(図17参照)にループ中の実行文の数を
入れる。本実施例では、図16において、LOOP1602
に接続された中間語が、ループをASGN1609,ASGN1
615に接続された中間語が文を示しているので、ルー
プ中の実行文の数は「2」となる。よって、ステップ2
800ではnstmtに「2」が代入される。次のステップ
2801において、処理すべきプロセス範囲があるか否
かを判定する。今の場合、図20のループ実行範囲テー
ブルが、プロセス範囲が0、1〜2、3の3つあること
から、判定結果はYESとなる。以下、プロセス範囲が
0、1〜2、3の順に処理を行なう。ステップ2802
では、jを「1」に初期化する。ステップ2803にお
いて、1≦j≦lary2 か否かを判定する。今の場合、l
ary2は配列Selectの要素数に等しいので、図25より
「2」となる。従って、ステップ2803の条件式は"1
≦j≦2"となる。今はjは値が「1」に初期化されてい
るので、ステップ2803における判定結果はYESと
なる。
作成ステップを詳細に説明する。ステップ2800にお
いて、nstmt(図17参照)にループ中の実行文の数を
入れる。本実施例では、図16において、LOOP1602
に接続された中間語が、ループをASGN1609,ASGN1
615に接続された中間語が文を示しているので、ルー
プ中の実行文の数は「2」となる。よって、ステップ2
800ではnstmtに「2」が代入される。次のステップ
2801において、処理すべきプロセス範囲があるか否
かを判定する。今の場合、図20のループ実行範囲テー
ブルが、プロセス範囲が0、1〜2、3の3つあること
から、判定結果はYESとなる。以下、プロセス範囲が
0、1〜2、3の順に処理を行なう。ステップ2802
では、jを「1」に初期化する。ステップ2803にお
いて、1≦j≦lary2 か否かを判定する。今の場合、l
ary2は配列Selectの要素数に等しいので、図25より
「2」となる。従って、ステップ2803の条件式は"1
≦j≦2"となる。今はjは値が「1」に初期化されてい
るので、ステップ2803における判定結果はYESと
なる。
【0107】次のステップ2804において、要素数ns
tmtの配列orderを確保し、Select(j)が指す非交差区間
テーブルに接続し、文番号kに1を入れ、low に Selec
t(j)が指す非交差区間テーブルの下限値を代入する。今
の場合、要素数2の配列orderを確保して、これをSelec
t(1)2400が指す非交差区間テーブル2300に接続
する。配列orderを表わしたのが、図30の3000、
3001であり、この配列orderは図30に示されるよ
うに、非交差区間テーブル2300中の2310(orde
rp)によってポイントされる。さらに、ステップ280
4では、文番号kに「1」を、lowにSelect(1)2400
が指す非交差区間テーブル2300の2307に格納さ
れた下限値「1」を代入する。
tmtの配列orderを確保し、Select(j)が指す非交差区間
テーブルに接続し、文番号kに1を入れ、low に Selec
t(j)が指す非交差区間テーブルの下限値を代入する。今
の場合、要素数2の配列orderを確保して、これをSelec
t(1)2400が指す非交差区間テーブル2300に接続
する。配列orderを表わしたのが、図30の3000、
3001であり、この配列orderは図30に示されるよ
うに、非交差区間テーブル2300中の2310(orde
rp)によってポイントされる。さらに、ステップ280
4では、文番号kに「1」を、lowにSelect(1)2400
が指す非交差区間テーブル2300の2307に格納さ
れた下限値「1」を代入する。
【0108】次のステップ2805において、1≦k≦
nstmtか否かを判定する。今の場合、文番号kが
「1」、nstmtが「2」なのでこの判定はYESとな
る。次のステップ2806において、test_lowに文の実
行範囲の下限値を、test_uppに文の実行範囲の上限値を
入れるとともに、low<test_lowならorder(K)に「1」
を入れ、low≧test_low、かつ、low≦test_uppならorde
r(K)に「2」を入れ、low>test_lowならorder(K)に
「3」を入れる。今の場合、プロセス範囲が0で第1の
文を考えているのだから、test_low, test_uppは、それ
ぞれ、図18の1805、1806より「1」、「12
8」となる。kとlowはともに「1」なので、"low≧tes
t_low、かつ、low≦test_upp"が成立し、order(1)には
「2」が代入される。これを表わしたのが、図30の3
000である。ステップ2807ではkを1更新してス
テップ2805に戻る。今の場合、kの値を「2」に更
新する。
nstmtか否かを判定する。今の場合、文番号kが
「1」、nstmtが「2」なのでこの判定はYESとな
る。次のステップ2806において、test_lowに文の実
行範囲の下限値を、test_uppに文の実行範囲の上限値を
入れるとともに、low<test_lowならorder(K)に「1」
を入れ、low≧test_low、かつ、low≦test_uppならorde
r(K)に「2」を入れ、low>test_lowならorder(K)に
「3」を入れる。今の場合、プロセス範囲が0で第1の
文を考えているのだから、test_low, test_uppは、それ
ぞれ、図18の1805、1806より「1」、「12
8」となる。kとlowはともに「1」なので、"low≧tes
t_low、かつ、low≦test_upp"が成立し、order(1)には
「2」が代入される。これを表わしたのが、図30の3
000である。ステップ2807ではkを1更新してス
テップ2805に戻る。今の場合、kの値を「2」に更
新する。
【0109】ステップ2805では、今度は文番号kが
「2」で、nstmtが「2」なので判定はYESとなる。
ステップ2806では、今、プロセス範囲が0で第2の
文を考えているのだから、test_low, test_uppは、それ
ぞれ、図19の1905、1906より「1」、「12
7」となる。kは「2」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(2)に
は「2」が代入される。これを表わしたのが、図30の
3001である。次のステップ2807により、kを更
新し「3」とする。ステップ2805では、文番号kが
「3」、nstmtが「2」なので判定結果はNOとなる。
ステップ2808において、jの値を1更新してステッ
プ2803に戻る。今の場合、jを「2」に更新する。
「2」で、nstmtが「2」なので判定はYESとなる。
ステップ2806では、今、プロセス範囲が0で第2の
文を考えているのだから、test_low, test_uppは、それ
ぞれ、図19の1905、1906より「1」、「12
7」となる。kは「2」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(2)に
は「2」が代入される。これを表わしたのが、図30の
3001である。次のステップ2807により、kを更
新し「3」とする。ステップ2805では、文番号kが
「3」、nstmtが「2」なので判定結果はNOとなる。
ステップ2808において、jの値を1更新してステッ
プ2803に戻る。今の場合、jを「2」に更新する。
【0110】ステップ2803において、jは「2」
で、lary2は「2」なので、判定結果はYESとなる。
ステップ2804では、要素数2の配列orderを確保し
て、これをSelect(2)2401が指す非交差区間テーブ
ル2301に接続する。配列orderを表わしたのが、図
30の3002、3003であり、これは図30に示さ
れるように、非交差区間テーブル2301中の2314
によってポイントされる。さらに、ステップ2804で
は、文番号kに「1」を、lowにSelect(2)2401が
指す非交差区間テーブル2301の2311に格納され
たの下限値「128」を代入する。ステップ2805で
は、文番号kが「1」、nstmtが「2」なので判定結果
はYESとなる。ステップ2806は、今の場合、プロ
セス範囲が0で第1の文を考えているのだから、test_l
ow, test_uppは、それぞれ、図18の1805、180
6より「1」、「128」となる。kは「1」、lowは
「128」なので、"low≧test_low、かつ、low≦test_
upp"が成立し、order(1)には「2」が代入される。これ
を表わしたのが、図30の3002である。ステップ2
807により、kの値を「2」に更新してステップ28
05に戻る。
で、lary2は「2」なので、判定結果はYESとなる。
ステップ2804では、要素数2の配列orderを確保し
て、これをSelect(2)2401が指す非交差区間テーブ
ル2301に接続する。配列orderを表わしたのが、図
30の3002、3003であり、これは図30に示さ
れるように、非交差区間テーブル2301中の2314
によってポイントされる。さらに、ステップ2804で
は、文番号kに「1」を、lowにSelect(2)2401が
指す非交差区間テーブル2301の2311に格納され
たの下限値「128」を代入する。ステップ2805で
は、文番号kが「1」、nstmtが「2」なので判定結果
はYESとなる。ステップ2806は、今の場合、プロ
セス範囲が0で第1の文を考えているのだから、test_l
ow, test_uppは、それぞれ、図18の1805、180
6より「1」、「128」となる。kは「1」、lowは
「128」なので、"low≧test_low、かつ、low≦test_
upp"が成立し、order(1)には「2」が代入される。これ
を表わしたのが、図30の3002である。ステップ2
807により、kの値を「2」に更新してステップ28
05に戻る。
【0111】ステップ2805では、文番号kが
「2」、nstmtが「2」なので判定結果はYESとな
る。ステップ2806は、今の場合、プロセス範囲が0
で第2の文を考えているのだから、test_low, test_upp
は、それぞれ、図19の1905、1906より
「1」、「127」となる。kは「2」、lowは「12
8」なので、"low>test_upp"が成立し、order(2)には
「3」が代入される。これを表わしたのが、図30の3
003である。ステップ2807により、kの値を
「3」に更新する。ステップ2805では、文番号kが
「3」、nstmtが「2」なので判定結果はNOとなる。
ステップ2808により、jの値を「3」に更新する。
ステップ2803において、jは「3」、lary2は
「2」なので、判定結果はNOとなる。ステップ280
9で次のプロセス範囲へ処理を移し、ステップ2801
に戻る。
「2」、nstmtが「2」なので判定結果はYESとな
る。ステップ2806は、今の場合、プロセス範囲が0
で第2の文を考えているのだから、test_low, test_upp
は、それぞれ、図19の1905、1906より
「1」、「127」となる。kは「2」、lowは「12
8」なので、"low>test_upp"が成立し、order(2)には
「3」が代入される。これを表わしたのが、図30の3
003である。ステップ2807により、kの値を
「3」に更新する。ステップ2805では、文番号kが
「3」、nstmtが「2」なので判定結果はNOとなる。
ステップ2808により、jの値を「3」に更新する。
ステップ2803において、jは「3」、lary2は
「2」なので、判定結果はNOとなる。ステップ280
9で次のプロセス範囲へ処理を移し、ステップ2801
に戻る。
【0112】ステップ2801では、まだプロセス範囲
1〜2が存在するので、判定結果はYESとなる。ステ
ップ2802では、jを「1」に初期化する。ステップ
2803におけるlary2は配列Selectの要素数に等しい
ので、図25より「3」となる。従って、ステップ28
03の条件式は"1≦j≦3"となる。今の場合はjは値が
「1」に初期化されているので、ステップ2803での
判定はYESとなる。ステップ2804では、要素数2
の配列orderを確保して、これをSelect(1)2402が指
す非交差区間テーブル2302に接続する。配列order
を表わしたのが、図30の3004、3005であり、
これは図30に示されるように、非交差区間テーブル2
302中の2318からポイントされている。さらに、
ステップ2804では、文番号kに「1」を、lowにSel
ect(1)2402が指す非交差区間テーブル2302の2
315に格納された下限値「0」を代入する。ステップ
2805は、文番号kが「1」、nstmtが「2」なので
判定結果はYESとなる。ステップ2806は、今の場
合、プロセス範囲が1〜2で第1の文を考えているのだ
から、test_low, test_uppは、それぞれ、図18の18
09、1810より「1」、「128」となる。kは
「1」、lowは「0」なので、"low<test_low"が成立
し、order(1)には「1」が代入される。これを表わした
のが、図30の3004である。ステップ2807によ
り、kの値を「2」に更新してステップ2805に戻
る。
1〜2が存在するので、判定結果はYESとなる。ステ
ップ2802では、jを「1」に初期化する。ステップ
2803におけるlary2は配列Selectの要素数に等しい
ので、図25より「3」となる。従って、ステップ28
03の条件式は"1≦j≦3"となる。今の場合はjは値が
「1」に初期化されているので、ステップ2803での
判定はYESとなる。ステップ2804では、要素数2
の配列orderを確保して、これをSelect(1)2402が指
す非交差区間テーブル2302に接続する。配列order
を表わしたのが、図30の3004、3005であり、
これは図30に示されるように、非交差区間テーブル2
302中の2318からポイントされている。さらに、
ステップ2804では、文番号kに「1」を、lowにSel
ect(1)2402が指す非交差区間テーブル2302の2
315に格納された下限値「0」を代入する。ステップ
2805は、文番号kが「1」、nstmtが「2」なので
判定結果はYESとなる。ステップ2806は、今の場
合、プロセス範囲が1〜2で第1の文を考えているのだ
から、test_low, test_uppは、それぞれ、図18の18
09、1810より「1」、「128」となる。kは
「1」、lowは「0」なので、"low<test_low"が成立
し、order(1)には「1」が代入される。これを表わした
のが、図30の3004である。ステップ2807によ
り、kの値を「2」に更新してステップ2805に戻
る。
【0113】ステップ2805は、文番号kが「2」、
nstmtが「2」なので、判定結果はYESとなる。ステ
ップ2806は、今の場合、プロセス範囲が1〜2で第
2の文を考えているのだから、test_low, test_uppは、
それぞれ、図19の1909、1910より「0」、
「127」となる。kは「2」、lowは「0」なので、"
low≧test_low、かつ、low≦test_upp"が成立し、order
(2)には「2」が代入される。これを表わしたのが、図
30の3005である。ステップ2807により、kの
値を「3」に更新してステップ2805に戻る。ステッ
プ2805は、文番号kが「3」、nstmtが「2」なの
で判定結果はNOとなる。ステップ2808において、
jの値を「2」に更新してステップ2803に戻る。
nstmtが「2」なので、判定結果はYESとなる。ステ
ップ2806は、今の場合、プロセス範囲が1〜2で第
2の文を考えているのだから、test_low, test_uppは、
それぞれ、図19の1909、1910より「0」、
「127」となる。kは「2」、lowは「0」なので、"
low≧test_low、かつ、low≦test_upp"が成立し、order
(2)には「2」が代入される。これを表わしたのが、図
30の3005である。ステップ2807により、kの
値を「3」に更新してステップ2805に戻る。ステッ
プ2805は、文番号kが「3」、nstmtが「2」なの
で判定結果はNOとなる。ステップ2808において、
jの値を「2」に更新してステップ2803に戻る。
【0114】ステップ2803において、jは「2」、
lary2は「3」なので、判定結果はYESとなる。ステ
ップ2804では、要素数2の配列orderを確保して、
これをSelect(2)2403が指す非交差区間テーブル2
303に接続する。配列orderを表わしたのが、図30
の3006、3007であり、これは図30に示される
ように、非交差区間テーブル2303中の2322から
ポイントされている。さらに、ステップ2804では、
文番号kに「1」を、lowにSelect(2)2403が指す
非交差区間テーブル2303の2319に格納された下
限値「1」を代入する。ステップ2805は、文番号k
が「1」、nstmtが「2」なので判定結果はYESとな
る。ステップ2806は、今の場合、プロセス範囲が1
〜2で第1の文を考えているのだから、test_low, test
_uppは、それぞれ、図18の1813、1814より
「1」、「128」となる。kは「1」、lowは「1」
なので、"low≧test_low、かつ、low≦test_upp"が成立
し、order(1)には「2」が代入される。これを表わした
のが、図30の3006である。ステップ2807によ
り、kの値を「2」に更新してステップ2805に戻
る。
lary2は「3」なので、判定結果はYESとなる。ステ
ップ2804では、要素数2の配列orderを確保して、
これをSelect(2)2403が指す非交差区間テーブル2
303に接続する。配列orderを表わしたのが、図30
の3006、3007であり、これは図30に示される
ように、非交差区間テーブル2303中の2322から
ポイントされている。さらに、ステップ2804では、
文番号kに「1」を、lowにSelect(2)2403が指す
非交差区間テーブル2303の2319に格納された下
限値「1」を代入する。ステップ2805は、文番号k
が「1」、nstmtが「2」なので判定結果はYESとな
る。ステップ2806は、今の場合、プロセス範囲が1
〜2で第1の文を考えているのだから、test_low, test
_uppは、それぞれ、図18の1813、1814より
「1」、「128」となる。kは「1」、lowは「1」
なので、"low≧test_low、かつ、low≦test_upp"が成立
し、order(1)には「2」が代入される。これを表わした
のが、図30の3006である。ステップ2807によ
り、kの値を「2」に更新してステップ2805に戻
る。
【0115】ステップ2805は、文番号kが「2」、
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が1〜2で第2の文を
考えているのだから、test_low, test_uppは、それぞ
れ、図19の1913、1914より「0」、「12
8」となる。kは「2」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(2)に
は「2」が代入される。これを表わしたのが、図30の
3007である。ステップ2807により、kの値を
「3」に更新してステップ2805に戻る。ステップ2
805は、文番号kが「3」、nstmtが「2」なので判
定結果はNOとなる。ステップ2808により、jの値
を「3」に更新してステップ2803に戻る。
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が1〜2で第2の文を
考えているのだから、test_low, test_uppは、それぞ
れ、図19の1913、1914より「0」、「12
8」となる。kは「2」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(2)に
は「2」が代入される。これを表わしたのが、図30の
3007である。ステップ2807により、kの値を
「3」に更新してステップ2805に戻る。ステップ2
805は、文番号kが「3」、nstmtが「2」なので判
定結果はNOとなる。ステップ2808により、jの値
を「3」に更新してステップ2803に戻る。
【0116】ステップ2803において、jは「3」、
lary2は「3」なので、判定結果はYESとなる。ステ
ップ2804では、要素数2の配列orderを確保して、
これをSelect(3)2404が指す非交差区間テーブル2
304に接続する。配列orderを表わしたのが、図30
の3008、3009であり、これは図30に示される
ように、非交差区間テーブル2304中の2326から
ポイントされている。さらに、ステップ2804では、
文番号kに「1」を、lowにSelect(1)2404が指す非
交差区間テーブル2304の2323に格納された下限
値「128」を代入する。ステップ2805は、文番号
kが「1」、nstmtが「2」なので判定結果はYESと
なる。ステップ2806は、今、プロセス範囲が1〜2
で第1の文を考えているのだから、test_low, test_upp
は、それぞれ、図18の1809、1810より
「1」、「128」となる。kは「1」、lowは「12
8」なので、"low≧test_low、かつ、low≦test_upp"が
成立し、order(1)には「2」が代入される。これを表わ
したのが、図30の3008である。ステップ2807
により、kの値を「2」に更新してステップ2805に
戻る。
lary2は「3」なので、判定結果はYESとなる。ステ
ップ2804では、要素数2の配列orderを確保して、
これをSelect(3)2404が指す非交差区間テーブル2
304に接続する。配列orderを表わしたのが、図30
の3008、3009であり、これは図30に示される
ように、非交差区間テーブル2304中の2326から
ポイントされている。さらに、ステップ2804では、
文番号kに「1」を、lowにSelect(1)2404が指す非
交差区間テーブル2304の2323に格納された下限
値「128」を代入する。ステップ2805は、文番号
kが「1」、nstmtが「2」なので判定結果はYESと
なる。ステップ2806は、今、プロセス範囲が1〜2
で第1の文を考えているのだから、test_low, test_upp
は、それぞれ、図18の1809、1810より
「1」、「128」となる。kは「1」、lowは「12
8」なので、"low≧test_low、かつ、low≦test_upp"が
成立し、order(1)には「2」が代入される。これを表わ
したのが、図30の3008である。ステップ2807
により、kの値を「2」に更新してステップ2805に
戻る。
【0117】ステップ2805は、文番号kが「2」、
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が1〜2で第2の文を
考えているのだから、test_low, test_uppは、それぞ
れ、図19の1909、1910より「0」、「12
7」となる。kは「2」、lowは「128」なので、"lo
w>test_upp"が成立し、order(2)には「3」が代入され
る。これを表わしたのが、図30の3009である。ス
テップ2807により、kの値を「3」に更新してステ
ップ2805に戻る。ステップ2805は、文番号kが
「3」、nstmtが「2」なので判定結果はNOとなる。
ステップ2808により、jの値を「4」に更新してス
テップ2803に戻る。ステップ2803において、j
は「4」、lary2は「3」なので、判定結果はNOとな
る。ステップ2809で、次のプロセス範囲へ処理を移
しステップ2801に戻る
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が1〜2で第2の文を
考えているのだから、test_low, test_uppは、それぞ
れ、図19の1909、1910より「0」、「12
7」となる。kは「2」、lowは「128」なので、"lo
w>test_upp"が成立し、order(2)には「3」が代入され
る。これを表わしたのが、図30の3009である。ス
テップ2807により、kの値を「3」に更新してステ
ップ2805に戻る。ステップ2805は、文番号kが
「3」、nstmtが「2」なので判定結果はNOとなる。
ステップ2808により、jの値を「4」に更新してス
テップ2803に戻る。ステップ2803において、j
は「4」、lary2は「3」なので、判定結果はNOとな
る。ステップ2809で、次のプロセス範囲へ処理を移
しステップ2801に戻る
【0118】ステップ2801では、プロセス範囲3が
存在するので、判定結果はYESとなる。ステップ28
02において、jを「1」に初期化する。ステップ28
03におけるlary2は配列Selectの要素数に等しいの
で、図25より「2」となる。従って、ステップ280
3の条件式は"1≦j≦2"となる。今の場合はjは値が
「1」に初期化されているので、ステップ2803での
判定結果はYESとなる。ステップ2804では、要素
数2の配列orderを確保して、これをSelect(1)2405
が指す非交差区間テーブル2305に接続する。配列or
derを表わしたのが、図30の3010、3011であ
り、これは図30に示されるように、非交差区間テーブ
ル2305中の2330からポイントされている。さら
に、ステップ2804では、文番号kに「1」を、low
にSelect(1)2405が指す非交差区間テーブル230
5の2327に格納された下限値「0」を代入する。
存在するので、判定結果はYESとなる。ステップ28
02において、jを「1」に初期化する。ステップ28
03におけるlary2は配列Selectの要素数に等しいの
で、図25より「2」となる。従って、ステップ280
3の条件式は"1≦j≦2"となる。今の場合はjは値が
「1」に初期化されているので、ステップ2803での
判定結果はYESとなる。ステップ2804では、要素
数2の配列orderを確保して、これをSelect(1)2405
が指す非交差区間テーブル2305に接続する。配列or
derを表わしたのが、図30の3010、3011であ
り、これは図30に示されるように、非交差区間テーブ
ル2305中の2330からポイントされている。さら
に、ステップ2804では、文番号kに「1」を、low
にSelect(1)2405が指す非交差区間テーブル230
5の2327に格納された下限値「0」を代入する。
【0119】ステップ2805は、文番号kが「1」、
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が3で第1の文を考え
ているのだから、test_low, test_uppは、それぞれ、図
18の1813、1814より「1」、「128」とな
る。kは「1」、lowは「0」なので、"low<test_low"
が成立し、order(1)には「1」が代入される。これを表
わしたのが、図30の3010である。ステップ280
7により、kの値を「2」に更新してステップ2805
に戻る。
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が3で第1の文を考え
ているのだから、test_low, test_uppは、それぞれ、図
18の1813、1814より「1」、「128」とな
る。kは「1」、lowは「0」なので、"low<test_low"
が成立し、order(1)には「1」が代入される。これを表
わしたのが、図30の3010である。ステップ280
7により、kの値を「2」に更新してステップ2805
に戻る。
【0120】ステップ2805は、文番号kが「2」、
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が3で第2の文を考え
ているのだから、test_low, test_uppは、それぞれ、図
19の1913、1914より「0」、「128」とな
る。kは「2」、lowは「0」なので、"low≧test_lo
w、かつ、low≦test_upp"が成立し、order(2)には
「2」が代入される。これを表わしたのが、図30の3
011である。ステップ2807により、kの値を
「3」に更新しステップ2805に戻る。ステップ28
05は、文番号kが「3」、nstmtが「2」なので判定
結果はNOとなる。ステップ2808により、jの値を
「2」に更新してステップ2803に戻る。
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今、プロセス範囲が3で第2の文を考え
ているのだから、test_low, test_uppは、それぞれ、図
19の1913、1914より「0」、「128」とな
る。kは「2」、lowは「0」なので、"low≧test_lo
w、かつ、low≦test_upp"が成立し、order(2)には
「2」が代入される。これを表わしたのが、図30の3
011である。ステップ2807により、kの値を
「3」に更新しステップ2805に戻る。ステップ28
05は、文番号kが「3」、nstmtが「2」なので判定
結果はNOとなる。ステップ2808により、jの値を
「2」に更新してステップ2803に戻る。
【0121】ステップ2803において、jは「2」、
lary2は「2」なので、判定はYESとなる。ステップ
2804では、要素数2の配列orderを確保して、これ
をSelect(2)2406が指す非交差区間テーブル230
6に接続する。配列orderを表わしたのが、図30の3
012、3013であり、これは図30に示されるよう
に、非交差区間テーブル2306中の2334からポイ
ントされている。さらに、ステップ2804では、文番
号kに「1」を、lowにSelect(2)2406が指す非交
差区間テーブル2306の2331に格納された下限値
「1」を代入する。ステップ2805では、文番号kが
「1」、nstmtが「2」なので、判定はYESとなる。
ステップ2806は、今、プロセス範囲が3で第1の文
を考えているのだから、test_low, test_uppは、それぞ
れ、図18の1813、1814より「1」、「12
8」となる。kは「1」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(1)に
は「2」が代入される。これを表わしたのが、図30の
3012である。ステップ2807により、kの値を
「2」に更新してステップ2805に戻る。
lary2は「2」なので、判定はYESとなる。ステップ
2804では、要素数2の配列orderを確保して、これ
をSelect(2)2406が指す非交差区間テーブル230
6に接続する。配列orderを表わしたのが、図30の3
012、3013であり、これは図30に示されるよう
に、非交差区間テーブル2306中の2334からポイ
ントされている。さらに、ステップ2804では、文番
号kに「1」を、lowにSelect(2)2406が指す非交
差区間テーブル2306の2331に格納された下限値
「1」を代入する。ステップ2805では、文番号kが
「1」、nstmtが「2」なので、判定はYESとなる。
ステップ2806は、今、プロセス範囲が3で第1の文
を考えているのだから、test_low, test_uppは、それぞ
れ、図18の1813、1814より「1」、「12
8」となる。kは「1」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(1)に
は「2」が代入される。これを表わしたのが、図30の
3012である。ステップ2807により、kの値を
「2」に更新してステップ2805に戻る。
【0122】ステップ2805は、文番号kが「2」、
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今の場合、プロセス範囲が3で第2の文
を考えているのだから、test_low, test_uppは、それぞ
れ、図19の1913、1914より「0」、「12
8」となる。kは「2」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(2)に
は「2」が代入される。これを表わしたのが、図30の
3013である。ステップ2807により、kの値を
「3」に更新してステップ2805に戻る。ステップ2
805は、文番号kが「3」、nstmtが「2」なので判
定結果はNOとなる。ステップ2808により、jの値
を「3」に更新してステップ2803に戻る。ステップ
2803において、jは「3」、lary2は「2」なの
で、判定結果はNOとなる。ステップ2809で、次の
プロセス範囲へ処理を移し、ステップ2801に戻る。
ステップ2801は、プロセス範囲が存在しないので、
判定結果はNOとなる。以上で、順序表現作成ステップ
2700の全ての処理を終了する。
nstmtが「2」なので判定結果はYESとなる。ステッ
プ2806は、今の場合、プロセス範囲が3で第2の文
を考えているのだから、test_low, test_uppは、それぞ
れ、図19の1913、1914より「0」、「12
8」となる。kは「2」、lowは「1」なので、"low≧t
est_low、かつ、low≦test_upp"が成立し、order(2)に
は「2」が代入される。これを表わしたのが、図30の
3013である。ステップ2807により、kの値を
「3」に更新してステップ2805に戻る。ステップ2
805は、文番号kが「3」、nstmtが「2」なので判
定結果はNOとなる。ステップ2808により、jの値
を「3」に更新してステップ2803に戻る。ステップ
2803において、jは「3」、lary2は「2」なの
で、判定結果はNOとなる。ステップ2809で、次の
プロセス範囲へ処理を移し、ステップ2801に戻る。
ステップ2801は、プロセス範囲が存在しないので、
判定結果はNOとなる。以上で、順序表現作成ステップ
2700の全ての処理を終了する。
【0123】次に、プロセス間共用ループ複製ステップ
2701の処理を図17、図29〜図38を用いて説明
する。プロセス間共用ループ複製ステップ2701は、
図28で説明した順序表現作成ステップ2700におけ
る処理結果を用いて、各プロセス毎の非交差区間列から
どの区間を選択するか、またはそのプロセスからは選択
しないかを決定し、選択された一般に複数の区間の上下
限値をループの上下限値とするループを、元のループか
ら複製して生成するステップである。複数の区間に対し
て1つのループを生成するため、ループ直前にはプログ
ラムを実行するプロセス番号を判定する条件文と、各プ
ロセス毎に、そのプロセスの選択された区間の上下限値
をループの上下限値にする代入文が生成される。図29
はプロセス間共用ループ複製ステップ2701の処理を
説明するための図である。図31はループ実行テーブル
に対して、ステップ2900を適用した結果を示す図で
ある。図32はループ実行テーブルに対して、ステップ
2901を最初に適用した結果を示す図である。図33
はループ実行テーブルに対して、ステップ2901を2
度目に適用した結果を示す図である。図34はループ実
行テーブルに対して、ステップ2901を3度目に適用
した結果を示す図である。図35はプロセス間共用ルー
プ複製ステップ2701の適用結果のILをソースプロ
グラムスタイルで記述したものである。図36は図35
におけるLOWLIM1, UPPLIM1の値設定コード3500であ
る。図37は図35におけるLOWLIM2, UPPLIM2の値設定
コード3503である。図38は図35におけるLOWLIM
3, UPPLIM3の値設定コード3507である。ここで、図
17のsnum1720は選択候補の非交差区間を示すため
の配列Selectの添字である。sflag1721は選択候補
の非交差区間が実際に選択されるか否かを示すフラグで
ある。
2701の処理を図17、図29〜図38を用いて説明
する。プロセス間共用ループ複製ステップ2701は、
図28で説明した順序表現作成ステップ2700におけ
る処理結果を用いて、各プロセス毎の非交差区間列から
どの区間を選択するか、またはそのプロセスからは選択
しないかを決定し、選択された一般に複数の区間の上下
限値をループの上下限値とするループを、元のループか
ら複製して生成するステップである。複数の区間に対し
て1つのループを生成するため、ループ直前にはプログ
ラムを実行するプロセス番号を判定する条件文と、各プ
ロセス毎に、そのプロセスの選択された区間の上下限値
をループの上下限値にする代入文が生成される。図29
はプロセス間共用ループ複製ステップ2701の処理を
説明するための図である。図31はループ実行テーブル
に対して、ステップ2900を適用した結果を示す図で
ある。図32はループ実行テーブルに対して、ステップ
2901を最初に適用した結果を示す図である。図33
はループ実行テーブルに対して、ステップ2901を2
度目に適用した結果を示す図である。図34はループ実
行テーブルに対して、ステップ2901を3度目に適用
した結果を示す図である。図35はプロセス間共用ルー
プ複製ステップ2701の適用結果のILをソースプロ
グラムスタイルで記述したものである。図36は図35
におけるLOWLIM1, UPPLIM1の値設定コード3500であ
る。図37は図35におけるLOWLIM2, UPPLIM2の値設定
コード3503である。図38は図35におけるLOWLIM
3, UPPLIM3の値設定コード3507である。ここで、図
17のsnum1720は選択候補の非交差区間を示すため
の配列Selectの添字である。sflag1721は選択候補
の非交差区間が実際に選択されるか否かを示すフラグで
ある。
【0124】ステップ2900ではjに「1」を代入
し、全プロセス範囲について、ループ実行テーブルのsn
umに「1」を、sflagに「OFF」を代入する。snumに
「1」を代入した結果は、図31の3100、310
2、3104に示されている。sflagに「OFF」を代入し
た結果は、図31の3101、3103、3105に示
されている。プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の時、lary2はそれぞれ、
「2」、「3」、「2」である。ステップ2901にお
いて、minvalにsnum≦lary2なる各プロセス範囲のSelec
t(snum)が指す非交差区間テーブルが指す配列orderの値
の、辞書式順序での最小値を代入するとともに、snum≦
lary2なる全プロセス範囲内について、minval=(各プ
ロセス範囲の現在のorderの値)ならsflagを「ON」に
し、プログラム中でユニークな変数名low(j)、upp(j)を
作成する。今の場合、全プロセス範囲についてsnumが
「1」で、snum≦lary2を満たしているので、Select(1)
が指す非交差区間テーブルが指す配列orderの値の辞書
式順序での最小値を求めてminvalに代入する。図30に
おいて、Select(1)が指す非交差区間テーブルが指す配
列orderの値は、プロセス範囲が0の時は3000、3
001より「2;2」、プロセス範囲が1〜2の時は3
004、3005より「1;2」、プロセス範囲が3の
時は3010、3011より「1;2」となるので、辞
書式順序での最小値は「1;2」となり、minvalには
「1;2」が代入される。次に上で求めたminvalと各プ
ロセス範囲の現在のorderの値が等しくなるのは、プロ
セス範囲が1〜2とプロセス範囲が3のときなので、両
者に対してsflagを「ON」にする。これを表わしたの
が、図32の3103、3105である。
し、全プロセス範囲について、ループ実行テーブルのsn
umに「1」を、sflagに「OFF」を代入する。snumに
「1」を代入した結果は、図31の3100、310
2、3104に示されている。sflagに「OFF」を代入し
た結果は、図31の3101、3103、3105に示
されている。プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の時、lary2はそれぞれ、
「2」、「3」、「2」である。ステップ2901にお
いて、minvalにsnum≦lary2なる各プロセス範囲のSelec
t(snum)が指す非交差区間テーブルが指す配列orderの値
の、辞書式順序での最小値を代入するとともに、snum≦
lary2なる全プロセス範囲内について、minval=(各プ
ロセス範囲の現在のorderの値)ならsflagを「ON」に
し、プログラム中でユニークな変数名low(j)、upp(j)を
作成する。今の場合、全プロセス範囲についてsnumが
「1」で、snum≦lary2を満たしているので、Select(1)
が指す非交差区間テーブルが指す配列orderの値の辞書
式順序での最小値を求めてminvalに代入する。図30に
おいて、Select(1)が指す非交差区間テーブルが指す配
列orderの値は、プロセス範囲が0の時は3000、3
001より「2;2」、プロセス範囲が1〜2の時は3
004、3005より「1;2」、プロセス範囲が3の
時は3010、3011より「1;2」となるので、辞
書式順序での最小値は「1;2」となり、minvalには
「1;2」が代入される。次に上で求めたminvalと各プ
ロセス範囲の現在のorderの値が等しくなるのは、プロ
セス範囲が1〜2とプロセス範囲が3のときなので、両
者に対してsflagを「ON」にする。これを表わしたの
が、図32の3103、3105である。
【0125】次のステップ2902は、プログラム中で
ユニークな変数名low(1)=LOWLIM1,upp(1)=UPPLIM1を作
成するステップである。このステップでは、全プロセス
範囲について、プロセス番号がプロセス範囲内にある条
件を表わす条件ILを生成するとともに、次の2文のI
Lを生成し、プロセス番号がプロセス範囲内にあるとき
実行するよう、上記条件ILに接続する。sflagが「O
N」のとき、low(j)=非交差区間の下限値、upp(j)=非
交差区間の上限値 上記以外のとき、low(j)=1、upp(j)=0 ステップ2902では、プロセス範囲が0、プロセス範
囲が1〜2、プロセス範囲が3の順に処理を行なう。
ユニークな変数名low(1)=LOWLIM1,upp(1)=UPPLIM1を作
成するステップである。このステップでは、全プロセス
範囲について、プロセス番号がプロセス範囲内にある条
件を表わす条件ILを生成するとともに、次の2文のI
Lを生成し、プロセス番号がプロセス範囲内にあるとき
実行するよう、上記条件ILに接続する。sflagが「O
N」のとき、low(j)=非交差区間の下限値、upp(j)=非
交差区間の上限値 上記以外のとき、low(j)=1、upp(j)=0 ステップ2902では、プロセス範囲が0、プロセス範
囲が1〜2、プロセス範囲が3の順に処理を行なう。
【0126】まず、プロセス範囲が0の時、プロセス番
号がプロセス範囲内にある条件を表わすILを生成す
る。この結果は図36の3600に示されている。プロ
セス範囲が0の時、図32の3101に示すように、sf
lagは「OFF」なので、low(j)=1、upp(j)=0であり、
上記LOWLIM1, UPPLIM1を使って、"LOWLIM1=1","UPPLIM1
=0"のILを作成して、上記3600に対応する条件I
Lに接続する。この結果を表わしたのが、図36の36
01、3602である。次に、プロセス範囲が1〜2の
時、プロセス番号がプロセス範囲内にある条件を表わす
ILを生成する。この結果は図36の3603に示され
ている。プロセス範囲が1〜2の時、図32の3103
に示すように、sflagは「ON」である。図32の310
2よりsnumは「1」なので、図30のSelect(1)が指す
非交差区間テーブル2302を参照する。これから、下
限値2315、上限値2316の値は「0」、「0」な
ので(low(j)=0、upp(j)=0)、上記LOWLIM1,UPPLIM
1を使って、"LOWLIM1=0", "UPPLIM1=0"のILを作成し
て、上記3603に対応する条件ILに接続する。この
結果を表わしたのが、図36の3604、3605であ
る。
号がプロセス範囲内にある条件を表わすILを生成す
る。この結果は図36の3600に示されている。プロ
セス範囲が0の時、図32の3101に示すように、sf
lagは「OFF」なので、low(j)=1、upp(j)=0であり、
上記LOWLIM1, UPPLIM1を使って、"LOWLIM1=1","UPPLIM1
=0"のILを作成して、上記3600に対応する条件I
Lに接続する。この結果を表わしたのが、図36の36
01、3602である。次に、プロセス範囲が1〜2の
時、プロセス番号がプロセス範囲内にある条件を表わす
ILを生成する。この結果は図36の3603に示され
ている。プロセス範囲が1〜2の時、図32の3103
に示すように、sflagは「ON」である。図32の310
2よりsnumは「1」なので、図30のSelect(1)が指す
非交差区間テーブル2302を参照する。これから、下
限値2315、上限値2316の値は「0」、「0」な
ので(low(j)=0、upp(j)=0)、上記LOWLIM1,UPPLIM
1を使って、"LOWLIM1=0", "UPPLIM1=0"のILを作成し
て、上記3603に対応する条件ILに接続する。この
結果を表わしたのが、図36の3604、3605であ
る。
【0127】次に、プロセス範囲が3の時、プロセス番
号がプロセス範囲内にある条件を表わすILを生成す
る。この結果は図36の3606に示されている。プロ
セス範囲が3の時、図32の3105に示すように、sf
lagは「ON」である。図32の3104よりsnumは
「1」なので、図30のSelect(1)が指す非交差区間テ
ーブル2305を参照する。これから、下限値232
7、上限値2328の値は「0」、「0」なので、上記
LOWLIM1, UPPLIM1を使って、"LOWLIM1=0","UPPLIM1=0"
のILを作成して、上記3606に対応する条件ILに
接続する。この結果を表わしたのが、図36の360
7、3608である。
号がプロセス範囲内にある条件を表わすILを生成す
る。この結果は図36の3606に示されている。プロ
セス範囲が3の時、図32の3105に示すように、sf
lagは「ON」である。図32の3104よりsnumは
「1」なので、図30のSelect(1)が指す非交差区間テ
ーブル2305を参照する。これから、下限値232
7、上限値2328の値は「0」、「0」なので、上記
LOWLIM1, UPPLIM1を使って、"LOWLIM1=0","UPPLIM1=0"
のILを作成して、上記3606に対応する条件ILに
接続する。この結果を表わしたのが、図36の360
7、3608である。
【0128】次のステップ2903において、条件IL
をループ直前で実行するよう、プログラムILに接続ル
ープの複製を作成し、ループの下限値をlow(j)、上限値
をupp(j)とし、上記複製を条件IL直後で実行するよう
プログラムILに接続する。今の場合、図36で作成さ
れたILを図35の3500として、図35に接続し、
ループの複製を作成し、ループの下限値、上限値をLOWL
IM1, UPPLIM1とし、これを上記IL3500直後に接続
する。これを表わしたのが、図35のDOループ350
1である。
をループ直前で実行するよう、プログラムILに接続ル
ープの複製を作成し、ループの下限値をlow(j)、上限値
をupp(j)とし、上記複製を条件IL直後で実行するよう
プログラムILに接続する。今の場合、図36で作成さ
れたILを図35の3500として、図35に接続し、
ループの複製を作成し、ループの下限値、上限値をLOWL
IM1, UPPLIM1とし、これを上記IL3500直後に接続
する。これを表わしたのが、図35のDOループ350
1である。
【0129】次のステップ2904において、どのプロ
セス範囲にも未選択の非交差区間がないか否かを判定す
る。判定の結果、YESであればプロセス間共有ループ
複製ステップ2701の処理を全て終了する。NOであ
ればステップ2905に進む。今の場合、プロセス範囲
0には未選択の非交差区間テーブルがまだあるので、判
定結果はNOであり、ステップ2905に進む。ステッ
プ2905において、jの値を1更新し、sflagが「O
N」ならsnumを1更新し、sflagを「OFF」に初期化して
ステップ2901に戻る。今の場合、jの値を1更新し
て「2」とするとともに、プロセス範囲が1〜2、およ
びプロセス範囲が3の場合にはsflagが「ON」であるか
ら(図32参照)、snumの値を「1」だけ増加する。こ
れを表わしたのが、図33の3102、3104であ
る。また、全てのsflagを「OFF」に初期化する。
セス範囲にも未選択の非交差区間がないか否かを判定す
る。判定の結果、YESであればプロセス間共有ループ
複製ステップ2701の処理を全て終了する。NOであ
ればステップ2905に進む。今の場合、プロセス範囲
0には未選択の非交差区間テーブルがまだあるので、判
定結果はNOであり、ステップ2905に進む。ステッ
プ2905において、jの値を1更新し、sflagが「O
N」ならsnumを1更新し、sflagを「OFF」に初期化して
ステップ2901に戻る。今の場合、jの値を1更新し
て「2」とするとともに、プロセス範囲が1〜2、およ
びプロセス範囲が3の場合にはsflagが「ON」であるか
ら(図32参照)、snumの値を「1」だけ増加する。こ
れを表わしたのが、図33の3102、3104であ
る。また、全てのsflagを「OFF」に初期化する。
【0130】プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の時、lary2はそれぞれ、
「2」、「3」、「2」である。ステップ2901で
は、プロセス範囲が0の時はsnumが「1」で、プロセス
範囲が1〜2、およびプロセス範囲が3の時はsnumの値
が「2」なので、snum≦lary2を満たし、プロセス範囲
が0の時はSelect(1)が指す非交差区間テーブルが指す
配列orderの値、プロセス範囲が1〜2、およびプロセ
ス範囲が3の時はSelect(2)が指す非交差区間テーブル
が指す配列orderの値を見て、それぞれの値の辞書式順
序での最小値を求めて、minvalに代入する。図30にお
いて、上記配列orderの値は、プロセス範囲が0の時は
3000、3001より「2;2」、プロセス範囲が1
〜2の時は3006、3007より「2;2」、プロセ
ス範囲が3の時は3012、3013より「2;2」と
なるので、辞書式順序での値は全て同じで、最小値は
「2;2」となり、minvalには「2;2」が代入され
る。次に、上で求めたminvalと各プロセス範囲の現在の
orderの値は全てのプロセス範囲で等しくなるので、全
プロセス範囲に対してsflagを「ON」にする。これを表
わしたのが、図33の3101、3103、3105で
ある。
2、プロセス範囲が3の時、lary2はそれぞれ、
「2」、「3」、「2」である。ステップ2901で
は、プロセス範囲が0の時はsnumが「1」で、プロセス
範囲が1〜2、およびプロセス範囲が3の時はsnumの値
が「2」なので、snum≦lary2を満たし、プロセス範囲
が0の時はSelect(1)が指す非交差区間テーブルが指す
配列orderの値、プロセス範囲が1〜2、およびプロセ
ス範囲が3の時はSelect(2)が指す非交差区間テーブル
が指す配列orderの値を見て、それぞれの値の辞書式順
序での最小値を求めて、minvalに代入する。図30にお
いて、上記配列orderの値は、プロセス範囲が0の時は
3000、3001より「2;2」、プロセス範囲が1
〜2の時は3006、3007より「2;2」、プロセ
ス範囲が3の時は3012、3013より「2;2」と
なるので、辞書式順序での値は全て同じで、最小値は
「2;2」となり、minvalには「2;2」が代入され
る。次に、上で求めたminvalと各プロセス範囲の現在の
orderの値は全てのプロセス範囲で等しくなるので、全
プロセス範囲に対してsflagを「ON」にする。これを表
わしたのが、図33の3101、3103、3105で
ある。
【0131】次に、プログラム中でユニークな変数名lo
w(2)=LOWLIM2, upp(2)=UPPLIM2を作成する。ステップ2
902では、プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の順に処理を行なう。プロセス範
囲が0の時、プロセス番号がプロセス範囲内にある条件
を表わすILを生成する。この結果は図37の条件文3
700に示されている。プロセス範囲が0の時、図33
の3101に示すように、sflagは「ON」である。図3
3の3100よりsnumは「1」なので、図30のSelect
(1)が指す非交差区間テーブル2300を参照する。こ
れから、下限値2307、上限値2308の値は
「1」、「127」なので、上記LOWLIM2, UPPLIM2を使
って、"LOWLIM2=1", "UPPLIM2=127"のILを作成し
て、上記3700に対応する条件ILに接続する。この
結果を表わしたのが、図37の文3701、3702で
ある。次に、プロセス範囲が1〜2の時、プロセス番号
がプロセス範囲内にある条件を表わすILを生成する。
この結果は図37の条件文3703に示されている。プ
ロセス範囲が1〜2の時、図33の3103に示すよう
に、sflagは「ON」である。図33の3102よりsnum
は「2」なので、図30のSelect(2)が指す非交差区間
テーブル2303を参照する。これから、下限値231
9、上限値2320の値は「1」、「127」なので、
上記LOWLIM2, UPPLIM2を使って、"LOWLIM2=1", "UPPLI
M2=127"のILを作成して、上記3703に対応する条
件ILに接続する。この結果を表わしたのが、図37の
文3704、3705である。
w(2)=LOWLIM2, upp(2)=UPPLIM2を作成する。ステップ2
902では、プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の順に処理を行なう。プロセス範
囲が0の時、プロセス番号がプロセス範囲内にある条件
を表わすILを生成する。この結果は図37の条件文3
700に示されている。プロセス範囲が0の時、図33
の3101に示すように、sflagは「ON」である。図3
3の3100よりsnumは「1」なので、図30のSelect
(1)が指す非交差区間テーブル2300を参照する。こ
れから、下限値2307、上限値2308の値は
「1」、「127」なので、上記LOWLIM2, UPPLIM2を使
って、"LOWLIM2=1", "UPPLIM2=127"のILを作成し
て、上記3700に対応する条件ILに接続する。この
結果を表わしたのが、図37の文3701、3702で
ある。次に、プロセス範囲が1〜2の時、プロセス番号
がプロセス範囲内にある条件を表わすILを生成する。
この結果は図37の条件文3703に示されている。プ
ロセス範囲が1〜2の時、図33の3103に示すよう
に、sflagは「ON」である。図33の3102よりsnum
は「2」なので、図30のSelect(2)が指す非交差区間
テーブル2303を参照する。これから、下限値231
9、上限値2320の値は「1」、「127」なので、
上記LOWLIM2, UPPLIM2を使って、"LOWLIM2=1", "UPPLI
M2=127"のILを作成して、上記3703に対応する条
件ILに接続する。この結果を表わしたのが、図37の
文3704、3705である。
【0132】次に、プロセス範囲が3の時、プロセス番
号がプロセス範囲内にある条件を表わすILを生成す
る。この結果は図37の条件文3706に示されてい
る。プロセス範囲が3の時、図33の3105に示すよ
うに、sflagは「ON」である。図33の3104よりsnu
mは「2」なので、図30のSelect(2)が指す非交差区
間テーブル2306を参照する。これから、下限値23
31、上限値2332の値は「1」、「128」なの
で、上記LOWLIM2, UPPLIM2を使って、"LOWLIM2=1", "U
PPLIM2=128"のILを作成して、上記3706に対応す
る条件ILに接続する。この結果を表わしたのが、図3
7の文3707、3708である。ステップ2903で
は図37で作成されたILを3503として、図35に
接続し、ループの複製を作成し、ループの下限値、上限
値をLOWLIM2, UPPLIM2とし、これを上記IL3503直
後に接続する。これを表わしたのが、図35のDOルー
プ3504である。ステップ2904は、プロセス範囲
0に未選択の非交差区間テーブルがあるので、判定はN
Oである。次のステップ2905で、jの値を「3」に
更新し、sflagが「ON」の場合、即ち、今の場合全プロ
セス範囲に対してsnumの値を1だけ増やす。これを表わ
したのが、図34の3100、3102、3104であ
る。また、全てのsflagを「OFF」に初期化する。プロセ
ス範囲が0、プロセス範囲が1〜2、プロセス範囲が3
の時、lary2はそれぞれ、「2」、「3」、「2」であ
る。その後ステップ2901に戻る。
号がプロセス範囲内にある条件を表わすILを生成す
る。この結果は図37の条件文3706に示されてい
る。プロセス範囲が3の時、図33の3105に示すよ
うに、sflagは「ON」である。図33の3104よりsnu
mは「2」なので、図30のSelect(2)が指す非交差区
間テーブル2306を参照する。これから、下限値23
31、上限値2332の値は「1」、「128」なの
で、上記LOWLIM2, UPPLIM2を使って、"LOWLIM2=1", "U
PPLIM2=128"のILを作成して、上記3706に対応す
る条件ILに接続する。この結果を表わしたのが、図3
7の文3707、3708である。ステップ2903で
は図37で作成されたILを3503として、図35に
接続し、ループの複製を作成し、ループの下限値、上限
値をLOWLIM2, UPPLIM2とし、これを上記IL3503直
後に接続する。これを表わしたのが、図35のDOルー
プ3504である。ステップ2904は、プロセス範囲
0に未選択の非交差区間テーブルがあるので、判定はN
Oである。次のステップ2905で、jの値を「3」に
更新し、sflagが「ON」の場合、即ち、今の場合全プロ
セス範囲に対してsnumの値を1だけ増やす。これを表わ
したのが、図34の3100、3102、3104であ
る。また、全てのsflagを「OFF」に初期化する。プロセ
ス範囲が0、プロセス範囲が1〜2、プロセス範囲が3
の時、lary2はそれぞれ、「2」、「3」、「2」であ
る。その後ステップ2901に戻る。
【0133】次のステップ2901では、プロセス範囲
が0の時はsnumが「2」、プロセス範囲が1〜2、およ
びプロセス範囲が3の時はsnumの値が「3」なので、プ
ロセス範囲が0の時はSelect(2)が指す非交差区間テー
ブルが指す配列orderの値、プロセス範囲が1〜2の時
はSelect(3)が指す非交差区間テーブルが指す配列orde
rの値を見て、それぞれの値の辞書式順序での最小値を
求めて、minvalに代入する。プロセス範囲が3の時はsn
umの値がlary2より大きくなるので処理しない。図30
において、プロセス範囲が0の時はSelect(2)が指す非
交差区間テーブルが指す配列orderの値は、3002、
3003より「2;3」、プロセス範囲が1〜2の時は
3008、3009より「2;3」、プロセス範囲が3
の時は処理しないので、辞書式順序での最小値は「2;
3」となり、minvalには「2;3」が代入される。次に
上で求めたminvalと各プロセス範囲の現在のorderの値
が等しくなるのは、プロセス範囲が0とプロセス範囲が
1〜2のときなので、両者に対してsflagを「ON」にす
る。これを表わしたのが、図34の3101、3103
である。
が0の時はsnumが「2」、プロセス範囲が1〜2、およ
びプロセス範囲が3の時はsnumの値が「3」なので、プ
ロセス範囲が0の時はSelect(2)が指す非交差区間テー
ブルが指す配列orderの値、プロセス範囲が1〜2の時
はSelect(3)が指す非交差区間テーブルが指す配列orde
rの値を見て、それぞれの値の辞書式順序での最小値を
求めて、minvalに代入する。プロセス範囲が3の時はsn
umの値がlary2より大きくなるので処理しない。図30
において、プロセス範囲が0の時はSelect(2)が指す非
交差区間テーブルが指す配列orderの値は、3002、
3003より「2;3」、プロセス範囲が1〜2の時は
3008、3009より「2;3」、プロセス範囲が3
の時は処理しないので、辞書式順序での最小値は「2;
3」となり、minvalには「2;3」が代入される。次に
上で求めたminvalと各プロセス範囲の現在のorderの値
が等しくなるのは、プロセス範囲が0とプロセス範囲が
1〜2のときなので、両者に対してsflagを「ON」にす
る。これを表わしたのが、図34の3101、3103
である。
【0134】次にプログラム中でユニークな変数名low
(3)=LOWLIM3, upp(3)=UPPLIM3を作成する。ステップ2
902では、プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の順に処理を行なう。プロセス範
囲が0の時、プロセス番号がプロセス範囲内にある条件
を表わすILを生成する。この結果は図38の条件文3
800に示されている。プロセス範囲が0の時、図34
の3101に示すように、sflagは「ON」である。図3
4の3100よりsnumは「2」なので、図30のSelect
(2)が指す非交差区間テーブル2301を参照する。こ
れから、下限値2311、上限値2312の値は「12
8、128」なので、上記LOWLIM3, UPPLIM3を使っ
て、"LOWLIM3=128", "UPPLIM3=128"のILを作成し
て、上記3800に対応する条件ILに接続する。この
結果を表わしたのが、図38の文3801、3802で
ある。
(3)=LOWLIM3, upp(3)=UPPLIM3を作成する。ステップ2
902では、プロセス範囲が0、プロセス範囲が1〜
2、プロセス範囲が3の順に処理を行なう。プロセス範
囲が0の時、プロセス番号がプロセス範囲内にある条件
を表わすILを生成する。この結果は図38の条件文3
800に示されている。プロセス範囲が0の時、図34
の3101に示すように、sflagは「ON」である。図3
4の3100よりsnumは「2」なので、図30のSelect
(2)が指す非交差区間テーブル2301を参照する。こ
れから、下限値2311、上限値2312の値は「12
8、128」なので、上記LOWLIM3, UPPLIM3を使っ
て、"LOWLIM3=128", "UPPLIM3=128"のILを作成し
て、上記3800に対応する条件ILに接続する。この
結果を表わしたのが、図38の文3801、3802で
ある。
【0135】次に、プロセス範囲が1〜2の時、プロセ
ス番号がプロセス範囲内にある条件を表わすILを生成
する。この結果は図38の条件文3803に示されてい
る。プロセス範囲が1〜2の時、図34の3103に示
すように、sflagは「ON」である。図34の3102よ
りsnumは「3」なので、図30のSelect(3)が指す非交
差区間テーブル2304を参照する。これから、下限値
2323、上限値2324の値は「128」、「12
8」なので、上記LOWLIM3, UPPLIM3を使って、"LOWLIM3
=128", "UPPLIM3=128"のILを作成して、上記380
3に対応する条件ILに接続する。この結果を表わした
のが、図38の文3804、3805である。次に、プ
ロセス範囲が3の時、プロセス番号がプロセス範囲内に
ある条件を表わすILを生成する。この結果は図38の
条件文3806に示されている。プロセス範囲が3の
時、図34の3105に示すように、sflagは「OFF」で
ある。上記LOWLIM3, UPPLIM3を使って、"LOWLIM3=1","U
PPLIM3=0"のILを作成して、上記3806に対応する
条件ILに接続する。この結果を表わしたのが、図38
の文3807、3808である。
ス番号がプロセス範囲内にある条件を表わすILを生成
する。この結果は図38の条件文3803に示されてい
る。プロセス範囲が1〜2の時、図34の3103に示
すように、sflagは「ON」である。図34の3102よ
りsnumは「3」なので、図30のSelect(3)が指す非交
差区間テーブル2304を参照する。これから、下限値
2323、上限値2324の値は「128」、「12
8」なので、上記LOWLIM3, UPPLIM3を使って、"LOWLIM3
=128", "UPPLIM3=128"のILを作成して、上記380
3に対応する条件ILに接続する。この結果を表わした
のが、図38の文3804、3805である。次に、プ
ロセス範囲が3の時、プロセス番号がプロセス範囲内に
ある条件を表わすILを生成する。この結果は図38の
条件文3806に示されている。プロセス範囲が3の
時、図34の3105に示すように、sflagは「OFF」で
ある。上記LOWLIM3, UPPLIM3を使って、"LOWLIM3=1","U
PPLIM3=0"のILを作成して、上記3806に対応する
条件ILに接続する。この結果を表わしたのが、図38
の文3807、3808である。
【0136】ステップ2903では図38で作成された
ILを3507として、図35に接続し、ループの複製
を作成し、ループの下限値、上限値をLOWLIM3, UPPLIM3
とし、これを上記IL3507直後に接続する。これを
表わしたのが、図35のD0ループ3508である。次
のステップ2904において、今度は未選択の非交差区
間テーブルはないので、判定はYESであり処理を終了
する。以上でプロセス間共用ループ複製ステップ270
1の全ての処理を終了する。また、以上でループ複製部
108の処理も終了する。
ILを3507として、図35に接続し、ループの複製
を作成し、ループの下限値、上限値をLOWLIM3, UPPLIM3
とし、これを上記IL3507直後に接続する。これを
表わしたのが、図35のD0ループ3508である。次
のステップ2904において、今度は未選択の非交差区
間テーブルはないので、判定はYESであり処理を終了
する。以上でプロセス間共用ループ複製ステップ270
1の全ての処理を終了する。また、以上でループ複製部
108の処理も終了する。
【0137】次にコード変換部109の処理を図15、
図18、図19と図35〜図38までを用いて説明す
る。図15のステップ1500において、ループ複製部
108で複製されたループが、図35に示すように、3
501、3504、3508の3個あるので、判定はY
ESである。以下、上記順序で各ループに対して処理を
行なう。ステップ1501において、各ループ内には、
ASGN1609から始まる文とASGN1615から始まる文
の2つの文があるので、判定はYESである。以下、上
記順序で各文に対して処理を行なう。さらに、第1の文
の処理には、ASGN1609および直前のSINFO1608
が指す文実行範囲テーブルを参照しながら処理を行な
う。同様に、第2の文の処理には、ASGN1615および
直前のSINFO1614が指す文実行範囲テーブルを参照
しながら処理を行なう。ループ3501のループ実行範
囲は、図36に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜0」、「0〜0」、「0〜0」である。一方、第
1の文の実行範囲は、図18の1805と1806、1
809と1810、1813と1814に示すように、
全プロセス範囲に対して「1〜128」である。ここ
で、プロセス範囲が0の時のループ実行範囲である「1
〜0」に対しては、これ以降、包含関係を判定しないこ
とにする。よって、0以外のプロセス範囲に対して文の
実行範囲とループ実行範囲は互いに素(重なりがない)
となり、ステップ1502は第1の文に対する文ILを
削除する。ステップ1504で次の文へ移る。
図18、図19と図35〜図38までを用いて説明す
る。図15のステップ1500において、ループ複製部
108で複製されたループが、図35に示すように、3
501、3504、3508の3個あるので、判定はY
ESである。以下、上記順序で各ループに対して処理を
行なう。ステップ1501において、各ループ内には、
ASGN1609から始まる文とASGN1615から始まる文
の2つの文があるので、判定はYESである。以下、上
記順序で各文に対して処理を行なう。さらに、第1の文
の処理には、ASGN1609および直前のSINFO1608
が指す文実行範囲テーブルを参照しながら処理を行な
う。同様に、第2の文の処理には、ASGN1615および
直前のSINFO1614が指す文実行範囲テーブルを参照
しながら処理を行なう。ループ3501のループ実行範
囲は、図36に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜0」、「0〜0」、「0〜0」である。一方、第
1の文の実行範囲は、図18の1805と1806、1
809と1810、1813と1814に示すように、
全プロセス範囲に対して「1〜128」である。ここ
で、プロセス範囲が0の時のループ実行範囲である「1
〜0」に対しては、これ以降、包含関係を判定しないこ
とにする。よって、0以外のプロセス範囲に対して文の
実行範囲とループ実行範囲は互いに素(重なりがない)
となり、ステップ1502は第1の文に対する文ILを
削除する。ステップ1504で次の文へ移る。
【0138】ステップ1501は、第2の文があるの
で、判定はYESである。第2の文の実行範囲は、図1
9の1905と1906、1909と1910、191
3と1914に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜127」、「0〜127」、「0〜128」であ
る。範囲1〜0に対しては、包含関係を判定しないの
で、0以外のプロセス範囲に対して文の実行範囲はルー
プ実行範囲を包含する。従って、ステップ1502は、
第2の文に対する文ILをそのままにする。この結果を
表わしたのが図35の文3502である。ステップ15
04で次の文へ移る。
で、判定はYESである。第2の文の実行範囲は、図1
9の1905と1906、1909と1910、191
3と1914に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜127」、「0〜127」、「0〜128」であ
る。範囲1〜0に対しては、包含関係を判定しないの
で、0以外のプロセス範囲に対して文の実行範囲はルー
プ実行範囲を包含する。従って、ステップ1502は、
第2の文に対する文ILをそのままにする。この結果を
表わしたのが図35の文3502である。ステップ15
04で次の文へ移る。
【0139】ステップ1501では、ループ3501に
対して2つの文の処理を終えたので、他に文は存在しな
い。よって、判定はNOとなり、ステップ1503へ移
る。ステップ1503では、ループ内に文は1つあるの
で、何も処理せず、次の複製ループへ移る。ステップ1
500は、複製ループ3504が存在するので、判定は
YESである。ステップ1501は、各ループ内には、
ASGN1609から始まる文とASGN1615から始まる文
の2つの文があるので、判定はYESである。以下、上
記順序で各文に対して処理を行なう。ループ3504の
ループ実行範囲は、図37に示すように、プロセス範囲
が0、プロセス範囲が1〜2、プロセス範囲が3の時、
それぞれ、「1〜127」、「1〜127」、「1〜1
28」である。一方、第1の文の実行範囲は1805と
1806、1809と1810、1813と1814に
示すように、全プロセス範囲に対して「1〜128」で
ある。よって、全プロセス範囲に対して文の実行範囲ル
ープ実行範囲を包含する。従って、ステップ1502
は、文ILをそのままにする。この結果を表わしたのが
図35の文3505である。ステップ1504で次の文
へ移る。
対して2つの文の処理を終えたので、他に文は存在しな
い。よって、判定はNOとなり、ステップ1503へ移
る。ステップ1503では、ループ内に文は1つあるの
で、何も処理せず、次の複製ループへ移る。ステップ1
500は、複製ループ3504が存在するので、判定は
YESである。ステップ1501は、各ループ内には、
ASGN1609から始まる文とASGN1615から始まる文
の2つの文があるので、判定はYESである。以下、上
記順序で各文に対して処理を行なう。ループ3504の
ループ実行範囲は、図37に示すように、プロセス範囲
が0、プロセス範囲が1〜2、プロセス範囲が3の時、
それぞれ、「1〜127」、「1〜127」、「1〜1
28」である。一方、第1の文の実行範囲は1805と
1806、1809と1810、1813と1814に
示すように、全プロセス範囲に対して「1〜128」で
ある。よって、全プロセス範囲に対して文の実行範囲ル
ープ実行範囲を包含する。従って、ステップ1502
は、文ILをそのままにする。この結果を表わしたのが
図35の文3505である。ステップ1504で次の文
へ移る。
【0140】ステップ1501では第2の文があるの
で、判定はYESである。第2の文の実行範囲は、図1
9の1905と1906、1909と1910、191
3と1914に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜127」、「0〜127」、「0〜128」であ
る。よって、全プロセス範囲に対して文の実行範囲ルー
プ実行範囲を包含する。従って、ステップ1502で
は、文ILをそのままにする。この結果を表わしたのが
図35の文3506である。ステップ1504で次の文
へ移る。ステップ1501では、ループ3504に対し
て2つの文の処理を終えたので、他に文は存在しない。
よって、判定はNOとなり、ステップ1503へ移る。
ステップ1503では、ループ内に文は2つあるので、
何も処理せず、次の複製ループへ移る。
で、判定はYESである。第2の文の実行範囲は、図1
9の1905と1906、1909と1910、191
3と1914に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜127」、「0〜127」、「0〜128」であ
る。よって、全プロセス範囲に対して文の実行範囲ルー
プ実行範囲を包含する。従って、ステップ1502で
は、文ILをそのままにする。この結果を表わしたのが
図35の文3506である。ステップ1504で次の文
へ移る。ステップ1501では、ループ3504に対し
て2つの文の処理を終えたので、他に文は存在しない。
よって、判定はNOとなり、ステップ1503へ移る。
ステップ1503では、ループ内に文は2つあるので、
何も処理せず、次の複製ループへ移る。
【0141】ステップ1500では、複製ループ350
8が存在するので、判定はYESである。ステップ15
01において、各ループ内には、ASGN1609から始ま
る文とASGN1615から始まる文の2つの文があるの
で、判定はYESである。以下、上記順序で各文に対し
て処理を行なう。ループ3508のループ実行範囲は、
図38に示すように、プロセス範囲が0、プロセス範囲
が1〜2、プロセス範囲が3の時、それぞれ、「128
〜128」、「128〜128」、「1〜0」である。
一方、第1の文の実行範囲は、図18の1805と18
06、1809と1810、1813と1814に示す
ように、全プロセス範囲に対して「1〜128」であ
る。よって、3以外のプロセス範囲に対して文の実行範
囲はループ実行範囲を包含する。従って、ステップ15
02は、文ILをそのままにする。この結果を表わした
のが図35の文3509である。ステップ1504で次
の文へ移る。
8が存在するので、判定はYESである。ステップ15
01において、各ループ内には、ASGN1609から始ま
る文とASGN1615から始まる文の2つの文があるの
で、判定はYESである。以下、上記順序で各文に対し
て処理を行なう。ループ3508のループ実行範囲は、
図38に示すように、プロセス範囲が0、プロセス範囲
が1〜2、プロセス範囲が3の時、それぞれ、「128
〜128」、「128〜128」、「1〜0」である。
一方、第1の文の実行範囲は、図18の1805と18
06、1809と1810、1813と1814に示す
ように、全プロセス範囲に対して「1〜128」であ
る。よって、3以外のプロセス範囲に対して文の実行範
囲はループ実行範囲を包含する。従って、ステップ15
02は、文ILをそのままにする。この結果を表わした
のが図35の文3509である。ステップ1504で次
の文へ移る。
【0142】ステップ1501では、第2の文があるの
で、判定はYESである。第2の文の実行範囲は、図1
9の1905と1906、1909と1910、191
3と1914に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜127」、「0〜127」、「0〜128」であ
る。よって、3以外のプロセス範囲に対して文の実行範
囲とループ実行範囲は互いに素(重なりがない)であ
る。従って、ステップ1502は、第2の文に対応する
文ILを削除する。ステップ1504で次の文へ移る。
で、判定はYESである。第2の文の実行範囲は、図1
9の1905と1906、1909と1910、191
3と1914に示すように、プロセス範囲が0、プロセ
ス範囲が1〜2、プロセス範囲が3の時、それぞれ、
「1〜127」、「0〜127」、「0〜128」であ
る。よって、3以外のプロセス範囲に対して文の実行範
囲とループ実行範囲は互いに素(重なりがない)であ
る。従って、ステップ1502は、第2の文に対応する
文ILを削除する。ステップ1504で次の文へ移る。
【0143】ステップ1501では、ループ3508に
対して2つの文の処理を終えたので、他に文は存在しな
い。よって、判定はNOとなり、ステップ1503へ移
る。ステップ1503では、ループ内に文が1つあるの
で、何も処理せず、次の複製ループへ移る。ステップ1
500では、複製ループは他に存在しないので、判定は
NOとなる。以上でコード変換部109の処理を終了す
る。以上の処理の結果、ソースコード生成部110を経
て出力されたデータ通信入りソースプログラム111は
図35〜図38に示したようになる。
対して2つの文の処理を終えたので、他に文は存在しな
い。よって、判定はNOとなり、ステップ1503へ移
る。ステップ1503では、ループ内に文が1つあるの
で、何も処理せず、次の複製ループへ移る。ステップ1
500では、複製ループは他に存在しないので、判定は
NOとなる。以上でコード変換部109の処理を終了す
る。以上の処理の結果、ソースコード生成部110を経
て出力されたデータ通信入りソースプログラム111は
図35〜図38に示したようになる。
【0144】上述した本発明のコンパイラによる計算分
割最適化制御方法は電子計算機を用いて実行されるもの
であることはいうまでもない。。また、このようにして
最適分割された計算は並列計算機システムで実行され
る。図39は、本発明の並列化コンパイラが対象とする
並列計算機システムの一構成例を示したものである。同
図において、1はローカルメモリ、2はプロセッサエレ
メント、3はネットワーク、4は入出力用プロセッサエ
レメント、5は入出力用コンソールまたはワークステー
ションを示している。本発明の並列化コンパイラは、入
出力用コンソールまたはワークステーション5において
実行され、通信を含むソースプログラムまたはオブジェ
クトプログラムに変換される。前者のソースプログラム
は、さらに、各プロセッサエレメント2向けのコンパイ
ラによってオブジェクトプログラムに変換される。上記
オブジェクトプログラムはリンカーによりロードモジュ
ールに変換され、入出力用プロセッサエレメント4を通
じて各プロセッサエレメント2のローカルメモリ1に配
置され、各プロセッサエレメント2により実行され、ネ
ットワーク3を通じて通信を行なう。本発明の並列化コ
ンパイラによる計算分割最適化方法を用いると、上記の
如き並列計算機システムによる処理を高速化し、ハード
ウエアを有効に利用することが可能になる。
割最適化制御方法は電子計算機を用いて実行されるもの
であることはいうまでもない。。また、このようにして
最適分割された計算は並列計算機システムで実行され
る。図39は、本発明の並列化コンパイラが対象とする
並列計算機システムの一構成例を示したものである。同
図において、1はローカルメモリ、2はプロセッサエレ
メント、3はネットワーク、4は入出力用プロセッサエ
レメント、5は入出力用コンソールまたはワークステー
ションを示している。本発明の並列化コンパイラは、入
出力用コンソールまたはワークステーション5において
実行され、通信を含むソースプログラムまたはオブジェ
クトプログラムに変換される。前者のソースプログラム
は、さらに、各プロセッサエレメント2向けのコンパイ
ラによってオブジェクトプログラムに変換される。上記
オブジェクトプログラムはリンカーによりロードモジュ
ールに変換され、入出力用プロセッサエレメント4を通
じて各プロセッサエレメント2のローカルメモリ1に配
置され、各プロセッサエレメント2により実行され、ネ
ットワーク3を通じて通信を行なう。本発明の並列化コ
ンパイラによる計算分割最適化方法を用いると、上記の
如き並列計算機システムによる処理を高速化し、ハード
ウエアを有効に利用することが可能になる。
【0145】
【発明の効果】本発明によれば、各ループ内には条件文
がないので、ループ内に条件文のある第1の従来技術に
比べて、実行時間が短い、という効果がある。実際、図
2に対する本発明の変換結果である図35から図38ま
でのプログラムと、図2に対する第1の従来技術の変換
結果である図3と図4のプログラムを、nCUBE2という分
散記憶型並列機4台で実行したときの実行時間の比は、
53対100となった。また、本発明によれば、ループ
分割を行なわないので、ループ分割を行なう第2の従来
技術に比べて、ループの終了判定が少なくなるので実行
時間が短い、という効果がある。実際、図2に対する本
発明の変換結果である図35から図38までのプログラ
ムと、図2に対する第2の従来技術の変換結果である図
6から図8までのプログラムを、nCUBE2という分散記憶
型並列機4台で実行したときの実行時間の比は、53対
68となった。また、本発明によれば、ループ分割を行
なわないので、ループ分割が可能な場合しか適用できな
かった第2の従来技術に比べて、適用範囲はより広い、
という効果がある。また、本発明によれば、変換プログ
ラム中に新たに生成されるループの数を減らすことがで
きるので、変換プログラムサイズがそれほど大きくなら
ないようにできる、という効果がある。また、本発明に
よれば、実行回数が比較的少ないループに対しては、各
文毎に条件文を生成し、実行回数が多いループに対して
は、ループ内に条件文がない変換プログラムを生成でき
るので、実行性能と変換プログラムサイズの両方を考慮
した変換ができる、という効果がある。また、本発明に
よれば、変換プログラムを生成する際、実行しないコー
ドを削除することができるので、変換プログラムサイズ
を小さくし、かつ、ユーザが読みやすいプログラムを生
成できるという効果がある。
がないので、ループ内に条件文のある第1の従来技術に
比べて、実行時間が短い、という効果がある。実際、図
2に対する本発明の変換結果である図35から図38ま
でのプログラムと、図2に対する第1の従来技術の変換
結果である図3と図4のプログラムを、nCUBE2という分
散記憶型並列機4台で実行したときの実行時間の比は、
53対100となった。また、本発明によれば、ループ
分割を行なわないので、ループ分割を行なう第2の従来
技術に比べて、ループの終了判定が少なくなるので実行
時間が短い、という効果がある。実際、図2に対する本
発明の変換結果である図35から図38までのプログラ
ムと、図2に対する第2の従来技術の変換結果である図
6から図8までのプログラムを、nCUBE2という分散記憶
型並列機4台で実行したときの実行時間の比は、53対
68となった。また、本発明によれば、ループ分割を行
なわないので、ループ分割が可能な場合しか適用できな
かった第2の従来技術に比べて、適用範囲はより広い、
という効果がある。また、本発明によれば、変換プログ
ラム中に新たに生成されるループの数を減らすことがで
きるので、変換プログラムサイズがそれほど大きくなら
ないようにできる、という効果がある。また、本発明に
よれば、実行回数が比較的少ないループに対しては、各
文毎に条件文を生成し、実行回数が多いループに対して
は、ループ内に条件文がない変換プログラムを生成でき
るので、実行性能と変換プログラムサイズの両方を考慮
した変換ができる、という効果がある。また、本発明に
よれば、変換プログラムを生成する際、実行しないコー
ドを削除することができるので、変換プログラムサイズ
を小さくし、かつ、ユーザが読みやすいプログラムを生
成できるという効果がある。
【図1】本発明による並列化コンパイラの構成図であ
る。
る。
【図2】データ分割指示付きソースプログラム101の
具体例である。
具体例である。
【図3】図2のデータ分割指示付きソースプログラムを
図1の並列化コンパイラ100中の構文解析部102か
ら通信生成部105までと、ソースコード生成部110
を用いて変換した結果の、データ通信入りソースプログ
ラムである。
図1の並列化コンパイラ100中の構文解析部102か
ら通信生成部105までと、ソースコード生成部110
を用いて変換した結果の、データ通信入りソースプログ
ラムである。
【図4】図3におけるLOWLIM1,UPPLIM1,LOWLIM2,UPPLIM
2,LOWLIM3,UPPLIM3の値設定コードである。
2,LOWLIM3,UPPLIM3の値設定コードである。
【図5】図2のプログラムをループ分割した結果であ
る。
る。
【図6】図5のプログラムを図1の並列化コンパイラ1
00中の構文解析部102から通信生成部105まで
と、ソースコード生成部110を用いて変換した結果
の、データ通信入りソースプログラムである。
00中の構文解析部102から通信生成部105まで
と、ソースコード生成部110を用いて変換した結果
の、データ通信入りソースプログラムである。
【図7】図6におけるLOWLIM1,UPPLIM1の値設定コード
である。
である。
【図8】図6におけるLOWLIM2,UPPLIM2の値設定コード
である。
である。
【図9】非交差区間列生成部107の処理の説明図であ
る。
る。
【図10】構造体ARYを説明した図である。
【図11】非交差基本区間列生成ステップ902を説明
した図である。
した図である。
【図12】非交差区間列選択ステップ903を説明した
図である。
図である。
【図13】区間選択ステップ1201を説明した図であ
る。
る。
【図14】ループ複製部108を説明した図である。
【図15】コード変換部109の処理の処理を説明した
図である。
図である。
【図16】中間語を説明するための図である。
【図17】中間語から指される文実行範囲テーブル、ル
ープテーブルを説明するための図である。
ープテーブルを説明するための図である。
【図18】SINFO1608が指す文実行範囲テーブルを
表わしたものである。
表わしたものである。
【図19】SINFO1614が指す文実行範囲テーブルを
表わしたものである。
表わしたものである。
【図20】LINFO1601が指すループテーブルとルー
プ実行範囲テーブルを表わしたものである。
プ実行範囲テーブルを表わしたものである。
【図21】ステップ1100の処理の結果、値を格納さ
れた構造体の配列ARYを表わしたものである。
れた構造体の配列ARYを表わしたものである。
【図22】処理の結果の、構造体の配列ARYを表わした
ものである。
ものである。
【図23】ステップ1103、1104の結果の、非交
差区間テーブルNIIAを表わしたものである。
差区間テーブルNIIAを表わしたものである。
【図24】区間選択ステップ1201の処理後の配列Se
lectと非交差区間テーブルを示したものである。
lectと非交差区間テーブルを示したものである。
【図25】非交差区間列生成部107の処理後の、非交
差区間テーブルである。
差区間テーブルである。
【図26】ループ複製部108、およびコード変換部1
09の処理結果を中間語の代わりに、ソースプログラム
スタイルで表わしたものである。
09の処理結果を中間語の代わりに、ソースプログラム
スタイルで表わしたものである。
【図27】ループ複製部108の処理を説明した図であ
る。
る。
【図28】順序表現作成ステップ2700を説明した図
である。
である。
【図29】プロセス間共用ループ複製ステップ2701
の処理を説明した図である。
の処理を説明した図である。
【図30】順序表現作成ステップ2700の結果得られ
る、ループ実行範囲テーブル、およびそれからポイント
されるテーブルの様子を表わしたものである。
る、ループ実行範囲テーブル、およびそれからポイント
されるテーブルの様子を表わしたものである。
【図31】ループ実行テーブルに対して、ステップ29
00を適用した結果を示したものである。
00を適用した結果を示したものである。
【図32】ループ実行テーブルに対して、ステップ29
01を最初に適用した結果を示したものである。
01を最初に適用した結果を示したものである。
【図33】ループ実行テーブルに対して、ステップ29
01を2度目に適用した結果を示したものである。
01を2度目に適用した結果を示したものである。
【図34】ループ実行テーブルに対して、ステップ29
01を3度目に適用した結果を示したものである。
01を3度目に適用した結果を示したものである。
【図35】プロセス間共用ループ複製ステップ2701
の適用結果のILをソースプログラムスタイルで記述し
たものである。
の適用結果のILをソースプログラムスタイルで記述し
たものである。
【図36】図35におけるLOWLIM1, UPPLIM1の値設定コ
ードを示したものである。
ードを示したものである。
【図37】図35におけるLOWLIM2, UPPLIM2の値設定コ
ードを示したものである。
ードを示したものである。
【図38】図35におけるLOWLIM3, UPPLIM3の値設定コ
ードを示したものである。
ードを示したものである。
【図39】本発明のコンパイラが対象とする並列計算機
のシステム構成例である。
のシステム構成例である。
【図40】従来技術による並列化コンパイラの構成図で
ある。
ある。
100:並列化コンパイラ 101:データ分割指示付きソースプログラム 102:構文解析部 103:データ分割解析部 104:計算分割部 105:通信生成部 106:計算分割最適化部 107:非交差区間列生成部 108:ループ複製部 109:コード変換部 110:ソースコード生成部 111:データ通信入りソースプログラム 112:辞書 113:中間語
Claims (11)
- 【請求項1】 電子計算機を用いてデータ分割指示付き
プログラムを複数のプロセス上で動作する並列プログラ
ムに変換する方法であって、 前記データ分割指示付きプログラムを解析して配列要素
とそれを割り付けるプロセスとの関係を決定するステッ
プと、 各プロセスについて、配列と文を関係づける規則および
配列添字とループ制御変数の間の関係に基づいてループ
中の文を自プロセスで実行するためのループ制御変数の
値の範囲である文の実行範囲をループ中の各文について
決定するステップと、 各プロセスについて、互いに重なりのない複数の区間か
らなり、それらの和集合が上記各文の実行範囲の和集合
を包含するような非交差区間列を生成する非交差区間列
生成処理を行なうステップと、 上記非交差区間列の個々の区間をループ実行範囲とし、
ループ内の文は元のループと同一のループを複製するル
ープ複製処理を行なうステップと、 上記ループ実行範囲と上記各文の実行範囲を用いて上記
複製したループ内の各文に対するコードを変換するコー
ド変換処理を行なうステップと、を有することを特徴と
する計算分割最適化方法。 - 【請求項2】 上記非交差区間列生成処理を行うステッ
プは、上記互いに重なりのない各区間内において各文は
実行されるか否かのいずれかに決まるような非交差区間
列を生成するものであることを特徴とする請求項1記載
の計算分割最適化方法。 - 【請求項3】 上記非交差区間列生成処理を行うステッ
プは、与えられた非交差区間列に対し、上記非交差区間
列の内、指定された区間選択方法で選択したいくつかの
区間の集合を第1の非交差区間列とし、選択しなかった
区間の内、隣接する区間を融合して一つの区間として得
られる区間の集合を第2の非交差区間列とし、上記第1
の非交差区間列と上記第2の非交差区間列の和集合を新
しい非交差区間列とすることを特徴とする請求項1記載
の計算分割最適化方法。 - 【請求項4】 上記区間選択方法は、区間の長さが長い
順に並べ、先頭から指定個数までの区間を選択するよう
にしたことを特徴とする請求項3記載の計算分割最適化
方法。 - 【請求項5】 上記区間選択方法は、区間の長さが長い
順に並べ、先頭から各区間の長さの和を求め、該長さの
和が指定の値に達するまでの区間を選択するようにした
ことを特徴とする請求項3記載の計算分割最適化方法。 - 【請求項6】 上記ループ複製処理を行うステップは、
各プロセスについて、当該プロセスか否かを判定する条
件文を生成し、上記条件文の条件が成立したとき、上記
プロセスの非交差区間列を用いてループを複製するもの
であることを特徴とする請求項1記載の計算分割最適化
方法。 - 【請求項7】 上記ループ複製処理を行うステップは、
非交差区間の選択順序を全プロセスにまたがって決定す
るために順序表現の作成を行ない、上記順序表現に基づ
いて、全プロセスから、選択するプロセスと非交差区間
を決定する非交差区間選択処理を行ない、上記非交差区
間を選択したプロセスに対しては、選択された非交差区
間をループ実行範囲とする上記プロセスに共通な単一の
ループを生成するループ複製処理を行ない、上記非交差
区間を選択しなかったプロセスに対しては、ループを実
行しないようなコードを生成し、上記ステップをどのプ
ロセスにも選択されない非交差区間がなくなるまで続け
るものであることを特徴とする請求項1記載の計算分割
最適化方法。 - 【請求項8】 上記順序表現の作成は、与えられた数と
与えられた区間に対し、上記数が上記区間の下限値より
小さいときに1、上記区間に含まれるときに2、上記区
間の上限値より大きいときに3を、上記数に対応させる
ことを数の区間に対する順序表現といい、 与えられた数と与えられた順序付けられた複数の区間に
対し、上記数の区間に対する順序表現を与えられた順序
付けに従って並べてできる数列を、数の順序付き区間に
対する順序表現といい、 与えられた数列と与えられた順序付き区間に対し、上記
数列中の各数の上記順序付き区間に対する順序表現を上
記数列の値の小さい順に並べてできる数列を数列の順序
付き区間に対する順序表現というとき、 各プロセスについて、与えられたループ内の各文に対す
る実行範囲と与えられた非交差区間列に対し、上記非交
差区間列の下限値からなる数列を生成し、上記実行範囲
に指定された順序付けを与え、上記生成された数列の順
序付き区間に対する順序表現を求めるものであること特
徴とする請求項7記載の計算分割最適化方法。 - 【請求項9】 上記非交差区間選択処理は、各プロセス
について、上記求められた順序表現のまだ選択されてな
い数列の内、最小の値を選択し、上記選択された値の
内、全プロセスで最小の数に対応する非交差区間とその
プロセスを選択するものであることを特徴とする請求項
7記載の計算分割最適化方法。 - 【請求項10】 上記コード変換処理は、ループ内文の
実行範囲がループ実行範囲を包含するとき当該ループ中
の当該文を実行時判定なしで実行するコードに変換する
実行時判定削除処理と、ループ内文の実行範囲とループ
実行範囲が互いに重なりがないとき当該ループ中の当該
文を削除する文削除処理とのうち少なくともいずれか一
方を行ない、上記以外の場合は当該ループ中の当該文を
ループ制御変数が当該文の実行範囲に含まれる時のみ実
行するコードに変換するものであることを特徴とする請
求項1記載の計算分割最適化方法。 - 【請求項11】 上記コード変換処理は、各プロセスに
ついて、もしループ中の全ての文が上記文削除処理によ
り削除される場合当該ループを実行しないコードに変換
するものであることを特徴とする請求項10記載の計算
分割最適化方法。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7110473A JPH08305672A (ja) | 1995-05-09 | 1995-05-09 | 計算分割最適化方法 |
| US08/642,676 US5781777A (en) | 1995-05-09 | 1996-05-03 | Optimization method for computation partitioning oriented to a distributed memory |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7110473A JPH08305672A (ja) | 1995-05-09 | 1995-05-09 | 計算分割最適化方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH08305672A true JPH08305672A (ja) | 1996-11-22 |
Family
ID=14536610
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP7110473A Pending JPH08305672A (ja) | 1995-05-09 | 1995-05-09 | 計算分割最適化方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US5781777A (ja) |
| JP (1) | JPH08305672A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2010058455A1 (ja) * | 2008-11-19 | 2010-05-27 | 株式会社日立製作所 | 情報処理装置 |
Families Citing this family (13)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP4425377B2 (ja) * | 1999-07-29 | 2010-03-03 | 株式会社ターボデータラボラトリー | データ処理装置、および、データ処理方法 |
| JP2002259135A (ja) * | 2001-02-28 | 2002-09-13 | Internatl Business Mach Corp <Ibm> | プログラムの最適化方法及びこれを用いたコンパイラ |
| US6721943B2 (en) * | 2001-03-30 | 2004-04-13 | Intel Corporation | Compile-time memory coalescing for dynamic arrays |
| JP3847672B2 (ja) * | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
| US7480901B2 (en) * | 2005-02-03 | 2009-01-20 | International Business Machines Corporation | System and method for producing per-processor optimized executables |
| US7793278B2 (en) * | 2005-09-30 | 2010-09-07 | Intel Corporation | Systems and methods for affine-partitioning programs onto multiple processing units |
| US7757222B2 (en) * | 2005-09-30 | 2010-07-13 | Intel Corporation | Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal |
| US7743087B1 (en) | 2006-03-22 | 2010-06-22 | The Math Works, Inc. | Partitioning distributed arrays according to criterion and functions applied to the distributed arrays |
| US7882498B2 (en) * | 2006-03-31 | 2011-02-01 | Intel Corporation | Method, system, and program of a compiler to parallelize source code |
| US8087012B2 (en) * | 2007-08-21 | 2011-12-27 | International Business Machines Corporation | Eliminating maximum/minimum operations in loop bounds |
| US8677338B2 (en) * | 2008-06-04 | 2014-03-18 | Intel Corporation | Data dependence testing for loop fusion with code replication, array contraction, and loop interchange |
| US9063710B2 (en) | 2013-06-21 | 2015-06-23 | Sap Se | Parallel programming of in memory database utilizing extensible skeletons |
| JP6992911B2 (ja) * | 2018-10-30 | 2022-01-13 | 日本電信電話株式会社 | オフロードサーバおよびオフロードプログラム |
-
1995
- 1995-05-09 JP JP7110473A patent/JPH08305672A/ja active Pending
-
1996
- 1996-05-03 US US08/642,676 patent/US5781777A/en not_active Expired - Fee Related
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2010058455A1 (ja) * | 2008-11-19 | 2010-05-27 | 株式会社日立製作所 | 情報処理装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| US5781777A (en) | 1998-07-14 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5806059A (en) | Database management system and method for query process for the same | |
| Vegdahl | A survey of proposed architectures for the execution of functional languages | |
| US7469235B2 (en) | System, method and program to estimate cost of a product and/or service | |
| JPH08305672A (ja) | 計算分割最適化方法 | |
| JP4962564B2 (ja) | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム | |
| US20040205751A1 (en) | Virtual supercomputer | |
| Duarte et al. | Parallel variable neighbourhood search strategies for the cutwidth minimization problem | |
| Singh et al. | A template-based approach to the generation of distributed applications using a network of workstations | |
| US20010014888A1 (en) | Database management system and method for query process for the same | |
| JPH07105021A (ja) | 多重処理パイプラインデータ処理エミュレート方法 | |
| JPH08101861A (ja) | 論理回路合成装置 | |
| Misale et al. | A comparison of big data frameworks on a layered dataflow model | |
| CN112463141A (zh) | 一种基于bpmn的微服务工作流部署方法 | |
| Watson et al. | Flagship computational models and machine architecture | |
| JPH05101141A (ja) | 高位合成装置 | |
| Bovet et al. | A dynamic memory allocation algorithm | |
| Gil | Fast load balancing on a PRAM | |
| WO2011090032A1 (ja) | 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置 | |
| Ramamoorthy et al. | Compilation techniques for recognition of parallel processable tasks in arithmetic expressions | |
| JPH06290159A (ja) | 並列計算機のプロセス割当方法 | |
| JP5438621B2 (ja) | 処理付フォルダ実行制御方法、処理付フォルダ実行制御装置およびプログラム | |
| JP3689358B2 (ja) | パラメータをプロシージャに渡すためのシステム、方法、及びコンピュータ可読記録媒体 | |
| JPH08263306A (ja) | パイプラインデータ処理用データ処理システムとパイプラインデータ処理方法 | |
| JPH07253955A (ja) | データ分割方法 | |
| van Eekelen et al. | Process annotations and process types |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040330 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040723 |