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
Application number
JP2000304618A
Other languages
English (en)
Other versions
JP3664473B2 (ja
Inventor
Kunio Tabata
邦男 田端
Hideaki Komatsu
秀昭 小松
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2000304618A priority Critical patent/JP3664473B2/ja
Priority to US09/970,025 priority patent/US6817013B2/en
Publication of JP2002116916A publication Critical patent/JP2002116916A/ja
Application granted granted Critical
Publication of JP3664473B2 publication Critical patent/JP3664473B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

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

(57)【要約】 【課題】 高速かつ適切に、プログラムをハイパーブロ
ックに分割することにより、プログラムの実行効率を向
上させることを可能とする。 【解決手段】 処理対象のプログラムに対し、基本ブロ
ックを単位として実行時間を見積もる基本ブロック・コ
ードスケジューラ21と、基本ブロックを並列実行領域
であるハイパーブロックにまとめるハイパーブロック生
成部22及び実行時間見積部23とを備えたコンパイラ
であり、実行時間見積部23は、基本ブロックの接続が
条件分岐を伴う場合に、前記基本ブロック単位で見積も
られた実行時間に基づいて、条件分岐のまま実行する場
合と、条件分岐部分を並列実行する場合の実行時間を見
積もり、ハイパーブロック生成部22は、並列実行する
方が実行時間が短い場合、この部分を一まとまりの並列
実行領域とし、条件分岐のまま実行する方が実行時間が
短い場合、この部分をこの条件分岐にて接続された複数
の並列実行領域に分割する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムの最適化方法に関し、特にプログラムの条件分岐
部分を並列実行に書き換える最適化を効果的に行うため
にプログラムの最適化領域を編集する方法に関する。
【0002】
【従来の技術】通常、プログラミング言語で記述された
プログラムのソースコードをコンパイルする際、コンピ
ュータにおける実行速度の向上を図るために、当該プロ
グラムの最適化を行っている。最適化の手法には種々の
方法があるが、米国インテル社及び米国ヒューレット・
パッカード社によるIA−64のアーキテクチャに対応
したCPUのように、VLIW(Very Long Instructio
n Word)による並列処理、すなわち、プレディケート付
き命令が実行可能でかつ命令レベルの並列実行が可能な
プロセッサ上では、分岐命令を削除して、分岐先命令群
を相補的なプレディケートを付けて並列実行することが
できる(このように命令群を変換することを、以下で
は、IF変換と呼ぶ)。このIF変換を行うことによ
り、命令数を減少したり、分岐予測の失敗を回避したり
することができるため、プログラムの実行効率を向上さ
せることが可能である。
【0003】しかし、IF変換は、この変換を行う命令
の選び方によっては、かえって実行効率を低下させてし
まう場合がある。その原因は、並列度のハードウェア限
界の超過、レジスタープレッシャーの上昇、分岐先命令
におけるクリティカルパス長のバランスの悪さ、実行可
能性が低い命令の挿入などである。これら全ての原因を
考慮に入れてプログラムの実行効率の高低を厳密に判断
するには、各分岐命令に関して、IF変換する場合とし
ない場合のそれぞれについてコードスケジュールを実行
し、実際の命令サイクル数を見積もり、比較する必要が
ある。
【0004】しかしながら、プログラム中の全ての分岐
命令に対して、この命令サイクル数の見積もり及び比較
を行うとすると、組み合わせの数が膨大となるため、現
実的な計算時間で終了することができない。そのため、
最適化を実行する領域(以下、この領域をハイパーブロ
ックと称し、図示する場合には四辺形などを用いて示
す)を適切に選択する必要がある。
【0005】そこで従来は、IF変換を行うかどうかの
判断を現実的な時間内で処理するため、(1)実行可能
性が最も高いと予想される実行パス(以下、メイントレ
ースと呼ぶ)中の分岐命令のみを必要に応じてIF変換
する方法や、(2)一旦、全ての分岐命令をIF変換し
最適化を施した後、リストスケジューリングの過程で必
要に応じてIF変換の逆方向の変換(以下、逆IF変換
と呼ぶ)を実行して分岐命令を再生する方法を採ってい
た。
【0006】これらの従来技術について、さらに説明す
る。 (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変換を行
うかどうかの判断を終了することができる。
【0007】(2)一旦、全ての分岐命令を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回程度ス
ケジューリングを行う手法を提案している。なお、クリ
ティカルパスとは、プログラム中の特定の範囲におい
て、並列化できない一連の命令列のうちで最も長い命令
列である。
【0008】
【発明が解決しようとする課題】しかし、上述した従来
技術において、(1)メイントレース中の分岐命令のみ
を必要に応じてIF変換する技術は、メイントレースの
実行効率を高めることはできるが、サブトレースの実行
効率については特に考慮されていない。したがって、必
ずしもプログラム全体の実行効率を向上させられるとは
限らない。また、特に実行可能性の高いパスが無く、メ
イントレースを厳密に特定できない場合には、どのパス
に対してIF変換を行うかを決定することが困難であ
る。そして、何らかの基準に基づいていずれかのパスに
対してIF変換を行ったとしても、他のパスの実行可能
性も十分に高いため、プログラムの実行効率を十分に向
上させることができない。
【0009】また、(2)一旦、全ての分岐命令をIF
変換し最適化を施した後、リストスケジューリングの過
程で必要に応じて逆IF変換を実行して分岐命令を再生
する技術は、リストスケジューリングの過程で逆IF変
換の対象となるパスを選択しているが、依然として、所
定のパスに対してIF変換を行うかどうか(この場合は
逆IF変換により分岐命令を再生するかどうか)を判断
している。そして、この判断は、IF変換を行った場合
と行わない場合とのそれぞれに対してコードスケジュー
リングを行って、比較するという枠組みであるため、計
算量が大きい。すなわち、この従来技術においても、I
F変換を行うかどうかを判断する場合と同様に、原理的
に、IF変換を適用する領域の大きさと、コンパイルの
速度との間にトレードオフが存在する。
【0010】以上のように、これらの従来技術は、現実
的な汎用コンパイラ、特にJavaにおけるJust In Ti
me Compilerなどのようにコンパイル時間に制約がある
言語処理系では、プログラム全体の十分な実行効率の向
上を図ることができなかった。また、実際の汎用の言語
処理系では、十分な実行時情報が得られないため、メイ
ントレースのような最適化すべきパスを厳密に特定する
ことは困難であり、この問題は一層深刻であった。
【0011】そこで、本発明は、限られた時間で、広い
領域をハイパーブロックに分割することにより、ある程
度実行可能性が高い多くのパスにおける実行効率を向上
させることが可能な最適化方法を提供することを目的と
する。
【0012】
【課題を解決するための手段】かかる目的のもと、本発
明は、動的計画法に基づいた方法で、プログラムの所定
の領域全体(命令列a)を並列実行した場合の最短処理
時間の見積もりを、その領域の一部分(命令列b、cな
ど)の最短処理時間の見積もりから再帰的に計算する。
そして、命令列aの実行効率と命令列b、cを逐次に実
行した場合の実行効率とを比較し、命令列aの実行効率
の方が悪くなる場合は、命令列b及び命令列cを独立し
たハイパーブロックにする。これにより、プログラムに
おける最適化したい領域全体を、複数のハイパーブロッ
クに適切に分割する。
【0013】これを実現する本発明は、プログラミング
言語で記述されたプログラムのソースコードを機械語に
変換し、プログラムの最適化を行う最適化方法におい
て、処理対象である前記プログラムに対し、基本ブロッ
クを単位として実行時間を見積もるステップと、この基
本ブロックの接続関係を入れ子構造で表すネスト木を生
成するステップと、このネスト木のノードが条件分岐を
伴う場合に、前記基本ブロックを単位として見積もられ
た実行時間に基づいて、条件分岐のまま実行する場合
と、並列実行する場合の、このプログラムのこのノード
部分における実行時間を見積もるステップと、この見積
もりにより、並列実行する方が実行時間が短い場合は、
このノード部分を一まとまりの並列実行領域とし、条件
分岐のまま実行する方が実行時間が短い場合は、このノ
ードの複数の子ノードを複数の並列実行領域に分割する
ステップとを含むことを特徴とする。
【0014】この最適化方法は、特にプレディケート付
き命令が実行可能でかつ命令レベルの並列実行が可能な
計算機にてプログラムを実行する場合に、条件分岐をそ
のまま実行するよりも命令レベルで並列実行する方が高
速に処理できるならば、この条件分岐部分を並列実行す
るように書き換えることができる。
【0015】ここで、この基本ブロックを単位としてプ
ログラムの実行時間を見積もるステップは、前記基本ブ
ロックを単位として見積もられた実行時間に基づいて、
さらに、この基本ブロック内のプログラム部分における
クリティカルパス長と、このプログラム部分の平均並列
度とを取得するステップを含む。また、この基本ブロッ
クを、取得したクリティカルパス長及び平均並列度を辺
とする矩形で表現し、さらに、この矩形を、クリティカ
ルパス長に対応する辺がこのクリティカルパス長を下回
らない範囲で変形可能とすることができる。基本ブロッ
クについて取得されるクリティカルパス長は、この基本
ブロック内部の命令列のうちで依存関係により逐次実行
する必要のある最も長い部分の長さである。また、平均
並列度は、基本ブロックに含まれる全ての命令の数(延
べ実行時間に相当)をクリティカルパス長で割った値で
ある。すなわち、基本ブロックの命令列を、クリティカ
ルパス長を保持したまま並列に実行する場合に、どれだ
けの並列度が必要かを示す。このように平均並列度を定
義した上で、複数の基本ブロックを並列に実行した場合
に必要とされる並列度は、基本ブロックの平均並列度の
線形和になると近似する。
【0016】また、このネスト木を生成するステップ
は、基本ブロック間の依存関係を表す依存グラフを生成
するステップと、この依存グラフから冗長な枝を取り除
いた先行制約グラフを生成するステップと、この先行制
約グラフのノードの接続関係を入れ子構造で表現するこ
とによりこのネスト木を生成するステップとを含む。ネ
スト木のノードは、プログラムの基本ブロックと、シリ
ーズスートと、パラレルスートとからなる。シリーズス
ートは基本ブロックまたはスートが依存関係を有して直
列に接続されたものであり、パラレルスートは基本ブロ
ックまたは他のスートが依存関係を持たずに並列に並ん
だものである。すなわち、基本ブロックまたはスートを
シリーズスートまたはパラレルスートの形で括っていく
ことにより、このプログラムの入れ子構造を表現する。
【0017】また、ここで、条件分岐部分の実行時間を
判断するステップは、この子ノードにおいて実行可能な
並列度ごとに、この子ノードを並列実行した場合の実行
時間の最大値を求めるステップと、各並列度における実
行時間の最大値のうち特定の値をこの条件分岐部分を並
列実行する場合における実行時間と見積もるステップと
を含む。
【0018】この条件分岐部分の実行時間を判断するス
テップは、実行時間の判断に先立って、この子ノードを
構成する基本ブロックの命令レベルでの依存関係に基づ
いて、この基本ブロックの実行時間に関する情報を修正
するステップを含む。具体的には、シリーズスートを構
成する基本ブロックにおいて、前に位置する基本ブロッ
ク内部における最後の命令以外の命令と、後ろに位置す
る基本ブロック内部における最初の命令とが依存関係を
有する場合、このシリーズスートは基本ブロックを単に
直列に連結するよりも短い長さ(このシリーズスートの
クリティカルパス長)で実行できることとなる。
【0019】さらにここで、このプログラムの並列実行
領域を決定するステップは、この複数の子ノードを複数
の並列実行領域に分割する場合に、ハードウェアが持つ
並列度で各子ノードを並列実行した場合における各子ノ
ードの実行時間を比較するステップと、この実行時間が
最も短い子ノードを残して、他の子ノードを独立した並
列実行領域とするステップとを含む。
【0020】また、本発明は、これらの最適化方法を、
コンピュータによるプログラムのコンパイルにおいて実
行させるコンピュータプログラムとして作成し、このコ
ンピュータプログラムを格納した記憶媒体や、このコン
ピュータプログラムを伝送する伝送装置として提供する
ことができる。
【0021】さらに、本発明は、プログラミング言語で
記述されたプログラムのソースコードを機械語に変換
し、プログラムの最適化を行うコンパイラにおいて、処
理対象である前記プログラムに対し、基本ブロックを単
位として実行時間を見積もる第1のコードスケジューラ
と、この基本ブロックをまとめて並列実行領域であるハ
イパーブロックを生成するハイパーブロック生成部と、
このプログラムにおける所定の領域を実行した場合の処
理時間を見積もることにより、このハイパーブロック生
成部によるこのハイパーブロックの生成を支援する実行
時間見積部と、生成されたハイパーブロックごとにコー
ドスケジューリングを行う第2のコードスケジューラと
を備え、この実行時間見積部は、この基本ブロックの接
続関係を入れ子構造で表すネスト木の所定のノードが条
件分岐を伴う場合に、前記基本ブロックを単位として見
積もられた実行時間に基づいて、条件分岐のまま実行す
る場合と、このプログラムの条件分岐部分を並列実行す
る場合の、当該プログラムの当該ノード部分における実
行時間を見積もり、このハイパーブロック生成部は、実
行時間見積部の見積もりにより、並列実行する方が実行
時間が短いノードに関して、当該ノード部分を一まとま
りの並列実行領域とし、条件分岐のまま実行する方が実
行時間が短いノードに関して、当該ノードの複数の子ノ
ードを複数の並列実行領域に分割することを特徴とす
る。
【0022】ここで、この第1のコードスケジューラ
は、基本ブロックを単位として見積もられた実行時間に
基づいて、さらに、この基本ブロック内のプログラム部
分におけるクリティカルパス長と、このプログラム部分
の平均並列度とを取得する。また、この実行時間見積部
は、実行時間の判断に先立って、この子ノードを構成す
る基本ブロックの命令レベルでの依存関係に基づいて、
この基本ブロックの実行時間に関する情報を修正する。
【0023】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。まず、本発明
の概要を説明する。上述したように、本発明は、プログ
ラムのコンパイル時における最適化において、プログラ
ムの所定の領域を適切なハイパーブロックに分割する。
【0024】具体的には、まず、処理対象であるプログ
ラムを変形可能に定義された基本ブロックに分割し、基
本ブロック間の制御依存関係及びデータ依存関係に基づ
いて、PDG(Program Dependence Graph:依存グラ
フ)を作る。ここで、基本ブロックとは、ストレートコ
ード、すなわちコントロールフローが途中に入ることも
なく、途中から出ることもないようなコード列の範囲を
ブロックで示したものである。本発明では、後述のよう
に基本ブロックを構成する命令列のクリティカルパス長
を下回らない範囲で、変形可能に基本ブロックを定義す
る。次に、作成されたPDGをシリーズパラレルグラフ
に変換し、このシリーズパラレルグラフを基本ブロック
間の先行制約グラフとして用いる。そして、このシリー
ズパラレルグラフにおける各基本ブロック内に対してコ
ードスケジューリングを実行し、メモリ依存を超える投
機的命令移動などの最適化を実行する。なお、シリーズ
パラレルグラフの定義については後述する。
【0025】次に、シリーズパラレルグラフにおける各
基本ブロックに関して、クリティカルパス長、平均の並
列度、消費するハードウェアリソースなどの情報を求め
ておき、これらの値を基に、基本ブロックの領域全体の
最短処理時間を再帰的に見積もる。この過程で、所定の
領域について、並列実行より逐次実行の方が処理速度が
速いと判断された場合は、当該領域に含まれる部分領域
それぞれを独立したハイパーブロックとし、当該ハイパ
ーブロックの中の全ての条件分岐命令をIF変換する。
これらの仕組みは、動的計画法を用いることにより、基
本ブロックの数に比例する計算時間で終了することがで
きる。
【0026】図1は、本発明の実施の形態におけるコン
パイラの構成を説明する図である。図1に示すコンパイ
ラは、JavaのJust In Time Compilerである。本実
施の形態では、本発明をJust In Time Compilerに適用
する場合を例として説明するが、他の種々のプログラム
言語で記述されたプログラムに対するコンパイラに適用
できることは言うまでもない。
【0027】図1を参照すると、本実施の形態における
コンパイラは、フロントエンド最適化部10と、命令レ
ベル並列化最適化部20と、ネイティブコード生成部3
0とを備える。フロントエンド最適化部10は、Jav
aにおける処理対象のプログラムのバイトコードを入力
し、バイトコードレベルでの最適化を行うバイトコード
最適化部11と、バイトコード最適化部11により最適
化を施されたバイトコード(四つ組中間コード)に対し
て四つ組中間コードレベルでの最適化を行う四つ組中間
コード最適化部12とを備える。また、四つ組中間コー
ド最適化部12では、処理対象であるプログラムを基本
ブロックに分割する。
【0028】命令レベル並列化最適化部20は、フロン
トエンド最適化部10により四つ組中間コードレベルま
での最適化が行われたプログラムに対して、基本ブロッ
クレベルでのコードスケジューリングを行う基本ブロッ
ク・コードスケジューラ21と、当該基本ブロック間の
依存関係に基づいてPDGを作成し、このPDGをハイ
パーブロックに適切に分割するためのハイパーブロック
生成部22及び実行時間見積部23と、ハイパーブロッ
クに分割されたプログラム全体に対するコードスケジュ
ーリングを行うグローバル・コードスケジューラ24と
を備える。
【0029】ネイティブコード生成部30は、命令レベ
ル並列化最適化部20によりコードスケジューリングが
行われたプログラムをネイティブコードに変換するコー
ド生成部31と、コード生成部31により生成されたネ
イティブコードに対して命令レベルでのコードスケジュ
ーリングを行う命令レベル・コードスケジューラ32と
を備える。
【0030】以上の構成のうち、フロントエンド最適化
部10とネイティブコード生成部30とは、従来のJust
In Time Compilerにおけるフロントエンド最適化部1
0及びネイティブコード生成部30と同様である。した
がって、本実施の形態は、命令レベル並列化最適化部2
0において、基本ブロックレベルでのコードスケジュー
リングを行い、ハイパーブロック生成部22及び実行時
間見積部23において、命令列の実行時間を見積もりな
がらハイパーブロックを生成した上で、全体的なコード
スケジューリングを行う点に特徴がある。また、図1に
示すJust In Time Compiler以外の、他のプログラミン
グ言語におけるコンパイラにおいても、ソースプログラ
ムを入力して構文解析を行い中間コードを生成した後
に、図1の命令レベル並列化最適化部20に相当する機
能ブロックにより、同様の命令レベルでの並列化による
最適化処理を行うことができる。
【0031】なお、図1に示す各構成要素は、コンピュ
ータプログラムにより制御されたCPUにて実現される
仮想的なソフトウェアブロックである。CPUを制御す
る当該コンピュータプログラムはCD−ROMやフロッ
ピー(登録商標)ディスクなどの記憶媒体に格納した
り、ネットワークを介して伝送したりすることにより提
供される。
【0032】次に、命令レベル並列化最適化部20の動
作について説明する。本実施の形態は、処理対象である
プログラム中の命令間の制御依存関係及びデータ依存関
係を示すPDG(Program Dependence Graph)をシリー
ズパラレルグラフに変換し、命令列の実行時間の見積も
りを再帰的に行うことにより、適切なハイパーブロック
を生成する。以下では、命令レベル並列化最適化部20
の動作について、まず概略的に説明し、次に具体的な手
法について説明する。
【0033】まず、本実施の形態で用いる基本ブロック
について詳細に説明する。図39は、処理対象のプログ
ラムの構成を基本ブロックで表現した例を示す図であ
る。図39に示した基本ブロックD、Eの組のように互
いに依存がない基本ブロックの集合(パラレルスートと
呼ぶ、定義は後述)の場合、並列に実行しても、逐次に
実行しても、プログラムの正しさは保証されているの
で、どちらで実行されると領域全体の結果が良いかどう
かを決定する必要がある。この決定は、単純には、領域
中の全てのパラレルスートを、逐次、並列のどちらかで
実行したときの全ての組み合わせに対して、全体の処理
時間と必要な並列度を求めて比較する方法で実現でき
る。その際、全体の処理時間と必要な並列度を求めるに
は、単純には、パラレルスートの実行時間を構成要素の
実行時間の合計dと論理的な並列度の最大値wとで表す
ことができる。図40は、パラレルスートの実行時間を
構成要素のパラメータ(d、w)で表現できることを説
明する図である。
【0034】しかし、この方法には、次の三つの問題点
がある。1.基本ブロックは、上述したように、ストレ
ートコード、すなわちコントロールフローが途中に入る
こともなく、途中から出ることもないようなコード列の
範囲をブロックで示したものである。したがって、本来
的には変形不能の矩形領域ではなく、実際には(ある制
約の下で)柔軟に移動可能な命令の集合であるが、上の
基本ブロックの定義ではこの点が考慮されていない。
2.スートを構成する際に図40に示した「すきま」が
できるため、処理時間と並列度の見積もり精度が悪い。
3.領域中のパラレルスートを並列処理する場合と逐次
処理する場合の全ての組み合わせを尽くす方法で実行時
間を見積もるため、計算時間が基本ブロックの数に応じ
て指数関数的に増加する。
【0035】そこで、本実施の形態では、各基本ブロッ
クを、クリティカルパス長を下回らないという前提の下
で、縦方向(処理時間が伸びる方向)に伸ばせるように
モデル化する。このようにモデル化された基本ブロック
によるパラレルスートの例を図41に示す。図41に示
すように、パラレルスートは、基本ブロックDと基本ブ
ロックEとを変形させながら処理時間と平均並列度を見
積もることができる。これにより、より実際のプログラ
ムの構成に即した見積もりを行うことが可能となる。ま
た、基本ブロックを変形可能としたことにより、上述し
たスートにおける「すきま」を解消することもできる。
さらに、基本ブロックの横幅である平均並列度は、基本
ブロックにおける命令列の延べ実行時間とクリティカル
パス長に基づいて単純なモデル化により算出された値で
あるため、図42に示すような基本ブロック内部におけ
る隙間も、複数の基本ブロックを扱うことによってある
程度相殺されることが期待される。
【0036】次に、このモデルに従った最短処理時間の
見積もりを、基本ブロックの数に応じて計算時間が指数
関数的に増加することを回避して高速に実現するため
に、動的計画法を使った実現方法を説明する。本実施の
形態では、所定の領域の最短処理時間の見積もりを、当
該領域における部分領域の最短処理時間の見積もりから
再帰的に求めていく。例えば、図39の基本ブロック
D、Eの処理時間の見積もりから、それらで構成される
パラレルスートの実行時間を見積もる。この再帰処理の
1ステップを高速に実現することで、全体として高速な
実行を可能とする。この処理を実現するには、基本ブロ
ックだけでなく、パラレルスート、実行依存がある基本
ブロックの集合(シリーズスートと呼ぶ、定義は後述)
を、変形可能な矩形領域とみなせなければならない。こ
れを満たすため、基本ブロック、パラレルスート、シリ
ーズスートに関して、ハードウェアの並列度Wに対す
る、それぞれの可能な並列度w(1≦w≦W)に対する
最短処理時間の見積データを再帰的に計算していく。
【0037】基本ブロック、パラレルスート、シリーズ
スートの各場合について、上記のデータを見積もる方法
を簡単に述べる。基本ブロックに対しては、基本ブロッ
ク・コードスケジューラ21によるコードスケジューリ
ングを実行し、延べ実行時間を求める。そして、この延
べ実行時間を並列度wで割った値を、当該基本ブロック
の最短処理時間の見積もりとする。ただし、本実施の形
態における基本ブロックオン定義より、クリティカルパ
ス長は下回らないものとする。シリーズスートに対して
は、構成要素の並列度wにおける処理時間を、単純に加
算する。パラレルスートに対しては、図40のイメージ
どおり、1≦w≦Wにおける各並列度wについて、w1
+w2=wの条件を満たしながらw1を変化させ、各構
成要素を並列実行した場合の実行時間の最大値を求め、
得られた最大値の最小値を当該スートの最短処理時間の
見積もりとする。これらの手続き、すなわち再帰の1ス
テップは、最長でもW2/2に比例する計算時間で終了
する。結局、基本ブロックの数をnとすると、n×W2
に比例した計算時間で全体の処理が終了する。
【0038】次に、命令レベル並列化最適化部20によ
る動作の具体的な手法について説明する。本実施の形態
では、上記の動的計画法を使ったハイパーブロックの生
成手法として、基本ブロックの構成のみを用いた第1の
手法と、基本ブロック内の命令レベルの依存関係をも考
慮した第2の手法とを提案する。
【0039】第1の手法は、基本ブロックを、論理的な
並列度の平均とクリティカルパス長で表される矩形領域
にモデル化する。複数の基本ブロックにおける逐次実行
時間の見積もりは、クリティカルパスの処理時間の和を
下回らないとする。また、複数の基本ブロックを並列に
実行した場合に必要とされる並列度は、基本ブロックの
平均並列度の線形和になると近似する。第2の手法は、
基本ブロックを、論理的な並列度の平均とクリティカル
パス長で表される矩形領域にモデル化すると共に、当該
基本ブロック内の命令間における依存関係(Dependence
Path)の情報を持たせる。複数の基本ブロックの逐次
実行時間の見積もりは、Dependence Pathを再構成して
クリティカルパス長を再計算し、その値を下回らないと
する。複数の基本ブロックを並列に実行した時必要とさ
れる並列度は、第1の手法と同様に扱う。基本ブロック
を、平均並列度とクリティカルパス長で表される矩形領
域に近似することにより、複数の基本ブロックを並列に
実行した場合に必要とされる並列度は、基本ブロックの
平均並列度の線形和になると近似することができ、これ
により、高速動作を実現することができる。以下、手法
ごとに詳細に説明する。なお、以下の説明において用い
られる記号を図7において定義する。図7の各定義にお
いて、nodeはノード一般を示す。したがって、以下の説
明において、特に所定のノードにおける子ノードを指す
場合には、nodeの代わりにchild1などと記述する場合も
ある。
【0040】〔第1の手法〕命令レベル並列化最適化部
20は、初期的に、フロントエンド最適化部10により
前処理としての最適化を施されたプログラム(中間コー
ド)を入力し、実行頻度情報やプログラムの構造に基づ
いて並列実行する領域を決定する。例えば、ある程度以
上の実行頻度を持ち、ループを含まない領域を並列実行
する領域とすることができる。ここでは、図2に示した
プログラム領域を処理対象とする。図2は、処理対象で
あるプログラムの最適化処理を行う領域の制御フローグ
ラフと当該部分の命令列のリストである。
【0041】基本ブロック・コードスケジューラ21
は、当該領域内の基本ブロック毎に、あいまいなメモリ
依存の解消を伴うコードスケジューリングを行う。これ
により、各基本ブロック(図7におけるnodeとする)に
ついて、node.clと、node.allとを見積もることができ
る。
【0042】図3は、図2に示したプログラム領域にお
いて、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)の矩形として表現される。
【0043】次に、ハイパーブロック生成部22は、図
3に示す基本ブロック間の制御依存関係及びデータ依存
関係を表すPDGを作成する。そして、作成されたPD
Gから先行制約グラフとして冗長な枝を取り除き、シリ
ーズパラレルグラフに変換する。ここで、シリーズパラ
レルグラフとは、次の三つの条件を満たすグラフであ
る。 (1)単独のノードはシリーズパラレルグラフである。 (2)シリーズパラレルグラフを二つ直列に接続したも
のはシリーズパラレルグラフである。 (3)シリーズパラレルグラフを二つ並列に接続したも
のはシリーズパラレルグラフである。 また、シリーズパラレルグラフの構成は、シリーズスー
トとパラレルスートの2種類の部分に分けることができ
る。シリーズスートとは、直列に連結(この連結をシリ
ーズコネクションと呼ぶ)された、依存関係のある一連
のシリーズスート、パラレルスート及びノードの集合で
ある。また、パラレルスートとは、並列に連結(この連
結をパラレルコネクションと呼ぶ)された、互いに依存
関係のないシリーズスート、パラレルスート及びノード
の集合である。図8は、PDGをシリーズパラレルグラ
フに変換するアルゴリズムを示す擬似プログラムであ
る。図示のアルゴリズムによる手続きは、現実的にはP
DGのノードの数に比例した計算時間で終了する。
【0044】図4は、図3から作成されたPDGを示す
図、図5は、図4のPDGから変換されたシリーズパラ
レルグラフを示す図である。図4、5を参照すると、例
えば、図4におけるノードAからノードDへのデータ依
存は、ノードAからノードCへの依存とノードCからノ
ードDへの依存が存在するため、冗長とみなされ、図5
に示すように取り除かれている。
【0045】次に、ハイパーブロック生成部22は、上
述のシリーズパラレルグラフから、シリーズスートとパ
ラレルスートの入れ子関係を表すシリーズパラレルネス
ト木を生成する。シリーズパラレルネスト木とは、次の
ように定義されるノードとエッジとを持つ木構造であ
る。 ノード:シリーズパラレルグラフ中の全てのシリーズス
ートまたは全てのパラレルスートまたは全てのノードの
集合。 エッジ:所定のシリーズスートに対し、シリーズコネク
ションのみで連結された一連のシリーズスート、パラレ
ルスートまたはノードがある場合、この所定のシリーズ
スートから当該一連のスートまたはノードに対して張ら
れるエッジ。または、所定のパラレルスートに対し、パ
ラレルコネクションのみで連結された一連のシリーズス
ート、パラレルスートまたはノードがある場合、この所
定のパラレルスートからその一連のスートまたはノード
に対して張られるエッジ。図9は、シリーズパラレルグ
ラフからシリーズパラレルネスト木を生成するアルゴリ
ズムを示す疑似プログラムである。図示のアルゴリズム
による手続きは、実践的にはシリーズパラレルグラフの
ノード数に比例した時間で終了する。ただし、図示のア
ルゴリズムは、単純のため、パラレルスートが3以上の
葉ノードを持つことを許しているが、葉ノードを2つだ
け持つように変更することも容易に可能である。図6
は、図5のシリーズパラレルグラフから生成されたシリ
ーズパラレルネスト木を示す図である。なお、図5、6
において、実線で示したノードはシリーズスートを示
し、破線で示したノードはパラレルスートを示す。
【0046】次に、ハイパーブロック生成部22は、実
行時間見積部23を用いて、シリーズパラレルネスト木
における各ノードの実行時間を再帰的に見積もり、その
結果に基づいてハイパーブロック選択処理を実行する
(図10参照)。このハイパーブロック選択処理によ
り、シリーズパラレルネスト木の各ノードに、独立した
ハイパーブロックとして扱うか否かを示す情報が付され
る。以下、ハイパーブロック選択処理について、詳細に
説明する。
【0047】図11は、ハイパーブロック選択処理の全
体的な動作の流れを示すフローチャートである。また、
図12は、図11に対応する動作のアルゴリズムを示す
疑似プログラムである。図11を参照すると、まず、シ
リーズパラレルネスト木のノードの一つを処理対象とし
(ステップ1101)、当該ノードの属性を調べ、パラ
レルスートか、シリーズスートか、基本ブロック(単一
ノード)かを判断する(ステップ1102)。そして、
当該ノードがパラレルスートであれば、実行時間見積部
23に処理を渡して当該パラレルスートの実行時間見積
処理を行う(ステップ1103)。また、当該ノードが
シリーズスートであれば、当該ハイパーブロック選択処
理を当該ノードの子ノード(ここでは子ノード1、子ノ
ード2の二つ)に再帰的に適用した後(ステップ110
4)、当該シリーズスートの実行時間評価処理を行う
(ステップ1105)。さらに、当該ノードが基本ブロ
ック(単一ノード)であれば、単一ノードの実行時間評
価処理を行う(ステップ1106)。
【0048】ステップ1103によるパラレルスートの
実行時間見積処理では、並列度Wのときの所定のパラレ
ルスート(x)の処理時間を求めたい場合、パラレルス
ート(x)を構成するスート(y,z)について、W=
w1+w2の関係でw1を変化させながら、並列度w1
のときのスート(y)の最短処理時間及び並列度w2の
ときのスート(z)の最短処理時間の最大値を求める。
そして、w1の値ごとに得られた最大値のうちの最も小
さい値を、並列度Wのときのパラレルスート(x)の最
短処理時間として見積もる。ここで、パラレルスート
は、各ノードをまとめて一つのハイパーブロックを構成
することによって、処理時間を長くしてしまうことがあ
り得る。そこで、パラレルスート中のノードをまとめて
ハイパーブロックを構成するか否かの判断を行う。具体
的には、分岐命令削減による利得を並列実行のオーバー
ヘッドが下回っているかどうかを判断する。そして、構
成しないと判断された場合は、各ノードを分けて別のハ
イパーブロックを構成するという意味の印を付ける(no
de.hyper_block = TRUE(図7))。この際、どちらの
スートを独立したハイパーブロックにするかの判断は、
状況に応じて種々の手法で行うことができる。例えば、
単純にクリティカルパスが長い方を独立したハイパーブ
ロックとしても良いし、実行確率がわかっている場合
は、実行確率の低い方を独立したハイパーブロックとす
ることもできる。
【0049】図13は、図11におけるステップ110
3のパラレルスートに対する実行時間見積処理の内容を
説明するフローチャートである。図13を参照すると、
まず、処理対象であるノードの子ノード(ここでは子ノ
ード1、子ノード2の二つ)に当該ハイパーブロック選
択処理を再帰的に適用する(ステップ1301)。そし
て、パラレルスートの実行時間評価処理(ステップ13
02)及び利得見積処理(ステップ1303)を行った
後、得られた利得の値が0よりも大きいか否かを判断す
る(ステップ1304)。利得が0以下である場合は、
ノード選択処理を行う(ステップ1305)。利得が0
よりも大きい場合は、子ノード1と子ノード2の面積
(すなわち、node.all:当該ノードの延べ実行時間)の
和を親ノード(すなわち、初めに処理対象としたノー
ド)の面積とする(ステップ1306)。
【0050】図14は、図13におけるステップ130
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)。
【0051】以上の動作により、並列度Wのときのパラ
レルスートの最短処理時間の見積もりが得られる。実際
のCPU(ハードウェア)における並列度Wは一桁程度
の小さな数値なので、この実行時間評価処理はノード数
に比例する時間で終了することができる。
【0052】図16は、図13におけるステップ130
3の利得見積処理の内容を説明するフローチャートであ
る。また、図17は、図16の利得見積処理の動作アル
ゴリズムを示す疑似プログラムである。図16を参照す
ると、図14、15に示した実行時間評価処理により得
られたパラレルスートの最短処理時間の見積もりに基づ
いて、子ノード1と子ノード2とを条件分岐としてその
まま実行した場合の処理時間と、この条件分岐をプレデ
ィケート付き命令で並列実行した場合の処理時間との差
を利得として求める(ステップ1601)。
【0053】図18は、図13におけるステップ130
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のみから構成されることとなる。
【0054】以上のようにして、シリーズパラレルネス
ト木のパラレルスートに対する実行時間見積処理を終了
する。これにより、シリーズパラレルネスト木中のパラ
レルスートに関して、当該パラレルスートを構成するノ
ードを一つのハイパーブロックにまとめるか、または別
のハイパーブロックとして分岐させるかを示す情報と、
当該一つまたは二つのハイパーブロックにおける実行時
間の見積もりが得られ、当該ハイパーブロックに付され
ることとなる。
【0055】図11のステップ1105によるシリーズ
スートの実行時間評価処理では、当該シリーズスートを
構成するノードの最短処理時間を単純に加えることによ
り、当該シリーズスートにおける実行時間を粗く見積も
る。そしてさらに、平均並列度wに対して当該実行時間
が最短(最短処理時間)となるように補正する。
【0056】図20は、図11におけるステップ110
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)。
【0057】図11のステップ1106による単一ノー
ドの実行時間評価処理では、クリティカルパス長を下回
らない限り、計算総量を並列度で割った値で実行できる
と見積もる。図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)。
【0058】以上説明したパラレルスート、シリーズス
ート、単一ノードに対する実行時間の見積もり及び評価
を、シリーズパラレルネスト木のルートノードから葉ノ
ードへ再帰的に実行することにより、適切なハイパーブ
ロックを生成することができる。すなわち、一つのハイ
パーブロックにまとめた方が実行時間が短くなるノード
に関しては、一つのハイパーブロックにまとめられ、一
つのハイパーブロックにまとめない方が実行時間が短く
なるノードに関しては、別のハイパーブロックに分割す
る。
【0059】次に、この第1の手法によるハイパーブロ
ックの生成例を説明する。ここでは、並列処理を実行す
る方が実行時間が短くなる例と、条件分岐を実行した方
が実行時間が短くなる例とを示すため、ハードウェアの
並列度が6である場合と3である場合とを例として説明
する。なお、図2乃至図6に示したプログラムを処理対
象とし、各命令は時間1で実行されると仮定する。ま
た、分岐処理によるペナルティ(分岐処理を行うことに
より必然的に処理に要する実行時間)を5とする。
【0060】まず、ハードウェアの並列度が6である場
合について説明する。例として、図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の各場合で求めた結
果を示す図である。
【0061】ここで、図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)。
【0062】次に、ハードウェアの並列度が3である場
合について説明する。ハードウェアの並列度が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)。
【0063】〔第2の手法〕次に、当該基本ブロック内
の命令間における依存関係(Dependence Path)の情報
を持たせる第2の手法について説明する。第2の手法で
は、プログラムの各基本ブロックに命令レベルでの依存
関係に関する情報を持たせておく。そして、基本ブロッ
クの実行時間の見積もりの際に、この依存関係に基づい
て当該基本ブロックのクリティカルパス長を再計算す
る。
【0064】図26を参照して具体的に説明する。図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
と見積もることができる。
【0065】以上の処理を実現するため、第2の手法で
は、基本ブロック・コードスケジューラ21において、
基本ブロック内部の命令の依存関係に関する情報を取得
する。基本ブロック・コードスケジューラ21は、ま
ず、命令間の依存関係を示す依存DAG(Directed Acy
clic Graph)の全てのパスを求める。そして、得られた
パスをその長さの降順に並べ替えておく。図27は、依
存DAGの全てのパスを、ノードへのポインタを張るこ
とによって保持するイメージを表す図である。
【0066】次に、基本ブロックに付された情報に基づ
いて、ハイパーブロック生成部22がPDGを作成し、
PDGをシリーズパラレルグラフに変換し、さらにシリ
ーズパラレルグラフからシリーズパラレルネスト木を生
成する行程は、第1の手法と同一である。したがって、
ここでは詳細な説明を省略する。
【0067】次に、ハイパーブロック生成部22は、実
行時間見積部23を用いて、シリーズパラレルネスト木
における各ノードの実行時間を再帰的に見積もり、その
結果に基づいてハイパーブロック選択処理を実行する
(図10参照)。このハイパーブロック選択処理によ
り、シリーズパラレルネスト木の各ノードに、独立した
ハイパーブロックとして扱うか否かを示す情報が付され
る。第2の手法におけるハイパーブロック選択処理は、
基本的には第1の手法と同様の手順で実行されるが、基
本ブロック内部の命令の依存関係を考慮し、必要に応じ
て当該基本ブロックのクリティカルパス長を変更する処
理が実行される。以下、ハイパーブロック選択処理につ
いて、詳細に説明する。
【0068】ハイパーブロック選択処理の全体的な動作
の流れは、図11を参照して説明した第1の手法と同様
である。すなわち、まず、シリーズパラレルネスト木の
ノードの一つを処理対象とし(ステップ1101)、当
該ノードの属性を調べ、パラレルスートか、シリーズス
ートか、基本ブロック(単一ノード)かを判断する(ス
テップ1102)。そして、判断結果に応じて、パラレ
ルスートの実行時間見積処理(ステップ1103)、シ
リーズスートの実行時間を評価するための処理(ステッ
プ1104、1105)、単一ノードの実行時間評価処
理を行う(ステップ1106)。
【0069】また、パラレルスートの実行時間見積処理
(ステップ1103)も、実行時間評価処理の内容を除
き、全体的な動作の流れは図13を参照して説明した第
1の手法と同様である。すなわち、まず、処理対象であ
るノードの子ノードに対して当該ハイパーブロック選択
処理を再帰的に適用する(ステップ1301)。そし
て、パラレルスートの実行時間評価処理(ステップ13
02)及び利得見積処理(ステップ1303)を行った
後、得られた利得の値が0よりも大きいか否かを判断す
る(ステップ1304)。利得が0よりも大きい場合
は、ノード選択処理を行う(ステップ1305)。利得
が0以下である場合は、子ノード1と子ノード2の面積
(すなわち、node.all:当該ノードの延べ実行時間)の
和を親ノード(すなわち、初めに処理対象としたノー
ド)の面積とする(ステップ1306)。
【0070】図28は、第2の手法において、図13に
おけるステップ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)を行った後に実行時間評
価処理を終了する。
【0071】図30は、図28におけるステップ281
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)。
【0072】以上の動作により、並列度Wのときのパラ
レルスートの最短処理時間の見積もりが得られる。上記
のように、第2の手法では、クリティカルパス長を無視
した(すなわち、実行時間がクリティカルパス長を下回
ることを許す)場合の処理時間の見積もり(図7のnod
e.best_time2)も計算される。この値は、後述するシリ
ーズスートの実行時間の評価において用いられる。ま
た、依存パス融合処理において、依存パスの融合とソー
トが行われる。子ノード1、2の依存パスは、基本ブロ
ック・コードスケジューラ21により長いものから降順
にソートしてあるので、これを用いて親ノードにおける
依存パスが再構成される。
【0073】図31は、第2の手法において、図11に
おけるステップ1105のシリーズスートに対する実行
時間評価処理の内容を説明するフローチャートである。
また、図32は、図31の実行時間評価処理の動作アル
ゴリズムを示す疑似プログラムである。図31を参照す
ると、まず、処理対象であるノードの延べ実行時間を、
子ノード1、2の延べ実行時間の和とする(ステップ3
101)。次に、クリティカルパス長再計算処理(ステ
ップ3102)、最短処理時間計算処理(ステップ31
03)を順次実行する。
【0074】図33は、図31におけるステップ310
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の依存パスの数とが同
じならば、処理を終了する。
【0075】以上のようにして、所定のシリーズスート
の子ノードにおいて、その子ノード中の命令の依存パス
を連結し、この連結された依存パスの長さに基づいてソ
ートした上で、当該シリーズスートのクリティカルパス
長を再計算する。これにより、子ノード中の命令の依存
関係によっては、当該シリーズスート全体におけるクリ
ティカルパス長を、子ノードのクリティカルパス長を単
純に足した場合よりも短くすることができる。
【0076】図34は、図31におけるステップ310
3の最短処理時間計算処理の内容を説明するフローチャ
ートである。図34を参照すると、まず、親ノードの依
存パスを長さの降順にソートする(ステップ340
1)。次に、この処理の中でのみ有効な自由変数wを0
に初期化する(ステップ3402)。そして、変数wと
ハードウェアの並列度Wとを比較し、同じかどうかを調
べる(ステップ3403)。変数wと並列度Wとが同じ
でない場合、クリティカルパス長を考慮しない場合にお
ける親ノードの実行時間を、子ノード1、2のクリティ
カルパス長を考慮しない場合における実行時間の和とす
る(ステップ3404)。そして、変数wの値を1増加
し(ステップ3405)、ステップ3403へ戻る。ス
テップ3403において、変数wと並列度Wとが同じで
あれば、処理を終了する。
【0077】以上のようにして、子ノード1、2におけ
るクリティカルパス長を考慮しない場合における最短処
理時間の和において、再計算された当該シリーズスート
のクリティカルパス長を下回らない値を当該シリーズス
ートの最短処理時間と見積もることができる。
【0078】図35は、第2の手法において、図11に
おけるステップ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)。
【0079】以上、説明した第2の手法は、基本ブロッ
ク・コードスケジューラ21において依存DAGのパス
(依存パス)のソートを行う。この処理は、依存パスの
数をmとした場合、m×log mに比例する計算時間を要
する。また、依存パスの連結には最長でm2に比例する
計算時間を要し、連結された依存パスのソートにやはり
m×log mに比例する計算時間を要する。したがって、
上述した処理は、最長でn×m2に比例する計算時間を
要することとなる。しかしながら、プログラム中の最適
化しようとする部分が多くの基本ブロックに分割されて
いる場合、依存パスの数mは小さな値となる。したがっ
て、実践的には大きな計算時間を要しないで実行が可能
である。
【0080】次に、第2の手法による最短処理時間の計
算例を説明する。図37は、図2、3のプログラムに対
して第2の手法により得られた最短処理時間の見積もり
を、図6のシリーズパラレルネスト木における各ノード
(スート)に対して、並列度1〜6の各場合で求めた結
果を示す図である。また、図38は、基本ブロックのク
リティカルパス長を無視した場合における最短処理時間
の見積もりを、同様にして求めた結果を示す図である。
ここで、基本ブロックD、E、Fの内部における命令の
依存関係は、図26に示したようになっている。
【0081】したがって、第1の手段により得られた最
短処理時間の見積もりを示す図24と、図37とを比較
すると、基本ブロックD、E、Fの命令の依存関係が、
スート3における見積もりの結果に現れている。スート
3は、基本ブロックFとスート4とで構成されたシリー
ズスートである。ここで、スート3における並列度6の
場合の最短処理時間は図37によれば4であり、図24
の場合における5よりも1だけ少なくなっている。そし
て、この値は、図38における該当個所の最短処理時間
が4であることから、再計算されたクリティカルパス長
を下回らないことがわかる。したがって、この場合のス
ート3の最短処理時間は4と見積もられ、第1の手法の
場合と比べて最適化が進んでいる。
【0082】
【発明の効果】以上説明したように、本発明によれば、
プログラムの所定の領域に対して高速かつ適切なハイパ
ーブロックの生成を行うことができるため、最適化処理
において、ある程度実行可能性が高い多くのパスにおけ
る実行効率を向上させることができる。
【図面の簡単な説明】
【図1】 本発明の実施の形態におけるコンパイラの構
成を説明する図である。
【図2】 処理対象であるプログラムの最適化処理を行
う領域の制御フローグラフと当該部分の命令列のリスト
を示す図である。
【図3】 図2に示したプログラム領域において、nod
e.clを縦の長さとし、node.allを面積とする矩形領域で
基本ブロックを表した図である。
【図4】 図3から作成されたPDGを示す図である。
【図5】 図4のPDGから変換されたシリーズパラレ
ルグラフを示す図である。
【図6】 図5のシリーズパラレルグラフから生成され
たシリーズパラレルネスト木を示す図である。
【図7】 本実施の形態の動作説明に用いる記号を定義
した図表である。
【図8】 PDGをシリーズパラレルグラフに変換する
アルゴリズムを示す擬似プログラムを示す図である。
【図9】 シリーズパラレルグラフからシリーズパラレ
ルネスト木を生成するアルゴリズムを示す疑似プログラ
ムを示す図である。
【図10】 本実施の形態におけるハイパーブロック生
成部の全体動作を説明するフローチャートである。
【図11】 ハイパーブロック選択処理の全体的な動作
の流れを示すフローチャートである。
【図12】 図11に対応する動作のアルゴリズムを示
す疑似プログラムを示す図である。
【図13】 パラレルスートに対する実行時間見積処理
の内容を説明するフローチャートである。
【図14】 実行時間評価処理の内容を説明するフロー
チャートである。
【図15】 図14の実行時間評価処理の動作アルゴリ
ズムを示す疑似プログラムを示す図である。
【図16】 利得見積処理の内容を説明するフローチャ
ートである。
【図17】 図16の利得見積処理の動作アルゴリズム
を示す疑似プログラムを示す図である。
【図18】 ノード選択処理の内容を説明するフローチ
ャートである。
【図19】 図18のノード選択処理の動作アルゴリズ
ムを示す疑似プログラムを示す図である。
【図20】 シリーズスートに対する実行時間評価処理
の内容を説明するフローチャートである。
【図21】 図20の実行時間評価処理の動作アルゴリ
ズムを示す疑似プログラムを示す図である。
【図22】 単一ノードに対する実行時間評価処理の内
容を説明するフローチャートである。
【図23】 図22の実行時間評価処理の動作アルゴリ
ズムを示す疑似プログラムを示す図である。
【図24】 最短処理時間の見積もりを、図6のシリー
ズパラレルネスト木における各ノード(スート)に対し
て、並列度1〜6の各場合で求めた結果を示す図であ
る。
【図25】 最短処理時間の見積もりを、図6のシリー
ズパラレルネスト木における各ノード(スート)に対し
て、並列度1〜3の各場合で求めた結果を示す図であ
る。
【図26】 図3に示した基本ブロックC、D、E、F
の内部の命令における依存関係を説明する図である。
【図27】 依存DAGの全てのパスを、ノードへのポ
インタを張ることによって保持するイメージを表す図で
ある。
【図28】 第2の手法において、実行時間評価処理の
内容を説明するフローチャートである。
【図29】 図28の実行時間評価処理の動作アルゴリ
ズムを示す疑似プログラムを示す図である。
【図30】 依存パス融合処理の内容を説明するフロー
チャートを示す図である。
【図31】 第2の手法において、シリーズスートに対
する実行時間評価処理の内容を説明するフローチャート
である。
【図32】 図31の実行時間評価処理の動作アルゴリ
ズムを示す疑似プログラムである。
【図33】 クリティカルパス長再計算処理内容を説明
するフローチャートである。
【図34】 最短処理時間計算処理の内容を説明するフ
ローチャートである。
【図35】 第2の手法において、単一ノードに対する
実行時間評価処理の内容を説明するフローチャートであ
る。
【図36】 図35の実行時間評価処理の動作アルゴリ
ズムを示す疑似プログラムである。
【図37】 第2の手法により得られた最短処理時間の
見積もりを、図6のシリーズパラレルネスト木における
各ノード(スート)に対して、並列度1〜6の各場合で
求めた結果を示す図である。
【図38】 基本ブロックのクリティカルパス長を無視
した場合における最短処理時間の見積もりを、同様にし
て求めた結果を示す図である。
【図39】 処理対象のプログラムの構成を基本ブロッ
クで表現した例を示す図である。
【図40】 パラレルスートの実行時間を構成要素のパ
ラメータ(d、w)で表現できることを説明する図であ
る。
【図41】 モデル化された基本ブロックによるパラレ
ルスートの例を示す図である。
【図42】 基本ブロック内部における隙間を説明する
図である。
【符号の説明】 10…フロントエンド最適化部、11…バイトコード最
適化部、12…四つ組中間コード最適化部、20…命令
レベル並列化最適化部、21…基本ブロック・コードス
ケジューラ、22…ハイパーブロック生成部、23…実
行時間見積部、24…グローバル・コードスケジュー
ラ、30…ネイティブコード生成部、31…コード生成
部、32…命令レベル・コードスケジューラ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 田端 邦男 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 小松 秀昭 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B013 DD04 5B033 CA22 5B081 CC24 CC32

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、プログラムの最
    適化を行う最適化方法において、 処理対象である前記プログラムに対し、基本ブロックを
    単位として実行時間を見積もるステップと、 前記基本ブロックの接続関係を入れ子構造で表すネスト
    木を生成するステップと、 前記ネスト木のノードが条件分岐を伴う場合に、前記基
    本ブロックを単位として見積もられた実行時間に基づい
    て、条件分岐のまま実行する場合と、当該プログラムの
    条件分岐部分を並列実行する場合の、当該プログラムの
    当該ノード部分における実行時間を見積もるステップ
    と、 前記見積もりにより、並列実行する方が実行時間が短い
    場合は、当該ノード部分を一まとまりの並列実行領域と
    し、条件分岐のまま実行する方が実行時間が短い場合
    は、当該ノードの複数の子ノードを複数の並列実行領域
    に分割するステップとを含むことを特徴とするプログラ
    ムの最適化方法。
  2. 【請求項2】 前記基本ブロックを単位として実行時間
    を見積もるステップは、 前記基本ブロックを単位として見積もられた実行時間に
    基づいて、さらに、前記基本ブロック内のプログラム部
    分におけるクリティカルパス長と、当該プログラム部分
    の平均並列度とを取得するステップを含む請求項1に記
    載のプログラムの最適化方法。
  3. 【請求項3】 前記ネスト木を生成するステップは、 前記基本ブロック間の依存関係を表す依存グラフを生成
    するステップと、 前記依存グラフから冗長な枝を取り除いた先行制約グラ
    フを生成するステップと、 前記先行制約グラフのノードの接続関係を入れ子構造で
    表現することにより前記ネスト木を生成するステップと
    を含む請求項1に記載のプログラムの最適化方法。
  4. 【請求項4】 前記条件分岐部分の実行時間を判断する
    ステップは、 前記子ノードにおいて実行可能な並列度ごとに、当該子
    ノードを並列実行した場合の実行時間の最大値を求める
    ステップと、 各並列度における前記実行時間の最大値のうち特定の値
    を前記条件分岐部分を並列実行する場合における実行時
    間と見積もるステップとを含む請求項1に記載のプログ
    ラムの最適化方法。
  5. 【請求項5】 前記条件分岐部分の実行時間を判断する
    ステップは、 実行時間の判断に先立って、前記子ノードを構成する前
    記基本ブロックの命令レベルでの依存関係に基づいて、
    前記基本ブロックの実行時間に関する情報を修正するス
    テップを含む請求項1に記載のプログラムの最適化方
    法。
  6. 【請求項6】 前記プログラムの並列実行領域を決定す
    るステップは、 前記複数の子ノードを複数の並列実行領域に分割する場
    合に、ハードウェアが持つ並列度で各子ノードを並列実
    行した場合における当該各子ノードの実行時間を比較す
    るステップと、 前記実行時間が最も短い子ノードを残して、他の子ノー
    ドを独立した並列実行領域とするステップとを含む請求
    項1に記載のプログラムの最適化方法。
  7. 【請求項7】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、プログラムの最
    適化を行う最適化方法において、 処理対象である前記プログラムの条件分岐部分を、プレ
    ディケート付き命令が実行可能でかつ命令レベルの並列
    実行が可能な計算機にて並列実行する場合の実行時間を
    見積もるステップと、 見積もられた前記実行時間が、前記条件分岐部分をその
    まま実行した場合の実行時間よりも短い場合に、当該条
    件分岐部分を前記プレディケート付き命令による並列実
    行を行うように書き換えるステップとを含み、 前記並列実行時の実行時間を見積もるステップは、 前記プログラムに対し、基本ブロックを単位として実行
    時間を見積もり、当該実行時間に基づいて、各基本ブロ
    ック内のプログラム部分におけるクリティカルパス長
    と、当該プログラム部分の平均並列度とを求めるステッ
    プと、 前記条件分岐による分岐先である基本ブロックを、前記
    クリティカルパス長及び平均並列度の情報に基づいて、
    実行可能な並列度ごとに、当該基本ブロックを並列実行
    した場合の実行時間の最大値を求めるステップと、 各並列度における前記実行時間の最大値のうちの特定の
    値を前記条件分岐部分を並列実行する場合における実行
    時間と見積もるステップとを含むことを特徴とするプロ
    グラムの最適化方法。
  8. 【請求項8】 前記基本ブロックのクリティカルパス長
    及び平均並列度とを求めるステップは、前記基本ブロッ
    クを、隣り合う2辺の一方の値を前記クリティカルパス
    長とし、他方の値を前記平均並列度値とすると共に、ク
    リティカルパス長に対応する辺が当該クリティカルパス
    長を下回らない範囲で変形可能とした矩形で表現するス
    テップを含む請求項7に記載のプログラムの最適化方
    法。
  9. 【請求項9】 前記条件分岐部分の実行時間を見積もる
    ステップは、実行時間の判断に先立って、前記基本ブロ
    ックの命令レベルでの依存関係に基づいて、前記基本ブ
    ロックの実行時間に関する情報を修正するステップを含
    む請求項7に記載のプログラムの最適化方法。
  10. 【請求項10】 プログラミング言語で記述されたプロ
    グラムのソースコードを機械語に変換し、プログラムの
    最適化を行うコンパイラにおいて、 処理対象である前記プログラムに対し、基本ブロックを
    単位として実行時間を見積もる第1のコードスケジュー
    ラと、 前記基本ブロックをまとめて並列実行領域であるハイパ
    ーブロックを生成するハイパーブロック生成部と、 前記プログラムにおける所定の領域を実行した場合の処
    理時間を見積もることにより、前記ハイパーブロック生
    成部による前記ハイパーブロックの生成を支援する実行
    時間見積部と、 生成された前記ハイパーブロックごとにコードスケジュ
    ーリングを行う第2のコードスケジューラとを備え、 前記実行時間見積部は、 前記基本ブロックの接続関係を入れ子構造で表すネスト
    木の所定のノードが条件分岐を伴う場合に、前記基本ブ
    ロックを単位として見積もられた実行時間に基づいて、
    条件分岐のまま実行する場合と、当該プログラムの条件
    分岐部分を並列実行する場合の、当該プログラムの当該
    ノード部分における実行時間を見積もり、 前記ハイパーブロック生成部は、 前記実行時間見積部の見積もりにより、並列実行する方
    が実行時間が短いノードに関して、当該ノード部分を一
    まとまりの並列実行領域とし、条件分岐のまま実行する
    方が実行時間が短いノードに関して、当該ノードの複数
    の子ノードを複数の並列実行領域に分割することを特徴
    とするコンパイラ。
  11. 【請求項11】 前記第1のコードスケジューラは、基
    本ブロックを単位として見積もられた実行時間に基づい
    て、さらに、前記基本ブロック内のプログラム部分にお
    けるクリティカルパス長と、当該プログラム部分の平均
    並列度とを取得する、請求項10に記載のコンパイラ。
  12. 【請求項12】 前記実行時間見積部は、 前記子ノードにおいて実行可能な並列度ごとに、当該子
    ノードを並列実行した場合の実行時間の最大値を求め、 各並列度における前記実行時間の最大値のうちの特定の
    値を前記条件分岐部分を並列実行する場合における実行
    時間と見積もる、請求項10に記載のコンパイラ。
  13. 【請求項13】 前記実行時間見積部は、実行時間の判
    断に先立って、前記子ノードを構成する前記基本ブロッ
    クの命令レベルでの依存関係に基づいて、前記基本ブロ
    ックの実行時間に関する情報を修正する、請求項10に
    記載のコンパイラ。
  14. 【請求項14】 コンピュータに実行させるプログラム
    を当該コンピュータの入力手段が読取可能に記憶した記
    憶媒体において、 処理対象であるプログラムに対し、基本ブロックを単位
    として実行時間を見積もる処理と、 前記基本ブロックの接続関係を入れ子構造で表すネスト
    木を生成する処理と、 前記ネスト木のノードが条件分岐を伴う場合に、前記基
    本ブロックを単位として見積もられた実行時間に基づい
    て、条件分岐のまま実行する場合と、当該プログラムの
    条件分岐部分を並列実行する場合のどちらが前記プログ
    ラムの当該ノード部分における実行時間が短くなるかを
    判断する処理と、 並列実行する方が実行時間が短いと判断した場合は、当
    該ノード部分を一まとまりの並列実行領域とし、条件分
    岐のまま実行する方が実行時間が短いと判断した場合
    は、当該ノードの複数の子ノードを複数の並列実行領域
    に分割する処理とを前記コンピュータに実行させること
    を特徴とする記憶媒体。
  15. 【請求項15】 コンピュータに、 処理対象であるプログラムに対し、基本ブロックを単位
    として実行時間を見積もる処理と、前記基本ブロックの
    接続関係を入れ子構造で表すネスト木を生成する処理
    と、前記ネスト木のノードが条件分岐を伴う場合に、前
    記基本ブロックを単位として見積もられた実行時間に基
    づいて、条件分岐のまま実行する場合と、当該プログラ
    ムの条件分岐部分を並列実行する場合のどちらが前記プ
    ログラムの当該ノード部分における実行時間が短くなる
    かを判断する処理と、並列実行する方が実行時間が短い
    と判断した場合は、当該ノード部分を一まとまりの並列
    実行領域とし、条件分岐のまま実行する方が実行時間が
    短いと判断した場合は、当該ノードの複数の子ノードを
    複数の並列実行領域に分割する処理とを実行させるプロ
    グラムを記憶する記憶手段と、 前記記憶手段から前記プログラムを読み出して当該プロ
    グラムを送信する送信手段とを備えたことを特徴とする
    プログラム伝送装置。
JP2000304618A 2000-10-04 2000-10-04 プログラムの最適化方法及びこれを用いたコンパイラ Expired - Fee Related JP3664473B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Cited By (9)

* Cited by examiner, † Cited by third party
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