JPWO2007096935A1 - プログラム解析方法、プログラム解析装置およびプログラム解析プログラム - Google Patents

プログラム解析方法、プログラム解析装置およびプログラム解析プログラム Download PDF

Info

Publication number
JPWO2007096935A1
JPWO2007096935A1 JP2008501494A JP2008501494A JPWO2007096935A1 JP WO2007096935 A1 JPWO2007096935 A1 JP WO2007096935A1 JP 2008501494 A JP2008501494 A JP 2008501494A JP 2008501494 A JP2008501494 A JP 2008501494A JP WO2007096935 A1 JPWO2007096935 A1 JP WO2007096935A1
Authority
JP
Japan
Prior art keywords
program
graph
reduced
vertex
dependency
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
JP2008501494A
Other languages
English (en)
Other versions
JP5045666B2 (ja
Inventor
真紀子 伊藤
真紀子 伊藤
三宅 英雄
英雄 三宅
須賀 敦浩
敦浩 須賀
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2007096935A1 publication Critical patent/JPWO2007096935A1/ja
Application granted granted Critical
Publication of JP5045666B2 publication Critical patent/JP5045666B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存要素群が求められる。次に、求められた依存要素群を縮退することで依存要素が縮退されたプログラム依存グラフが生成される。依存要素の縮退により、プログラム依存グラフの頂点の数および辺の数を減らすことで、粗い粒度を有するプログラム依存グラフを生成できる。この結果、プログラムの並列化処理等の最適化処理に必要な計算量(計算時間)を削減できる。すなわち、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。

Description

本発明は、大規模なプログラムの最適化技術に関する。
一般に、プロセッサの処理能力は、プロセッサの動作周波数を高くすることで向上し、あるいは命令を並列に実行することで向上する。しかし、プロセッサの消費電力は、動作周波数の増加とともに増加する。また、素子の構造は、動作周波数を上げるために微細にする必要がある。プロセッサの処理能力の向上は、消費電力の問題と素子の微細化による物理的な限界の問題とにより頭打ちになってきている。
非特許文献1によれば、プロセッサが並列に処理できる命令の数は、2−4程度である。処理を投機的に実行するなどの手法を導入することで、並列性を多少向上できるが、それにも限度があることが知られている。プログラムを、命令レベルより大きな粒度で並列化し、複数のプロセッサで実行することにより、プログラムの実行効率は向上し、上述したプロセッサの処理能力の問題は緩和される。
例えば、特許文献1では、プログラムに潜在する並列性を逐次プログラムから抽出する方法が提案されている。この方法では、プログラムの各文間のデータおよび制御の依存関係が抽出され、依存関係に基づいてプログラム依存グラフが生成される。プログラム依存グラフは、プログラムの意味を、文を表現する頂点と、制御の依存関係およびデータ依存関係を表現する辺とで表したグラフである。プログラム依存グラフは、制御の依存関係を扱うため、制御の流れを越える最適化が見込めるという特徴を持つ。また、プログラム依存グラフは、データの依存関係と制御の依存関係を表現しているため、最適化しやすいという特徴を持つ。
非特許文献2、3には、プログラム依存グラフがプログラムの意味を表現できることが記載されている。非特許文献2は、2つのプログラムに対して、そのプログラム依存グラフが同形の場合、プログラムが意味的に等価であることを証明している。非特許文献3では、ある制約条件下にあるプログラム依存グラフから意味的に等価な制御フローグラフを作成する技術が明らかにされている。非特許文献4、5には、プログラム依存グラフに関する技術が記載されている。
特開2002−116916号公報 Ferrante, J., Ottenstein, K. J., Warren, J. E. (IBM, Michigan Tec., Rice U.): The program dependence graph and its use in optimization, ACM TOPLAS, Vol. 9, No. 3, pp. 319-349 (Jul. 1987). S. Horwitz, J. Prins, and T. Reps: On the Adequacy of Program Dependence Graphs for Representing Programs, 15th POPL, pp. 146-157, 1988 S. Horwitz, J. Prins, and T. Reps: Integrating non-interfering versions of programs, ACM Transactions on Programming Languages and Systems, vol. 11, no. 3, pp. 345-387, 1989. A.V. エイホ, R. セシィ, J.D. ウルマン 著: コンパイラ II -原理・技法・ツール-, p.736, サイエンス社, 1990 N. Kas'janov. Distinguishing hammocks in a directed graph. Soviet Math. Doklady, 16(5):448-450, 1975. T. Ball, and S. Horwiz: Constructing Control Flow From Control Dependence, R-92-1091, Computer Sciences Department, University of Wisconsin-Madison, June 1992.
プログラム依存グラフは、文または代入式を頂点としたグラフとなっている。例えば、数個の手続きなどを対象とする場合、頂点数は数十程度であり、プログラム依存グラフによる解析は可能である。しかし、大規模なソフトウェアでは、文または代入式を頂点とする場合、グラフの頂点数が数千から数万となってしまう。一般に、プログラム依存グラフを用いたプログラムの最適化問題は、グラフの規模の指数関数となることが知られている。そのため、文を単位として抽出された従来のプログラム依存グラフでは、プログラム全体を俯瞰した並列性を、現実的なリソース、時間内で抽出することが困難である。
さらに、プログラム依存グラフを縮退する場合には、縮退されたプログラム依存グラフから正しいプログラムコードが生成できなくてはならない(可逆性を有する)。可逆性が保証されていないプログラム依存グラフでは、プログラムを最適化することができない。
本発明の目的は、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現することである。
本発明の一形態では、まず、プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存要素群が求められる。次に、求められた依存要素群を縮退することで依存要素が縮退されたプログラム依存グラフが生成される。依存要素の縮退により、プログラム依存グラフの頂点の数および辺の数を減らすことで、粗い粒度を有するプログラム依存グラフを生成できる。この結果、プログラムの並列化処理等の最適化処理に必要な計算量(計算時間)を削減できる。すなわち、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。
本発明の一形態における好ましい例では、縮退できない依存要素についてハンモックが探索され、探索されたハンモックを縮退することで縮退されたプログラム依存グラフが生成される。あるいは、抽象構文木表現における縮退可能な頂点集合を探索し、探索された頂点集合に対応するプログラム依存グラフ上の頂点集合を縮退することで縮退されたプログラム依存グラフが生成される。あるいは、抽象構文木表現における縮退可能な頂点集合を縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフが生成される。さらに、プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフにおいて所定の結合度を超える頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合を縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフが生成される。
本発明の一形態における好ましい例では、縮退されたプログラム依存グラフにおいて制御の流れを再構成されて、縮退された制御フローグラフが生成される。次に、縮退された制御フローグラフから文レベルの制御フローグラフが生成される。そして、文レベルの制御フローグラフからプログラムコードが生成される。
本発明では、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。
本発明の第1の実施形態を示すブロック図である。 図1に示したプログラム解析装置により実行される解析プログラムの処理フローの概要を示すフローチャートである。 図2に示したステップS200の詳細を示すフローチャートである。 図3に示した処理の詳細を示すフローチャートである。 図2に示したステップS400の詳細を示すフローチャートである。 第1の実施形態におけるプログラム依存グラフを縮退する例を示す説明図である。 本発明の第2の実施形態を示すフローチャートである。 本発明の第3の実施形態を示すフローチャートである。 図8のステップS260のアルゴリズムを示す説明図である。 本発明の第4の実施形態を示すフローチャートである。 第4の実施形態におけるプログラム依存グラフを縮退する例を示す説明図である。 本発明の第5の実施形態を示すフローチャートである。
以下、本発明の実施形態を図面を用いて説明する。
図1は、本発明の第1の実施形態を示している。プログラム解析装置100は、プログラム解析プログラム等を記憶するメモリ装置MEM、プログラム解析プログラムを実行するプロセッサCPUを有している。プログラム解析装置100は、例えば、パーソナルコンピュータまたはワークステーション等により構成される。メモリ装置MEMは、例えば、ハードディスクドライブ装置である。プログラム解析装置100には、ディスプレイDISP、キーボードやマウス等の入力デバイスINPUT、およびディスクドライブ装置DRVが接続されている。
ディスプレイDISPは、入力デバイスINPUTおよびディスクドライブ装置DRVから入力された情報や、プログラム解析プログラムの実行結果等を表示する。ディスクドライブ装置DRVには、プログラム解析プログラムや、解析される逐次プログラムが記録されたCD−ROM、DVD等の記録媒体がセットされる。プログラム解析プログラムおよび解析される逐次プログラムは、ディスクドライブ装置DRVを介してメモリ装置MEMにダウンロードされる。なお、ディスクドライブ装置DRVの代わりに、プログラム解析プログラム等を記憶したメモリカード等のシリコンディスクやハードディスクドライブ装置が、プログラム解析装置100に接続されてもよい。なお、本発明のプログラム解析方法は、プロセッサCPUがプログラム解析プログラムを実行することにより実現される。
図2は、図1に示したプログラム解析装置100(プロセッサCPU)により実行されるプログラム解析プログラムの処理フローの概要を示している。
まず、ステップS100において、メモリ装置MEMに読み込まれた逐次プログラムが解析され、依存関係が抽出される。これにより、プログラム依存グラフPDG等のプログラム解析情報が生成される。プログラム解析情報は、プログラムの文および制御の依存関係を表す複数の依存要素で構成される。ステップS100の処理は、従来のプログラム依存グラフPDGの生成処理と同じである。
次に、ステップS200において、プログラム依存グラフの頂点数および辺数を減らすために、プログラム依存グラフPDGの依存要素(依存関係)が縮退されて、頂点が融合される。この際、縮退されたプログラム依存グラフから正しいプログラムコードを生成するために、可逆的に縮退可能な依存要素のみが縮退される。そして、粗い粒度を有する縮退されたプログラム依存グラフPDGが作成される。
この後、ステップS300において、縮退されたプログラム依存グラフPDGの最適化が実行される。最適化では、例えば、グラフの形を変形することで、違う観点から頂点が融合できないかが検討される。最適化は、コード数を減らすことを目的として行われる。あるいは、最適化は、ステップ数を減らす、並列性の向上により処理速度を向上することを目的として行われる。そして、最適化が満足されるまで、ステップS200、S300が繰り返し実行され、縮退されたプログラム依存グラフPDGが生成される。グラフの規模は、縮退により元のグラフの1/10から1/100になる。
次に、ステップS400において、縮退されたプログラム依存グラフPDGからプログラムコードが生成される。例えば、プログラム依存グラフPDGから並列処理が可能な複数のプログラムコードが生成される。すなわち、最適化されたプログラムが生成される。縮退によりグラフの規模が小さくなっているため、プログラムの並列性を抽出するための計算量は、従来に比べて大幅に少ない。この結果、現実的な時間にて、プログラムを最適化できる。
図3は、図2に示したステップS200の詳細を示している。まず、ステップS500Aにおいて、十分に縮退されているかが判定される。縮退が不十分な場合、処理はステップS500に進む。縮退が十分な場合、処理は終了し、縮退したプログラム依存グラフPDGが生成される。次に、ステップS500において、縮退すべき依存要素(依存関係)が特定される。次に、ステップS600において、特定した依存要素が縮退可能かどうかが判定される。ステップS500A、S500、S600を実行するプロセッサCPUは、プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存関係群を求める縮退判定部として機能する。次に、ステップS700において、縮退可能と判定された依存要素のみが縮退され、処理はステップS500Aに戻る。ステップS700を実行するプロセッサCPUは、縮退可能と判定された依存要素群を縮退することで縮退されたプログラム依存グラフPDGを生成するグラフ生成部として機能する。
本発明では、プログラムコードは、縮退されたプログラム依存グラフPDGを用いて生成される。このため、縮退されたプログラム依存グラフPDGから正しいプログラムコードが生成できることを、すなわち可逆性を、予め検証する必要がある。この検証を、ステップS500、S600で行う。すなわち、ステップS500、S600により、縮退されたプログラム依存グラフPDGと元のプログラム依存グラフPDGとの可逆性が保証される。換言すれば、可逆的に縮退可能な依存要素群を求めることで、元の逐次プログラムと、縮退されたプログラム依存グラフPDGから生成された逐次プログラムとの等価性が保証される。
非特許文献6より、後述する制御フローグラフCFG上で次の2つの条件(1)、(2)を満足する場合、そのプログラムのプログラム依存グラフから制御の流れを安全に再構成することができる(可逆性を有する)ことが知られている。
(1)制御フローグラフにおける逆辺(back-edge) e=(v,w)について、頂点wが頂点vを支配する(dominant)。
(2)頂点vをエントリとする自然なループ(非特許文献4)について、ループ内のいずれの頂点wも頂点vを後支配(post-dominant)しない。
そこで、次の性質を満足する場合、頂点の集合Vxの依存関係を縮退し1つの頂点vxとみなすことができる。
<性質>:プログラム依存グラフPDG上の頂点の集合Vxであって、頂点の集合Vxに属する頂点が、対応する制御フローグラフCFG上でハンモックHを形成する。
このように、本実施形態では、まず、縮退したプログラム依存グラフPDGから適切なプログラムのコードを生成可能とするために、元のプログラムにおいて、上述した条件(1)あるいは条件(2)を満足しない部分プログラムについては、適切なハンモックを求め、縮退する。縮退した部分プログラムの制御の流れの情報は、付加情報として保存し、プログラムコードを生成するときに利用する。さらに、プログラム依存グラフPDGの規模を縮小するために、複数の頂点を1つの頂点に縮退する場合、その頂点は制御フローグラフCFG上で、ハンモックHを形成することを条件とする(縮退可能な条件)。
ここで、ハンモックHとは、有向グラフGにおける次の条件(3)−(5)性質を満たす部分グラフである(非特許文献1、非特許文献5)。ハンモックの求め方は、非特許文献5に明らかにされている。
(3)エントリ頂点とイクジット頂点を持つ。
(4)ハンモックH外の頂点vからハンモックH内の頂点uを間の有向パスは必ずエントリ頂点を通る。
(5)ハンモックH内の頂点uからハンモック外の頂点wへの有向パスは必ずイクジット頂点を通る。
図4は、図3に示した処理の詳細を示している。この例では、プログラム解析情報として、文レベルの制御フローグラフCFGと文レベルのプログラム依存グラフPDGが入力される。ステップS510、S512は、図3のステップS500Aに対応する処理である。ステップS610、S614、S710、S712は、図3のステップS500に対応する処理である。ステップS710でハンモックを求めているため、頂点集合が縮退可能であることは自明である。このため、図3のステップS600に対応する処理は省略されている。ステップS711、S713は、図3のステップS700に対応する処理である。ステップS510、S610、S710、S711では、上述した条件(1)に対応する縮退処理を行う。ステップS512、S614、S712、S713では、上述した条件(2)に対応する縮退処理を行う。ステップS510、S512、S610、S710、S711を実行するプロセッサCPUは、縮退判定部として機能する。ステップS711、S713を実行するプロセッサCPUは、グラフ生成部として機能する。
まず、ステップS510、S610では、制御フローグラフCFGにおける全ての逆辺(v、w)について、上記条件(1)が満足するか否かが判定される。条件(1)を満足する場合、可逆的に縮退可能な依存要素(依存関係)が特定され、縮退される。条件(1)を満足しない逆辺(v、w)については、ステップS710において、頂点v、w(部分グラフ)を含む最小ハンモックHGvが探索される。そして、ステップS711において、制御フローグラフCFGおよびプログラム依存グラフPDGに対して、ハンモックに含まれる頂点の集合が、1つの頂点に縮退され、処理はステップS510に戻る。
次に、ステップS512、S614では、制御フローグラフCFGにおける全ての分岐頂点vについて、上記条件(2)が満足するか否かが判定される。条件(2)を満足する場合、可逆的に縮退可能な依存要素(依存関係)が特定され、縮退される。条件(2)を満足しない分岐頂点vについては、ステップS712において、頂点vをエントリとする自然なループを含む最小ハンモックHGvが探索される。そして、ステップS713において、制御フローグラフCFGおよびプログラム依存グラフPDGに対して、ハンモックに含まれる頂点の集合が、1つの頂点に縮退され、処理はステップS512に戻る。
縮退されたプログラム依存グラフPDGの規模は、元のプログラム依存グラフPDGの1/10−1/100にすることが可能である。例えば、一般的な動画像圧縮ソフトウェアは、プログラムの行数より、頂点数が6000程度になる。これを、頂点数が2桁少ない60程度に縮退することで、定数の6000乗の問題を、定数の100乗程度の問題に変えることができる。すなわち、現実的な時間では解を得るのが困難な問題を、時間を多少かければ解ける問題に変えることができる。
図5は、図2に示したステップS400の詳細を示している。まず、ステップS410において、制御の流れが再構成され、縮退された制御フローグラフCFGが生成される。この際、縮退されたプログラム依存グラフPDGは、上記の条件(1)および条件(2)を満足するため、制御の流れを安全に再構成できる。すなわち、可逆性を有している。ステップS410を実行するプロセッサCPUは、縮退されたプログラム依存グラフPDGにおいて制御の流れを再構成する再構成部として機能する。
次に、ステップS420において、縮退した頂点集合について、図4の処理時に保存された頂点間の制御の流れを用いて、縮退した頂点の制御の流れが展開される。これにより、文レベルの制御フローグラフCFGが得られる。ステップS420を実行するプロセッサCPUは、縮退された制御フローグラフCFGを生成し、縮退された制御フローグラフから文レベルの制御フローグラフCFGを生成する制御フローグラフ生成部として機能する。ステップS430において、適切なプログラム言語(プログラムコード)が出力され、最適化された逐次プログラムが得られる。ステップS430を実行するプロセッサCPUは、文レベルの制御フローグラフCFGからプログラムコードを生成するコード生成部として機能する。
図6は、第1の実施形態においてプログラム依存グラフPDGを縮退する例を示している。この例では、do-while文の制御構造に着目し、図中のプログラム内に下線で示した4ステップが縮退される。
以上、第1の実施形態では、プログラム依存グラフPDGの規模(頂点数および辺数)を減らすために、プログラム依存グラフPDGの依存要素(依存関係)を縮退して頂点を融合し、粗粒度のプログラム依存グラフPDGを作成する。これにより、縮退されたプログラム依存グラフPDGの規模を元のプログラム依存グラフPDGに比べて大幅に小さくすることが可能になる。したがって、プログラムの並列化処理等の最適化に必要な計算量(計算時間)を削減できる。すなわち、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。
可逆性を有する縮退を行うことで、縮退されたプログラム依存グラフPDGと元のプログラム依存グラフPDGとの可逆性を保証できる。これにより、縮退されたプログラム依存グラフPDGから正しいプログラムを出力できる。
図7は、本発明の第2の実施形態を示している。第1の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態では、抽象構文木に基づいてプログラム依存グラフPDGが縮退される。このために、プログラムの抽象構文木表現AST(Abstract Syntax Tree)および文レベルのプログラム依存グラフPDGが入力される。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図7に示した処理が実施される。ステップS520は、図3のステップS500に対応する処理である。ステップS720は、図3のステップS700に対応する処理である。ステップS520を実行するプロセッサCPUは、縮退判定部として機能する。ステップS720を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
まず、ステップS520において、抽象構文木表現ASTの構文木が深さ優先で探索され、可逆的に縮退可能な頂点集合Vbの集合Vが抽出される。次に、ステップS720において、集合Vの各要素Vbについて、プログラム依存グラフPDG上の対応する頂点集合が探索され、これ等集合に含まれる頂点が1つの頂点に縮退される。すなわち、縮退されたプログラム依存グラフPDGが生成される。
以上、第2の実施形態においても、上述した第1の実施形態と同様の効果を得ることができる。さらに、この実施形態では、プログラムの抽象構文木表現ASTを用いることにより、規模が小さく、かつ可逆性が保証されたプログラム依存グラフPDGを生成できる。
図8は、本発明の第3の実施形態を示している。第1および第2の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態では、第2の実施形態(図7)の探索および変換の手順を簡略化するために、プログラムの抽象構文木表現ASTのみが入力される。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図8に示した処理が実施される。ステップS530は、図3のステップS500に対応する処理である。ステップS730、S732は、図3のステップS700に対応する処理である。ステップS630は、図3のステップS500Aに対応する処理である。ステップS530、S630を実行するプロセッサCPUは、縮退判定部として機能する。ステップS730、S732を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
まず、ステップS530において、図7のステップS520と同様に、抽象構文木表現ASTの構文木が深さ優先で探索され、可逆的に縮退可能な頂点集合Vbの集合Vが抽出される。次に、ステップS730において、抽象構文木上で頂点集合Vbが、1つの頂点に縮退される。ステップS630において、探索が終了していない場合、ステップS530、S730が繰り返し実施される。探索が終了した場合、ステップS732において、図3に示したステップS700と同様に、縮退されたプログラム依存グラフPDGが生成される。
図9は、図8のステップS260のアルゴリズムを示している。すなわち、抽象構文木表現から可逆的に縮退可能な頂点集合を求めるアルゴリズムは、図9のように表現できる。前述の制御の流れを再構成するための条件(1)および条件(2)を満たさないC言語の構文として、switch文、do-while文、break文、goto文、関数の末尾以外でのreturn文がある。switch文およびdo-while文については、文全体を1つの頂点に縮退することで、条件(1)および条件(2)を満足させることができる(処理1)。for文、while文内のbreak文については直近の親であるfor文あるいはwhile文全体を1つの頂点に縮退することで、条件(1)および条件(2)を満足させることができる(処理2)。goto文およびreturn文については、構文木表現から適切なハンモックを探索することが困難なため、制御フローグラフに変換した後、ハンモックを探索すればよい(処理3)。抽象構文木に基づくプログラム依存グラフPDGの縮退は、goto文や関数の末尾以外でのreturn文をふくまないプログラムの場合、縮退する範囲の探索が簡単になるという利点がある。
以上、第3の実施形態においても、上述した第1および第2の実施形態と同様の効果を得ることができる。
図10は、本発明の第4の実施形態を示している。第1の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態は、プログラム依存グラフPDGに基づいてこのプログラム依存グラフPDGを縮退するための基本原理を示している。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図10に示した処理が実施される。ステップS540は、図3のステップS500Aに対応する処理である。ステップS542、S544は、図3のステップS500に対応する処理である。ステップS640は、図3のステップS600に対応する処理である。ステップS740は、図3のステップS700に対応する処理である。ステップS540、S542、S544、S640を実行するプロセッサCPUは、縮退判定部として機能する。ステップS740を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
まず、ステップS542において、入力された文レベルのプログラム依存グラフPDGに基づいて、プログラム依存グラフPDG内の頂点間の結合の強さが求められる。結合度(依存要素)は、データ依存辺とその大きさ、および、制御依存辺、処理の大きさから計算される。次に、ステップS544において、頂点間の結合度が、予め設定された所定の結合度Xを超えるか否かが判定される。次に、ステップS640において、結合度が上記Xを超える頂点の依存関係が縮退可能か否かが判定される。縮退可能な場合、ステップS740において、頂点を結合し依存関係を縮退する。ステップS542、S544、S640、S740の処理を、プログラム依存グラフPDGの全ての頂点間で実施することにより、縮退されたプログラム依存グラフPDGが生成される。
なお、この実施形態では、次の2つの条件(6)、(7)を満たすことが、可逆的に縮退可能な条件になる。
(6)対応する制御フローグラフCFG上で、頂点集合の外から頂点集合の内への分岐は、頂点集合の先頭頂点へのみである。対応する制御フローグラフCFG上で、頂点集合の内から頂点集合の外への分岐は、頂点集合の最後の頂点のみである。
(7)頂点間のデータ依存パスに外部の頂点は含まれない。
図11は、第4の実施形態においてプログラム依存グラフPDGを縮退する例を示している。この例では、プログラム依存グラフPDGの構造に着目し、図中のプログラム内に下線で示した2ステップが縮退される。
以上、第4の実施形態においても、上述した第1の実施形態と同様の効果を得ることができる。さらに、この実施形態では、プログラム依存グラフPDGのみを用いることにより、規模が小さく、かつ可逆性が保証されたプログラム依存グラフPDGを生成できる。
図12は、本発明の第5の実施形態を示している。第1および第4の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態は、第4の実施形態を、さらに具体的に示したものであり、プログラム依存グラフPDGに基づいてこのプログラム依存グラフPDGが縮退される。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図12に示した処理が実施される。ステップS560は、図3のステップS500Aに対応する処理である。ステップS562、S564、S566、S568、S569は、図3のステップS500に対応する処理である。ステップS750は、図3のステップS600とステップS700に対応する処理である。ステップS752は、図3のステップS700に対応する処理である。ステップS560、S562、S564、S566、S568、S569を実行するプロセッサCPUは、縮退判定部として機能する。ステップS750、S752を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
図12では、制御の流れを再構成するための上記条件(1)および条件(2)を満たすプログラム依存グラフPDGの制御依存部分グラフは木構造になるという規則を用いて、プログラム依存グラフPDGが縮退される。また、可逆的に縮退可能にするために、上述した条件(6)、(7)を満たすことが必要である。図12に示した処理は、ステップS560に示すように、プログラム依存グラフPDGの制御依存部分グラフを後順に走査することで実施される。
まず、ステップS562において、頂点Vxがリーフ(木構造の末端)にあるか否かが判定される。頂点Vxがリーフにある場合、ステップS564において、リーフにある頂点Vxに対して頂点間の結合度が求められる。頂点Vxがリーフにない場合、すなわち、頂点Vxが木構造の途中にある場合、ステップS750において、結合度が高く、条件(7)を満たす子頂点間が結合され、縮退される。
次に、ステップS566において、頂点Vxと子頂点間の結合度(親子間の結合度)が求められる。結合度が高い場合、ステップS752において、頂点Vx以下の制御依存部分木が、頂点に縮退される。次に、ステップS568において、縮退後の頂点Vxに対して、結合度が求められる。結合度が低い場合、ステップS569において、頂点Vx以下の部分木と、部分木以外の頂点間との結合度が、頂点Vxに集積される。これにより、上記条件(6)を満たす範囲で、結合すべき頂点集合を探索できる。そして、全ての探索が終了した時点でプログラム依存グラフPDGが出力される。以上、第5の実施形態においても、上述した第1および第4の実施形態と同様の効果を得ることができる。
なお、上述した実施形態では、プロセッサCPUがプログラム解析プログラムを実行することにより、縮退されたプログラム依存グラフPDGを生成し、このプログラム依存グラフPDGに基づいて最適化された逐次プログラム(プログラムコード)を生成する例を述べた。本発明はかかる実施形態に限定されるものではない。例えば、上述した縮退判定部、グラフ生成部、再構成部、制御フローグラフ生成部およびコード生成部は、ハードウエアで実現されてもよい。
以上、本発明について詳細に説明してきたが、上記の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
本発明は、大規模なプログラムを最適化するために用いるプログラム依存グラフの生成方法に適用できる。
本発明は、大規模なプログラムの最適化技術に関する。
一般に、プロセッサの処理能力は、プロセッサの動作周波数を高くすることで向上し、あるいは命令を並列に実行することで向上する。しかし、プロセッサの消費電力は、動作周波数の増加とともに増加する。また、素子の構造は、動作周波数を上げるために微細にする必要がある。プロセッサの処理能力の向上は、消費電力の問題と素子の微細化による物理的な限界の問題とにより頭打ちになってきている。
非特許文献1によれば、プロセッサが並列に処理できる命令の数は、2−4程度である。処理を投機的に実行するなどの手法を導入することで、並列性を多少向上できるが、それにも限度があることが知られている。プログラムを、命令レベルより大きな粒度で並列化し、複数のプロセッサで実行することにより、プログラムの実行効率は向上し、上述したプロセッサの処理能力の問題は緩和される。
例えば、特許文献1では、プログラムに潜在する並列性を逐次プログラムから抽出する方法が提案されている。この方法では、プログラムの各文間のデータおよび制御の依存関係が抽出され、依存関係に基づいてプログラム依存グラフが生成される。プログラム依存グラフは、プログラムの意味を、文を表現する頂点と、制御の依存関係およびデータ依存関係を表現する辺とで表したグラフである。プログラム依存グラフは、制御の依存関係を扱うため、制御の流れを越える最適化が見込めるという特徴を持つ。また、プログラム依存グラフは、データの依存関係と制御の依存関係を表現しているため、最適化しやすいという特徴を持つ。
非特許文献2、3には、プログラム依存グラフがプログラムの意味を表現できることが記載されている。非特許文献2は、2つのプログラムに対して、そのプログラム依存グラフが同形の場合、プログラムが意味的に等価であることを証明している。非特許文献3では、ある制約条件下にあるプログラム依存グラフから意味的に等価な制御フローグラフを作成する技術が明らかにされている。非特許文献4、5には、プログラム依存グラフに関する技術が記載されている。
特開2002−116916号公報 Ferrante, J., Ottenstein, K. J., Warren, J. E. (IBM, Michigan Tec., Rice U.): The program dependence graph and its use in optimization, ACM TOPLAS, Vol. 9, No. 3, pp. 319-349 (Jul. 1987). S. Horwitz, J. Prins, and T. Reps: On the Adequacy of Program Dependence Graphs for Representing Programs, 15th POPL, pp. 146-157, 1988 S. Horwitz, J. Prins, and T. Reps: Integrating non-interfering versions of programs, ACM Transactions on Programming Languages and Systems, vol. 11, no. 3, pp. 345-387, 1989. A.V. エイホ, R. セシィ, J.D. ウルマン 著: コンパイラ II -原理・技法・ツール-, p.736, サイエンス社, 1990 N. Kas'janov. Distinguishing hammocks in a directed graph. Soviet Math. Doklady, 16(5):448-450, 1975. T. Ball, and S. Horwiz: Constructing Control Flow From Control Dependence, R-92-1091, Computer Sciences Department, University of Wisconsin-Madison, June 1992.
プログラム依存グラフは、文または代入式を頂点としたグラフとなっている。例えば、数個の手続きなどを対象とする場合、頂点数は数十程度であり、プログラム依存グラフによる解析は可能である。しかし、大規模なソフトウエアでは、文または代入式を頂点とする場合、グラフの頂点数が数千から数万となってしまう。一般に、プログラム依存グラフを用いたプログラムの最適化問題は、グラフの規模の指数関数となることが知られている。そのため、文を単位として抽出された従来のプログラム依存グラフでは、プログラム全体を俯瞰した並列性を、現実的なリソース、時間内で抽出することが困難である。
さらに、プログラム依存グラフを縮退する場合には、縮退されたプログラム依存グラフから正しいプログラムコードが生成できなくてはならない(可逆性を有する)。可逆性が保証されていないプログラム依存グラフでは、プログラムを最適化することができない。
本発明の目的は、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現することである。
本発明の一形態では、まず、プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存要素群が求められる。次に、求められた依存要素群を縮退することで依存要素が縮退されたプログラム依存グラフが生成される。依存要素の縮退により、プログラム依存グラフの頂点の数および辺の数を減らすことで、粗い粒度を有するプログラム依存グラフを生成できる。この結果、プログラムの並列化処理等の最適化処理に必要な計算量(計算時間)を削減できる。すなわち、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。
本発明の一形態における好ましい例では、縮退できない依存要素についてハンモックが探索され、探索されたハンモックを縮退することで縮退されたプログラム依存グラフが生成される。あるいは、抽象構文木表現における縮退可能な頂点集合を探索し、探索された頂点集合に対応するプログラム依存グラフ上の頂点集合を縮退することで縮退されたプログラム依存グラフが生成される。あるいは、抽象構文木表現における縮退可能な頂点集合を縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフが生成される。さらに、プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフにおいて所定の結合度を超える頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合を縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフが生成される。
本発明の一形態における好ましい例では、縮退されたプログラム依存グラフにおいて制御の流れを再構成されて、縮退された制御フローグラフが生成される。次に、縮退された制御フローグラフから文レベルの制御フローグラフが生成される。そして、文レベルの制御フローグラフからプログラムコードが生成される。
本発明では、可逆性を有する縮退されたプログラム依存グラフを生成することにより、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。
以下、本発明の実施形態を図面を用いて説明する。
図1は、本発明の第1の実施形態を示している。プログラム解析装置100は、プログラム解析プログラム等を記憶するメモリ装置MEM、プログラム解析プログラムを実行するプロセッサCPUを有している。プログラム解析装置100は、例えば、パーソナルコンピュータまたはワークステーション等により構成される。メモリ装置MEMは、例えば、ハードディスクドライブ装置である。プログラム解析装置100には、ディスプレイDISP、キーボードやマウス等の入力デバイスINPUT、およびディスクドライブ装置DRVが接続されている。
ディスプレイDISPは、入力デバイスINPUTおよびディスクドライブ装置DRVから入力された情報や、プログラム解析プログラムの実行結果等を表示する。ディスクドライブ装置DRVには、プログラム解析プログラムや、解析される逐次プログラムが記録されたCD−ROM、DVD等の記録媒体がセットされる。プログラム解析プログラムおよび解析される逐次プログラムは、ディスクドライブ装置DRVを介してメモリ装置MEMにダウンロードされる。なお、ディスクドライブ装置DRVの代わりに、プログラム解析プログラム等を記憶したメモリカード等のシリコンディスクやハードディスクドライブ装置が、プログラム解析装置100に接続されてもよい。なお、本発明のプログラム解析方法は、プロセッサCPUがプログラム解析プログラムを実行することにより実現される。
図2は、図1に示したプログラム解析装置100(プロセッサCPU)により実行されるプログラム解析プログラムの処理フローの概要を示している。
まず、ステップS100において、メモリ装置MEMに読み込まれた逐次プログラムが解析され、依存関係が抽出される。これにより、プログラム依存グラフPDG等のプログラム解析情報が生成される。プログラム解析情報は、プログラムの文および制御の依存関係を表す複数の依存要素で構成される。ステップS100の処理は、従来のプログラム依存グラフPDGの生成処理と同じである。
次に、ステップS200において、プログラム依存グラフの頂点数および辺数を減らすために、プログラム依存グラフPDGの依存要素(依存関係)が縮退されて、頂点が融合される。この際、縮退されたプログラム依存グラフから正しいプログラムコードを生成するために、可逆的に縮退可能な依存要素のみが縮退される。そして、粗い粒度を有する縮退されたプログラム依存グラフPDGが作成される。
この後、ステップS300において、縮退されたプログラム依存グラフPDGの最適化が実行される。最適化では、例えば、グラフの形を変形することで、違う観点から頂点が融合できないかが検討される。最適化は、コード数を減らすことを目的として行われる。あるいは、最適化は、ステップ数を減らす、並列性の向上により処理速度を向上することを目的として行われる。そして、最適化が満足されるまで、ステップS200、S300が繰り返し実行され、縮退されたプログラム依存グラフPDGが生成される。グラフの規模は、縮退により元のグラフの1/10から1/100になる。
次に、ステップS400において、縮退されたプログラム依存グラフPDGからプログラムコードが生成される。例えば、プログラム依存グラフPDGから並列処理が可能な複数のプログラムコードが生成される。すなわち、最適化されたプログラムが生成される。縮退によりグラフの規模が小さくなっているため、プログラムの並列性を抽出するための計算量は、従来に比べて大幅に少ない。この結果、現実的な時間にて、プログラムを最適化できる。
図3は、図2に示したステップS200の詳細を示している。まず、ステップS500Aにおいて、十分に縮退されているかが判定される。縮退が不十分な場合、処理はステップS500に進む。縮退が十分な場合、処理は終了し、縮退したプログラム依存グラフPDGが生成される。次に、ステップS500において、縮退すべき依存要素(依存関係)が特定される。次に、ステップS600において、特定した依存要素が縮退可能かどうかが判定される。ステップS500A、S500、S600を実行するプロセッサCPUは、プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存関係群を求める縮退判定部として機能する。次に、ステップS700において、縮退可能と判定された依存要素のみが縮退され、処理はステップS500Aに戻る。ステップS700を実行するプロセッサCPUは、縮退可能と判定された依存要素群を縮退することで縮退されたプログラム依存グラフPDGを生成するグラフ生成部として機能する。
本発明では、プログラムコードは、縮退されたプログラム依存グラフPDGを用いて生成される。このため、縮退されたプログラム依存グラフPDGから正しいプログラムコードが生成できることを、すなわち可逆性を、予め検証する必要がある。この検証を、ステップS500、S600で行う。すなわち、ステップS500、S600により、縮退されたプログラム依存グラフPDGと元のプログラム依存グラフPDGとの可逆性が保証される。換言すれば、可逆的に縮退可能な依存要素群を求めることで、元の逐次プログラムと、縮退されたプログラム依存グラフPDGから生成された逐次プログラムとの等価性が保証される。
非特許文献6より、後述する制御フローグラフCFG上で次の2つの条件(1)、(2)を満足する場合、そのプログラムのプログラム依存グラフから制御の流れを安全に再構成することができる(可逆性を有する)ことが知られている。
(1)制御フローグラフにおける逆辺(back-edge) e=(v,w)について、頂点wが頂点vを支配する(dominant)。
(2)頂点vをエントリとする自然なループ(非特許文献4)について、ループ内のいずれの頂点wも頂点vを後支配(post-dominant)しない。
そこで、次の性質を満足する場合、頂点の集合Vxの依存関係を縮退し1つの頂点vxとみなすことができる。
<性質>:プログラム依存グラフPDG上の頂点の集合Vxであって、頂点の集合Vxに属する頂点が、対応する制御フローグラフCFG上でハンモックHを形成する。
このように、本実施形態では、まず、縮退したプログラム依存グラフPDGから適切なプログラムのコードを生成可能とするために、元のプログラムにおいて、上述した条件(1)あるいは条件(2)を満足しない部分プログラムについては、適切なハンモックを求め、縮退する。縮退した部分プログラムの制御の流れの情報は、付加情報として保存し、プログラムコードを生成するときに利用する。さらに、プログラム依存グラフPDGの規模を縮小するために、複数の頂点を1つの頂点に縮退する場合、その頂点は制御フローグラフCFG上で、ハンモックHを形成することを条件とする(縮退可能な条件)。
ここで、ハンモックHとは、有向グラフGにおける次の条件(3)−(5)性質を満たす部分グラフである(非特許文献1、非特許文献5)。ハンモックの求め方は、非特許文献5に明らかにされている。
(3)エントリ頂点とイクジット頂点を持つ。
(4)ハンモックH外の頂点vからハンモックH内の頂点uを間の有向パスは必ずエントリ頂点を通る。
(5)ハンモックH内の頂点uからハンモック外の頂点wへの有向パスは必ずイクジット頂点を通る。
図4は、図3に示した処理の詳細を示している。この例では、プログラム解析情報として、文レベルの制御フローグラフCFGと文レベルのプログラム依存グラフPDGが入力される。ステップS510、S512は、図3のステップS500Aに対応する処理である。ステップS610、S614、S710、S712は、図3のステップS500に対応する処理である。ステップS710でハンモックを求めているため、頂点集合が縮退可能であることは自明である。このため、図3のステップS600に対応する処理は省略されている。ステップS711、S713は、図3のステップS700に対応する処理である。ステップS510、S610、S710、S711では、上述した条件(1)に対応する縮退処理を行う。ステップS512、S614、S712、S713では、上述した条件(2)に対応する縮退処理を行う。ステップS510、S512、S610、S710、S711を実行するプロセッサCPUは、縮退判定部として機能する。ステップS711、S713を実行するプロセッサCPUは、グラフ生成部として機能する。
まず、ステップS510、S610では、制御フローグラフCFGにおける全ての逆辺(v、w)について、上記条件(1)が満足するか否かが判定される。条件(1)を満足する場合、可逆的に縮退可能な依存要素(依存関係)が特定され、縮退される。条件(1)を満足しない逆辺(v、w)については、ステップS710において、頂点v、w(部分グラフ)を含む最小ハンモックHGvが探索される。そして、ステップS711において、制御フローグラフCFGおよびプログラム依存グラフPDGに対して、ハンモックに含まれる頂点の集合が、1つの頂点に縮退され、処理はステップS510に戻る。
次に、ステップS512、S614では、制御フローグラフCFGにおける全ての分岐頂点vについて、上記条件(2)が満足するか否かが判定される。条件(2)を満足する場合、可逆的に縮退可能な依存要素(依存関係)が特定され、縮退される。条件(2)を満足しない分岐頂点vについては、ステップS712において、頂点vをエントリとする自然なループを含む最小ハンモックHGvが探索される。そして、ステップS713において、制御フローグラフCFGおよびプログラム依存グラフPDGに対して、ハンモックに含まれる頂点の集合が、1つの頂点に縮退され、処理はステップS512に戻る。
縮退されたプログラム依存グラフPDGの規模は、元のプログラム依存グラフPDGの1/10−1/100にすることが可能である。例えば、一般的な動画像圧縮ソフトウェアは、プログラムの行数より、頂点数が6000程度になる。これを、頂点数が2桁少ない60程度に縮退することで、定数の6000乗の問題を、定数の100乗程度の問題に変えることができる。すなわち、現実的な時間では解を得るのが困難な問題を、時間を多少かければ解ける問題に変えることができる。
図5は、図2に示したステップS400の詳細を示している。まず、ステップS410において、制御の流れが再構成され、縮退された制御フローグラフCFGが生成される。この際、縮退されたプログラム依存グラフPDGは、上記の条件(1)および条件(2)を満足するため、制御の流れを安全に再構成できる。すなわち、可逆性を有している。ステップS410を実行するプロセッサCPUは、縮退されたプログラム依存グラフPDGにおいて制御の流れを再構成する再構成部として機能する。
次に、ステップS420において、縮退した頂点集合について、図4の処理時に保存された頂点間の制御の流れを用いて、縮退した頂点の制御の流れが展開される。これにより、文レベルの制御フローグラフCFGが得られる。ステップS420を実行するプロセッサCPUは、縮退された制御フローグラフCFGを生成し、縮退された制御フローグラフから文レベルの制御フローグラフCFGを生成する制御フローグラフ生成部として機能する。ステップS430において、適切なプログラム言語(プログラムコード)が出力され、最適化された逐次プログラムが得られる。ステップS430を実行するプロセッサCPUは、文レベルの制御フローグラフCFGからプログラムコードを生成するコード生成部として機能する。
図6は、第1の実施形態においてプログラム依存グラフPDGを縮退する例を示している。この例では、do-while文の制御構造に着目し、図中のプログラム内に下線で示した4ステップが縮退される。
以上、第1の実施形態では、プログラム依存グラフPDGの規模(頂点数および辺数)を減らすために、プログラム依存グラフPDGの依存要素(依存関係)を縮退して頂点を融合し、粗粒度のプログラム依存グラフPDGを作成する。これにより、縮退されたプログラム依存グラフPDGの規模を元のプログラム依存グラフPDGに比べて大幅に小さくすることが可能になる。したがって、プログラムの並列化処理等の最適化に必要な計算量(計算時間)を削減できる。すなわち、大規模ソフトウエアの解析および最適化を現実的な時間で実現できる。
可逆性を有する縮退を行うことで、縮退されたプログラム依存グラフPDGと元のプログラム依存グラフPDGとの可逆性を保証できる。これにより、縮退されたプログラム依存グラフPDGから正しいプログラムを出力できる。
図7は、本発明の第2の実施形態を示している。第1の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態では、抽象構文木に基づいてプログラム依存グラフPDGが縮退される。このために、プログラムの抽象構文木表現AST(Abstract Syntax Tree)および文レベルのプログラム依存グラフPDGが入力される。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図7に示した処理が実施される。ステップS520は、図3のステップS500に対応する処理である。ステップS720は、図3のステップS700に対応する処理である。ステップS520を実行するプロセッサCPUは、縮退判定部として機能する。ステップS720を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
まず、ステップS520において、抽象構文木表現ASTの構文木が深さ優先で探索され、可逆的に縮退可能な頂点集合Vbの集合Vが抽出される。次に、ステップS720において、集合Vの各要素Vbについて、プログラム依存グラフPDG上の対応する頂点集合が探索され、これ等集合に含まれる頂点が1つの頂点に縮退される。すなわち、縮退されたプログラム依存グラフPDGが生成される。
以上、第2の実施形態においても、上述した第1の実施形態と同様の効果を得ることができる。さらに、この実施形態では、プログラムの抽象構文木表現ASTを用いることにより、規模が小さく、かつ可逆性が保証されたプログラム依存グラフPDGを生成できる。
図8は、本発明の第3の実施形態を示している。第1および第2の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態では、第2の実施形態(図7)の探索および変換の手順を簡略化するために、プログラムの抽象構文木表現ASTのみが入力される。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図8に示した処理が実施される。ステップS530は、図3のステップS500に対応する処理である。ステップS730、S732は、図3のステップS700に対応する処理である。ステップS630は、図3のステップS500Aに対応する処理である。ステップS530、S630を実行するプロセッサCPUは、縮退判定部として機能する。ステップS730、S732を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
まず、ステップS530において、図7のステップS520と同様に、抽象構文木表現ASTの構文木が深さ優先で探索され、可逆的に縮退可能な頂点集合Vbの集合Vが抽出される。次に、ステップS730において、抽象構文木上で頂点集合Vbが、1つの頂点に縮退される。ステップS630において、探索が終了していない場合、ステップS530、S730が繰り返し実施される。探索が終了した場合、ステップS732において、図3に示したステップS700と同様に、縮退されたプログラム依存グラフPDGが生成される。
図9は、図8のステップS530のアルゴリズムを示している。すなわち、抽象構文木表現から可逆的に縮退可能な頂点集合を求めるアルゴリズムは、図9のように表現できる。前述の制御の流れを再構成するための条件(1)および条件(2)を満たさないC言語の構文として、switch文、do-while文、break文、goto文、関数の末尾以外でのreturn文がある。switch文およびdo-while文については、文全体を1つの頂点に縮退することで、条件(1)および条件(2)を満足させることができる(処理1)。for文、while文内のbreak文については直近の親であるfor文あるいはwhile文全体を1つの頂点に縮退することで、条件(1)および条件(2)を満足させることができる(処理2)。goto文およびreturn文については、構文木表現から適切なハンモックを探索することが困難なため、制御フローグラフに変換した後、ハンモックを探索すればよい(処理3)。抽象構文木に基づくプログラム依存グラフPDGの縮退は、goto文や関数の末尾以外でのreturn文をふくまないプログラムの場合、縮退する範囲の探索が簡単になるという利点がある。
以上、第3の実施形態においても、上述した第1および第2の実施形態と同様の効果を得ることができる。
図10は、本発明の第4の実施形態を示している。第1の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態は、プログラム依存グラフPDGに基づいてこのプログラム依存グラフPDGを縮退するための基本原理を示している。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図10に示した処理が実施される。ステップS540は、図3のステップS500Aに対応する処理である。ステップS542、S544は、図3のステップS500に対応する処理である。ステップS640は、図3のステップS600に対応する処理である。ステップS740は、図3のステップS700に対応する処理である。ステップS540、S542、S544、S640を実行するプロセッサCPUは、縮退判定部として機能する。ステップS740を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
まず、ステップS542において、入力された文レベルのプログラム依存グラフPDGに基づいて、プログラム依存グラフPDG内の頂点間の結合の強さが求められる。結合度(依存要素)は、データ依存辺とその大きさ、および、制御依存辺、処理の大きさから計算される。次に、ステップS544において、頂点間の結合度が、予め設定された所定の結合度Xを超えるか否かが判定される。次に、ステップS640において、結合度が上記Xを超える頂点の依存関係が縮退可能か否かが判定される。縮退可能な場合、ステップS740において、頂点を結合し依存関係を縮退する。ステップS542、S544、S640、S740の処理を、プログラム依存グラフPDGの全ての頂点間で実施することにより、縮退されたプログラム依存グラフPDGが生成される。
なお、この実施形態では、次の2つの条件(6)、(7)を満たすことが、可逆的に縮退可能な条件になる。
(6)対応する制御フローグラフCFG上で、頂点集合の外から頂点集合の内への分岐は、頂点集合の先頭頂点へのみである。対応する制御フローグラフCFG上で、頂点集合の内から頂点集合の外への分岐は、頂点集合の最後の頂点のみである。
(7)頂点間のデータ依存パスに外部の頂点は含まれない。
図11は、第4の実施形態においてプログラム依存グラフPDGを縮退する例を示している。この例では、プログラム依存グラフPDGの構造に着目し、図中のプログラム内に下線で示した2ステップが縮退される。
以上、第4の実施形態においても、上述した第1の実施形態と同様の効果を得ることができる。さらに、この実施形態では、プログラム依存グラフPDGのみを用いることにより、規模が小さく、かつ可逆性が保証されたプログラム依存グラフPDGを生成できる。
図12は、本発明の第5の実施形態を示している。第1および第4の実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態は、第4の実施形態を、さらに具体的に示したものであり、プログラム依存グラフPDGに基づいてこのプログラム依存グラフPDGが縮退される。プログラム解析装置が実施する処理は、図2に示したステップS200の処理を除き第1の実施形態と同じである。具体的には、図3に示した処理の代わりに、図12に示した処理が実施される。ステップS560は、図3のステップS500Aに対応する処理である。ステップS562、S564、S566、S568、S569は、図3のステップS500に対応する処理である。ステップS750は、図3のステップS600とステップS700に対応する処理である。ステップS752は、図3のステップS700に対応する処理である。ステップS560、S562、S564、S566、S568、S569を実行するプロセッサCPUは、縮退判定部として機能する。ステップS750、S752を実行するプロセッサCPUは、グラフ生成部として機能する。その他の構成および処理は、図1および図2と同じである。
図12では、制御の流れを再構成するための上記条件(1)および条件(2)を満たすプログラム依存グラフPDGの制御依存部分グラフは木構造になるという規則を用いて、プログラム依存グラフPDGが縮退される。また、可逆的に縮退可能にするために、上述した条件(6)、(7)を満たすことが必要である。図12に示した処理は、ステップS560に示すように、プログラム依存グラフPDGの制御依存部分グラフを後順に走査することで実施される。
まず、ステップS562において、頂点Vxがリーフ(木構造の末端)にあるか否かが判定される。頂点Vxがリーフにある場合、ステップS564において、リーフにある頂点Vxに対して頂点間の結合度が求められる。頂点Vxがリーフにない場合、すなわち、頂点Vxが木構造の途中にある場合、ステップS750において、結合度が高く、条件(7)を満たす子頂点間が結合され、縮退される。
次に、ステップS566において、頂点Vxと子頂点間の結合度(親子間の結合度)が求められる。結合度が高い場合、ステップS752において、頂点Vx以下の制御依存部分木が、頂点に縮退される。次に、ステップS568において、縮退後の頂点Vxに対して、結合度が求められる。結合度が低い場合、ステップS569において、頂点Vx以下の部分木と、部分木以外の頂点間との結合度が、頂点Vxに集積される。これにより、上記条件(6)を満たす範囲で、結合すべき頂点集合を探索できる。そして、全ての探索が終了した時点でプログラム依存グラフPDGが出力される。以上、第5の実施形態においても、上述した第1および第4の実施形態と同様の効果を得ることができる。
なお、上述した実施形態では、プロセッサCPUがプログラム解析プログラムを実行することにより、縮退されたプログラム依存グラフPDGを生成し、このプログラム依存グラフPDGに基づいて最適化された逐次プログラム(プログラムコード)を生成する例を述べた。本発明はかかる実施形態に限定されるものではない。例えば、上述した縮退判定部、グラフ生成部、再構成部、制御フローグラフ生成部およびコード生成部は、ハードウエアで実現されてもよい。
上述した実施形態に関して、さらに以下の付記を開示する。
(付記1)
プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存要素群を求め、求めた依存要素群を縮退することで依存要素が縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
(付記2)
付記1記載のプログラム解析方法において、
プログラム解析情報として制御フローグラフおよびプログラム依存グラフを用い、縮退可能な依存要素群を縮退し、縮退できない依存要素についてハンモックを探索し、探索されたハンモックを縮退することで縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
(付記3)
付記1記載のプログラム解析方法において、
プログラム解析情報としてプログラムの抽象構文木表現およびプログラム依存グラフを用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合に対応するプログラム依存グラフ上の頂点集合を1つの頂点に縮退することで縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
(付記4)
付記1記載のプログラム解析方法において、
プログラム解析情報としてプログラムの抽象構文木表現を用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合を1つの頂点に縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
(付記5)
付記1記載のプログラム解析方法において、
プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフ中の依存要素である頂点間の結合度を探索し、所定の結合度を超える結合度を有する頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合をそれぞれ1つの頂点に縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
(付記6)
付記1記載のプログラム解析方法において、
縮退されたプログラム依存グラフにおいて制御の流れを再構成し、縮退された制御フローグラフを生成し、縮退された制御フローグラフから文レベルの制御フローグラフを生成し、文レベルの制御フローグラフからプログラムコードを生成することを特徴とするプログラム解析方法。
(付記7)
プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存要素群を求める縮退判定部と、
前記縮退判定部により縮退可能と判定された依存要素群を縮退することで縮退されたプログラム依存グラフを生成するグラフ生成部とを備えていることを特徴とするプログラム解析装置。
(付記8)
付記7記載のプログラム解析装置において、
前記縮退判定部は、プログラム解析情報として制御フローグラフおよびプログラム依存グラフを用い、縮退可能な依存要素群を縮退し、縮退できない依存要素についてハンモックを探索し、探索されたハンモックを縮退し、
前記グラフ生成部は、縮退された依存要素群および縮退されたハンモックを用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
(付記9)
付記7記載のプログラム解析装置において、
前記縮退判定部は、プログラム解析情報としてプログラムの抽象構文木表現およびプログラム依存グラフを用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合に対応するプログラム依存グラフ上の頂点集合を1つの頂点に縮退し、
前記グラフ生成部は、縮退された頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
(付記10)
付記7記載のプログラム解析装置において、
前記縮退判定部は、プログラム解析情報としてプログラムの抽象構文木表現を用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合を1つの頂点に縮退し、
前記グラフ生成部は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
(付記11)
付記7記載のプログラム解析装置において、
前記縮退判定部は、プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフ中の依存要素である頂点間の結合度を探索し、所定の結合度を超える結合度を有する頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合をそれぞれ1つの頂点に縮退し、
前記グラフ生成部は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
(付記12)
付記7記載のプログラム解析装置において、
縮退されたプログラム依存グラフにおいて制御の流れを再構成する再構成部と、
縮退された制御フローグラフを生成し、縮退された制御フローグラフから文レベルの制御フローグラフを生成する制御フローグラフ生成部と、
文レベルの制御フローグラフからプログラムコードを生成するコード生成部とを備えていることを特徴とするプログラム解析装置。
(付記13)
プログラムを解析するために、コンピュータに、
プログラムの文および制御の依存関係を表したプログラム解析情報を用いて、可逆的に縮退可能な依存要素群を求める縮退判定処理と、
前記縮退判定処理により縮退可能と判定された依存要素群を縮退することで縮退されたプログラム依存グラフを生成するグラフ生成処理とを実行させるためのプログラム解析プログラム。
(付記14)
付記13記載のプログラム解析プログラムにおいて、
前記縮退判定処理は、プログラム解析情報として制御フローグラフおよびプログラム依存グラフを用い、縮退可能な依存要素群を縮退し、縮退できない依存要素についてハンモックを探索し、探索されたハンモックを縮退し、
前記グラフ生成処理は、縮退された依存要素群および縮退されたハンモックを用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
(付記15)
付記13記載のプログラム解析プログラムにおいて、
前記縮退判定処理は、プログラム解析情報としてプログラムの抽象構文木表現およびプログラム依存グラフを用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合に対応するプログラム依存グラフ上の頂点集合を1つの頂点に縮退し、
前記グラフ生成処理は、縮退された頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
(付記16)
付記13記載のプログラム解析プログラムにおいて、
前記縮退判定処理は、プログラム解析情報としてプログラムの抽象構文木表現を用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合を1つの頂点に縮退し、
前記グラフ生成処理は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
(付記17)
付記13記載のプログラム解析プログラムにおいて、
前記縮退判定処理は、プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフ中の依存要素である頂点間の結合度を探索し、所定の結合度を超える結合度を有する頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合をそれぞれ1つの頂点に縮退し、
前記グラフ生成処理は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
(付記18)
付記13記載のプログラム解析プログラムにおいて、
コンピュータに、
縮退されたプログラム依存グラフにおいて制御の流れを再構成する再構成処理と、
縮退された制御フローグラフを生成し、縮退された制御フローグラフから文レベルの制御フローグラフを生成する制御フローグラフ生成処理と、
文レベルの制御フローグラフからプログラムコードを生成するコード生成処理とを実行させるためのプログラム解析プログラム。
以上、本発明について詳細に説明してきたが、上記の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
本発明は、大規模なプログラムを最適化するために用いるプログラム依存グラフの生成方法に適用できる。
本発明の第1の実施形態を示すブロック図である。 図1に示したプログラム解析装置により実行される解析プログラムの処理フローの概要を示すフローチャートである。 図2に示したステップS200の詳細を示すフローチャートである。 図3に示した処理の詳細を示すフローチャートである。 図2に示したステップS400の詳細を示すフローチャートである。 第1の実施形態におけるプログラム依存グラフを縮退する例を示す説明図である。 本発明の第2の実施形態を示すフローチャートである。 本発明の第3の実施形態を示すフローチャートである。 図8のステップS530のアルゴリズムを示す説明図である。 本発明の第4の実施形態を示すフローチャートである。 第4の実施形態におけるプログラム依存グラフを縮退する例を示す説明図である。 本発明の第5の実施形態を示すフローチャートである。

Claims (18)

  1. プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存要素群を求め、求めた依存要素群を縮退することで依存要素が縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
  2. 請求項1記載のプログラム解析方法において、
    プログラム解析情報として制御フローグラフおよびプログラム依存グラフを用い、縮退可能な依存要素群を縮退し、縮退できない依存要素についてハンモックを探索し、探索されたハンモックを縮退することで縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
  3. 請求項1記載のプログラム解析方法において、
    プログラム解析情報としてプログラムの抽象構文木表現およびプログラム依存グラフを用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合に対応するプログラム依存グラフ上の頂点集合を1つの頂点に縮退することで縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
  4. 請求項1記載のプログラム解析方法において、
    プログラム解析情報としてプログラムの抽象構文木表現を用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合を1つの頂点に縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
  5. 請求項1記載のプログラム解析方法において、
    プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフ中の依存要素である頂点間の結合度を探索し、所定の結合度を超える結合度を有する頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合をそれぞれ1つの頂点に縮退し、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析方法。
  6. 請求項1記載のプログラム解析方法において、
    縮退されたプログラム依存グラフにおいて制御の流れを再構成し、縮退された制御フローグラフを生成し、縮退された制御フローグラフから文レベルの制御フローグラフを生成し、文レベルの制御フローグラフからプログラムコードを生成することを特徴とするプログラム解析方法。
  7. プログラムの文および制御の依存関係を表す複数の依存要素で構成されるプログラム解析情報を用いて、可逆的に縮退可能な依存関係群を求める縮退判定部と、
    前記縮退判定部により縮退可能と判定された依存要素群を縮退することで縮退されたプログラム依存グラフを生成するグラフ生成部とを備えていることを特徴とするプログラム解析装置。
  8. 請求項7記載のプログラム解析装置において、
    前記縮退判定部は、プログラム解析情報として制御フローグラフおよびプログラム依存グラフを用い、縮退可能な依存要素群を縮退し、縮退できない依存要素についてハンモックを探索し、探索されたハンモックを縮退し、
    前記グラフ生成部は、縮退された依存要素群および縮退されたハンモックを用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
  9. 請求項7記載のプログラム解析装置において、
    前記縮退判定部は、プログラム解析情報としてプログラムの抽象構文木表現およびプログラム依存グラフを用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合に対応するプログラム依存グラフ上の頂点集合を1つの頂点に縮退し、
    前記グラフ生成部は、縮退された頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
  10. 請求項7記載のプログラム解析装置において、
    前記縮退判定部は、プログラム解析情報としてプログラムの抽象構文木表現を用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合を1つの頂点に縮退し、
    前記グラフ生成部は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
  11. 請求項7記載のプログラム解析装置において、
    前記縮退判定部は、プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフ中の依存要素である頂点間の結合度を探索し、所定の結合度を超える結合度を有する頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合をそれぞれ1つの頂点に縮退し、
    前記グラフ生成部は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析装置。
  12. 請求項7記載のプログラム解析装置において、
    縮退されたプログラム依存グラフにおいて制御の流れを再構成する再構成部と、
    縮退された制御フローグラフを生成し、縮退された制御フローグラフから文レベルの制御フローグラフを生成する制御フローグラフ生成部と、
    文レベルの制御フローグラフからプログラムコードを生成するコード生成部とを備えていることを特徴とするプログラム解析装置。
  13. プログラムを解析するために、コンピュータに、
    プログラムの文および制御の依存関係を表したプログラム解析情報を用いて、可逆的に縮退可能な依存関係を求める縮退判定処理と、
    前記縮退判定処理により縮退可能と判定された依存要素群を縮退することで縮退されたプログラム依存グラフを生成するグラフ生成処理とを実行させるためのプログラム解析プログラム。
  14. 請求項13記載のプログラム解析プログラムにおいて、
    前記縮退判定処理は、プログラム解析情報として制御フローグラフおよびプログラム依存グラフを用い、縮退可能な依存要素群を縮退し、縮退できない依存要素についてハンモックを探索し、探索されたハンモックを縮退し、
    前記グラフ生成処理は、縮退された依存要素群および縮退されたハンモックを用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
  15. 請求項13記載のプログラム解析プログラムにおいて、
    前記縮退判定処理は、プログラム解析情報としてプログラムの抽象構文木表現およびプログラム依存グラフを用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合に対応するプログラム依存グラフ上の頂点集合を1つの頂点に縮退し、
    前記グラフ生成処理は、縮退された頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
  16. 請求項13記載のプログラム解析プログラムにおいて、
    前記縮退判定処理は、プログラム解析情報としてプログラムの抽象構文木表現を用い、抽象構文木表現中の依存要素である頂点集合を探索して、縮退可能な頂点集合を求め、縮退可能な頂点集合を1つの頂点に縮退し、
    前記グラフ生成処理は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
  17. 請求項13記載のプログラム解析プログラムにおいて、
    前記縮退判定処理は、プログラム解析情報としてプログラム依存グラフを用い、プログラム依存グラフ中の依存要素である頂点間の結合度を探索し、所定の結合度を超える結合度を有する頂点集合を求め、求めた頂点集合のうち縮退可能な頂点集合をそれぞれ1つの頂点に縮退し、
    前記グラフ生成処理は、縮退した頂点を含む頂点集合を用いて縮退されたプログラム依存グラフを生成することを特徴とするプログラム解析プログラム。
  18. 請求項13記載のプログラム解析プログラムにおいて、
    コンピュータに、
    縮退されたプログラム依存グラフにおいて制御の流れを再構成する再構成処理と、
    縮退された制御フローグラフを生成し、縮退された制御フローグラフから文レベルの制御フローグラフを生成する制御フローグラフ生成処理と、
    文レベルの制御フローグラフからプログラムコードを生成するコード生成処理とを実行させるためのプログラム解析プログラム。
JP2008501494A 2006-02-20 2006-02-20 プログラム解析方法、プログラム解析装置およびプログラム解析プログラム Expired - Fee Related JP5045666B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2006/302955 WO2007096935A1 (ja) 2006-02-20 2006-02-20 プログラム解析方法、プログラム解析装置およびプログラム解析プログラム

Publications (2)

Publication Number Publication Date
JPWO2007096935A1 true JPWO2007096935A1 (ja) 2009-07-09
JP5045666B2 JP5045666B2 (ja) 2012-10-10

Family

ID=38436996

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008501494A Expired - Fee Related JP5045666B2 (ja) 2006-02-20 2006-02-20 プログラム解析方法、プログラム解析装置およびプログラム解析プログラム

Country Status (3)

Country Link
US (1) US8181171B2 (ja)
JP (1) JP5045666B2 (ja)
WO (1) WO2007096935A1 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060200811A1 (en) * 2005-03-07 2006-09-07 Cheng Stephen M Method of generating optimised stack code
US8683441B2 (en) 2006-01-11 2014-03-25 International Business Machines Corporation Software equivalence checking
US8826255B1 (en) * 2007-06-18 2014-09-02 The Mathworks, Inc. Restructuring control flow graphs generated from a model
US9110706B2 (en) 2009-02-09 2015-08-18 Microsoft Technology Licensing, Llc General purpose distributed data parallel computing using a high level language
CN101639806B (zh) * 2009-09-01 2015-06-03 中兴通讯股份有限公司 用于自动化测试的拓扑适配方法和装置
US8584100B2 (en) * 2009-12-10 2013-11-12 Sap Ag Bridging code changes and testing
TWI448965B (zh) * 2011-06-15 2014-08-11 Tatung Co 解析程式碼的方法
US8666999B2 (en) * 2011-08-02 2014-03-04 Rockwell Automation Technologies, Inc. Search utility program for software developers
CN103092747B (zh) * 2011-10-27 2016-06-22 西门子公司 一种控制程序的验证和测试方法及系统
JP5910230B2 (ja) * 2012-03-26 2016-04-27 富士通株式会社 設計支援プログラム、設計支援方法、および設計支援装置
US8806464B2 (en) 2012-04-26 2014-08-12 Hewlett-Packard Development Company, L.P. Process flow optimized directed graph traversal
US9658999B2 (en) * 2013-03-01 2017-05-23 Sony Corporation Language processing method and electronic device
US9619364B2 (en) * 2013-03-14 2017-04-11 Nvidia Corporation Grouping and analysis of data access hazard reports
US9043921B2 (en) * 2013-04-12 2015-05-26 Fujitsu Limited Determining software metrics
US9122561B2 (en) * 2013-09-24 2015-09-01 International Business Machines Corporation Program integration that accommodates restrictions on merge-locations
GB2521367A (en) * 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems
US9886736B2 (en) 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
CN105512046B (zh) * 2016-02-01 2018-02-13 北京理工大学 基于粒子群优化算法的Android自动化测试方法
JP6933012B2 (ja) * 2017-06-14 2021-09-08 富士通株式会社 解析装置、解析プログラムおよび解析方法
JP2023084609A (ja) * 2021-12-07 2023-06-19 富士通株式会社 変換プログラムおよび変換方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161216A (en) * 1989-03-08 1992-11-03 Wisconsin Alumni Research Foundation Interprocedural slicing of computer programs using dependence graphs
US6064819A (en) * 1993-12-08 2000-05-16 Imec Control flow and memory management optimization
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
US5918035A (en) * 1995-05-15 1999-06-29 Imec Vzw Method for processor modeling in code generation and instruction set simulation
US5894576A (en) * 1996-11-12 1999-04-13 Intel Corporation Method and apparatus for instruction scheduling to reduce negative effects of compensation code
US6077313A (en) * 1997-10-22 2000-06-20 Microsoft Corporation Type partitioned dataflow analyses
US6578197B1 (en) * 1998-04-08 2003-06-10 Silicon Graphics, Inc. System and method for high-speed execution of graphics application programs including shading language instructions
US6327699B1 (en) * 1999-04-30 2001-12-04 Microsoft Corporation Whole program path profiling
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6374403B1 (en) * 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes
IL131782A (en) * 1999-09-07 2005-11-20 Ibm Automatic removal of array memory leaks
US6848100B1 (en) * 2000-03-31 2005-01-25 Intel Corporation Hierarchical software path profiling
JP3664473B2 (ja) 2000-10-04 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
JP3707727B2 (ja) * 2000-10-30 2005-10-19 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
US7165245B2 (en) * 2001-04-27 2007-01-16 Intel Corporation Pruning local graphs in an inter-procedural analysis solver
US7650593B2 (en) * 2004-03-25 2010-01-19 Microsoft Corporation Proxy objects for display
US7765534B2 (en) * 2004-04-30 2010-07-27 International Business Machines Corporation Compiler with cache utilization optimizations
US7478378B2 (en) * 2004-11-29 2009-01-13 International Business Machines Corporation Semantically consistent adaptation of software applications
US7624386B2 (en) * 2004-12-16 2009-11-24 Intel Corporation Fast tree-based generation of a dependence graph
US7627864B2 (en) * 2005-06-27 2009-12-01 Intel Corporation Mechanism to optimize speculative parallel threading

Also Published As

Publication number Publication date
US8181171B2 (en) 2012-05-15
JP5045666B2 (ja) 2012-10-10
WO2007096935A1 (ja) 2007-08-30
US20090007087A1 (en) 2009-01-01

Similar Documents

Publication Publication Date Title
JP5045666B2 (ja) プログラム解析方法、プログラム解析装置およびプログラム解析プログラム
Lai et al. HeteroCL: A multi-paradigm programming infrastructure for software-defined reconfigurable computing
Zheng et al. Flextensor: An automatic schedule exploration and optimization framework for tensor computation on heterogeneous system
CN110764744B (zh) 用于神经网络计算的中间表示生成方法和装置
US8572590B2 (en) Methods and apparatus for joint parallelism and locality optimization in source code compilation
US7237234B2 (en) Method for selective solicitation of user assistance in the performance tuning process
US20170090891A1 (en) Method and device for assisting with code optimisation and parallelisation
Wahib et al. Automated GPU kernel transformations in large-scale production stencil applications
Dolbeau et al. One OpenCL to rule them all?
Weber et al. MATOG: array layout auto-tuning for CUDA
Rodríguez et al. Trace-based affine reconstruction of codes
US8312400B2 (en) Verification supporting system
Wang et al. Funcytuner: Auto-tuning scientific applications with per-loop compilation
Siso et al. Evaluating auto-vectorizing compilers through objective withdrawal of useful information
Singer et al. SYCLops: A SYCL Specific LLVM to MLIR Converter
JP2012014526A (ja) プログラムコードの構造変換装置、並びにコード構造変換プログラム
Fabeiro et al. OCLoptimizer: An iterative optimization tool for OpenCL
Desai et al. ACORNS: An easy-to-use code generator for gradients and Hessians
Grant et al. Introducing the StataStan interface for fast, complex Bayesian modeling using Stan
Remmelg et al. High-level hardware feature extraction for GPU performance prediction of stencils
CN112840316A (zh) 用于优化现场可编程门阵列的代码的方法和装置
O’Neal et al. Hardware-assisted cross-generation prediction of GPUs under design
JP2019139675A (ja) ソースコード最適化装置、プログラムおよび方法
Lin et al. A code transformation framework for scientific applications on structured grids
Sari et al. A Highly Scalable Instruction Scheduler Design based on CPU Stall Elimination

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111228

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: 20120619

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120702

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150727

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees