JPH03220669A - 多重ループベクトル化コンパイル方式 - Google Patents
多重ループベクトル化コンパイル方式Info
- Publication number
- JPH03220669A JPH03220669A JP2016700A JP1670090A JPH03220669A JP H03220669 A JPH03220669 A JP H03220669A JP 2016700 A JP2016700 A JP 2016700A JP 1670090 A JP1670090 A JP 1670090A JP H03220669 A JPH03220669 A JP H03220669A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- text
- intermediate text
- source program
- vectorization
- 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
Landscapes
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明は電子計算機システムのコンパイラにおける多重
ループベクトル化コンパイル方式に関するものである。
ループベクトル化コンパイル方式に関するものである。
記憶域上に規則的に並んでいるデータに対して一度に演
算を行うベクトル命令をもつベクトル処理プロセッザに
おいては、−船釣に目的プログラムのうちのベクトル命
令によって実行される部分の割合を大きくすればするほ
ど、プログラムの実行時間を短縮することができる。こ
れは、通常の命令(スカラ命令)を何回も繰り返さなけ
れば行えない演算を1個のベクトル命令で実行すること
ができるからである。従って、このようなヘクI・ル処
理プロセソザに対するコンパイラでは、与えられた原始
プログラムを可能な限りベクトル命令による並列実行可
能な形で目的プログラムに変換することが望まれる。
算を行うベクトル命令をもつベクトル処理プロセッザに
おいては、−船釣に目的プログラムのうちのベクトル命
令によって実行される部分の割合を大きくすればするほ
ど、プログラムの実行時間を短縮することができる。こ
れは、通常の命令(スカラ命令)を何回も繰り返さなけ
れば行えない演算を1個のベクトル命令で実行すること
ができるからである。従って、このようなヘクI・ル処
理プロセソザに対するコンパイラでは、与えられた原始
プログラムを可能な限りベクトル命令による並列実行可
能な形で目的プログラムに変換することが望まれる。
ところで、ベクトル命令をもつベクI・ル処理プロセッ
サに対する従来のコンパイラは、一般に、高級言語で記
述された原始プログラムを読み込み構文解析を行って第
1中間テキストを生成する構文解析部と、第1中間テキ
ストから原始プログラム中のループ構造を検出してベク
トル化可能部分の認識を行いムク1〜ル処理用のテキス
トを含む第2中間テキストを生威するベクトル化処理部
と、第2中間テキストから目的プログラムを生成して出
力するコード生成部とから、その主要部が構成されてい
る。
サに対する従来のコンパイラは、一般に、高級言語で記
述された原始プログラムを読み込み構文解析を行って第
1中間テキストを生成する構文解析部と、第1中間テキ
ストから原始プログラム中のループ構造を検出してベク
トル化可能部分の認識を行いムク1〜ル処理用のテキス
トを含む第2中間テキストを生威するベクトル化処理部
と、第2中間テキストから目的プログラムを生成して出
力するコード生成部とから、その主要部が構成されてい
る。
このような従来のコンパイラは、例えば第10図に示す
ようなFORTRAN言語によって記述されたDOルー
プを含む原始プログラムが与えられた場合、構文解析部
がこの原始プログラムを読み込んで第11図に示すよう
な構成の第1中間テキスト(ステップ31〜34)を生
威し、次いで、ベクトル化処理部が第1中間テキストを
変形して第12図に示すような構成の第2中間テキスト
(ステップS11.312)を生威し、コード生成部が
第2中間テキストを読み込んで実際のコードから構成さ
れる目的プログラムを生成し出ノ〕するようにしていた
。
ようなFORTRAN言語によって記述されたDOルー
プを含む原始プログラムが与えられた場合、構文解析部
がこの原始プログラムを読み込んで第11図に示すよう
な構成の第1中間テキスト(ステップ31〜34)を生
威し、次いで、ベクトル化処理部が第1中間テキストを
変形して第12図に示すような構成の第2中間テキスト
(ステップS11.312)を生威し、コード生成部が
第2中間テキストを読み込んで実際のコードから構成さ
れる目的プログラムを生成し出ノ〕するようにしていた
。
また、上記のような単一のループに限らず、多重ループ
であっても所定の条件が満たされれば一重化によるベク
トル化が可能であった。例えば、第13図に示すような
多重DOループ含む原始プログラムが与えられた場合、
第14図に示すように、配列A、 B、 C,Dと要
素数を同しにした1次元の配列AA、BB、CC,DD
を新たに宣言し、EQU I VALENCE文により
配列A。
であっても所定の条件が満たされれば一重化によるベク
トル化が可能であった。例えば、第13図に示すような
多重DOループ含む原始プログラムが与えられた場合、
第14図に示すように、配列A、 B、 C,Dと要
素数を同しにした1次元の配列AA、BB、CC,DD
を新たに宣言し、EQU I VALENCE文により
配列A。
B、C,Dと配列AA、BB、CC,DDとをそれぞれ
一致させることにより、多重DOループ単一のDOルー
プ置き換え、この単一のDOループ対して第10図〜第
12図と同様な手法でベクトル化を行うものである。
一致させることにより、多重DOループ単一のDOルー
プ置き換え、この単一のDOループ対して第10図〜第
12図と同様な手法でベクトル化を行うものである。
上述したように、従来のコンパイラでは所定の条件のも
と、単一のループに限らず、多重ループであってもベク
トル化が可能であったが、−重化によってベクトル化で
きるための条件が厳しく、それを満たさないような場合
はベクトル化による実行時間短縮の効果が得られないと
いう欠点があった。
と、単一のループに限らず、多重ループであってもベク
トル化が可能であったが、−重化によってベクトル化で
きるための条件が厳しく、それを満たさないような場合
はベクトル化による実行時間短縮の効果が得られないと
いう欠点があった。
すなわち、多重ループについて一重化によるベクトル化
が行える条件としては、 ■ループ中に並列実行に矛盾するデータ依存関係がない
こと ■ループ中の配列要素の定義引用が記憶域上で等間隔で
あること ■ループ中の配列要素の定義引用が記憶域上で一方向で
あること である。なお、■は当然のこととして、■、■は1次元
化した配列(第14図の例でばAA、 BBCC,DD
)の要素を順次増減させて行くことから要求される条件
である。
が行える条件としては、 ■ループ中に並列実行に矛盾するデータ依存関係がない
こと ■ループ中の配列要素の定義引用が記憶域上で等間隔で
あること ■ループ中の配列要素の定義引用が記憶域上で一方向で
あること である。なお、■は当然のこととして、■、■は1次元
化した配列(第14図の例でばAA、 BBCC,DD
)の要素を順次増減させて行くことから要求される条件
である。
しかして、第4図に示すような多重Doループを含む原
始プログラムが与えられた場合、D○変数にの増分が「
2」であると共に、内側のDOループD○変数の終値が
その配列に許される最大値でないので、上記の■の条件
を満たさないため、この原始プログラムは一重化による
ベクトル化が行えず、最も内側のDoループについてだ
け、前述した第10図〜第■2図と同様の手法でベクト
ル化が行えるに過ぎず、よって、生成された目的プログ
ラムを実行するベクトル処理プロセッサでは外側のルー
プ制御および配列の添字計算についてはスカラ命令で順
次実行することを余儀なくされていた。
始プログラムが与えられた場合、D○変数にの増分が「
2」であると共に、内側のDOループD○変数の終値が
その配列に許される最大値でないので、上記の■の条件
を満たさないため、この原始プログラムは一重化による
ベクトル化が行えず、最も内側のDoループについてだ
け、前述した第10図〜第■2図と同様の手法でベクト
ル化が行えるに過ぎず、よって、生成された目的プログ
ラムを実行するベクトル処理プロセッサでは外側のルー
プ制御および配列の添字計算についてはスカラ命令で順
次実行することを余儀なくされていた。
本発明は上記の点に鑑み提案されたものであり、その目
的とするとごろは、」二記の■、■の条件が満たされれ
ば、■の条件が満たされていない場合であっても一重化
によるベクトル化が行え、より一層の実行時間短縮を達
成することのできる多重ループベクトル化コンパイル方
式を提供することにある。
的とするとごろは、」二記の■、■の条件が満たされれ
ば、■の条件が満たされていない場合であっても一重化
によるベクトル化が行え、より一層の実行時間短縮を達
成することのできる多重ループベクトル化コンパイル方
式を提供することにある。
本発明は上記の目的を達成するため、高級言語で記述さ
れた原始プログラムを読み込み構文解析を行って第1中
間テキストを生成する構文解析部と、第1中間テキスト
から原始プログラム中のループ構造を検出してベクトル
化可能部分の認識を行いベク(・ル処理用のテキストを
含む第2中間テキストを生成するベクトル化処理部と、
第2中間テキストから目的プログラムを生成して出力す
るコード生成部とを有し、ベクトル処理プロセッサに対
して、与えられた原始プログラムから目的プログラムを
生成して出力するコンパイル方式において、 前記ベクトル化処理部に、 第1中間テキストから原始プログラムのループ中の制御
の流れを解析する構造解析手段と、ループ中に並列実行
に矛盾するデータ依存関係があるか否かを判定するデー
タ依存関係判定手段と、 並列実行に矛盾しないと判定された部分につき通常のも
しくはマスク使用による多重ループの−・重化が可能か
否かを解析して判定する多重ループ−重化解析手段と、 一重化が可能と判定された部分および並列実行に矛盾し
ないと判定された他の部分を一重化およびもしくはベク
トル化して第2中間テキストを生成するベクトルテキス
ト生成手段とを設けるようにしている。
れた原始プログラムを読み込み構文解析を行って第1中
間テキストを生成する構文解析部と、第1中間テキスト
から原始プログラム中のループ構造を検出してベクトル
化可能部分の認識を行いベク(・ル処理用のテキストを
含む第2中間テキストを生成するベクトル化処理部と、
第2中間テキストから目的プログラムを生成して出力す
るコード生成部とを有し、ベクトル処理プロセッサに対
して、与えられた原始プログラムから目的プログラムを
生成して出力するコンパイル方式において、 前記ベクトル化処理部に、 第1中間テキストから原始プログラムのループ中の制御
の流れを解析する構造解析手段と、ループ中に並列実行
に矛盾するデータ依存関係があるか否かを判定するデー
タ依存関係判定手段と、 並列実行に矛盾しないと判定された部分につき通常のも
しくはマスク使用による多重ループの−・重化が可能か
否かを解析して判定する多重ループ−重化解析手段と、 一重化が可能と判定された部分および並列実行に矛盾し
ないと判定された他の部分を一重化およびもしくはベク
トル化して第2中間テキストを生成するベクトルテキス
ト生成手段とを設けるようにしている。
本発明の多重ループベクトル化コンパイル方式にあって
は、構文解析部の生成した第1中間テキストに対し、ベ
クトル化処理部の構造解析手段が原始プログラムのルー
プ中の制御の流れを解析し、データ依存関係判定手段が
ループ中に並列実行に矛盾するデータ依存関係があるか
否かを判定し、並列実行に矛盾しないと判定された部分
につき多重ループ−重化解析手段が通常のもしくはマス
ク使用による多重ループの一重化が可能か否かを解析し
て判定し、−重化が可能と判定された部分および並列実
行に矛盾しないと判定された他の部分をベクトルテキス
ト生成手段が一重化およびもしくはベクトル化して第2
中間テキストを生成し、次いで、この第2中間テキスト
からコード生成部が目的プログラムを生成して出力する
。
は、構文解析部の生成した第1中間テキストに対し、ベ
クトル化処理部の構造解析手段が原始プログラムのルー
プ中の制御の流れを解析し、データ依存関係判定手段が
ループ中に並列実行に矛盾するデータ依存関係があるか
否かを判定し、並列実行に矛盾しないと判定された部分
につき多重ループ−重化解析手段が通常のもしくはマス
ク使用による多重ループの一重化が可能か否かを解析し
て判定し、−重化が可能と判定された部分および並列実
行に矛盾しないと判定された他の部分をベクトルテキス
ト生成手段が一重化およびもしくはベクトル化して第2
中間テキストを生成し、次いで、この第2中間テキスト
からコード生成部が目的プログラムを生成して出力する
。
以下、本発明の実施例につき図面を参照して説明する。
第1図は本発明の多重ループベクトル化コンパイル方式
を適用したコンパイラの一実施例を示す構成図である。
を適用したコンパイラの一実施例を示す構成図である。
第1図において、コンパイラ2は、基本的な構成として
、高級言語で記述された原始プログラム1を読み込み構
文解析を行って第1中間テキスト24を生成する構文解
析部21と、第1中間テキスト24から原始プログラム
1中のループ構造を検出してベクトル化可能部分の認識
を行いベクトル処理用のテキストを含む第2中間テキス
ト25を生成するベクトル化処理部22と、第2中間テ
キスト25から目的プログラム3を生成して出力するコ
ード生成部23とを含んでいる。
、高級言語で記述された原始プログラム1を読み込み構
文解析を行って第1中間テキスト24を生成する構文解
析部21と、第1中間テキスト24から原始プログラム
1中のループ構造を検出してベクトル化可能部分の認識
を行いベクトル処理用のテキストを含む第2中間テキス
ト25を生成するベクトル化処理部22と、第2中間テ
キスト25から目的プログラム3を生成して出力するコ
ード生成部23とを含んでいる。
また、本発明の特徴部分として、ベクトル化処理部22
には、第1中間テキスト24から原始プログラム1のル
ープ中の制御の流れを解析する構造解析手段221と、
ループ中に並列実行に矛盾するデータ依存関係があるか
否かを判定するデータ依存関係判定手段222と、デー
タ依存関係判定手段222により並列実行に矛盾しない
と判定された部分につき通常のもしくはマスク使用によ
る多重ループの一重化が可能か否かを解析して判定する
多重ループ−重化解析手段223と、多重ループ−重化
解析手段223により一重化が可能と判定された部分お
よびデータ依存関係判定手段222により並列実行に矛
盾しないと判定された他の部分を一重化およびもしくは
ベクトル化して第2中間テキストを生成するベクトルテ
キスト生成手段224とが設けられている。
には、第1中間テキスト24から原始プログラム1のル
ープ中の制御の流れを解析する構造解析手段221と、
ループ中に並列実行に矛盾するデータ依存関係があるか
否かを判定するデータ依存関係判定手段222と、デー
タ依存関係判定手段222により並列実行に矛盾しない
と判定された部分につき通常のもしくはマスク使用によ
る多重ループの一重化が可能か否かを解析して判定する
多重ループ−重化解析手段223と、多重ループ−重化
解析手段223により一重化が可能と判定された部分お
よびデータ依存関係判定手段222により並列実行に矛
盾しないと判定された他の部分を一重化およびもしくは
ベクトル化して第2中間テキストを生成するベクトルテ
キスト生成手段224とが設けられている。
第2図は構造解析手段221において多重ループの構造
解析の結果である解析情報を表現するのに用いる多重D
○ループ情報テーブル4の論理的構成を示したものであ
り、次の多重Do小ループ報テーブルへのポインタ41
と、D○ループネストチェーン42と、D○ループ−重
化テーブルへのポインタ43と、配列テーブルへのポイ
ンタ44と、ベクトルテキストへのポインタ45と、D
O変数のシンボルテーブルへのポインタ4Gと、D○ル
ープ初期値のトライアト47と、Do小ループ値の1−
ライアト48と、DOループ分値のトライアト49とか
ら構成されている。
解析の結果である解析情報を表現するのに用いる多重D
○ループ情報テーブル4の論理的構成を示したものであ
り、次の多重Do小ループ報テーブルへのポインタ41
と、D○ループネストチェーン42と、D○ループ−重
化テーブルへのポインタ43と、配列テーブルへのポイ
ンタ44と、ベクトルテキストへのポインタ45と、D
O変数のシンボルテーブルへのポインタ4Gと、D○ル
ープ初期値のトライアト47と、Do小ループ値の1−
ライアト48と、DOループ分値のトライアト49とか
ら構成されている。
第3図は多重ループ−重化解析手段223において一重
化が可能な多重ループを解析した結果の解析情報を表現
するのに用いるDoループ一重重化上 1−ブル5の論理的構成を示したものであり、最内側の
多重D○ループ情報テーブルへのポインタ51と、マス
ク用配列テーブルへのポインタ52と、−重化後のD○
ループ初期値のトライアト53と、−重化後のDOルー
プ終値のトライアト54と、−重化後のDOループ分値
のトライアト55と、−重化後のDo小ループ繰り返し
数56とから構成されている。
化が可能な多重ループを解析した結果の解析情報を表現
するのに用いるDoループ一重重化上 1−ブル5の論理的構成を示したものであり、最内側の
多重D○ループ情報テーブルへのポインタ51と、マス
ク用配列テーブルへのポインタ52と、−重化後のD○
ループ初期値のトライアト53と、−重化後のDOルー
プ終値のトライアト54と、−重化後のDOループ分値
のトライアト55と、−重化後のDo小ループ繰り返し
数56とから構成されている。
以下、従来では多重ループの一重化によるベクトル化が
行えなかった第4図に示す原始プログラムが与えられた
場合を例にとって動作を説明する。
行えなかった第4図に示す原始プログラムが与えられた
場合を例にとって動作を説明する。
具体的な動作に先立って、本発明による多重ループの一
重化の手法を概念的に説明する。
重化の手法を概念的に説明する。
すなわち、本発明では、第4図の原始プログラムを第5
図に示すような2つの多重DOループ含む形にし、最初
の多重Do小ループ元の原始プログラムにおける多重D
Oループ同しDo変数を用い、その最内側ではマスク用
配列Wに値「1」を代入するだけの命令を置き、次の多
重DOループはD○変数の増分を全て「1」とすると共
に、2 内側のD○変数のP、(Ii!をその配列で許される最
大値とし、そのループの最内側でマスク用配列Wの要素
が例えば「1」である場合にのみ元の原始プログラム中
におけると同し定義引用を行わせる。
図に示すような2つの多重DOループ含む形にし、最初
の多重Do小ループ元の原始プログラムにおける多重D
Oループ同しDo変数を用い、その最内側ではマスク用
配列Wに値「1」を代入するだけの命令を置き、次の多
重DOループはD○変数の増分を全て「1」とすると共
に、2 内側のD○変数のP、(Ii!をその配列で許される最
大値とし、そのループの最内側でマスク用配列Wの要素
が例えば「1」である場合にのみ元の原始プログラム中
におけると同し定義引用を行わせる。
つまり、第4図の原始プログラムにおける多重DOルー
プが一重化できなかったのは、Do変@Kが増分「2」
で変化するため、「ループ中の配列要素の定義引用が記
憶域上で等間隔でなければならない」という−重化の条
件に合致しないためであったので、D○変数にの増分を
強制的に「1」にすると共に、内側のDo小ループDo
変数の終値をその配列で許される最大値としてしまうの
である。ただし、そのままでは、D○変変数部「2」「
4」、・・・等およびDo変数I、JがIT、JJより
も大きいもの等の、プログラム作成者の意図していない
配列要素についても定義引用が行われてしまうこととな
るため、これを防止するために元の原始プログラムと同
じD○変数の多重DOループ残し、その多重ループの中
で演算を実際に行うべきことを示す情報をマスク用配列
Wに書き込み、続く多重DOループおいてマスク用配列
Wの要素を参照し、その値が「1」である場合にのみ定
義引用を行うようにしている。
プが一重化できなかったのは、Do変@Kが増分「2」
で変化するため、「ループ中の配列要素の定義引用が記
憶域上で等間隔でなければならない」という−重化の条
件に合致しないためであったので、D○変数にの増分を
強制的に「1」にすると共に、内側のDo小ループDo
変数の終値をその配列で許される最大値としてしまうの
である。ただし、そのままでは、D○変変数部「2」「
4」、・・・等およびDo変数I、JがIT、JJより
も大きいもの等の、プログラム作成者の意図していない
配列要素についても定義引用が行われてしまうこととな
るため、これを防止するために元の原始プログラムと同
じD○変数の多重DOループ残し、その多重ループの中
で演算を実際に行うべきことを示す情報をマスク用配列
Wに書き込み、続く多重DOループおいてマスク用配列
Wの要素を参照し、その値が「1」である場合にのみ定
義引用を行うようにしている。
そして、第5図のように変形されたもののうち、2番目
の多重DOループ、第13図および第14図で説明した
のと同様の手法で一重化する。この状態を第6図に示す
。そして、この−重化したD○ループを第10図〜第1
2図で説明したのと同様の手法でベクトル化する。また
、1番目の多重DOループついても、最内側のDo小ル
ープついて第10図〜第12図で説明したのと同様の手
法でベクトル化できる。なお、実際の動作では第4図の
原始プログラムの解析結果に基づいて直接に該当する多
重D○ループ部分の一重化およびベクトル化が行われる
ため、第5図および第6図のような形に変換された状態
が存在するわけではない。
の多重DOループ、第13図および第14図で説明した
のと同様の手法で一重化する。この状態を第6図に示す
。そして、この−重化したD○ループを第10図〜第1
2図で説明したのと同様の手法でベクトル化する。また
、1番目の多重DOループついても、最内側のDo小ル
ープついて第10図〜第12図で説明したのと同様の手
法でベクトル化できる。なお、実際の動作では第4図の
原始プログラムの解析結果に基づいて直接に該当する多
重D○ループ部分の一重化およびベクトル化が行われる
ため、第5図および第6図のような形に変換された状態
が存在するわけではない。
次に、上記の例につき、第1図の実施例の各手段による
動作を説明する。
動作を説明する。
先ず、原始プログラム1が与えられてコンパイラ2が起
動されると4、構文解析部21は原始プログラム1を読
み込み、構文解析を行って第(中間テキスト24を生成
する。第4図の原始プログラム1に刻しては、第7図に
示すような構成の第1中間テキスト24 (ステップ2
401〜2412)が生成される。
動されると4、構文解析部21は原始プログラム1を読
み込み、構文解析を行って第(中間テキスト24を生成
する。第4図の原始プログラム1に刻しては、第7図に
示すような構成の第1中間テキスト24 (ステップ2
401〜2412)が生成される。
次いで、ベクトル化処理部22の構造解析手段221は
第1中間テキスト24を読み込み、ループを認識してそ
の制御の流れを解析する。具体的には次のような処理を
行う。
第1中間テキスト24を読み込み、ループを認識してそ
の制御の流れを解析する。具体的には次のような処理を
行う。
■第1中間テキスト24を分岐を単位としたブロックに
分割する。ここで、分岐はループの出口もしくは人口に
相当する。第7図の第1中間テキスト24の場合は、ス
テップ2402.2404.2406で分割される。
分割する。ここで、分岐はループの出口もしくは人口に
相当する。第7図の第1中間テキスト24の場合は、ス
テップ2402.2404.2406で分割される。
■ループ部分を文単位のフ1コックに分割する。
■プログラム全体の制御の流れを解析して各ブロックの
関係を求める。
関係を求める。
■各々のブロックで定義引用されている配列および変数
に対して、ブロックへの人出情報を■5 収集する。
に対して、ブロックへの人出情報を■5 収集する。
なお、上記の解析結果は第2図に示した多重り。
ループ情報テーブル4を用いて表現される。例えば、第
7図の第1中間テキスト24の各DOループ情報は第8
図に示すように、多重DOループ報テーブルへのポイン
タ6から始まる多重DOループ報テーブル4.a、4b
、4.cのチェーンおよびその内容として表現される。
7図の第1中間テキスト24の各DOループ情報は第8
図に示すように、多重DOループ報テーブルへのポイン
タ6から始まる多重DOループ報テーブル4.a、4b
、4.cのチェーンおよびその内容として表現される。
ただし、この時点では第8図中のDOループ重化テーブ
ル5aは付加されていない。
ル5aは付加されていない。
次いで、第1図において、データ依存関係判定手段22
2は解析情報を利用し、ループ中に並列実行に矛盾する
データ依存関係があるか否かを判定する。第4図の原始
プログラムIについて作威された第8図の解析情報から
は、並列実行に矛盾しないものと判定される。
2は解析情報を利用し、ループ中に並列実行に矛盾する
データ依存関係があるか否かを判定する。第4図の原始
プログラムIについて作威された第8図の解析情報から
は、並列実行に矛盾しないものと判定される。
次いで、多重ループ−重化解析手段223はデータ依存
関係判定手段222によって並列実行に矛盾しないと判
定された部分につき多重ループの一重化が可能か否かを
解析して判定する。具体的6 には次の処理を行う。
関係判定手段222によって並列実行に矛盾しないと判
定された部分につき多重ループの一重化が可能か否かを
解析して判定する。具体的6 には次の処理を行う。
■D○ループ内で定義引用されている配列・変数に対し
て定義引用関係が全て矛盾していないものを候補として
取り出す。
て定義引用関係が全て矛盾していないものを候補として
取り出す。
■その多重Do小ループ対応する多重DOループ報テー
ブル4のD○変数情報47.48゜49より、配列・変
数の定義引用が多重D○ループを通して記憶域上で一つ
の方向性をもつか否かを調べる。第4図の原始プログラ
ム1について作威された第8図の解析情報からは、一つ
の方向性をもつものと判定される。
ブル4のD○変数情報47.48゜49より、配列・変
数の定義引用が多重D○ループを通して記憶域上で一つ
の方向性をもつか否かを調べる。第4図の原始プログラ
ム1について作威された第8図の解析情報からは、一つ
の方向性をもつものと判定される。
■一つの方向性をもつ場合には、多重D○ループを一重
化できると判定し、DOループ重化テーブル5を作成す
る。今の例では、第8図においてDo小ループ重化テー
ブル5aが作威され、チェーニングされる。
化できると判定し、DOループ重化テーブル5を作成す
る。今の例では、第8図においてDo小ループ重化テー
ブル5aが作威され、チェーニングされる。
■DOループー重化テーブル5aが作成された後、その
多重Do小ループ外側のDo小ループD○変数の値が変
化する時に、配列要素の定義引用の記憶域上の位置の増
減の大きさが一定であるか否かを調べる。すなわち、ル
ープ中の配列要素の定義引用が記憶域上で等間隔である
か否かを調べる。第8図の解析情報からは、最外側のD
OループDo変数の増分が「2」であるため、増減の大
きさは一定でないと判定される。
多重Do小ループ外側のDo小ループD○変数の値が変
化する時に、配列要素の定義引用の記憶域上の位置の増
減の大きさが一定であるか否かを調べる。すなわち、ル
ープ中の配列要素の定義引用が記憶域上で等間隔である
か否かを調べる。第8図の解析情報からは、最外側のD
OループDo変数の増分が「2」であるため、増減の大
きさは一定でないと判定される。
■増減の大きさが一定でないと判定された場合、マスク
用配列の領域を確保し、その情報をマスク用配列テーブ
ル(図示せず)として作威し、D○ループ一重化テーブ
ル5にチェ一二ソグする。第8図の解析情報では、DO
ループ重化テーブル5aにマスク用配列テーブルがチェ
一二ソグされる。
用配列の領域を確保し、その情報をマスク用配列テーブ
ル(図示せず)として作威し、D○ループ一重化テーブ
ル5にチェ一二ソグする。第8図の解析情報では、DO
ループ重化テーブル5aにマスク用配列テーブルがチェ
一二ソグされる。
■マスク用配列テーブルがチェーニングされた場合、−
重化後のD○変数の繰り返し数等の情報をDo小ループ
重化テーブル5に設定する。第8図の解析情報では、−
重化後のDOループ数の繰り返し数はr 1. OO*
50 *KKJとなる。すなわち、繰り返し数は内側
のD○変数のそれぞれの最大値と最り(イリリのD○変
数の終値とを掛は合わせたものとなる。
重化後のD○変数の繰り返し数等の情報をDo小ループ
重化テーブル5に設定する。第8図の解析情報では、−
重化後のDOループ数の繰り返し数はr 1. OO*
50 *KKJとなる。すなわち、繰り返し数は内側
のD○変数のそれぞれの最大値と最り(イリリのD○変
数の終値とを掛は合わせたものとなる。
次いで、第1図において、ベクトルテキスト生成手段2
24は多重ループ−重化解析手段223により一重化が
可能と判定された部分およびデータ依存関係判定手段2
22により並列実行に矛盾しないと判定された部分を解
析情報を用いて一重化およびもしくはベクトル化して第
2中間テキスト25を生成する。具体的には次のような
処理を行う。
24は多重ループ−重化解析手段223により一重化が
可能と判定された部分およびデータ依存関係判定手段2
22により並列実行に矛盾しないと判定された部分を解
析情報を用いて一重化およびもしくはベクトル化して第
2中間テキスト25を生成する。具体的には次のような
処理を行う。
■並列実行可能部分をベクトル処理するために必要とな
るベクトル長設定用のテキストを生成する。例えば、第
8図の解析情報からは、通常の並列実行可能部分はなく
、マスク用配列を使うことにより一重化可能な多重DO
ループ1組あることが判明するため、その多重DOルー
プ一重化に必要なベクトル長設定用のテキストとして、
第9図中のステップ2505およびステップ251oに
示すようなテキストを生成する。なお、ステップ250
5はマスク設定用の多重DOループ最内99 側のDOループベクトル化する際に必要となるものであ
り、そのベクトル長はDo変数■の終値であるrl l
となる。ステップ2510は一重化されたDOループベ
クトル化する際に必要となるものであり、そのベクトル
長は一重化後のDOループ繰り返し数であるrloO*
50*KKjとなる。
るベクトル長設定用のテキストを生成する。例えば、第
8図の解析情報からは、通常の並列実行可能部分はなく
、マスク用配列を使うことにより一重化可能な多重DO
ループ1組あることが判明するため、その多重DOルー
プ一重化に必要なベクトル長設定用のテキストとして、
第9図中のステップ2505およびステップ251oに
示すようなテキストを生成する。なお、ステップ250
5はマスク設定用の多重DOループ最内99 側のDOループベクトル化する際に必要となるものであ
り、そのベクトル長はDo変数■の終値であるrl l
となる。ステップ2510は一重化されたDOループベ
クトル化する際に必要となるものであり、そのベクトル
長は一重化後のDOループ繰り返し数であるrloO*
50*KKjとなる。
■通常の並列実行可能部分に対し、ベクトル処理用のテ
キストを生成する。第8図の解析情報からは通常の並列
実行可能部分はないことが判明するので、この処理は行
わない。
キストを生成する。第8図の解析情報からは通常の並列
実行可能部分はないことが判明するので、この処理は行
わない。
■−一重化可能多重DOループ対し、その処理用のテキ
ストを生成する。マスク用配列を使うことにより一重化
可能な多重DOループある場合、この処理は次のように
行う。
ストを生成する。マスク用配列を使うことにより一重化
可能な多重DOループある場合、この処理は次のように
行う。
(alマスク設定用の多重DOループ外側のスカラ命令
による部分のテキストを生成すると共に、マスク用配列
に所定値を代入するテキストを生成する。今の例におい
ては、外側のスカラ命令として、第9図のステップ25
010 〜2504,2507.2508に示すテキストを生成
すると共に、ベクトル化された最内側のD○変数の終値
を保証するためにステップ2509に示すテキストを生
成する。また、マスク用配列に所定値を代入するテキス
トとしてステップ2506に示すテキストを生成する。
による部分のテキストを生成すると共に、マスク用配列
に所定値を代入するテキストを生成する。今の例におい
ては、外側のスカラ命令として、第9図のステップ25
010 〜2504,2507.2508に示すテキストを生成
すると共に、ベクトル化された最内側のD○変数の終値
を保証するためにステップ2509に示すテキストを生
成する。また、マスク用配列に所定値を代入するテキス
トとしてステップ2506に示すテキストを生成する。
fblマスク用配列配列要素がいくつの時にマスクをオ
ンとするかというマスク情報を設定するためのテキスト
を生成する。今の例においては、第9図のステップ25
1■に示すテキストを生成する。
ンとするかというマスク情報を設定するためのテキスト
を生成する。今の例においては、第9図のステップ25
1■に示すテキストを生成する。
(Clマスクがオンの時に所定の定義引用を行うテキス
トを生成する。今の例においては、第9図のステップ2
512〜2514に示すテキストを生成する。
トを生成する。今の例においては、第9図のステップ2
512〜2514に示すテキストを生成する。
■次に、ムク1〜ルテキスト生成手段224は、通常の
並列実行可能部分をベクトル処理するために必要となる
後処理用のテキストを生成する。今の例の場合は該当す
るものがないのでこの処理は行わない。
並列実行可能部分をベクトル処理するために必要となる
後処理用のテキストを生成する。今の例の場合は該当す
るものがないのでこの処理は行わない。
次に、コード生成部23は上記のようにして生成された
第2中間テキスト25を読み込み、対応する機械語のコ
ードによる目的プログラム3を生成する。
第2中間テキスト25を読み込み、対応する機械語のコ
ードによる目的プログラム3を生成する。
以上説明したように、本発明の多重ループベクトル化コ
ンパイル方式にあっては、ループ中に並列実行に矛盾す
るデータ依存関係がないこととループ中の配列要素の定
義引用が記憶域上で一方向であることとが満たされれば
、ループ中の配列要素の定義引用が記憶域上で等間隔で
なくても配列の定義引用の部分をループから出してベク
トル化できるため、多重ループの全体を一重化してベク
トル化する場合と同等とまではいかないが、最も内側の
ループのみをベクトル化する場合に比して大幅な実行時
間短縮の効果が期待できる。
ンパイル方式にあっては、ループ中に並列実行に矛盾す
るデータ依存関係がないこととループ中の配列要素の定
義引用が記憶域上で一方向であることとが満たされれば
、ループ中の配列要素の定義引用が記憶域上で等間隔で
なくても配列の定義引用の部分をループから出してベク
トル化できるため、多重ループの全体を一重化してベク
トル化する場合と同等とまではいかないが、最も内側の
ループのみをベクトル化する場合に比して大幅な実行時
間短縮の効果が期待できる。
第1図は本発明の多重ループベクトル化コンパイル方式
を適用したコンパイラの一実施例を示す構成図、 第2図はDOループ解析情報の表現に用いる多重DOル
ープ報テーブルの論理的構成図、第3図はDO小ループ
解析情報の表現に用いるDoループ−重化テーブルの論
理的構成図、第4図は多重DOループ含む原始プログラ
ムの例を示す図、 第5図は第4図の原始プログラムを一重化可能な形へ変
換した状態を原始プログラムの形式で示した概念図、 第6図は第5図の原始プログラムの一重化後の状態を原
始プログラムの形式で示した概念図、第7図は第4図の
原始プログラムを構文解析して生成した第1中間テキス
トの構成の概念図(流れ図)、 第8図は第4図の原始プログラム中のDoループの解析
情報の表現の例を示す図、 第9図は第7図の第1中間テキストをベクトル化して生
成した第2中間テキストの構成の概念図、第10図はD
O小ループ含む原始プログラムの3 例を示す図、 第11図は第10図の原始プログラムを構文解析して生
成した第1中間テキストの構成の概念図、第12図は第
11図の第1中間テキストをベクトル化して生成した第
2中間テキストの構成の概念図、 第13図は多重DOループ含む原始プログラムの例を示
す図および、 第14図は第13図の原始プログラムの一重化後の状態
を原始プログラムの形式で示した図である。 図において、 1・・・・・・・・・原始プログラム 2・・・・・・・・・コンパイラ 21・・・・・・構文解析部 22・・・・・・ベクトル化処理部 221・・・構造解析手段 222・・・データ依存関係判定手段 223・・・多重ループ−重化解析手段224・・・ベ
クトルテキスト生成手段4 23・・・・・・コード生底部 24・・・・・・第1中間テキスト 25・・・・・・第2中間テキスト 3・・・・・・・・・目的プログラム 4・・・・・・・・・多重DOループ報テーブル5・・
・・・・・・・D○ループ一重化テーブル6・・・・・
・・・・ポインタ
を適用したコンパイラの一実施例を示す構成図、 第2図はDOループ解析情報の表現に用いる多重DOル
ープ報テーブルの論理的構成図、第3図はDO小ループ
解析情報の表現に用いるDoループ−重化テーブルの論
理的構成図、第4図は多重DOループ含む原始プログラ
ムの例を示す図、 第5図は第4図の原始プログラムを一重化可能な形へ変
換した状態を原始プログラムの形式で示した概念図、 第6図は第5図の原始プログラムの一重化後の状態を原
始プログラムの形式で示した概念図、第7図は第4図の
原始プログラムを構文解析して生成した第1中間テキス
トの構成の概念図(流れ図)、 第8図は第4図の原始プログラム中のDoループの解析
情報の表現の例を示す図、 第9図は第7図の第1中間テキストをベクトル化して生
成した第2中間テキストの構成の概念図、第10図はD
O小ループ含む原始プログラムの3 例を示す図、 第11図は第10図の原始プログラムを構文解析して生
成した第1中間テキストの構成の概念図、第12図は第
11図の第1中間テキストをベクトル化して生成した第
2中間テキストの構成の概念図、 第13図は多重DOループ含む原始プログラムの例を示
す図および、 第14図は第13図の原始プログラムの一重化後の状態
を原始プログラムの形式で示した図である。 図において、 1・・・・・・・・・原始プログラム 2・・・・・・・・・コンパイラ 21・・・・・・構文解析部 22・・・・・・ベクトル化処理部 221・・・構造解析手段 222・・・データ依存関係判定手段 223・・・多重ループ−重化解析手段224・・・ベ
クトルテキスト生成手段4 23・・・・・・コード生底部 24・・・・・・第1中間テキスト 25・・・・・・第2中間テキスト 3・・・・・・・・・目的プログラム 4・・・・・・・・・多重DOループ報テーブル5・・
・・・・・・・D○ループ一重化テーブル6・・・・・
・・・・ポインタ
Claims (2)
- (1)高級言語で記述された原始プログラムを読み込み
構文解析を行って第1中間テキストを生成する構文解析
部と、第1中間テキストから原始プログラム中のループ
構造を検出してベクトル化可能部分の認識を行いベクト
ル処理用のテキストを含む第2中間テキストを生成する
ベクトル化処理部と、第2中間テキストから目的プログ
ラムを生成して出力するコード生成部とを有し、ベクト
ル処理プロセッサに対して、与えられた原始プログラム
から目的プログラムを生成して出力するコンパイル方式
において、 前記ベクトル化処理部に、 第1中間テキストから原始プログラムのループ中の制御
の流れを解析する構造解析手段と、ループ中に並列実行
に矛盾するデータ依存関係があるか否かを判定するデー
タ依存関係判定手段と、 並列実行に矛盾しないと判定された部分につき通常のも
しくはマスク使用による多重ループの一重化が可能か否
かを解析して判定する多重ループ一重化解析手段と、 一重化が可能と判定された部分および並列実行に矛盾し
ないと判定された他の部分を一重化およびもしくはベク
トル化して第2中間テキストを生成するベクトルテキス
ト生成手段とを設けたことを特徴とする多重ループベク
トル化コンパイル方式。 - (2)多重DOループ情報テーブルおよびDOループ一
重化テーブルを用いてDOループの解析情報を表現した
ことを特徴とする請求項1記載の多重ループベクトル化
コンパイル方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2016700A JPH03220669A (ja) | 1990-01-26 | 1990-01-26 | 多重ループベクトル化コンパイル方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2016700A JPH03220669A (ja) | 1990-01-26 | 1990-01-26 | 多重ループベクトル化コンパイル方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH03220669A true JPH03220669A (ja) | 1991-09-27 |
Family
ID=11923566
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2016700A Pending JPH03220669A (ja) | 1990-01-26 | 1990-01-26 | 多重ループベクトル化コンパイル方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH03220669A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH08314897A (ja) * | 1995-05-23 | 1996-11-29 | Nec Software Ltd | 添字三つ組による部分配列のベクトル化処理方式 |
-
1990
- 1990-01-26 JP JP2016700A patent/JPH03220669A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH08314897A (ja) * | 1995-05-23 | 1996-11-29 | Nec Software Ltd | 添字三つ組による部分配列のベクトル化処理方式 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5276880A (en) | Method for parsing and representing multi-versioned computer programs, for simultaneous and synchronous processing of the plural parses | |
| US5522074A (en) | Vectorization system for vectorizing loop containing condition induction variables | |
| Walsh et al. | Paragen: a novel technique for the autoparallelisation of sequential programs using gp | |
| JPH03220669A (ja) | 多重ループベクトル化コンパイル方式 | |
| Liu | Dependence analysis for recursive data | |
| JP3032030B2 (ja) | ループ最適化方法及び装置 | |
| JP6810380B2 (ja) | ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム | |
| Goldberg | A variadic extension of Curry's fixed-point combinator | |
| JPH11242598A (ja) | コンパイル方法およびコンパイル装置ならびにオブジェクトプログラム実行方法およびオブジェクトプログラム実行装置ならびにプログラム記憶媒体 | |
| JPH0425969A (ja) | If文下定義配列ベクトル化コンパイル方式 | |
| Ramesh | Decompilation of Move Programs to Dataflow Process Networks | |
| JP2801193B2 (ja) | インダクション変数のベクトル化処理装置 | |
| Tracz | Parameterization: a case study | |
| Košťál et al. | Execution Efficiency of the use of Array and Linked-List Implementations of a Stack Abstract Data Types Containing Complex Numbers in Methods of an Android Application | |
| JPH0795272B2 (ja) | コンパイル方法 | |
| JP2533938B2 (ja) | ベクトル演算処理方式 | |
| JPS6367676A (ja) | 一般ル−プベクトル化処理方式 | |
| JPH05120323A (ja) | If文下ベクトル演算最適化方式 | |
| JPH08221276A (ja) | コンパイラ | |
| JP3921722B2 (ja) | コンパイラ処理装置 | |
| JPH02101577A (ja) | ベクトル化処理方式 | |
| JPH06290206A (ja) | ベクトル化変換システム | |
| JPH04295960A (ja) | コンパイラのベクトル化処理方式 | |
| JPH03144830A (ja) | 並列処理方式 | |
| JPH02214974A (ja) | ベクトル化処理方式 |