JP2001043209A - 多重ネストループプログラムコンパイル方式 - Google Patents

多重ネストループプログラムコンパイル方式

Info

Publication number
JP2001043209A
JP2001043209A JP11217971A JP21797199A JP2001043209A JP 2001043209 A JP2001043209 A JP 2001043209A JP 11217971 A JP11217971 A JP 11217971A JP 21797199 A JP21797199 A JP 21797199A JP 2001043209 A JP2001043209 A JP 2001043209A
Authority
JP
Japan
Prior art keywords
loop
program
innermost
nested
code
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
JP11217971A
Other languages
English (en)
Inventor
Katsuaki Fundou
勝昭 分銅
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP11217971A priority Critical patent/JP2001043209A/ja
Publication of JP2001043209A publication Critical patent/JP2001043209A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 生成される目的プログラムの実行性能の向上
が見込める多重ネストループプログラムコンパイル方式
を提供する。 【解決手段】 ループ入れ換え解析部33は、多重ネス
トループ群の中に繰り返し数が不明なループが存在する
場合に、各最内側ループ候補が最内側ループになった場
合の各ネスト箇所オブジェクトの予測実行時間の算出式
を作成し、当該算出式を基にした条件分岐の条件式を作
成する。ベクトルテキスト生成部34は、各最内側ルー
プ候補が最内側ループになった場合のベクトル化用の中
間コード(各ネスト箇所中間コード)と、ループ入れ換
え解析部33により作成された算出式および条件式に基
づく条件分岐中間コードとを作成する。コード生成部2
2は、各ネスト箇所中間コードおよび条件分岐中間コー
ドに基づくオブジェクトコードを含む目的プログラム6
0を生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ベクトル化機能を
有するコンパイラ(プリプロセッサおよびコンパイラに
よって実現されるコンパイルシステムを含む)におい
て、多重にネストしているループ群(多重ネストループ
群)を有するソースプログラムである多重ネストループ
プログラムのコンパイルを行う多重ネストループプログ
ラムコンパイル方式に関する。
【0002】
【従来の技術】コンパイラでは、構造解析部およびデー
タ依存関係解析部が、構文解析部によって作成された中
間プログラムを用いて、構造解析とデータ依存関係解析
とを行う。
【0003】このとき、コンパイル対象のソースプログ
ラムが図2に示すような多重にネストしているループ群
を持つ多重ネストループプログラムである場合には、オ
リジナルの最内側ループをベクトル化すること(ベクト
ル化機能を有するコンパイラは最内側ループにベクトル
化を施す)が最適であるとは限らない。
【0004】そこで、従来のコンパイラでは、ループ入
れ換え解析部が、多重ネストループ群の中でどのループ
を最内側ループにしてベクトル化対象とすべきかについ
て解析を行うのが普通である。
【0005】ただし、コンパイル対象のソースプログラ
ムにおいて、多重ネストループ群の中で1つ以上のルー
プの繰り返し数が不明である場合には、コンパイル時に
どのループを最内側にするべきか(すなわち、ベクトル
化対象にすればよいのか)を正確に解析(判断)するこ
とができない。
【0006】したがって、従来の多重ネストループプロ
グラムコンパイル方式では、通常、以下のa〜cに示す
いずれかの方法を採り、このような場合に対処してい
た。 a.繰り返し数が不明なループに関しては、当該ループ
中で定義・参照されている配列宣言の要素数を繰り返し
数として仮定する。 b.繰り返し数が不明なループがある場合には、ループ
の入れ換えを行わない。 c.不明な繰り返し数に対する既定値を設け、繰り返し
数が不明なループに関してはその既定値を繰り返し数と
する。
【0007】
【発明が解決しようとする課題】上述した従来の多重ネ
ストループプログラムコンパイル方式では、多重ネスト
ループ群の中で1つ以上のループの繰り返し数が不明で
ある場合に、上記のa〜cに示す方法で対処されている
ので、正確な実行時間の予測ができないため、実行性能
の劣るループを最内側にしているケース(bの方法のよ
うにループの入れ換えを放棄するケースを含む)が見受
けられる。すなわち、従来技術では、具体的に各ループ
の繰り返し数が分かっていない場合には、正確な判断が
できないため、目的プログラムの実行性能が劣ることに
なる「最内側ループの選択」をしてしまう場合があると
いう問題点が存在した。
【0008】本発明の目的は、上述の点に鑑み、上記の
問題を解決し、最内側ループを条件分岐によって入れ換
えることを可能にする目的プログラムを生成するように
し、目的プログラムの実行性能の向上が見込める多重ネ
ストループプログラムコンパイル方式(この方式が適用
されるコンパイラやプリプロセッサの機能を実現するプ
ログラムを記憶した記録媒体を含む)を提供することに
ある。
【0009】
【課題を解決するための手段】本発明の多重ネストルー
ププログラムコンパイル方式は、ベクトル化機能を有し
多重ネストループプログラムがコンパイル対象のソース
プログラムとなりうるコンパイラにおいて、多重ネスト
ループプログラムに該当するソースプログラムのコンパ
イルを行う際に、多重ネストループ群の中に繰り返し数
が不明なループが存在する場合に、不明な繰り返し数を
変数とした上で各最内側ループ候補が最内側ループにな
った場合の各ネスト箇所オブジェクトの予測実行時間の
算出式を作成し、当該算出式を基にした条件分岐の条件
式を作成するループ入れ換え解析部と、各最内側ループ
候補が最内側ループになった場合のベクトル化用の中間
コードである各ネスト箇所中間コードと前記ループ入れ
換え解析部によって作成された算出式および条件式に基
づく条件分岐中間コードとを作成するベクトルテキスト
生成部と、前記ベクトルテキスト生成部によって作成さ
れた各ネスト箇所中間コードおよび条件分岐中間コード
に基づくオブジェクトコードを含む目的プログラムを生
成するコード生成部とを有する。
【0010】また、本発明の多重ネストループプログラ
ムコンパイル方式は、コンパイラと当該コンパイラの前
段で最適化ソースプログラムを生成するプリプロセッサ
とからなるコンパイルシステムにおいて、多重ネストル
ーププログラムに該当するソースプログラムのコンパイ
ルを行う際に、多重ネストループ群の中に繰り返し数が
不明なループが存在する場合に、不明な繰り返し数を変
数とした上で各最内側ループ候補が最内側ループになっ
た場合の各ネスト箇所オブジェクトの予測実行時間の算
出式を作成し、当該算出式を基にした条件分岐の条件式
を作成するプリプロセッサ内のループ入れ換え解析部
と、各最内側ループ候補が最内側ループになった場合の
ソースコードである各ネスト箇所ソースコードと前記ル
ープ入れ換え解析部によって作成された算出式および条
件式に基づく条件分岐ソースコードとを作成するプリプ
ロセッサ内のソース生成部と、前記ソース生成部によっ
て作成された各ネスト箇所ソースコードおよび条件分岐
ソースコードを含む最適化ソースプログラムをコンパイ
ルして当該各ネスト箇所ソースコードおよび当該条件分
岐ソースコードに基づくオブジェクトコードを含む目的
プログラムを生成するコンパイラとを有する構成にする
こともできる。
【0011】
【発明の実施の形態】次に、本発明について図面を参照
して詳細に説明する。
【0012】(1) 第1の実施の形態 図1は、本発明の第1の実施の形態に係る多重ネストル
ーププログラムコンパイル方式の構成を示すブロック図
である。
【0013】図1を参照すると、本実施の形態に係る多
重ネストループプログラムコンパイル方式は、多重ネス
トループプログラムに該当する場合があるソースプログ
ラム10と、ベクトル化処理部30を備えているコンパ
イラ20と、ソースプログラム10から目的プログラム
60を生成する過程で作成される中間プログラム40お
よび50と、記憶域上に規則的に並んでいるデータに対
して直接演算を行うベクトル命令が実行されうるベクト
ル演算プロセッサを持つコンピュータシステムに適用さ
れる目的プログラム60とを含んで構成されている。
【0014】コンパイラ20は、高級言語で記述された
ソースプログラム10を読み込み構文解析を行い中間プ
ログラム40を生成する構文解析部21と、中間プログ
ラム40に基づき構造解析を行う構造解析部31と、ベ
クトル化した場合に各変数に対し定義参照関係に矛盾が
生じるか否かを解析するデータ依存関係解析部32と、
ループ入れ換え解析部33と、ベクトルテキスト生成部
34と、コード生成部22とを含んで構成されている。
なお、上記の符号31〜34で示される構成要素によっ
て、ベクトル化処理部30が形成されている。また、構
文解析部21,構造解析部31,およびデータ依存関係
解析部32は、従来技術と同様の機能を有するものであ
る。
【0015】ループ入れ換え解析部33は、どのループ
をベクトル化対象とすればよいのかを解析し、多重ネス
トループ群におけるベクトル化可能なループ群の中に繰
り返し数が不明なループが存在する場合には、最内側ル
ープとなる可能性があるループ群(最内側ループ候補
群)を抽出し、不明な繰り返し数を変数とした上で各最
内側ループ候補が最内側ループになった場合の各ネスト
箇所オブジェクト(多重ネストループ群の箇所に対する
オブジェクトコード)の予測実行時間の算出式を作成
し、当該算出式に基づく各ネスト箇所オブジェクトへの
条件分岐における条件式を作成する。
【0016】ベクトル化用の中間コードを生成するベク
トルテキスト生成部34は、多重ネストループ群におけ
るベクトル化可能なループ群の中に繰り返し数が不明な
ループが存在する場合には、各最内側ループ候補が最内
側ループになった場合のベクトル化用の中間コードであ
る各ネスト箇所中間コードとそれらのいずれかに分岐す
るための条件分岐中間コード(ループ入れ換え解析部3
3によって作成された算出式および条件式に基づく条件
分岐用の中間コード)とを作成し、それらを中間プログ
ラム40に反映させて中間プログラム50を生成する。
【0017】コード生成部22は、中間プログラム50
から目的プログラム60(実行時に最適なループを最内
側ループとできる目的プログラムであり、ベクトルテキ
スト生成部34によって作成されたネスト箇所中間コー
ドおよび条件分岐中間コードに基づくオブジェクトコー
ドを含む目的プログラム)を生成し出力する。
【0018】図2は、本実施の形態に係る多重ネストル
ーププログラムコンパイル方式の適用が予測されるソー
スプログラム10の一例を示す図である。
【0019】図3は、ループ入れ換え解析部33におけ
る処理の流れを示す流れ図である。この処理は、ネスト
判定ステップ301と、ベクトル化可能ループ複数存在
判定ステップ302と、最内側ループ決定ステップ30
3と、最内側ループ候補抽出ステップ304と、繰り返
し数(ループ長)不明ループ有無判定ステップ305
と、最内側ループ選択ステップ306と、予測実行時間
算出式・条件式作成ステップ307とからなる。
【0020】図4は、本実施の形態に係る多重ネストル
ーププログラムコンパイル方式により生成される目的プ
ログラム60(多重ネストループ群において繰り返し数
が不明なループがある場合に生成される目的プログラム
であり、図2に示すソースプログラム10に対する目的
プログラム)における処理の流れを示す流れ図である。
【0021】次に、このように構成された本実施の形態
に係る多重ネストループプログラムコンパイル方式の動
作について図面を参照して詳細に説明する。
【0022】まず、コンパイラ20内の構文解析部21
は、ソースプログラム10を読み込み、中間プログラム
40を生成し、この情報(中間プログラム40を生成し
た旨および中間プログラム40の内容)をベクトル化処
理部30に渡す。
【0023】ベクトル化処理部30では、構造解析部3
1およびデータ依存関係解析部32が、中間プログラム
40に対してベクトル化の判断を行う。この「ベクトル
化の判断」で、「中間プログラム40における全てのル
ープにおいてベクトル化不可である(ベクトル化可能な
ループが存在しない)」と判断された場合には、ベクト
ル化処理部30を抜けコード生成部22に処理が渡され
る。この場合には、中間プログラム50は中間プログラ
ム40と同じものになる。
【0024】上記の「ベクトル化の判断」で、「ベクト
ル化可能なループが存在する」と判断された場合には、
ループ入れ換え解析部33に処理が渡される。
【0025】ループ入れ換え解析部33は、上記のベク
トル化可能なループ群を解析対象として、下記に示すよ
うな処理を行う(図3参照)。
【0026】まず、解析対象となっているループ群がネ
ストしているか否かを調べる(ステップ301)。
【0027】ステップ301で「解析対象のループ群が
ネストしていない」と判定した場合には、ここでの処理
を行うことなく、ベクトルテキスト生成部34に処理を
渡す。
【0028】一方、ステップ301で「解析対象のルー
プ群がネストしている」と判定した場合には、その中に
ベクトル化の対象となりうる、すなわち最内側ループの
対象になりうるループがいくつ存在するのか(複数存在
するか否か)を調べる(ステップ302)。このように
最内側ループにベクトル化の対象となりうるループ(ベ
クトル化可能なループ)が設定されるのは、ベクトル化
できた場合とベクトル化できない場合とでは、基本的に
前者のほうが実行性能が高いためである。
【0029】ここで、最内側ループ、すなわちベクトル
化対象となるループを選択する場合には、以下のa〜d
に示す項目が判断基準になる。
【0030】a.ベクトル化できる割合 1つの命令の実行時間を比較すれば、同じ種類のもので
あれば、スカラ命令の方がベクトル命令よりも速い。し
かし、スカラの繰り返し数が繰り返し数であるのに対
し、ベクトルは繰り返し数/ベクトル長であるために、
ループ単位で見た場合には、通常はベクトル化できる割
合が多い方が速い。
【0031】b.ループの繰り返し数 ベクトル演算を最も効率よく利用するためには、ベクト
ル対象ループの繰り返し数は大きい方が望ましい。
【0032】c.配列の要素間距離 配列のロード・ストアは、要素間距離が1(連続ベクト
ル)である場合に、非常に効率がよくなる。これは、図
2のA(I,J)を例にとった場合に、DO変数がIの
場合である。次いで効率がよいのが、要素間距離が等間
隔(等間隔ベクトル)の場合である。これは、図2のA
(I,J)を例にとった場合に、DO変数がJの場合で
ある。最も効率が悪いのが、要素間距離が一定ではない
(間接指標ベクトル等)場合である。これは、図2のP
(L(I),J)を例にとった場合に、DO変数がIの
場合である。
【0033】d.最適化によりループ外に出せる演算の
有無 ループ中で不変な演算は、ループ外に移動させることに
より、1回の演算で済ますことが可能である。図2の例
で示すと、ループ中の最後の実行文で、DO変数がJの
場合の右辺式(Y(I)−Z)が、これにあたる。
【0034】ステップ302で「ベクトル化対象となる
ループ(ベクトル化可能なループ)が1つしか存在しな
い」と判定した場合には、このループ(ベクトル化可能
なループ)を最内側ループとして決定し(ステップ30
3)、ベクトルテキスト生成部34に処理を渡す。な
お、この場合には、ベクトルテキスト生成部34は、そ
の最内側ループを確定的に有する中間コードを生成す
る。
【0035】一方、ステップ302で「ベクトル化対象
となるループが複数存在する」と判定した場合には、当
該ループ群(最内側ループとなる可能性があるループ
群)を最内側ループ候補群として抽出し(ステップ30
4)、ループ入れ換え解析部33による解析の段階で各
最内側ループ候補の繰り返し数(ループ長)が全て確定
しているか否か(当該最内側ループ候補群の中にループ
長の不明なループがあるか否か)を判定する(ステップ
305)。
【0036】ステップ305で「最内側ループ候補群の
中にループ長の不明なループがない」と判定した場合に
は、後述する式1により最内側ループ候補群のそれぞれ
のループが最内側ループになった場合のネスト箇所オブ
ジェクトの予測実行時間を定数として算出し、その算出
結果を比較することにより、当該予測実行時間が最小に
なるように最内側ループを選択する(ステップ30
6)。そして、ベクトルテキスト生成部34に処理を渡
す。
【0037】一方、ステップ305で「最内側ループ候
補群の中にループ長(繰り返し数)の不明なループがあ
る」と判定した場合には、ステップ306のように予測
実行時間を全て定数として算出することができないの
で、以下のaおよびbに示す処理を行う(ステップ30
7)。そして、ベクトルテキスト生成部34に処理を渡
す。
【0038】a.まず、不明な繰り返し数を変数とし
て、それぞれの最内側ループ候補が最内側ループになっ
た場合のネスト箇所オブジェクトの予測実行時間の算出
式(例えば、図4中のステップ401およびステップ4
02における計算式)を作成する。
【0039】b.次に、上記aで作成した算出式をベー
スにして、各最内側ループ候補を最内側ループにしたと
きの各ネスト箇所オブジェクトの予測実行時間を比較す
る条件式(例えば、図4中のステップ403における条
件分岐の条件式)を作成する。
【0040】ここで、ループ群(ネスト箇所オブジェク
ト)の予測実行時間は、次のような式(式1)によって
算出される。
【0041】式1:ループ群の予測実行時間=(繰り返
し数に関わらない演算の実行時間+スカラ命令の実行時
間×最内側ループ数+ベクトル命令の実行時間×最内側
ループ数/ベクトル長)×最内側以外のループ数
【0042】ベクトルテキスト生成部34は、構造解析
部31,データ依存関係解析部32,およびループ入れ
替え解析部33による解析に基づいてベクトル化用の中
間コードを作成して、その中間コードをこれまでに生成
された中間プログラム40に反映させることで中間プロ
グラム50を生成する。
【0043】ここで、ベクトルテキスト生成部34は、
多重ネストループ群の中にベクトル化対象となるループ
が複数存在し、その中で繰り返し数が不明なループが存
在している場合には、各最内側ループ候補が最内側ルー
プになった場合の各ネスト箇所中間コード(例えば、図
4中のステップ404およびステップ405のネスト箇
所オブジェクトに対応する各中間コード)を作成し、そ
れぞれのネスト箇所中間コードを飛び先とした条件分岐
中間コード(例えば、図4中のステップ401およびス
テップ402の計算式に基づくステップ403の条件分
岐のオブジェクトコードに対応する中間コード)を作成
する。この条件分岐では、ループ入れ換え解析部33で
作成された条件式が用いられる。
【0044】ベクトル化処理部30における処理の終了
後に、処理はコード生成部22に移る。コード生成部2
2は、中間プログラム50を基に、目的プログラム60
(ベクトルテキスト生成部34によって作成された各ネ
スト箇所中間コードおよび条件分岐中間コードに基づく
オブジェクトコード(図4参照)を有する目的プログラ
ム)の生成および出力を行う。
【0045】(2) 第1の実施の形態の拡張 次に、図5および図6を参照して、第1の実施の形態に
係る多重ネストループプログラムコンパイル方式の拡張
に関して説明する。
【0046】上述の第1の実施の形態では、ソースプロ
グラム10における多重ネストループ群のネスト数が2
つ(2重ネスト)であり、そのネスト箇所におけるそれ
ぞれのループの繰り返し数がともに不明であり、全ての
最内側ループ候補が内側(最内側)にくるネスト箇所オ
ブジェクトを分岐先として有する目的プログラム60が
生成される例を中心に説明した。
【0047】しかし、本発明の多重ネストループプログ
ラムコンパイル方式において、ネスト数や繰り返し数が
不明なループ数がいくつであってもよいことはいうまで
もない。
【0048】また、上記のように、第1の実施の形態中
の具体例で作成されるネスト箇所オブジェクトの数はソ
ースプログラム10におけるネスト数の2であったが、
作成されるネスト箇所オブジェクトが必ずしもネスト数
分だけ必要になるというわけではない。多重ネストルー
プ群のネスト数がXで、繰り返し数の不明なループの数
がYであった場合に、最内側ループ候補数の最大値はY
+1になり、Xには依存しない。これは、繰り返し数が
分かっている最内側ループ候補同士についてはコンパイ
ル段階で正確な比較が可能であり、当該最内側ループ候
補が最内側ループとなったときのネスト箇所オブジェク
トの予測実行時間が最小(最短)になる1つの最内側ル
ープ候補だけを実際の最内側ループ候補とすればよくな
るためである。なお、前に述べたように、ベクトル化の
対象とならないものは最内側ループ候補にならないた
め、上記の「Y+1」はあくまでも最大値である。
【0049】すなわち、本発明の多重ネストループプロ
グラムコンパイル方式においては、繰り返し数が分かっ
ている最内側ループ候補群の各々が最内側ループになっ
た場合の各ネスト箇所オブジェクトの予測実行時間を比
較し、最短の予測実行時間となるネスト箇所オブジェク
トの最内側ループに該当する最内側ループ候補以外の当
該最内側ループ候補群を最内側ループ候補から除外する
ことが可能である。なお、このことは、後述する第2の
実施の形態に係る多重ネストループプログラムコンパイ
ル方式についても妥当する。
【0050】このことについて、さらに、図面を参照し
て詳細に説明する。
【0051】図5は、本発明の多重ネストループプログ
ラムコンパイル方式の適用対象となるソースプログラム
10の他の一例(6重ネストループ群を有するソースプ
ログラム10)を示す図である。
【0052】ここで、図5に示すソースプログラム10
に対するコンパイルにおいて、ループ入れ換え解析部3
3による処理以前の段階で、以下のaおよびbに示すこ
とが確定しているものとする。 a.ループ中の処理は、DO変数NおよびKに対してベ
クトル化不可要因を持つ。 b.DO変数L,M,およびNを持つループについて
は、繰り返し数が確定している。それ以外のループの繰
り返し数は不明である。
【0053】この例に対し、再び図3を用いて、ループ
入れ換え解析部33における処理の流れを説明する。
【0054】図3に示す一連の処理において、解析対象
のループ群がネストしており、複数のベクトル化可能な
ループが存在しているため、ステップ301およびステ
ップ302の判定(条件分岐)はともに「yes」とな
る。したがって、ステップ304の処理において、ベク
トル化の対象にはなりえないDO変数NおよびKを持つ
ループ以外のループが最内側ループ候補として選択(抽
出)される。
【0055】上記の最内側ループ候補群のうち、DO変
数IおよびJを持つループの繰り返し数が不明であるた
め、ステップ305の条件分岐は「yes」となる。し
たがって、ステップ307の処理で、最内側ループ候補
群のそれぞれが最内側ループになった場合のネスト箇所
オブジェクトの予測実行時間の算出式が作成される。こ
こで、すでに繰り返し数の分かっているDO変数Lおよ
びMのループが最内側ループになった場合のネスト箇所
オブジェクトの予測実行時間は、それぞれ、以下の式
(式2および式3)で表される。
【0056】式2:(繰り返し数に関わらない演算の実
行時間+スカラ命令の実行時間×50+ベクトル命令の
実行時間×50/ベクトル長)×II×JJ×KK×1
00×100
【0057】式3:(繰り返し数に関わらない演算の実
行時間+スカラ命令の実行時間×100+ベクトル命令
の実行時間×100/ベクトル長)×II×JJ×KK
×50×100
【0058】この2つの式のみを比較する場合に、それ
ぞれの式に共通であるII×JJ×KK×100は無視
することができる。その結果、それぞれの式に含まれる
項目は全て定数となり、この段階(ループ入れ換え解析
部33による解析の段階)で比較することが可能にな
る。
【0059】ここでは、DO変数Mのループを最内側に
した方がDO変数Lのループを最内側にした場合よりも
具体的な予測実行時間が短いものとする。すると、DO
変数Lのループは最内側ループにはなりえないため、最
内側ループ候補からはずすことができる。その結果、最
終的にループ入れ換え解析部33で選ばれる最内側ルー
プ候補を、DO変数がI,J,およびMの3つのループ
にすることが可能になる。
【0060】図6は、これらの情報を基に作成される図
5に対する目的プログラム60(図5中の6重ネストル
ープ群に対するネスト箇所オブジェクトを有する目的プ
ログラム60)における処理の流れを示す流れ図であ
る。
【0061】図6中のステップ601〜603の処理
で、最内側ループ候補群のそれぞれが最内側ループにな
った場合のネスト箇所オブジェクトの予測実行時間が算
出される。ステップ604〜606の条件分岐における
判定において予測実行時間の最小(最短)値が見つけら
れ、その最小値の予測実行時間を持つネスト箇所オブジ
ェクト(ステップ607,608,および609のいず
れか)に処理が移される。
【0062】(3) 第2の実施の形態 図7は、本発明の第2の実施の形態に係る多重ネストル
ーププログラムコンパイル方式の構成を示すブロック図
である。
【0063】図7を参照すると、本実施の形態に係る多
重ネストループプログラムコンパイル方式は、多重ネス
トループプログラムに該当する場合があるソースプログ
ラム701と、コンパイラ709の前段においてソース
プログラム701から最適化ソースプログラム708を
生成するプリプロセッサ702と、最適化ソースプログ
ラム708と、最適化ソースプログラム708から目的
プログラム710を生成するコンパイラ709と、記憶
域上に規則的に並んでいるデータに対して直接演算を行
うベクトル命令が実行されうるベクトル演算プロセッサ
を持つコンピュータシステムに適用される目的プログラ
ム710とを含んで構成されている。
【0064】プリプロセッサ702は、構文解析部70
3と、構造解析部704と、データ依存関係解析部70
5と、ループ入れ換え解析部706と、ソース生成部7
07とを含んで構成されている。
【0065】ループ入れ換え解析部706は、多重ネス
トループプログラムに該当するソースプログラム701
のコンパイルを行う際に、多重ネストループ群の中に繰
り返し数が不明なループが存在する場合に、不明な繰り
返し数を変数とした上で各最内側ループ候補が最内側ル
ープになった場合の各ネスト箇所オブジェクトの予測実
行時間の算出式を作成し、当該算出式を基にした条件分
岐の条件式を作成する。
【0066】ソース生成部707は、各最内側ループ候
補が最内側ループになった場合のソースコードである各
ネスト箇所ソースコードとループ入れ換え解析部706
によって作成された算出式および条件式に基づく条件分
岐ソースコードとを作成する。
【0067】コンパイラ709は、ソース生成部707
によって作成された各ネスト箇所ソースコードおよび条
件分岐ソースコードを含む最適化ソースプログラム70
8をコンパイルして、当該各ネスト箇所ソースコードお
よび当該条件分岐ソースコードに基づくオブジェクトコ
ードを含む目的プログラム710を生成する。
【0068】図7に示すように、本実施の形態に係る多
重ネストループプログラムコンパイル方式は、ループ入
れ換えを図1中のコンパイラ20ではなくプリプロセッ
サ702で行い、図1中の中間プログラム50ではなく
最適化ソースプログラム708を生成し、その最適化ソ
ースプログラム708をコンパイラ709の入力として
与えることにより、図1に示す第1の実施の形態に係る
多重ネストループプログラムコンパイル方式と同様の効
果(目的プログラム710の実行性能の向上)を求めよ
うとしている。
【0069】図8は、本実施の形態に係る多重ネストル
ーププログラムコンパイル方式において、ソースプログ
ラム701が図2に示すものであった場合に、そのソー
スプログラム701に対して最適化が施された後のソー
スプログラムである最適化ソースプログラム708を示
す図である。
【0070】次に、このように構成された本実施の形態
に係る多重ネストループプログラムコンパイル方式の動
作について図面を参照して詳細に説明する。
【0071】プリプロセッサ702内の構文解析部70
3,構造解析部704,データ依存関係解析部705,
およびループ入れ換え解析部706の機能は、図1中の
同名の構成要素と同じ機能であるため、ここでの説明を
省略する。
【0072】プリプロセッサ702内のソース生成部7
07は、これまでの処理(構文解析部703,構造解析
部704,データ依存関係解析部705,およびループ
入れ換え解析部706の処理)によって得られた情報に
基づき、図1中の中間プログラム50内の多重ネストル
ープ群に関する中間コードと同様の内容のソースコード
を有するように最適化が施された最適化ソースプログラ
ム708を生成し出力する。すなわち、第1の実施の形
態における中間プログラム50の内容を、中間プログラ
ムとしてではなく、最適化されたソースプログラムとし
て実現する。例えば、ソースプログラム701が図2に
示すように記述されている場合に、図8に示すような最
適化ソースプログラム708を生成し出力する。
【0073】この最適化ソースプログラム708を通常
のコンパイラ709に読み込ませることにより、図1に
示す第1の実施の形態に係る多重ネストループプログラ
ムコンパイル方式によって生成される目的プログラム6
0と同様の目的プログラム710の生成および出力が可
能となる。
【0074】最後に、本実施の形態に係る多重ネストル
ーププログラムコンパイル方式の利点および欠点につい
て言及しておく。
【0075】本実施の形態の利点は、ループ入れ換えに
関する処理が行われるのがプリプロセッサであるため、
汎用性が高くなることが挙げられる。
【0076】一方、本実施の形態の欠点は、以下のaお
よびbに示すものとなる。逆に言うと、このような欠点
の存在しないことが、第1の実施の形態における利点と
なる。
【0077】a.ループ入れ換えに関する機能がコンパ
イラに付属していないため、具体的な命令数や、命令の
実行時間が一般的なものとなってしまい、それが原因で
入れ換えミス(遅くなるループを最内側ループにしてし
まうミス等)が生じる可能性がある。
【0078】b.コンパイラにおけるベクトル化のため
の最適化(ループ外への移動やマクロ処理)をプリプロ
セッサが正確に把握していないと、その認識のずれによ
り入れ換えミスが生じる可能性がある。
【0079】これらの欠点は、オプション,指示行,ま
たは環境変数等で、プリプロセッサに明示的に指示する
ことにより、ある程度軽減することが可能ではある。し
かし、コンパイラにループ入れ換えに関する機能を組み
込んだ場合と比較すれば、入れ換えミスの生じる確率は
高い。
【0080】しかしながら、この第2の実施の形態にお
いても、本発明の多重ネストループプログラムコンパイ
ル方式によると、従来の方式に比べれば、入れ換えミス
の生じる確率は少なくなり、目的プログラムの実行性能
の向上を期待することができる。
【0081】(4) 第3の実施の形態 図9は、本発明の第3の実施の形態に係る多重ネストル
ーププログラムコンパイル方式の構成を示すブロック図
である。
【0082】図9を参照すると、本発明の第3の実施の
形態に係る多重ネストループプログラムコンパイル方式
は、図1に示した第1の実施の形態に係る多重ネストル
ーププログラムコンパイル方式に対して、多重ネストル
ーププログラムコンパイル処理プログラムを記録した記
録媒体90を備える点が異なっている。この記録媒体9
0は、磁気ディスク,半導体メモリ,その他の記録媒体
であってよい。
【0083】多重ネストループプログラムコンパイル処
理プログラムは、記録媒体90からコンパイラ20(ソ
ースプログラム10から中間プログラム40および50
を経て目的プログラム60を生成するコンパイラ)に読
み込まれ、当該コンパイラ20の動作を構文解析部2
1,ベクトル化処理部30(構造解析部31,データ依
存関係解析部32,ループ入れ換え解析部33,および
ベクトルテキスト生成部34),およびコード生成部2
2として制御する。多重ネストループプログラムコンパ
イル処理プログラムの制御によるコンパイラ20の動作
は、第1の実施の形態におけるコンパイラ20の動作と
全く同様になるので、その詳しい説明を割愛する。
【0084】(5) 第4の実施の形態 図10は、本発明の第4の実施の形態に係る多重ネスト
ループプログラムコンパイル方式の構成を示すブロック
図である。
【0085】図10を参照すると、本発明の第4の実施
の形態に係る多重ネストループプログラムコンパイル方
式は、図7に示した第2の実施の形態に係る多重ネスト
ループプログラムコンパイル方式に対して、多重ネスト
ループプログラムコンパイル処理プログラムを記録した
記録媒体100を備える点が異なっている。この記録媒
体100は、磁気ディスク,半導体メモリ,その他の記
録媒体であってよい。
【0086】多重ネストループプログラムコンパイル処
理プログラムは、記録媒体100からプリプロセッサ7
02(ソースプログラム701から最適化ソースプログ
ラム708を生成するプリプロセッサ)に読み込まれ、
当該プリプロセッサ702の動作を構文解析部703,
構造解析部704,データ依存関係解析部705,ルー
プ入れ換え解析部706,およびソース生成部707と
して制御する。多重ネストループプログラムコンパイル
処理プログラムの制御によるプリプロセッサ702の動
作は、第2の実施の形態におけるプリプロセッサ702
の動作と全く同様になるので、その詳しい説明を割愛す
る。なお、最適化ソースプログラム708から目的プロ
グラム710を生成するコンパイラ709の動作も、第
2の実施の形態におけるコンパイラ709の動作と全く
同様になる。
【0087】
【発明の効果】以上説明したように、本発明によると、
生成される目的プログラムの実行性能の向上を見込むこ
とができるという効果が生じる。
【0088】このような効果が生じる理由は、多重ネス
トループ群中に繰り返し数が不明なループが存在する場
合に、ループ入れ換え解析部において、不明な繰り返し
数を変数としたネスト箇所オブジェクトの予測実行時間
の算出式とそれを基にした条件分岐の条件式とを作成
し、ベクトルテキスト生成部において、各最内側ループ
候補が最内側ループになった場合のベクトル用の中間コ
ードを作成するようにし、実行時に最適なネスト箇所オ
ブジェクトを実行できるように条件分岐が挿入された目
的プログラムを生成できるようにしたからである。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態に係る多重ネストル
ーププログラムコンパイル方式の構成を示すブロック図
である。
【図2】図1および図7に示す多重ネストループプログ
ラムコンパイル方式に適用されるソースプログラムの一
例を示す図である。
【図3】図1中のループ入れ換え解析部における処理の
流れを示す流れ図である。
【図4】図1中の目的プログラム(図2に示すソースプ
ログラムに対応する目的プログラム)における処理の流
れを示す流れ図である。
【図5】図1に示す多重ネストループプログラムコンパ
イル方式の拡張形態について説明するための図である。
【図6】図1に示す多重ネストループプログラムコンパ
イル方式の拡張形態について説明するための図である。
【図7】本発明の第2の実施の形態に係る多重ネストル
ーププログラムコンパイル方式の構成を示すブロック図
である。
【図8】図7中の最適化ソースプログラムの一例(図2
に示すソースプログラムに対応する最適化ソースプログ
ラム)を示す図である。
【図9】本発明の第3の実施の形態に係る多重ネストル
ーププログラムコンパイル方式の構成を示すブロック図
である。
【図10】本発明の第4の実施の形態に係る多重ネスト
ループプログラムコンパイル方式の構成を示すブロック
図である。
【符号の説明】
10,701 ソースプログラム 20,709 コンパイラ 21,703 構文解析部 22 コード生成部 30 ベクトル化処理部 31,704 構造解析部 32,705 データ依存関係解析部 33,706 ループ入れ換え解析部 34 ベクトルテキスト生成部 40,50 中間プログラム 60,710 目的プログラム 90,100 記録媒体 301 ネスト判定ステップ 302 ベクトル化可能ループ複数存在判定ステップ 303 最内側ループ決定ステップ 304 最内側ループ候補抽出ステップ 305 繰り返し数(ループ長)不明ループ有無判定ス
テップ 306 最内側ループ選択ステップ 307 予測実行時間算出式・条件式作成ステップ 702 プリプロセッサ 707 ソース生成部 708 最適化ソースプログラム

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 ベクトル化機能を有し多重ネストループ
    プログラムがコンパイル対象のソースプログラムとなり
    うるコンパイラにおいて、多重ネストループプログラム
    に該当するソースプログラムのコンパイルを行う際に、
    多重ネストループ群の中に繰り返し数が不明なループが
    存在する場合に、不明な繰り返し数を変数とした上で各
    最内側ループ候補が最内側ループになった場合の各ネス
    ト箇所オブジェクトの予測実行時間の算出式を作成し、
    当該算出式を基にした条件分岐の条件式を作成するルー
    プ入れ換え解析部と、各最内側ループ候補が最内側ルー
    プになった場合のベクトル化用の中間コードである各ネ
    スト箇所中間コードと前記ループ入れ換え解析部によっ
    て作成された算出式および条件式に基づく条件分岐中間
    コードとを作成するベクトルテキスト生成部と、前記ベ
    クトルテキスト生成部によって作成された各ネスト箇所
    中間コードおよび条件分岐中間コードに基づくオブジェ
    クトコードを含む目的プログラムを生成するコード生成
    部とを有することを特徴する多重ネストループプログラ
    ムコンパイル方式。
  2. 【請求項2】 ネスト判定ステップ,ベクトル化可能ル
    ープ複数存在判定ステップ,最内側ループ決定ステッ
    プ,最内側ループ候補抽出ステップ,繰り返し数不明ル
    ープ有無判定ステップ,最内側ループ選択ステップ,お
    よび予測実行時間算出式・条件式作成ステップからなる
    処理を行うループ入れ換え解析部を有することを特徴と
    する請求項1記載の多重ネストループプログラムコンパ
    イル方式。
  3. 【請求項3】 繰り返し数が分かっている最内側ループ
    候補群の各々が最内側ループになった場合の各ネスト箇
    所オブジェクトの予測実行時間を比較し、最短の予測実
    行時間となるネスト箇所オブジェクトの最内側ループに
    該当する最内側ループ候補以外の当該最内側ループ候補
    群を最内側ループ候補から除外することを特徴とする請
    求項1または請求項2記載の多重ネストループプログラ
    ムコンパイル方式。
  4. 【請求項4】 コンパイラと当該コンパイラの前段で最
    適化ソースプログラムを生成するプリプロセッサとから
    なるコンパイルシステムにおいて、多重ネストループプ
    ログラムに該当するソースプログラムのコンパイルを行
    う際に、多重ネストループ群の中に繰り返し数が不明な
    ループが存在する場合に、不明な繰り返し数を変数とし
    た上で各最内側ループ候補が最内側ループになった場合
    の各ネスト箇所オブジェクトの予測実行時間の算出式を
    作成し、当該算出式を基にした条件分岐の条件式を作成
    するプリプロセッサ内のループ入れ換え解析部と、各最
    内側ループ候補が最内側ループになった場合のソースコ
    ードである各ネスト箇所ソースコードと前記ループ入れ
    換え解析部によって作成された算出式および条件式に基
    づく条件分岐ソースコードとを作成するプリプロセッサ
    内のソース生成部と、前記ソース生成部によって作成さ
    れた各ネスト箇所ソースコードおよび条件分岐ソースコ
    ードを含む最適化ソースプログラムをコンパイルして当
    該各ネスト箇所ソースコードおよび当該条件分岐ソース
    コードに基づくオブジェクトコードを含む目的プログラ
    ムを生成するコンパイラとを有することを特徴する多重
    ネストループプログラムコンパイル方式。
  5. 【請求項5】 繰り返し数が分かっている最内側ループ
    候補群の各々が最内側ループになった場合の各ネスト箇
    所オブジェクトの予測実行時間を比較し、最短の予測実
    行時間となるネスト箇所オブジェクトの最内側ループに
    該当する最内側ループ候補以外の当該最内側ループ候補
    群を最内側ループ候補から除外することを特徴とする請
    求項4記載の多重ネストループプログラムコンパイル方
    式。
  6. 【請求項6】 ベクトル化機能を有し多重ネストループ
    プログラムがコンパイル対象のソースプログラムとなり
    うるコンパイラを、多重ネストループプログラムに該当
    するソースプログラムのコンパイルを行う際に、多重ネ
    ストループ群の中に繰り返し数が不明なループが存在す
    る場合に、不明な繰り返し数を変数とした上で各最内側
    ループ候補が最内側ループになった場合の各ネスト箇所
    オブジェクトの予測実行時間の算出式を作成し、当該算
    出式を基にした条件分岐の条件式を作成するループ入れ
    換え解析部,各最内側ループ候補が最内側ループになっ
    た場合のベクトル化用の中間コードである各ネスト箇所
    中間コードと前記ループ入れ換え解析部によって作成さ
    れた算出式および条件式に基づく条件分岐中間コードと
    を作成するベクトルテキスト生成部,ならびに前記ベク
    トルテキスト生成部によって作成された各ネスト箇所中
    間コードおよび条件分岐中間コードに基づくオブジェク
    トコードを含む目的プログラムを生成するコード生成部
    として機能させるためのプログラムを記録した記録媒
    体。
  7. 【請求項7】 各ネスト箇所ソースコードおよび条件分
    岐ソースコードを含む最適化ソースプログラムをコンパ
    イルして当該各ネスト箇所ソースコードおよび当該条件
    分岐ソースコードに基づくオブジェクトコードを含む目
    的プログラムを生成するコンパイラの前段に設けられる
    プリプロセッサを、多重ネストループプログラムに該当
    するソースプログラムのコンパイルを行う際に、多重ネ
    ストループ群の中に繰り返し数が不明なループが存在す
    る場合に、不明な繰り返し数を変数とした上で各最内側
    ループ候補が最内側ループになった場合の各ネスト箇所
    オブジェクトの予測実行時間の算出式を作成し、当該算
    出式を基にした条件分岐の条件式を作成するループ入れ
    換え解析部,ならびに各最内側ループ候補が最内側ルー
    プになった場合のソースコードである各ネスト箇所ソー
    スコードと前記ループ入れ換え解析部によって作成され
    た算出式および条件式に基づく条件分岐ソースコードと
    を作成するソース生成部として機能させるためのプログ
    ラムを記録した記録媒体。
JP11217971A 1999-07-30 1999-07-30 多重ネストループプログラムコンパイル方式 Pending JP2001043209A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11217971A JP2001043209A (ja) 1999-07-30 1999-07-30 多重ネストループプログラムコンパイル方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11217971A JP2001043209A (ja) 1999-07-30 1999-07-30 多重ネストループプログラムコンパイル方式

Publications (1)

Publication Number Publication Date
JP2001043209A true JP2001043209A (ja) 2001-02-16

Family

ID=16712611

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11217971A Pending JP2001043209A (ja) 1999-07-30 1999-07-30 多重ネストループプログラムコンパイル方式

Country Status (1)

Country Link
JP (1) JP2001043209A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017021726A (ja) * 2015-07-14 2017-01-26 富士通株式会社 情報処理装置、コンパイル方法、およびコンパイルプログラム
US10572233B2 (en) 2015-11-20 2020-02-25 Nec Corporation Vectorization device, vectorization method, and recording medium on which vectorization program is stored

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017021726A (ja) * 2015-07-14 2017-01-26 富士通株式会社 情報処理装置、コンパイル方法、およびコンパイルプログラム
US10572233B2 (en) 2015-11-20 2020-02-25 Nec Corporation Vectorization device, vectorization method, and recording medium on which vectorization program is stored

Similar Documents

Publication Publication Date Title
US4710872A (en) Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops
US5889999A (en) Method and apparatus for sequencing computer instruction execution in a data processing system
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
US5586020A (en) Program transformation processing system and method
US8296746B2 (en) Optimum code generation method and compiler device for multiprocessor
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US20080141229A1 (en) Processor, program conversion apparatus, program conversion method, and computer program
US5598561A (en) Optimizing compiler which generates multiple instruction streams to be executed in parallel
JPH0814817B2 (ja) 自動ベクトル化方法
JP2002116916A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US9256437B2 (en) Code generation method, and information processing apparatus
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
JPH04215133A (ja) コード最適化方法およびコンパイラ・システム
JP2001043209A (ja) 多重ネストループプログラムコンパイル方式
US10108405B2 (en) Compiling apparatus and compiling method
US20050144605A1 (en) Information processing system and code generation method
US20160371066A1 (en) Computer that performs compiling, compiling method and storage medium that stores compiler program
JPH09160784A (ja) 並列化コンパイル方式
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
JP5169322B2 (ja) 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法
JPH05189243A (ja) 条件付演算のコンパイル処理装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040329

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040728