JP2001167060A - タスク並列化方法 - Google Patents
タスク並列化方法Info
- Publication number
- JP2001167060A JP2001167060A JP34709099A JP34709099A JP2001167060A JP 2001167060 A JP2001167060 A JP 2001167060A JP 34709099 A JP34709099 A JP 34709099A JP 34709099 A JP34709099 A JP 34709099A JP 2001167060 A JP2001167060 A JP 2001167060A
- Authority
- JP
- Japan
- Prior art keywords
- task
- program
- processor
- execution
- intermediate language
- 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/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
(57)【要約】
【課題】 従来は、実行可能なタスク数が利用可能なプ
ロセッサ数より少ない場合に発生するアイドルプロセッ
サを有効利用できない。 【解決手段】 タスク内で参照される可能性のあるデー
タまたはタスクに含まれる命令コードをコンパイル時に
検出し、該データまたは命令コードを、タスクが割り当
てられるプロセッサに近い記憶装置へ転送する命令から
なる情報転送タスクを生成し、タスクを実行していない
アイドルプロセッサに次に割り当てる次実行タスクとし
て各プロセッサで実行中のタスクで最も早く終了するタ
スクを求め、この次実行タスクに対する情報転送タスク
がアイドルプロセッサで実行されるよう割り当てる命令
からなる情報転送タスクスケジュール処理を、並列コン
パイラが生成するタスクスケジュール処理に追加する。
ロセッサ数より少ない場合に発生するアイドルプロセッ
サを有効利用できない。 【解決手段】 タスク内で参照される可能性のあるデー
タまたはタスクに含まれる命令コードをコンパイル時に
検出し、該データまたは命令コードを、タスクが割り当
てられるプロセッサに近い記憶装置へ転送する命令から
なる情報転送タスクを生成し、タスクを実行していない
アイドルプロセッサに次に割り当てる次実行タスクとし
て各プロセッサで実行中のタスクで最も早く終了するタ
スクを求め、この次実行タスクに対する情報転送タスク
がアイドルプロセッサで実行されるよう割り当てる命令
からなる情報転送タスクスケジュール処理を、並列コン
パイラが生成するタスクスケジュール処理に追加する。
Description
【0001】
【発明の属する技術分野】本発明は、ソースプログラム
をタスクに分割して、並列計算機で実行可能なプログラ
ムまたはオブジェクトコードに翻訳・変換する並列化コ
ンパイラのタスク並列化技術に関わり、特に、高速実行
可能なプログラムまたはオブジェクトコードを出力する
のに好適なタスク並列化方法に関するものである。
をタスクに分割して、並列計算機で実行可能なプログラ
ムまたはオブジェクトコードに翻訳・変換する並列化コ
ンパイラのタスク並列化技術に関わり、特に、高速実行
可能なプログラムまたはオブジェクトコードを出力する
のに好適なタスク並列化方法に関するものである。
【0002】
【従来の技術】従来、並列化コンパイラにおけるタスク
の並列化は、例えば、合田憲人、岩崎清、岡本雅巳、笠
原博徳、成田誠之助 著「共有メモリ型マルチプロセッ
サシステム上でのFortran粗粒度タスク並列処理
の性能評価」情報処理学会論文誌、1966年3月号、
Vol.37、No.3、418−429ページ(以降、「文献
1」と記載)で述べられているように、次の3つのステ
ップから構成される。
の並列化は、例えば、合田憲人、岩崎清、岡本雅巳、笠
原博徳、成田誠之助 著「共有メモリ型マルチプロセッ
サシステム上でのFortran粗粒度タスク並列処理
の性能評価」情報処理学会論文誌、1966年3月号、
Vol.37、No.3、418−429ページ(以降、「文献
1」と記載)で述べられているように、次の3つのステ
ップから構成される。
【0003】(1)プログラムをタスクと呼ばれる小部
分に分割する。 (2)タスク間の制御の流れ、変数の参照順序関係か
ら、各タスクの「実行可能条件」を導出する。 (3)タスクおよびタスク先頭に挿入した実行可能条件
を含む「タスクスケジュール処理」から構成されるプロ
グラムまたはオブジェクトコードを生成する。
分に分割する。 (2)タスク間の制御の流れ、変数の参照順序関係か
ら、各タスクの「実行可能条件」を導出する。 (3)タスクおよびタスク先頭に挿入した実行可能条件
を含む「タスクスケジュール処理」から構成されるプロ
グラムまたはオブジェクトコードを生成する。
【0004】ここで、「実行可能条件」とは、タスク間
の実行順序関係を表した条件であり、この条件を満たし
たタスクは実行開始してよいことを意味する。また、
「タスクスケジュール処理」とは、タスクを実行してい
ないアイドルプロセッサの有無とタスクの実行可能条件
の成立を監視し、実行可能条件を満たしたタスクをアイ
ドルプロセッサに割り当てて実行させる処理である。
の実行順序関係を表した条件であり、この条件を満たし
たタスクは実行開始してよいことを意味する。また、
「タスクスケジュール処理」とは、タスクを実行してい
ないアイドルプロセッサの有無とタスクの実行可能条件
の成立を監視し、実行可能条件を満たしたタスクをアイ
ドルプロセッサに割り当てて実行させる処理である。
【0005】例えば、次のようなプログラムを考える。
尚、左端の番号はプログラムの行番号である。 1:#define N 1000 2:int a[N],b[N],c[N],i,j,k; 3:main(){ 4: for(i=0;i<N;i++) { /* タスク1*/ 5: a[i] = i * 2; 6: } 7: for(j=1;j<N;j++) { /* タスク2*/ 8: if(j==1) {b[0] = 0;} 9: b[j] = a[j] + b[j-1]; 10: if(j==N-1) {printf("b[N-1] = %d\n",b[j]);} 11: } 12: for(k=1;k<N;k++) { /* タスク3*/ 13: if(k==1) {c[0] = 0;} 14: c[k] = a[k] + c[k-1]; 15: } 16:}
尚、左端の番号はプログラムの行番号である。 1:#define N 1000 2:int a[N],b[N],c[N],i,j,k; 3:main(){ 4: for(i=0;i<N;i++) { /* タスク1*/ 5: a[i] = i * 2; 6: } 7: for(j=1;j<N;j++) { /* タスク2*/ 8: if(j==1) {b[0] = 0;} 9: b[j] = a[j] + b[j-1]; 10: if(j==N-1) {printf("b[N-1] = %d\n",b[j]);} 11: } 12: for(k=1;k<N;k++) { /* タスク3*/ 13: if(k==1) {c[0] = 0;} 14: c[k] = a[k] + c[k-1]; 15: } 16:}
【0006】このプログラム例には3つのループがあ
る。これを1つのループを1つのタスクとしてタスク並
列化すると、プログラムの4〜6行目がタスク1、7〜
11行目がタスク2、12〜15行目がタスク3にな
る。タスク間の制御の流れを考慮してタスクにまたがっ
て参照される変数を調べると、タスク1で定義された配
列aがタスク2およびタスク3で使用されているため、
タスク2およびタスク3はタスク1の終了後でないと実
行してはいけないことがわかる。ここで、定義とは変数
に値を代入すること、使用とは変数の値を用いることで
ある。
る。これを1つのループを1つのタスクとしてタスク並
列化すると、プログラムの4〜6行目がタスク1、7〜
11行目がタスク2、12〜15行目がタスク3にな
る。タスク間の制御の流れを考慮してタスクにまたがっ
て参照される変数を調べると、タスク1で定義された配
列aがタスク2およびタスク3で使用されているため、
タスク2およびタスク3はタスク1の終了後でないと実
行してはいけないことがわかる。ここで、定義とは変数
に値を代入すること、使用とは変数の値を用いることで
ある。
【0007】以上より、各タスクの実行可能条件は、タ
スク1に関しては無条件(いつでも実行開始可能)、タス
ク2とタスク3に関してはタスク1の終了となる。この
タスク並列化プログラムを、プロセッサ2台を用いて並
列実行した場合の各タスクの実行の様子を示したのが図
15のタスク実行グラフである。
スク1に関しては無条件(いつでも実行開始可能)、タス
ク2とタスク3に関してはタスク1の終了となる。この
タスク並列化プログラムを、プロセッサ2台を用いて並
列実行した場合の各タスクの実行の様子を示したのが図
15のタスク実行グラフである。
【0008】図15は、タスク実行状況を表わすタスク
実行グラフの一例を示す説明図である。図15のタスク
実行グラフ15001において、横軸はプログラム実行
開始からの時間、縦軸はプロセッサ番号、グラフ中の四
角が各タスクが実行された区間である。
実行グラフの一例を示す説明図である。図15のタスク
実行グラフ15001において、横軸はプログラム実行
開始からの時間、縦軸はプロセッサ番号、グラフ中の四
角が各タスクが実行された区間である。
【0009】実行可能条件と図15から分かるように、
タスク1と同時に実行できるタスクが存在しないため、
プロセッサ(0)がタスク1を実行している間はプロセ
ッサ(1)がアイドルプロセッサとなる。
タスク1と同時に実行できるタスクが存在しないため、
プロセッサ(0)がタスク1を実行している間はプロセ
ッサ(1)がアイドルプロセッサとなる。
【0010】
【発明が解決しようとする課題】解決しようとする問題
点は、従来の技術では、プログラム実行中のある時点
で、実行可能なタスク数が利用可能なプロセッサ数より
少ない場合に発生するアイドルプロセッサを有効利用す
ることができない点である。
点は、従来の技術では、プログラム実行中のある時点
で、実行可能なタスク数が利用可能なプロセッサ数より
少ない場合に発生するアイドルプロセッサを有効利用す
ることができない点である。
【0011】本発明の目的は、これら従来技術の課題を
解決し、アイドルプロセッサを有効利用して、実行時間
が短縮されたプログラムまたはオブジェクトコードの出
力を可能とするタスク並列化方法を提供することであ
る。
解決し、アイドルプロセッサを有効利用して、実行時間
が短縮されたプログラムまたはオブジェクトコードの出
力を可能とするタスク並列化方法を提供することであ
る。
【0012】
【課題を解決するための手段】上記目的を達成するた
め、本発明のタスク並列化方法は、ソースプログラム
を、並列計算機で実行可能な複数のタスクと、該タスク
をプロセッサへ割り当てるタスクスケジュール処理とを
有するプログラムもしくはオブジェクトコードに変換す
る並列化コンパイラにおけるタスクの並列化方法であっ
て、(a)所定の条件を満たしたタスクに関して、この
タスク内で参照される可能性のあるデータや、そのタス
クに含まれる命令コードをコンパイル時に検出し、
(b)これらのデータや命令コードを、もし、それらが
格納されている記憶装置が、タスクスケジュール処理に
よってこのタスクが割り当てられるプロセッサから見
て、最も近い記憶装置なら何もせず、そうでなければ、
より近い別の記憶装置へ転送する命令からなる情報転送
タスクを生成し、(c)タスクを実行していないアイド
ルプロセッサがないか監視し、アイドルプロセッサを発
見したら、このアイドルプロセッサ以外のプロセッサで
実行されているタスクの終了時刻を予測し、予測される
終了時刻が最も早いタスクから、アイドルプロセッサに
次に割り当てられるタスクである次実行タスクを求め、
この次実行タスクに対する情報転送タスクがアイドルプ
ロセッサで実行されるよう割り当てる命令からなる情報
転送タスクスケジュール処理を、タスクスケジュール処
理に追加する処理を行なうことを特徴とする。
め、本発明のタスク並列化方法は、ソースプログラム
を、並列計算機で実行可能な複数のタスクと、該タスク
をプロセッサへ割り当てるタスクスケジュール処理とを
有するプログラムもしくはオブジェクトコードに変換す
る並列化コンパイラにおけるタスクの並列化方法であっ
て、(a)所定の条件を満たしたタスクに関して、この
タスク内で参照される可能性のあるデータや、そのタス
クに含まれる命令コードをコンパイル時に検出し、
(b)これらのデータや命令コードを、もし、それらが
格納されている記憶装置が、タスクスケジュール処理に
よってこのタスクが割り当てられるプロセッサから見
て、最も近い記憶装置なら何もせず、そうでなければ、
より近い別の記憶装置へ転送する命令からなる情報転送
タスクを生成し、(c)タスクを実行していないアイド
ルプロセッサがないか監視し、アイドルプロセッサを発
見したら、このアイドルプロセッサ以外のプロセッサで
実行されているタスクの終了時刻を予測し、予測される
終了時刻が最も早いタスクから、アイドルプロセッサに
次に割り当てられるタスクである次実行タスクを求め、
この次実行タスクに対する情報転送タスクがアイドルプ
ロセッサで実行されるよう割り当てる命令からなる情報
転送タスクスケジュール処理を、タスクスケジュール処
理に追加する処理を行なうことを特徴とする。
【0013】
【発明の実施の形態】以下、本発明の実施の形態を、図
面により詳細に説明する。図1は、本発明のタスク並列
化方法に係る処理動作例を示すフローチャートであり、
図2は、図1におけるタスク並列化方法によるタスクの
実行状態の概要例を示す説明図、図3は、本発明のタス
ク並列化方法を行う並列化コンパイラの構成例を示すブ
ロック図、図4は、図3における並列化コンパイラを実
行するシステムのハードウェア構成例を示すブロック図
である。
面により詳細に説明する。図1は、本発明のタスク並列
化方法に係る処理動作例を示すフローチャートであり、
図2は、図1におけるタスク並列化方法によるタスクの
実行状態の概要例を示す説明図、図3は、本発明のタス
ク並列化方法を行う並列化コンパイラの構成例を示すブ
ロック図、図4は、図3における並列化コンパイラを実
行するシステムのハードウェア構成例を示すブロック図
である。
【0014】まず、図2を用いて本発明のタスク並列化
方法による処理動作の特徴を説明する。図2において、
図2(a)は本発明のタスク並列化方法によるタスク1
〜3の実行状態例を示し、図2(b)は従来技術による
タスク1〜3の実行状態を示している。尚、タスク1と
タスク2は同時に実行可能であり、タスク3は、タスク
1とタスク2の終了後でないと実行できない。
方法による処理動作の特徴を説明する。図2において、
図2(a)は本発明のタスク並列化方法によるタスク1
〜3の実行状態例を示し、図2(b)は従来技術による
タスク1〜3の実行状態を示している。尚、タスク1と
タスク2は同時に実行可能であり、タスク3は、タスク
1とタスク2の終了後でないと実行できない。
【0015】すなわち、図2(b)に示すように、従来
技術では、タスク2の実行が終了したプロセッサ(2)
は、プロセッサ(1)によるタスク1の実行が終了した
後、タスク3の実行を開始している。このタスク3の実
行には、タスク3で参照されるデータやタスク3に含ま
れる命令コードの共有メモリから例えばキャッシュへの
転送処理が含まれるものとする。
技術では、タスク2の実行が終了したプロセッサ(2)
は、プロセッサ(1)によるタスク1の実行が終了した
後、タスク3の実行を開始している。このタスク3の実
行には、タスク3で参照されるデータやタスク3に含ま
れる命令コードの共有メモリから例えばキャッシュへの
転送処理が含まれるものとする。
【0016】そこで、本例のタスク並列化方法では、図
2(a)に示すように、タスク2の実行が終了したプロ
セッサ(2)は、プロセッサ(1)によるタスク1の実
行中に、タスク3で参照されるデータやタスク3に含ま
れる命令コードをキャッシュに転送しておく(プリフェ
ッチタスク)。
2(a)に示すように、タスク2の実行が終了したプロ
セッサ(2)は、プロセッサ(1)によるタスク1の実
行中に、タスク3で参照されるデータやタスク3に含ま
れる命令コードをキャッシュに転送しておく(プリフェ
ッチタスク)。
【0017】そして、プロセッサ(1)によるタスク1
の実行が終了した後、キャッシュにアクセスしてタスク
3の実行を開始する。このことにより、タスク3の実行
終了時間を、従来技術に比べて、T時間だけ早めること
ができる。
の実行が終了した後、キャッシュにアクセスしてタスク
3の実行を開始する。このことにより、タスク3の実行
終了時間を、従来技術に比べて、T時間だけ早めること
ができる。
【0018】以下、このようなタスク並列化に関わる並
列化コンパイラの処理を、図1を用いて説明する。本例
の並列化コンパイラは、ソースプログラムを入力して、
並列計算機で実行可能な複数のタスクと、このタスクを
プロセッサへ割り当てるタスクスケジュール処理とから
構成されるプログラムもしくはオブジェクトコードを出
力するものである。
列化コンパイラの処理を、図1を用いて説明する。本例
の並列化コンパイラは、ソースプログラムを入力して、
並列計算機で実行可能な複数のタスクと、このタスクを
プロセッサへ割り当てるタスクスケジュール処理とから
構成されるプログラムもしくはオブジェクトコードを出
力するものである。
【0019】そのタスクの並列化方法として、まず、コ
ンパイル時に、実行を開始するための所定の条件(実行
可能条件)を満たすタスクに関して、このタスク内で参
照される可能性のあるデータ、もしくは、このタスクに
含まれる命令コードを検出する(ステップ101)。
ンパイル時に、実行を開始するための所定の条件(実行
可能条件)を満たすタスクに関して、このタスク内で参
照される可能性のあるデータ、もしくは、このタスクに
含まれる命令コードを検出する(ステップ101)。
【0020】次に、検出したデータまたは命令コードが
格納されている記憶装置が、このタスクが上述のタスク
スケジュール処理によって割り当てられるプロセッサか
ら見て最も近い記憶装置であるか否かを判別し、最も近
い記憶装置であれば何もせず、そうでなければ、より近
い別の記憶装置へ転送する命令からなる情報転送タスク
を生成する(ステップ102)。
格納されている記憶装置が、このタスクが上述のタスク
スケジュール処理によって割り当てられるプロセッサか
ら見て最も近い記憶装置であるか否かを判別し、最も近
い記憶装置であれば何もせず、そうでなければ、より近
い別の記憶装置へ転送する命令からなる情報転送タスク
を生成する(ステップ102)。
【0021】最後に、タスクを実行していないアイドル
プロセッサがないか監視し、アイドルプロセッサを発見
したら、このアイドルプロセッサ以外のプロセッサで実
行されているタスクの終了時刻を予測し、予測される終
了時刻が最も早いタスクから、アイドルプロセッサに次
に割り当てられるタスクである次実行タスクを求め、こ
の次実行タスクに対する情報転送タスクが、アイドルプ
ロセッサで実行されるよう割り当てる命令からなる情報
転送タスクスケジュール処理を、次実行タスクをアイド
ルプロセッサへ割り当てるタスクスケジュール処理に追
加する(ステップ103)。
プロセッサがないか監視し、アイドルプロセッサを発見
したら、このアイドルプロセッサ以外のプロセッサで実
行されているタスクの終了時刻を予測し、予測される終
了時刻が最も早いタスクから、アイドルプロセッサに次
に割り当てられるタスクである次実行タスクを求め、こ
の次実行タスクに対する情報転送タスクが、アイドルプ
ロセッサで実行されるよう割り当てる命令からなる情報
転送タスクスケジュール処理を、次実行タスクをアイド
ルプロセッサへ割り当てるタスクスケジュール処理に追
加する(ステップ103)。
【0022】以上の処理により、図2(a)に示すよう
に、タスク2の実行が終了したアイドルプロセッサとし
てのプロセッサ(2)のタスクスケジュール処理に情報
転送タスクスケジュール処理が追加され、その結果、プ
ロセッサ(2)では、プロセッサ(1)によるタスク1
の実行中に、タスク3で参照されるデータやタスク3に
含まれる命令コードをキャッシュに転送しておく(プリ
フェッチタスク)ことができる。
に、タスク2の実行が終了したアイドルプロセッサとし
てのプロセッサ(2)のタスクスケジュール処理に情報
転送タスクスケジュール処理が追加され、その結果、プ
ロセッサ(2)では、プロセッサ(1)によるタスク1
の実行中に、タスク3で参照されるデータやタスク3に
含まれる命令コードをキャッシュに転送しておく(プリ
フェッチタスク)ことができる。
【0023】次に、図4を用いて、このようなタスク並
列化を行う並列化コンパイラを実行するシステムのハー
ドウェア構成を説明する。
列化を行う並列化コンパイラを実行するシステムのハー
ドウェア構成を説明する。
【0024】図4において、41はCRT(Cathode Ray
Tube)等からなり文字や画像を表示出力する表示装置、
42はキーボードやマウス等からなり操作者からの指示
を入力する入力装置、43はHDD(Hard Disk Drive)
等からなり大容量のデータやプログラムを記憶する外部
記憶装置、44はCPU(Central Processing Unit)や
主メモリを有して蓄積プログラム方式による演算処理を
行なう情報処理装置、45は本発明の処理手順に係わる
プログラムやデータを記録した記録媒体としての光ディ
スク、46は情報処理装置44からの指示に基づき外部
記憶装置43に記憶させる光ディスク45内のデータや
プログラムを読み出す駆動装置である。
Tube)等からなり文字や画像を表示出力する表示装置、
42はキーボードやマウス等からなり操作者からの指示
を入力する入力装置、43はHDD(Hard Disk Drive)
等からなり大容量のデータやプログラムを記憶する外部
記憶装置、44はCPU(Central Processing Unit)や
主メモリを有して蓄積プログラム方式による演算処理を
行なう情報処理装置、45は本発明の処理手順に係わる
プログラムやデータを記録した記録媒体としての光ディ
スク、46は情報処理装置44からの指示に基づき外部
記憶装置43に記憶させる光ディスク45内のデータや
プログラムを読み出す駆動装置である。
【0025】情報処理装置44は、外部記憶装置43に
記憶した光ディスク45からのデータやプログラムを主
メモリにロードすることにより、図3に示す各部からな
るタスク並列化コンパイラ10を構成する。以下、図3
を用いてタスク並列化コンパイラ10を説明する。
記憶した光ディスク45からのデータやプログラムを主
メモリにロードすることにより、図3に示す各部からな
るタスク並列化コンパイラ10を構成する。以下、図3
を用いてタスク並列化コンパイラ10を説明する。
【0026】図3に示すように、タスク並列化コンパイ
ラ10は、構文解析部11、タスク並列化部13、最適
化部15、コード生成部17から構成され、入力プログ
ラム90をコンパイルして出力プログラムを生成する。
ラ10は、構文解析部11、タスク並列化部13、最適
化部15、コード生成部17から構成され、入力プログ
ラム90をコンパイルして出力プログラムを生成する。
【0027】以下、各構成部の説明を行う。構文解析部
11は、入力プログラム90を入力して中間語91を出
力する。構文解析部11の処理は通常のコンパイラの場
合と特に変わらない。タスク並列化部13は、中間語9
1を入力し、タスク並列化された中間語91を出力する
ものであり、以下に説明する依存解析部131、タスク
解析部132、転送情報検出部133、中間語変換部1
34から構成されている。
11は、入力プログラム90を入力して中間語91を出
力する。構文解析部11の処理は通常のコンパイラの場
合と特に変わらない。タスク並列化部13は、中間語9
1を入力し、タスク並列化された中間語91を出力する
ものであり、以下に説明する依存解析部131、タスク
解析部132、転送情報検出部133、中間語変換部1
34から構成されている。
【0028】依存解析部131は、中間語91を入力し
てデータ依存関係を解析する。尚、この依存解析部13
1の処理は通常のコンパイラの場合と特に変わらない。
タスク解析部132は、中間語91を入力してタスク並
列性解析を行なう。このタスク解析部132の処理は、
本多弘樹、岩田雅彦、笠原博徳 著「Fortranプ
ログラム粗粒度タスク間の並列性検出手法」電気情報通
信学会論文誌D-I、1990年12月号、Vol.J73-D
-I、No.12、951−960ページ(以降、「文献2」
と記載)で述べられている方法と特に変わらない。
てデータ依存関係を解析する。尚、この依存解析部13
1の処理は通常のコンパイラの場合と特に変わらない。
タスク解析部132は、中間語91を入力してタスク並
列性解析を行なう。このタスク解析部132の処理は、
本多弘樹、岩田雅彦、笠原博徳 著「Fortranプ
ログラム粗粒度タスク間の並列性検出手法」電気情報通
信学会論文誌D-I、1990年12月号、Vol.J73-D
-I、No.12、951−960ページ(以降、「文献2」
と記載)で述べられている方法と特に変わらない。
【0029】転送情報検出部133は、中間語91を入
力して、上述したように実行可能条件を満たすタスクに
関して、このタスク内で参照される可能性のあるデータ
または、このタスクに含まれる命令コードを検出する
等、「情報転送タスク」の生成に必要な情報を解析し、
解析結果をタスクテーブル93と配列参照範囲テーブル
94に出力する。
力して、上述したように実行可能条件を満たすタスクに
関して、このタスク内で参照される可能性のあるデータ
または、このタスクに含まれる命令コードを検出する
等、「情報転送タスク」の生成に必要な情報を解析し、
解析結果をタスクテーブル93と配列参照範囲テーブル
94に出力する。
【0030】中間語変換部134は、中間語91、タス
クテーブル93、配列参照範囲テーブル94を入力し
て、「情報転送タスク」および「情報転送タスクスケジ
ュール処理」を含むタスク並列化された中間語91を出
力するものであり、以下に説明する中間語並列化部13
41、タスクスケジュール処理生成部1342、タスク
スケジュール処理拡張部1343、情報転送タスク生成
部1344から構成されている。
クテーブル93、配列参照範囲テーブル94を入力し
て、「情報転送タスク」および「情報転送タスクスケジ
ュール処理」を含むタスク並列化された中間語91を出
力するものであり、以下に説明する中間語並列化部13
41、タスクスケジュール処理生成部1342、タスク
スケジュール処理拡張部1343、情報転送タスク生成
部1344から構成されている。
【0031】中間語変換部1341は、中間語91を入
力して、タスク並列化された中間語91を出力する。タ
スクスケジュール処理生成部1342は、中間語変換部
1341が出力した中間語91を入力して、タスクスケ
ジュール処理を含むタスク並列化された中間語91を出
力する。
力して、タスク並列化された中間語91を出力する。タ
スクスケジュール処理生成部1342は、中間語変換部
1341が出力した中間語91を入力して、タスクスケ
ジュール処理を含むタスク並列化された中間語91を出
力する。
【0032】タスクスケジュール処理拡張部1343
は、タスクスケジュール処理生成部1342が出力した
中間語91を入力して、「情報転送タスクスケジュール
処理」を追加したタスクスケジュール処理を含むタスク
並列化された中間語91を出力する。
は、タスクスケジュール処理生成部1342が出力した
中間語91を入力して、「情報転送タスクスケジュール
処理」を追加したタスクスケジュール処理を含むタスク
並列化された中間語91を出力する。
【0033】情報転送タスク生成部1344は、タスク
スケジュール処理拡張部1343が出力した中間語91
を入力して、情報転送タスク、情報転送タスクスケジュ
ール処理を追加したタスクスケジュール処理を含むタス
ク並列化された中間語91を出力する。以上の転送情報
検出部133と中間語変換部134の処理は、それぞれ
本発明に係わるものである。
スケジュール処理拡張部1343が出力した中間語91
を入力して、情報転送タスク、情報転送タスクスケジュ
ール処理を追加したタスクスケジュール処理を含むタス
ク並列化された中間語91を出力する。以上の転送情報
検出部133と中間語変換部134の処理は、それぞれ
本発明に係わるものである。
【0034】最適化部15は、タスク並列化部13でタ
スク並列化された中間語91を入力して最適化された中
間語91を出力する。コード生成部17は、最適化部1
5で最適化された中間語91を入力して、タスク並列化
されたプログラムまたはオブジェクトコードを出力す
る。
スク並列化された中間語91を入力して最適化された中
間語91を出力する。コード生成部17は、最適化部1
5で最適化された中間語91を入力して、タスク並列化
されたプログラムまたはオブジェクトコードを出力す
る。
【0035】これらの最適化部15とコード生成部17
の処理は、通常のコンパイラの場合と特に変わらない。
以下、このような構成のタスク並列化コンパイラ10に
よるタスクの並列化動作例を、図5を用いて説明する。
の処理は、通常のコンパイラの場合と特に変わらない。
以下、このような構成のタスク並列化コンパイラ10に
よるタスクの並列化動作例を、図5を用いて説明する。
【0036】図5は、図3におけるタスク並列化コンパ
イラを実装する並列計算機システムの構成例を示すブロ
ック図である。本図5における並列計算機システム51
は、プロセッサ5111〜511n、キャッシュメモリ
5171〜517n、共有メモリ515、入出力用プロ
セッサ512、入出力用コンソール519、それらを結
合する相互結合ネットワーク513から構成される。
イラを実装する並列計算機システムの構成例を示すブロ
ック図である。本図5における並列計算機システム51
は、プロセッサ5111〜511n、キャッシュメモリ
5171〜517n、共有メモリ515、入出力用プロ
セッサ512、入出力用コンソール519、それらを結
合する相互結合ネットワーク513から構成される。
【0037】図3のタスク並列化コンパイラ10は、入
出力用コンソール519において実行され、これによ
り、図3の入力プログラム90が並列ソースプログラム
に変換される。さらに、この変換された並列ソースプロ
グラムは、プロセッサ5111〜511n向けコンパイ
ラによって並列オブジェクトプログラムに変換される。
出力用コンソール519において実行され、これによ
り、図3の入力プログラム90が並列ソースプログラム
に変換される。さらに、この変換された並列ソースプロ
グラムは、プロセッサ5111〜511n向けコンパイ
ラによって並列オブジェクトプログラムに変換される。
【0038】そして、この並列オブジェクトプログラム
は、リンカによりロードモジュールに変換され、入出力
用プロセッサ512を通じて共有メモリ515にロード
され、各プロセッサ5111〜511nにより実行され
る。
は、リンカによりロードモジュールに変換され、入出力
用プロセッサ512を通じて共有メモリ515にロード
され、各プロセッサ5111〜511nにより実行され
る。
【0039】この際、共有メモリ515にロードされた
ロードモジュールでは、次実行タスクで参照される配列
が存在する記憶装置である共有メモリ515に対するア
クセスを、情報転送タスクがアイドルプロセッサで予め
実行する。
ロードモジュールでは、次実行タスクで参照される配列
が存在する記憶装置である共有メモリ515に対するア
クセスを、情報転送タスクがアイドルプロセッサで予め
実行する。
【0040】そのため、次実行タスクの実行開始時に
は、この次実行タスクで参照される配列は、共有メモリ
515よりもプロセッサプロセッサ5111〜511n
に近い別の記憶装置であるキャッシュメモリ5171〜
517nに存在する。その結果、次実行タスクの実行時
間が短くなるので、プログラム実行時間を短縮すること
が可能である。
は、この次実行タスクで参照される配列は、共有メモリ
515よりもプロセッサプロセッサ5111〜511n
に近い別の記憶装置であるキャッシュメモリ5171〜
517nに存在する。その結果、次実行タスクの実行時
間が短くなるので、プログラム実行時間を短縮すること
が可能である。
【0041】以下、図3における構成のタスク並列化コ
ンパイラ10の具体的な動作例を、図6に示す入力プロ
グラムを用いて説明する。図6は、図3における入力プ
ログラムの一例を示す説明図である。
ンパイラ10の具体的な動作例を、図6に示す入力プロ
グラムを用いて説明する。図6は、図3における入力プ
ログラムの一例を示す説明図である。
【0042】図6の入力プログラム90における左端に
ある番号は行番号である。また、1行目は定数Nの値を
1000と定義する文、2行目は、整数変数i,j,
k,mと、第2次元目が0〜N−1の添字を持つ整数型
の1次元配列a,b,cの宣言文である。
ある番号は行番号である。また、1行目は定数Nの値を
1000と定義する文、2行目は、整数変数i,j,
k,mと、第2次元目が0〜N−1の添字を持つ整数型
の1次元配列a,b,cの宣言文である。
【0043】3〜20行目は入力プログラム90の主処
理関数mainであり、4〜6行目はiをループ制御変数と
するループである。以下、ループは先頭行の行番号を用
いて表す。すなわち、このループはループ4と表す。
理関数mainであり、4〜6行目はiをループ制御変数と
するループである。以下、ループは先頭行の行番号を用
いて表す。すなわち、このループはループ4と表す。
【0044】7〜11行目はjをループ制御変数とする
ループ7、12〜15行目はkをループ制御変数とする
ループ12、16〜19行目はmをループ制御変数とす
るループ16である。
ループ7、12〜15行目はkをループ制御変数とする
ループ12、16〜19行目はmをループ制御変数とす
るループ16である。
【0045】図7および図8は、図1における出力プロ
グラムの一例を示す説明図である。図7および図8の左
端にある番号は行番号である。
グラムの一例を示す説明図である。図7および図8の左
端にある番号は行番号である。
【0046】1行目は定数Nの値を1000と定義する
文、2行目は、整数変数i,j,k,mと、第1次元目
が0〜N−1の添字範囲を持つ整数型の1次元配列a,
b,cの宣言文、3〜6行目は、定数INIT_EXEC_MT_NU
M、NPE、NTASK、NO_TASKの値を、それぞれ「−99」、
「2」、「4」、「−98」に定義する文である。
文、2行目は、整数変数i,j,k,mと、第1次元目
が0〜N−1の添字範囲を持つ整数型の1次元配列a,
b,cの宣言文、3〜6行目は、定数INIT_EXEC_MT_NU
M、NPE、NTASK、NO_TASKの値を、それぞれ「−99」、
「2」、「4」、「−98」に定義する文である。
【0047】7行目は整数変数newMT,succMT,tmp5,tmp
6,tmp7,tmp8,0〜NPE-1の添字範囲を持つ整数型の1次元
配列ExecMTの宣言文、8行目は整数変数ii,kk,kk,mm,my
PEの宣言文、9〜15行目は、複素数変数TaskGranular
ity、整数変数SuccTaskNo、複素数変数StartTime、真偽
値型変数Finishを要素として持つ構造体TaskDataの宣言
文、16行目は、0〜NTASKの添字範囲を持ち、構造体T
askDataを要素とする配列TDataの宣言文である。
6,tmp7,tmp8,0〜NPE-1の添字範囲を持つ整数型の1次元
配列ExecMTの宣言文、8行目は整数変数ii,kk,kk,mm,my
PEの宣言文、9〜15行目は、複素数変数TaskGranular
ity、整数変数SuccTaskNo、複素数変数StartTime、真偽
値型変数Finishを要素として持つ構造体TaskDataの宣言
文、16行目は、0〜NTASKの添字範囲を持ち、構造体T
askDataを要素とする配列TDataの宣言文である。
【0048】17〜89行目が出力プログラム92の主
処理関数mainである。そのうち、27〜32、37〜3
8、40〜41、45〜46、52〜53、58〜5
9、64、84、86〜87行目がタスクスケジュール
処理を行なう部分である。
処理関数mainである。そのうち、27〜32、37〜3
8、40〜41、45〜46、52〜53、58〜5
9、64、84、86〜87行目がタスクスケジュール
処理を行なう部分である。
【0049】42〜44行目がタスク1、47〜51行
目がタスク2、54〜57行目がタスク3、60〜63
行目がタスク4、18〜26、33〜36、39、65
〜67、72〜73、78〜79、83、85行目が情
報転送タスクスケジュール処理を行なう部分、68〜7
1行目がタスク2に対する情報転送タスク、74〜77
行目がタスク3に対する情報転送タスク、80〜82行
目がタスク4に対する情報転送タスクである。
目がタスク2、54〜57行目がタスク3、60〜63
行目がタスク4、18〜26、33〜36、39、65
〜67、72〜73、78〜79、83、85行目が情
報転送タスクスケジュール処理を行なう部分、68〜7
1行目がタスク2に対する情報転送タスク、74〜77
行目がタスク3に対する情報転送タスク、80〜82行
目がタスク4に対する情報転送タスクである。
【0050】以下、このような図6に示す入力プログラ
ム90と図7,8に示す出力プログラム92に関わる図
3のタスク並列化コンパイラ10内の個々の処理を説明
する。
ム90と図7,8に示す出力プログラム92に関わる図
3のタスク並列化コンパイラ10内の個々の処理を説明
する。
【0051】まず、構文解析部11により、入力プログ
ラム90を入力して中間語91を出力する。尚、中間語
91は図6の入力プログラム90に対応しているので、
以下の説明では、図6の入力プログラム90を中間語9
1のソースプログラムイメージの表現として用いる。
ラム90を入力して中間語91を出力する。尚、中間語
91は図6の入力プログラム90に対応しているので、
以下の説明では、図6の入力プログラム90を中間語9
1のソースプログラムイメージの表現として用いる。
【0052】次に、タスク並列化部13は、依存解析部
131、タスク解析部132、転送情報検出部133、
中間語変換部134により次のような処理を行う。
131、タスク解析部132、転送情報検出部133、
中間語変換部134により次のような処理を行う。
【0053】依存解析部131では、Alfred V.Aho、Ra
vi Sethi、Jeffrey D.Ullman著、「Compilers」、Addis
on-Wesley Publishing Company、1986に説明されている
処理により、中間語91を入力してデータ依存関係を解
析する。
vi Sethi、Jeffrey D.Ullman著、「Compilers」、Addis
on-Wesley Publishing Company、1986に説明されている
処理により、中間語91を入力してデータ依存関係を解
析する。
【0054】タスク解析部132は、中間語91を入力
してタスク並列性解析を行なう。図6の入力プログラム
90では、ループ4がタスク1、ループ7がタスク2、
ループ12がタスク3、ループ16がタスク4と解析さ
れる。また、タスク1〜4の実行可能条件は、それぞれ
「タスク1:条件なし」、「タスク2:タスク1の終
了」、「タスク3:タスク1の終了」、「タスク4:タ
スク3の終了」と解析される。
してタスク並列性解析を行なう。図6の入力プログラム
90では、ループ4がタスク1、ループ7がタスク2、
ループ12がタスク3、ループ16がタスク4と解析さ
れる。また、タスク1〜4の実行可能条件は、それぞれ
「タスク1:条件なし」、「タスク2:タスク1の終
了」、「タスク3:タスク1の終了」、「タスク4:タ
スク3の終了」と解析される。
【0055】これらの実行可能条件をまとめて図9に示
すように記憶する。図9は、図3のタスク解析部により
図6の入力プログラムから解析した実行可能条件をまと
めた表の構成例を示す説明図である。
すように記憶する。図9は、図3のタスク解析部により
図6の入力プログラムから解析した実行可能条件をまと
めた表の構成例を示す説明図である。
【0056】本例の実行可能条件の表95においては、
各タスク1〜4の実行可能条件が、「タスク1:条件な
し」、「タスク2:タスク1の終了」、「タスク3:タ
スク1の終了」、「タスク4:タスク3の終了」として
まとめて登録されている。
各タスク1〜4の実行可能条件が、「タスク1:条件な
し」、「タスク2:タスク1の終了」、「タスク3:タ
スク1の終了」、「タスク4:タスク3の終了」として
まとめて登録されている。
【0057】さらに、タスク解析部132は、そのタス
クの実行終了をプログラムの終了とみなせる唯一のタス
クである「プログラム終了タスク」を、以下の一般的な
技術により求める。
クの実行終了をプログラムの終了とみなせる唯一のタス
クである「プログラム終了タスク」を、以下の一般的な
技術により求める。
【0058】すなわち、タスクをノード、タスク間の制
御依存関係をエッジとする「タスクグラフ」を作成し、
この「タスクグラフ」に処理を含まないダミータスクで
ある「プログラム終了タスク」を加え、エッジの始点を
持たないタスクから「プログラム終了タスク」へのエッ
ジを設けて、「プログラム終了タスク」とする。
御依存関係をエッジとする「タスクグラフ」を作成し、
この「タスクグラフ」に処理を含まないダミータスクで
ある「プログラム終了タスク」を加え、エッジの始点を
持たないタスクから「プログラム終了タスク」へのエッ
ジを設けて、「プログラム終了タスク」とする。
【0059】但し、「プログラム終了タスク」を終点と
するエッジが1本しかない場合は、そのエッジの始点で
あるタスクを「プログラム終了タスク」とみなせるの
で、図6の入力プログラム90では、タスク4をプログ
ラム終了タスクとすることができる。
するエッジが1本しかない場合は、そのエッジの始点で
あるタスクを「プログラム終了タスク」とみなせるの
で、図6の入力プログラム90では、タスク4をプログ
ラム終了タスクとすることができる。
【0060】このようなタスク解析部132の処理の詳
細に関しては、上述の文献2で述べられている技術と特
に変わらないので、これ以上は述べない。
細に関しては、上述の文献2で述べられている技術と特
に変わらないので、これ以上は述べない。
【0061】次に、転送情報検出部133は、中間語9
1を入力して、タスク1〜4の各々に対し、タスク内で
参照される配列の参照範囲を解析してその結果を配列参
照範囲テーブル94に出力し、タスク実行時間の見積も
りと、そのタスクの終了で初めて実行可能条件が満たさ
れるタスク総数の解析を行ない、それらの結果をタスク
テーブル93に出力する。
1を入力して、タスク1〜4の各々に対し、タスク内で
参照される配列の参照範囲を解析してその結果を配列参
照範囲テーブル94に出力し、タスク実行時間の見積も
りと、そのタスクの終了で初めて実行可能条件が満たさ
れるタスク総数の解析を行ない、それらの結果をタスク
テーブル93に出力する。
【0062】ここで、参照とは変数が定義または使用さ
れること、変数とはスカラ変数または配列のこと、定義
とは変数に値を代入すること、使用とは変数の値を用い
ること、配列の参照範囲とは、その配列の参照される可
能性がある添字範囲のことを指す。
れること、変数とはスカラ変数または配列のこと、定義
とは変数に値を代入すること、使用とは変数の値を用い
ること、配列の参照範囲とは、その配列の参照される可
能性がある添字範囲のことを指す。
【0063】以下、転送情報検出部133の処理動作例
を、図10と図11を用いて説明する。図10は、図3
における転送情報検出部の処理手順例を示すフローチャ
ートであり、図11は、図10における転送情報検出部
の処理手順により得られるタスクテーブルと配列参照範
囲テーブルの構成例を示す説明図である。
を、図10と図11を用いて説明する。図10は、図3
における転送情報検出部の処理手順例を示すフローチャ
ートであり、図11は、図10における転送情報検出部
の処理手順により得られるタスクテーブルと配列参照範
囲テーブルの構成例を示す説明図である。
【0064】図3の転送情報検出部133が図6の入力
プログラム90に対して、図10におけるステップ13
31〜1336の処理を行うことにより、図11に示す
タスクテーブル931〜934と配列参照範囲テーブル
942〜946が得られる。
プログラム90に対して、図10におけるステップ13
31〜1336の処理を行うことにより、図11に示す
タスクテーブル931〜934と配列参照範囲テーブル
942〜946が得られる。
【0065】図11においては、タスクテーブル932
と配列参照範囲テーブル942,943のみフィールド
を詳細に示している。タスクテーブル931〜934
は、それぞれ図6のタスク1〜4に対応するタスクテー
ブルである。
と配列参照範囲テーブル942,943のみフィールド
を詳細に示している。タスクテーブル931〜934
は、それぞれ図6のタスク1〜4に対応するタスクテー
ブルである。
【0066】以下、タスクテーブル932を例にとっ
て、タスクテーブルの各フィールド9321〜9325
を説明する。フィールド9321には次のタスクテーブ
ルへのポインタを格納する。図中、フィールド9321
から右に向いた矢印がこのポインタに対応する。次のタ
スクテーブルがない場合はNULL値を格納する。
て、タスクテーブルの各フィールド9321〜9325
を説明する。フィールド9321には次のタスクテーブ
ルへのポインタを格納する。図中、フィールド9321
から右に向いた矢印がこのポインタに対応する。次のタ
スクテーブルがない場合はNULL値を格納する。
【0067】フィールド9322にはタスク番号を格納
する(図中、「2」が記載)。フィールド9323には、そ
のタスクに関して見積もられたタスク実行時間を格納す
る(図中、「6005」が記載)。
する(図中、「2」が記載)。フィールド9323には、そ
のタスクに関して見積もられたタスク実行時間を格納す
る(図中、「6005」が記載)。
【0068】フィールド9324には、そのタスクの終
了で初めて実行可能条件が満たされるタスクの総数であ
る次実行タスク数を格納する(図中、「0」が記載)。フィ
ールド9325には、そのタスク内で参照される配列の
配列参照範囲テーブルへのポインタを格納する。図中、
フィールド9325から下に向いた矢印がこのポインタ
に対応する。そのタスクに関して配列参照範囲テーブル
がない場合はNULL値を格納する。
了で初めて実行可能条件が満たされるタスクの総数であ
る次実行タスク数を格納する(図中、「0」が記載)。フィ
ールド9325には、そのタスク内で参照される配列の
配列参照範囲テーブルへのポインタを格納する。図中、
フィールド9325から下に向いた矢印がこのポインタ
に対応する。そのタスクに関して配列参照範囲テーブル
がない場合はNULL値を格納する。
【0069】次に、配列参照範囲テーブル942〜94
6において、図6のタスク2の解析結果を収めたのが配
列参照範囲テーブル942と943、タスク3の解析結
果を収めたのが配列参照範囲テーブル944と945、
タスク4の解析結果を収めたのが配列参照範囲テーブル
946である。タスク1は配列参照範囲テーブルをもた
ない。
6において、図6のタスク2の解析結果を収めたのが配
列参照範囲テーブル942と943、タスク3の解析結
果を収めたのが配列参照範囲テーブル944と945、
タスク4の解析結果を収めたのが配列参照範囲テーブル
946である。タスク1は配列参照範囲テーブルをもた
ない。
【0070】以下、配列参照範囲テーブル942を例に
とって、配列参照範囲テーブルのフィールド9421〜
9423を説明する。フィールド9421には、そのタ
スク内で参照される配列の配列名を格納する(図中、
「a」が記載)。
とって、配列参照範囲テーブルのフィールド9421〜
9423を説明する。フィールド9421には、そのタ
スク内で参照される配列の配列名を格納する(図中、
「a」が記載)。
【0071】フィールド9422には、そのタスク内で
参照される配列の参照範囲を「配列添字の下限値:配列
添字の上限値」の形式で格納する(図中、「1:N−
1」が記載)。
参照される配列の参照範囲を「配列添字の下限値:配列
添字の上限値」の形式で格納する(図中、「1:N−
1」が記載)。
【0072】フィールド9423には、そのタスク内で
参照される次の配列の配列参照範囲テーブルへのポイン
タを格納する。図中、フィールド9423から下に向い
た矢印がこのポインタに対応する。次の配列参照範囲テ
ーブルがない場合はNULL値を格納する。
参照される次の配列の配列参照範囲テーブルへのポイン
タを格納する。図中、フィールド9423から下に向い
た矢印がこのポインタに対応する。次の配列参照範囲テ
ーブルがない場合はNULL値を格納する。
【0073】以下、このような転送情報検出部133の
処理を中間語91に適用した結果について説明する。ま
ず、図10のステップ1331の処理を適用する。ここ
では、転送情報検出部133で未処理のタスクの例とし
てタスク2を選択する。
処理を中間語91に適用した結果について説明する。ま
ず、図10のステップ1331の処理を適用する。ここ
では、転送情報検出部133で未処理のタスクの例とし
てタスク2を選択する。
【0074】次に、ステップ1332の処理を中間語9
1に適用する。ステップ1332は、所定の条件を満た
すタスクを選択する処理である。タスク解析部132で
解析したタスク2の実行可能条件は「タスク1の終了」
なので常に真ではない。従って、NO方向へ処理が分岐
し、ステップ1333へ移る。
1に適用する。ステップ1332は、所定の条件を満た
すタスクを選択する処理である。タスク解析部132で
解析したタスク2の実行可能条件は「タスク1の終了」
なので常に真ではない。従って、NO方向へ処理が分岐
し、ステップ1333へ移る。
【0075】次に、ステップ1333の処理を中間語9
1に適用すると、タスク2内で参照される配列a、配列
bの配列参照範囲が次のように解析される。まず、タス
ク2のループ制御変数jが1〜N−1の値をとることか
ら、添字がjである9行目の配列aの参照範囲は「1:
N−1」と解析される。
1に適用すると、タスク2内で参照される配列a、配列
bの配列参照範囲が次のように解析される。まず、タス
ク2のループ制御変数jが1〜N−1の値をとることか
ら、添字がjである9行目の配列aの参照範囲は「1:
N−1」と解析される。
【0076】同様に配列bに関しては、添字が0である
8行目での参照範囲は「0」、添字がjである9行目左
辺での参照範囲は「1:N−1」、添字がj-1である9
行目右辺での参照範囲は「0:N−2」、添字がN-1で
ある10行目での参照範囲は「N−1」と解析されるの
で、これらの和集合をとって、タスク2での配列bの参
照範囲が「0:N−1」となる。
8行目での参照範囲は「0」、添字がjである9行目左
辺での参照範囲は「1:N−1」、添字がj-1である9
行目右辺での参照範囲は「0:N−2」、添字がN-1で
ある10行目での参照範囲は「N−1」と解析されるの
で、これらの和集合をとって、タスク2での配列bの参
照範囲が「0:N−1」となる。
【0077】以上の解析結果は配列参照テーブル94
2、943に格納される。まず、配列名aが配列参照テ
ーブル942のフィールド9421に、配列参照範囲
「1:N−1」がフィールド9422に、配列名bが配
列参照テーブル943のフィールド9431に、配列参
照範囲「0:N−1」がフィールド9432に、それぞ
れ格納される。
2、943に格納される。まず、配列名aが配列参照テ
ーブル942のフィールド9421に、配列参照範囲
「1:N−1」がフィールド9422に、配列名bが配
列参照テーブル943のフィールド9431に、配列参
照範囲「0:N−1」がフィールド9432に、それぞ
れ格納される。
【0078】また、配列参照範囲テーブル942へのポ
インタがタスクテーブル932のフィールド9325
に、配列参照範囲テーブル943へのポインタが配列参
照テーブル942のフィールド9423に、配列参照テ
ーブル943のフィールド9433にNULLが、それぞれ
格納される。
インタがタスクテーブル932のフィールド9325
に、配列参照範囲テーブル943へのポインタが配列参
照テーブル942のフィールド9423に、配列参照テ
ーブル943のフィールド9433にNULLが、それぞれ
格納される。
【0079】次に、ステップ1334を中間語91に適
用すると、タスク2のタスク実行時間であるコストが以
下のようにして見積もられる。まず、図6の入力プログ
ラム90の1行目よりNは1000なので、入力プログ
ラム90タスク2の7行目のループは999回まわるこ
とがわかる。
用すると、タスク2のタスク実行時間であるコストが以
下のようにして見積もられる。まず、図6の入力プログ
ラム90の1行目よりNは1000なので、入力プログ
ラム90タスク2の7行目のループは999回まわるこ
とがわかる。
【0080】タスク2の8行目では、if文の条件判定を
コスト1、帰結節の代入文b[0]=0をコスト1と見積も
る。この条件判定は各ループ繰り返しで、帰結節はルー
プ制御変数jが1の時のみ実行されるから、8行目の合
計コストは1000となる。
コスト1、帰結節の代入文b[0]=0をコスト1と見積も
る。この条件判定は各ループ繰り返しで、帰結節はルー
プ制御変数jが1の時のみ実行されるから、8行目の合
計コストは1000となる。
【0081】タスク2の9行目では、代入文右辺のa[j]
およびb[j-1]のロード、加算、左辺のb[j]のストアを各
々コスト1と見積もる。この代入文は各ループ繰り返し
で実行されるから、9行目の合計コストは3996とな
る。
およびb[j-1]のロード、加算、左辺のb[j]のストアを各
々コスト1と見積もる。この代入文は各ループ繰り返し
で実行されるから、9行目の合計コストは3996とな
る。
【0082】タスク2の10行目では、if文の条件判定
をコスト1、帰結節のprintf文をコスト10と見積も
る。この条件判定は各ループ繰り返しで、帰結節はルー
プ制御変数jが999の時のみ実行されるから、10行
目の合計コストは1099となる。
をコスト1、帰結節のprintf文をコスト10と見積も
る。この条件判定は各ループ繰り返しで、帰結節はルー
プ制御変数jが999の時のみ実行されるから、10行
目の合計コストは1099となる。
【0083】以上を合計すると、タスク2のコストは6
005となり、この値が図11におけるタスクテーブル
931のフィールド9313に格納される。
005となり、この値が図11におけるタスクテーブル
931のフィールド9313に格納される。
【0084】次に、ステップ1335を中間語91に適
用する。図3のタスク解析部132で解析された実行可
能条件を表にした図9より、「タスク2の終了」を実行
可能条件にもつタスクは存在しないことから、タスク2
の終了で初めて実行可能条件が満たされるタスクの総数
は0となり、その値が図11におけるタスクテーブル9
32のフィールド9324に格納される。
用する。図3のタスク解析部132で解析された実行可
能条件を表にした図9より、「タスク2の終了」を実行
可能条件にもつタスクは存在しないことから、タスク2
の終了で初めて実行可能条件が満たされるタスクの総数
は0となり、その値が図11におけるタスクテーブル9
32のフィールド9324に格納される。
【0085】次に、ステップ1336を中間語91に適
用する。タスク1,3,4のうち転送情報検出部133
で未処理のものが存在すれば、NO方向へ処理が分岐して
ステップ1331へ戻り、次のタスクに関してステップ
1332〜1336を繰り返し、存在しなければ転送情
報検出部133を終了する。以上で、転送情報検出部1
33の処理動作例の説明を終了する。
用する。タスク1,3,4のうち転送情報検出部133
で未処理のものが存在すれば、NO方向へ処理が分岐して
ステップ1331へ戻り、次のタスクに関してステップ
1332〜1336を繰り返し、存在しなければ転送情
報検出部133を終了する。以上で、転送情報検出部1
33の処理動作例の説明を終了する。
【0086】次に、図3の中間語変換部134の処理を
図6の入力プログラム90に適用した結果について説明
する。中間語変換部134は、中間語91、タスクテー
ブル93、配列参照範囲テーブル94を入力して、タス
クスケジュール処理、情報転送タスクスケジュール処
理、情報転送タスクを持つタスク並列化された中間語9
1を出力する。
図6の入力プログラム90に適用した結果について説明
する。中間語変換部134は、中間語91、タスクテー
ブル93、配列参照範囲テーブル94を入力して、タス
クスケジュール処理、情報転送タスクスケジュール処
理、情報転送タスクを持つタスク並列化された中間語9
1を出力する。
【0087】尚、タスク並列化された中間語91は図
7,8の出力プログラム92に対応しているので、以下
の説明では、図7,8の出力プログラム92をタスク並
列化された中間語91のソースプログラムイメージの表
現として用いる。
7,8の出力プログラム92に対応しているので、以下
の説明では、図7,8の出力プログラム92をタスク並
列化された中間語91のソースプログラムイメージの表
現として用いる。
【0088】まず、図3の中間語変換部134は、中間
語並列化部1341の処理を中間語91に適用する。こ
の結果挿入された中間語が、図7,8の出力プログラム
92の3〜6、28〜29、88行目である。
語並列化部1341の処理を中間語91に適用する。こ
の結果挿入された中間語が、図7,8の出力プログラム
92の3〜6、28〜29、88行目である。
【0089】3〜6行目は変数を定義する文である。2
8行目は並列実行部分の開始を表すコンパイラ指示文で
あり、# pragma omp parallelで並列実行部分の開始を
示し、PRIVATE(myPE,newMT)で、プロセッサ番号を表す
変数myPE、変数newMTが各プロセッサで別々の変数にな
るように指示している。
8行目は並列実行部分の開始を表すコンパイラ指示文で
あり、# pragma omp parallelで並列実行部分の開始を
示し、PRIVATE(myPE,newMT)で、プロセッサ番号を表す
変数myPE、変数newMTが各プロセッサで別々の変数にな
るように指示している。
【0090】88行目は並列実行部分の終了を示すコン
パイラ指示文である。29行目はプロセッサ番号を表す
変数myPEの設定文であり、この文の右辺はプロセッサ番
号問い合わせ関数get_processor_numである。
パイラ指示文である。29行目はプロセッサ番号を表す
変数myPEの設定文であり、この文の右辺はプロセッサ番
号問い合わせ関数get_processor_numである。
【0091】次に、タスクスケジュール処理生成部13
42の処理を中間語91に適用する。この結果挿入され
たタスクスケジュール処理にあたる中間語が、図7,8
の出力プログラム92の30〜32行目、37行目、4
0〜41行目、45〜46行目、52〜53行目、58
〜59行目、64行目、84〜85行目、87行目であ
る。
42の処理を中間語91に適用する。この結果挿入され
たタスクスケジュール処理にあたる中間語が、図7,8
の出力プログラム92の30〜32行目、37行目、4
0〜41行目、45〜46行目、52〜53行目、58
〜59行目、64行目、84〜85行目、87行目であ
る。
【0092】30、87行目のwhileループは、プログ
ラム終了タスクであるタスク4が実行終了するまで全プ
ロセッサがwhileループを回ってタスクスケジュール処
理を実行し続ける処理である。
ラム終了タスクであるタスク4が実行終了するまで全プ
ロセッサがwhileループを回ってタスクスケジュール処
理を実行し続ける処理である。
【0093】31、37行目は、この2文の間がクリテ
ィカルセクションであることを示す指示文であり、この
2つの指示文で挟まれた部分は、1度に1台のプロセッ
サでしか実行できない排他処理であることを表す。
ィカルセクションであることを示す指示文であり、この
2つの指示文で挟まれた部分は、1度に1台のプロセッ
サでしか実行できない排他処理であることを表す。
【0094】32行目の代入文では、実行可能条件を満
たしたタスクのタスク番号を関数GET_MT_FROM_QUEUEで
取り出し、変数newMTに設定している。実行可能条件を
満たしたタスクが存在しない場合は、該関数は定数変数
NO_TASKを返す。この関数の処理の内容は、上述の文献
1で述べられている技術と特に変わらないので、ここで
は詳細には述べない。
たしたタスクのタスク番号を関数GET_MT_FROM_QUEUEで
取り出し、変数newMTに設定している。実行可能条件を
満たしたタスクが存在しない場合は、該関数は定数変数
NO_TASKを返す。この関数の処理の内容は、上述の文献
1で述べられている技術と特に変わらないので、ここで
は詳細には述べない。
【0095】40〜41行目、45〜46行目、52〜
53行目、58〜59行目、64行目、84行目は、3
2行目で変数newMTに設定されたタスク番号に従って実
行するタスクを選択する部分である。85行目は、実行
終了したタスクの終了フラグを設定する処理である。終
了フラグはタスク実行終了を示すフラグであり、タスク
毎に設けられている。
53行目、58〜59行目、64行目、84行目は、3
2行目で変数newMTに設定されたタスク番号に従って実
行するタスクを選択する部分である。85行目は、実行
終了したタスクの終了フラグを設定する処理である。終
了フラグはタスク実行終了を示すフラグであり、タスク
毎に設けられている。
【0096】次に、タスクスケジュール処理拡張部13
43の処理を中間語91に適用した場合を説明する。図
12は、図3におけるタスクスケジュール処理拡張部の
処理手順例を示すフローチャートである。
43の処理を中間語91に適用した場合を説明する。図
12は、図3におけるタスクスケジュール処理拡張部の
処理手順例を示すフローチャートである。
【0097】図12に示すように、図3におけるタスク
スケジュール処理拡張部1343は、ステップ1343
1〜13436の各処理を、中間語に対して行う。
スケジュール処理拡張部1343は、ステップ1343
1〜13436の各処理を、中間語に対して行う。
【0098】まず、ステップ13431の処理を中間語
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92における65〜67行目、72
〜73行目、78〜79行目、83行目である。
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92における65〜67行目、72
〜73行目、78〜79行目、83行目である。
【0099】ここで挿入された中間語は、変数newMTに
情報転送タスクのタスク番号が設定されていたら、その
情報転送タスクを実行する処理を意味する。ここでは、
情報転送タスクのタスク番号は、情報転送タスクに対す
る元のタスクのタスク番号に、タスク総数を加えたもの
とする。図7,8の出力プログラム92では、タスク1
〜4に対する情報転送タスクには、それぞれ5〜8のタ
スク番号を与える。
情報転送タスクのタスク番号が設定されていたら、その
情報転送タスクを実行する処理を意味する。ここでは、
情報転送タスクのタスク番号は、情報転送タスクに対す
る元のタスクのタスク番号に、タスク総数を加えたもの
とする。図7,8の出力プログラム92では、タスク1
〜4に対する情報転送タスクには、それぞれ5〜8のタ
スク番号を与える。
【0100】次に、ステップ13432の処理を中間語
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の39行目であり、情報転送タ
スクを除くタスクの実行開始時刻を構造体TDataに設定
する文である。この文の右辺の関数present_timeは、現
時刻を与える関数である。
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の39行目であり、情報転送タ
スクを除くタスクの実行開始時刻を構造体TDataに設定
する文である。この文の右辺の関数present_timeは、現
時刻を与える関数である。
【0101】次に、ステップ13433の処理を中間語
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の27行目、38行目、86行
目である。27行目は配列ExecMTの初期化文、38行目
は各プロセッサが現在実行しているタスクのタスク番号
を配列ExecMTに設定する文、86行目は配列ExecMTの値
を初期値に戻す文である。
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の27行目、38行目、86行
目である。27行目は配列ExecMTの初期化文、38行目
は各プロセッサが現在実行しているタスクのタスク番号
を配列ExecMTに設定する文、86行目は配列ExecMTの値
を初期値に戻す文である。
【0102】次に、ステップ13434の処理を中間語
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の33、36行目である。これ
は、関数GET_MT_FROM_QUEUEが返した値が、その時点で
実行可能条件を満たしたタスクが存在しないことを意味
する定数変数NO_TASKかどうかを調べる文である。
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の33、36行目である。これ
は、関数GET_MT_FROM_QUEUEが返した値が、その時点で
実行可能条件を満たしたタスクが存在しないことを意味
する定数変数NO_TASKかどうかを調べる文である。
【0103】次に、ステップ13435の処理を中間語
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の18〜26行目、34行目の
文である。
91に適用する。この結果挿入された中間語が、図7,
8の出力プログラム92の18〜26行目、34行目の
文である。
【0104】18〜25行目では、図11に示すタスク
テーブル931〜934を用いて、転送情報検出部13
3のステップ1334で見積もられたタスク実行時間を
構造体TDataのTaskGranularityフィールドに、図10の
ステップ1335で数えられた次実行タスク数を構造体
TDataのSuccTaskNoフィールドに設定する。
テーブル931〜934を用いて、転送情報検出部13
3のステップ1334で見積もられたタスク実行時間を
構造体TDataのTaskGranularityフィールドに、図10の
ステップ1335で数えられた次実行タスク数を構造体
TDataのSuccTaskNoフィールドに設定する。
【0105】例えばタスク2の場合では、図11におけ
るタスクテーブル932のフィールド9322に格納さ
れている値2を、図7,8の出力プログラム92の1
9、23行目の代入文左辺の構造体TDataの添字に、ま
た、フィールド9323に格納されている値「600
5」を、出力プログラム92の19行目の代入文右辺
に、フィールド9324に格納されいている値0を、出
力プログラム92の23行目の代入文右辺に設定する。
るタスクテーブル932のフィールド9322に格納さ
れている値2を、図7,8の出力プログラム92の1
9、23行目の代入文左辺の構造体TDataの添字に、ま
た、フィールド9323に格納されている値「600
5」を、出力プログラム92の19行目の代入文右辺
に、フィールド9324に格納されいている値0を、出
力プログラム92の23行目の代入文右辺に設定する。
【0106】図7,8の出力プログラム92の26行目
は各タスクの終了フラグの初期化文である。また、同3
4行目は取得した次実行タスクのタスク番号を変数newM
Tに設定する代入文であり、この代入文右辺の関数Predi
ctSuccMTは、次実行タスクの番号を取得するための関数
(次実行タスク番号取得関数)である。尚、この実行タ
スク番号取得関数の処理の内容については、後述の図1
4を用いて説明する。
は各タスクの終了フラグの初期化文である。また、同3
4行目は取得した次実行タスクのタスク番号を変数newM
Tに設定する代入文であり、この代入文右辺の関数Predi
ctSuccMTは、次実行タスクの番号を取得するための関数
(次実行タスク番号取得関数)である。尚、この実行タ
スク番号取得関数の処理の内容については、後述の図1
4を用いて説明する。
【0107】最後に、ステップ13436の処理を中間
語91に適用する。この結果挿入された中間語が、図
7,8の出力プログラム92の35行目である。これ
は、変数succMTの値である取得された次実行タスクのタ
スク番号にタスク総数を加えて、次実行タスクに対する
情報転送タスクのタスク番号を得る処理である。
語91に適用する。この結果挿入された中間語が、図
7,8の出力プログラム92の35行目である。これ
は、変数succMTの値である取得された次実行タスクのタ
スク番号にタスク総数を加えて、次実行タスクに対する
情報転送タスクのタスク番号を得る処理である。
【0108】以上で、タスクスケジュール処理拡張部1
343の処理の説明を終る。次に、情報転送タスク生成
部1344の処理を中間語91に適用した場合を説明す
る。
343の処理の説明を終る。次に、情報転送タスク生成
部1344の処理を中間語91に適用した場合を説明す
る。
【0109】図13は、図3における情報転送タスク生
成部の処理手順例を示すフローチャートである。本図1
3に示すように、図3における情報転送タスク生成部1
344はステップ13441〜13444からなる処理
をおこなう。
成部の処理手順例を示すフローチャートである。本図1
3に示すように、図3における情報転送タスク生成部1
344はステップ13441〜13444からなる処理
をおこなう。
【0110】まず、ステップ13441の処理を図3の
中間語91に適用する。ここでは、未処理のタスクの例
としてタスク2を選択する。次に、ステップ13442
の処理を中間語91に適用する。図3のタスク解析部1
32で解析したタスク2の実行可能条件は「タスク1の
終了」なので常に真ではない。従って、ここでは、NO方
向へ処理が分岐してステップ13343へ移る。
中間語91に適用する。ここでは、未処理のタスクの例
としてタスク2を選択する。次に、ステップ13442
の処理を中間語91に適用する。図3のタスク解析部1
32で解析したタスク2の実行可能条件は「タスク1の
終了」なので常に真ではない。従って、ここでは、NO方
向へ処理が分岐してステップ13343へ移る。
【0111】次に、ステップ13443の処理を中間語
91に適用する。図11で示すタスク2の配列参照範囲
テーブル942、943の情報を利用して挿入された中
間語が、図7,8の出力プログラム92の68〜71行
目である。
91に適用する。図11で示すタスク2の配列参照範囲
テーブル942、943の情報を利用して挿入された中
間語が、図7,8の出力プログラム92の68〜71行
目である。
【0112】これは、配列参照範囲テーブル942のフ
ィールド9421に格納されている配列名aとフィール
ド9422に格納されている参照範囲1:N−1、配列
参照範囲テーブル943のフィールド9431に格納さ
れている配列名bとフィールド9432に格納されてい
る参照範囲0:N−1より作成された、添字1〜N−1
の範囲の配列aの要素と、添字0〜N−1の範囲の配列
bの要素を使用するループである。
ィールド9421に格納されている配列名aとフィール
ド9422に格納されている参照範囲1:N−1、配列
参照範囲テーブル943のフィールド9431に格納さ
れている配列名bとフィールド9432に格納されてい
る参照範囲0:N−1より作成された、添字1〜N−1
の範囲の配列aの要素と、添字0〜N−1の範囲の配列
bの要素を使用するループである。
【0113】次に、ステップ13444の処理を中間語
91に適用する。タスク1、3、4のうち、未処理のも
のが存在すれば、NO方向へ処理が分岐してステップ13
441へ戻り、次のタスクに関して同様にステップ13
442〜13443を繰り返す。また、未処理のタスク
が存在しなければステップ1344を終了する。
91に適用する。タスク1、3、4のうち、未処理のも
のが存在すれば、NO方向へ処理が分岐してステップ13
441へ戻り、次のタスクに関して同様にステップ13
442〜13443を繰り返す。また、未処理のタスク
が存在しなければステップ1344を終了する。
【0114】以上で、図3における情報転送タスク生成
部1344の処理動作例、および、図3における中間語
変換部134の処理動作例の説明を終る。
部1344の処理動作例、および、図3における中間語
変換部134の処理動作例の説明を終る。
【0115】このようにして、中間語変換部134でタ
スク並列化された中間語91を、最適化部15は入力
し、最適化された中間語91を出力する。そして、コー
ド生成部17は、最適化部15で最適化された中間語9
1を入力して、図7,8に示す出力プログラム92を出
力する。尚、これらの最適化部15、コード生成部17
の処理の内容は通常のコンパイラの場合と特に変わらな
いので、ここでは詳細には述べない。
スク並列化された中間語91を、最適化部15は入力
し、最適化された中間語91を出力する。そして、コー
ド生成部17は、最適化部15で最適化された中間語9
1を入力して、図7,8に示す出力プログラム92を出
力する。尚、これらの最適化部15、コード生成部17
の処理の内容は通常のコンパイラの場合と特に変わらな
いので、ここでは詳細には述べない。
【0116】以上で、本発明に係るタスク並列化方法の
一例の説明を終り、図14で、次実行タスク番号取得関
数、すなわち、図7,8の出力プログラム92の34行
目の代入文右辺の関数PredictSuccMTの処理の内容を説
明する。
一例の説明を終り、図14で、次実行タスク番号取得関
数、すなわち、図7,8の出力プログラム92の34行
目の代入文右辺の関数PredictSuccMTの処理の内容を説
明する。
【0117】図14は、次実行タスク番号取得関数の処
理例を示すフローチャートである。図7,8の出力プロ
グラム92の34行目の代入文右辺の関数PredictSuccM
Tは引数を2個持つ。第1引数は、各タスクのタスク実
行時間、次実行タスク数、タスク実行開始時間、タスク
終了フラグを格納した構造体TData、第2引数は、各プ
ロセッサで現在実行中のタスク番号を格納した配列Exec
MTである。
理例を示すフローチャートである。図7,8の出力プロ
グラム92の34行目の代入文右辺の関数PredictSuccM
Tは引数を2個持つ。第1引数は、各タスクのタスク実
行時間、次実行タスク数、タスク実行開始時間、タスク
終了フラグを格納した構造体TData、第2引数は、各プ
ロセッサで現在実行中のタスク番号を格納した配列Exec
MTである。
【0118】本図14に示すように、次実行タスク番号
取得関数は、ステップ211〜214の処理を行う。ま
ずステップ211では、現在実行中のタスクを検出す
る。これは、関数PredictSuccMTの第2引数である配列E
xecMTの添字をプロセッサ番号とした要素の値を調べ
て、実行中のタスクのタスク番号を取得する処理であ
る。
取得関数は、ステップ211〜214の処理を行う。ま
ずステップ211では、現在実行中のタスクを検出す
る。これは、関数PredictSuccMTの第2引数である配列E
xecMTの添字をプロセッサ番号とした要素の値を調べ
て、実行中のタスクのタスク番号を取得する処理であ
る。
【0119】次にステップ212では、実行中の各タス
クの実行終了までの残り時間を予測する。これは、関数
PredictSuccMTの第1引数である構造体TDataを用いて計
算する。現在実行中のタスクのタスク番号をIとする
と、残り時間の予測式は、次のようにして与えられる。
クの実行終了までの残り時間を予測する。これは、関数
PredictSuccMTの第1引数である構造体TDataを用いて計
算する。現在実行中のタスクのタスク番号をIとする
と、残り時間の予測式は、次のようにして与えられる。
【0120】残り時間 =見積もられたタスク実行時間−(現時刻−タスク実行
開始時刻) =TData[I].TaskGranularity−(present_time()−TDat
a[I].StartTime)
開始時刻) =TData[I].TaskGranularity−(present_time()−TDat
a[I].StartTime)
【0121】さらにステップ213では、ステップ21
2の結果より、残り時間が最小である最小残り時間タス
クを求める。そしてステップ214では、この最小残り
時間タスクの実行終了後に実行可能になるタスクを探
し、このタスクの次実行タスク数が最多のタスクを次に
実行される次実行タスクとする。
2の結果より、残り時間が最小である最小残り時間タス
クを求める。そしてステップ214では、この最小残り
時間タスクの実行終了後に実行可能になるタスクを探
し、このタスクの次実行タスク数が最多のタスクを次に
実行される次実行タスクとする。
【0122】これは、現在未実行のタスクから、該最小
残り時間タスクが終了すると実行可能条件が真になるタ
スク群を探し、そのタスク群から、TData構造体のSuccT
askNoフィールドの値が最大のタスクを求める処理であ
る。以上で、次実行タスク番号取得関数の説明を終る。
残り時間タスクが終了すると実行可能条件が真になるタ
スク群を探し、そのタスク群から、TData構造体のSuccT
askNoフィールドの値が最大のタスクを求める処理であ
る。以上で、次実行タスク番号取得関数の説明を終る。
【0123】以上、図1〜図14を用いて説明したよう
に、本例のタスク並列化方法では、タスクを実行してい
ないアイドルプロセッサがないか監視し、このアイドル
プロセッサを発見したら、他のプロセッサで実行されて
いるタスクの終了時刻を予測し、予測される終了時刻が
最も早いタスクから、アイドルプロセッサに次に割り当
てるタスクである次実行タスクを求める。
に、本例のタスク並列化方法では、タスクを実行してい
ないアイドルプロセッサがないか監視し、このアイドル
プロセッサを発見したら、他のプロセッサで実行されて
いるタスクの終了時刻を予測し、予測される終了時刻が
最も早いタスクから、アイドルプロセッサに次に割り当
てるタスクである次実行タスクを求める。
【0124】そして、この次実行タスクで参照される可
能性のあるデータや、そのタスクに含まれる命令コード
を、そのアイドルプロセッサのキャッシュに転送する情
報転送タスクを作成し、かつ、その情報転送タスクがア
イドルプロセッサで実行されるように割り当てる命令か
らなる情報転送タスクスケジュール処理を作成して、並
列化コンパイラが生成したタスクスケジュール処理に追
加する。
能性のあるデータや、そのタスクに含まれる命令コード
を、そのアイドルプロセッサのキャッシュに転送する情
報転送タスクを作成し、かつ、その情報転送タスクがア
イドルプロセッサで実行されるように割り当てる命令か
らなる情報転送タスクスケジュール処理を作成して、並
列化コンパイラが生成したタスクスケジュール処理に追
加する。
【0125】これにより、プロセッサのアイドルタイム
にデータをキャッシュに転送するので、アイドルプロセ
ッサとキャッシュの有効利用を図ることができ、プログ
ラム実行中のある時点で実行可能なタスク数が、利用可
能なプロセッサ数より少ない場合におけるプログラムま
たはオブジェクトコードの実行時間を短縮することが可
能である。
にデータをキャッシュに転送するので、アイドルプロセ
ッサとキャッシュの有効利用を図ることができ、プログ
ラム実行中のある時点で実行可能なタスク数が、利用可
能なプロセッサ数より少ない場合におけるプログラムま
たはオブジェクトコードの実行時間を短縮することが可
能である。
【0126】尚、本例のタスク並列化方法により予めキ
ャッシュに読み込んだデータが無効化された場合には、
従来技術の通りに共有メモリにアクセスする。
ャッシュに読み込んだデータが無効化された場合には、
従来技術の通りに共有メモリにアクセスする。
【0127】また、本発明は、図1〜図14を用いて説
明した例に限定されるものではなく、その要旨を逸脱し
ない範囲において種々変更可能である。例えば、本例で
は、アイドルプロセッサに次に割り当てられるタスクで
参照される可能性のあるデータや、そのタスクに含まれ
る命令コードを、そのアイドルプロセッサのキャッシュ
に転送する情報転送タスクと、その情報転送タスクをア
イドルプロセッサに割り当てるスケジュール処理を作成
しているが、情報転送タスクとしては、それらのデータ
や命令コードを外部記憶装置からメインメモリヘ、ある
いは、他プロセッサのリモートメモリからアイドルプロ
セッサのローカルメモリに転送するものであっても良
い。
明した例に限定されるものではなく、その要旨を逸脱し
ない範囲において種々変更可能である。例えば、本例で
は、アイドルプロセッサに次に割り当てられるタスクで
参照される可能性のあるデータや、そのタスクに含まれ
る命令コードを、そのアイドルプロセッサのキャッシュ
に転送する情報転送タスクと、その情報転送タスクをア
イドルプロセッサに割り当てるスケジュール処理を作成
しているが、情報転送タスクとしては、それらのデータ
や命令コードを外部記憶装置からメインメモリヘ、ある
いは、他プロセッサのリモートメモリからアイドルプロ
セッサのローカルメモリに転送するものであっても良
い。
【0128】
【発明の効果】本発明によれば、プログラム実行中のあ
る時点で、実行可能なタスク数が利用可能なプロセッサ
数より少ない場合でも、タスクが割り当てられていない
アイドルプロセッサを有効利用して実行時間を短縮でき
るプログラムまたはオブジェクトコードを出力すること
ができ、並列計算機システムの性能の向上を図ることが
可能である。
る時点で、実行可能なタスク数が利用可能なプロセッサ
数より少ない場合でも、タスクが割り当てられていない
アイドルプロセッサを有効利用して実行時間を短縮でき
るプログラムまたはオブジェクトコードを出力すること
ができ、並列計算機システムの性能の向上を図ることが
可能である。
【図1】本発明のタスク並列化方法に係る処理動作例を
示すフローチャートである。
示すフローチャートである。
【図2】図1におけるタスク並列化方法によるタスクの
実行状態の概要例を示す説明図である。
実行状態の概要例を示す説明図である。
【図3】本発明のタスク並列化方法を行う並列化コンパ
イラの構成例を示すブロック図である。
イラの構成例を示すブロック図である。
【図4】図3における並列化コンパイラを実行するシス
テムのハードウェア構成例を示すブロック図である。
テムのハードウェア構成例を示すブロック図である。
【図5】図3におけるタスク並列化コンパイラを実装す
る並列計算機システムの構成例を示すブロック図であ
る。
る並列計算機システムの構成例を示すブロック図であ
る。
【図6】図3における入力プログラムの一例を示す説明
図である。
図である。
【図7】図1における出力プログラムの一例の前半部分
を示す説明図である。
を示す説明図である。
【図8】図1における出力プログラムの一例の後半部分
を示す説明図である。
を示す説明図である。
【図9】図3のタスク解析部により図6の入力プログラ
ムから解析した実行可能条件をまとめた表の構成例を示
す説明図である。
ムから解析した実行可能条件をまとめた表の構成例を示
す説明図である。
【図10】図3における転送情報検出部の処理手順例を
示すフローチャートである。
示すフローチャートである。
【図11】図10における転送情報検出部の処理手順に
より得られるタスクテーブルと配列参照範囲テーブルの
構成例を示す説明図である。
より得られるタスクテーブルと配列参照範囲テーブルの
構成例を示す説明図である。
【図12】図3におけるタスクスケジュール処理拡張部
の処理手順例を示すフローチャートである。
の処理手順例を示すフローチャートである。
【図13】図3における情報転送タスク生成部の処理手
順例を示すフローチャートである。
順例を示すフローチャートである。
【図14】次実行タスク番号取得関数の処理例を示すフ
ローチャートである。
ローチャートである。
【図15】タスク実行状況を表わすタスク実行グラフの
一例を示す説明図である。
一例を示す説明図である。
10:タスク並列化コンパイラ、11:構文解析部、1
3:タスク並列化部、15:最適化部、17:コード生
成部、131:依存解析部、132:タスク解析部、1
33:転送情報検出部、134:中間語変換部、134
1:中間語並列化部、1342:タスクスケジュール処
理生成部、1343:タスクスケジュール処理拡張部、
1344:情報転送タスク生成部、41:表示装置、4
2:入力装置、43:外部記憶装置、44:情報処理装
置、45:光ディスク、46:駆動装置、51:並列計
算機システム、5111〜511n:プロセッサ、51
2:入出力用プロセッサ、513:相互結合ネットワー
ク、515:共有メモリ、5171〜517n:キャッ
シュメモリ、519:入出力用コンソール、90:入力
プログラム、91:中間語、92:出力プログラム、9
3,931〜934:タスクテーブル、9321〜93
25:フィールド(タスクテーブル)、94,942〜
946:配列参照範囲テーブル、9421〜9423:
フィールド(配列参照範囲テーブル)、95:実行可能
条件の表、15001:タスク実行グラフ。
3:タスク並列化部、15:最適化部、17:コード生
成部、131:依存解析部、132:タスク解析部、1
33:転送情報検出部、134:中間語変換部、134
1:中間語並列化部、1342:タスクスケジュール処
理生成部、1343:タスクスケジュール処理拡張部、
1344:情報転送タスク生成部、41:表示装置、4
2:入力装置、43:外部記憶装置、44:情報処理装
置、45:光ディスク、46:駆動装置、51:並列計
算機システム、5111〜511n:プロセッサ、51
2:入出力用プロセッサ、513:相互結合ネットワー
ク、515:共有メモリ、5171〜517n:キャッ
シュメモリ、519:入出力用コンソール、90:入力
プログラム、91:中間語、92:出力プログラム、9
3,931〜934:タスクテーブル、9321〜93
25:フィールド(タスクテーブル)、94,942〜
946:配列参照範囲テーブル、9421〜9423:
フィールド(配列参照範囲テーブル)、95:実行可能
条件の表、15001:タスク実行グラフ。
Claims (1)
- 【請求項1】 ソースプログラムを、並列計算機で実行
可能な複数のタスクと該タスクをプロセッサへ割り当て
るタスクスケジュール処理とからなるプログラムもしく
はオブジェクトコードに変換する並列化コンパイラにお
けるタスクの並列化方法であって、予め定められた条件
を満たすタスクA内で参照される可能性のあるデータな
らびに上記タスクAに含まれる命令コードをコンパイル
時に検出するステップと、上記データならびに上記命令
コードを、上記タスクAが割り当てられるプロセッサに
近い記憶装置へ転送する命令からなる情報転送タスクを
生成するステップと、タスクを実行していないアイドル
プロセッサに次に割り当てる次実行タスクを求めて該次
実行タスクに対する上記情報転送タスクが上記アイドル
プロセッサで実行されるよう割り当てる命令からなる情
報転送タスクスケジュール処理を上記タスクスケジュー
ル処理に追加するステップとを有することを特徴とする
タスク並列化方法。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP34709099A JP2001167060A (ja) | 1999-12-07 | 1999-12-07 | タスク並列化方法 |
| US09/729,975 US20010003187A1 (en) | 1999-12-07 | 2000-12-06 | Task parallel processing method |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP34709099A JP2001167060A (ja) | 1999-12-07 | 1999-12-07 | タスク並列化方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2001167060A true JP2001167060A (ja) | 2001-06-22 |
Family
ID=18387850
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP34709099A Pending JP2001167060A (ja) | 1999-12-07 | 1999-12-07 | タスク並列化方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20010003187A1 (ja) |
| JP (1) | JP2001167060A (ja) |
Cited By (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7058945B2 (en) * | 2000-11-28 | 2006-06-06 | Fujitsu Limited | Information processing method and recording medium therefor capable of enhancing the executing speed of a parallel processing computing device |
| US7178137B1 (en) | 2001-04-05 | 2007-02-13 | Network Appliance, Inc. | Automatic verification of scheduling domain consistency |
| JP2007133620A (ja) * | 2005-11-10 | 2007-05-31 | Fujitsu Ltd | マルチプロセッサを有するプロセッサ装置用のタスク分配プログラム及びタスク分配装置 |
| CN100462924C (zh) * | 2005-03-25 | 2009-02-18 | 株式会社东芝 | 可调度性确定方法和实时系统 |
| JP2009277243A (ja) * | 2009-07-21 | 2009-11-26 | Panasonic Corp | コンパイラ装置およびオペレーティングシステム |
| US7694302B1 (en) * | 2001-04-05 | 2010-04-06 | Network Appliance, Inc. | Symmetric multiprocessor synchronization using migrating scheduling domains |
| US8171480B2 (en) | 2004-01-27 | 2012-05-01 | Network Appliance, Inc. | Method and apparatus for allocating shared resources to process domains according to current processor utilization in a shared resource processor |
| US8245207B1 (en) | 2003-07-31 | 2012-08-14 | Netapp, Inc. | Technique for dynamically restricting thread concurrency without rewriting thread code |
| US8347293B2 (en) | 2005-10-20 | 2013-01-01 | Network Appliance, Inc. | Mutual exclusion domains to perform file system processes on stripes |
| US8627331B1 (en) | 2010-04-30 | 2014-01-07 | Netapp, Inc. | Multi-level parallelism of process execution in a mutual exclusion domain of a processing system |
| US10843704B2 (en) | 2017-03-20 | 2020-11-24 | Hyundai Motor Company | Vehicle and control method thereof |
Families Citing this family (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3933380B2 (ja) * | 2000-10-05 | 2007-06-20 | 富士通株式会社 | コンパイラ |
| AU2002243655A1 (en) * | 2001-01-25 | 2002-08-06 | Improv Systems, Inc. | Compiler for multiple processor and distributed memory architectures |
| US6865644B2 (en) * | 2001-07-25 | 2005-03-08 | Rockwell Automation Technologies, Inc. | System and method for industrial controller with an I/O processor using cache memory to optimize exchange of shared data |
| JP2003256221A (ja) * | 2002-02-28 | 2003-09-10 | Fujitsu Ltd | 並列プロセス実行方法、及びマルチプロセッサ型コンピュータ |
| US7756919B1 (en) * | 2004-06-18 | 2010-07-13 | Google Inc. | Large-scale data processing in a distributed and parallel processing enviornment |
| US7676791B2 (en) * | 2004-07-09 | 2010-03-09 | Microsoft Corporation | Implementation of concurrent programs in object-oriented languages |
| JP4405365B2 (ja) * | 2004-10-27 | 2010-01-27 | パナソニック株式会社 | プログラム変換装置及び方法 |
| US20060136878A1 (en) * | 2004-12-17 | 2006-06-22 | Arun Raghunath | Method and apparatus for enabling compiler and run-time optimizations for data flow applications in multi-core architectures |
| GB0519597D0 (en) * | 2005-09-26 | 2005-11-02 | Imagination Tech Ltd | Scalable multi-threaded media processing architecture |
| JP2007264863A (ja) * | 2006-03-28 | 2007-10-11 | Hitachi Ltd | 業務使用解析装置 |
| US8510741B2 (en) * | 2007-03-28 | 2013-08-13 | Massachusetts Institute Of Technology | Computing the processor desires of jobs in an adaptively parallel scheduling environment |
| US20090165007A1 (en) * | 2007-12-19 | 2009-06-25 | Microsoft Corporation | Task-level thread scheduling and resource allocation |
| US8949786B2 (en) | 2008-12-01 | 2015-02-03 | Kpit Technologies Limited | Method and system for parallelization of sequential computer program codes |
| US20130055224A1 (en) * | 2011-08-25 | 2013-02-28 | Nec Laboratories America, Inc. | Optimizing compiler for improving application performance on many-core coprocessors |
| US20140223419A1 (en) * | 2013-02-04 | 2014-08-07 | Kabushiki Kaisha Toshiba | Compiler, object code generation method, information processing apparatus, and information processing method |
| CN104995603A (zh) * | 2013-11-14 | 2015-10-21 | 联发科技股份有限公司 | 至少部分基于共享相同数据及/或存取相同存储地址的任务分布的任务调度方法以及多核处理器系统中用于分配任务的相关非暂时性计算机可读介质 |
| CN105138598B (zh) * | 2015-08-05 | 2018-11-09 | 深圳联友科技有限公司 | 远程定时任务的方法及系统 |
-
1999
- 1999-12-07 JP JP34709099A patent/JP2001167060A/ja active Pending
-
2000
- 2000-12-06 US US09/729,975 patent/US20010003187A1/en not_active Abandoned
Cited By (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7058945B2 (en) * | 2000-11-28 | 2006-06-06 | Fujitsu Limited | Information processing method and recording medium therefor capable of enhancing the executing speed of a parallel processing computing device |
| US7178137B1 (en) | 2001-04-05 | 2007-02-13 | Network Appliance, Inc. | Automatic verification of scheduling domain consistency |
| US7694302B1 (en) * | 2001-04-05 | 2010-04-06 | Network Appliance, Inc. | Symmetric multiprocessor synchronization using migrating scheduling domains |
| US8245207B1 (en) | 2003-07-31 | 2012-08-14 | Netapp, Inc. | Technique for dynamically restricting thread concurrency without rewriting thread code |
| US8171480B2 (en) | 2004-01-27 | 2012-05-01 | Network Appliance, Inc. | Method and apparatus for allocating shared resources to process domains according to current processor utilization in a shared resource processor |
| CN100462924C (zh) * | 2005-03-25 | 2009-02-18 | 株式会社东芝 | 可调度性确定方法和实时系统 |
| US8347293B2 (en) | 2005-10-20 | 2013-01-01 | Network Appliance, Inc. | Mutual exclusion domains to perform file system processes on stripes |
| JP2007133620A (ja) * | 2005-11-10 | 2007-05-31 | Fujitsu Ltd | マルチプロセッサを有するプロセッサ装置用のタスク分配プログラム及びタスク分配装置 |
| JP2009277243A (ja) * | 2009-07-21 | 2009-11-26 | Panasonic Corp | コンパイラ装置およびオペレーティングシステム |
| US8627331B1 (en) | 2010-04-30 | 2014-01-07 | Netapp, Inc. | Multi-level parallelism of process execution in a mutual exclusion domain of a processing system |
| US9071622B2 (en) | 2010-04-30 | 2015-06-30 | Netapp, Inc. | Multi-level parallelism of process execution in a mutual exclusion domain of a processing system |
| US10843704B2 (en) | 2017-03-20 | 2020-11-24 | Hyundai Motor Company | Vehicle and control method thereof |
Also Published As
| Publication number | Publication date |
|---|---|
| US20010003187A1 (en) | 2001-06-07 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP2001167060A (ja) | タスク並列化方法 | |
| US6718541B2 (en) | Register economy heuristic for a cycle driven multiple issue instruction scheduler | |
| US6128775A (en) | Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler | |
| Gross et al. | Structured dataflow analysis for arrays and its use in an optimizing compiler | |
| JP4105264B2 (ja) | コンパイラ | |
| US6292939B1 (en) | Method of reducing unnecessary barrier instructions | |
| JP2921190B2 (ja) | 並列実行方式 | |
| KR100188499B1 (ko) | 인터프로시쥬어 데이타 흐름 분석 방법 | |
| US20130283250A1 (en) | Thread Specific Compiler Generated Customization of Runtime Support for Application Programming Interfaces | |
| White et al. | Timing analysis for data and wrap-around fill caches | |
| JP2002116916A (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
| JPH01108638A (ja) | 並列化コンパイル方式 | |
| Bischof et al. | On the implementation of automatic differentiation tools | |
| US20040031026A1 (en) | Run-time parallelization of loops in computer programs with static irregular memory access patterns | |
| JP2001166946A (ja) | 階層の平坦化によりソースコードをコンパイルする方法及び装置 | |
| CN114365140B (zh) | 实现用于执行由高层软件代码定义的操作的硬件设备的方法 | |
| RU2411569C2 (ru) | Способ автоматического распараллеливания программ | |
| Cordes et al. | Automatic extraction of pipeline parallelism for embedded software using linear programming | |
| US20030126589A1 (en) | Providing parallel computing reduction operations | |
| Dewald et al. | Improving loop parallelization by a combination of static and dynamic analyses in HLS | |
| US20070204260A1 (en) | Program transformation system | |
| Jingu et al. | Directive-based parallelization of for-loops at LLVM IR level | |
| Sabot et al. | CMAX: A Fortran translator for the ConnectIon Machine system | |
| Nadezhkin et al. | Translating affine nested-loop programs with dynamic loop bounds into polyhedral process networks | |
| Lebedev et al. | Automatic parallelization of affine programs for distributed memory systems |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040831 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20050104 |