JP2001166949A - シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 - Google Patents
シンボリック実行を用いてソースコードをコンパイルするための方法及び装置Info
- Publication number
- JP2001166949A JP2001166949A JP2000361619A JP2000361619A JP2001166949A JP 2001166949 A JP2001166949 A JP 2001166949A JP 2000361619 A JP2000361619 A JP 2000361619A JP 2000361619 A JP2000361619 A JP 2000361619A JP 2001166949 A JP2001166949 A JP 2001166949A
- Authority
- JP
- Japan
- Prior art keywords
- index
- data structure
- question
- computer program
- memory access
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/49—Partial evaluation
Abstract
(57)【要約】
【課題】 並列化によりコンピュータプログラムのコン
パイルを最適化するための方法及び装置を提供するこ
と。 【解決手段】 プログラム中のオペレーション及びそれ
らのシーケンスを記載する情報が、抽出されてデータ構
造にて記憶される。指標表現を伴うプログラム中のオペ
レーションが、識別されシンボリック実行され、プログ
ラムによるメモリアクセスを記載する情報を作成する。
並列に実行できるオペレーションが、メモリアクセスを
記載する情報に基づいて識別される。プログラムは、プ
ログラムがどのようにメモリにアクセスするかに関して
の疑問データ構造における疑問により問合せが為され
る。これらの疑問に対する解答は、指標セットに蓄積さ
れ、後注釈が付けられて疑問データ構造に入れられる。
パイルを最適化するための方法及び装置を提供するこ
と。 【解決手段】 プログラム中のオペレーション及びそれ
らのシーケンスを記載する情報が、抽出されてデータ構
造にて記憶される。指標表現を伴うプログラム中のオペ
レーションが、識別されシンボリック実行され、プログ
ラムによるメモリアクセスを記載する情報を作成する。
並列に実行できるオペレーションが、メモリアクセスを
記載する情報に基づいて識別される。プログラムは、プ
ログラムがどのようにメモリにアクセスするかに関して
の疑問データ構造における疑問により問合せが為され
る。これらの疑問に対する解答は、指標セットに蓄積さ
れ、後注釈が付けられて疑問データ構造に入れられる。
Description
【0001】
【発明の属する技術分野】本発明は、コンピュータソフ
トウエアのエンジニアリング分野に関する。特に、本発
明は、並列化(parallelism) によりソースコードをコン
パイルするための方法及び装置に関し、それによりさら
に効率的なコンパイルコードを発生することができ、よ
り並列な命令を作ることを可能にしてプロセッサー資源
をよりよく利用できる。
トウエアのエンジニアリング分野に関する。特に、本発
明は、並列化(parallelism) によりソースコードをコン
パイルするための方法及び装置に関し、それによりさら
に効率的なコンパイルコードを発生することができ、よ
り並列な命令を作ることを可能にしてプロセッサー資源
をよりよく利用できる。
【0002】
【従来の技術】コンピュータプログラムをコンパイルす
ることは、高水準言語コード(ソースコード)をコンピ
ュータのプロセッサーが理解できる命令(目的コード)
に変換することを伴う。コンパイラの目標の一つは、ソ
ースコードの効率的な実施である。1つより多い命令を
並列に実行できるプロセッサーの場合、コンパイラの目
的は、出来るだけ多くの命令を並列に実行できるように
コードをコンパイルすることである。
ることは、高水準言語コード(ソースコード)をコンピ
ュータのプロセッサーが理解できる命令(目的コード)
に変換することを伴う。コンパイラの目標の一つは、ソ
ースコードの効率的な実施である。1つより多い命令を
並列に実行できるプロセッサーの場合、コンパイラの目
的は、出来るだけ多くの命令を並列に実行できるように
コードをコンパイルすることである。
【0003】
【発明が解決しようとする課題】本発明の目的は、コー
ドの並列化によりそのコードを効率的にコンパイルする
ための方法及び装置を提供することである。本発明は、
複数の機能ユニットを有するどんなコンピュータアーキ
テクチャにも適用でき、例えば、デジタル信号処理
(「DSP」)アプリケーションのリアルタイム実行を
実現するための超長命令語(「VLIW」)アーキテク
チャにも適用できる。本発明の別のさらに特定の目的
は、ソースプログラムにおける各メモリアクセスの依存
性を求めて表すことである。これは、コンパイラが並列
性を最大限利用できるように、プログラム中の実行経路
を調べる。VLIWアーキテクチャの場合には、並列性
を正確に検出できないと、より少ない命令がVLIW命
令語に取り込まれ、それによりプロセッサーの性能がそ
の能力より低くなり得る。
ドの並列化によりそのコードを効率的にコンパイルする
ための方法及び装置を提供することである。本発明は、
複数の機能ユニットを有するどんなコンピュータアーキ
テクチャにも適用でき、例えば、デジタル信号処理
(「DSP」)アプリケーションのリアルタイム実行を
実現するための超長命令語(「VLIW」)アーキテク
チャにも適用できる。本発明の別のさらに特定の目的
は、ソースプログラムにおける各メモリアクセスの依存
性を求めて表すことである。これは、コンパイラが並列
性を最大限利用できるように、プログラム中の実行経路
を調べる。VLIWアーキテクチャの場合には、並列性
を正確に検出できないと、より少ない命令がVLIW命
令語に取り込まれ、それによりプロセッサーの性能がそ
の能力より低くなり得る。
【0004】指標表現はコンパイラに特別な問題を提示
する。次の疑似コードを考える。
する。次の疑似コードを考える。
【数1】 「double a=A[0] 」で始まるブロックコードは、「doub
le d=A[2] 」で始まるコードと並列に実行できる。とい
うのは、それらは配列A内の同じメモリ位置をアクセス
しないからである。
le d=A[2] 」で始まるコードと並列に実行できる。とい
うのは、それらは配列A内の同じメモリ位置をアクセス
しないからである。
【0005】今度は、さらに複雑な並列化の次の例を考
える。
える。
【数2】 配列Aの指標は、今度はループ反復子(iterator)の線形
指標表現である(線形表現はi、i+1及びループ反復
子i)。指標表現に適用される用語「線形」は、指標表
現が反復子プラス定数の定数回の組み合わせで得られる
ことを示す。この情報は、ループの複数回の反復が並列
に実行できるか否か(「配列プライベート化」(array p
rivatization) )という)を決めるのに使用できる。こ
の例では、コンパイラは、配列の値は前の反復で作られ
ることを知ることができる。従って、次の反復の読み出
しの後まで書き込みオペレーションを延期することはで
きない。
指標表現である(線形表現はi、i+1及びループ反復
子i)。指標表現に適用される用語「線形」は、指標表
現が反復子プラス定数の定数回の組み合わせで得られる
ことを示す。この情報は、ループの複数回の反復が並列
に実行できるか否か(「配列プライベート化」(array p
rivatization) )という)を決めるのに使用できる。こ
の例では、コンパイラは、配列の値は前の反復で作られ
ることを知ることができる。従って、次の反復の読み出
しの後まで書き込みオペレーションを延期することはで
きない。
【0006】次に、再帰変数を伴う次の例を考える(こ
れは挙動的には前の例と等しい)。
れは挙動的には前の例と等しい)。
【数3】 この表現では、変数はループの前に初期化される。ルー
プ内で使用され更新される値は、再帰変数(induction v
ariable)と言われる。いくつかの場合には、再帰変数
は、線形指標表現に変換でき、そのように表現されたコ
ードに並列化が為される。これはそのケースである。と
いうのは、コードが前の例のコードと完全に等価である
からである。
プ内で使用され更新される値は、再帰変数(induction v
ariable)と言われる。いくつかの場合には、再帰変数
は、線形指標表現に変換でき、そのように表現されたコ
ードに並列化が為される。これはそのケースである。と
いうのは、コードが前の例のコードと完全に等価である
からである。
【0007】コンパイラ最適化の公知の方法は、線形指
標表現のみを考慮し、非線形表現に対しては非並列性の
最悪の場合を仮定する。再帰変数は、線形指標表現に変
換して扱う。従来技術のたいていのシステムは、発見的
なアプローチを用いてこのような表現からメモリアクセ
ス情報を得ている。従来技術のアルゴリズムは、線形指
標表現及び特定のデータフロー分析問題を整数線形計画
の問題の解法が存在する証明として定式化する。整数線
形プログラミング問題を簡単にするための別の公知の方
法は、フーリエ−モツキン(Fourier-Motzkin) 変数除去
であり、これは問題の次元の数を減らす。本発明は、線
形指標表示に限定されず、整数線形計画にも限定されな
い。代わりに、ソースプログラムの関連部分をシンボリ
ック実行に適したデータ構造に変換し、シンボリック実
行を行い、シンボリック実行中に発生されたデータから
指標値の関連の組み合わせを抽出する。すなわち、特定
の指標表現が取り得る正しい範囲は、シンボリック実行
により計算されるが、整数線形計画により定義されな
い。従って、本発明はとりわけルックアップ表や条件更
新だけでなく、非線形指標表現を伴うコードの最適化を
扱うことができる。本発明のこれら及びその他の利点
は、以下の説明及び特許請求の範囲から明らかとなる。
標表現のみを考慮し、非線形表現に対しては非並列性の
最悪の場合を仮定する。再帰変数は、線形指標表現に変
換して扱う。従来技術のたいていのシステムは、発見的
なアプローチを用いてこのような表現からメモリアクセ
ス情報を得ている。従来技術のアルゴリズムは、線形指
標表現及び特定のデータフロー分析問題を整数線形計画
の問題の解法が存在する証明として定式化する。整数線
形プログラミング問題を簡単にするための別の公知の方
法は、フーリエ−モツキン(Fourier-Motzkin) 変数除去
であり、これは問題の次元の数を減らす。本発明は、線
形指標表示に限定されず、整数線形計画にも限定されな
い。代わりに、ソースプログラムの関連部分をシンボリ
ック実行に適したデータ構造に変換し、シンボリック実
行を行い、シンボリック実行中に発生されたデータから
指標値の関連の組み合わせを抽出する。すなわち、特定
の指標表現が取り得る正しい範囲は、シンボリック実行
により計算されるが、整数線形計画により定義されな
い。従って、本発明はとりわけルックアップ表や条件更
新だけでなく、非線形指標表現を伴うコードの最適化を
扱うことができる。本発明のこれら及びその他の利点
は、以下の説明及び特許請求の範囲から明らかとなる。
【0008】
【課題を解決するための手段】本発明は、シーケンスを
有する複数のオペレーションからなるコンピュータプロ
グラムをコンパイルする方法に関する。本方法は、オペ
レーション及びオペレーションのシーケンスを記載する
情報をコンピュータプログラムから抽出し、抽出された
情報をデータ構造として記憶することを伴う。指標表現
を伴うコンピュータプログラム中のオペレーションが識
別され、それらのオペレーションが実行され、メモリア
クセスを記載する情報を作成する。メモリアクセスを記
載する情報に基づいて、並列に実行できるオペレーショ
ンが識別される。別の実施態様では、本方法は、メモリ
アクセス及び指標表現を伴うコンピュータプログラム中
のオペレーションの表現を含むシンボリック実行データ
構造を発生するステップを含む。シンボリック実行デー
タ構造は、データフロー問題グラフとし得る。さらに別
の実施態様では、本発明の方法は、シンボリック実行デ
ータ構造を実行すること、及びコンピュータプログラム
によりアドレス指定されたメモリ位置に注を付ける(not
ing)ことによりオペレーションを実行することを伴う。
コンピュータプログラムがどのようにメモリにアクセス
するかに関する疑問を含んだ疑問データ構造が発生され
る。コンピュータプログラムは、これらの疑問によりコ
ンピュータプログラムに問合せを行うことで分析され
る。疑問に対する解答は、後注釈が付けられ疑問データ
構造に入れられる。別の実施態様では、指標表現を伴う
プログラムのオペレーションによるメモリアクセスに関
する指標セットが発生される。疑問に対する解答が、シ
ンボリック実行ステップ中に指標セットに蓄積された情
報に基づいて計算される。よって、指標セットはシンボ
リック実行ステップにおいて満たされる。本発明はさら
にコンピュータコードをコンパイルするための装置を包
含し、これは第1信号フロー分析モジュールを有し、該
モジュールはコンピュータコードにより使用される指標
表現に対する信号フローデータ構造を作る。信号フロー
分析モジュールは、コンピュータコード中の指標経路を
識別するモジュールを含む。指標経路は、指標表現によ
るメモリアクセスで使用される指標を計算する際に伴う
オペレーションから構成される。シンボリック実行モジ
ュールは、指標経路を実行し、それにより指標表現メモ
リアクセスに関する情報を抽出する。別の実施態様で
は、本装置は、指標表現によるメモリアクセスに関する
疑問を含んだ疑問データベースを含む。あるモジュール
は疑問データベース中の疑問に対する応答から成る指標
セットを発生する。あるモジュールは指標セットの内容
に基づいて疑問データベース中の疑問に対する解答を発
生する。
有する複数のオペレーションからなるコンピュータプロ
グラムをコンパイルする方法に関する。本方法は、オペ
レーション及びオペレーションのシーケンスを記載する
情報をコンピュータプログラムから抽出し、抽出された
情報をデータ構造として記憶することを伴う。指標表現
を伴うコンピュータプログラム中のオペレーションが識
別され、それらのオペレーションが実行され、メモリア
クセスを記載する情報を作成する。メモリアクセスを記
載する情報に基づいて、並列に実行できるオペレーショ
ンが識別される。別の実施態様では、本方法は、メモリ
アクセス及び指標表現を伴うコンピュータプログラム中
のオペレーションの表現を含むシンボリック実行データ
構造を発生するステップを含む。シンボリック実行デー
タ構造は、データフロー問題グラフとし得る。さらに別
の実施態様では、本発明の方法は、シンボリック実行デ
ータ構造を実行すること、及びコンピュータプログラム
によりアドレス指定されたメモリ位置に注を付ける(not
ing)ことによりオペレーションを実行することを伴う。
コンピュータプログラムがどのようにメモリにアクセス
するかに関する疑問を含んだ疑問データ構造が発生され
る。コンピュータプログラムは、これらの疑問によりコ
ンピュータプログラムに問合せを行うことで分析され
る。疑問に対する解答は、後注釈が付けられ疑問データ
構造に入れられる。別の実施態様では、指標表現を伴う
プログラムのオペレーションによるメモリアクセスに関
する指標セットが発生される。疑問に対する解答が、シ
ンボリック実行ステップ中に指標セットに蓄積された情
報に基づいて計算される。よって、指標セットはシンボ
リック実行ステップにおいて満たされる。本発明はさら
にコンピュータコードをコンパイルするための装置を包
含し、これは第1信号フロー分析モジュールを有し、該
モジュールはコンピュータコードにより使用される指標
表現に対する信号フローデータ構造を作る。信号フロー
分析モジュールは、コンピュータコード中の指標経路を
識別するモジュールを含む。指標経路は、指標表現によ
るメモリアクセスで使用される指標を計算する際に伴う
オペレーションから構成される。シンボリック実行モジ
ュールは、指標経路を実行し、それにより指標表現メモ
リアクセスに関する情報を抽出する。別の実施態様で
は、本装置は、指標表現によるメモリアクセスに関する
疑問を含んだ疑問データベースを含む。あるモジュール
は疑問データベース中の疑問に対する応答から成る指標
セットを発生する。あるモジュールは指標セットの内容
に基づいて疑問データベース中の疑問に対する解答を発
生する。
【0009】
【発明の実施の形態】以下は好ましい実施態様の詳細な
説明であり、当業者が本発明を構成し使用するのを可能
にするであろう。この記載は本発明を限定するというよ
りむしろ説明することを意図しており、本発明の全範囲
は特許請求の範囲及びその等価物を参照することにより
決められるべきである。当業者ならば、本発明の広範囲
の代替実施態様が本発明に包含されることを認識するで
あろう。
説明であり、当業者が本発明を構成し使用するのを可能
にするであろう。この記載は本発明を限定するというよ
りむしろ説明することを意図しており、本発明の全範囲
は特許請求の範囲及びその等価物を参照することにより
決められるべきである。当業者ならば、本発明の広範囲
の代替実施態様が本発明に包含されることを認識するで
あろう。
【0010】本発明は、コンピュータアーキテクチャに
おいて使用するためのソースコードプログラムの効率的
なコンパイルを行うための方法及び装置を提供し、これ
は効率的なコンパイルコードを作り、例えば超長命令語
(「VLIW」)アーキテクチャにおいてオペレーショ
ンが並列に実行されることを可能にする。本発明の狙い
は、信号フローグラフ(「SFG」)を作り、入力ソー
スコード中にて出来るだけ十分な並行化を行うことであ
る。SFGは、アルゴリズムを表すデータ構造であり、
コードのコンパイルを助けるのに使用される。SFG
は、プログラムを通じてデータエッジ(オペレーション
間でデータをルート指定する)及びシーケンスエッジ
(オペレーション間に順序関係を与える)によりプログ
ラム中の依存性を表す慣用かつ便利な方法である。SF
Gデータ構造の使用例は、「DSPステーションSFG
コンセプト及び手順インターフェース(ソフトウエア版
8.6.1)」(Frontier Design 、ベルギー、ルーベ
ンのb.v.b.a.)に記載されている。当業者ならば、デー
タ及びシーケンス情報の代替表現などの他の手段により
同じ結果が達成できることを認識するであろう。用語S
FGはこのような表現ならどんなものをも意味する。
おいて使用するためのソースコードプログラムの効率的
なコンパイルを行うための方法及び装置を提供し、これ
は効率的なコンパイルコードを作り、例えば超長命令語
(「VLIW」)アーキテクチャにおいてオペレーショ
ンが並列に実行されることを可能にする。本発明の狙い
は、信号フローグラフ(「SFG」)を作り、入力ソー
スコード中にて出来るだけ十分な並行化を行うことであ
る。SFGは、アルゴリズムを表すデータ構造であり、
コードのコンパイルを助けるのに使用される。SFG
は、プログラムを通じてデータエッジ(オペレーション
間でデータをルート指定する)及びシーケンスエッジ
(オペレーション間に順序関係を与える)によりプログ
ラム中の依存性を表す慣用かつ便利な方法である。SF
Gデータ構造の使用例は、「DSPステーションSFG
コンセプト及び手順インターフェース(ソフトウエア版
8.6.1)」(Frontier Design 、ベルギー、ルーベ
ンのb.v.b.a.)に記載されている。当業者ならば、デー
タ及びシーケンス情報の代替表現などの他の手段により
同じ結果が達成できることを認識するであろう。用語S
FGはこのような表現ならどんなものをも意味する。
【0011】以下の記載では、ソースコードはメモリオ
ペレーションの指標の計算に伴うオペレーションから成
る指標経路だけでなく、スカラー及び配列変数を伴うオ
ペレーションを含むことが仮定される。データフロー分
析における基本ステップは図1に示されており、以下に
まとめる。 1. プログラムオペレーション及びそれらのオペレー
ションのシーケンスに関する情報をソースコードから抽
出する(S1)。 2. スカラー変数に対するオペレーション間の制御及
びデータエッジをルート指定する(S2)。スカラー変
数にアクセス(すなわち読み出し又は書き込み)する
と、変数全体を使用し(読み出し)又は作成する(書き
込む)。古典的なデータフロー分析はこの状況は扱うこ
とができる。しかしながら、古典的なデータフロー分析
は、配列に関する場合、特に非線形指標を含む場合には
最適化を寄与しない。 3. 指標経路中の全てのオペレーションにフラグを立
てる(S3)。 4. 「展開文脈」を発生する(S4)。もし関数がス
テップ2でフラグが立てられた関数呼出しを有するなら
ば、データ構造が発生される。このデータ構造は、まる
で関数内のオペレーションが呼出し関数の文脈にて「イ
ンライン」になっているようにアルゴリズムの次の段階
がその関数のオペレーションを「見なす」ことを可能に
する。
ペレーションの指標の計算に伴うオペレーションから成
る指標経路だけでなく、スカラー及び配列変数を伴うオ
ペレーションを含むことが仮定される。データフロー分
析における基本ステップは図1に示されており、以下に
まとめる。 1. プログラムオペレーション及びそれらのオペレー
ションのシーケンスに関する情報をソースコードから抽
出する(S1)。 2. スカラー変数に対するオペレーション間の制御及
びデータエッジをルート指定する(S2)。スカラー変
数にアクセス(すなわち読み出し又は書き込み)する
と、変数全体を使用し(読み出し)又は作成する(書き
込む)。古典的なデータフロー分析はこの状況は扱うこ
とができる。しかしながら、古典的なデータフロー分析
は、配列に関する場合、特に非線形指標を含む場合には
最適化を寄与しない。 3. 指標経路中の全てのオペレーションにフラグを立
てる(S3)。 4. 「展開文脈」を発生する(S4)。もし関数がス
テップ2でフラグが立てられた関数呼出しを有するなら
ば、データ構造が発生される。このデータ構造は、まる
で関数内のオペレーションが呼出し関数の文脈にて「イ
ンライン」になっているようにアルゴリズムの次の段階
がその関数のオペレーションを「見なす」ことを可能に
する。
【0012】5. DFA問題グラフを構築する(S
5)。これは、例えば指標変数を伴う関数呼出しゆえに
指標経路における階層を除去し平坦化する。DFA問題
グラフは、メモリアクセス及び指標経路中のオペレーシ
ョンに関係するノードを有する。 6. 次の段階におけるデータ及びシーケンスフロール
ーターにより所有され得るメモリアクセスに関する疑問
の1セット(「DFA疑問」)を作る(S6)。これら
の疑問は、ループ、メモリアクセス1及びメモリアクセ
ス2から成る関連の組(triplet) に対して発生される。
これらの疑問はDFA疑問データベースに記憶される。 7.シンボリック実行データ構造を作る(S7)。これ
は、全てのメモリアクセスに関する情報を蓄積又は保持
するのに必要なデータ構造を含む。 8. ソースコードのシンボリック実行を行う(S
8)。 9. DFA疑問データベースに対するシンボリック実
行により作られたデータに後注釈を付ける(S9)。展
開された関数呼出しの場合、この段階は全ての関数呼出
しにより発生されたシンボリック実行データをマージす
る。 10. DFA疑問に対する解答を用いて配列変数に対
するオペレーション間で制御及びデータエッジをルート
指定する(S10)。
5)。これは、例えば指標変数を伴う関数呼出しゆえに
指標経路における階層を除去し平坦化する。DFA問題
グラフは、メモリアクセス及び指標経路中のオペレーシ
ョンに関係するノードを有する。 6. 次の段階におけるデータ及びシーケンスフロール
ーターにより所有され得るメモリアクセスに関する疑問
の1セット(「DFA疑問」)を作る(S6)。これら
の疑問は、ループ、メモリアクセス1及びメモリアクセ
ス2から成る関連の組(triplet) に対して発生される。
これらの疑問はDFA疑問データベースに記憶される。 7.シンボリック実行データ構造を作る(S7)。これ
は、全てのメモリアクセスに関する情報を蓄積又は保持
するのに必要なデータ構造を含む。 8. ソースコードのシンボリック実行を行う(S
8)。 9. DFA疑問データベースに対するシンボリック実
行により作られたデータに後注釈を付ける(S9)。展
開された関数呼出しの場合、この段階は全ての関数呼出
しにより発生されたシンボリック実行データをマージす
る。 10. DFA疑問に対する解答を用いて配列変数に対
するオペレーション間で制御及びデータエッジをルート
指定する(S10)。
【0013】次に、これらのステップは、図2及び本発
明の説明に資する例たる以下の疑似コードを特に参照し
て詳細に説明される。
明の説明に資する例たる以下の疑似コードを特に参照し
て詳細に説明される。
【数4】
【0014】以下の記載はこのコード及びこのコードに
関係するデータ構造の表現を参照する。図5、6及び8
〜16は、当業者ならば十分理解するであろう方法にて
本発明を用いて、上記コードの分析のグラフ表現を与え
る。フロントエンド2は、ソースコード10を入力とし
て受け取り、パーザ(parser)12により語彙分析を行
い、注釈付き構文トリー14の形式にてソースコードの
中間水準言語表現を作る。注釈付き構文トリー14は信
号フローグラフ発生器4に入力される。信号フローグラ
フ発生器4は、まずソースコードを調べて、それが合成
可能か否かを決める。もしそうなら、構文トリーをトラ
バース(traverse)し(図1のS1とS2)、SFGデー
タ構造を作る。SFG発生器4は次の出力を作る。すな
わち、ベア(bare)SFG16、シーケンス情報18及び
呼出しグラフ20である。ベアSFG16は、ソースコ
ード10における全てのオペレーションを表すけれども
これらのオペレーションを連結するどんなデータ又はシ
ーケンスエッジをも含まないSFGである。従って、ベ
アSFGは、予定のないオペレーションセットを含む。
ベアSFGの例を図3に見いだすことができる。シーケ
ンス情報18は、語彙の順番及びベアSFGにおける異
なるオペレーションの排他性に関する情報を含むリスト
である。排他性は、ソースコード中の条件文から引き出
される。Cのような言語では、これらはif−then
−else文、case文及び?演算子である。次のも
のは、上記疑似コード例で図3に示したベアSFGのシ
ーケンス情報である。
関係するデータ構造の表現を参照する。図5、6及び8
〜16は、当業者ならば十分理解するであろう方法にて
本発明を用いて、上記コードの分析のグラフ表現を与え
る。フロントエンド2は、ソースコード10を入力とし
て受け取り、パーザ(parser)12により語彙分析を行
い、注釈付き構文トリー14の形式にてソースコードの
中間水準言語表現を作る。注釈付き構文トリー14は信
号フローグラフ発生器4に入力される。信号フローグラ
フ発生器4は、まずソースコードを調べて、それが合成
可能か否かを決める。もしそうなら、構文トリーをトラ
バース(traverse)し(図1のS1とS2)、SFGデー
タ構造を作る。SFG発生器4は次の出力を作る。すな
わち、ベア(bare)SFG16、シーケンス情報18及び
呼出しグラフ20である。ベアSFG16は、ソースコ
ード10における全てのオペレーションを表すけれども
これらのオペレーションを連結するどんなデータ又はシ
ーケンスエッジをも含まないSFGである。従って、ベ
アSFGは、予定のないオペレーションセットを含む。
ベアSFGの例を図3に見いだすことができる。シーケ
ンス情報18は、語彙の順番及びベアSFGにおける異
なるオペレーションの排他性に関する情報を含むリスト
である。排他性は、ソースコード中の条件文から引き出
される。Cのような言語では、これらはif−then
−else文、case文及び?演算子である。次のも
のは、上記疑似コード例で図3に示したベアSFGのシ
ーケンス情報である。
【0015】
【数5】
【0016】関数呼出しグラフ20は、ソースコード1
0中の関数呼出しを表す呼出し木(call tree) である。
それは「平坦化」段階で使用され、ソースコード中の全
ての関数呼出しに対し情報をキャッシュ(cache) する。
ソースコード中のすべての関数は、木の中のノードによ
り表され、すべての関数呼出しはエッジにより表され
る。図3に示された上記例でのベアSFGでは、「fib
o」が唯一の関数呼出しである。次のものは、さらに複
雑な関数呼出しの例である。
0中の関数呼出しを表す呼出し木(call tree) である。
それは「平坦化」段階で使用され、ソースコード中の全
ての関数呼出しに対し情報をキャッシュ(cache) する。
ソースコード中のすべての関数は、木の中のノードによ
り表され、すべての関数呼出しはエッジにより表され
る。図3に示された上記例でのベアSFGでは、「fib
o」が唯一の関数呼出しである。次のものは、さらに複
雑な関数呼出しの例である。
【数6】
【0017】図4は、上記コードに対する関数呼出しグ
ラフである。これは、主プログラム200が関数「foo
」202(エッジ201により表される)を呼出し、
次にこれが「bar 」205を2回呼出す(エッジ203
と204により表される)。ベアSFG16とシーケン
ス情報18は、スカラールーター22に送られる。スカ
ラールーターは、シーケンス情報18を用いてベアSF
G内の1つのノードから別のノードへエッジのルート指
定を与える。これはスカラー変数に対してのみ行われ
る。この例に対するスカラールーター22の動作の結果
が図5に示される。図5では、データ及びシーケンスエ
ッジが加えられてスカラー変数に関係する全てのオペレ
ーションをリンクしているのが分かる。結果として得ら
れるスカラールートSFGは24にて作られる。次に非
スカラー変数がアドレス指定される。次に、指標経路中
の全てのオペレーションにフラグが立てられ(図1のS
3参照)、関数階層の「平坦化」の準備をする。「指標
経路」は、グラフ上の指標ポートに寄与するSFG中の
ノード、すなわち、メモリアクセスオペレーション(フ
ェッチ又はストア)で使用される指標の計算に含まれる
全てのオペレーションから構成され、又はもし結果が指
標経路中にある別のオペレーションにおいて使用される
ならばである。この例では、指標ポートは指標「i 」で
マークされる。a[i+j]のような場合には、「+」
オペレーションはiとjを定義するオペレーションと共
に、指標経路の一部であるとしてタグが付けられる。図
6に示された陰影付きのオペレーションを参照のこと。
ラフである。これは、主プログラム200が関数「foo
」202(エッジ201により表される)を呼出し、
次にこれが「bar 」205を2回呼出す(エッジ203
と204により表される)。ベアSFG16とシーケン
ス情報18は、スカラールーター22に送られる。スカ
ラールーターは、シーケンス情報18を用いてベアSF
G内の1つのノードから別のノードへエッジのルート指
定を与える。これはスカラー変数に対してのみ行われ
る。この例に対するスカラールーター22の動作の結果
が図5に示される。図5では、データ及びシーケンスエ
ッジが加えられてスカラー変数に関係する全てのオペレ
ーションをリンクしているのが分かる。結果として得ら
れるスカラールートSFGは24にて作られる。次に非
スカラー変数がアドレス指定される。次に、指標経路中
の全てのオペレーションにフラグが立てられ(図1のS
3参照)、関数階層の「平坦化」の準備をする。「指標
経路」は、グラフ上の指標ポートに寄与するSFG中の
ノード、すなわち、メモリアクセスオペレーション(フ
ェッチ又はストア)で使用される指標の計算に含まれる
全てのオペレーションから構成され、又はもし結果が指
標経路中にある別のオペレーションにおいて使用される
ならばである。この例では、指標ポートは指標「i 」で
マークされる。a[i+j]のような場合には、「+」
オペレーションはiとjを定義するオペレーションと共
に、指標経路の一部であるとしてタグが付けられる。図
6に示された陰影付きのオペレーションを参照のこと。
【0018】各オペレーションは、それが指標経路中に
あるか否かを示すフラグを有する。フラグの初期値は
「偽」である。全てのメモリアクセスオペレーション
(フェッチ及びストア)の指標ポートからデータエッジ
を越えての後戻りは、適当なフラグを設定する。このス
テップの結果は図6の例に示される。次の疑似コード
は、指標経路のマーキングに含まれるステップを示す。
あるか否かを示すフラグを有する。フラグの初期値は
「偽」である。全てのメモリアクセスオペレーション
(フェッチ及びストア)の指標ポートからデータエッジ
を越えての後戻りは、適当なフラグを設定する。このス
テップの結果は図6の例に示される。次の疑似コード
は、指標経路のマーキングに含まれるステップを示す。
【数7】
【0019】次のステップは、手順間最適化(すなわ
ち、関数呼出し間で共通の変数に関する最適化)であ
る。これは、フラグの立てられたオペレーションに対す
る展開文脈の発生を伴う(S4参照)。その結果、関数
呼出しグラフデータ構造20中のすべての関数は、「展
開文脈」26のリストを含む。これらは次の様に発生さ
れる。すなわち、もし関数が前のステップでフラグ立て
された関数呼出しを有するならば(すなわち指標経路の
マーキング)、「平坦」形状の、すなわち主プログラム
中で展開された関数を表すべく準備したデータ構造が発
生される(「展開文脈」)。これは「インライン」関数
のC++概念に類似する。その結果は、関数呼出しの階
層が除去されることである。すなわち、指標経路を伴う
関数呼出しの階層は平坦化される。関数における各引き
数は、その関数の各呼出しに対して調べられる。しかし
ながら、引き数としての指標入力を有する関数のみが調
べられることに留意されたい。このことは、各々の展開
文脈を作る次の情報(1)〜(3)を生じる。すなわ
ち、(1)関数の親、(2)関数を呼出すエッジ及び
(3)関数に対する唯一の識別子。その結果は、プログ
ラムが関数呼出しにより導入される階層を参照すること
なく表されることである。DFA問題分析は、どんな関
数階層を用いることもなく、平坦なデータ構造上にて実
行できる。
ち、関数呼出し間で共通の変数に関する最適化)であ
る。これは、フラグの立てられたオペレーションに対す
る展開文脈の発生を伴う(S4参照)。その結果、関数
呼出しグラフデータ構造20中のすべての関数は、「展
開文脈」26のリストを含む。これらは次の様に発生さ
れる。すなわち、もし関数が前のステップでフラグ立て
された関数呼出しを有するならば(すなわち指標経路の
マーキング)、「平坦」形状の、すなわち主プログラム
中で展開された関数を表すべく準備したデータ構造が発
生される(「展開文脈」)。これは「インライン」関数
のC++概念に類似する。その結果は、関数呼出しの階
層が除去されることである。すなわち、指標経路を伴う
関数呼出しの階層は平坦化される。関数における各引き
数は、その関数の各呼出しに対して調べられる。しかし
ながら、引き数としての指標入力を有する関数のみが調
べられることに留意されたい。このことは、各々の展開
文脈を作る次の情報(1)〜(3)を生じる。すなわ
ち、(1)関数の親、(2)関数を呼出すエッジ及び
(3)関数に対する唯一の識別子。その結果は、プログ
ラムが関数呼出しにより導入される階層を参照すること
なく表されることである。DFA問題分析は、どんな関
数階層を用いることもなく、平坦なデータ構造上にて実
行できる。
【0020】次の疑似コードは、展開文脈の発生を説明
するものである。
するものである。
【数8】
【0021】次のステップは、「DFA問題グラフ」の
構築であり(図1のS5参照)、これは非スカラー変数
に対するメモリアクセスに伴うソースコードを記載す
る。これは、DFA抽出器28により行われる。DFA
抽出器28への入力は、スカラールート指定されたSF
G24及び展開文脈26の発生から得られる展開文脈で
ある。別の実施態様では、DFA抽出器は、シーケンス
情報データ構造18及びベアSFGデータ構造16にお
ける情報を利用する。DFA問題グラフ30は、階層が
取り除かれた「平坦な」表現を与える。DFA問題グラ
フ30は、メモリアクセス及び指標経路中のオペレーシ
ョンに関連するノードを有するグラフである。DFA問
題グラフの構築における開始ポイントは、指標経路中の
読み出しメモリアクセス(フェッチ)及び書き込みメモ
リアクセス(ストア)である。これらのノードから、デ
ータフローはシンボリック実行エンジンによりサポート
されたそれらのノードを介して後方にトレースされる。
サポートされた指標経路オペレーションは次の通りであ
る。
構築であり(図1のS5参照)、これは非スカラー変数
に対するメモリアクセスに伴うソースコードを記載す
る。これは、DFA抽出器28により行われる。DFA
抽出器28への入力は、スカラールート指定されたSF
G24及び展開文脈26の発生から得られる展開文脈で
ある。別の実施態様では、DFA抽出器は、シーケンス
情報データ構造18及びベアSFGデータ構造16にお
ける情報を利用する。DFA問題グラフ30は、階層が
取り除かれた「平坦な」表現を与える。DFA問題グラ
フ30は、メモリアクセス及び指標経路中のオペレーシ
ョンに関連するノードを有するグラフである。DFA問
題グラフの構築における開始ポイントは、指標経路中の
読み出しメモリアクセス(フェッチ)及び書き込みメモ
リアクセス(ストア)である。これらのノードから、デ
ータフローはシンボリック実行エンジンによりサポート
されたそれらのノードを介して後方にトレースされる。
サポートされた指標経路オペレーションは次の通りであ
る。
【0022】・ 算術演算子:モジュロ(%)、左シフ
ト(<<)、右シフト(>>)、割る(/)、加える
(+)、キャスト(casts) (型変換/プロモーショ
ン)、引く(−)、掛ける(*)、ビット論理積
(&)、ビット論理和(|)、ビット排他的論理和
(^)、補数演算子(〜)、単項マイナス(−)、単項
プラス(+)。 ・ 論理演算子:以下(<=)、より小(<)、等しい
(==)、等しくない(!=)、以上(>=)、より大
(>)、論理積(&&)、論理和(||)、論理否定
(!)。 ・ ループ反復子。 ・ 定数。 ・ ビット演算子:スライス(所与のワードからビット
の範囲を選択する)、セットスライス(ワード中にビッ
トの範囲をセットする)、concat(ビットを付加し新ワ
ードを形成する)。 ・ 表を調べる(定数表からフェッチする)。 ・ 再帰変数:ループの実行中に等差数列を形成する値
を有する変数。
ト(<<)、右シフト(>>)、割る(/)、加える
(+)、キャスト(casts) (型変換/プロモーショ
ン)、引く(−)、掛ける(*)、ビット論理積
(&)、ビット論理和(|)、ビット排他的論理和
(^)、補数演算子(〜)、単項マイナス(−)、単項
プラス(+)。 ・ 論理演算子:以下(<=)、より小(<)、等しい
(==)、等しくない(!=)、以上(>=)、より大
(>)、論理積(&&)、論理和(||)、論理否定
(!)。 ・ ループ反復子。 ・ 定数。 ・ ビット演算子:スライス(所与のワードからビット
の範囲を選択する)、セットスライス(ワード中にビッ
トの範囲をセットする)、concat(ビットを付加し新ワ
ードを形成する)。 ・ 表を調べる(定数表からフェッチする)。 ・ 再帰変数:ループの実行中に等差数列を形成する値
を有する変数。
【0023】もしノードがサポートされていないなら
ば、DFA問題グラフ中に表されないであろうし、サポ
ートされないノードに依存する全てのノードは無効にさ
れるであろう。このことの結果は、後でのみ分かる。す
なわち、サポートされていないノードに依存するメモリ
アクセスに対しては、最悪の場合の仮定が為されて場合
により並列性の大きさを制限する。DFA問題グラフが
図7に示される。図7のグラフは次の疑似コード例に対
するDFA問題グラフである。
ば、DFA問題グラフ中に表されないであろうし、サポ
ートされないノードに依存する全てのノードは無効にさ
れるであろう。このことの結果は、後でのみ分かる。す
なわち、サポートされていないノードに依存するメモリ
アクセスに対しては、最悪の場合の仮定が為されて場合
により並列性の大きさを制限する。DFA問題グラフが
図7に示される。図7のグラフは次の疑似コード例に対
するDFA問題グラフである。
【数9】
【0024】DFA問題を表すデータ構造は、図7に示
される以下の構成要素を含む。 ・ 定数ノード102、104: これらは単一の出力
を有し内部は定数であるノードである。 ・ 算術及び論理ノード106、108: これらは、
1以上の入力と1つの出力を有し、上記算術及び論理演
算子を表す。 ・ トップループ110: プログラム自身である。 ・ ループノード112: これらは、下方及び上方の
境界、及びループ反復子のためのステップ値を有する。
このループは、(トップループにおいて入れ子にされた
ループに対し)入れ子エッジ114を有し、これは、ル
ープ階層及び再帰ループエッジ116により表されたそ
のループの再帰変数のリストを表す(すなわち、ループ
は変数を制御する)。 ・ ルックアップ表: これは、定数表及びそれらの定
数表からのメモリ読み出し(フェッチ)を表すノードで
ある(図7には図示せず)。 ・ セレクター: これらは、if then else文の対応物
である。それらはブールセレクター値に依存して2つの
入力のうち1つを選択するハードウエアマルチプレクサ
ーに類似する(これらは図8には図示せず)。 ・ 再帰変数: 再帰変数は、再帰ソースノード120
(これはループ反復の開始時に値を保持する)及び再帰
シンク(induction sink)122(これは次のループ反復
において続いて使用するためにループ反復の終了時に値
を保持する)により表される。 ・ メモリアクセス124: これは変数に対する読み
出し/書き込みメモリアクセス(フェッチ/ストア)を
表す。 ・ データエッジ126: これらはノード間のデータ
の転送を表す。
される以下の構成要素を含む。 ・ 定数ノード102、104: これらは単一の出力
を有し内部は定数であるノードである。 ・ 算術及び論理ノード106、108: これらは、
1以上の入力と1つの出力を有し、上記算術及び論理演
算子を表す。 ・ トップループ110: プログラム自身である。 ・ ループノード112: これらは、下方及び上方の
境界、及びループ反復子のためのステップ値を有する。
このループは、(トップループにおいて入れ子にされた
ループに対し)入れ子エッジ114を有し、これは、ル
ープ階層及び再帰ループエッジ116により表されたそ
のループの再帰変数のリストを表す(すなわち、ループ
は変数を制御する)。 ・ ルックアップ表: これは、定数表及びそれらの定
数表からのメモリ読み出し(フェッチ)を表すノードで
ある(図7には図示せず)。 ・ セレクター: これらは、if then else文の対応物
である。それらはブールセレクター値に依存して2つの
入力のうち1つを選択するハードウエアマルチプレクサ
ーに類似する(これらは図8には図示せず)。 ・ 再帰変数: 再帰変数は、再帰ソースノード120
(これはループ反復の開始時に値を保持する)及び再帰
シンク(induction sink)122(これは次のループ反復
において続いて使用するためにループ反復の終了時に値
を保持する)により表される。 ・ メモリアクセス124: これは変数に対する読み
出し/書き込みメモリアクセス(フェッチ/ストア)を
表す。 ・ データエッジ126: これらはノード間のデータ
の転送を表す。
【0025】コード例に対するDFA問題グラフが図8
に示される。次の疑似コードは、DFA問題グラフの発
生を表す。
に示される。次の疑似コードは、DFA問題グラフの発
生を表す。
【数10】
【0026】
【数11】
【0027】
【数12】
【0028】次のステップは、DFA疑問の生成である
(図1のS6参照)。これらは、ベアSFG16により
与えられる情報及びシーケンス情報18に基づいてDF
A疑問発生器36により発生され、指標経路中のフェッ
チ、ストア及びループからなる関連の組が求められる。
DFA疑問は疑問データベース32に記憶される。これ
らの疑問は、1つのオペレーションが別のものを与える
か否か(よって、他のオペレーションと並列に実行でき
るか否か)を確かめることを狙いとする。一旦疑問が解
答されると、ベアSFGはデータ及びシーケンスエッジ
を用いて完成され得る。次の疑問が尋ねられる。 ・ 「定義は特定ポイントに到達したか?」: 消す定
義に到達したポイントに対し消される定義からデータフ
ローが無い場合には、その定義は別のものにより消され
る。次の例を考える。
(図1のS6参照)。これらは、ベアSFG16により
与えられる情報及びシーケンス情報18に基づいてDF
A疑問発生器36により発生され、指標経路中のフェッ
チ、ストア及びループからなる関連の組が求められる。
DFA疑問は疑問データベース32に記憶される。これ
らの疑問は、1つのオペレーションが別のものを与える
か否か(よって、他のオペレーションと並列に実行でき
るか否か)を確かめることを狙いとする。一旦疑問が解
答されると、ベアSFGはデータ及びシーケンスエッジ
を用いて完成され得る。次の疑問が尋ねられる。 ・ 「定義は特定ポイントに到達したか?」: 消す定
義に到達したポイントに対し消される定義からデータフ
ローが無い場合には、その定義は別のものにより消され
る。次の例を考える。
【数13】
【0029】例えばa=1及びa=2(a=1はそれが
再定義されるので消される)の場合には、消される定義
とは「消されるスカラー定義」である。次のものは、消
されないスカラー定義の例である。
再定義されるので消される)の場合には、消される定義
とは「消されるスカラー定義」である。次のものは、消
されないスカラー定義の例である。
【数14】
【0030】例えばスカラーが条件的に更新された場合
に、「消されないスカラー定義」が生じる。同じこと
が、「消される配列定義」に当てはまり、例えば次のコ
ードにおいてa[i]=2が続くならばa[i]=1は
消される。
に、「消されないスカラー定義」が生じる。同じこと
が、「消される配列定義」に当てはまり、例えば次のコ
ードにおいてa[i]=2が続くならばa[i]=1は
消される。
【数15】
【0031】・ 「定義は単一定義であるか?」: も
しアクセスがループ内(ループの全ての反復に亘って)
1回より多く定義されているならば、定義はループ内の
前の反復からのデータを上書きするかもしれず、フィー
ドバックシーケンスエッジは、ループ本体に加えられな
ければならない。将来の反復からのアクセスは、現在の
反復のアクセスの後に実行されなければならない。次の
ものは単一定義を伴う例である。
しアクセスがループ内(ループの全ての反復に亘って)
1回より多く定義されているならば、定義はループ内の
前の反復からのデータを上書きするかもしれず、フィー
ドバックシーケンスエッジは、ループ本体に加えられな
ければならない。将来の反復からのアクセスは、現在の
反復のアクセスの後に実行されなければならない。次の
ものは単一定義を伴う例である。
【数16】
【0032】・ 「メモリアクセスは共通元をもたない
か(disjoint)?」: もしオペレーションがメモリの異
なる部分に作用するならば、それらは共通元をもたな
い。シーケンス又はデータフローエッジが作られる必要
はない。これは、メモリアクセスが並列に実行できるこ
とを意味する。次のものは共通元をもたないメモリアク
セスを伴う例である。
か(disjoint)?」: もしオペレーションがメモリの異
なる部分に作用するならば、それらは共通元をもたな
い。シーケンス又はデータフローエッジが作られる必要
はない。これは、メモリアクセスが並列に実行できるこ
とを意味する。次のものは共通元をもたないメモリアク
セスを伴う例である。
【数17】
【0033】・ 「データは1つの反復から次の反復に
流れるか?」: もし1つの反復において作られたデー
タが次の反復で使用されるならば、フィードバックデー
タエッジが作られなければならない。現在の反復での作
成は、次の反復(1つ又は複数)で使用される前に、実
行されなければならない。次のものは、1つの反復に対
するフィードバックの例である。
流れるか?」: もし1つの反復において作られたデー
タが次の反復で使用されるならば、フィードバックデー
タエッジが作られなければならない。現在の反復での作
成は、次の反復(1つ又は複数)で使用される前に、実
行されなければならない。次のものは、1つの反復に対
するフィードバックの例である。
【数18】
【0034】・ 「データは現在の反復からn番目の反
復に流れますか?」: もし現在の反復にて作られたデ
ータがn番目の反復においてのみ使用されるならば、フ
ィードバックソースで始まるデータ(ここではn=1)
も、対応するフィードバックシンクに送出しなければな
らない。この送出は、データが次のいくつかの反復で使
用されることを示し、現在の反復での作成は、将来の反
復のどれかにおいて使用され得る前に実行されなければ
ならない。次のものは、n=2の場合におけるn回の反
復に亘ってのフィードバックを示す例である。
復に流れますか?」: もし現在の反復にて作られたデ
ータがn番目の反復においてのみ使用されるならば、フ
ィードバックソースで始まるデータ(ここではn=1)
も、対応するフィードバックシンクに送出しなければな
らない。この送出は、データが次のいくつかの反復で使
用されることを示し、現在の反復での作成は、将来の反
復のどれかにおいて使用され得る前に実行されなければ
ならない。次のものは、n=2の場合におけるn回の反
復に亘ってのフィードバックを示す例である。
【数19】
【0035】以下は、疑問データベースのデータベース
構造についての記載である。疑問に対する解答は、ブー
ル肯定(yes) 又は否定(no)、又はメモリ位置を含んだビ
ットベクトル若しくは指標セットのどちらかとし得る。
配列ルーターは、これらの疑問に対する解答を使用し、
データ及びシーケンスエッジを与え、それによりコード
中の並行度を示す。解答が存在しない場合には、最悪の
場合が想定される(すなわち、オペレーションは並列に
実行できない)。図3、5及び6に示された例でのSfg
_fetchOp 中のfibo[i-1] を求める疑問のスナップショ
ットが図9に示される。 dfaqSet : これは単一のメモリアクセスに対しアクセ
スされる全ての位置を与える。 dfaqKillSet : これは書き込みメモリアクセスに対し
常に定義される配列要素を与える。dfaqKillSet はルー
プに対して計算される。プログラム全体に亘って、A[i]
に対するkillset は、ループに対するkillset が空であ
るのに対し、完全な配列である。これはループ入れ子に
おける定義を決めるのに重要である。次の例を考える。
構造についての記載である。疑問に対する解答は、ブー
ル肯定(yes) 又は否定(no)、又はメモリ位置を含んだビ
ットベクトル若しくは指標セットのどちらかとし得る。
配列ルーターは、これらの疑問に対する解答を使用し、
データ及びシーケンスエッジを与え、それによりコード
中の並行度を示す。解答が存在しない場合には、最悪の
場合が想定される(すなわち、オペレーションは並列に
実行できない)。図3、5及び6に示された例でのSfg
_fetchOp 中のfibo[i-1] を求める疑問のスナップショ
ットが図9に示される。 dfaqSet : これは単一のメモリアクセスに対しアクセ
スされる全ての位置を与える。 dfaqKillSet : これは書き込みメモリアクセスに対し
常に定義される配列要素を与える。dfaqKillSet はルー
プに対して計算される。プログラム全体に亘って、A[i]
に対するkillset は、ループに対するkillset が空であ
るのに対し、完全な配列である。これはループ入れ子に
おける定義を決めるのに重要である。次の例を考える。
【0036】
【数20】 この例では、ライン5(A[i])のストアオペレーション
がAの全ての要素を無条件に定義する。ライン3(A
[0])で記憶された値はアクセスできない。というの
は、それはライン5(A[i])での記憶により消される
(上書きされる)からである。この例ではライン3は最
適化される。
がAの全ての要素を無条件に定義する。ライン3(A
[0])で記憶された値はアクセスできない。というの
は、それはライン5(A[i])での記憶により消される
(上書きされる)からである。この例ではライン3は最
適化される。
【0037】dfaqDirectSetIsEmpty: これは、ループ
における特定の1反復中に2つのメモリアクセスが同じ
メモリ位置をアクセスしないならば、「真」(true)を返
す。そうでなければ、「偽」(false) を返す。次の例を
考える。
における特定の1反復中に2つのメモリアクセスが同じ
メモリ位置をアクセスしないならば、「真」(true)を返
す。そうでなければ、「偽」(false) を返す。次の例を
考える。
【数21】 ライン7(A[i])での書き込みを伴うライン6(A[i-
1])での読み出しの直接セットは空である。というの
は、同じメモリ位置は、ループ反復子iの値に対しては
決してアクセスされないからである。ライン7での書き
込みとライン8での読み出しの間の直接セットは空では
ない。 dfaqFeedbackSetIsEmpty: これは、メモリアクセス
(フェッチ/ストア)がループにおける前の反復で別の
メモリアクセスにより使用又は定義された値を使用又は
定義するならば、「真」を返す。 dfaqFeedbackSetLoopingDegreeGT1IsEmpty: これは、
メモリアクセスがループにおける1反復より前の反復に
おいて別のメモリアクセスによりアクセスされた値を使
用するならば、「真」を返す。 dfaqIsSingleDefinition: これは、ループ中のメモリ
アクセスがただ1回だけメモリをアクセスするならば、
「真」を返す。それ以外では「偽」を返す。次の疑似コ
ードはDFA疑問を発生するためのアルゴリズムを示
す。
1])での読み出しの直接セットは空である。というの
は、同じメモリ位置は、ループ反復子iの値に対しては
決してアクセスされないからである。ライン7での書き
込みとライン8での読み出しの間の直接セットは空では
ない。 dfaqFeedbackSetIsEmpty: これは、メモリアクセス
(フェッチ/ストア)がループにおける前の反復で別の
メモリアクセスにより使用又は定義された値を使用又は
定義するならば、「真」を返す。 dfaqFeedbackSetLoopingDegreeGT1IsEmpty: これは、
メモリアクセスがループにおける1反復より前の反復に
おいて別のメモリアクセスによりアクセスされた値を使
用するならば、「真」を返す。 dfaqIsSingleDefinition: これは、ループ中のメモリ
アクセスがただ1回だけメモリをアクセスするならば、
「真」を返す。それ以外では「偽」を返す。次の疑似コ
ードはDFA疑問を発生するためのアルゴリズムを示
す。
【0038】
【数22】
【0039】
【数23】
【0040】指標経路に関する疑問が発生されたなら、
次のステップは、それらの疑問に対する解答を与える
「シンボリック実行」である(S8参照)。しかしなが
ら、シンボリック実行の前に、疑問データベースを調べ
ることによりシンボリック実行データ構造を作るのが好
ましい(S7参照)。データ構造は次の2つの部分から
作られる。 ・ DFA問題グラフにリンクし同じ階層を有する実行
構造(「シンボリック実行構造」)。 ・ シンボリック実行中にデータを蓄積するのに使用さ
れるセット。シンボリック実行データ構造(指標セット
データベース34)に対して次の2つの部分が存在す
る。すなわち、DFA問題グラフにリンクし同じ階層を
有する実行構造、及び実行中に指標セットデータを蓄積
するのに使用されるセットである。データ構造は、メモ
リアクセスと指標セットに対するポインタ、及びDFA
問題グラフとDFA疑問に対する後ポインタ(back poin
ter)を含んだオブジェクトのセットを含む。
次のステップは、それらの疑問に対する解答を与える
「シンボリック実行」である(S8参照)。しかしなが
ら、シンボリック実行の前に、疑問データベースを調べ
ることによりシンボリック実行データ構造を作るのが好
ましい(S7参照)。データ構造は次の2つの部分から
作られる。 ・ DFA問題グラフにリンクし同じ階層を有する実行
構造(「シンボリック実行構造」)。 ・ シンボリック実行中にデータを蓄積するのに使用さ
れるセット。シンボリック実行データ構造(指標セット
データベース34)に対して次の2つの部分が存在す
る。すなわち、DFA問題グラフにリンクし同じ階層を
有する実行構造、及び実行中に指標セットデータを蓄積
するのに使用されるセットである。データ構造は、メモ
リアクセスと指標セットに対するポインタ、及びDFA
問題グラフとDFA疑問に対する後ポインタ(back poin
ter)を含んだオブジェクトのセットを含む。
【0041】symExecTopLoop: この構造はアルゴリズ
ムの実行を表す。これはsymExecMemoryAccesses 及びsy
mExecLoopsのリストを含む(下記参照)。 symExecLoop : この構造はループの実行を表す。これ
はsymExecMemoryAccesses 及びsymExecLoopsのリストを
有する。これは更新されるべき再帰(induction) ソース
のリスト及び異なるセットを含むリストをも有し、これ
らの各々はループ反復の実行中の特定段階にて更新され
なければならない。 symExecMemoryAccess : この構造は、メモリアクセス
を表し、メモリアクセスが発生する際に更新されなけれ
ばならないセットのリストを有する。 symExecFeedback : この構造は、DFA問題グラフか
らの再帰変数を表す。セットは次の通りである。 symExecSet: これはアクセスされた要素を集めるのに
使用されるセットである。 symExecIntegratedSet: これは2つのセットから作ら
れたセットであり、そのうちの1つは、特定のsymExec
オブジェクトの実行に亘って発生した全てのメモリアク
セス、例えば特定のループの実行中に発生した全てのメ
モリアクセスを蓄積する。もう一方のセットは類似する
が、前の反復からアクセスされた要素を含まない。
ムの実行を表す。これはsymExecMemoryAccesses 及びsy
mExecLoopsのリストを含む(下記参照)。 symExecLoop : この構造はループの実行を表す。これ
はsymExecMemoryAccesses 及びsymExecLoopsのリストを
有する。これは更新されるべき再帰(induction) ソース
のリスト及び異なるセットを含むリストをも有し、これ
らの各々はループ反復の実行中の特定段階にて更新され
なければならない。 symExecMemoryAccess : この構造は、メモリアクセス
を表し、メモリアクセスが発生する際に更新されなけれ
ばならないセットのリストを有する。 symExecFeedback : この構造は、DFA問題グラフか
らの再帰変数を表す。セットは次の通りである。 symExecSet: これはアクセスされた要素を集めるのに
使用されるセットである。 symExecIntegratedSet: これは2つのセットから作ら
れたセットであり、そのうちの1つは、特定のsymExec
オブジェクトの実行に亘って発生した全てのメモリアク
セス、例えば特定のループの実行中に発生した全てのメ
モリアクセスを蓄積する。もう一方のセットは類似する
が、前の反復からアクセスされた要素を含まない。
【0042】他のセットは、疑問の解決に関係し、疑問
を解決すべくsymExecSets 、symExecIntegratedSets 及
び他の論理を利用する。これらのセットは次の通りであ
る。 symExecAccessedSet: dfaqSet を解決(resolve) す
る。 symExecDirectSet: dfaqDirectSetIsEmptyを解決す
る。 symExecFeedbackSet: dfaqFeedbackSetIsEmptyを解決
する。 symExecLoopDegreeGT1Set : dfaqFeedbackSetLoopDeg
reeGT1IsEmpty を解決する。 symExecKillSet: dfaqKillSet を解決する。
を解決すべくsymExecSets 、symExecIntegratedSets 及
び他の論理を利用する。これらのセットは次の通りであ
る。 symExecAccessedSet: dfaqSet を解決(resolve) す
る。 symExecDirectSet: dfaqDirectSetIsEmptyを解決す
る。 symExecFeedbackSet: dfaqFeedbackSetIsEmptyを解決
する。 symExecLoopDegreeGT1Set : dfaqFeedbackSetLoopDeg
reeGT1IsEmpty を解決する。 symExecKillSet: dfaqKillSet を解決する。
【0043】図10〜14は、この詳細な説明を通して
使用されている例において、DFA問題グラフの文脈中
のDFA疑問、DFA疑問データベース、及びシンボリ
ック実行データ構造のセットを示す。次の疑似コード
は、シンボリック実行データ構造の作成を説明する。
使用されている例において、DFA問題グラフの文脈中
のDFA疑問、DFA疑問データベース、及びシンボリ
ック実行データ構造のセットを示す。次の疑似コード
は、シンボリック実行データ構造の作成を説明する。
【0044】
【数24】
【0045】
【数25】
【0046】次のステップはプログラムの「シンボリッ
ク実行」である(S8参照)。図15はこの手順のスナ
ップショットであり、シンボリック実行データ構造、及
びDFA疑問データベース32に対する結果の後注釈付
けを含む(後に説明)。ループ及び指標表現を含むプロ
グラムのそれらの部分のみが実行される。すなわち、指
標表現の表現が実行される。これは上記指標セットを満
たす。この実行は、DFA問題グラフ中のデータノード
を評価するDFA分析器38により実行される(すなわ
ち、プログラムの指標経路を実行し、それにより指標セ
ットを満たす)。次の疑似コードは、プログラムのシン
ボリック実行のアルゴリズムを示す。
ク実行」である(S8参照)。図15はこの手順のスナ
ップショットであり、シンボリック実行データ構造、及
びDFA疑問データベース32に対する結果の後注釈付
けを含む(後に説明)。ループ及び指標表現を含むプロ
グラムのそれらの部分のみが実行される。すなわち、指
標表現の表現が実行される。これは上記指標セットを満
たす。この実行は、DFA問題グラフ中のデータノード
を評価するDFA分析器38により実行される(すなわ
ち、プログラムの指標経路を実行し、それにより指標セ
ットを満たす)。次の疑似コードは、プログラムのシン
ボリック実行のアルゴリズムを示す。
【0047】
【数26】
【0048】
【数27】
【0049】最後に、シンボリック実行により集められ
た情報は、疑問データベース32に送られる。このステ
ップは、疑問データベースの「後注釈」(back annotati
on)と称される(S9参照)。非手順間データフロー分
析の場合には、これはデータの単なる転送により行われ
る。手順間データフロー分析の場合には、異なるsymExe
c オブジェクトにおけるデータは解答を得るべくマージ
される。これは図15に説明されており、上記疑似コー
ド例の数列(progression) 、指標セットの充てん、及び
疑問データベースに対する指標セットの後注釈を示す。
図16に示された最後のSFGは、データ及びシーケン
スエッジをスカラールート指定されたSFG24に加え
る配列ルーター40により完成される(S10参照)。
非スカラー変数の場合、配列ルーターは、上記データフ
ロー分析により発生されたデータを使用するか又は、非
スカラー変数に対するメモリアクセスについて最悪の場
合のシナリオを取る。
た情報は、疑問データベース32に送られる。このステ
ップは、疑問データベースの「後注釈」(back annotati
on)と称される(S9参照)。非手順間データフロー分
析の場合には、これはデータの単なる転送により行われ
る。手順間データフロー分析の場合には、異なるsymExe
c オブジェクトにおけるデータは解答を得るべくマージ
される。これは図15に説明されており、上記疑似コー
ド例の数列(progression) 、指標セットの充てん、及び
疑問データベースに対する指標セットの後注釈を示す。
図16に示された最後のSFGは、データ及びシーケン
スエッジをスカラールート指定されたSFG24に加え
る配列ルーター40により完成される(S10参照)。
非スカラー変数の場合、配列ルーターは、上記データフ
ロー分析により発生されたデータを使用するか又は、非
スカラー変数に対するメモリアクセスについて最悪の場
合のシナリオを取る。
【0050】最悪の場合の状況に対する基本的なアルゴ
リズムは次の通りである。
リズムは次の通りである。
【数28】 これは、DFA問題グラフの構築の上記説明において言
及した最悪の場合のシナリオ仮定である。最悪の場合の
シナリオでは、DATA[i] 及びDATA[j] オペレーション
は、それらの定義(すなわち最悪の場合)セットが重な
るのでシーケンス化されなければならない。もしデータ
フロー分析からのデータが考慮されるならば、ルーター
は2つのオペレーションをシーケンス化せず、よって並
行度を増す(なぜならそれらの定義セットは互いに共通
元をもたないからである)。配列ルーターのアルゴリズ
ムは次の通りである。
及した最悪の場合のシナリオ仮定である。最悪の場合の
シナリオでは、DATA[i] 及びDATA[j] オペレーション
は、それらの定義(すなわち最悪の場合)セットが重な
るのでシーケンス化されなければならない。もしデータ
フロー分析からのデータが考慮されるならば、ルーター
は2つのオペレーションをシーケンス化せず、よって並
行度を増す(なぜならそれらの定義セットは互いに共通
元をもたないからである)。配列ルーターのアルゴリズ
ムは次の通りである。
【0051】
【数29】
【0052】
【数30】
【0053】
【数31】
【0054】図16に示されるように、配列ルーター4
0の出力は十全にルート指定されたSFG42である。
さらなる最適化がピープホール最適化器44により行わ
れ、結局最終のSFG46となる。最終のSFG46
(及び十分にルート指定されたSFG42)は、並列に
実行できるソースコード10中のオペレーションを反映
する。このようにソースコード10の実行が最適化され
る。
0の出力は十全にルート指定されたSFG42である。
さらなる最適化がピープホール最適化器44により行わ
れ、結局最終のSFG46となる。最終のSFG46
(及び十分にルート指定されたSFG42)は、並列に
実行できるソースコード10中のオペレーションを反映
する。このようにソースコード10の実行が最適化され
る。
【0055】以上は本発明の好ましい実施態様の説明で
ある。当業者ならば、本発明の精神及び範囲を逸脱する
ことなく上記記載により本発明の広範囲の代替及び等価
な実現が可能なことが分かるであろう。
ある。当業者ならば、本発明の精神及び範囲を逸脱する
ことなく上記記載により本発明の広範囲の代替及び等価
な実現が可能なことが分かるであろう。
【図1】本発明の基本的な方法を示すフローチャートで
ある。
ある。
【図2】本発明の基本的な構成要素、及びそれらの間の
相互作用を示すブロック図である。
相互作用を示すブロック図である。
【図3】発明の詳細な説明における疑似コード例でのオ
ペレーションを表すノードの信号フローグラフ(「SF
G」)である。
ペレーションを表すノードの信号フローグラフ(「SF
G」)である。
【図4】発明の詳細な説明における例での関数呼出しグ
ラフである。
ラフである。
【図5】発明の詳細な説明における例でのスカラー変数
に対するデータのルート指定及びシーケンスエッジを示
す信号フローグラフである。
に対するデータのルート指定及びシーケンスエッジを示
す信号フローグラフである。
【図6】発明の詳細な説明における例でのプログラムの
指標経路のマーキングを示す信号フローグラフである。
指標経路のマーキングを示す信号フローグラフである。
【図7】本発明で使用されるDFA問題グラフの例であ
る。
る。
【図8】発明の詳細な説明における例でのDFA問題グ
ラフである。
ラフである。
【図9】発明の詳細な説明における例での1つの関数呼
出しに対するDFA疑問のスナップショットである。
出しに対するDFA疑問のスナップショットである。
【図10】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図11】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図12】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図13】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図14】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図15】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図16】発明の詳細な説明における例での結果として
得られる信号フローグラフであり、データ及びシーケン
スエッジでルート指定されており、並行化を行うのに用
いられる。
得られる信号フローグラフであり、データ及びシーケン
スエッジでルート指定されており、並行化を行うのに用
いられる。
4 SFG発生器 10 ソースコード 12 パーザ 14 注釈付き構文トリー 16 ベアSFG 18 シーケンス情報 20 呼出しグラフ 22 スカラールーター 24 スカラールート指定されたSFG 26 展開文脈 28 DFA抽出器 30 DFA問題グラフ 32 疑問データベース 34 指標セットデータベース 36 DFA疑問を発生 38 DFA分析器 40 配列ルーター 42 ルート指定されたSFG 44 ピープホール最適化器 46 最終SFG
───────────────────────────────────────────────────── フロントページの続き (72)発明者 クルト・ドュ・ポン ベルギー国 2220 ハイスト−オープ−デ ン−ベルク アウデ リーアセバーン 125 デー
Claims (13)
- 【請求項1】 シーケンスをなす複数のオペレーション
を含むコンピュータ プログラムをコンパイルする方法であって、前記オペレ
ーション及び該オペレーションのシーケンスを記載する
情報をコンピュータプログラムから抽出し、抽出された
情報をデータ構造として記憶し;指標表現を伴うコンピ
ュータプログラム中のオペレーションを識別し;指標表
現を伴うコンピュータプログラム中のオペレーションを
実行し、それによりメモリアクセスを記載する情報を作
り;メモリアクセスを記載する情報に基づいて並列に実
行できるオペレーションを識別する、ステップを含む上
記方法。 - 【請求項2】 シンボリック実行データ構造を発生する
ステップをさらに含み、該シンボリック実行データ構造
はメモリアクセスと指標表現を伴うコンピュータプログ
ラム中のオペレーションの表現を含む、請求項1記載の
方法。 - 【請求項3】 シンボリック実行データ構造がデータフ
ロー問題グラフを含む、請求項2記載の方法。 - 【請求項4】 オペレーションを実行するステップが、
シンボリック実行データ構造を実行すること、及びコン
ピュータプログラムによりアドレス指定されたメモリ位
置に注を付けることを含む、請求項2記載の方法。 - 【請求項5】 疑問データ構造を発生するステップが、
コンピュータプログラムがどのようにメモリをアクセス
するかについての疑問をさらに含む、請求項1記載の方
法。 - 【請求項6】 前記疑問によりコンピュータプログラム
に問合せを行うことによりコンピュータプログラムを分
析し、それにより、疑問に対する解答を得、解答に後注
釈を付けて疑問データ構造に入れるステップをさらに含
む、請求項5記載の方法。 - 【請求項7】 シンボリック実行データ構造が、データ
フロー問題グラフを含み、また、疑問によりコンピュー
タプログラムに問合せを行うことによってデータフロー
問題グラフを分析し、それにより疑問に対する解答を
得、解答に後注釈を付けて疑問データ構造に入れるステ
ップをさらに含む、請求項5記載の方法。 - 【請求項8】 指標表現を伴うプログラムのオペレーシ
ョンによるメモリアクセスに関する指標セットを発生す
るステップをさらに含み、指標表現を伴うコンピュータ
プログラム中のオペレーションを実行するステップが指
標セットを満たすことを含む、請求項1記載の方法。 - 【請求項9】 コンピュータコードをコンパイルするた
めの装置であって、該装置は、 コンピュータコードにより使用される指標表現に対し信
号フローデータ構造を作るための第1信号フロー分析手
段を含み、該第1信号フロー分析手段は、 コンピュータコード中の指標経路を識別するための手段
であって、前記指標経路が指標表現によるメモリアクセ
スにおいて使用される指標を計算する際に伴うオペレー
ションを含む前記手段;指標経路を実行し、それにより
指標表現メモリアクセスに関する情報を抽出するための
シンボリック実行手段、を含む上記装置。 - 【請求項10】 指標表現によるメモリアクセスに関す
る疑問を含む疑問データベースをさらに含む、請求項9
記載の装置。 - 【請求項11】 疑問データベース中の疑問に対する応
答を含む指標セットを発生するための手段をさらに含
む、請求項10記載の装置。 - 【請求項12】 コンピュータコードにより使用される
スカラー変数に対し信号フローデータ構造を作るための
第2信号フロー分析手段をさらに含む、請求項9記載の
装置。 - 【請求項13】 信号フローデータ構造が信号フローグ
ラフである、請求項9記載の装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/450,325 US6588009B1 (en) | 1999-11-29 | 1999-11-29 | Method and apparatus for compiling source code using symbolic execution |
US09/450325 | 1999-11-29 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001166949A true JP2001166949A (ja) | 2001-06-22 |
Family
ID=23787646
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000361619A Pending JP2001166949A (ja) | 1999-11-29 | 2000-11-28 | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6588009B1 (ja) |
EP (1) | EP1107116A3 (ja) |
JP (1) | JP2001166949A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014186728A (ja) * | 2013-03-15 | 2014-10-02 | Fujitsu Ltd | ソフトウェアプログラムの効率を高める方法及びプロセッサ |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020100031A1 (en) * | 2000-01-14 | 2002-07-25 | Miguel Miranda | System and method for optimizing source code |
US6542862B1 (en) * | 2000-02-18 | 2003-04-01 | Hewlett-Packard Development Company, L.P. | Determining register dependency in multiple architecture systems |
JP3641997B2 (ja) * | 2000-03-30 | 2005-04-27 | 日本電気株式会社 | プログラム変換装置及び方法並びに記録媒体 |
US6938046B2 (en) * | 2001-03-02 | 2005-08-30 | Dow Jones Reuters Business Interactive, Llp | Polyarchical data indexing and automatically generated hierarchical data indexing paths |
US6966055B2 (en) * | 2001-03-02 | 2005-11-15 | International Business Machines Corporation | Optimizing post-link code |
US7036116B2 (en) * | 2001-03-23 | 2006-04-25 | International Business Machines Corporation | Percolating hot function store/restores to colder calling functions |
US7036114B2 (en) * | 2001-08-17 | 2006-04-25 | Sun Microsystems, Inc. | Method and apparatus for cycle-based computation |
US7080365B2 (en) | 2001-08-17 | 2006-07-18 | Sun Microsystems, Inc. | Method and apparatus for simulation system compiler |
US7043596B2 (en) | 2001-08-17 | 2006-05-09 | Sun Microsystems, Inc. | Method and apparatus for simulation processor |
US7140019B2 (en) * | 2002-06-28 | 2006-11-21 | Motorola, Inc. | Scheduler of program instructions for streaming vector processor having interconnected functional units |
US6934938B2 (en) * | 2002-06-28 | 2005-08-23 | Motorola, Inc. | Method of programming linear graphs for streaming vector computation |
US7415601B2 (en) * | 2002-06-28 | 2008-08-19 | Motorola, Inc. | Method and apparatus for elimination of prolog and epilog instructions in a vector processor using data validity tags and sink counters |
US7159099B2 (en) * | 2002-06-28 | 2007-01-02 | Motorola, Inc. | Streaming vector processor with reconfigurable interconnection switch |
US7296010B2 (en) * | 2003-03-04 | 2007-11-13 | International Business Machines Corporation | Methods, systems and program products for classifying and storing a data handling method and for associating a data handling method with a data item |
US7290122B2 (en) * | 2003-08-29 | 2007-10-30 | Motorola, Inc. | Dataflow graph compression for power reduction in a vector processor |
US7464375B2 (en) * | 2004-06-24 | 2008-12-09 | International Business Machines Corporation | Method for flattening hierarchically structured flows |
US7487497B2 (en) * | 2004-08-26 | 2009-02-03 | International Business Machines Corporation | Method and system for auto parallelization of zero-trip loops through induction variable substitution |
US7797690B2 (en) * | 2005-03-15 | 2010-09-14 | International Business Machines Corporation | System, method and program product to optimize code during run time |
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 |
US8060870B2 (en) * | 2007-09-26 | 2011-11-15 | International Business Machines Corporation | System and method for advanced polyhedral loop transformations of source code in a compiler |
US8056065B2 (en) * | 2007-09-26 | 2011-11-08 | International Business Machines Corporation | Stable transitions in the presence of conditionals for an advanced dual-representation polyhedral loop transformation framework |
US8087010B2 (en) * | 2007-09-26 | 2011-12-27 | International Business Machines Corporation | Selective code generation optimization for an advanced dual-representation polyhedral loop transformation framework |
US8087011B2 (en) * | 2007-09-26 | 2011-12-27 | International Business Machines Corporation | Domain stretching for an advanced dual-representation polyhedral loop transformation framework |
US7945768B2 (en) | 2008-06-05 | 2011-05-17 | Motorola Mobility, Inc. | Method and apparatus for nested instruction looping using implicit predicates |
US7681182B1 (en) * | 2008-11-06 | 2010-03-16 | International Business Machines Corporation | Including function call graphs (FCG) generated from trace analysis data within a searchable problem determination knowledge base |
US8549490B2 (en) * | 2009-09-29 | 2013-10-01 | International Business Machines Corporation | Static code analysis for packaged application customization |
US9355175B2 (en) * | 2010-10-29 | 2016-05-31 | Google Inc. | Triggering answer boxes |
US8943487B2 (en) * | 2011-01-20 | 2015-01-27 | Fujitsu Limited | Optimizing libraries for validating C++ programs using symbolic execution |
US8645924B2 (en) * | 2011-06-06 | 2014-02-04 | Fujitsu Limited | Lossless path reduction for efficient symbolic execution and automatic test generation |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5491823A (en) * | 1994-01-25 | 1996-02-13 | Silicon Graphics, Inc. | Loop scheduler |
US5537620A (en) * | 1994-09-16 | 1996-07-16 | International Business Machines Corporation | Redundant load elimination on optimizing compilers |
JP3317825B2 (ja) * | 1995-09-28 | 2002-08-26 | 富士通株式会社 | ループ最適化翻訳処理方法 |
US6101488A (en) * | 1996-09-04 | 2000-08-08 | Fujitsu Limited | Intelligent information program generation and retrieval system |
US6351845B1 (en) * | 1999-02-04 | 2002-02-26 | Sun Microsystems, Inc. | Methods, apparatus, and articles of manufacture for analyzing memory use |
US6393423B1 (en) * | 1999-04-08 | 2002-05-21 | James Francis Goedken | Apparatus and methods for electronic information exchange |
US6374403B1 (en) * | 1999-08-20 | 2002-04-16 | Hewlett-Packard Company | Programmatic method for reducing cost of control in parallel processes |
-
1999
- 1999-11-29 US US09/450,325 patent/US6588009B1/en not_active Expired - Lifetime
-
2000
- 2000-11-17 EP EP00125080A patent/EP1107116A3/en not_active Ceased
- 2000-11-28 JP JP2000361619A patent/JP2001166949A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014186728A (ja) * | 2013-03-15 | 2014-10-02 | Fujitsu Ltd | ソフトウェアプログラムの効率を高める方法及びプロセッサ |
Also Published As
Publication number | Publication date |
---|---|
EP1107116A3 (en) | 2003-09-03 |
US6588009B1 (en) | 2003-07-01 |
EP1107116A2 (en) | 2001-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2001166949A (ja) | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 | |
US6662354B1 (en) | Determining destinations of a dynamic branch | |
JP4105264B2 (ja) | コンパイラ | |
US8024718B2 (en) | System and method for optimizing source code | |
EP0643851B1 (en) | Debugger program which includes correlation of computer program source code with optimized objet code | |
US5142681A (en) | APL-to-Fortran translators | |
US5577253A (en) | Analyzing inductive expressions in a multilanguage optimizing compiler | |
US5355494A (en) | Compiler for performing incremental live variable analysis for data-parallel programs | |
US5146594A (en) | Method of producing object program based on interprocedural dataflow analysis of a source program | |
US20080178149A1 (en) | Inferencing types of variables in a dynamically typed language | |
Peralta et al. | Analysis of imperative programs through analysis of constraint logic programs | |
US5812855A (en) | System and method for constaint propagation cloning for unknown edges in IPA | |
US20060200796A1 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US5396627A (en) | Method of producing object program based on interprocedural dataflow analysis of a source program | |
JP2001166946A (ja) | 階層の平坦化によりソースコードをコンパイルする方法及び装置 | |
KR950006607B1 (ko) | 다중 언어 최적화 컴파일러내의 표시 효과용 인터페이스 | |
Horváth et al. | Generic search plans for matching advanced graph patterns | |
Hartel et al. | Compilation of functional languages using flow graph analysis | |
JP2002527816A (ja) | プログラム最適化装置および方法 | |
Campbell et al. | Refining and defining the program dependence web | |
Tolmach | Combining closure conversion with closure analysis using algebraic types | |
Zima et al. | Automatic Restructuring for Parallel and Vector Computers | |
JPH02176938A (ja) | 機械語命令最適化方式 | |
Ulle | Source Code Analysis and Type Inference for R | |
Saarikivi et al. | Translating C# to Branching Symbolic Transducers. |