JP2005293080A - 情報処理装置、プログラム処理方法及びコンパイル処理プログラム - Google Patents
情報処理装置、プログラム処理方法及びコンパイル処理プログラム Download PDFInfo
- Publication number
- JP2005293080A JP2005293080A JP2004105437A JP2004105437A JP2005293080A JP 2005293080 A JP2005293080 A JP 2005293080A JP 2004105437 A JP2004105437 A JP 2004105437A JP 2004105437 A JP2004105437 A JP 2004105437A JP 2005293080 A JP2005293080 A JP 2005293080A
- Authority
- JP
- Japan
- Prior art keywords
- loop control
- loop
- program
- control statement
- 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.)
- Withdrawn
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】 ループの継続条件式に非等値演算子を使用したループ制御文が示すループのベクトル演算を迅速に実行する方法を提供する。
【解決手段】 情報処理装置(100)は、ソースプログラム(20)に対するコンパイル処理によりベクトル命令を含む目的プログラム(30)を生成するためのコンパイル処理手段(10)を備える。コンパイル処理手段は、入力されたソースプログラムから、制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文(6-1)を検出する検出処理部(11)と、検出されたループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する変形処理部(12)とを有する。
【選択図】 図1
【解決手段】 情報処理装置(100)は、ソースプログラム(20)に対するコンパイル処理によりベクトル命令を含む目的プログラム(30)を生成するためのコンパイル処理手段(10)を備える。コンパイル処理手段は、入力されたソースプログラムから、制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文(6-1)を検出する検出処理部(11)と、検出されたループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する変形処理部(12)とを有する。
【選択図】 図1
Description
本発明は、C言語あるいはC++言語のようなプログラミング言語にて記述されたソースプログラムからベクトル命令を含む目的プログラムを生成するコンパイル処理に関し、特に、繰り返し回数が指定されていないループ制御文が含まれるソースプログラムに前記コンパイル処理を施すための手法に関する。
従来、ソースプログラムにコンパイル処理を施すにあたり、例えば図5の5−1式ように、繰り返し回数が指定されているループ制御文に対しては、ベクトル命令を適用することにより演算処理の効率化を図ることが知られている。図示の5−1式は、ループ制御文の一例として示したC言語のfor文であり、文中の継続条件式5aにより、ループの繰り返し回数が規定される。
ところで、図6の6−1式のようなループ制御文によれば、上記5−1式による演算結果と同様な結果が得られると考えられるが、図示の6−1式は、その継続条件式6aに「!=」なる非等値演算子が使用されていることから、ループ外への飛び出しを伴うアルゴリズムとなる。
図6のようなループ制御文は、繰り返し回数が不明であることから、これをベクトル化すると、演算処理が長期化するか、あるいは無限ループに陥る可能性が高い。そのため、一般的には、この種のループ制御文はベクトル化しないよう予めコンパイラ側に設定を行うが、例えば、後述の特許文献1及び2の手法を用いれば、コンパイル処理にマスク演算やループ後の処理を付加することにより、上記のような繰り返し回数が不明のループ制御文であっても適正なベクトル演算が可能となる。
特開平08−272777号公報
特開平11−250035号公報
しかしながら、上記の特許文献1及び2の手法を用いた場合、マスク演算やループ後の処理といった付加的な処理を必要とされることから、その分、プログラムの実行時間が長引くという不都合がある。
本発明は、上記課題に鑑みてなされたものであり、継続条件式に非等値演算子が用いられるループ制御文が示す演算内容をベクトル命令に沿って迅速に実行し得る情報処理装置、及び、該装置のためのプログラム処理方法、並びに、コンパイル処理プログラムを提供することを目的とする。
本発明に係る情報処理装置は、ソースプログラムに対するコンパイル処理によりベクトル命令を含む目的プログラムを生成するためのコンパイル処理手段を備え、前記コンパイル処理手段は、入力されたソースプログラムから、制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文を検出する検出処理部と、前記検出処理部により検出されたループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する変形処理部とを有する。
本発明に係るプログラム処理方法は、ソースプログラムに対するコンパイル処理によりベクトル命令を含む目的プログラムを生成する情報処理装置が、ソースプログラムを入力されたとき、該ソースプログラムから制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文を検出し、該検出したループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形するという方法である。
本発明に係るコンパイル処理プログラムは、ソースプログラムに対するコンパイル処理によりベクトル命令を含む目的プログラムを生成するコンパイル処理ステップをコンピュータに実行させるコンパイル処理プログラムであって、ソースプログラムを入力されたとき、前記コンパイル処理ステップに先立ち、前記入力されたソースプログラムから、制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文を検出する検出処理ステップと、前記検出処理ステップにおいて検出されたループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する変形処理ステップとを前記コンピュータに実行させる。
本発明によれば、継続条件式に非等値演算子を使用したループ制御文を、終値を基点とした等価なループ制御文に変形することから、コンパイル処理により生成される当該ベクトル命令を単純化することができる。これにより、ループのベクトル演算を高速に実行することが可能となる。
[実施例]
以下、本発明の実施例について図面を用いて詳細に説明する。図1は、本発明による実施例の情報処理装置の構成を示すブロック図である。実施例の情報処理装置100は、本発明に係るコンパイル処理手段に対応するコンパイラ10を備える。コンパイラ10は、C言語あるいはC++言語などにより記述されたソースプログラム20に対するコンパイル処理により、ベクトル命令を含む目的プログラム30を生成することを情報処理装置100に実行させるコンパイル処理プログラムである。
以下、本発明の実施例について図面を用いて詳細に説明する。図1は、本発明による実施例の情報処理装置の構成を示すブロック図である。実施例の情報処理装置100は、本発明に係るコンパイル処理手段に対応するコンパイラ10を備える。コンパイラ10は、C言語あるいはC++言語などにより記述されたソースプログラム20に対するコンパイル処理により、ベクトル命令を含む目的プログラム30を生成することを情報処理装置100に実行させるコンパイル処理プログラムである。
コンパイラ10は、本発明の情報処理装置における検出処理部の機能を果たすループ終了条件検出部11と、変形処理部の機能を果たすループ変形部12とを有する。ループ終了条件検出部11は、コンパイラ10に入力されたソースプログラム20から、制御変数とループ不変の終値とが「!=」なる非等値演算子により関連付けられた継続条件式を有するループ制御文を検出する。ループ変形部12は、ループ終了条件検出部11が検出したループ制御文を、このループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する。
図2に示すフローチャートに沿って、情報処理装置100のコンパイル処理手順を説明する。ここでは、説明のため、処理対象となるソースプログラム20に図6に示す6−1式のfor文が含まれており、また、「(初期値)<(終値)」及び「(増分値)>0」であることと、「(終値)」はループ演算中に値が変化しないループ不変のオペランドであることとが成り立っているとする。
まず、コンパイラ10にソースプログラム20が入力されると(ステップS1)、ループ終了条件検出部11は、上記説明した検出条件に対応するループ制御文として図6の6−1式を検出する(ステップS2)。6−1式のfor文は、その継続条件式6aとして、制御変数である「i」と、ループ不変のオペランドの「(終値)」との関係が非等値演算子の「!=」により定義されたものである。ここでは、制御変数「i」の値が、「(終値)」を除き、「(初期値)」から「(増分値)」の間隔で順次増加するよう制御される。
ループ変形部12は、ループ終了条件検出部11が検出した6−1式を、これに等価なループ制御文に変換する(ステップS3)。図3に、ループ変形部12による変換結果を示す。図示の3−1式は、大小比較演算子を使用した「i<(終値)」が継続条件式3aとして設定されたfor文であり、また、他方の3−2式は、「(初期値)」の設定が空値であり、継続条件式3bとして「i!=(終値)」が設定されたfor文である。
図3に示す変換後のループ制御文に、上記の「(初期値)<(終値)」及び「(増分値)>0」なる前提を加味すると、3−1式は、制御変数「i」に与える値の遷移に関し、「(初期値)」から「(終値)」の直前までの漸増を制御し、また、他方の3−2式は、「(終値)」を含まない、それ以降の漸増を制御する。すなわち、3−1式及び3−2式の組み合わせは、「(終値)」を基点として、変換前の6−1式の制御変数「i」が取り得る値の範囲を2分割したものに相当する。よって、変換前の6−1式と、変換後の3−1式及び3−2式の組み合わせとは等価の関係にある。
ループ変形部12により変換された図3のループ制御文は、ベクトル処理が可能な従来のコンパイラと同様な処理によりベクトル命令に変換され(ステップS4)、コンパイル処理された他の命令列と共に、目的プログラム30として出力される(ステップS5)。
なお、図3に示す変換後のループ制御文のうち、「(終値)」より以降の漸増を担う3−2式は、継続条件式3bに「!=」を使用していることから、無限ループの発生や演算処理の長期化といった問題が生じ易い。よって、この3−2式は、ベクトル化する前に削除する、あるいは従来と同様に、ベクトル化されても演算を実行しないような設定を、予めコンパイラ10に行うことが望ましい。
以上説明した実施例によれば、ソースプログラム20のコンパイル処理に先立ち、継続条件式に「!=」を使用したループ制御文を、「<」のような大小比較演算子を用いた等価なループ制御文に変換することから、コンパイル処理により生成されるベクトル命令列を単純化することができる。これにより、ベクトル演算を高速に実行することが可能となる。
上記実施例で説明した図3に示すループ制御文は、制御変数「i」の値を「(初期値)」から「(終値)」に向けて漸増させることを前提として、図6の6−1式を変形したものであるが、本発明を実施するにあたっては、このような前提に依存しない汎用的なループ制御文を設定することもできる。
図4は、6−1式をループ変形部12により汎用的なものに変換した結果であり、そのアルゴリズムは、上記説明した等価なループ制御文を、「i」の増減条件に応じて生成するための判断処理を行うものとなっている。図4において、4−1式は、図3の3−1式及び3−2式と同様である。すなわち、4−1式は、6−1式のオペランドが、上記実施例にて説明した「(初期値)<(終値)」及び「(増分値)>0」の場合に適用されるループ制御文である。
また、4−2式は、6−1式のオペランドが「(初期値)>(終値)」及び「(増分値)<0」の場合、すなわち、制御変数「i」の値を「(初期値)」から「(終値)」に向けて漸減させる場合に適用するループ制御文である。
4−3式は、例えば、「(初期値)=(終値)」、又は「(増分値)=0」、又は「(初期値)<(終値)」及び「(増分値)<0」、又は「(初期値)>(終値)」及び「(増分値)>0」のように、実質的にループが形成されない場合には、制御変数「i」の値が変化せず、ベクトル化の必要はないことから、ループ制御文は6−1式のままの形状とする。また、明示的なループからの飛び出しがない限り無限ループになる場合にも、4−3式が適用される。
このように、図4に示すような汎用的なループ制御文を用いることにより、コンパイラ10は、ループ終了条件検出部11が検出するループ制御文のオペランド内容を事前に把握することなく、上記説明した実施例により生成されるベクトル命令と同様なものを生成することができる。
上記実施例では、本発明に係るループ制御文としてfor文を用いたが、for文に限らず、例えば、while文や、goto文を使用したループに適用することも可能である。また、C++言語のSTL(Standard Template Library)を利用した際は、従来知られているように、ループの継続条件式に「!=」が使用されるが、本発明は、C++言語のソースプログラムのうち、STLのvectorやvalarrayのようなメモリに対し連続的なアクセスを実行するアルゴリズムを含むものに好適である。
100 情報処理装置
10 コンパイラ
11 ループ終了条件検出部
12 ループ変形部
20 ソースプログラム
30 目的プログラム
10 コンパイラ
11 ループ終了条件検出部
12 ループ変形部
20 ソースプログラム
30 目的プログラム
Claims (9)
- ソースプログラムに対するコンパイル処理によりベクトル命令を含む目的プログラムを生成するためのコンパイル処理手段を備え、
前記コンパイル処理手段は、
入力されたソースプログラムから、制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文を検出する検出処理部と、
前記検出処理部により検出されたループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する変形処理部とを有することを特徴とする情報処理装置。 - 前記変形処理部は、前記制御変数と前記終値とが大小比較演算子により関連付けられた継続条件式を有する第1のループ制御文と、前記制御変数の初期値が空値であり且つ前記制御変数と前記終値とが非等値演算子により関連付けられた継続条件式を有する第2のループ制御文とを生成することを特徴とする請求項1記載の情報処理装置。
- 前記変形処理部は、前記制御変数の増減条件に対応した前記第1のループ制御文及び第2のループ制御文を生成することを特徴とする請求項2記載の情報処理装置。
- ソースプログラムに対するコンパイル処理によりベクトル命令を含む目的プログラムを生成する情報処理装置が、
ソースプログラムを入力されたとき、該ソースプログラムから制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文を検出し、該検出したループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形することを特徴とするプログラム処理方法。 - 前記情報処理装置が、前記検出したループ制御文を変換するとき、前記制御変数と前記終値とが大小比較演算子により関連付けられた継続条件式を有する第1のループ制御文と、前記制御変数の初期値が空値であり且つ前記制御変数と前記終値とが非等値演算子により関連付けられた継続条件式を有する第2のループ制御文とを生成することを特徴とする請求項4記載のプログラム処理方法。
- 前記情報処理装置が、前記制御変数の増減条件に対応した前記第1のループ制御文及び第2のループ制御文を生成することを特徴とする請求項5記載のプログラム処理方法。
- ソースプログラムに対するコンパイル処理によりベクトル命令を含む目的プログラムを生成するコンパイル処理ステップをコンピュータに実行させるコンパイル処理プログラムであって、
ソースプログラムを入力されたとき、前記コンパイル処理ステップに先立ち、
前記入力されたソースプログラムから、制御変数とループ不変の終値とが非等値演算子により関連付けられた継続条件式を有するループ制御文を検出する検出処理ステップと、
前記検出処理ステップにおいて検出されたループ制御文を、該ループ制御文に等価であり且つそれぞれが前記終値を基点とするループを実行するための複数のループ制御文に変形する変形処理ステップとを前記コンピュータに実行させることを特徴とするコンパイル処理プログラム。 - 前記変換処理ステップにおいて、前記制御変数と前記終値とが大小比較演算子により関連付けられた継続条件式を有する第1のループ制御文と、前記制御変数の初期値が空値であり且つ前記制御変数と前記終値とが非等値演算子により関連付けられた継続条件式を有する第2のループ制御文とを生成することを前記コンピュータに実行させることを特徴とする請求項7記載のコンパイル処理プログラム。
- 前記変換処理ステップにおいて、前記制御変数の増減条件に対応した前記第1のループ制御文及び第2のループ制御文を生成することを前記コンピュータに実行させることを特徴とする請求項8記載のコンパイル処理プログラム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2004105437A JP2005293080A (ja) | 2004-03-31 | 2004-03-31 | 情報処理装置、プログラム処理方法及びコンパイル処理プログラム |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2004105437A JP2005293080A (ja) | 2004-03-31 | 2004-03-31 | 情報処理装置、プログラム処理方法及びコンパイル処理プログラム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2005293080A true JP2005293080A (ja) | 2005-10-20 |
Family
ID=35325959
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2004105437A Withdrawn JP2005293080A (ja) | 2004-03-31 | 2004-03-31 | 情報処理装置、プログラム処理方法及びコンパイル処理プログラム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2005293080A (ja) |
-
2004
- 2004-03-31 JP JP2004105437A patent/JP2005293080A/ja not_active Withdrawn
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US9645803B2 (en) | Methods and systems for forming an adjusted perform range | |
| US5522074A (en) | Vectorization system for vectorizing loop containing condition induction variables | |
| US20010020294A1 (en) | Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program | |
| JP2005293080A (ja) | 情報処理装置、プログラム処理方法及びコンパイル処理プログラム | |
| US20070204260A1 (en) | Program transformation system | |
| JP6810380B2 (ja) | ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム | |
| JP5215813B2 (ja) | プログラム変換方法及びプログラム変換装置 | |
| Yuki et al. | Derivation of efficient FSM from loop nests | |
| JP2674489B2 (ja) | ベクトル化処理装置 | |
| JPH0440742B2 (ja) | ||
| JP3034582B2 (ja) | コンパイル処理方式 | |
| JPH0269867A (ja) | ベクトル化方式 | |
| JPH04332044A (ja) | コンパイラのベクトル化処理方式 | |
| JP2853604B2 (ja) | 無限ループのベクトル化処理方式 | |
| JP2010049315A (ja) | 最適化コンパイラおよび最適化コンパイル方法 | |
| JPH0795272B2 (ja) | コンパイル方法 | |
| JPH03110670A (ja) | ベクトル計算機 | |
| CN121560331A (zh) | 基于多级中间表示的参数化编译优化方法及系统 | |
| JP3922699B2 (ja) | ループ内不変な式の移動に関する最適化方式およびプログラム | |
| JP3734658B2 (ja) | コンパイラ装置およびコンパイラプログラムを記録したコンピュータ読取可能な記録媒体 | |
| JPH0377141A (ja) | コンパイル処理装置 | |
| JP2008015665A (ja) | プログラム解析方法及びプログラム解析装置 | |
| JP2007233805A (ja) | プログラム変換システム | |
| JPH0497484A (ja) | コンパイラのベクトル化処理方式 | |
| JPH06222928A (ja) | ループ最適化方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20070605 |