JPH04211830A - 並列化コンパイル方式 - Google Patents
並列化コンパイル方式Info
- Publication number
- JPH04211830A JPH04211830A JP3003202A JP320291A JPH04211830A JP H04211830 A JPH04211830 A JP H04211830A JP 3003202 A JP3003202 A JP 3003202A JP 320291 A JP320291 A JP 320291A JP H04211830 A JPH04211830 A JP H04211830A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- parallel
- loops
- data reference
- parallelism
- 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
- 238000000034 method Methods 0.000 claims abstract description 72
- 239000000284 extract Substances 0.000 claims abstract description 4
- 238000000605 extraction Methods 0.000 claims description 17
- 239000011159 matrix material Substances 0.000 description 33
- 238000010586 diagram Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 3
- 101000729271 Homo sapiens Retinoid isomerohydrolase Proteins 0.000 description 1
- 102100031176 Retinoid isomerohydrolase Human genes 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/451—Code distribution
- G06F8/452—Loops
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)
- Multi Processors (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は、複数の並列実行可能な
プロセッサから成る並列計算機システムに対して、与え
られたソースプログラムからオブジェクトプログラムを
生成して供給するコンパイラにおいて、プログラム中の
ループ構造を検出してループの入れ替え及びループの分
割によって並列実行命令を生成する並列化コンパイル方
式に関するものである。
プロセッサから成る並列計算機システムに対して、与え
られたソースプログラムからオブジェクトプログラムを
生成して供給するコンパイラにおいて、プログラム中の
ループ構造を検出してループの入れ替え及びループの分
割によって並列実行命令を生成する並列化コンパイル方
式に関するものである。
【0002】
【従来の技術】 複数の並列実行可能
なプロセッサから成る並列計算機システムの一実施例を
図3に示す。図3に示した並列計算機システムは、第一
のプロセッサモジュール1、第二のプロセッサモジュー
ル2、・・・、第八のプロセッサモジュール8の計8個
のプロセッサモジュールから構成される。第一のプロセ
ッサモジュール1はプロセッシングユニット9と共有メ
モリ10から成る。第二、第三、・・・、第八のプロセ
ッサモジュール2〜8も同様に、プロセッシングユニッ
ト11、13、15、17、19、21、23と共有メ
モリ12、14、16、18、20、22、24からそ
れぞれ構成される。前記共有メモリ10はプロセッシン
グユニット9により、ローカル・アドレス/データバス
47から書き込み及び読み出しを行なうことができると
同時に、前記他のプロセッシングユニット11、13、
15、17、19、21、23によっても、共通・アド
レス/データバス25から書き込み及び読み出しを行な
うことができる。同様に、共有メモリ12、14、16
、18、20、22、24も、同一の前記プロセッサモ
ジュール内にあるプロセッシングユニット11、13、
15、17、19、21、23により、ローカル・アド
レス/データバス47からそれぞれ書き込み及び読み出
しを行なうことができると同時に、他のプロセッサモジ
ュール内にあるプロセッシングユニットによっても、共
通・アドレス/データバス25から書き込み及び読み出
しを行なうことができる。
なプロセッサから成る並列計算機システムの一実施例を
図3に示す。図3に示した並列計算機システムは、第一
のプロセッサモジュール1、第二のプロセッサモジュー
ル2、・・・、第八のプロセッサモジュール8の計8個
のプロセッサモジュールから構成される。第一のプロセ
ッサモジュール1はプロセッシングユニット9と共有メ
モリ10から成る。第二、第三、・・・、第八のプロセ
ッサモジュール2〜8も同様に、プロセッシングユニッ
ト11、13、15、17、19、21、23と共有メ
モリ12、14、16、18、20、22、24からそ
れぞれ構成される。前記共有メモリ10はプロセッシン
グユニット9により、ローカル・アドレス/データバス
47から書き込み及び読み出しを行なうことができると
同時に、前記他のプロセッシングユニット11、13、
15、17、19、21、23によっても、共通・アド
レス/データバス25から書き込み及び読み出しを行な
うことができる。同様に、共有メモリ12、14、16
、18、20、22、24も、同一の前記プロセッサモ
ジュール内にあるプロセッシングユニット11、13、
15、17、19、21、23により、ローカル・アド
レス/データバス47からそれぞれ書き込み及び読み出
しを行なうことができると同時に、他のプロセッサモジ
ュール内にあるプロセッシングユニットによっても、共
通・アドレス/データバス25から書き込み及び読み出
しを行なうことができる。
【0003】第4図に示された、行列AとベクトルBの
積を求めてその結果をベクトルCに格納するFORTR
ANプログラムを図3に示した並列計算機システムで実
行される場合を考える。図4に示されたプログラムにお
いて、外側のDOループ48はインデックス変数Iにつ
いて並列に実行することが可能であり、従って内側のル
ープ49の実行を図3の各プロセッシングユニットがそ
れぞれ前記インデックス変数Iを固定して実行すること
ができる。その様子を図5の(1)〜(8)に示す。
積を求めてその結果をベクトルCに格納するFORTR
ANプログラムを図3に示した並列計算機システムで実
行される場合を考える。図4に示されたプログラムにお
いて、外側のDOループ48はインデックス変数Iにつ
いて並列に実行することが可能であり、従って内側のル
ープ49の実行を図3の各プロセッシングユニットがそ
れぞれ前記インデックス変数Iを固定して実行すること
ができる。その様子を図5の(1)〜(8)に示す。
【0004】図5(1)では第一のプロセッサモジュー
ル1でインデックス変数I=1と固定して内側のループ
49を実行することを表しており、同様に図5(i)で
は第iのプロセッサモジュールでインデックス変数I=
iと固定して前記内側のループ49を実行することを表
している。但し、i=2、・・・、8である。図4に示
したようなFORTRANプログラムを図3に示したよ
うな並列計算機システムで実行させる場合、図5で示し
たように、各プロセッサモジュールで実行できるような
コードを生成する必要がある。従来からこれはコンパイ
ラで行われているが、実際には図6で示したような特別
な言語が考えられており、図6において、50は図4の
外側のループ48に相当するものであるが、特別な構文
を用いることで並列処理することをユーザが直接指定す
る方式がとられている。
ル1でインデックス変数I=1と固定して内側のループ
49を実行することを表しており、同様に図5(i)で
は第iのプロセッサモジュールでインデックス変数I=
iと固定して前記内側のループ49を実行することを表
している。但し、i=2、・・・、8である。図4に示
したようなFORTRANプログラムを図3に示したよ
うな並列計算機システムで実行させる場合、図5で示し
たように、各プロセッサモジュールで実行できるような
コードを生成する必要がある。従来からこれはコンパイ
ラで行われているが、実際には図6で示したような特別
な言語が考えられており、図6において、50は図4の
外側のループ48に相当するものであるが、特別な構文
を用いることで並列処理することをユーザが直接指定す
る方式がとられている。
【0005】
【発明が解決しようとする課題】しかしながら上記のよ
うな方式では、ユーザが並列動作を意識してプログラミ
ングを行なう必要があり、これは実際には並列計算機シ
ステムのアーキテクチャに依存する部分が多く、ソフト
ウェアの開発効率が低下する。また、現在までに汎用言
語で開発されたソフトウェア資産は膨大なものであり、
これらを並列計算機システムに移植することは非常に困
難である。
うな方式では、ユーザが並列動作を意識してプログラミ
ングを行なう必要があり、これは実際には並列計算機シ
ステムのアーキテクチャに依存する部分が多く、ソフト
ウェアの開発効率が低下する。また、現在までに汎用言
語で開発されたソフトウェア資産は膨大なものであり、
これらを並列計算機システムに移植することは非常に困
難である。
【0006】本発明はかかる点に鑑み、ユーザが並列動
作を意識することなく、従来のプログラミング方法によ
って並列計算機システムで実行可能なオブジェクトプロ
グラムを生成する並列化コンパイル方式を提供すること
を目的とする。
作を意識することなく、従来のプログラミング方法によ
って並列計算機システムで実行可能なオブジェクトプロ
グラムを生成する並列化コンパイル方式を提供すること
を目的とする。
【0007】
【課題を解決するための手段】本発明の並列化コンパイ
ル方式は、複数の並列実行可能なプロセッサから成る並
列計算機システムに対して、与えられたソースプログラ
ムからオブジェクトプログラムを生成して供給するコン
パイラにおいて、前記ソースコードを字句に分解する字
句解析部と、前記字句解析部で字句解析された結果から
構文を認識し中間コードを生成する構文解析部と、前記
中間コードからループ構造を検出して並列実行可能部分
の抽出を行なう並列性抽出部と、前記並列性抽出部の指
示によって起動されるコード生成部とを備え、前記並列
性抽出部は、ループの構造を検出すると共に、前記ルー
プが多重ループの場合には前記多重ループ内でのデータ
参照関係を解析し、前記多重ループのうちループ間でデ
ータ参照関係の生じないループを検出して、前記ループ
間でデータ参照関係の生じないループが最外側になるよ
うに、前記多重ループの入れ替えを行なうように構成さ
れ、前記多重ループの入れ替えによってえられた多重ル
ープの最外側ループに関して並列実行命令を生成する機
能を有する並列化コンパイル方式である。
ル方式は、複数の並列実行可能なプロセッサから成る並
列計算機システムに対して、与えられたソースプログラ
ムからオブジェクトプログラムを生成して供給するコン
パイラにおいて、前記ソースコードを字句に分解する字
句解析部と、前記字句解析部で字句解析された結果から
構文を認識し中間コードを生成する構文解析部と、前記
中間コードからループ構造を検出して並列実行可能部分
の抽出を行なう並列性抽出部と、前記並列性抽出部の指
示によって起動されるコード生成部とを備え、前記並列
性抽出部は、ループの構造を検出すると共に、前記ルー
プが多重ループの場合には前記多重ループ内でのデータ
参照関係を解析し、前記多重ループのうちループ間でデ
ータ参照関係の生じないループを検出して、前記ループ
間でデータ参照関係の生じないループが最外側になるよ
うに、前記多重ループの入れ替えを行なうように構成さ
れ、前記多重ループの入れ替えによってえられた多重ル
ープの最外側ループに関して並列実行命令を生成する機
能を有する並列化コンパイル方式である。
【0008】また本発明の前記並列性抽出部は、前記多
重ループの入れ替えによって並列実行命令を生成できな
い場合に、データ参照関係に基づいて最外側ループを分
割するように構成され、前記最外側ループの分割によっ
て並列実行命令を生成する機能を有する。
重ループの入れ替えによって並列実行命令を生成できな
い場合に、データ参照関係に基づいて最外側ループを分
割するように構成され、前記最外側ループの分割によっ
て並列実行命令を生成する機能を有する。
【0009】更に本発明の前記並列性抽出部は、前記多
重ループの入れ替えによって並列実行命令を生成できな
い場合に、前記最外側ループの分割を行ない、更に並列
実行命令を生成できない場合に、前記分割された個々に
ついて前記多重ループの入れ替えを行なうように構成さ
れ、前記多重ループの入れ替えによって個々に並列実行
命令を生成する機能を有する。
重ループの入れ替えによって並列実行命令を生成できな
い場合に、前記最外側ループの分割を行ない、更に並列
実行命令を生成できない場合に、前記分割された個々に
ついて前記多重ループの入れ替えを行なうように構成さ
れ、前記多重ループの入れ替えによって個々に並列実行
命令を生成する機能を有する。
【0010】
【作用】本発明は前記した方式により、従来のプログラ
ミング言語で記述されたプログラムからデータ参照関係
を解析し、多重ループの入れ替えと最外側ループの分割
のうち少なくとも1つの処理を用いて、そのデータ参照
関係を崩さないように並列実行命令を生成する。従って
、従来のプログラミング言語で記述されたプログラムか
ら自動的に並列実行命令を生成することができ、ユーザ
は並列動作を意識することなく、並列計算機システムで
実行可能なオブジェクトプログラムを生成できる。
ミング言語で記述されたプログラムからデータ参照関係
を解析し、多重ループの入れ替えと最外側ループの分割
のうち少なくとも1つの処理を用いて、そのデータ参照
関係を崩さないように並列実行命令を生成する。従って
、従来のプログラミング言語で記述されたプログラムか
ら自動的に並列実行命令を生成することができ、ユーザ
は並列動作を意識することなく、並列計算機システムで
実行可能なオブジェクトプログラムを生成できる。
【0011】
【実施例】図1は本発明の一実施例における並列化コン
パイル方式を示す流れ図である。図1において、26は
ソースプログラム、27はコンパイラ、28は字句解析
部、29は構文解析部、30は並列性抽出部、31はコ
ード生成部、32はオブジェクトプログラムをそれぞれ
表している。コンパイラ27はソースプログラム26を
オブジェクトプログラム32に変換する。変換処理は字
句解析部28、構文解析部29、並列性抽出部30、コ
ード生成部31で行われる。
パイル方式を示す流れ図である。図1において、26は
ソースプログラム、27はコンパイラ、28は字句解析
部、29は構文解析部、30は並列性抽出部、31はコ
ード生成部、32はオブジェクトプログラムをそれぞれ
表している。コンパイラ27はソースプログラム26を
オブジェクトプログラム32に変換する。変換処理は字
句解析部28、構文解析部29、並列性抽出部30、コ
ード生成部31で行われる。
【0012】図7はコンパイラ27によってコンパイル
されるソースプログラム26の三つの例を示している。 これはFORTRAN言語で記述されたプログラムの一
部である。例えば図7(a)のプログラムは字句解析部
28により字句に分解され、更に構文解析部29で図8
に示された中間コードに変換される。図8において、9
9はFORTRANのDOループを示しており、インデ
ックス変数I、Jとその値の初期値、最終値、増減値を
表す。また、108、110、112は代入操作を表し
、109、111は演算を表し、100〜107はオペ
ランドを表している。更に、並列性抽出部30でプログ
ラム中のループ構造が認識され並列性が抽出される。
されるソースプログラム26の三つの例を示している。 これはFORTRAN言語で記述されたプログラムの一
部である。例えば図7(a)のプログラムは字句解析部
28により字句に分解され、更に構文解析部29で図8
に示された中間コードに変換される。図8において、9
9はFORTRANのDOループを示しており、インデ
ックス変数I、Jとその値の初期値、最終値、増減値を
表す。また、108、110、112は代入操作を表し
、109、111は演算を表し、100〜107はオペ
ランドを表している。更に、並列性抽出部30でプログ
ラム中のループ構造が認識され並列性が抽出される。
【0013】図2は並列性抽出部30の詳細な処理手順
を示す流れ図である。図2において、まずプログラム中
のループ構造の検出手続き51を行い、ループが多重ル
ープかどうかの判断手続き33を行い、ループが多重ル
ープである場合には、データ参照関係グラフ即ち、デー
タ参照順序行列RO及びデータ参照方向行列RDの作成
34を行なう。このデータ参照関係グラフにより最外側
ループにおいてループ間でのデータ参照関係解析35を
行なう。ここで、並列化可能な場合には並列コードの生
成45を行い、そうでなければ、ループの入れ替え36
を行なう。このループの入れ替えにより並列化可能な場
合、並列コードの生成45を行なう。並列化できない場
合、元の最外側ループにおいて分割処理可能かどうかの
判断手続き39を行い、分割不可能な場合には、並列化
できない場合のコード生成46を行なう。分割処理可能
な場合には、元の最外側ループにおいて分割処理37を
行ない、各ブロックに分割する。
を示す流れ図である。図2において、まずプログラム中
のループ構造の検出手続き51を行い、ループが多重ル
ープかどうかの判断手続き33を行い、ループが多重ル
ープである場合には、データ参照関係グラフ即ち、デー
タ参照順序行列RO及びデータ参照方向行列RDの作成
34を行なう。このデータ参照関係グラフにより最外側
ループにおいてループ間でのデータ参照関係解析35を
行なう。ここで、並列化可能な場合には並列コードの生
成45を行い、そうでなければ、ループの入れ替え36
を行なう。このループの入れ替えにより並列化可能な場
合、並列コードの生成45を行なう。並列化できない場
合、元の最外側ループにおいて分割処理可能かどうかの
判断手続き39を行い、分割不可能な場合には、並列化
できない場合のコード生成46を行なう。分割処理可能
な場合には、元の最外側ループにおいて分割処理37を
行ない、各ブロックに分割する。
【0014】分割された各ブロックについて、次の処理
を繰り返す。即ち、最外側ループにおいてループ間での
データ参照関係解析35を行なう。これによって並列化
可能な場合、並列コードの生成45を行なう。並列化で
きない場合、ループの入れ替え36を行ない、並列化可
能な場合には並列コードの生成45を行なう。次に、そ
うでない場合には、元の最外側ループにおいて分割処理
可能かどうかの判断手続き39を行い、分割処理可能な
場合には、元の最外側ループにおいて分割処理を行い、
最外側ループにおいて、ループ間でのデータ参照関係解
析35を行い、以下同様の手続きを繰り返し、分割不可
能な場合には、並列化できない場合のコード生成を行な
う。
を繰り返す。即ち、最外側ループにおいてループ間での
データ参照関係解析35を行なう。これによって並列化
可能な場合、並列コードの生成45を行なう。並列化で
きない場合、ループの入れ替え36を行ない、並列化可
能な場合には並列コードの生成45を行なう。次に、そ
うでない場合には、元の最外側ループにおいて分割処理
可能かどうかの判断手続き39を行い、分割処理可能な
場合には、元の最外側ループにおいて分割処理を行い、
最外側ループにおいて、ループ間でのデータ参照関係解
析35を行い、以下同様の手続きを繰り返し、分割不可
能な場合には、並列化できない場合のコード生成を行な
う。
【0015】ループが多重ループかどうかの判断手続き
33を行った結果、多重ループでない場合には、まずデ
ータ参照関係グラフの作成41を行い、ループ間でのデ
ータ参照解析42を行なう。ここで並列化可能な場合、
並列コードの生成45を行なう。並列化不可能な場合、
ループにおいて分割処理43を行なう。そこで、コード
生成処理44により分割された各ブロックごとに並列化
できる場合には並列コードの生成45を行い、出来ない
場合には、並列化できない場合のコードの生成46を行
なう。
33を行った結果、多重ループでない場合には、まずデ
ータ参照関係グラフの作成41を行い、ループ間でのデ
ータ参照解析42を行なう。ここで並列化可能な場合、
並列コードの生成45を行なう。並列化不可能な場合、
ループにおいて分割処理43を行なう。そこで、コード
生成処理44により分割された各ブロックごとに並列化
できる場合には並列コードの生成45を行い、出来ない
場合には、並列化できない場合のコードの生成46を行
なう。
【0016】図2中のデータ参照関係グラフの作成34
、41にあるデータ参照関係グラフとは、データ参照関
係に基づいて定義されるグラフである。ある変数が代入
文の左辺に現れるとき『定義』され、右辺に現れるとき
『引用』されるといい、この両者を含めてデータ参照関
係という。ある同一変数が二度出現するとき、(定義,
引用)、(引用,定義)、(定義,定義)、(引用,引
用)の順序で参照関係を生じうるが、(引用,引用)は
値の変更を全く伴わないから考慮する必要はない。
、41にあるデータ参照関係グラフとは、データ参照関
係に基づいて定義されるグラフである。ある変数が代入
文の左辺に現れるとき『定義』され、右辺に現れるとき
『引用』されるといい、この両者を含めてデータ参照関
係という。ある同一変数が二度出現するとき、(定義,
引用)、(引用,定義)、(定義,定義)、(引用,引
用)の順序で参照関係を生じうるが、(引用,引用)は
値の変更を全く伴わないから考慮する必要はない。
【0017】このデータ参照関係を図9で説明する。図
9中(a)は(定義,引用)の例であり、代入文S1で
変数Aの値が定義され、それが代入文S2、S3で引用
されている。このデータの参照関係を図中右側に模式的
に描いてある。79〜81はそれぞれ代入文S1〜S3
を示しており、矢印82は、値Aがまず代入文S1で定
義され、続いて代入文S2で引用されるという順序関係
を示している。矢印83も同様に、まず値Aが代入文S
1で定義され、続いて代入文S3で引用される順序関係
を示している。図9(b)は(引用,定義)の例であり
、矢印86は、値Bが先ず代入文S1で引用され、続い
て代入文S2で定義されるという順序関係を示している
。図9(c)は(定義,定義)の例であり、矢印91は
、先ず値Aが代入文S1で定義され、続いて代入文S3
で定義されるという順序関係を示している。また図中右
側の模式図では、84、85、87〜89は代入文を示
し、86、90〜92は順序関係を示している。並列実
行可能かどうかの判断は、並列実行することによって前
述のデータ参照関係が変わらないかどうかに依る。
9中(a)は(定義,引用)の例であり、代入文S1で
変数Aの値が定義され、それが代入文S2、S3で引用
されている。このデータの参照関係を図中右側に模式的
に描いてある。79〜81はそれぞれ代入文S1〜S3
を示しており、矢印82は、値Aがまず代入文S1で定
義され、続いて代入文S2で引用されるという順序関係
を示している。矢印83も同様に、まず値Aが代入文S
1で定義され、続いて代入文S3で引用される順序関係
を示している。図9(b)は(引用,定義)の例であり
、矢印86は、値Bが先ず代入文S1で引用され、続い
て代入文S2で定義されるという順序関係を示している
。図9(c)は(定義,定義)の例であり、矢印91は
、先ず値Aが代入文S1で定義され、続いて代入文S3
で定義されるという順序関係を示している。また図中右
側の模式図では、84、85、87〜89は代入文を示
し、86、90〜92は順序関係を示している。並列実
行可能かどうかの判断は、並列実行することによって前
述のデータ参照関係が変わらないかどうかに依る。
【0018】図7に示した三つのFORTRANプログ
ラムが、図2で示した流れ図に従って図15に示す並列
処理用オブジェクトプログラムに変換される様子を示す
。ここでの説明は、話を分かりやすくするために、オブ
ジェクトプログラムは図15に示すような並列処理用高
級言語で記述されたものを挙げる。
ラムが、図2で示した流れ図に従って図15に示す並列
処理用オブジェクトプログラムに変換される様子を示す
。ここでの説明は、話を分かりやすくするために、オブ
ジェクトプログラムは図15に示すような並列処理用高
級言語で記述されたものを挙げる。
【0019】図7に示したプログラムは何れも二重ルー
プであり、従って図2において、多重ループかどうかの
判断手続き33で多重ループであると認識され、続いて
各ループにおいてデータ参照関係グラフの作成34で、
図9で示した定義に従ってデータ参照関係グラフが作成
される。
プであり、従って図2において、多重ループかどうかの
判断手続き33で多重ループであると認識され、続いて
各ループにおいてデータ参照関係グラフの作成34で、
図9で示した定義に従ってデータ参照関係グラフが作成
される。
【0020】図10は図7のデータ参照関係を模式的に
示したものである。図7において、各プログラムの外側
のループ74、76、78また内側のループ73、75
、77におけるデータ参照関係のグラフはどちらも同じ
グラフとなる。図10において、93〜95は代入文を
示しており、96〜98は順序関係を示している。
示したものである。図7において、各プログラムの外側
のループ74、76、78また内側のループ73、75
、77におけるデータ参照関係のグラフはどちらも同じ
グラフとなる。図10において、93〜95は代入文を
示しており、96〜98は順序関係を示している。
【0021】図10図に示したデータ参照関係の模式図
は、図11に示す様なデータ参照順序行列ROで表現で
きる。図1図において、行列の各行及び列は代入文に相
当する、すなわち第1行及び第1列は代入文S1を示し
ている。行列ROの第1行第1列要素(ro11)が1
となっており、これは代入文S1からS1への順序関係
すなわち、図10における矢印96を表している。同様
に矢印97はro12が1、矢印98はro23が1で
表している。上記以外の行列ROの要素は全て0である
。
は、図11に示す様なデータ参照順序行列ROで表現で
きる。図1図において、行列の各行及び列は代入文に相
当する、すなわち第1行及び第1列は代入文S1を示し
ている。行列ROの第1行第1列要素(ro11)が1
となっており、これは代入文S1からS1への順序関係
すなわち、図10における矢印96を表している。同様
に矢印97はro12が1、矢印98はro23が1で
表している。上記以外の行列ROの要素は全て0である
。
【0022】データ参照関係がループにまたがって生じ
る場合がある。すなわち図7(a)のプログラムにおい
て、外側のループ74についてみると、代入文S1の左
辺の配列変数Aのインデックスと、同じく代入文S1の
右辺の配列変数Aのインデックスが一致していない。従
って、インデックス変数I=K(2≦K≦N)のときに
代入文S1で定義された配列変数Aの値がインデックス
変数I=K+1(2≦K≦N)のときに代入文S1で引
用される。すなわちループにまたがってデータの参照関
係が生じている。同様に内側のループ73についてみる
と、代入文S1の左辺の配列変数Aのインデックスと、
同じく代入文S1の右辺の配列変数Aのインデックスが
一致している。従って、インデックス変数J=K(2≦
K≦N)のときに代入文S1で定義された配列変数Aの
値がインデックス変数J=K(2≦K≦N)のときに代
入文S1で引用される。すなわちループに独立なデータ
の参照関係が生じている。
る場合がある。すなわち図7(a)のプログラムにおい
て、外側のループ74についてみると、代入文S1の左
辺の配列変数Aのインデックスと、同じく代入文S1の
右辺の配列変数Aのインデックスが一致していない。従
って、インデックス変数I=K(2≦K≦N)のときに
代入文S1で定義された配列変数Aの値がインデックス
変数I=K+1(2≦K≦N)のときに代入文S1で引
用される。すなわちループにまたがってデータの参照関
係が生じている。同様に内側のループ73についてみる
と、代入文S1の左辺の配列変数Aのインデックスと、
同じく代入文S1の右辺の配列変数Aのインデックスが
一致している。従って、インデックス変数J=K(2≦
K≦N)のときに代入文S1で定義された配列変数Aの
値がインデックス変数J=K(2≦K≦N)のときに代
入文S1で引用される。すなわちループに独立なデータ
の参照関係が生じている。
【0023】ループにまたがるデータ参照関係が生じて
いるかどうかをデータ参照方向行列RDで表す。図12
に、図7の三つのプログラムのデータ参照方向行列RD
を外側ループと内側ループについてそれぞれ示す。行列
55、58は図7(a)のプログラムの外側、内側ルー
プにおける行列RDであり、行列56、59は図7(b
)のプログラムの外側、内側ループにおける行列RDで
あり、行列57、60は図7(c)のプログラムの外側
、内側ループにおける行列RDである。図12において
、行列RD55の第1行第1列要素rd11の値が”<
”であり、これは代入文S1から代入文S1へのデータ
参照関係がループにまたがっていることを示している。 またrd12の値が”=”であるのは、代入文S1から
代入文S2へのデータ参照関係がループにまたがってい
ないことを示している。
いるかどうかをデータ参照方向行列RDで表す。図12
に、図7の三つのプログラムのデータ参照方向行列RD
を外側ループと内側ループについてそれぞれ示す。行列
55、58は図7(a)のプログラムの外側、内側ルー
プにおける行列RDであり、行列56、59は図7(b
)のプログラムの外側、内側ループにおける行列RDで
あり、行列57、60は図7(c)のプログラムの外側
、内側ループにおける行列RDである。図12において
、行列RD55の第1行第1列要素rd11の値が”<
”であり、これは代入文S1から代入文S1へのデータ
参照関係がループにまたがっていることを示している。 またrd12の値が”=”であるのは、代入文S1から
代入文S2へのデータ参照関係がループにまたがってい
ないことを示している。
【0024】図13はデータ参照順序行列ROを作成す
る処理手順を示した流れ図、図14はデータ参照方向行
列RDを作成する流れ図である。図13中の52は、代
入文Siの左辺の変数と同じ変数が代入文Sjの右辺ま
たは左辺に現れているかを検査する。118はiとjの
大小を比較する手続きである。53は、見つかった同じ
変数のインデックスを調べる手続きである。このインデ
ックスが一致したとき、i≧jの場合はROjiを1と
する手続き114を行い、i<jの場合はROijを1
とする手続き115を行なう。インデックスが一致しな
いとき、AiとAjのインデックスを調べる手続き54
を行い、AiのインデックスがAjのインデックスより
小さくない場合には、ROijを1とする手続き116
を行なう。またAiのインデックスがAjのインデック
スより小さい場合にはROjiを1とする手続き117
を行なう。以上の処理を各代入文について、すなわちi
をインクリメントする手続き123を行なって、大小比
較手続き124によって、最後の代入文Snまで繰り返
す。
る処理手順を示した流れ図、図14はデータ参照方向行
列RDを作成する流れ図である。図13中の52は、代
入文Siの左辺の変数と同じ変数が代入文Sjの右辺ま
たは左辺に現れているかを検査する。118はiとjの
大小を比較する手続きである。53は、見つかった同じ
変数のインデックスを調べる手続きである。このインデ
ックスが一致したとき、i≧jの場合はROjiを1と
する手続き114を行い、i<jの場合はROijを1
とする手続き115を行なう。インデックスが一致しな
いとき、AiとAjのインデックスを調べる手続き54
を行い、AiのインデックスがAjのインデックスより
小さくない場合には、ROijを1とする手続き116
を行なう。またAiのインデックスがAjのインデック
スより小さい場合にはROjiを1とする手続き117
を行なう。以上の処理を各代入文について、すなわちi
をインクリメントする手続き123を行なって、大小比
較手続き124によって、最後の代入文Snまで繰り返
す。
【0025】図14においても図13での処理と殆ど同
じであるが、iとjの大小を比較する手続き118を行
い、i≧jのとき、AiとAjのインデックスを調べ、
一致した場合はRDjiの値を”=”とする手続き11
9を行い、一致しない場合はRDjiの値を”<”とす
る手続き120を行なう。i<jのとき、AiとAjの
インデックスを調べ、一致した場合はRDijの値を”
=”とする手続き122を行い、一致しない場合はRD
ijの値を”<”とする手続き121を行なう。以上の
処理を各代入文について、すなわち、iをインクリメン
トする手続き123を行いながら、最後の代入文Snま
で繰り返す。
じであるが、iとjの大小を比較する手続き118を行
い、i≧jのとき、AiとAjのインデックスを調べ、
一致した場合はRDjiの値を”=”とする手続き11
9を行い、一致しない場合はRDjiの値を”<”とす
る手続き120を行なう。i<jのとき、AiとAjの
インデックスを調べ、一致した場合はRDijの値を”
=”とする手続き122を行い、一致しない場合はRD
ijの値を”<”とする手続き121を行なう。以上の
処理を各代入文について、すなわち、iをインクリメン
トする手続き123を行いながら、最後の代入文Snま
で繰り返す。
【0026】図13、図14で示した手順で図7(a)
に示したプログラムから図11の行列RO、および図1
2の行列RDを作成する様子を示す。外側のループ74
について、代入文S1の左辺の変数A(I,J)と同じ
変数が代入文S1、S2の右辺に現れている。代入文S
1の右辺に現れている変数のインデックスはI−1で左
辺のものとは異なっている。従って、ro11は1であ
り、rd11は”<”である。また、代入文S2の右辺
に現れている変数のインデックスは代入文S1の左辺の
それと一致している。従って、ro12は1であり、r
d12は”=”である。更に、代入文S3の左辺に現れ
ている変数D(I,J)と同じ変数が代入文S2の右辺
に現れている。インデックスが一致しておらず、かつ代
入文S2のインデックスのほうが代入文S3のインデッ
クスより大きいため、ro23が1となり、rd23は
”<”となる。内側のループ73についても同様に図1
3、図14で示した手順で図11の行列RO、および図
12の行列RDを作成することができる。また図7(b
)、(c)についても同様である。
に示したプログラムから図11の行列RO、および図1
2の行列RDを作成する様子を示す。外側のループ74
について、代入文S1の左辺の変数A(I,J)と同じ
変数が代入文S1、S2の右辺に現れている。代入文S
1の右辺に現れている変数のインデックスはI−1で左
辺のものとは異なっている。従って、ro11は1であ
り、rd11は”<”である。また、代入文S2の右辺
に現れている変数のインデックスは代入文S1の左辺の
それと一致している。従って、ro12は1であり、r
d12は”=”である。更に、代入文S3の左辺に現れ
ている変数D(I,J)と同じ変数が代入文S2の右辺
に現れている。インデックスが一致しておらず、かつ代
入文S2のインデックスのほうが代入文S3のインデッ
クスより大きいため、ro23が1となり、rd23は
”<”となる。内側のループ73についても同様に図1
3、図14で示した手順で図11の行列RO、および図
12の行列RDを作成することができる。また図7(b
)、(c)についても同様である。
【0027】上記の手順によって作成された行列RO、
RDから並列処理可能かどうかを判断する。図2におい
て、上記手順により行列が作成されると、まず最外側ル
ープにおいてループ間でのデータ参照解析35を行なう
。これは行列RO、RDを調べることにより行われる。 すなわち、行列RDの要素が全て”=”であればループ
に独立なデータ参照関係であり、一つでも”<”があれ
ばループにまたがったデータ参照関係である。よって、
図12の行列55から外側のループ74においてはルー
プにまたがったデータ参照関係が生じている。この場合
は並列化不可能な場合であり、ループの入れ替え手続き
36を行なう。これは外側ループ74と内側ループ73
を入れ替えることである。これにより、行列58が外側
のループとなり、これをみると、要素は全て”=”であ
りループに独立なデータ参照関係である。従って、この
ループ73について並列実行が可能であり、変換された
プログラムは図15(a)のようになる。これは、ルー
プ62については並列実行、ループ61については逐次
実行を意味している。
RDから並列処理可能かどうかを判断する。図2におい
て、上記手順により行列が作成されると、まず最外側ル
ープにおいてループ間でのデータ参照解析35を行なう
。これは行列RO、RDを調べることにより行われる。 すなわち、行列RDの要素が全て”=”であればループ
に独立なデータ参照関係であり、一つでも”<”があれ
ばループにまたがったデータ参照関係である。よって、
図12の行列55から外側のループ74においてはルー
プにまたがったデータ参照関係が生じている。この場合
は並列化不可能な場合であり、ループの入れ替え手続き
36を行なう。これは外側ループ74と内側ループ73
を入れ替えることである。これにより、行列58が外側
のループとなり、これをみると、要素は全て”=”であ
りループに独立なデータ参照関係である。従って、この
ループ73について並列実行が可能であり、変換された
プログラムは図15(a)のようになる。これは、ルー
プ62については並列実行、ループ61については逐次
実行を意味している。
【0028】図7(b)の場合、行列56と59ともに
要素に”<”を含んでいるため、ループの入れ替え手続
き36によっても並列化不可能である。従って、元の最
外側ループにおいて分割処理37を行なう。行列56に
おいて、第1行の要素は”=”であり、第2行の要素は
”<”である。従って、代入文S1とS2を一つのブロ
ックとし、S3を別のブロックとして考える。その後、
分割された各ブロックについて、最外側ループにおいて
ループ間でのデータ参照関係解析35を行なう。そこで
、各ブロックは、最外側ループに関して並列実行が可能
であり、並列コードの生成45を行なう。その結果が、
図5図(b)のプログラムである。すなわち、ループ6
4、66の二つのループで、それぞれ並列実行させる。 それぞれの並列実行のループ中では逐次実行ループ63
、65がある。
要素に”<”を含んでいるため、ループの入れ替え手続
き36によっても並列化不可能である。従って、元の最
外側ループにおいて分割処理37を行なう。行列56に
おいて、第1行の要素は”=”であり、第2行の要素は
”<”である。従って、代入文S1とS2を一つのブロ
ックとし、S3を別のブロックとして考える。その後、
分割された各ブロックについて、最外側ループにおいて
ループ間でのデータ参照関係解析35を行なう。そこで
、各ブロックは、最外側ループに関して並列実行が可能
であり、並列コードの生成45を行なう。その結果が、
図5図(b)のプログラムである。すなわち、ループ6
4、66の二つのループで、それぞれ並列実行させる。 それぞれの並列実行のループ中では逐次実行ループ63
、65がある。
【0029】図7(c)のプログラムでは、行列57、
60からループの入れ替え手続き36により、ループの
入れ替えをしても並列化は不可能である。次に、分割処
理37により元の最外側ループの分割を行っても、分割
処理によって生成された一方のループが並列化できない
ため、そのループの入れ替え処理を行なう。つまり、図
15のようにループ70、72の二つに分ける。ループ
70はもとのループ77に相当し、ループの入れ替えに
よるものである。内側には逐次処理を意味するループ6
9がある。ループ72はもとのループ78に相当し、入
れ替え無しにえられる。また内側には逐次処理を意味す
るループ71がある。
60からループの入れ替え手続き36により、ループの
入れ替えをしても並列化は不可能である。次に、分割処
理37により元の最外側ループの分割を行っても、分割
処理によって生成された一方のループが並列化できない
ため、そのループの入れ替え処理を行なう。つまり、図
15のようにループ70、72の二つに分ける。ループ
70はもとのループ77に相当し、ループの入れ替えに
よるものである。内側には逐次処理を意味するループ6
9がある。ループ72はもとのループ78に相当し、入
れ替え無しにえられる。また内側には逐次処理を意味す
るループ71がある。
【0030】コンパイラ27の処理対象のループが、ル
ープが多重ループであるかどうかの判断手続き33で、
多重ループではないと判断されると、多重ループのとき
と同様に、データ参照関係グラフ、即ち、データ参照順
序行列RO及びデータ参照方向行列RDの作成手続き4
1を行い、ループ間でのデータ参照関係解析42を行な
い、並列化できない場合には、ループの分割処理43を
行ない、分割された各ブロックについての処理44を行
なう。多重ループの場合もそうでない場合も、並列化で
きない場合には、並列化できない場合のコードの生成4
6を行なう。
ープが多重ループであるかどうかの判断手続き33で、
多重ループではないと判断されると、多重ループのとき
と同様に、データ参照関係グラフ、即ち、データ参照順
序行列RO及びデータ参照方向行列RDの作成手続き4
1を行い、ループ間でのデータ参照関係解析42を行な
い、並列化できない場合には、ループの分割処理43を
行ない、分割された各ブロックについての処理44を行
なう。多重ループの場合もそうでない場合も、並列化で
きない場合には、並列化できない場合のコードの生成4
6を行なう。
【0031】以上で説明した図7に示した例は、二重ル
ープであったが、三重以上の多重ループについても、以
上に説明した方法は有効である。例えば、図16に示し
たプログラムでは、外側のタイトなループ73、74の
DOループについて、並列実行できるかどうかの判断の
対象とする。ここで、タイトなループとはDOループと
DOループの間に実行文を含まない多重ループのことで
ある。変換された結果が図17であり、この結果より、
ループ73、74について並列実行することが可能とな
る。
ープであったが、三重以上の多重ループについても、以
上に説明した方法は有効である。例えば、図16に示し
たプログラムでは、外側のタイトなループ73、74の
DOループについて、並列実行できるかどうかの判断の
対象とする。ここで、タイトなループとはDOループと
DOループの間に実行文を含まない多重ループのことで
ある。変換された結果が図17であり、この結果より、
ループ73、74について並列実行することが可能とな
る。
【0032】従って、あるプログラミング言語で記述さ
れたプログラムから自動的に並列実行コードに変換する
ことが可能となる。
れたプログラムから自動的に並列実行コードに変換する
ことが可能となる。
【0033】なお、本実施例では、データ参照関係グラ
フの作成手続き41において、データ参照順序行列RO
及び、データ参照方向行列RDを作成したが、データ参
照方向行列RDだけでもループ間でのデータ参照関係の
解析を行なうことができることは言うまでもない。
フの作成手続き41において、データ参照順序行列RO
及び、データ参照方向行列RDを作成したが、データ参
照方向行列RDだけでもループ間でのデータ参照関係の
解析を行なうことができることは言うまでもない。
【0034】
【発明の効果】以上説明したように、本発明によれば、
従来のプログラミング言語で記述されたプログラムから
自動的に並列実行命令を生成することができ、ユーザは
並列動作を意識することなく、並列計算機システムで実
行可能なオブジェクトプログラムを生成でき、ソフトウ
ェア開発効率の向上が図れ、その実用的効果は大きい。
従来のプログラミング言語で記述されたプログラムから
自動的に並列実行命令を生成することができ、ユーザは
並列動作を意識することなく、並列計算機システムで実
行可能なオブジェクトプログラムを生成でき、ソフトウ
ェア開発効率の向上が図れ、その実用的効果は大きい。
【図1】本発明の一実施例における並列化コンパイル方
式の流れ図である。
式の流れ図である。
【図2】コンパイラの並列性抽出部の詳細な処理手順を
示した流れ図である。
示した流れ図である。
【図3】複数の並列実行可能なプロセッサから成る並列
計算機システムの一実施例を示す構成図である。
計算機システムの一実施例を示す構成図である。
【図4】FORTRANプログラムの一例を示す図であ
る。
る。
【図5】図4のプログラムが図3の並列計算機システム
で実行される様子を示した図である。
で実行される様子を示した図である。
【図6】図4のプログラムがある並列処理記述言語で記
述されたプログラムを示す図である。
述されたプログラムを示す図である。
【図7】本発明でコンパイルされるソースプログラムの
例を示す図である。
例を示す図である。
【図8】構文解析によって作られる中間コードを示す図
である。
である。
【図9】データ参照関係の定義を表した図である。
【図10】図7のプログラムのデータ参照関係を表した
図である。
図である。
【図11】図7のプログラムのデータ参照順序行列RO
を示す図である。
を示す図である。
【図12】図7のプログラムのデータ参照方向行列RD
を示す図である。
を示す図である。
【図13】データ参照順序行列ROを作成する手順を示
した流れ図である。
した流れ図である。
【図14】データ参照方向行列RDを作成する手順を示
した流れ図である。
した流れ図である。
【図15】図7のプログラムからコンパイラによってえ
られる並列実行プログラムを示す図である。
られる並列実行プログラムを示す図である。
【図16】三重ループのプログラム例を示す図である。
【図17】図16のプログラムからコンパイラによって
えられる並列実行プログラムを示す図である。
えられる並列実行プログラムを示す図である。
26 ソースプログラム
27 コンパイラ
28 字句解析部
29 構文解析部
30 並列性抽出部
31 コード生成部
32 オブジェクトプログラム
33 ループが多重ループであるかどうかの判断手続
き34,41 データ参照関係グラフの作成手続き3
5 最外側ループ間でのデータ参照関係解析手続き3
6 ループの入れ替え手続き 37 最外側ループにおける分割手続き42 ルー
プ間でのデータ参照関係解析43 ループにおける分
割手続き 44 分割された各ブロックについてのコード生成手
続き 45 並列コードの生成手続き 46 並列化できない場合のコードの生成手続き51
ループの検出手続き。
き34,41 データ参照関係グラフの作成手続き3
5 最外側ループ間でのデータ参照関係解析手続き3
6 ループの入れ替え手続き 37 最外側ループにおける分割手続き42 ルー
プ間でのデータ参照関係解析43 ループにおける分
割手続き 44 分割された各ブロックについてのコード生成手
続き 45 並列コードの生成手続き 46 並列化できない場合のコードの生成手続き51
ループの検出手続き。
Claims (4)
- 【請求項1】 複数の並列実行可能なプロセッサから成
る並列計算機システムに対して、与えられたソースプロ
グラムからオブジェクトプログラムを生成して供給する
コンパイラにおいて、前記ソースコードを字句に分解す
る字句解析部と、前記字句解析部で字句解析された結果
から構文を認識し中間コードを生成する構文解析部と、
前記中間コードからループ構造を検出して並列実行可能
部分の抽出を行なう並列性抽出部と、前記並列性抽出部
の指示によって起動されるコード生成部とを備え、前記
並列性抽出部は、ループの構造を検出すると共に、前記
ループが多重ループの場合には前記多重ループ内でのデ
ータ参照関係を解析し、前記多重ループのうちループ間
でデータ参照関係の生じないループを検出して、前記ル
ープ間でデータ参照関係の生じないループが最外側にな
るように、前記多重ループの入れ替えを行なうように構
成され、前記多重ループの入れ替えによってえられた多
重ループの最外側ループに関して並列実行命令を生成す
る機能を有することを特徴とする並列化コンパイル方式
。 - 【請求項2】 前記並列性抽出部は、前記多重ループ
のうち、タイトな外側ループのみを並列化の対象とする
機能を有することを特徴とする特許請求の範囲第1項記
載の並列化コンパイル方式。 - 【請求項3】 前記並列性抽出部は、前記多重ループ
の入れ替えによって並列実行命令を生成できない場合に
、データ参照関係に基づいて最外側ループを分割するよ
うに構成され、前記最外側ループの分割によって並列実
行命令を生成する機能を有することを特徴とする特許請
求の範囲第2項記載の並列化コンパイル方式。 - 【請求項4】 前記並列性抽出部は、前記多重ループ
の入れ替えによって並列実行命令を生成できない場合に
、最外側ループの分割を行ない、更に並列実行命令を生
成できない場合に、前記分割された個々について多重ル
ープの入れ替えを行なうように構成され、前記多重ルー
プの入れ替えによって個々に並列実行命令を生成する機
能を有することを特徴とする特許請求の範囲第3項記載
の並列化コンパイル方式。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2-25380 | 1990-02-05 | ||
JP2538090 | 1990-02-05 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH04211830A true JPH04211830A (ja) | 1992-08-03 |
Family
ID=12164253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP3003202A Pending JPH04211830A (ja) | 1990-02-05 | 1991-01-16 | 並列化コンパイル方式 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5230053A (ja) |
JP (1) | JPH04211830A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021009443A (ja) * | 2019-06-28 | 2021-01-28 | 富士通株式会社 | 情報処理装置及びコンパイラプログラム |
Families Citing this family (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3601341B2 (ja) * | 1999-02-09 | 2004-12-15 | 株式会社日立製作所 | 並列プログラム生成方法 |
DE68927946T2 (de) * | 1988-08-02 | 1997-10-16 | Philips Electronics Nv | Verfahren und Vorrichtung für die Synchronisierung von parallelen Prozessoren unter Verwendung einer unscharf definierten Sperre |
JP3032031B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
JP2921190B2 (ja) * | 1991-07-25 | 1999-07-19 | 日本電気株式会社 | 並列実行方式 |
CA2078315A1 (en) * | 1991-09-20 | 1993-03-21 | Christopher L. Reeve | Parallel processing apparatus and method for utilizing tiling |
US5355492A (en) * | 1991-11-05 | 1994-10-11 | Thinking Machines Corporation | System for compiling parallel communications instructions including their embedded data transfer information |
US5450554A (en) * | 1991-11-11 | 1995-09-12 | Matsushita Electric Industrial Co., Ltd. | Apparatus for detecting possibility of parallel processing and method thereof and a program translation apparatus utilized therein |
US5410701A (en) * | 1992-01-29 | 1995-04-25 | Devonrue Ltd. | System and method for analyzing programmed equations |
JPH05257709A (ja) * | 1992-03-16 | 1993-10-08 | Hitachi Ltd | 並列化判別方法およびそれを用いた並列化支援方法 |
AU6774894A (en) * | 1993-04-26 | 1994-11-21 | Comdisco Systems, Inc. | Method for scheduling synchronous data flow graphs |
JPH0744508A (ja) * | 1993-08-03 | 1995-02-14 | Hitachi Ltd | プログラム分割方法 |
JPH07110800A (ja) * | 1993-10-13 | 1995-04-25 | Matsushita Electric Ind Co Ltd | 最適化並列コンパイル装置及び最適化並列コンパイル方法 |
EP0715264B1 (en) * | 1994-03-28 | 2004-05-12 | Sony Corporation | Method and apparatus of compiling parallel image processing programs |
JP2669603B2 (ja) * | 1994-12-15 | 1997-10-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンパイラにおけるコード生成方法及びコンパイラ |
GB2315888A (en) * | 1996-07-31 | 1998-02-11 | Ibm | Controlling the degree of parallelism when performing parallel processing on an inherently serial computer program |
US5930510A (en) * | 1996-11-19 | 1999-07-27 | Sun Microsystems, Inc. | Method and apparatus for an improved code optimizer for pipelined computers |
US6038398A (en) * | 1997-05-29 | 2000-03-14 | Hewlett-Packard Co. | Method and apparatus for improving performance of a program using a loop interchange, loop distribution, loop interchange sequence |
US6106575A (en) * | 1998-05-13 | 2000-08-22 | Microsoft Corporation | Nested parallel language preprocessor for converting parallel language programs into sequential code |
US6292822B1 (en) | 1998-05-13 | 2001-09-18 | Microsoft Corporation | Dynamic load balancing among processors in a parallel computer |
US6820250B2 (en) * | 1999-06-07 | 2004-11-16 | Intel Corporation | Mechanism for software pipelining loop nests |
US6438747B1 (en) * | 1999-08-20 | 2002-08-20 | Hewlett-Packard Company | Programmatic iteration scheduling for parallel processors |
US6507947B1 (en) * | 1999-08-20 | 2003-01-14 | Hewlett-Packard Company | Programmatic synthesis of processor element arrays |
US6374403B1 (en) * | 1999-08-20 | 2002-04-16 | Hewlett-Packard Company | Programmatic method for reducing cost of control in parallel processes |
GB2380825B (en) | 2001-10-12 | 2004-07-14 | Siroyan Ltd | Processors and compiling methods for processors |
US20040006667A1 (en) * | 2002-06-21 | 2004-01-08 | Bik Aart J.C. | Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions |
US7222218B2 (en) * | 2002-10-22 | 2007-05-22 | Sun Microsystems, Inc. | System and method for goal-based scheduling of blocks of code for concurrent execution |
US7603664B2 (en) * | 2002-10-22 | 2009-10-13 | Sun Microsystems, Inc. | System and method for marking software code |
US7346902B2 (en) * | 2002-10-22 | 2008-03-18 | Sun Microsystems, Inc. | System and method for block-based concurrentization of software code |
US7765532B2 (en) * | 2002-10-22 | 2010-07-27 | Oracle America, Inc. | Inducing concurrency in software code |
WO2004057501A2 (en) | 2002-12-17 | 2004-07-08 | Cadence Design Systems, Inc. | Method and system for implementing circuit simulators |
US7673295B1 (en) * | 2004-04-27 | 2010-03-02 | Sun Microsystems, Inc. | System and method for compile-time non-concurrency analysis |
US7318223B2 (en) * | 2004-08-26 | 2008-01-08 | International Business Machines Corporation | Method and apparatus for a generic language interface to apply loop optimization transformations |
US20060200811A1 (en) * | 2005-03-07 | 2006-09-07 | Cheng Stephen M | Method of generating optimised stack code |
US8104030B2 (en) * | 2005-12-21 | 2012-01-24 | International Business Machines Corporation | Mechanism to restrict parallelization of loops |
US8443351B2 (en) * | 2006-02-23 | 2013-05-14 | Microsoft Corporation | Parallel loops in a workflow |
US8549499B1 (en) * | 2006-06-16 | 2013-10-01 | University Of Rochester | Parallel programming using possible parallel regions and its language profiling compiler, run-time system and debugging support |
US7962906B2 (en) * | 2007-03-15 | 2011-06-14 | International Business Machines Corporation | Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data |
JP4952317B2 (ja) * | 2007-03-16 | 2012-06-13 | 富士通株式会社 | 退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置 |
US20150268993A1 (en) * | 2014-03-21 | 2015-09-24 | Qualcomm Incorporated | Method for Exploiting Parallelism in Nested Parallel Patterns in Task-based Systems |
US10095494B2 (en) * | 2014-08-28 | 2018-10-09 | Reservoir Labs, Inc. | Systems and methods for footprint based scheduling |
CN106990995B (zh) * | 2017-03-22 | 2020-10-27 | 西安交通大学 | 一种基于机器学习的循环分块大小选择方法 |
CN111062646B (zh) * | 2019-12-31 | 2023-11-24 | 芜湖哈特机器人产业技术研究院有限公司 | 一种多层级嵌套循环任务派发方法 |
US20240086162A1 (en) * | 2022-09-09 | 2024-03-14 | Microsoft Technology Licensing, Llc | Interleaved machine instruction placement in memory |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4686623A (en) * | 1985-06-07 | 1987-08-11 | International Business Machines Corporation | Parser-based attribute analysis |
JP2708405B2 (ja) * | 1986-03-03 | 1998-02-04 | 株式会社日立製作所 | コンパイラにおけるループ展開方法 |
JPH0795274B2 (ja) * | 1986-09-19 | 1995-10-11 | 株式会社日立製作所 | 配列添字解析方法 |
JPH0814817B2 (ja) * | 1986-10-09 | 1996-02-14 | 株式会社日立製作所 | 自動ベクトル化方法 |
JP2777742B2 (ja) * | 1990-03-30 | 1998-07-23 | 株式会社小松製作所 | 光通信装置の信号伝送性能評価装置 |
-
1991
- 1991-01-16 JP JP3003202A patent/JPH04211830A/ja active Pending
- 1991-02-05 US US07/650,819 patent/US5230053A/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021009443A (ja) * | 2019-06-28 | 2021-01-28 | 富士通株式会社 | 情報処理装置及びコンパイラプログラム |
Also Published As
Publication number | Publication date |
---|---|
US5230053A (en) | 1993-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH04211830A (ja) | 並列化コンパイル方式 | |
US20060195828A1 (en) | Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator | |
US5852734A (en) | Method and compiler for parallel execution of a program | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
US20100250564A1 (en) | Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution | |
JPH06324881A (ja) | メモリデータの重なり判定機能を備えたコンパイラ装置 | |
CN112965695A (zh) | 前端代码接入检测方法、装置、设备及存储介质 | |
Mendonça et al. | Automatic insertion of copy annotation in data-parallel programs | |
CN112313626B (zh) | 异步处理器架构上的死锁检测及同步感知优化的方法 | |
US20030126589A1 (en) | Providing parallel computing reduction operations | |
JP5227646B2 (ja) | コンパイラ及びそのコード生成方法 | |
JP3840149B2 (ja) | コンパイラ、演算処理システム及び演算処理方法 | |
JP6558310B2 (ja) | 並列化方法、並列化ツール | |
Basthikodi et al. | HPC Based Algorithmic Species Extraction Tool for Automatic Parallelization of Program Code | |
JP3094475B2 (ja) | プログラム検証方法 | |
JPH04114237A (ja) | 並列化コンパイル方式 | |
US5335351A (en) | Method for optimizing source program including variables necessary for synchronous/exclusive control | |
Dai | Code parallelization for the LGDG large-grain dataflow computation | |
JPH09160784A (ja) | 並列化コンパイル方式 | |
JP2017151903A (ja) | コンパイル装置、コンパイル方法およびコンパイルプログラム | |
Krukov et al. | Debugging DVM programs | |
JPH04184540A (ja) | 並列化コンパイル方式 | |
JPH02132525A (ja) | コンパイル方法 | |
JPH03257579A (ja) | コンパイラの並列化方式 |