JP2002116916A - プログラムの最適化方法及びこれを用いたコンパイラ - Google Patents
プログラムの最適化方法及びこれを用いたコンパイラInfo
- Publication number
- JP2002116916A JP2002116916A JP2000304618A JP2000304618A JP2002116916A JP 2002116916 A JP2002116916 A JP 2002116916A JP 2000304618 A JP2000304618 A JP 2000304618A JP 2000304618 A JP2000304618 A JP 2000304618A JP 2002116916 A JP2002116916 A JP 2002116916A
- Authority
- JP
- Japan
- Prior art keywords
- execution time
- program
- parallel
- node
- execution
- 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.)
- Granted
Links
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/44—Encoding
- G06F8/443—Optimisation
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)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
ックに分割することにより、プログラムの実行効率を向
上させることを可能とする。 【解決手段】 処理対象のプログラムに対し、基本ブロ
ックを単位として実行時間を見積もる基本ブロック・コ
ードスケジューラ21と、基本ブロックを並列実行領域
であるハイパーブロックにまとめるハイパーブロック生
成部22及び実行時間見積部23とを備えたコンパイラ
であり、実行時間見積部23は、基本ブロックの接続が
条件分岐を伴う場合に、前記基本ブロック単位で見積も
られた実行時間に基づいて、条件分岐のまま実行する場
合と、条件分岐部分を並列実行する場合の実行時間を見
積もり、ハイパーブロック生成部22は、並列実行する
方が実行時間が短い場合、この部分を一まとまりの並列
実行領域とし、条件分岐のまま実行する方が実行時間が
短い場合、この部分をこの条件分岐にて接続された複数
の並列実行領域に分割する。
Description
グラムの最適化方法に関し、特にプログラムの条件分岐
部分を並列実行に書き換える最適化を効果的に行うため
にプログラムの最適化領域を編集する方法に関する。
プログラムのソースコードをコンパイルする際、コンピ
ュータにおける実行速度の向上を図るために、当該プロ
グラムの最適化を行っている。最適化の手法には種々の
方法があるが、米国インテル社及び米国ヒューレット・
パッカード社によるIA−64のアーキテクチャに対応
したCPUのように、VLIW(Very Long Instructio
n Word)による並列処理、すなわち、プレディケート付
き命令が実行可能でかつ命令レベルの並列実行が可能な
プロセッサ上では、分岐命令を削除して、分岐先命令群
を相補的なプレディケートを付けて並列実行することが
できる(このように命令群を変換することを、以下で
は、IF変換と呼ぶ)。このIF変換を行うことによ
り、命令数を減少したり、分岐予測の失敗を回避したり
することができるため、プログラムの実行効率を向上さ
せることが可能である。
の選び方によっては、かえって実行効率を低下させてし
まう場合がある。その原因は、並列度のハードウェア限
界の超過、レジスタープレッシャーの上昇、分岐先命令
におけるクリティカルパス長のバランスの悪さ、実行可
能性が低い命令の挿入などである。これら全ての原因を
考慮に入れてプログラムの実行効率の高低を厳密に判断
するには、各分岐命令に関して、IF変換する場合とし
ない場合のそれぞれについてコードスケジュールを実行
し、実際の命令サイクル数を見積もり、比較する必要が
ある。
命令に対して、この命令サイクル数の見積もり及び比較
を行うとすると、組み合わせの数が膨大となるため、現
実的な計算時間で終了することができない。そのため、
最適化を実行する領域(以下、この領域をハイパーブロ
ックと称し、図示する場合には四辺形などを用いて示
す)を適切に選択する必要がある。
判断を現実的な時間内で処理するため、(1)実行可能
性が最も高いと予想される実行パス(以下、メイントレ
ースと呼ぶ)中の分岐命令のみを必要に応じてIF変換
する方法や、(2)一旦、全ての分岐命令をIF変換し
最適化を施した後、リストスケジューリングの過程で必
要に応じてIF変換の逆方向の変換(以下、逆IF変換
と呼ぶ)を実行して分岐命令を再生する方法を採ってい
た。
る。 (1)メイントレース中の分岐命令のみを必要に応じて
IF変換する従来技術としては、文献1 S.A.Mahlke, R.E.Hank,R.A.Bringmann,"Effective Comp
iler Support for Predicated Execution Using the Hy
perblock"in Proceedings of the 25th International
Symposium on Microarchitecture,pp. 45-54, December
1992.に開示された技術がある。文献1に記載された従
来技術は、どの領域を並列実行し、IF変換を実行する
ことで性能向上が得られるかという課題について、発見
的手法による一つの解を与えている。文献1によれば、
まずメイントレースを特定し、このパスに対して無条件
でIF変換を実行する。次に、メイントレース以外のパ
ス(以下、サブトレースと呼ぶ)それぞれについて、同
じ並列実行領域に含めるかどうかを判断し、段階的にI
F変換を実行する領域を増大させてゆく。ある分岐命令
に対してIF変換を実行するかどうかは、以下の四つの
要因を考慮して判断する。 1.サブトレースにパイプラインを乱す命令があるかど
うか。 2.メイントレースに対するサブトレースの実行確率。 3.メイントレースに対するサブトレースの機械語命令
数の比。 4.ハードウェアの並列実行能力の限界。 この方法によれば、メイントレースの分岐命令の数をn
とすると、nに比例する程度の計算量で、IF変換を行
うかどうかの判断を終了することができる。
最適化を施した後、リストスケジューリングの過程で必
要に応じて逆IF変換を実行して分岐命令を再生する従
来技術としては、文献2 D.I.August, W.W.Hwu, S.A.Mahlke,"A Framework for B
alancing Control Flow and Predication"in Proceedin
gs of the 30th International Symposium on Microarc
hitecture,December 1997.に開示された技術がある。文
献2に記載された従来技術によれば、まず、プログラム
全体を一つの並列実行領域とし、全ての分岐命令に対し
てIF変換を行う。そして、IF変換後のプログラムに
対して種々の最適化を施し、この後、選択的に逆IF変
換を実行することによって、結果として選択的に分岐命
令をIF変換した状態を作る方法である。この方法は、
コードスケジューラと協業して、各分岐命令に関して、
逆IF変換した場合としない場合のそれぞれについて実
行サイクル数を求める。そして、どちらの実行性能が高
いかによって逆IF変換するかどうかを決定する。ただ
し、この方法を関数内の全ての分岐命令に対して適用す
ると、IF変換を行うかどうかを判断する場合と同様
に、逆IF変換の対象となる命令群の組み合わせの数が
膨大となる。そこで、リストスケジューラと協業し、ク
リティカルパスをスケジュールする場合にのみ逆IF変
換を試みることによって、計算量を抑えている。文献2
においては、分岐命令の数をnとすると、2n回程度ス
ケジューリングを行う手法を提案している。なお、クリ
ティカルパスとは、プログラム中の特定の範囲におい
て、並列化できない一連の命令列のうちで最も長い命令
列である。
技術において、(1)メイントレース中の分岐命令のみ
を必要に応じてIF変換する技術は、メイントレースの
実行効率を高めることはできるが、サブトレースの実行
効率については特に考慮されていない。したがって、必
ずしもプログラム全体の実行効率を向上させられるとは
限らない。また、特に実行可能性の高いパスが無く、メ
イントレースを厳密に特定できない場合には、どのパス
に対してIF変換を行うかを決定することが困難であ
る。そして、何らかの基準に基づいていずれかのパスに
対してIF変換を行ったとしても、他のパスの実行可能
性も十分に高いため、プログラムの実行効率を十分に向
上させることができない。
変換し最適化を施した後、リストスケジューリングの過
程で必要に応じて逆IF変換を実行して分岐命令を再生
する技術は、リストスケジューリングの過程で逆IF変
換の対象となるパスを選択しているが、依然として、所
定のパスに対してIF変換を行うかどうか(この場合は
逆IF変換により分岐命令を再生するかどうか)を判断
している。そして、この判断は、IF変換を行った場合
と行わない場合とのそれぞれに対してコードスケジュー
リングを行って、比較するという枠組みであるため、計
算量が大きい。すなわち、この従来技術においても、I
F変換を行うかどうかを判断する場合と同様に、原理的
に、IF変換を適用する領域の大きさと、コンパイルの
速度との間にトレードオフが存在する。
的な汎用コンパイラ、特にJavaにおけるJust In Ti
me Compilerなどのようにコンパイル時間に制約がある
言語処理系では、プログラム全体の十分な実行効率の向
上を図ることができなかった。また、実際の汎用の言語
処理系では、十分な実行時情報が得られないため、メイ
ントレースのような最適化すべきパスを厳密に特定する
ことは困難であり、この問題は一層深刻であった。
領域をハイパーブロックに分割することにより、ある程
度実行可能性が高い多くのパスにおける実行効率を向上
させることが可能な最適化方法を提供することを目的と
する。
明は、動的計画法に基づいた方法で、プログラムの所定
の領域全体(命令列a)を並列実行した場合の最短処理
時間の見積もりを、その領域の一部分(命令列b、cな
ど)の最短処理時間の見積もりから再帰的に計算する。
そして、命令列aの実行効率と命令列b、cを逐次に実
行した場合の実行効率とを比較し、命令列aの実行効率
の方が悪くなる場合は、命令列b及び命令列cを独立し
たハイパーブロックにする。これにより、プログラムに
おける最適化したい領域全体を、複数のハイパーブロッ
クに適切に分割する。
言語で記述されたプログラムのソースコードを機械語に
変換し、プログラムの最適化を行う最適化方法におい
て、処理対象である前記プログラムに対し、基本ブロッ
クを単位として実行時間を見積もるステップと、この基
本ブロックの接続関係を入れ子構造で表すネスト木を生
成するステップと、このネスト木のノードが条件分岐を
伴う場合に、前記基本ブロックを単位として見積もられ
た実行時間に基づいて、条件分岐のまま実行する場合
と、並列実行する場合の、このプログラムのこのノード
部分における実行時間を見積もるステップと、この見積
もりにより、並列実行する方が実行時間が短い場合は、
このノード部分を一まとまりの並列実行領域とし、条件
分岐のまま実行する方が実行時間が短い場合は、このノ
ードの複数の子ノードを複数の並列実行領域に分割する
ステップとを含むことを特徴とする。
き命令が実行可能でかつ命令レベルの並列実行が可能な
計算機にてプログラムを実行する場合に、条件分岐をそ
のまま実行するよりも命令レベルで並列実行する方が高
速に処理できるならば、この条件分岐部分を並列実行す
るように書き換えることができる。
ログラムの実行時間を見積もるステップは、前記基本ブ
ロックを単位として見積もられた実行時間に基づいて、
さらに、この基本ブロック内のプログラム部分における
クリティカルパス長と、このプログラム部分の平均並列
度とを取得するステップを含む。また、この基本ブロッ
クを、取得したクリティカルパス長及び平均並列度を辺
とする矩形で表現し、さらに、この矩形を、クリティカ
ルパス長に対応する辺がこのクリティカルパス長を下回
らない範囲で変形可能とすることができる。基本ブロッ
クについて取得されるクリティカルパス長は、この基本
ブロック内部の命令列のうちで依存関係により逐次実行
する必要のある最も長い部分の長さである。また、平均
並列度は、基本ブロックに含まれる全ての命令の数(延
べ実行時間に相当)をクリティカルパス長で割った値で
ある。すなわち、基本ブロックの命令列を、クリティカ
ルパス長を保持したまま並列に実行する場合に、どれだ
けの並列度が必要かを示す。このように平均並列度を定
義した上で、複数の基本ブロックを並列に実行した場合
に必要とされる並列度は、基本ブロックの平均並列度の
線形和になると近似する。
は、基本ブロック間の依存関係を表す依存グラフを生成
するステップと、この依存グラフから冗長な枝を取り除
いた先行制約グラフを生成するステップと、この先行制
約グラフのノードの接続関係を入れ子構造で表現するこ
とによりこのネスト木を生成するステップとを含む。ネ
スト木のノードは、プログラムの基本ブロックと、シリ
ーズスートと、パラレルスートとからなる。シリーズス
ートは基本ブロックまたはスートが依存関係を有して直
列に接続されたものであり、パラレルスートは基本ブロ
ックまたは他のスートが依存関係を持たずに並列に並ん
だものである。すなわち、基本ブロックまたはスートを
シリーズスートまたはパラレルスートの形で括っていく
ことにより、このプログラムの入れ子構造を表現する。
判断するステップは、この子ノードにおいて実行可能な
並列度ごとに、この子ノードを並列実行した場合の実行
時間の最大値を求めるステップと、各並列度における実
行時間の最大値のうち特定の値をこの条件分岐部分を並
列実行する場合における実行時間と見積もるステップと
を含む。
テップは、実行時間の判断に先立って、この子ノードを
構成する基本ブロックの命令レベルでの依存関係に基づ
いて、この基本ブロックの実行時間に関する情報を修正
するステップを含む。具体的には、シリーズスートを構
成する基本ブロックにおいて、前に位置する基本ブロッ
ク内部における最後の命令以外の命令と、後ろに位置す
る基本ブロック内部における最初の命令とが依存関係を
有する場合、このシリーズスートは基本ブロックを単に
直列に連結するよりも短い長さ(このシリーズスートの
クリティカルパス長)で実行できることとなる。
領域を決定するステップは、この複数の子ノードを複数
の並列実行領域に分割する場合に、ハードウェアが持つ
並列度で各子ノードを並列実行した場合における各子ノ
ードの実行時間を比較するステップと、この実行時間が
最も短い子ノードを残して、他の子ノードを独立した並
列実行領域とするステップとを含む。
コンピュータによるプログラムのコンパイルにおいて実
行させるコンピュータプログラムとして作成し、このコ
ンピュータプログラムを格納した記憶媒体や、このコン
ピュータプログラムを伝送する伝送装置として提供する
ことができる。
記述されたプログラムのソースコードを機械語に変換
し、プログラムの最適化を行うコンパイラにおいて、処
理対象である前記プログラムに対し、基本ブロックを単
位として実行時間を見積もる第1のコードスケジューラ
と、この基本ブロックをまとめて並列実行領域であるハ
イパーブロックを生成するハイパーブロック生成部と、
このプログラムにおける所定の領域を実行した場合の処
理時間を見積もることにより、このハイパーブロック生
成部によるこのハイパーブロックの生成を支援する実行
時間見積部と、生成されたハイパーブロックごとにコー
ドスケジューリングを行う第2のコードスケジューラと
を備え、この実行時間見積部は、この基本ブロックの接
続関係を入れ子構造で表すネスト木の所定のノードが条
件分岐を伴う場合に、前記基本ブロックを単位として見
積もられた実行時間に基づいて、条件分岐のまま実行す
る場合と、このプログラムの条件分岐部分を並列実行す
る場合の、当該プログラムの当該ノード部分における実
行時間を見積もり、このハイパーブロック生成部は、実
行時間見積部の見積もりにより、並列実行する方が実行
時間が短いノードに関して、当該ノード部分を一まとま
りの並列実行領域とし、条件分岐のまま実行する方が実
行時間が短いノードに関して、当該ノードの複数の子ノ
ードを複数の並列実行領域に分割することを特徴とす
る。
は、基本ブロックを単位として見積もられた実行時間に
基づいて、さらに、この基本ブロック内のプログラム部
分におけるクリティカルパス長と、このプログラム部分
の平均並列度とを取得する。また、この実行時間見積部
は、実行時間の判断に先立って、この子ノードを構成す
る基本ブロックの命令レベルでの依存関係に基づいて、
この基本ブロックの実行時間に関する情報を修正する。
に基づいて、この発明を詳細に説明する。まず、本発明
の概要を説明する。上述したように、本発明は、プログ
ラムのコンパイル時における最適化において、プログラ
ムの所定の領域を適切なハイパーブロックに分割する。
ラムを変形可能に定義された基本ブロックに分割し、基
本ブロック間の制御依存関係及びデータ依存関係に基づ
いて、PDG(Program Dependence Graph:依存グラ
フ)を作る。ここで、基本ブロックとは、ストレートコ
ード、すなわちコントロールフローが途中に入ることも
なく、途中から出ることもないようなコード列の範囲を
ブロックで示したものである。本発明では、後述のよう
に基本ブロックを構成する命令列のクリティカルパス長
を下回らない範囲で、変形可能に基本ブロックを定義す
る。次に、作成されたPDGをシリーズパラレルグラフ
に変換し、このシリーズパラレルグラフを基本ブロック
間の先行制約グラフとして用いる。そして、このシリー
ズパラレルグラフにおける各基本ブロック内に対してコ
ードスケジューリングを実行し、メモリ依存を超える投
機的命令移動などの最適化を実行する。なお、シリーズ
パラレルグラフの定義については後述する。
基本ブロックに関して、クリティカルパス長、平均の並
列度、消費するハードウェアリソースなどの情報を求め
ておき、これらの値を基に、基本ブロックの領域全体の
最短処理時間を再帰的に見積もる。この過程で、所定の
領域について、並列実行より逐次実行の方が処理速度が
速いと判断された場合は、当該領域に含まれる部分領域
それぞれを独立したハイパーブロックとし、当該ハイパ
ーブロックの中の全ての条件分岐命令をIF変換する。
これらの仕組みは、動的計画法を用いることにより、基
本ブロックの数に比例する計算時間で終了することがで
きる。
パイラの構成を説明する図である。図1に示すコンパイ
ラは、JavaのJust In Time Compilerである。本実
施の形態では、本発明をJust In Time Compilerに適用
する場合を例として説明するが、他の種々のプログラム
言語で記述されたプログラムに対するコンパイラに適用
できることは言うまでもない。
コンパイラは、フロントエンド最適化部10と、命令レ
ベル並列化最適化部20と、ネイティブコード生成部3
0とを備える。フロントエンド最適化部10は、Jav
aにおける処理対象のプログラムのバイトコードを入力
し、バイトコードレベルでの最適化を行うバイトコード
最適化部11と、バイトコード最適化部11により最適
化を施されたバイトコード(四つ組中間コード)に対し
て四つ組中間コードレベルでの最適化を行う四つ組中間
コード最適化部12とを備える。また、四つ組中間コー
ド最適化部12では、処理対象であるプログラムを基本
ブロックに分割する。
トエンド最適化部10により四つ組中間コードレベルま
での最適化が行われたプログラムに対して、基本ブロッ
クレベルでのコードスケジューリングを行う基本ブロッ
ク・コードスケジューラ21と、当該基本ブロック間の
依存関係に基づいてPDGを作成し、このPDGをハイ
パーブロックに適切に分割するためのハイパーブロック
生成部22及び実行時間見積部23と、ハイパーブロッ
クに分割されたプログラム全体に対するコードスケジュ
ーリングを行うグローバル・コードスケジューラ24と
を備える。
ル並列化最適化部20によりコードスケジューリングが
行われたプログラムをネイティブコードに変換するコー
ド生成部31と、コード生成部31により生成されたネ
イティブコードに対して命令レベルでのコードスケジュ
ーリングを行う命令レベル・コードスケジューラ32と
を備える。
部10とネイティブコード生成部30とは、従来のJust
In Time Compilerにおけるフロントエンド最適化部1
0及びネイティブコード生成部30と同様である。した
がって、本実施の形態は、命令レベル並列化最適化部2
0において、基本ブロックレベルでのコードスケジュー
リングを行い、ハイパーブロック生成部22及び実行時
間見積部23において、命令列の実行時間を見積もりな
がらハイパーブロックを生成した上で、全体的なコード
スケジューリングを行う点に特徴がある。また、図1に
示すJust In Time Compiler以外の、他のプログラミン
グ言語におけるコンパイラにおいても、ソースプログラ
ムを入力して構文解析を行い中間コードを生成した後
に、図1の命令レベル並列化最適化部20に相当する機
能ブロックにより、同様の命令レベルでの並列化による
最適化処理を行うことができる。
ータプログラムにより制御されたCPUにて実現される
仮想的なソフトウェアブロックである。CPUを制御す
る当該コンピュータプログラムはCD−ROMやフロッ
ピー(登録商標)ディスクなどの記憶媒体に格納した
り、ネットワークを介して伝送したりすることにより提
供される。
作について説明する。本実施の形態は、処理対象である
プログラム中の命令間の制御依存関係及びデータ依存関
係を示すPDG(Program Dependence Graph)をシリー
ズパラレルグラフに変換し、命令列の実行時間の見積も
りを再帰的に行うことにより、適切なハイパーブロック
を生成する。以下では、命令レベル並列化最適化部20
の動作について、まず概略的に説明し、次に具体的な手
法について説明する。
について詳細に説明する。図39は、処理対象のプログ
ラムの構成を基本ブロックで表現した例を示す図であ
る。図39に示した基本ブロックD、Eの組のように互
いに依存がない基本ブロックの集合(パラレルスートと
呼ぶ、定義は後述)の場合、並列に実行しても、逐次に
実行しても、プログラムの正しさは保証されているの
で、どちらで実行されると領域全体の結果が良いかどう
かを決定する必要がある。この決定は、単純には、領域
中の全てのパラレルスートを、逐次、並列のどちらかで
実行したときの全ての組み合わせに対して、全体の処理
時間と必要な並列度を求めて比較する方法で実現でき
る。その際、全体の処理時間と必要な並列度を求めるに
は、単純には、パラレルスートの実行時間を構成要素の
実行時間の合計dと論理的な並列度の最大値wとで表す
ことができる。図40は、パラレルスートの実行時間を
構成要素のパラメータ(d、w)で表現できることを説
明する図である。
がある。1.基本ブロックは、上述したように、ストレ
ートコード、すなわちコントロールフローが途中に入る
こともなく、途中から出ることもないようなコード列の
範囲をブロックで示したものである。したがって、本来
的には変形不能の矩形領域ではなく、実際には(ある制
約の下で)柔軟に移動可能な命令の集合であるが、上の
基本ブロックの定義ではこの点が考慮されていない。
2.スートを構成する際に図40に示した「すきま」が
できるため、処理時間と並列度の見積もり精度が悪い。
3.領域中のパラレルスートを並列処理する場合と逐次
処理する場合の全ての組み合わせを尽くす方法で実行時
間を見積もるため、計算時間が基本ブロックの数に応じ
て指数関数的に増加する。
クを、クリティカルパス長を下回らないという前提の下
で、縦方向(処理時間が伸びる方向)に伸ばせるように
モデル化する。このようにモデル化された基本ブロック
によるパラレルスートの例を図41に示す。図41に示
すように、パラレルスートは、基本ブロックDと基本ブ
ロックEとを変形させながら処理時間と平均並列度を見
積もることができる。これにより、より実際のプログラ
ムの構成に即した見積もりを行うことが可能となる。ま
た、基本ブロックを変形可能としたことにより、上述し
たスートにおける「すきま」を解消することもできる。
さらに、基本ブロックの横幅である平均並列度は、基本
ブロックにおける命令列の延べ実行時間とクリティカル
パス長に基づいて単純なモデル化により算出された値で
あるため、図42に示すような基本ブロック内部におけ
る隙間も、複数の基本ブロックを扱うことによってある
程度相殺されることが期待される。
見積もりを、基本ブロックの数に応じて計算時間が指数
関数的に増加することを回避して高速に実現するため
に、動的計画法を使った実現方法を説明する。本実施の
形態では、所定の領域の最短処理時間の見積もりを、当
該領域における部分領域の最短処理時間の見積もりから
再帰的に求めていく。例えば、図39の基本ブロック
D、Eの処理時間の見積もりから、それらで構成される
パラレルスートの実行時間を見積もる。この再帰処理の
1ステップを高速に実現することで、全体として高速な
実行を可能とする。この処理を実現するには、基本ブロ
ックだけでなく、パラレルスート、実行依存がある基本
ブロックの集合(シリーズスートと呼ぶ、定義は後述)
を、変形可能な矩形領域とみなせなければならない。こ
れを満たすため、基本ブロック、パラレルスート、シリ
ーズスートに関して、ハードウェアの並列度Wに対す
る、それぞれの可能な並列度w(1≦w≦W)に対する
最短処理時間の見積データを再帰的に計算していく。
スートの各場合について、上記のデータを見積もる方法
を簡単に述べる。基本ブロックに対しては、基本ブロッ
ク・コードスケジューラ21によるコードスケジューリ
ングを実行し、延べ実行時間を求める。そして、この延
べ実行時間を並列度wで割った値を、当該基本ブロック
の最短処理時間の見積もりとする。ただし、本実施の形
態における基本ブロックオン定義より、クリティカルパ
ス長は下回らないものとする。シリーズスートに対して
は、構成要素の並列度wにおける処理時間を、単純に加
算する。パラレルスートに対しては、図40のイメージ
どおり、1≦w≦Wにおける各並列度wについて、w1
+w2=wの条件を満たしながらw1を変化させ、各構
成要素を並列実行した場合の実行時間の最大値を求め、
得られた最大値の最小値を当該スートの最短処理時間の
見積もりとする。これらの手続き、すなわち再帰の1ス
テップは、最長でもW2/2に比例する計算時間で終了
する。結局、基本ブロックの数をnとすると、n×W2
に比例した計算時間で全体の処理が終了する。
る動作の具体的な手法について説明する。本実施の形態
では、上記の動的計画法を使ったハイパーブロックの生
成手法として、基本ブロックの構成のみを用いた第1の
手法と、基本ブロック内の命令レベルの依存関係をも考
慮した第2の手法とを提案する。
並列度の平均とクリティカルパス長で表される矩形領域
にモデル化する。複数の基本ブロックにおける逐次実行
時間の見積もりは、クリティカルパスの処理時間の和を
下回らないとする。また、複数の基本ブロックを並列に
実行した場合に必要とされる並列度は、基本ブロックの
平均並列度の線形和になると近似する。第2の手法は、
基本ブロックを、論理的な並列度の平均とクリティカル
パス長で表される矩形領域にモデル化すると共に、当該
基本ブロック内の命令間における依存関係(Dependence
Path)の情報を持たせる。複数の基本ブロックの逐次
実行時間の見積もりは、Dependence Pathを再構成して
クリティカルパス長を再計算し、その値を下回らないと
する。複数の基本ブロックを並列に実行した時必要とさ
れる並列度は、第1の手法と同様に扱う。基本ブロック
を、平均並列度とクリティカルパス長で表される矩形領
域に近似することにより、複数の基本ブロックを並列に
実行した場合に必要とされる並列度は、基本ブロックの
平均並列度の線形和になると近似することができ、これ
により、高速動作を実現することができる。以下、手法
ごとに詳細に説明する。なお、以下の説明において用い
られる記号を図7において定義する。図7の各定義にお
いて、nodeはノード一般を示す。したがって、以下の説
明において、特に所定のノードにおける子ノードを指す
場合には、nodeの代わりにchild1などと記述する場合も
ある。
20は、初期的に、フロントエンド最適化部10により
前処理としての最適化を施されたプログラム(中間コー
ド)を入力し、実行頻度情報やプログラムの構造に基づ
いて並列実行する領域を決定する。例えば、ある程度以
上の実行頻度を持ち、ループを含まない領域を並列実行
する領域とすることができる。ここでは、図2に示した
プログラム領域を処理対象とする。図2は、処理対象で
あるプログラムの最適化処理を行う領域の制御フローグ
ラフと当該部分の命令列のリストである。
は、当該領域内の基本ブロック毎に、あいまいなメモリ
依存の解消を伴うコードスケジューリングを行う。これ
により、各基本ブロック(図7におけるnodeとする)に
ついて、node.clと、node.allとを見積もることができ
る。
いて、node.clを縦の長さとし、node.allを面積とする
矩形領域で基本ブロックを表した図である。また、基本
ブロックの横の長さ、すなわち面積(node.all)を縦の
長さ(node.cl)で割った値を平均並列度と呼ぶ。例え
ば、図2によると、ノードAには、「imove a, 1」「im
ove b, 1」「imove c, 3」「iadd a, 1」「isub b, 1」
「cmpjmp-eq a, 1, C」という6個の命令が含まれる。
このうち、「imove a, 1」「iadd a, 1」「cmpjmp-eq
a, 1, C」は依存関係があるので、並列に実行できな
い。全部で6個の命令のうち、3個が逐次実行されるの
で、これがクリティカルパス長となる。したがって、図
3に示すようにノードAは、縦の長さが3、横の長さが
2(=6/3)の矩形として表現される。
3に示す基本ブロック間の制御依存関係及びデータ依存
関係を表すPDGを作成する。そして、作成されたPD
Gから先行制約グラフとして冗長な枝を取り除き、シリ
ーズパラレルグラフに変換する。ここで、シリーズパラ
レルグラフとは、次の三つの条件を満たすグラフであ
る。 (1)単独のノードはシリーズパラレルグラフである。 (2)シリーズパラレルグラフを二つ直列に接続したも
のはシリーズパラレルグラフである。 (3)シリーズパラレルグラフを二つ並列に接続したも
のはシリーズパラレルグラフである。 また、シリーズパラレルグラフの構成は、シリーズスー
トとパラレルスートの2種類の部分に分けることができ
る。シリーズスートとは、直列に連結(この連結をシリ
ーズコネクションと呼ぶ)された、依存関係のある一連
のシリーズスート、パラレルスート及びノードの集合で
ある。また、パラレルスートとは、並列に連結(この連
結をパラレルコネクションと呼ぶ)された、互いに依存
関係のないシリーズスート、パラレルスート及びノード
の集合である。図8は、PDGをシリーズパラレルグラ
フに変換するアルゴリズムを示す擬似プログラムであ
る。図示のアルゴリズムによる手続きは、現実的にはP
DGのノードの数に比例した計算時間で終了する。
図、図5は、図4のPDGから変換されたシリーズパラ
レルグラフを示す図である。図4、5を参照すると、例
えば、図4におけるノードAからノードDへのデータ依
存は、ノードAからノードCへの依存とノードCからノ
ードDへの依存が存在するため、冗長とみなされ、図5
に示すように取り除かれている。
述のシリーズパラレルグラフから、シリーズスートとパ
ラレルスートの入れ子関係を表すシリーズパラレルネス
ト木を生成する。シリーズパラレルネスト木とは、次の
ように定義されるノードとエッジとを持つ木構造であ
る。 ノード:シリーズパラレルグラフ中の全てのシリーズス
ートまたは全てのパラレルスートまたは全てのノードの
集合。 エッジ:所定のシリーズスートに対し、シリーズコネク
ションのみで連結された一連のシリーズスート、パラレ
ルスートまたはノードがある場合、この所定のシリーズ
スートから当該一連のスートまたはノードに対して張ら
れるエッジ。または、所定のパラレルスートに対し、パ
ラレルコネクションのみで連結された一連のシリーズス
ート、パラレルスートまたはノードがある場合、この所
定のパラレルスートからその一連のスートまたはノード
に対して張られるエッジ。図9は、シリーズパラレルグ
ラフからシリーズパラレルネスト木を生成するアルゴリ
ズムを示す疑似プログラムである。図示のアルゴリズム
による手続きは、実践的にはシリーズパラレルグラフの
ノード数に比例した時間で終了する。ただし、図示のア
ルゴリズムは、単純のため、パラレルスートが3以上の
葉ノードを持つことを許しているが、葉ノードを2つだ
け持つように変更することも容易に可能である。図6
は、図5のシリーズパラレルグラフから生成されたシリ
ーズパラレルネスト木を示す図である。なお、図5、6
において、実線で示したノードはシリーズスートを示
し、破線で示したノードはパラレルスートを示す。
行時間見積部23を用いて、シリーズパラレルネスト木
における各ノードの実行時間を再帰的に見積もり、その
結果に基づいてハイパーブロック選択処理を実行する
(図10参照)。このハイパーブロック選択処理によ
り、シリーズパラレルネスト木の各ノードに、独立した
ハイパーブロックとして扱うか否かを示す情報が付され
る。以下、ハイパーブロック選択処理について、詳細に
説明する。
体的な動作の流れを示すフローチャートである。また、
図12は、図11に対応する動作のアルゴリズムを示す
疑似プログラムである。図11を参照すると、まず、シ
リーズパラレルネスト木のノードの一つを処理対象とし
(ステップ1101)、当該ノードの属性を調べ、パラ
レルスートか、シリーズスートか、基本ブロック(単一
ノード)かを判断する(ステップ1102)。そして、
当該ノードがパラレルスートであれば、実行時間見積部
23に処理を渡して当該パラレルスートの実行時間見積
処理を行う(ステップ1103)。また、当該ノードが
シリーズスートであれば、当該ハイパーブロック選択処
理を当該ノードの子ノード(ここでは子ノード1、子ノ
ード2の二つ)に再帰的に適用した後(ステップ110
4)、当該シリーズスートの実行時間評価処理を行う
(ステップ1105)。さらに、当該ノードが基本ブロ
ック(単一ノード)であれば、単一ノードの実行時間評
価処理を行う(ステップ1106)。
実行時間見積処理では、並列度Wのときの所定のパラレ
ルスート(x)の処理時間を求めたい場合、パラレルス
ート(x)を構成するスート(y,z)について、W=
w1+w2の関係でw1を変化させながら、並列度w1
のときのスート(y)の最短処理時間及び並列度w2の
ときのスート(z)の最短処理時間の最大値を求める。
そして、w1の値ごとに得られた最大値のうちの最も小
さい値を、並列度Wのときのパラレルスート(x)の最
短処理時間として見積もる。ここで、パラレルスート
は、各ノードをまとめて一つのハイパーブロックを構成
することによって、処理時間を長くしてしまうことがあ
り得る。そこで、パラレルスート中のノードをまとめて
ハイパーブロックを構成するか否かの判断を行う。具体
的には、分岐命令削減による利得を並列実行のオーバー
ヘッドが下回っているかどうかを判断する。そして、構
成しないと判断された場合は、各ノードを分けて別のハ
イパーブロックを構成するという意味の印を付ける(no
de.hyper_block = TRUE(図7))。この際、どちらの
スートを独立したハイパーブロックにするかの判断は、
状況に応じて種々の手法で行うことができる。例えば、
単純にクリティカルパスが長い方を独立したハイパーブ
ロックとしても良いし、実行確率がわかっている場合
は、実行確率の低い方を独立したハイパーブロックとす
ることもできる。
3のパラレルスートに対する実行時間見積処理の内容を
説明するフローチャートである。図13を参照すると、
まず、処理対象であるノードの子ノード(ここでは子ノ
ード1、子ノード2の二つ)に当該ハイパーブロック選
択処理を再帰的に適用する(ステップ1301)。そし
て、パラレルスートの実行時間評価処理(ステップ13
02)及び利得見積処理(ステップ1303)を行った
後、得られた利得の値が0よりも大きいか否かを判断す
る(ステップ1304)。利得が0以下である場合は、
ノード選択処理を行う(ステップ1305)。利得が0
よりも大きい場合は、子ノード1と子ノード2の面積
(すなわち、node.all:当該ノードの延べ実行時間)の
和を親ノード(すなわち、初めに処理対象としたノー
ド)の面積とする(ステップ1306)。
2の実行時間評価処理の内容を説明するフローチャート
である。また、図15は、図14の実行時間評価処理の
動作アルゴリズムを示す疑似プログラムである。図14
を参照すると、まず、この処理の中でのみ有効な自由変
数w1の値を1に初期化する(ステップ1401)。ま
た、この処理の中でのみ有効な自由変数minの値を無
限大に初期化する(ステップ1402)。そして、変数
w1とハードウェアの並列度Wとを比較し、同じかどう
か調べる(ステップ1403)。変数w1が並列度Wと
同じでなければ、次に、この処理の中でのみ有効な自由
変数w2を0に初期化し(ステップ1404)、この変
数w2と変数w1とを比較して同じかどうか調べる(ス
テップ1405)。変数w1と変数w2とが同じでない
場合、次に、子ノード1が並列度w2のときの最短処理
時間と、子ノード2が並列度(w1−w2)のときの最
短処理時間とを比較し、大きい方の値を求める(ステッ
プ1406)。そして、得られた値と、変数minの値
とを比較し、小さい方の値を変数minの新たな値とす
る(ステップ1407)。この後、変数w2の値を1増
加し(ステップ1408)、ステップ1405の比較に
戻る。一方、変数w1と変数w2とが同じである場合
は、現時点での変数minの値を親ノード(すなわち、
初めに処理対象としたノード)が並列度w1のときの最
短処理時間とする(ステップ1409)。そして、変数
w1の値を1増加し(ステップ1410)、ステップ1
402に戻る。そして、ステップ1403の比較におい
て、変数w1と並列度Wとが同じであれば、処理を終了
する(ステップ1403)。
レルスートの最短処理時間の見積もりが得られる。実際
のCPU(ハードウェア)における並列度Wは一桁程度
の小さな数値なので、この実行時間評価処理はノード数
に比例する時間で終了することができる。
3の利得見積処理の内容を説明するフローチャートであ
る。また、図17は、図16の利得見積処理の動作アル
ゴリズムを示す疑似プログラムである。図16を参照す
ると、図14、15に示した実行時間評価処理により得
られたパラレルスートの最短処理時間の見積もりに基づ
いて、子ノード1と子ノード2とを条件分岐としてその
まま実行した場合の処理時間と、この条件分岐をプレデ
ィケート付き命令で並列実行した場合の処理時間との差
を利得として求める(ステップ1601)。
5のノード選択処理の内容を説明するフローチャートで
ある。また、図19は、図18のノード選択処理の動作
アルゴリズムを示す疑似プログラムである。図18を参
照すると、まず、ハードウェアの並列度Wのときの子ノ
ード1及び子ノード2の最短処理時間を比較する(ステ
ップ1801)。子ノード1の最短処理時間が子ノード
2の最短処理時間以下である場合、子ノード2に対して
当該子ノード2を独立したハイパーブロックとして実行
するという意味の属性を付する(ステップ1802)。
そして、子ノード1の最短処理時間の情報、依存関係を
示す情報、及び延べ実行時間の情報を親ノード(すなわ
ち、最初に処理対象としたノード)に複写する(ステッ
プ1803)。これにより、当該親ノードは、子ノード
1のみから構成されることとなる。一方、ステップ18
01の判断において、子ノード1の最短処理時間の方が
子ノード2の最短処理時間よりも大きい場合、子ノード
1に対して当該子ノード1を独立したハイパーブロック
として実行するという意味の属性を付する(ステップ1
804)。そして、子ノード2の最短処理時間の情報、
依存関係を示す情報、及び延べ実行時間の情報を親ノー
ド(すなわち、最初に処理対象としたノード)に複写す
る(ステップ1805)。これにより、当該親ノード
は、子ノード2のみから構成されることとなる。
ト木のパラレルスートに対する実行時間見積処理を終了
する。これにより、シリーズパラレルネスト木中のパラ
レルスートに関して、当該パラレルスートを構成するノ
ードを一つのハイパーブロックにまとめるか、または別
のハイパーブロックとして分岐させるかを示す情報と、
当該一つまたは二つのハイパーブロックにおける実行時
間の見積もりが得られ、当該ハイパーブロックに付され
ることとなる。
スートの実行時間評価処理では、当該シリーズスートを
構成するノードの最短処理時間を単純に加えることによ
り、当該シリーズスートにおける実行時間を粗く見積も
る。そしてさらに、平均並列度wに対して当該実行時間
が最短(最短処理時間)となるように補正する。
5のシリーズスートに対する実行時間評価処理の内容を
説明するフローチャートである。また、図21は、図2
0の実行時間評価処理の動作アルゴリズムを示す疑似プ
ログラムである。図20を参照すると、まず、処理対象
であるノードの延べ実行時間を子ノード(ここでは子ノ
ード1、子ノード2の二つ)の延べ実行時間の和とする
(ステップ2001)。次に、この処理の中でのみ有効
な自由変数wの値を1に初期化する(ステップ200
2)。そして、変数wとハードウェアの並列度Wとを比
較し、同じかどうか調べる(ステップ2003)。変数
wが並列度Wと同じでなければ、次に、処理対象である
ノードの並列度wのときの最短処理時間を、子ノード1
及び子ノード2の並列度wのときのそれぞれの最短処理
時間の和とする(ステップ2004)。そして、処理対
象であるノードの最短処理時間に変数wを乗じた値が、
子ノード1及び子ノード2の延べ実行時間とを比較し、
同じかどうか調べる(ステップ2005)。すなわち、
変数wが処理対象であるノードの平均並列度となってい
るかどうかを確認する。処理対象であるノードの最短処
理時間に変数wを乗じた値が、子ノード1及び子ノード
2の延べ実行時間とは異なっている場合、当該処理対象
であるノードの平均並列度に対する最短処理時間をステ
ップ2004で求めた値とする(ステップ2006)。
処理対象であるノードの最短処理時間に変数wを乗じた
値が、子ノード1及び子ノード2の延べ実行時間と同じ
である場合、またはステップ2006の終了後、変数w
の値を1増加し(ステップ2007)、ステップ200
3に戻る。そして、ステップ2003の比較において、
変数wが並列度Wと同じであれば、処理を終了する(ス
テップ2003)。
ドの実行時間評価処理では、クリティカルパス長を下回
らない限り、計算総量を並列度で割った値で実行できる
と見積もる。図22は、図11におけるステップ110
6の単一ノードに対する実行時間評価処理の内容を説明
するフローチャートである。また、図23は、図22の
実行時間評価処理の動作アルゴリズムを示す疑似プログ
ラムである。図22を参照すると、まず、この処理の中
でのみ有効な自由変数wを1に初期化する(ステップ2
201)。そして、変数wとハードウェアの並列度Wと
を比較し、同じかどうか調べる(ステップ2202)。
変数wが並列度Wと同じでなければ、次に、処理対象で
あるノードの最短処理時間を、基本ブロック中の延べ実
行時間を変数wで割った値とする(ステップ220
3)。そして、得られた値が基本ブロックのクリティカ
ルパス長を下回ったかどうかを判断する(ステップ22
04)。ステップ2203で算出された処理対象である
ノードの最短処理時間が、基本ブロックのクリティカル
パス長を下回っている場合、当該ノードの最短処理時間
を基本ブロックのクリティカルパス長とする(ステップ
2205)。ステップ2203で算出された処理対象で
あるノードの最短処理時間が、基本ブロックのクリティ
カルパス長を下回っていない場合、またはステップ22
05の終了後、変数wの値を1増加し(ステップ220
6)、ステップ2202に戻る。そして、ステップ22
02の比較において、変数wが並列度Wと同じであれ
ば、処理を終了する(ステップ2202)。
ート、単一ノードに対する実行時間の見積もり及び評価
を、シリーズパラレルネスト木のルートノードから葉ノ
ードへ再帰的に実行することにより、適切なハイパーブ
ロックを生成することができる。すなわち、一つのハイ
パーブロックにまとめた方が実行時間が短くなるノード
に関しては、一つのハイパーブロックにまとめられ、一
つのハイパーブロックにまとめない方が実行時間が短く
なるノードに関しては、別のハイパーブロックに分割す
る。
ックの生成例を説明する。ここでは、並列処理を実行す
る方が実行時間が短くなる例と、条件分岐を実行した方
が実行時間が短くなる例とを示すため、ハードウェアの
並列度が6である場合と3である場合とを例として説明
する。なお、図2乃至図6に示したプログラムを処理対
象とし、各命令は時間1で実行されると仮定する。ま
た、分岐処理によるペナルティ(分岐処理を行うことに
より必然的に処理に要する実行時間)を5とする。
合について説明する。例として、図6のシリーズパラレ
ルネスト木において、スート5に関し、並列度Wが3で
ある場合の実行時間の見積もりを考える。この場合、ス
ート5は構成要素である基本ブロックD、Eが並列に接
続されたパラレルスートである。したがって、図14に
示したパラレルスートに対する実行時間評価処理によ
り、基本ブロックD、Eの並列度ごとの処理時間の最大
値を求める。この場合、スート5の並列度Wが3である
から、基本ブロックD、Eの並列度は、基本ブロックD
の並列度が2、基本ブロックEの並列度が1である場合
と、基本ブロックDの並列度が1、基本ブロックEの並
列度が2である場合とが考えられる。また、図3の基本
ブロックDを表す矩形の情報から、基本ブロックDに関
しては、クリティカルパス長が3であり、平均並列度が
1(命令を並列に実行できず、逐次実行しなければなら
ないことを意味する)である。したがって、基本ブロッ
クDの処理に要する時間は、並列度に関わらず3であ
る。同様に、図3の基本ブロックEを表す矩形の情報か
ら、基本ブロックEに関しては、クリティカルパス長が
2であり、平均並列度が4である。したがって、基本ブ
ロックDの処理に要する時間は、並列度が1のときで
8、並列度が2のときで4、並列度が3のときで3、並
列度が4以上では2となる。したがって、上述した基本
ブロックDの並列度が2、基本ブロックEの並列度が1
である場合は、基本ブロックDの実行時間が3、基本ブ
ロックEの実行時間が8である。一方、基本ブロックD
の並列度が1、基本ブロックEの並列度が2である場合
は、基本ブロックDの実行時間が3、基本ブロックEの
実行時間が4である。すなわち、基本ブロックD、Eを
並列に実行するとすると、基本ブロックDの並列度が
2、基本ブロックEの並列度が1である場合は実行時間
が8となり、基本ブロックDの並列度が1、基本ブロッ
クEの並列度が2である場合は実行時間が4となる。そ
こで、スート5の最短処理時間は4と見積もることがで
きる。図24は、以上のような最短処理時間の見積もり
を、図6のシリーズパラレルネスト木における各ノード
(スート)に対して、並列度1〜6の各場合で求めた結
果を示す図である。
におけるパラレルスートであるスート5及びスート2の
実行時間見積処理においては、一つのハイパーブロック
にまとめるか、別の独立したハイパーブロックを生成す
るかの判断を行う(図13参照)。例として、スート2
の場合を考えると、図24を参照して、並列度6のとき
のスート2の最短処理時間は6となる(基本ブロックB
の並列度が2でスート3の並列度が4である場合、また
は基本ブロックB及びスート3の並列度が共に3である
場合)。これに対し、図16、17に示す利得見積処理
によれば、スート3と基本ブロックBとを、条件分岐を
そのまま実行した場合の処理時間は、並列度6のときの
基本ブロックBの最短処理時間が4、スート3の最短処
理時間が5であるから、9.5(=5+(4+5)/
2)である。したがって、条件分岐を行う場合の処理時
間は並列処理における最短処理時間よりも大きいため、
利得は0よりも大きくなる(9.5−6=3.5>
0)。これにより、スート2は一つのハイパーブロック
にまとめられることとなる(図13、ステップ130
4、1306参照)。スート2は、他のノードである基
本ブロックA、Gとシリーズスートを構成しているた
め、最大の並列度6の場合についてのみ考察すればよい
が、スート5の場合は、スート2を構成するスート3に
どれだけの並列度が割り当てられるかに応じて、それぞ
れ利得を見積もる必要がある。煩雑になるので記載は省
略するが、同様の計算を各並列度におけるスート5に対
して行うと、全ての場合で利得が0よりも大きくなる。
したがって、ハードウェアの並列度が6の場合は、全て
の基本ブロックを一つにまとめたハイパーブロックを生
成することとなる。図24において、アスタリスク
(*)の付されたスート(スート0)は、独立したハイ
パーブロックを構成するという意味の印である(図7に
おけるnode.hyper_block = TRUE)。
合について説明する。ハードウェアの並列度が6である
場合について説明したのと同様の手法で、図6のシリー
ズパラレルネスト木の各ノードに対して並列度1〜3の
各場合で求めた最短処理時間の見積もりを図25に示
す。まず、スート2について考える。スート2を並列実
行する場合、最短処理時間は12となる(基本ブロック
Bの並列度が1でスート3の並列度が2である場合)。
これに対し、図16、17に示す利得見積処理によれ
ば、スート3と基本ブロックBとを、条件分岐をそのま
ま実行した場合の処理時間は、並列度3のときの基本ブ
ロックBの最短処理時間が4、スート3の最短処理時間
が6であるから、10(=5+(6+4)/2)であ
る。したがって、利得は−2(=10−12)であり、
0よりも小さいので、スート2は二つのハイパーブロッ
クに分割される(図13、ステップ1304、1305
参照)。また、基本ブロックBとスート3とでは、スー
ト3の方が最短処理時間が大きいので、スート3を独立
のハイパーブロックとし、基本ブロックBは基本ブロッ
クA及び基本ブロックGとシリーズスートを構成するハ
イパーブロックに含める(図18参照)。次に、スート
5について考える。上述したようにスート3は、独立の
ハイパーブロックであり、当該スート3においてスート
5は、基本ブロックCおよび基本ブロックFとシリーズ
スートを構成する。したがって、スート5の並列度はハ
ードウェアの並列度3をそのまま適用できる。この場
合、スート5の最短処理時間は4である(基本ブロック
Dの並列度が1で基本ブロックEの並列度が2である場
合)。これに対し、図16、17に示す利得見積処理に
よれば、基本ブロックD、Eを、分岐条件をそのまま実
行した場合の処理時間は、並列度3のときの基本ブロッ
クD、Eとも最短処理時間が3であるから、8(=5+
(3+3)/2)である。したがって、利得は4(=8
−4)であり、0よりも大きいので、スート5は一つの
ハイパーブロックにまとめられる。以上の結果、基本ブ
ロックA、B、Gが一つのハイパーブロックを形成し、
基本ブロックC、D、E、Fが別の独立したハイパーブ
ロックを形成することとなる。図25において、アスタ
リスク(*)の付されたスート(スート0、3)は、独
立したハイパーブロックを構成するという意味の印であ
る(図7におけるnode.hyper_block = TRUE)。
の命令間における依存関係(Dependence Path)の情報
を持たせる第2の手法について説明する。第2の手法で
は、プログラムの各基本ブロックに命令レベルでの依存
関係に関する情報を持たせておく。そして、基本ブロッ
クの実行時間の見積もりの際に、この依存関係に基づい
て当該基本ブロックのクリティカルパス長を再計算す
る。
6は、図3に示した基本ブロックC、D、E、Fの内部
の命令における依存関係を説明する図である。図3に示
したように、基本ブロックCのクリティカルパス長は
1、基本ブロックDのクリティカルパス長は3、基本ブ
ロックEのクリティカルパス長は2、基本ブロックFの
クリティカルパス長は1である。したがって、第1の手
法によれば、基本ブロックC、D、E、F(図5、6の
スート3に対応)の最短処理時間は5以下にはなり得な
い(図24のスート3の欄参照)。しかし、基本ブロッ
クD、E、Fの内部の命令間の依存関係が図26に示す
ようになっていた場合、すなわち、基本ブロックDにお
ける命令と基本ブロックFにおける命令とに依存関
係があり、基本ブロックDにおける命令と基本ブロッ
クFとの間には依存関係がない場合、基本ブロックFの
命令は基本ブロックDの命令と並列に実行すること
が可能である。したがって、この命令レベルでの依存関
係を考慮することにより、スート3の最短処理時間を4
と見積もることができる。
は、基本ブロック・コードスケジューラ21において、
基本ブロック内部の命令の依存関係に関する情報を取得
する。基本ブロック・コードスケジューラ21は、ま
ず、命令間の依存関係を示す依存DAG(Directed Acy
clic Graph)の全てのパスを求める。そして、得られた
パスをその長さの降順に並べ替えておく。図27は、依
存DAGの全てのパスを、ノードへのポインタを張るこ
とによって保持するイメージを表す図である。
いて、ハイパーブロック生成部22がPDGを作成し、
PDGをシリーズパラレルグラフに変換し、さらにシリ
ーズパラレルグラフからシリーズパラレルネスト木を生
成する行程は、第1の手法と同一である。したがって、
ここでは詳細な説明を省略する。
行時間見積部23を用いて、シリーズパラレルネスト木
における各ノードの実行時間を再帰的に見積もり、その
結果に基づいてハイパーブロック選択処理を実行する
(図10参照)。このハイパーブロック選択処理によ
り、シリーズパラレルネスト木の各ノードに、独立した
ハイパーブロックとして扱うか否かを示す情報が付され
る。第2の手法におけるハイパーブロック選択処理は、
基本的には第1の手法と同様の手順で実行されるが、基
本ブロック内部の命令の依存関係を考慮し、必要に応じ
て当該基本ブロックのクリティカルパス長を変更する処
理が実行される。以下、ハイパーブロック選択処理につ
いて、詳細に説明する。
の流れは、図11を参照して説明した第1の手法と同様
である。すなわち、まず、シリーズパラレルネスト木の
ノードの一つを処理対象とし(ステップ1101)、当
該ノードの属性を調べ、パラレルスートか、シリーズス
ートか、基本ブロック(単一ノード)かを判断する(ス
テップ1102)。そして、判断結果に応じて、パラレ
ルスートの実行時間見積処理(ステップ1103)、シ
リーズスートの実行時間を評価するための処理(ステッ
プ1104、1105)、単一ノードの実行時間評価処
理を行う(ステップ1106)。
(ステップ1103)も、実行時間評価処理の内容を除
き、全体的な動作の流れは図13を参照して説明した第
1の手法と同様である。すなわち、まず、処理対象であ
るノードの子ノードに対して当該ハイパーブロック選択
処理を再帰的に適用する(ステップ1301)。そし
て、パラレルスートの実行時間評価処理(ステップ13
02)及び利得見積処理(ステップ1303)を行った
後、得られた利得の値が0よりも大きいか否かを判断す
る(ステップ1304)。利得が0よりも大きい場合
は、ノード選択処理を行う(ステップ1305)。利得
が0以下である場合は、子ノード1と子ノード2の面積
(すなわち、node.all:当該ノードの延べ実行時間)の
和を親ノード(すなわち、初めに処理対象としたノー
ド)の面積とする(ステップ1306)。
おけるステップ1302の実行時間評価処理の内容を説
明するフローチャートである。また、図29は、図28
の実行時間評価処理の動作アルゴリズムを示す疑似プロ
グラムである。図28を参照すると、まず、この処理の
中でのみ有効な自由変数w1の値を1に初期化する(ス
テップ2801)。また、この処理の中でのみ有効な自
由変数min及びmin2の値を無限大に初期化する
(ステップ2802)。そして、変数w1とハードウェ
アの並列度Wとを比較し、同じかどうか調べる(ステッ
プ2803)。変数w1が並列度Wと同じでなければ、
次に、この処理の中でのみ有効な自由変数w2を0に初
期化し(ステップ2804)、この変数w2と変数w1
とを比較して同じかどうか調べる(ステップ280
5)。変数w1と変数w2とが同じでない場合、次に、
子ノード1が並列度w2のときの最短処理時間と、子ノ
ード2が並列度(w1−w2)のときの最短処理時間と
を比較し、大きい方の値を求める(ステップ280
6)。そして、得られた値と、変数minの値とを比較
し、小さい方の値を変数minの新たな値とする(ステ
ップ2807)。また、子ノード1が並列度w2のクリ
ティカルパス長を無視した場合の処理時間と、子ノード
2が並列度(w1−w2)のときのクリティカルパス長
を無視した場合の処理時間とを比較し、大きい方の値を
求める(ステップ2808)、そして、得られた値と、
変数min2の値とを比較し、小さい方の値を新たなm
in2の値とする(ステップ2809)。この後、変数
w2の値を1増加し(ステップ2810)、ステップ2
805の比較に戻る。一方、変数w1と変数w2とが同
じである場合は、現時点での変数minの値を親ノード
(すなわち、初めに処理対象としたノード)が並列度w
1のときの最短処理時間とし、現時点での変数min2
の値を当該親ノードのクリティカルパス長を無視した場
合の処理時間とする(ステップ2811)。そして、変
数w1の値を1増加し(ステップ2812)、ステップ
2802に戻る。そして、ステップ2803の比較にお
いて、変数w1と並列度Wとが同じであれば、依存パス
融合処理(ステップ2813)を行った後に実行時間評
価処理を終了する。
3の依存パス融合処理の内容を説明するフローチャート
である。なお、依存パスとは、依存DAGにおいて命令
間の依存関係を表すパスである。また、図30におい
て、node.n_exec_pathは、ノードにおける依存パスの数
を示す。図30を参照すると、まず、親ノードにおける
依存パスの数を子ノード1における依存パスの数と子ノ
ード2における依存パスの数の和とする(ステップ30
01)。次に、この処理の中でのみ有効な自由変数n
1、n2、nを0に初期化する(ステップ3002)。
そして、変数nと親ノードの依存パスの数とを比較し、
同じかどうか調べる(ステップ3003)。変数nと親
ノードの依存パスの数とが同じでない場合、次に、子ノ
ード1のn1番目の依存パスの長さと、子ノード2のn
2番目の依存パスとの長さを比較する(ステップ300
4)。そして、子ノード1のn1番目の依存パスの方が
長い場合は、親ノードのn番目の依存パスを、子ノード
1のn1番目の依存パスとし、変数n1の値を1増加す
る(ステップ3005)。また、子ノード2のn2番目
の依存パスの方が長い場合は、親ノードのn番目の依存
パスを、子ノード2のn2番目の依存パスとし、変数n
2の値を1増加する(ステップ3006)。ステップ3
005またはステップ3006の後、変数nの値を1増
加し(ステップ3007)、ステップ3003へ戻る。
そして、変数nと親ノードの依存パスの数とが同じなら
ば、依存パス融合処理を終了する(ステップ300
3)。
レルスートの最短処理時間の見積もりが得られる。上記
のように、第2の手法では、クリティカルパス長を無視
した(すなわち、実行時間がクリティカルパス長を下回
ることを許す)場合の処理時間の見積もり(図7のnod
e.best_time2)も計算される。この値は、後述するシリ
ーズスートの実行時間の評価において用いられる。ま
た、依存パス融合処理において、依存パスの融合とソー
トが行われる。子ノード1、2の依存パスは、基本ブロ
ック・コードスケジューラ21により長いものから降順
にソートしてあるので、これを用いて親ノードにおける
依存パスが再構成される。
おけるステップ1105のシリーズスートに対する実行
時間評価処理の内容を説明するフローチャートである。
また、図32は、図31の実行時間評価処理の動作アル
ゴリズムを示す疑似プログラムである。図31を参照す
ると、まず、処理対象であるノードの延べ実行時間を、
子ノード1、2の延べ実行時間の和とする(ステップ3
101)。次に、クリティカルパス長再計算処理(ステ
ップ3102)、最短処理時間計算処理(ステップ31
03)を順次実行する。
2のクリティカルパス長再計算処理内容を説明するフロ
ーチャートである。図33を参照すると、まず、この処
理の中でのみ有効な自由変数n1、idxを0に初期化
する(ステップ3301)。そして、変数n1の値と子
ノード1の依存パスの数とを比較し、同じかどうかを調
べる(ステップ3302)。変数n1の値と子ノード1
の依存パスの数とが同じでない場合、次に、この処理の
中でのみ有効な自由変数n2を0に初期化する(ステッ
プ3303)。そして、変数n2の値と子ノード2の依
存パスの数とを比較し、同じかどうかを調べる(ステッ
プ3304)。変数n2の値と子ノード2の依存パスの
数とが同じでない場合、次に、子ノード1のn1番目の
依存パスの最後のノードが、子ノード2のn2番目の依
存パスの最初のノードに依存しているかどうか調べる
(ステップ3305)。そして、依存しているならば、
当該子ノード1のn1番目の依存パスと子ノード2のn
2番目の依存パスとを結合し、親ノード(すなわち、初
めに処理対象としたノード)のidx番目の依存パスと
する(ステップ3306)。ステップ3306の処理の
後、及びステップ3305において、子ノード1のn1
番目の依存パスの最後のノードが、子ノード2のn2番
目の依存パスの最初のノードに依存していない場合、変
数w2の値を1増加し(ステップ3307)、ステップ
3304に戻る。一方、ステップ3304において、変
数n2の値と子ノード2の依存パスの数とが同じなら
ば、変数n1の値を1増加し(ステップ3308)、ス
テップ3302へ戻る。そして、ステップ3302にお
いて、変数n1の値と子ノード1の依存パスの数とが同
じならば、処理を終了する。
の子ノードにおいて、その子ノード中の命令の依存パス
を連結し、この連結された依存パスの長さに基づいてソ
ートした上で、当該シリーズスートのクリティカルパス
長を再計算する。これにより、子ノード中の命令の依存
関係によっては、当該シリーズスート全体におけるクリ
ティカルパス長を、子ノードのクリティカルパス長を単
純に足した場合よりも短くすることができる。
3の最短処理時間計算処理の内容を説明するフローチャ
ートである。図34を参照すると、まず、親ノードの依
存パスを長さの降順にソートする(ステップ340
1)。次に、この処理の中でのみ有効な自由変数wを0
に初期化する(ステップ3402)。そして、変数wと
ハードウェアの並列度Wとを比較し、同じかどうかを調
べる(ステップ3403)。変数wと並列度Wとが同じ
でない場合、クリティカルパス長を考慮しない場合にお
ける親ノードの実行時間を、子ノード1、2のクリティ
カルパス長を考慮しない場合における実行時間の和とす
る(ステップ3404)。そして、変数wの値を1増加
し(ステップ3405)、ステップ3403へ戻る。ス
テップ3403において、変数wと並列度Wとが同じで
あれば、処理を終了する。
るクリティカルパス長を考慮しない場合における最短処
理時間の和において、再計算された当該シリーズスート
のクリティカルパス長を下回らない値を当該シリーズス
ートの最短処理時間と見積もることができる。
おけるステップ1106の単一ノードに対する実行時間
評価処理の内容を説明するフローチャートである。ま
た、図36は、図35の実行時間評価処理の動作アルゴ
リズムを示す疑似プログラムである。図35を参照する
と、まず、この処理の中でのみ有効な自由変数wを1に
初期化する(ステップ3501)。そして、変数wとハ
ードウェアの並列度Wとを比較し、同じかどうか調べる
(ステップ3502)。変数wが並列度Wと同じでなけ
れば、次に、処理対象であるノードの最短処理時間を、
基本ブロック中の延べ実行時間を変数wで割った値とす
る(ステップ3503)。また、処理対象であるノード
のクリティカルパスを考慮しない場合における実行時間
も、基本ブロック中の延べ実行時間を変数wで割った値
とする(ステップ3504)。そして、ステップ350
3で得られた値が基本ブロックのクリティカルパス長を
下回ったかどうかを判断する(ステップ3505)。ス
テップ3503で算出された処理対象であるノードの最
短処理時間が、基本ブロックのクリティカルパス長を下
回っている場合、当該ノードの最短処理時間を基本ブロ
ックのクリティカルパス長とする(ステップ350
6)。ステップ3503で算出された処理対象であるノ
ードの最短処理時間が、基本ブロックのクリティカルパ
ス長を下回っていない場合、またはステップ3506の
終了後、変数wの値を1増加し(ステップ3507)、
ステップ3502に戻る。そして、ステップ3502の
比較において、変数wが並列度Wと同じであれば、処理
を終了する(ステップ3502)。
ク・コードスケジューラ21において依存DAGのパス
(依存パス)のソートを行う。この処理は、依存パスの
数をmとした場合、m×log mに比例する計算時間を要
する。また、依存パスの連結には最長でm2に比例する
計算時間を要し、連結された依存パスのソートにやはり
m×log mに比例する計算時間を要する。したがって、
上述した処理は、最長でn×m2に比例する計算時間を
要することとなる。しかしながら、プログラム中の最適
化しようとする部分が多くの基本ブロックに分割されて
いる場合、依存パスの数mは小さな値となる。したがっ
て、実践的には大きな計算時間を要しないで実行が可能
である。
算例を説明する。図37は、図2、3のプログラムに対
して第2の手法により得られた最短処理時間の見積もり
を、図6のシリーズパラレルネスト木における各ノード
(スート)に対して、並列度1〜6の各場合で求めた結
果を示す図である。また、図38は、基本ブロックのク
リティカルパス長を無視した場合における最短処理時間
の見積もりを、同様にして求めた結果を示す図である。
ここで、基本ブロックD、E、Fの内部における命令の
依存関係は、図26に示したようになっている。
短処理時間の見積もりを示す図24と、図37とを比較
すると、基本ブロックD、E、Fの命令の依存関係が、
スート3における見積もりの結果に現れている。スート
3は、基本ブロックFとスート4とで構成されたシリー
ズスートである。ここで、スート3における並列度6の
場合の最短処理時間は図37によれば4であり、図24
の場合における5よりも1だけ少なくなっている。そし
て、この値は、図38における該当個所の最短処理時間
が4であることから、再計算されたクリティカルパス長
を下回らないことがわかる。したがって、この場合のス
ート3の最短処理時間は4と見積もられ、第1の手法の
場合と比べて最適化が進んでいる。
プログラムの所定の領域に対して高速かつ適切なハイパ
ーブロックの生成を行うことができるため、最適化処理
において、ある程度実行可能性が高い多くのパスにおけ
る実行効率を向上させることができる。
成を説明する図である。
う領域の制御フローグラフと当該部分の命令列のリスト
を示す図である。
e.clを縦の長さとし、node.allを面積とする矩形領域で
基本ブロックを表した図である。
ルグラフを示す図である。
たシリーズパラレルネスト木を示す図である。
した図表である。
アルゴリズムを示す擬似プログラムを示す図である。
ルネスト木を生成するアルゴリズムを示す疑似プログラ
ムを示す図である。
成部の全体動作を説明するフローチャートである。
の流れを示すフローチャートである。
す疑似プログラムを示す図である。
の内容を説明するフローチャートである。
チャートである。
ズムを示す疑似プログラムを示す図である。
ートである。
を示す疑似プログラムを示す図である。
ャートである。
ムを示す疑似プログラムを示す図である。
の内容を説明するフローチャートである。
ズムを示す疑似プログラムを示す図である。
容を説明するフローチャートである。
ズムを示す疑似プログラムを示す図である。
ズパラレルネスト木における各ノード(スート)に対し
て、並列度1〜6の各場合で求めた結果を示す図であ
る。
ズパラレルネスト木における各ノード(スート)に対し
て、並列度1〜3の各場合で求めた結果を示す図であ
る。
の内部の命令における依存関係を説明する図である。
インタを張ることによって保持するイメージを表す図で
ある。
内容を説明するフローチャートである。
ズムを示す疑似プログラムを示す図である。
チャートを示す図である。
する実行時間評価処理の内容を説明するフローチャート
である。
ズムを示す疑似プログラムである。
するフローチャートである。
ローチャートである。
実行時間評価処理の内容を説明するフローチャートであ
る。
ズムを示す疑似プログラムである。
見積もりを、図6のシリーズパラレルネスト木における
各ノード(スート)に対して、並列度1〜6の各場合で
求めた結果を示す図である。
した場合における最短処理時間の見積もりを、同様にし
て求めた結果を示す図である。
クで表現した例を示す図である。
ラメータ(d、w)で表現できることを説明する図であ
る。
ルスートの例を示す図である。
図である。
適化部、12…四つ組中間コード最適化部、20…命令
レベル並列化最適化部、21…基本ブロック・コードス
ケジューラ、22…ハイパーブロック生成部、23…実
行時間見積部、24…グローバル・コードスケジュー
ラ、30…ネイティブコード生成部、31…コード生成
部、32…命令レベル・コードスケジューラ
Claims (15)
- 【請求項1】 プログラミング言語で記述されたプログ
ラムのソースコードを機械語に変換し、プログラムの最
適化を行う最適化方法において、 処理対象である前記プログラムに対し、基本ブロックを
単位として実行時間を見積もるステップと、 前記基本ブロックの接続関係を入れ子構造で表すネスト
木を生成するステップと、 前記ネスト木のノードが条件分岐を伴う場合に、前記基
本ブロックを単位として見積もられた実行時間に基づい
て、条件分岐のまま実行する場合と、当該プログラムの
条件分岐部分を並列実行する場合の、当該プログラムの
当該ノード部分における実行時間を見積もるステップ
と、 前記見積もりにより、並列実行する方が実行時間が短い
場合は、当該ノード部分を一まとまりの並列実行領域と
し、条件分岐のまま実行する方が実行時間が短い場合
は、当該ノードの複数の子ノードを複数の並列実行領域
に分割するステップとを含むことを特徴とするプログラ
ムの最適化方法。 - 【請求項2】 前記基本ブロックを単位として実行時間
を見積もるステップは、 前記基本ブロックを単位として見積もられた実行時間に
基づいて、さらに、前記基本ブロック内のプログラム部
分におけるクリティカルパス長と、当該プログラム部分
の平均並列度とを取得するステップを含む請求項1に記
載のプログラムの最適化方法。 - 【請求項3】 前記ネスト木を生成するステップは、 前記基本ブロック間の依存関係を表す依存グラフを生成
するステップと、 前記依存グラフから冗長な枝を取り除いた先行制約グラ
フを生成するステップと、 前記先行制約グラフのノードの接続関係を入れ子構造で
表現することにより前記ネスト木を生成するステップと
を含む請求項1に記載のプログラムの最適化方法。 - 【請求項4】 前記条件分岐部分の実行時間を判断する
ステップは、 前記子ノードにおいて実行可能な並列度ごとに、当該子
ノードを並列実行した場合の実行時間の最大値を求める
ステップと、 各並列度における前記実行時間の最大値のうち特定の値
を前記条件分岐部分を並列実行する場合における実行時
間と見積もるステップとを含む請求項1に記載のプログ
ラムの最適化方法。 - 【請求項5】 前記条件分岐部分の実行時間を判断する
ステップは、 実行時間の判断に先立って、前記子ノードを構成する前
記基本ブロックの命令レベルでの依存関係に基づいて、
前記基本ブロックの実行時間に関する情報を修正するス
テップを含む請求項1に記載のプログラムの最適化方
法。 - 【請求項6】 前記プログラムの並列実行領域を決定す
るステップは、 前記複数の子ノードを複数の並列実行領域に分割する場
合に、ハードウェアが持つ並列度で各子ノードを並列実
行した場合における当該各子ノードの実行時間を比較す
るステップと、 前記実行時間が最も短い子ノードを残して、他の子ノー
ドを独立した並列実行領域とするステップとを含む請求
項1に記載のプログラムの最適化方法。 - 【請求項7】 プログラミング言語で記述されたプログ
ラムのソースコードを機械語に変換し、プログラムの最
適化を行う最適化方法において、 処理対象である前記プログラムの条件分岐部分を、プレ
ディケート付き命令が実行可能でかつ命令レベルの並列
実行が可能な計算機にて並列実行する場合の実行時間を
見積もるステップと、 見積もられた前記実行時間が、前記条件分岐部分をその
まま実行した場合の実行時間よりも短い場合に、当該条
件分岐部分を前記プレディケート付き命令による並列実
行を行うように書き換えるステップとを含み、 前記並列実行時の実行時間を見積もるステップは、 前記プログラムに対し、基本ブロックを単位として実行
時間を見積もり、当該実行時間に基づいて、各基本ブロ
ック内のプログラム部分におけるクリティカルパス長
と、当該プログラム部分の平均並列度とを求めるステッ
プと、 前記条件分岐による分岐先である基本ブロックを、前記
クリティカルパス長及び平均並列度の情報に基づいて、
実行可能な並列度ごとに、当該基本ブロックを並列実行
した場合の実行時間の最大値を求めるステップと、 各並列度における前記実行時間の最大値のうちの特定の
値を前記条件分岐部分を並列実行する場合における実行
時間と見積もるステップとを含むことを特徴とするプロ
グラムの最適化方法。 - 【請求項8】 前記基本ブロックのクリティカルパス長
及び平均並列度とを求めるステップは、前記基本ブロッ
クを、隣り合う2辺の一方の値を前記クリティカルパス
長とし、他方の値を前記平均並列度値とすると共に、ク
リティカルパス長に対応する辺が当該クリティカルパス
長を下回らない範囲で変形可能とした矩形で表現するス
テップを含む請求項7に記載のプログラムの最適化方
法。 - 【請求項9】 前記条件分岐部分の実行時間を見積もる
ステップは、実行時間の判断に先立って、前記基本ブロ
ックの命令レベルでの依存関係に基づいて、前記基本ブ
ロックの実行時間に関する情報を修正するステップを含
む請求項7に記載のプログラムの最適化方法。 - 【請求項10】 プログラミング言語で記述されたプロ
グラムのソースコードを機械語に変換し、プログラムの
最適化を行うコンパイラにおいて、 処理対象である前記プログラムに対し、基本ブロックを
単位として実行時間を見積もる第1のコードスケジュー
ラと、 前記基本ブロックをまとめて並列実行領域であるハイパ
ーブロックを生成するハイパーブロック生成部と、 前記プログラムにおける所定の領域を実行した場合の処
理時間を見積もることにより、前記ハイパーブロック生
成部による前記ハイパーブロックの生成を支援する実行
時間見積部と、 生成された前記ハイパーブロックごとにコードスケジュ
ーリングを行う第2のコードスケジューラとを備え、 前記実行時間見積部は、 前記基本ブロックの接続関係を入れ子構造で表すネスト
木の所定のノードが条件分岐を伴う場合に、前記基本ブ
ロックを単位として見積もられた実行時間に基づいて、
条件分岐のまま実行する場合と、当該プログラムの条件
分岐部分を並列実行する場合の、当該プログラムの当該
ノード部分における実行時間を見積もり、 前記ハイパーブロック生成部は、 前記実行時間見積部の見積もりにより、並列実行する方
が実行時間が短いノードに関して、当該ノード部分を一
まとまりの並列実行領域とし、条件分岐のまま実行する
方が実行時間が短いノードに関して、当該ノードの複数
の子ノードを複数の並列実行領域に分割することを特徴
とするコンパイラ。 - 【請求項11】 前記第1のコードスケジューラは、基
本ブロックを単位として見積もられた実行時間に基づい
て、さらに、前記基本ブロック内のプログラム部分にお
けるクリティカルパス長と、当該プログラム部分の平均
並列度とを取得する、請求項10に記載のコンパイラ。 - 【請求項12】 前記実行時間見積部は、 前記子ノードにおいて実行可能な並列度ごとに、当該子
ノードを並列実行した場合の実行時間の最大値を求め、 各並列度における前記実行時間の最大値のうちの特定の
値を前記条件分岐部分を並列実行する場合における実行
時間と見積もる、請求項10に記載のコンパイラ。 - 【請求項13】 前記実行時間見積部は、実行時間の判
断に先立って、前記子ノードを構成する前記基本ブロッ
クの命令レベルでの依存関係に基づいて、前記基本ブロ
ックの実行時間に関する情報を修正する、請求項10に
記載のコンパイラ。 - 【請求項14】 コンピュータに実行させるプログラム
を当該コンピュータの入力手段が読取可能に記憶した記
憶媒体において、 処理対象であるプログラムに対し、基本ブロックを単位
として実行時間を見積もる処理と、 前記基本ブロックの接続関係を入れ子構造で表すネスト
木を生成する処理と、 前記ネスト木のノードが条件分岐を伴う場合に、前記基
本ブロックを単位として見積もられた実行時間に基づい
て、条件分岐のまま実行する場合と、当該プログラムの
条件分岐部分を並列実行する場合のどちらが前記プログ
ラムの当該ノード部分における実行時間が短くなるかを
判断する処理と、 並列実行する方が実行時間が短いと判断した場合は、当
該ノード部分を一まとまりの並列実行領域とし、条件分
岐のまま実行する方が実行時間が短いと判断した場合
は、当該ノードの複数の子ノードを複数の並列実行領域
に分割する処理とを前記コンピュータに実行させること
を特徴とする記憶媒体。 - 【請求項15】 コンピュータに、 処理対象であるプログラムに対し、基本ブロックを単位
として実行時間を見積もる処理と、前記基本ブロックの
接続関係を入れ子構造で表すネスト木を生成する処理
と、前記ネスト木のノードが条件分岐を伴う場合に、前
記基本ブロックを単位として見積もられた実行時間に基
づいて、条件分岐のまま実行する場合と、当該プログラ
ムの条件分岐部分を並列実行する場合のどちらが前記プ
ログラムの当該ノード部分における実行時間が短くなる
かを判断する処理と、並列実行する方が実行時間が短い
と判断した場合は、当該ノード部分を一まとまりの並列
実行領域とし、条件分岐のまま実行する方が実行時間が
短いと判断した場合は、当該ノードの複数の子ノードを
複数の並列実行領域に分割する処理とを実行させるプロ
グラムを記憶する記憶手段と、 前記記憶手段から前記プログラムを読み出して当該プロ
グラムを送信する送信手段とを備えたことを特徴とする
プログラム伝送装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000304618A JP3664473B2 (ja) | 2000-10-04 | 2000-10-04 | プログラムの最適化方法及びこれを用いたコンパイラ |
US09/970,025 US6817013B2 (en) | 2000-10-04 | 2001-10-04 | Program optimization method, and compiler using the same |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000304618A JP3664473B2 (ja) | 2000-10-04 | 2000-10-04 | プログラムの最適化方法及びこれを用いたコンパイラ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002116916A true JP2002116916A (ja) | 2002-04-19 |
JP3664473B2 JP3664473B2 (ja) | 2005-06-29 |
Family
ID=18785634
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000304618A Expired - Fee Related JP3664473B2 (ja) | 2000-10-04 | 2000-10-04 | プログラムの最適化方法及びこれを用いたコンパイラ |
Country Status (2)
Country | Link |
---|---|
US (1) | US6817013B2 (ja) |
JP (1) | JP3664473B2 (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006061926A1 (ja) * | 2004-12-09 | 2006-06-15 | National University Corporation NARA Institute of Science and Technology | 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置 |
JP2007537529A (ja) * | 2004-05-13 | 2007-12-20 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 多重命令語処理装置におけるフィードバック接続の実行時間選択 |
JP2010134614A (ja) * | 2008-12-03 | 2010-06-17 | Internatl Business Mach Corp <Ibm> | 並列化処理方法、システム、及びプログラム |
JP2010262471A (ja) * | 2009-05-07 | 2010-11-18 | Mitsubishi Electric Corp | 並列化スケジューリング装置 |
US8181171B2 (en) | 2006-02-20 | 2012-05-15 | Fujitsu Limited | Method and apparatus for analyzing large scale program and generation of code from degenerated program dependence graph |
JP2014160453A (ja) * | 2013-01-23 | 2014-09-04 | Waseda Univ | 並列性の抽出方法及びプログラムの作成方法 |
US9250973B2 (en) | 2009-03-12 | 2016-02-02 | Polycore Software, Inc. | Apparatus and associated methodology of generating a multi-core communications topology |
Families Citing this family (81)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7730001B2 (en) * | 2001-02-09 | 2010-06-01 | International Business Machines Corporation | Computer system program and method to characterize each of a plurality of objects used at runtime to determine a lowest cost property among a plurality of potential alternative properties for each of said objects minimizing total cost of interaction among components during program execution |
US20030037319A1 (en) * | 2001-08-20 | 2003-02-20 | Ankur Narang | Method and apparatus for partitioning and placement for a cycle-based simulation system |
US20030145313A1 (en) * | 2002-01-30 | 2003-07-31 | Sun Microsystems, Inc. | Enhanced instruction scheduling after register allocation by employing traces |
JP3870112B2 (ja) * | 2002-03-13 | 2007-01-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、コンパイル装置、及びコンパイル用プログラム |
US7143403B2 (en) * | 2002-06-18 | 2006-11-28 | Hewlett-Packard Development Company, L.P. | System and method for merging control flow paths |
US7065759B2 (en) * | 2002-06-18 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | System and method for assigning basic blocks to computer control flow paths |
US7086038B2 (en) * | 2002-10-07 | 2006-08-01 | Hewlett-Packard Development Company, L.P. | System and method for creating systolic solvers |
US7765532B2 (en) * | 2002-10-22 | 2010-07-27 | Oracle America, Inc. | Inducing concurrency in software code |
US7346902B2 (en) * | 2002-10-22 | 2008-03-18 | Sun Microsystems, Inc. | System and method for block-based concurrentization of software code |
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 |
US7299458B2 (en) * | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US7581081B2 (en) | 2003-03-31 | 2009-08-25 | Stretch, Inc. | Systems and methods for software extensible multi-processing |
US8001266B1 (en) | 2003-03-31 | 2011-08-16 | Stretch, Inc. | Configuring a multi-processor system |
US7613900B2 (en) | 2003-03-31 | 2009-11-03 | Stretch, Inc. | Systems and methods for selecting input/output configuration in an integrated circuit |
US7590829B2 (en) * | 2003-03-31 | 2009-09-15 | Stretch, Inc. | Extension adapter |
US7210127B1 (en) * | 2003-04-03 | 2007-04-24 | Sun Microsystems | Methods and apparatus for executing instructions in parallel |
US7418575B2 (en) * | 2003-07-29 | 2008-08-26 | Stretch, Inc. | Long instruction word processing with instruction extensions |
US7373642B2 (en) * | 2003-07-29 | 2008-05-13 | Stretch, Inc. | Defining instruction extensions in a standard programming language |
US7600221B1 (en) * | 2003-10-06 | 2009-10-06 | Sun Microsystems, Inc. | Methods and apparatus of an architecture supporting execution of instructions in parallel |
US7689958B1 (en) | 2003-11-24 | 2010-03-30 | Sun Microsystems, Inc. | Partitioning for a massively parallel simulation system |
CN100390791C (zh) * | 2004-05-31 | 2008-05-28 | 国际商业机器公司 | 流程图的编辑、重组验证、创建和转换的方法和装置 |
US7971191B2 (en) * | 2004-06-10 | 2011-06-28 | Hewlett-Packard Development Company, L.P. | System and method for analyzing a process |
JP3901181B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
US8849968B2 (en) | 2005-06-20 | 2014-09-30 | Microsoft Corporation | Secure and stable hosting of third-party extensions to web services |
US8209524B2 (en) * | 2005-08-29 | 2012-06-26 | The Invention Science Fund I, Llc | Cross-architecture optimization |
US8181004B2 (en) * | 2005-08-29 | 2012-05-15 | The Invention Science Fund I, Llc | Selecting a resource management policy for a resource available to a processor |
US8375247B2 (en) * | 2005-08-29 | 2013-02-12 | The Invention Science Fund I, Llc | Handling processor computational errors |
US8255745B2 (en) * | 2005-08-29 | 2012-08-28 | The Invention Science Fund I, Llc | Hardware-error tolerant computing |
US7774558B2 (en) * | 2005-08-29 | 2010-08-10 | The Invention Science Fund I, Inc | Multiprocessor resource optimization |
US7877584B2 (en) * | 2005-08-29 | 2011-01-25 | The Invention Science Fund I, Llc | Predictive processor resource management |
US7739524B2 (en) * | 2005-08-29 | 2010-06-15 | The Invention Science Fund I, Inc | Power consumption management |
US7627739B2 (en) * | 2005-08-29 | 2009-12-01 | Searete, Llc | Optimization of a hardware resource shared by a multiprocessor |
US20070050608A1 (en) * | 2005-08-29 | 2007-03-01 | Searete Llc, A Limited Liability Corporatin Of The State Of Delaware | Hardware-generated and historically-based execution optimization |
US8423824B2 (en) | 2005-08-29 | 2013-04-16 | The Invention Science Fund I, Llc | Power sparing synchronous apparatus |
US8214191B2 (en) * | 2005-08-29 | 2012-07-03 | The Invention Science Fund I, Llc | Cross-architecture execution optimization |
US7779213B2 (en) * | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US8516300B2 (en) | 2005-08-29 | 2013-08-20 | The Invention Science Fund I, Llc | Multi-votage synchronous systems |
US7725693B2 (en) * | 2005-08-29 | 2010-05-25 | Searete, Llc | Execution optimization using a processor resource management policy saved in an association with an instruction group |
US7647487B2 (en) * | 2005-08-29 | 2010-01-12 | Searete, Llc | Instruction-associated processor resource optimization |
US7512842B2 (en) * | 2005-08-29 | 2009-03-31 | Searete Llc | Multi-voltage synchronous systems |
US8074231B2 (en) * | 2005-10-26 | 2011-12-06 | Microsoft Corporation | Configuration of isolated extensions and device drivers |
US20070162415A1 (en) * | 2005-12-30 | 2007-07-12 | Ralf Dentzer | Data snapshot with security period |
US8612957B2 (en) * | 2006-01-26 | 2013-12-17 | Intel Corporation | Scheduling multithreaded programming instructions based on dependency graph |
JP4784827B2 (ja) * | 2006-06-06 | 2011-10-05 | 学校法人早稲田大学 | ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ |
US8032898B2 (en) * | 2006-06-30 | 2011-10-04 | Microsoft Corporation | Kernel interface with categorized kernel objects |
EP2093667A4 (en) * | 2006-12-14 | 2012-03-28 | Fujitsu Ltd | COMPILATION METHOD AND COMPILER |
US8037466B2 (en) | 2006-12-29 | 2011-10-11 | Intel Corporation | Method and apparatus for merging critical sections |
US20080163183A1 (en) * | 2006-12-29 | 2008-07-03 | Zhiyuan Li | Methods and apparatus to provide parameterized offloading on multiprocessor architectures |
JP4962564B2 (ja) * | 2007-03-29 | 2012-06-27 | 富士通株式会社 | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム |
US8789063B2 (en) | 2007-03-30 | 2014-07-22 | Microsoft Corporation | Master and subordinate operating system kernels for heterogeneous multiprocessor systems |
US20080244507A1 (en) * | 2007-03-30 | 2008-10-02 | Microsoft Corporation | Homogeneous Programming For Heterogeneous Multiprocessor Systems |
US8341612B2 (en) * | 2007-05-16 | 2012-12-25 | International Business Machines Corporation | Method and apparatus for run-time statistics dependent program execution using source-coding |
JP2009129179A (ja) * | 2007-11-22 | 2009-06-11 | Toshiba Corp | プログラム並列化支援装置およびプログラム並列化支援方法 |
US7941299B1 (en) * | 2008-01-08 | 2011-05-10 | The Mathworks, Inc. | Verification and validation system for a graphical model |
US8819647B2 (en) * | 2008-01-25 | 2014-08-26 | International Business Machines Corporation | Performance improvements for nested virtual machines |
US8225326B2 (en) * | 2008-03-17 | 2012-07-17 | Intel Corporation | Future scheduling by direct representation of possible dependencies |
JP5300294B2 (ja) * | 2008-03-25 | 2013-09-25 | パナソニック株式会社 | 処理装置、難読化装置、プログラムおよび集積回路 |
US8122441B2 (en) * | 2008-06-24 | 2012-02-21 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
US8214814B2 (en) * | 2008-06-24 | 2012-07-03 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
US8621424B2 (en) * | 2008-06-30 | 2013-12-31 | Yahoo! Inc. | Compiler based code modification for use in document ranking |
KR101406693B1 (ko) * | 2008-07-02 | 2014-06-12 | 고쿠리츠다이가쿠호진 토쿄고교 다이가꾸 | 실행시간 추정방법, 실행시간 추정 프로그램 및 실행시간 추정장치 |
JP5132459B2 (ja) * | 2008-07-18 | 2013-01-30 | キヤノン株式会社 | データ処理装置、データ処理装置の制御方法、記憶媒体及びプログラム |
US8566801B2 (en) * | 2009-05-22 | 2013-10-22 | International Business Machines Corporation | Concurrent static single assignment for general barrier synchronized parallel programs |
JP4931978B2 (ja) * | 2009-10-06 | 2012-05-16 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 並列化処理方法、システム、及びプログラム |
US9134977B2 (en) * | 2010-02-26 | 2015-09-15 | Red Hat, Inc. | Compiler operation for handling conditional statements |
KR101731752B1 (ko) | 2010-06-18 | 2017-04-28 | 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 | 결합된 분기 타깃 및 프레디킷 예측 |
US20120066683A1 (en) * | 2010-09-09 | 2012-03-15 | Srinath Nadig S | Balanced thread creation and task allocation |
TWI442317B (zh) | 2011-11-07 | 2014-06-21 | Ind Tech Res Inst | 可重新配置的指令編碼方法及處理器架構 |
US9015682B1 (en) | 2012-03-28 | 2015-04-21 | Google Inc. | Computer code transformations to create synthetic global scopes |
US8677332B1 (en) * | 2012-06-26 | 2014-03-18 | Google Inc. | Executing multiple child code blocks via a single compiled parent code block |
US9195458B2 (en) * | 2013-07-31 | 2015-11-24 | International Business Machines Corporation | System and/or method for computing interprocedural dominators |
US9396095B2 (en) * | 2014-05-15 | 2016-07-19 | Fujitsu Limited | Software verification |
US10180840B2 (en) | 2015-09-19 | 2019-01-15 | Microsoft Technology Licensing, Llc | Dynamic generation of null instructions |
US10198263B2 (en) | 2015-09-19 | 2019-02-05 | Microsoft Technology Licensing, Llc | Write nullification |
US20170083319A1 (en) * | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Generation and use of block branch metadata |
US10846196B1 (en) | 2017-06-09 | 2020-11-24 | Azul Systems, Inc. | Code optimization for connected managed runtime environments |
US10795729B2 (en) * | 2018-04-28 | 2020-10-06 | Cambricon Technologies Corporation Limited | Data accelerated processing system |
KR102329368B1 (ko) | 2019-02-26 | 2021-11-19 | 미쓰비시덴키 가부시키가이샤 | 정보 처리 장치, 정보 처리 방법 및 기록 매체에 저장된 정보 처리 프로그램 |
US11200061B2 (en) * | 2019-11-19 | 2021-12-14 | Microsoft Technology Licensing, Llc | Pre-instruction scheduling rematerialization for register pressure reduction |
US11561778B1 (en) | 2021-11-23 | 2023-01-24 | International Business Machines Corporation | Instrumentation for nested conditional checks |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH031231A (ja) * | 1989-02-09 | 1991-01-07 | Nec Corp | マイクロプログラム制御装置 |
US5471593A (en) * | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
JP2829078B2 (ja) * | 1990-02-05 | 1998-11-25 | 株式会社日立製作所 | プロセス分散方法 |
US5832289A (en) * | 1991-09-20 | 1998-11-03 | Shaw; Venson M. | System for estimating worst time duration required to execute procedure calls and looking ahead/preparing for the next stack operation of the forthcoming procedure calls |
JPH06259262A (ja) * | 1993-03-08 | 1994-09-16 | Fujitsu Ltd | 分岐確率を設定するコンパイラの処理方法および処理装置 |
JP3130446B2 (ja) * | 1995-05-10 | 2001-01-31 | 松下電器産業株式会社 | プログラム変換装置及びプロセッサ |
JPH10124315A (ja) * | 1996-10-18 | 1998-05-15 | Hitachi Ltd | 分岐処理方法およびそのための情報処理装置 |
US6311327B1 (en) * | 1998-03-02 | 2001-10-30 | Applied Microsystems Corp. | Method and apparatus for analyzing software in a language-independent manner |
-
2000
- 2000-10-04 JP JP2000304618A patent/JP3664473B2/ja not_active Expired - Fee Related
-
2001
- 2001-10-04 US US09/970,025 patent/US6817013B2/en not_active Expired - Fee Related
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007537529A (ja) * | 2004-05-13 | 2007-12-20 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 多重命令語処理装置におけるフィードバック接続の実行時間選択 |
WO2006061926A1 (ja) * | 2004-12-09 | 2006-06-15 | National University Corporation NARA Institute of Science and Technology | 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置 |
US8181171B2 (en) | 2006-02-20 | 2012-05-15 | Fujitsu Limited | Method and apparatus for analyzing large scale program and generation of code from degenerated program dependence graph |
JP2010134614A (ja) * | 2008-12-03 | 2010-06-17 | Internatl Business Mach Corp <Ibm> | 並列化処理方法、システム、及びプログラム |
JP4629768B2 (ja) * | 2008-12-03 | 2011-02-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 並列化処理方法、システム、及びプログラム |
US8438553B2 (en) | 2008-12-03 | 2013-05-07 | International Business Machines Corporation | Paralleling processing method, system and program |
US9250973B2 (en) | 2009-03-12 | 2016-02-02 | Polycore Software, Inc. | Apparatus and associated methodology of generating a multi-core communications topology |
JP2010262471A (ja) * | 2009-05-07 | 2010-11-18 | Mitsubishi Electric Corp | 並列化スケジューリング装置 |
JP2014160453A (ja) * | 2013-01-23 | 2014-09-04 | Waseda Univ | 並列性の抽出方法及びプログラムの作成方法 |
Also Published As
Publication number | Publication date |
---|---|
US20020095666A1 (en) | 2002-07-18 |
JP3664473B2 (ja) | 2005-06-29 |
US6817013B2 (en) | 2004-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2002116916A (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
Canis et al. | Modulo SDC scheduling with recurrence minimization in high-level synthesis | |
US8024718B2 (en) | System and method for optimizing source code | |
US5889999A (en) | Method and apparatus for sequencing computer instruction execution in a data processing system | |
US5828886A (en) | Compiling apparatus and method for promoting an optimization effect of a program | |
JP4962564B2 (ja) | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム | |
KR101279179B1 (ko) | 병렬 프로그램 생성 방법 | |
JPH0814817B2 (ja) | 自動ベクトル化方法 | |
JP2001167060A (ja) | タスク並列化方法 | |
JP2001166949A (ja) | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 | |
US20080028380A1 (en) | Localized, incremental single static assignment update | |
US8250502B2 (en) | Automated synthesis apparatus and method | |
JP3651774B2 (ja) | コンパイラ及びそのレジスタ割付方法 | |
Gao et al. | Automatically optimizing the latency, area, and accuracy of c programs for high-level synthesis | |
JP5381302B2 (ja) | 並列化スケジューリング装置 | |
Cordes et al. | Automatic extraction of task-level parallelism for heterogeneous MPSoCs | |
JP2002527816A (ja) | プログラム最適化装置および方法 | |
JP4946323B2 (ja) | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム | |
JPH04293150A (ja) | コンパイル方法 | |
Govindarajan et al. | Co-scheduling hardware and software pipelines | |
JP2008015665A (ja) | プログラム解析方法及びプログラム解析装置 | |
Gao et al. | Design and Implementation of A Multi-Core CPU Compilation Optimization Framework Based on MLIR | |
Bhasker | Process graph analyzer: A front end tool for VHDL behavioral synthesis | |
Miyazaki et al. | A Generator of Hadoop MapReduce Programs that Manipulate One-dimensional Arrays |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041026 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050125 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050322 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20050323 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050328 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080408 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090408 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |