JPH05250341A - 並列可能性判定装置、及び並列可能性判定方法、並びにそれを用いたプログラム変換装置 - Google Patents

並列可能性判定装置、及び並列可能性判定方法、並びにそれを用いたプログラム変換装置

Info

Publication number
JPH05250341A
JPH05250341A JP4300165A JP30016592A JPH05250341A JP H05250341 A JPH05250341 A JP H05250341A JP 4300165 A JP4300165 A JP 4300165A JP 30016592 A JP30016592 A JP 30016592A JP H05250341 A JPH05250341 A JP H05250341A
Authority
JP
Japan
Prior art keywords
variable
loop
program
simulation
statement
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP4300165A
Other languages
English (en)
Inventor
Kouji Zaiki
幸治 材木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of JPH05250341A publication Critical patent/JPH05250341A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions

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)【要約】 【目的】 本発明はル−プ内に条件分岐命令、サブル−
チンコ−ル命令、配列の添字が演算式である場合であっ
ても、容易かつ高速に並列可能性を判定する装置及び方
法並びにそれを用いたプログラム変換装置を提供するこ
とを目的とする。 【構成】 入力手段60から入力されたソ−スプログラ
ムは、中間コード生成手段61にて中間コ−ドに変換さ
れる。この中間コ−ドからループ検出手段62、配列/
サブルチーン検出手段63、変数抽出手段64によって
ル−プ、配列、サブル−チン、変数が検出されル。さら
にシミュレート手段66によって、シミュレ−ションさ
れ、プログラム文において値が定義された変数と、その
位置を示す情報とが記憶手段65に登録される。判定手
段67は、プログラム文において値が参照される変数に
ついて、その値が定義された位置におうじてデ−タ参照
関係を調べ、並列化可能性を判定する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、プログラムの並列可能
性を検出する装置及び方法、並びにプログラムを並列計
算機に供するプログラムに変換するプログラム変換装置
に関する。
【0002】
【従来の技術】近年、プログラムを並列に実行する並列
計算機システムの開発が進んでいる。並列計算機はプロ
グラムを実行する複数のPE(プロセッシングエレメン
ト)を有し、それぞれのPEにプログラムを与えること
で並列処理を実現する。通常、FORTRAN等の高級
言語で記述されるソースプログラムは、シリアル処理を
前提に記述される。これらのソースプログラムを並列計
算機で実行させるためには、ソースプログラムからオブ
ジェクトプログラムを生成するコンパイラに並列実行用
のオブジェクトプログラムを生成する機能を持たせる必
要がある。
【0003】ソースプログラムを並列計算機で実行させ
るには、ソースプログラムを変換してオブジェクトプロ
グラムを生成する、並列実行可能なオブジェクトプログ
ラムを生成する必要がある。従来、ソースプログラムか
ら並列計算機用のオブジェクトプログラムを生成するコ
ンパイラとして、次のようなものがある。すなわち、ソ
ースプログラムに含まれるdoループのような繰り返し
処理から並列性を抽出し、ループの繰り返しを各PEに
割り当てて、並列実行させるという方法が採られている
(文献「David A.Pauda, et al.:Advanced compiler op
timizations for supercomputers,Communications of t
he ACM,pp1184-1201(1986)」)。なお、以下の説明で
は、プログラムにおいて繰り返し実行されうる命令の集
合をル−プ(またはループ処理)と呼び、ル−プにおけ
る1回分の処理を繰り返しと呼ぶ。
【0004】図12は、上記の従来技術におけるコンパ
イラの構成を示すブロック図である。1は入力手段であ
り、ソースプログラムが外部から入力されメモリ2に格
納する。2はメモリであり、コンパイルを実現するプロ
グラム、入力手段1から入力されたソースプログラム、
コンパイル結果であるオブジェクトプログラム等を保持
する。
【0005】3はプロセッサであり、メモリ2に保持さ
れているプログラムに従って、コンパイルを実行する。
4は出力手段であり、プロセッサ3により生成されメモ
リ2に保持されたオブジェクトプログラムを出力装置等
(例えば、表示装置、プリンタ、ファイル装置)に出力
する。
【0006】図13は、従来のコンパイル装置の機能ブ
ロック図である。これは図12のメモリ2のプログラム
に従ってプロセッサ3が実行するコンパイル処理を機能
別に構成したものである。21は入力手段で、外部から
入力されるソースプログラムを取り込む。22はループ
検出手段で、ソースプログラムに含まれるループ処理を
検出する。
【0007】23は配列検出手段で、ソースプログラム
に含まれる配列を検出する。24は記憶手段で、ループ
検出手段22及び配列検出手段23によって検出された
ループ及び配列を記憶する。25は判定手段で、記憶手
段24の記憶内容に基づいてループの並列化が可能か否
かを判定する。
【0008】26はオブジェクト生成手段で、判定手段
25が並列化可能と判定したとき、並列実行用のオブジ
ェクトプログラムを生成し、並列不可と判定したとき、
通常のオブジェクトプログラムを生成する。27は出力
手段で、オブジェクトプログラムを出力する。例えば、
表示装置、プリンタ、ファイル装置等に出力する。
【0009】以上のように構成された従来技術における
コンパイラについて、図14に示す処理フローを用いて
その動作を説明する。まず、コンパイルされる前のソー
スプログラムは、入力手段21に入力される(ステップ
31)。図15は、ソースプログラムの例としてFOR
TRANで記述されたプログラムの例である。
【0010】このプログラムは外側のループ400(変
数iに関するdo 10のループ)の中に2つのループ
(変数jに関するdo 20のループと、変数jに関す
るdo 10のループ)がネスティングされている。入
力手段21から入力されたソースプログラムは、ループ
検出手段22によりループ処理が検出される。図15に
おいては、ループ検出手段22は、ソースプログラム中
のdo文とcontinue文のペアを判別し、それを
ループ処理として検出する(ステップ32)。ループ処
理の検出結果は、記憶手段24に記憶される。そして、
ループ処理の有無に従って、存在する場合にはステップ
34に進み、存在しない場合にはステップ37に進む
(ステップ33)。
【0011】次に、ループ処理が存在する場合、配列検
出手段23は抽出されたループ処理における配列式を判
別し、それを検出する。図15におけるdoループ40
0においては、配列検出手段23は、式の左辺にある配
列a(1)、c(i)、d(i)、a(j)、e(i,
j)と、式の右辺に存在する配列a(j−1)、c
(j)、d(j)、a(j)とを検出する(ステップ3
4)。配列の検出結果は、記憶手段24に格納される。
【0012】記憶手段24の記憶内容を参照して、判定
手段25は、ループの繰り返しにまたがってデータ参照
関係が存在するか否か、即ち、do文の制御変数の下限
値、上限値の範囲内で、式の左辺にある配列データを式
の右辺で参照しているか否かを判定する。図15におい
ては、j=2〜10の範囲でc(j)、d(j)はルー
プ400より以前に既に定義付けされているものとする
と、判定手段25は、並列化可能と判定する。すなわ
ち、式の右辺にある配列a(j−1)はjについてのd
o20のループの中で下限値1、上限値9であるが、こ
れらの値は、左辺にある配列a(1)及び、下限値2、
上限値10の配列a(j)によって定義付けされている
ので、ループ400の繰り返しに跨ったデータ参照は存
在していない。したがって、判定手段25は、ループ4
00について並列化が可能であると判定する。また、j
に関するdo20ループ,jに関するdo10ループに
ついては、ループ400にネスティングされているルー
プについては並列化の判断をしない。
【0013】判定手段25の判定の結果、データ参照関
係が存在しない場合にはステップ36に進み、存在する
場合にはステップ37に進む(ステップ35)。この
後、オブジェクト生成手段26は、データ参照関係が存
在しない場合はループの繰り返しを並列化してオブジェ
クトプログラムを生成し(ステップ36)、データ参照
関係が存在する場合はループの繰り返しを並列化しない
でオブジェクトプログラムを生成する(ステップ3
7)。図15の例では、ループ400は並列化可能と判
定されているので、ループ400を並列化したオブジェ
クトプログラムを生成する。
【0014】以上のように従来技術では、do文の制御
変数の上限値、下限値と配列の添字式に基づいて、ルー
プに跨ったデータ参照関係の有無を判断していた。
【0015】
【発明が解決しようとする課題】しかしながら上記の従
来技術によれば、本来並列化が可能なソースプログラム
であっても並列化できないと判断されるという問題点が
あった。すなわち、配列の添字式の形式からではデータ
参照関係を判断できない場合で、具体的には、 (1)ループ内に条件文が含まれている場合は、実際に
実行されないと変数が定まらないので並列化できないと
判断していた。 (2)ループ内にサブルーチンが含まれている場合は、
サブルーチンにおけるデータ参照関係まで検出していな
いので並列化できないと判断していた。 (3)ループ内の配列の添字式が演算を含む場合は、予
め定められた演算でなければ並列性の判断ができなかっ
た。
【0016】上記課題に鑑み本発明は、本来並列化が可
能なソースプログラムまで並列化ができないと判断する
ことを回避すること、より具体的には、(1)ループ内
に条件文が含まれている場合、(2)ループ内の配列の
添字式が演算を含む場合、(3)ループ内にサブルーチ
ンが含まれている場合であっても、的確に並列化の可否
を判断することが可能な並列可能性判定装置及び並列可
能性判定方法、並びにそれを用いたプログラム変換装置
を提供することを目的とする。
【0017】
【発明が解決するための手段】上記課題を解決するため
本発明の並列可能性検出装置は、複数のプログラム文か
らなる繰り返し処理を実行するループを含むプログラム
の並列実行可能性を検出する並列可能性検出装置であっ
て、ループの繰り返しごとにプログラムの実行をシミュ
レーションするシミュレーション手段と、シミュレーシ
ョンに基づいて、1つのプログラム文において値が定義
された変数を示す情報を、その変数が定義されたプログ
ラム文の位置を示す情報と対応させて記憶する変数記憶
手段と、変数記憶手段の記憶内容に基づいて、値が参照
される変数について、その値が定義された位置に応じて
並列化可能か否かを判定する判定手段とを備えている。
【0018】前記シミュレーション手段は、シミュレー
トに基づいて、代入文の一方の辺にある変数を検出する
第1の変数検出手段と、シミュレートに基づいて、代入
文が何れのループに属するかを検出するループ回数検出
手段と、第1の変数検出手段により検出された変数を示
す情報を、ループ回数検出手段で何回目のループである
かを示す情報と対応させて変数記憶手段に登録する登録
手段とを有していてもよい。
【0019】前記登録手段は、変数を示す情報として変
数名を登録するように構成されていてもよい。前記判定
手段は、シミュレーションに基づいて、他方の辺にある
変数を検出する第2の変数検出手段と、第2の変数検出
手段により検出された変数の情報がループの同じ繰り返
し内で変数定義記憶手段に記憶されていればデータ参照
関係がないと判定するデータ参照関係判定手段とを有し
ていてもよい。
【0020】前記データ参照関係判定手段は、第2の変
数検出手段により検出された変数の情報が同じ繰り返し
内で記憶されず、かつ、以前の繰り返しで記憶されてい
れば、データ参照関係があると判定するように構成され
ていてもよい。前記データ参照関係判定手段は、第2の
変数検出手段により検出された変数の情報がループ内で
は定義されておらず、ループ以前に定義されていれば、
データ参照関係がないと判定するように構成されていて
もよい。
【0021】前記判定手段は、全てのループでデータ参
照関係がないと判定されたときに各ループを並列実行可
能と判定するように構成されていてもよい。前記判定手
段は、ループの繰り返しの間でデータ参照関係がないル
ープと、データ参照関係があるループに分けて、データ
参照関係がないループを並列実行可能と判定する。よう
に構成されていてもよい。
【0022】前記変数記憶手段は、添字付き変数の添字
を記憶するように構成されていてもよい。前記シミュレ
ーション手段は、さらに、プログラムに演算式が含まれ
ている場合に、その演算をシミュレーションする演算シ
ミュレート手段を有していてもよい。
【0023】上記変数は添字つきの変数を含み演算シミ
ュレート手段は、添字が演算式で表わされている場合
に、その演算式で表わされている演算をシミュレートす
る。ように構成されていてもよい。前記シミュレーショ
ン手段は、プログラムから条件文を検出する条件文検出
手段と、検出された条件文中の条件式を判定する条件式
判定手段と、判定結果に従って分岐先の文を次ぎにシミ
ュレーションするように制御する分岐制御手段とを有し
ていてもよい。
【0024】前記シミュレーション手段は、さらに、プ
ログラムに演算式が含まれている場合に、その演算をシ
ミュレーションし、条件文の中の条件式が演算式で表わ
されている場合に、その演算をシミュレーションする演
算シミュレート手段を有していてもよい。
【0025】前記シミュレーション手段は、プログラム
からサブルーチンコール文を検出するサブルーチンコー
ル文検出手段と、検出されたサブルーチン文に従って、
サブルーチンをシミュレーションするように制御するサ
ブルーチン制御手段と、サブルーチンのプログラム文を
実行する際に、引数の受渡しを行う引数受渡し手段とを
有していてもよい。
【0026】前記シミュレーション手段は、プログラム
に含まれるループを検出するループ検出手段と、検出さ
れたループ処理をシミュレーションするように制御する
制御手段とを有していてもよい。前記制御手段は、ルー
プ検出手段よって複数のループが検出されたときに、ル
ープごとにシミュレーションを実行させる制御をし、前
記判定手段は、ループごとに、並列実行可能性を判定す
るように構成されていてもよい。
【0027】複数のプログラム文からなり、繰り返し処
理を実行するループを含むプログラムの並列実行可能性
を検出する並列可能性検出装置であって、次にシミュレ
ーションすべき文を指定してプログラムの1文ずつを読
み出す読出し手段と、読みだしたプログラムを1文ずつ
シミュレーションするシミュレーション手段と、読みだ
したプログラム文が代入文である場合に、その左辺の変
数名を検出する左辺の変数検出手段と、読みだしたプロ
グラム文が代入文である場合に、その右辺にある変数の
変数名を検出する右辺の変数検出手段と、左辺に変数が
検出されたときに、それが検出された代入文が実行され
るループが何番目のループ出あるかを検出するループ回
数検出手段と、少なくともループの番号と変数を記憶す
る領域を有する記憶手段と、記憶手段に、ループ回数券
出手段は検出したループ番号と、左辺の変数検出手段が
検出した変数名を対応ずけて登録する登録手段と、右辺
の変数検出手段が変数名を検出する度に、その辺数名が
記憶手段の変数領域に登録されているかどうかを検出す
るデータ参照関係検出手段と、データ参照関係の検出結
果に基づき、参照関係のあるループを認定し、並列化で
きるループを判定する並列可能性判定手段とを備えてい
てもよい。また、本発明の並列可能性検出方法は、複数
のプログラム文からなり、繰り返し処理を実行するルー
プを含むプログラムの並列実行可能性を検出する並列可
能性検出方法であって、ループの繰り返しごとにプログ
ラムの実行をシミュレーションするシミュレーションス
テップと、シミュレーションに基づいて、1つのプログ
ラム文において値が定義された変数を示す情報を、その
変数が定義されたプログラム文の位置を示す情報と対応
させて記憶する変数記憶ステップと、変数記憶ステップ
の記憶内容に基づいて、値が参照される変数について、
その値が定義された位置に応じて並列化可能か否かを判
定する判定ステップとを有している。
【0028】前記シミュレーションステップは、シミュ
レートに基づいて、プログラム文が代入文である場合
に、その一方の辺にある変数を検出するシミュレートに
基づいて、上記代入文が何れのループに属するかを検出
する第2のサブステップと、第1のサブステップにより
検出された変数を示す情報を、ループ回数検出ステップ
で何回目のループであるかを示す情報と対応させて記憶
する変数記憶部に登録する第3のサブステップとからな
っていてもよい。
【0029】前記判定ステップは、シミュレートに基づ
いて、他方の辺にある変数を検出する第1のサブステッ
プと、第1のサブステップにより検出された変数の情報
がループの同じ繰り返し内で変数定義記憶ステップに記
憶されていればデータ参照関係がないと判定する第2の
サブステップとからなっていてもよい。
【0030】前記判定ステップは、全てのループでデー
タ参照関係がないと検出された場合に、各ループを並列
実行可能と判定するようにしてもよい。また、本発明の
プログラム変換装置は、プログラムの並列実行可能性を
検出し、並列実行するプログラムを生成するプログラム
変換装置であって、ループの繰り返しごとにプログラム
の実行をシミュレーションするシミュレーション手段
と、シミュレーションに基づいて、1つのプログラム文
において値が定義された変数を示す情報を、その変数が
定義されたプログラム文の位置を示す情報と対応させて
記憶する変数記憶手段と、変数記憶手段の記憶内容に基
づいて、値が参照される変数について、その値が定義さ
れた位置に応じて並列化可能か否かを判定する判定手段
と判定手段の判定結果が並列化可能であれば、並列実行
可能なプログラムを生成するプログラム生成手段とを備
えている。
【0031】上記の各並列可能性検出装置の構成に、前
記プログラム生成手段を備えた構成としてもよい。
【0032】
【作用】本発明は上記した手段により、シミュレ−ショ
ン手段は、ル−プのくり返しごとにプログラムの実行を
シミュレ−ションする。プログラム中に配列、条件分岐
文、サブル−チン・コ−ル文が含まれていても、シミュ
レ−ションが行われる。変数記憶手段は、シミュレ−シ
ョンによって得られる情報、すなわち1つのプログラム
文において値が定義された変数を示す情報を、その変数
が定義されたプログラム文の位置を示す情報と対応させ
て記憶する。判定手段は、プログラム文において値が参
照されている変数について、変数記憶手段の記憶内容を
参照して、その値が定義されたプログラム文の位置に応
じて並列化可能か否かを決定する。
【0033】
【実施例】本発明のプログラム変換装置の一実施例につ
いて具体例を挙げて説明する。図1は本発明の一実施例
におけるコンパイル装置を示すブロック図である。51
は入力手段であり、ソースプログラムが外部から入力さ
れメモリ52に格納する。
【0034】52はメモリであり、コンパイルを実現す
るプログラム、入力手段51から入力されたソースプロ
グラム、コンパイル結果であるオブジェクトプログラム
等を保持する。53はプロセッサであり、メモリ52に
保持されているプログラムに従って、コンパイルを実行
する。
【0035】54は出力手段であり、プロセッサ53に
より生成されメモリ52に保持されたオブジェクトプロ
グラムを出力装置等(例えば、表示装置、プリンタ、フ
ァイル装置)に出力する。図2は、従来のコンパイル装
置の機能ブロック図である。これは図1のメモリ52の
プログラムに従ってプロセッサ53が実行するコンパイ
ル処理を機能別に構成したものである。
【0036】60は入力手段で、外部から入力されるソ
ースプログラムを取り込む。61は中間コード生成手段
で、高級言語例えばFORTRANで記述されたソース
プログラムを変換して、中間コードで記述されたプログ
ラムを生成する。この中間コードのプログラムは、記憶
手段65に記憶される。62はループ検出手段で、ソー
スプログラムに含まれるループ処理を検出する。
【0037】63は配列/サブルーチン検出手段で、ソ
ースプログラムに含まれる配列及びサブルーチンを検出
する。64は変数抽出手段で、ソースプログラムに含ま
れる変数(スカラ変数)を検出する。65は記憶手段
で、ループ検出手段62及び配列/サブルーチン検出手
段63によって検出されたループ及び配列を記憶する。
【0038】66はシミュレート手段で、記憶手段65
に格納されたループ、配列、サブルーチンに関する情報
を参照して中間コードのプログラムをシミュレートす
る。67は判定手段で、シミュレーション結果及び記憶
手段65の記憶内容に基づいてループの並列化が可能か
否かを判定する。68はオブジェクト生成手段で、判定
手段67が並列化可能と判定したとき、並列実行用のオ
ブジェクトプログラムを生成し、並列不可と判定したと
き、通常のオブジェクトプログラムを生成する。
【0039】69は出力手段で、オブジェクトプログラ
ムを出力する。例えば、オペレータに対して表示する表
示装置、紙媒体に印刷するプリンタ、プログラムをファ
イルとして記憶するファイル装置等である。図3に、図
2のシミュレート手段66及び判定手段67の詳細なブ
ロック図を示す。シミュレート手段66は、左辺の配列
検出手段66a、実行手段66b、リンク判別手段66
c、登録手段66d、及び配列変数定義記憶手段66e
を有し、また、判定手段67は、右辺の配列検出手段6
7a、データ参照関係判定手段67b、及び並列化判定
手段67cを有している。
【0040】左辺の配列検出手段66aは、中間コード
生成手段61から中間コードが1文ずつ入力され、その
中間コードの各文の左辺の配列を検出する。実行手段6
6bは、中間コード生成手段61から入力される中間コ
ードを一文ずつ実行(シミュレート)する。リンク判別
手段66cは、中間コードとともにシミュレート手段6
6に入力されるリンクを判別して次の中間コードの一文
を記憶手段に要求する。
【0041】登録手段66dは、左辺の配列検出手段6
6aによって式の右辺の配列が検出され場合に、実行手
段66bの実行結果に基づいてその配列を配列変数定義
記憶手段66eに登録する。配列変数定義記憶手段66
eは、登録手段によって登録される配列、即ち、式の右
辺にある配列を記憶する。
【0042】右辺の配列検出手段67aは、中間コード
生成手段61から中間コードが1文ずつ入力され、その
中間コードの各文の右辺の配列を検出する。データ参照
関係判定手段67bは、右辺の配列検出手段67aによ
って右辺の配列が検出された場合に、その配列が配列変
数定義記憶手段66eに登録されているか否かを調べ、
登録されていればデータ参照関係があり、登録されてい
なければデータ参照関係がないと判定する。
【0043】並列化判定手段67cは、データ参照関係
判定手段67bにより右辺の全ての配列にデータ参照関
係がないと判定された場合に、並列化が可能であるとと
判断する。以上のように構成された本発明の実施例にお
けるコンパイラについて、図4に示す処理フローを用い
てその動作を説明する。
【0044】まず、コンパイルされる前のソースプログ
ラムは、入力手段60に入力される(ステップ81)。
このソースプログラムの例としてFORTRANで記述
されたプログラムを図5に示す。このプログラムは外側
のループ900(変数iに関するdo 10のループ)
の中に2つのループ(変数jに関するdo 20のルー
プと、変数jに関するdo 10のループ)がネスティ
ングされている。
【0045】入力手段60から入力されたソースプログ
ラムは、中間コード生成手段61によって中間コードに
変換され、記憶手段65に格納される。この記憶手段6
5に記憶された中間コードの記憶形式を図6に示す。同
図は図5のソースプログラムの中間コードを示す。同図
において、文番号欄101は文番号を示す。中間コード
欄102は中間コードの形式で表現された括弧()内の
文を示す。リンク欄103は次ぎの文がどれであるかを
指し示すリンク(次の文の文番号を指し示すポインタ)
を示す。
【0046】図6の形式で記憶されている中間コードの
リンク関係を表わす概念図を図7に示す。同図におい
て、1100は、外側のdo文に相当し、1108、1
111は内側のdo文に相当する。1101〜1104
は、配列変数への代入文であり、1109、1112
は、内側のdo文に含まれる配列変数への代入文であ
る。1105は、条件分岐命令であり、1106、11
07は条件成就時おける変数への代入文である。111
0、1113はループの範囲を示す文である。1114
〜1127の矢印はプログラムの構造を表わすためのリ
ンクである。
【0047】中間コードが生成されるとループ検出手段
62は、中間コードに含まれるループ処理を検出する。
具体的には、図7のようなFORTRANにおいては、
ループ検出手段62は、ソースプログラム中のdo文と
continue文のペアを判別し、それをループ処理
として検出する(ステップ83)。ループ処理の検出結
果は、記憶手段65に記憶される。そして、ループ処理
が有無に従って、存在する場合にはステップ85に進
み、存在しない場合にはステップ91に進む(ステップ
84)。
【0048】次に、ループ処理が存在する場合、配列/
サブルーチン検出手段63は抽出されたループ処理にお
ける配列式を判別し、それを検出する。図7におけるd
o文1100とcontinue文1113との間ルー
プにおいて、配列/サブルチーン検出手段63は、式の
左辺にある配列a(1)、a(2)、c(i)、d
(i)、a(j)、e(i,j)と、式の右辺に存在す
る配列a(j−k)、b(i,j)、c(i)、d
(i)、a(j)とを検出する(ステップ85)。これ
と同時にループに含まれるサブルーチンを判別し、それ
を検出する。これらの配列及びサブルーチンの検出結果
は、記憶手段65に格納される。さらに、変数抽出手段
64は、ループに含まれる変数を検出する。図7におけ
るdoループ1100においては、条件分岐命令で用い
られている変数kを検出し、記憶手段65に格納する
(ステップ86)。
【0049】この後、シミュレート手段66は、記憶手
段65を参照して配列が格納されているか否かを判定
し、配列があればステップ88に、なければステップ8
9に進む(ステップ87)。配列がある場合、シミュレ
ート手段66は、記憶手段65を参照して中間コードの
プログラムをシミュレートし、左辺の配列を配列変数定
義表に登録する。このシミュレーションに際してデータ
参照関係の判定も行われる。つまり、シミュレート手段
66及び判定手段67とが中間コードの1文ずつを同時
に取り込まれ、各文に対してシミュレーションとデータ
参照関係の判定とが交互に行われる。これを図3、1
1、12、シミュレート手段66及び判定手段67の処
理フローを示す図9を参照しつつ具体的に説明する。
【0050】(図3のdo文1100のシミュレーショ
ン)まず、図7のdo文1100が左辺の配列検出手段
66a及び実行手段66bに入力されると(図9のステ
ップ131)、左辺の配列検出手段66aは、左辺に配
列をがあるかどうかを判別し、あれば検出する。この場
合存在しないので配列の検出はしない(ステップ13
2)。実行手段66bは、入力された文がdo文であ
り、制御変数iの上限値10、下限値1であることを認
識し、制御変数i=1として記憶手段65に記憶させる
(ステップ133)。さらに左辺の配列検出手段66a
が配列を検出していないので、ステップ136に進む
(ステップ134)。
【0051】一方、右辺の配列検出手段67aは、右辺
に配列があるかどうかを判別するが、この場合ないので
配列の検出せず、その旨データ参照関係判定手段67b
に通知する(ステップ136)。データ参照関係判定手
段67bは、実行手段66bのdo文1100に対する
シミュレーションが終わるのをまって、判定(この場合
判定すべき配列はない)が終わったことをリンク判別手
段66cに通知する(ステップ137)。
【0052】リンク判別手段66cは、シミュレート手
段66に中間コードが入力されるときにリンク1114
が入力されているので、データ参照関係の判定が終わっ
たとの通知を受けると、次文がどれであるかを判別し
(ステップ142)、記憶手段65に対してリンク11
14が指し示す文1101を要求する(ステップ14
3)。
【0053】(代入文1101のシミュレーション)次
に、代入文1101が左辺の配列検出手段66a及び実
行手段66bに入力されると(ステップ131)、左辺
の配列検出手段66aは、左辺に配列があるかどうかを
判別し、この場合で式の左辺のa(1)を検出し(ステ
ップ132)、登録手段66dにその旨通知する。実行
手段66bは、入力された文が代入文であることを認識
し実際に実行する(ステップ133)。登録手段66d
は、実行手段66bがシミュレーションを終えると、左
辺の配列検出手段66aから通知された配列a(1)を
(ステップ134)配列変数定義記憶手段66eに登録
する(ステップ135)。配列変数定義記憶手段66e
での配列の登録形式を図8に示す。
【0054】同図において、繰り返し情報欄1201は
どの繰り返しにおいて配列が登場したか(ループの制御
変数の値)を示し、配列変数欄1202は登録する配列
名を、添字値欄1203は添字の値を、データ参照関係
欄はデータ参照関係判定手段67bによって書き込まれ
データ参照関係の有無を、リンク欄1205は配列変数
名が同じで添字値が異なる配列を指し示すポインタを示
す。この時点で、図8の1210に配列a(1)が登録
される(データ参照関係欄は未登録)。
【0055】一方、右辺の配列検出手段67aは、上記
と同様に右辺に配列がない旨、データ参照関係判定手段
67bに通知する。データ参照関係判定手段67bも上
記と同様に、判定(この場合判定すべき配列はない)が
終わったことをリンク判別手段66cに通知する(ステ
ップ137)。リンク判別手段66cは、データ参照関
係の判定が終わったとの通知を受けると、シミュレート
手段66に中間コードが入力されるときにリンク111
5が入力されているので(ステップ142)、記憶手段
65に対してリンク1115が指し示す次の文(図7の
1102)を要求する(ステップ143)。
【0056】(代入文1102のシミュレーション)上
記と同様に配列a(2)を配列変数定義記憶手段66e
に登録し、次の文(1103)を要求する。その際、登
録手段66dは、配列変数a(2)が既に登録されてい
るかを調べ、この場合既に同じ配列名のa(1)がある
ので、a(2)を図8の1211に登録すると共に12
10のリンク欄1205にa(2)の登録場所を示すポ
インタも登録する(ステップ135)。
【0057】(代入文1103のシミュレーション)添
字式がiであるが、実行手段66bは、現在のi=1で
あるのでc(1)として扱う。配列c(1)は、上記と
同様に図8の1212に登録される。 (代入文1104のシミュレーション)上記と同様に、
配列d(1)が図8の1213に登録される。
【0058】(if文1105のシミュレーション)i
f文1105がシミュレート手段66に入力されると
(ステップ131)、左辺の配列検出手段66aは、代
入文でない(配列の定義文でない)ので配列の検出をせ
ず(ステップ132)、その旨登録手段66dに通知す
る。実行手段66bは、条件分岐命令であることを認識
し、この命令で指示される条件式を実際に実行し、その
成否を判断する。この時点で制御変数i=1なので、実
行手段66bは条件が成立していると判断し(ステップ
133)、その旨、リンク判別手段66cに通知する。
一方、右辺の配列検出手段67aは配列がないので検出
せず(ステップ136)、データ参照関係判定手段67
bは配列が検出されていないのでリンク判別手段66c
に通知する(ステップ137)。リンク判別手段66c
は、3つのリンク先(図6の文番号6のリンク欄参照)
のうちから、条件成立時のリンク1119に基づいて
(ステップ142)次の文(then文1106)を要
求する(ステップ143)。
【0059】(then文1106のシミュレーショ
ン)then文1106が入力されると(ステップ13
1)、左辺の配列検出手段66aは左辺に配列がないの
で検出せず(ステップ132)、その旨を登録手段66
dに通知する。実行手段66bはk=1を実行してkの
値を記憶手段65に記憶させ(ステップ133)、th
en文のシミュレーションを終えたことをリンク判別手
段66cに通知する。一方、右辺の配列検出手段67a
は配列がないので検出せず(ステップ136)、データ
参照関係判定手段67bは検出されていないのでリンク
判別手段66cに判定終了を通知する(ステップ13
7)。リンク判別手段66cは、前のif文のリンクを
依然保持しているので、then文終了時に用いるべき
リンク1121に基づいて(ステップ142)次の文
(do文1108)を要求する(ステップ143)。
【0060】(do文1108のシミュレーション)次
いで、左辺の配列検出手段66aは、do文1108が
入力されると(ステップ131)、配列がないので検出
せず(ステップ134)、その旨登録手段に通知する。
実行手段66bは、do文1108において制御変数j
の上限値10、下限値3を認識し、まず制御変数j=3
として記憶する(ステップ133)。これ以外の動作は
上記do文1100と同様に行われ、リンク判別手段6
6cから次の文の要求が出される。
【0061】(代入文1109のシミュレーション)代
入文1109が入力されると(ステップ131)、左辺
の配列検出手段66aは配列a(j)を検出し、その旨
登録手段66dに通知する。実行手段66bは、代入文
1109の各配列の添字式の値を求めため記憶手段65
を参照し、この時点でのi=1、k=1、j=3である
から、代入文がa(3)=a(2)+b(1,3)+c
(1)+d(1)であると認識する。さらに、記憶手段
65を参照して得た各配列の値に従って,a(3)の値
も求め記憶手段65に記憶させる(ステップ133)。
【0062】登録手段66dは、配列a(j)を検出し
たとの通知を受けたことから(ステップ134)、実行
手段66bから添字式j=3であることを得て、a
(3)を配列変数定義記憶手段66eに登録する(ステ
ップ135)。一方、データ参照関係判定手段67b
は、右辺の配列a(j−k)、b(i,j)、c
(i)、d(i)を検出し(ステップ136)、その旨
データ参照関係判定手段67bに通知する。データ参照
関係判定手段67bは、右辺の配列が検出されたとの通
知を受けているので(ステップ137)、データ参照関
係の有無を次のように判定する。
【0063】まず、右辺の配列a(j−k)について、
実行手段66bから制御変数の値j=3を、記憶手段6
5からシミュレーションで求めた変数の値k=1を得
て、a(2)と認識し、a(2)が配列変数定義記憶手
段66eに登録されているか否かを調べる。この場合、
登録されている(図8の1211)のでループに跨った
データ参照関係がないと判定する。
【0064】次に、右辺の配列b(i,j)について
は、実行手段66bからi=1、j=3を得てb(1,
3)と認識し、これが配列変数定義記憶手段66eの同
じループの繰り返し内に登録されていれば、データ参照
関係がないと判定する。さらに、登録されていない場合
は、他の繰り返しにおいて登録されてなく、かつ、配列
/サブルーチン検出手段63による検出結果として記憶
手段65に記憶されていれば、データ参照関係がないと
判定する。この場合、配列b(1,3)は配列変数定義
記憶手段66eに記憶されていないが、記憶手段65に
記憶されているので(ループ以前に既に定義済みとす
る)、ループに跨ったデータ参照関係がないと判定す
る。
【0065】そして、右辺の配列c(i)については、
実行手段66bからi=1を得てc(1)と認識し、こ
れが配列変数定義記憶手段66eに登録されているか否
かを調べる。この場合、登録されている(図8の121
2)ので、ループに跨ったデータ参照関係がないと判定
する。右辺の配列d(i)についても、c(i)と同様
にループに跨ったデータ参照関係がないと判定する(ス
テップ138)。
【0066】上記の例ではデータ参照関係が存在しない
が、もし、データ参照関係判定手段67bが右辺の配列
につきデータ参照関係があると判定したとすれば(ステ
ップ139)、その時点で、参照関係のある配列のデー
タ参照関係欄1204(図8参照)に1を記録し(ステ
ップ140)、並列化判定手段67cにその旨を通知す
る。
【0067】この例では、どの配列にもデータ参照関係
がないので、データ参照関係の判定を終えたことをリン
ク判別手段66cに通知する。(ステップ139) 通知を受けるとリンク判別手段66cは、次文のリンク
を判別して(ステップ142)、記憶手段65に次文を
要求する。 (continue文1110のシミュレーション)c
ontinue文1110が入力されると、左辺の配列
検出手段66aは検出せず、実行手段66bはdo 2
0ループの繰り返し命令であると認識し、do文110
8のシミュレーションにて記憶手段に記憶した制御変数
jの値が上限値10に達しているかどうかにより、制御
変数jを更新するかループを抜けるかを判断する。この
時点で制御変数j=3であり上限値10に達していない
のでj=4に更新する。リンク判別手段66cは、次文
へのリンクをリンク1122と判別して(ステップ14
2)次文を要求する(ステップ143)。
【0068】この後、制御変数j=4〜10についても
上記と同様にシミュレーションを実行する。制御変数j
=10のときには、リンク判別手段66cは次文へのリ
ンクをリンク1124と判別して(ステップ142)次
文を要求する(ステップ143)。 (do文1111、代入文1112、continue
文1113のシミュレーション)上記do文1108〜
continue文1110と同様である。この場合i
=1なので、左辺の配列e(1,j)は配列変数定義記
憶手段66eに登録され、右辺の配列a(j)はこの時
点で配列変数定義記憶手段66eに登録されていること
からデータ参照関係がないと判断される。
【0069】(これ以降のシミュレーション)制御変数
j=10まで終わると、continue文1113に
従って、iに関するdo 10ループについて制御変数
iを更新し、上記代入文1101〜1113をiの上限
値10にを終えるまで繰り返す。以上のようにしてシミ
ュレーション及びデータの参照関係の判定が行われる
(図4のステップ88)。この結果を受けて判定手段6
7は並列化の可否を判断する。上記データ参照関係の判
定の際に、データ参照関係判定手段67bがデータ参照
関係があると判定した場合、直ちに判定結果が並列化判
定手段67cに通知されるので、その時点で並列化判定
手段67cは並列化不可と判断する。また、データ参照
関係判定手段67bがどの配列に関してもデ−タ参照関
係がないと判定した場合(デ−タ参照関係があるとの通
知がなかった場合)、並列化判定手段67cは並列化可
能と判定する。
【0070】このプログラム例では、iに関するdo
10ループにデータ参照関係有りとの通知が来ないの
で、並列化可能と判断する(ステップ89)。この判定
結果に従って、オブジェクト生成手段68は、中間コー
ドに基づいてオブジェクトプログラムを生成するこのプ
ログラム例では、iに関するdo 10ループを並列実
行するオブジェクトプログラムを生成する(ステップ9
0)。生成されたプログラムは、印字装置等の出力手段
69から出力される(ステップ92)。
【0071】なお、上記プログラムではiに関するdo
10ループの並列化の判定のみ説明したが、jに関す
るdo 20ループ、jに関するdo 10ループにつ
いても、iに関するdo 10ループの並列化の判断と
は独立に、更にこれらのループの並列可を同様に判断す
ることができる。また、上記実施例ではシミュレーショ
ンとデータ参照関係の判定を中間コードの1文ごとに交
互に実行したが、シミュレーションを全文に渡って実行
してからデータ参照関係判定を全文に渡って実行しても
よい。 (サブルーチンのプログラム例)図10に他のソースプ
ログラムの例として、サブルーチンコール文が含まれて
いる場合を示す。このプログラムに基づいて中間コード
生成手段61により生々された中間コードの概念図を図
11に示す。同図において1500〜1506、155
0〜1552はソースプログラムの1文の中間コードを
表わし、1508〜1515、1550〜1552は中
間コードの1文のリンク関係を示し、1507はコール
文1505で呼び出されるサブルーチンの実体であるプ
ログラムを示す。サブルーチンの実体1507の中間コ
ードの概念図を1550〜1554に示す。
【0072】以下、図5のプログラム例と同じ動作をす
る点は説明を省略し、シミュレーション及びデータ参照
関係の判定において動作が異なる点についてのみ図3、
図9を参照しつつ説明する。 (do文1504のシミュレーション)do文1504
までのシミュレーションは、図5のプログラム例で述べ
たのと同様であるので省略する。以下ではdo文150
4の制御変数j=2の場合を取り上げ説明する。 (コール文1505のシミュレーション)図3のシミュ
レート手段66にコール文1505が入力されると、実
行手段66bはコール文であることを認識し、指定され
たサブルーチンの実体プログラムsubを探し出し、引
数a(2),b(2)を引き渡す(図9のステップ13
3)。リンク判別手段66cは実体プログラムを指すリ
ンクを判別し(ステップ142)、次文を要求する(ス
テップ143)。 (サブルーチン文1550のシミュレーション)サブル
ーチン文1550が入力されると、実行手段66bは、
引数a(2),b(2)をサブルーチン内で用いるx,
yとして引受け対応関係を記憶する。リンク判別手段6
6cは次文のリンクを判別し(ステップ142)、次文
を要求する(ステップ143)。 (代入文1551のシミュレーション)左辺の配列検出
手段66aは左辺の変数yに対応する引数がa(2)で
あることから、配列として検出し(ステップ132)、
登録手段66dに通知する。実行手段66bは代入文y
=sin(x)を実行し、yに対応する引数a(2)の
値を求める(ステップ133)。登録手段66dは、通
知を受けたことから(ステップ134)実行結果のa
(2)を配列変数定義記憶手段66eに登録する(ステ
ップ135)。
【0073】一方、右辺の配列検出手段67aは、右辺
の変数xに対応する引数がb(2)であることから、配
列として検出し(ステップ136)、データ参照関係判
定手段67bに通知する。データ参照関係判定手段67
bは、通知を受けたことから(ステップ137)配列b
(2)のデータ参照関係を次のように判定する。つま
り、配列b(2)が配列変数定義記憶手段66eにj=
2の繰り返しにおいて登録されているか否かを調べ、登
録されていればデータ参照関係はないと判定し、さら
に、j=2の繰り返しにおいて登録されていなくても、
これ以前の繰り返し(j=1)において登録されてな
く、かつ、記憶手段65を参照してループ以前に定義付
けされていれば(左辺に有れば)、データ参照関係はな
い判定する。この例では、j=2の繰り返しでは登録さ
れていないが、記憶手段65に定義付けされているもの
とすると、データ参照関係はないと判定される(ステッ
プ138)。データ参照関係がないので(ステップ13
9)、リンク判別手段66cはリンクを判別し(ステッ
プ142)、次文を要求する(ステップ143)。 (return文1552のシミュレーション)ret
urn文1552が入力されると、リンク判別手段66
cはリンクを判別し(ステップ142)、次文を要求す
る(ステップ143)。 (contunue文1506のシミュレーション)こ
れ以降は図5のプログラム例と同様である。
【0074】図10のプログラム例のようにサブルーチ
ンが含まれている場合でも、引数の対応関係を記憶する
ことにより、サブルーチンのシミュレーションに際して
メインルーチンの配列として取り扱い、配列変数定義記
憶手段66eの配列変数定義記憶表に登録するので、デ
ータ参照関係を正しく判定することが可能となる。な
お、以上の例では、配列として一次元配列を主に取り扱
ってきたが、二次元配列ないし他次元配列であっても並
列化の判断が可能である。この場合、図8の配列変数定
義表において添字値欄1203に次元と同数の添字を登
録することになる。
【0075】また、ネスティングされているループにつ
いては、それぞれのループについて並列性を判断するこ
とも可能である。この場合、図8の配列変数定義表をそ
れぞれのループについて設けることになる。あるいは、
図8の配列変数定義表のループの繰り返し情報欄120
1に制御変数を複数登録し、ループごとに並列化を判断
してもよい。
【0076】上記実施例においては、並列化判定手段6
7cは、データ参照関係判定手段67bの判定結果を受
けて、ル−プのくり返しに跨ったデ−タ参照関係が1つ
でもある場合には、並列化できないと判定した。この判
定は、ル−プの各繰り返しの全てについて並列実行させ
る場合に有効適切である。このような判定以外に並列化
判定手段67cは、ループの繰り返しについて、部分的
な並列実行可能性を判定することができる。言い換える
と、並列化判定手段67cは、データ参照関係判定手段
67bが全ての繰り返しについてデ−タ参照関係の有無
を判定し終えると、配列変数定義記憶手段66eに登録
されたデ−タ参照関係欄1204(図8参照)を参照し
て、ル−プにおいてデ−タ参照関係のない繰り返しをグ
ル−プ化し、そのグループについては、並列化可能であ
ると判定する。
【0077】
【発明の効果】本発明の並列可能性判定装置及び並列可
能性判定方法によれば、本来並列計算機による並列実行
が論理的には可能なソースプログラムであれば、その並
列性を的確に判定することができるという効果がある。
すなわち、シミュレーションすることにより、変数の値
の定義付けしている位置、及び参照している位置を容易
に検出することができるので、データ参照関係を的確に
判定することができる。具体的には、配列の添字式の形
式がどうあろうとも(演算を含んでいても)、ループ内
に条件文が含まれていても、ループ内にサブルーチンが
含まれていても、データ参照関係を正しく判断できるの
で、並列可能性を容易に判定することができる。
【0078】また、本発明のプログラム変換装置は、プ
ログラムの変換(例えば、ソースプログラムからオブジ
ェクトプログラムへの変換)に際して、上記の並列可能
性判定装置の判定結果を用いるので、ソースプログラム
の並列性を的確に判定して、並列実行用のプログラムを
生成することができる。
【図面の簡単な説明】
【図1】本発明の実施例におけるコンパイラの構成を示
す図である。
【図2】同実施例におけるコンパイラの機能ブロックを
示す図である。
【図3】同実施例におけるシミュレート手段及び判定手
段の詳細な機能ブロックを示す図である。
【図4】同実施例におけるコンパイラの処理フローを示
す図である。
【図5】ソースプログラムの例である。
【図6】本発明の実施例における図5の中間コードの記
憶形式を示す図である。
【図7】同実施例における図5の中間コードのリンクイ
メージを示す概念図である。
【図8】同実施例における図5の配列変数定義表の記憶
内容を示す図である。
【図9】同実施例におけるシミュレート手段及び判定手
段の処理フロー図である。
【図10】ソースプログラムの例である。
【図11】本発明の実施例における図10の中間コード
のリンクイメージを示す概念図である。
【図12】従来技術におけるコンパイル装置の構成を示
す図である。
【図13】従来技術におけるコンパイル装置の機能ブロ
ックを示す図である。
【図14】従来技術におけるコンパイル装置の処理フロ
ーを示す図である。
【図15】ソースプログラムの例である。
【符号の説明】
51 入力手段 52 メモリ 53 プロセッサ 60 入力手段 61 中間コード生成手段 62 ループ検出手段 63 配列/サブルーチン検出手段 63 配列/サブルチーン検出手段 64 変数抽出手段 65 記憶手段 66 シミュレート手段 66a 左辺の配列検出手段 66b 実行手段 66c リンク判別手段 66d 登録手段 66e 配列変数定義記憶手段 67 判定手段 67a 右辺の配列検出手段 67b データ参照関係判定手段 67c 並列化判定手段 68 オブジェクト生成手段 69 出力手段 101 文番号欄 102 中間コード欄 103 リンク欄 1201 情報欄 1202 配列変数欄 1203 添字値欄 1204 データ参照関係欄 1205 リンク欄

Claims (38)

    【特許請求の範囲】
  1. 【請求項1】 複数のプログラム文からなる繰り返し処
    理を実行するループを含むプログラムの並列実行可能性
    を検出する並列可能性検出装置であって、 ループの繰り返しごとにプログラムの実行をシミュレー
    ションするシミュレーション手段と、 シミュレーションに基づいて、1つのプログラム文にお
    いて値が定義された変数を示す情報を、その変数が定義
    されたプログラム文の位置を示す情報と対応させて記憶
    する変数記憶手段と、 変数記憶手段の記憶内容に基づいて、値が参照される変
    数について、その値が定義された位置に応じて並列化可
    能か否かを判定する判定手段とを備えたことを特徴とす
    る並列可能性検出装置。
  2. 【請求項2】 前記シミュレーション手段は、 シミュレートに基づいて、代入文の一方の辺にある変数
    を検出する第1の変数検出手段と、 シミュレートに基づいて、代入文が何れのループに属す
    るかを検出するループ回数検出手段と、 第1の変数検出手段により検出された変数を示す情報
    を、ループ回数検出手段で何回目のループであるかを示
    す情報と対応させて変数記憶手段に登録する登録手段と
    を有することを特徴とする請求項1記載の並列可能性検
    出装置。
  3. 【請求項3】 前記登録手段は、 変数を示す情報として変数名を登録することを特徴とす
    る請求項1記載の並列可能性検出装置。
  4. 【請求項4】 前記判定手段は、 シミュレーションに基づいて、他方の辺にある変数を検
    出する第2の変数検出手段と、 第2の変数検出手段により検出された変数の情報がルー
    プの同じ繰り返し内で変数定義記憶手段に記憶されてい
    ればデータ参照関係がないと判定するデータ参照関係判
    定手段とを有することを特徴とする請求項2記載の並列
    可能性検出装置。
  5. 【請求項5】 前記データ参照関係判定手段は、第2の
    変数検出手段により検出された変数の情報が同じ繰り返
    し内で記憶されず、かつ、以前の繰り返しで記憶されて
    いれば、データ参照関係があると判定することを特徴と
    する請求項4記載の並列可能性検出装置。
  6. 【請求項6】 前記データ参照関係判定手段は、第2の
    変数検出手段により検出された変数の情報がループ内で
    は定義されておらず、ループ以前に定義されていれば、
    データ参照関係がないと判定することを特徴とする請求
    項4記載の並列可能性検出装置。
  7. 【請求項7】 前記判定手段は、全てのループでデータ
    参照関係がないと判定されたときに各ループを並列実行
    可能と判定する。ことを特徴とする請求項5記載の並列
    可能性検出装置。
  8. 【請求項8】 前記判定手段は、ループの繰り返しの間
    でデータ参照関係がないループと、データ参照関係があ
    るループに分けて、データ参照関係がないループを並列
    実行可能と判定する。ことを特徴とする請求項5記載の
    並列可能性検出装置。
  9. 【請求項9】 前記変数記憶手段は、添字付き変数の添
    字を記憶することを特徴とする請求項1記載の並列可能
    性検出装置。
  10. 【請求項10】 前記シミュレーション手段は、さら
    に、 プログラムに演算式が含まれている場合に、その演算を
    シミュレーションする演算シミュレート手段を有するこ
    とを特徴とする請求項1記載の並列可能性検出装置。
  11. 【請求項11】 上記変数は添字つきの変数を含み演算
    シミュレート手段は、添字が演算式で表わされている場
    合に、その演算式で表わされている演算をシミュレート
    する。ことを特徴とする請求項10記載の並列可能性検
    出装置。
  12. 【請求項12】 前記シミュレーション手段は、 プログラムから条件文を検出する条件文検出手段と、 検出された条件文中の条件式を判定する条件式判定手段
    と、 判定結果に従って分岐先の文を次ぎにシミュレーション
    するように制御する分岐制御手段とを有することを特徴
    とする請求項1記載の並列可能性検出装置。
  13. 【請求項13】 前記シミュレーション手段は、さら
    に、プログラムに演算式が含まれている場合に、その演
    算をシミュレーションし、条件文の中の条件式が演算式
    で表わされている場合に、その演算をシミュレーション
    する演算シミュレート手段を有することを特徴とする請
    求項12記載の並列可能性検出装置。
  14. 【請求項14】 前記シミュレーション手段は、 プログラムからサブルーチンコール文を検出するサブル
    ーチンコール文検出手段と、 検出されたサブルーチン文に従って、サブルーチンをシ
    ミュレーションするように制御するサブルーチン制御手
    段と、 サブルーチンのプログラム文を実行する際に、引数の受
    渡しを行う引数受渡し手段とを有することを特徴とする
    請求項1記載の並列可能性検出装置。
  15. 【請求項15】 前記シミュレーション手段は、 プログラムに含まれるループを検出するループ検出手段
    と、 検出されたループ処理をシミュレーションするように制
    御する制御手段とを有することを特徴とする請求項1記
    載の並列可能性検出装置。
  16. 【請求項16】 前記制御手段は、ループ検出手段よっ
    て複数のループが検出されたときに、ループごとにシミ
    ュレーションを実行させる制御をし、 前記判定手段は、ループごとに、並列実行可能性を判定
    することを特徴とする請求項15記載の並列可能性検出
    装置。
  17. 【請求項17】 複数のプログラム文からなり、繰り返
    し処理を実行するループを含むプログラムの並列実行可
    能性を検出する並列可能性検出装置であって、 次にシミュレーションすべき文を指定してプログラムの
    1文ずつを読み出す読出し手段と、 読みだしたプログラムを1文ずつシミュレーションする
    シミュレーション手段と、 読みだしたプログラム文が代入文である場合に、その左
    辺の変数名を検出する左辺の変数検出手段と、 読みだしたプログラム文が代入文である場合に、その右
    辺にある変数の変数名を検出する右辺の変数検出手段
    と、 左辺に変数が検出されたときに、それが検出された代入
    文が実行されるループが何番目のループ出あるかを検出
    するループ回数検出手段と、 少なくともループの番号と変数を記憶する領域を有する
    記憶手段と、 記憶手段に、ループ回数券出手段は検出したループ番号
    と、左辺の変数検出手段が検出した変数名を対応ずけて
    登録する登録手段と、 右辺の変数検出手段が変数名を検出する度に、その辺数
    名が記憶手段の変数領域に登録されているかどうかを検
    出するデータ参照関係検出手段と、データ参照関係の検
    出結果に基づき、参照関係のあるループを認定し、並列
    化できるループを判定する並列可能性判定手段とを備え
    たことを特徴とするの並列可能性検出装置。
  18. 【請求項18】 複数のプログラム文からなり、繰り返
    し処理を実行するループを含むプログラムの並列実行可
    能性を検出する並列可能性検出方法であって、 ループの繰り返しごとにプログラムの実行をシミュレー
    ションするシミュレーションステップと、 シミュレーションに基づいて、1つのプログラム文にお
    いて値が定義された変数を示す情報を、その変数が定義
    されたプログラム文の位置を示す情報と対応させて記憶
    する変数記憶ステップと、 変数記憶ステップの記憶内容に基づいて、値が参照され
    る変数について、その値が定義された位置に応じて並列
    化可能か否かを判定する判定ステップとを有することを
    特徴とする並列可能性検出方法。
  19. 【請求項19】 前記シミュレーションステップは、 シミュレートに基づいて、プログラム文が代入文である
    場合に、その一方の辺にある変数を検出する シミュレートに基づいて、上記代入文が何れのループに
    属するかを検出する第2のサブステップと、 第1のサブステップにより検出された変数を示す情報
    を、ループ回数検出ステップで何回目のループであるか
    を示す情報と対応させて記憶する変数記憶部に登録する
    第3のサブステップとを有することを特徴とする請求項
    18記載の並列可能性検出方法。
  20. 【請求項20】 前記判定ステップは、 シミュレートに基づいて、他方の辺にある変数を検出す
    る第1のサブステップと、 第1のサブステップにより検出された変数の情報がルー
    プの同じ繰り返し内で変数定義記憶ステップに記憶され
    ていればデータ参照関係がないと判定する第2のサブス
    テップとを有することを特徴とする請求項19記載の並
    列可能性検出方法。
  21. 【請求項21】 前記判定ステップは、全てのループで
    データ参照関係がないと検出された場合に、各ループを
    並列実行可能と判定することを特徴とする請求項20記
    載の並列可能性検出方法。
  22. 【請求項22】 プログラムの並列実行可能性を検出
    し、並列実行するプログラムを生成するプログラム変換
    装置であって、 請求項1記載の並列可能性検出装置と、 判定手段の判定結果が並列化可能であれば、並列実行可
    能なプログラムを生成するプログラム生成手段とを備え
    たことを特徴とするプログラム変換装置。
  23. 【請求項23】 前記シミュレーション手段は、 請求項2記載の第1の変数検出手段と、 請求項2記載のループ回数検出手段と、 請求項2記載の登録手段とを有することを特徴とする請
    求項22記載のプログラム変換装置。
  24. 【請求項24】 前記登録手段は、変数を示す情報とし
    て変数名を登録することを特徴とする請求項22記載の
    プログラム変換装置。
  25. 【請求項25】 前記判定手段は、 請求項4記載の第2の変数検出手段と、 請求項4記載のデータ参照関係判定手段とを有すること
    を特徴とする請求項23記載のプログラム変換装置。
  26. 【請求項26】 前記データ参照関係判定手段は、第2
    の変数検出手段により検出された変数の情報が同じ繰り
    返し内で記憶されず、かつ、以前の繰り返しで記憶され
    ていれば、データ参照関係があると判定することを特徴
    とする請求項25記載のプログラム変換装置。
  27. 【請求項27】 前記データ参照関係判定手段は、第2
    の変数検出手段により検出された変数の情報がループ内
    では定義されておらず、ループ以前に定義されていれ
    ば、データ参照関係がないと判定することを特徴とする
    請求項25記載のプログラム変換装置。
  28. 【請求項28】 前記判定手段は、全てのループでデー
    タ参照関係がないと判定されたときに各ループを並列実
    行可能と判定する。ことを特徴とする請求項26記載の
    プログラム変換装置。
  29. 【請求項29】 前記判定手段は、ループの繰り返しの
    間でデータ参照関係がないループと、データ参照関係が
    あるループに分けて、データ参照関係がないループを並
    列実行可能と判定する。ことを特徴とする請求項26記
    載のプログラム変換装置。
  30. 【請求項30】 前記変数記憶手段は、添字付き変数の
    添字を記憶することを特徴とする請求項22記載のプロ
    グラム変換装置。
  31. 【請求項31】 前記シミュレーション手段は、さら
    に、 請求項10記載の演算シミュレ−ト手段を有することを
    特徴とする請求項22記載のプログラム変換装置。
  32. 【請求項32】 上記変数は添字つきの変数を含み演算
    シミュレート手段は、添字が演算式で表わされている場
    合に、その演算式で表わされている演算をシミュレート
    する。ことを特徴とする請求項31記載のプログラム変
    換装置。
  33. 【請求項33】 前記シミュレーション手段は、 請求項12記載の条件文検出手段と、 請求項12記載の条件式判定手段と、 請求項12記載の分岐制御手段とを有することを特徴と
    する請求項22記載のプログラム変換装置。
  34. 【請求項34】 前記シミュレーション手段は、さら
    に、 請求項13記載の演算シミュレート手段を有することを
    特徴とする請求項33記載のプログラム変換装置。
  35. 【請求項35】 前記シミュレーション手段は、 請求項14記載のサブルーチンコール文検出手段と、 請求項14記載のサブルーチン制御手段と、 請求項14記載の引数受渡し手段とを有することを特徴
    とする請求項22記載のプログラム変換装置。
  36. 【請求項36】 前記シミュレーション手段は、 請求項15記載のループ検出手段と、 請求項15記載の制御手段とを有することを特徴とする
    請求項22記載のプログラム変換装置。
  37. 【請求項37】 前記制御手段は、ループ検出手段よっ
    て複数のループが検出されたときに、ループごとにシミ
    ュレーションを実行させる制御をし、 前記判定手段は、ループごとに、並列実行可能性を判定
    することを特徴とする請求項36記載のプログラム変換
    装置。
  38. 【請求項38】 プログラムの並列実行可能性を検出
    し、並列実行するプログラムを生成するプログラム変換
    装置であって、 請求項17記載の並列可能性検出装置と、 判定手段の判定結果が並列化可能であれば、並列実行可
    能なプログラムを生成するプログラム生成手段とを備え
    たことを特徴とするプログラム変換装置。
JP4300165A 1991-11-11 1992-11-10 並列可能性判定装置、及び並列可能性判定方法、並びにそれを用いたプログラム変換装置 Pending JPH05250341A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP29409091 1991-11-11
JP3-294090 1991-11-11

Publications (1)

Publication Number Publication Date
JPH05250341A true JPH05250341A (ja) 1993-09-28

Family

ID=17803160

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4300165A Pending JPH05250341A (ja) 1991-11-11 1992-11-10 並列可能性判定装置、及び並列可能性判定方法、並びにそれを用いたプログラム変換装置

Country Status (2)

Country Link
US (2) US5450554A (ja)
JP (1) JPH05250341A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998019249A1 (fr) * 1996-10-30 1998-05-07 Hitachi, Ltd. Procede de distribution de donnees et de determination d'agencement pour ordinateurs en parallele et appareil de realisation de ce procede

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9305263D0 (en) * 1993-03-15 1993-05-05 Univ Westminster Parrallel computation
EP0715264B1 (en) * 1994-03-28 2004-05-12 Sony Corporation Method and apparatus of compiling parallel image processing programs
US6272676B1 (en) * 1998-01-13 2001-08-07 Intel Corporation Method and apparatus for finding loop— lever parallelism in a pointer based application
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
JP4425377B2 (ja) * 1999-07-29 2010-03-03 株式会社ターボデータラボラトリー データ処理装置、および、データ処理方法
US6438747B1 (en) * 1999-08-20 2002-08-20 Hewlett-Packard Company Programmatic iteration scheduling for parallel processors
US6374403B1 (en) * 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes
US6507947B1 (en) * 1999-08-20 2003-01-14 Hewlett-Packard Company Programmatic synthesis of processor element arrays
JP4099948B2 (ja) * 2001-01-18 2008-06-11 株式会社日立製作所 構造化文書をプログラム言語の構造体データへマッピングするシステム及び方法及びプログラム
US20030149962A1 (en) * 2001-11-21 2003-08-07 Willis John Christopher Simulation of designs using programmable processors and electronically re-configurable logic arrays
US7328195B2 (en) 2001-11-21 2008-02-05 Ftl Systems, Inc. Semi-automatic generation of behavior models continuous value using iterative probing of a device or existing component model
JP4042604B2 (ja) * 2003-03-31 2008-02-06 日本電気株式会社 プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
EP1569104A3 (en) * 2004-01-09 2006-05-03 Interuniversitair Microelektronica Centrum Vzw An automated method for performing parallelization of sequential code and a computerized system adapted therefore
JP3901182B2 (ja) * 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
JP4866241B2 (ja) * 2004-08-23 2012-02-01 株式会社ガイア・システム・ソリューション ソースプログラムの分析装置
JP5109764B2 (ja) * 2008-03-31 2012-12-26 日本電気株式会社 記述処理装置、記述処理方法およびプログラム
WO2010125960A1 (ja) * 2009-04-28 2010-11-04 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
WO2012004972A1 (ja) * 2010-07-05 2012-01-12 パナソニック株式会社 プログラム生成装置、プログラム生産方法及びプログラム
US10055207B2 (en) * 2013-03-13 2018-08-21 Vmware, Inc. Persistent variables in programming languages
IN2014CH00532A (ja) 2014-02-05 2015-08-07 Infosys Ltd

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0814817B2 (ja) * 1986-10-09 1996-02-14 株式会社日立製作所 自動ベクトル化方法
JP3053092B2 (ja) * 1987-06-05 2000-06-19 株式会社日立製作所 並列化コンパイル方法
JPH01108638A (ja) * 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JPH01280862A (ja) * 1988-05-07 1989-11-13 Nec Corp ループ並列化方式
JP2765861B2 (ja) * 1988-08-29 1998-06-18 株式会社日立製作所 並列化コンパイル方法
JPH03218528A (ja) * 1990-01-24 1991-09-26 Nec Corp ループ並例化方式
JPH04211830A (ja) * 1990-02-05 1992-08-03 Matsushita Electric Ind Co Ltd 並列化コンパイル方式
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置
US5253255A (en) * 1990-11-02 1993-10-12 Intel Corporation Scan mechanism for monitoring the state of internal signals of a VLSI microprocessor chip

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998019249A1 (fr) * 1996-10-30 1998-05-07 Hitachi, Ltd. Procede de distribution de donnees et de determination d'agencement pour ordinateurs en parallele et appareil de realisation de ce procede

Also Published As

Publication number Publication date
US5450554A (en) 1995-09-12
US5579494A (en) 1996-11-26

Similar Documents

Publication Publication Date Title
JPH05250341A (ja) 並列可能性判定装置、及び並列可能性判定方法、並びにそれを用いたプログラム変換装置
Abadi et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems
US6233733B1 (en) Method for generating a Java bytecode data flow graph
US5361357A (en) Method and apparatus for optimizing computer file compilation
US8656347B2 (en) Generation of parallelized program based on program dependence graph
JP5821651B2 (ja) 記号的実行を用いてc++プログラムを検証するための方法及びシステム
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP3612294B2 (ja) デバッグ方法およびデバッグ装置
JP2921190B2 (ja) 並列実行方式
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US6553362B2 (en) Case-reduced verification condition generation system and method using weakest precondition operator expressed using strongest postcondition operators
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
KR20120083800A (ko) 트레이스 데이터 압축 장치 및 방법
JPH07110800A (ja) 最適化並列コンパイル装置及び最適化並列コンパイル方法
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
WO2008041442A1 (fr) Procédé de création de programme par parallélisation, dispositif de création de programme par parallélisation, et programme de création de programme par parallélisation
JPH06309193A (ja) 機械語プログラムの動作検証方法および装置
Dhamdhere et al. Characterization of program loops in code optimization
JP2621555B2 (ja) ベクトル化処理方式
JP3734658B2 (ja) コンパイラ装置およびコンパイラプログラムを記録したコンピュータ読取可能な記録媒体
JPH09237191A (ja) プログラミング支援装置、プログラミング支援方法、及びプログラミング支援プログラムを記録した媒体
JP4371000B2 (ja) Idlコンパイル装置、idlコンパイル方法及びidlコンパイラ
JP3697652B2 (ja) 分散メモリ型マルチプロセッサ向けプログラム作成システム
JPH09319591A (ja) ループ外への条件付き飛び出しがあるループの並列化方式
JPH11272650A (ja) 動的ベクトル化装置および記録媒体