特許6245573IP Force 特許公報全文掲載

技術分野

制御フロー・グラフ上の実行パスの実行頻度情報を得るための技法

発明が解決しようとする課題[発明の詳細な説明]から抜粋

図7A〜図7Dそれぞれは、従来技術に従い、図7A〜図7Dそれぞれに示す変形前の制御フロー・グラフ(701,711,721及び731)において、先行となる基本ブロック(先行基本ブロック)vと後続となる基本ブロック(後続基本ブロック)w又はw1との間のエッジにパス値1を割り当て、そしてインストラメンテーション・コードを挿入している模式図を示す。以下に、図7A〜図7Dそれぞれに示す制御フロー・グラフ(701,711,721及び731)がインストラメンテーション・コード(すなわち、パス値を加算する命令である)の挿入により、どのように変形されるのかを説明する。パス値とは、制御フロー・グラフの始点から終点にかけて通過した実行パスを唯一に表す整数値である。 図7A(従来技術1)において、変形前の制御フロー・グラフ(701)は、先行基本ブロックv、並びに、当該先行基本ブロックvの2つの後続基本ブロックである後続基本ブロックx(当該後続基本ブロックxはもう1つの後続基本ブロックwの先行基本ブロックでもあり、先行基本ブロックxとも示される)及び後続基本ブロックwを有し、先行基本ブロックvはエッジv→xで後続基本ブロックxと且つエッジv→wで後続基本ブロックwとそれぞれ接続されており、及び、後続基本ブロックxはエッジx→wで後続基本ブロックwと接続されている。 コンピュータは、変形前の制御フロー・グラフ(701)において、先行基本ブロックvと後続基本ブロックxとの間のエッジv→xにパス値0を割り当て、且つ、先行基本ブロックvと後続基本ブロックwとの間のエッジv→wにパス値1を割り当てる。また、コンピュータは、その他のエッジにパス値0を割り当てる。従って、制御フロー・グラフ(702)では、エッジv→xにパス値0が割り当てられており、且つ、エッジv→wにパス値1が割り当てられている。 次に、コンピュータは、制御フロー・グラフ(702)にインストラメンテーション・コードを挿入する操作を行う。 コンピュータは、エッジv→xにパス値0が割り当てられているので、インストラメンテーション・コードを挿入しない。同様に、コンピュータは、パス値0が割り当てられているその他のエッジについてもインストラメンテーション・コードを挿入しない。 また、コンピュータは、エッジv→wにパス値1が割り当てられているので、エッジv→w上に、パス値として1を加算する命令(r+=1)を含む基本ブロック(704)を挿入する。挿入された基本ブロック(挿入基本ブロック)(704)は、パス値として1を加算する命令(r+=1)とともに、後続基本ブロックwへのジャンプ命令(jmp w)を含む。 従って、図7Aに示す変形された制御フロー・グラフ(703)において、インストラメンテーション・コードを挿入することによってジャンプ命令の数が1つ増えることから(jmp w)(704)、オーバーヘッドが増加するという問題が生じる。 図7B(従来技術2)において、変形前の制御フロー・グラフ(711)は、先行基本ブロックv、当該先行基本ブロックvの2つの後続基本ブロックx(当該後続基本ブロックxはもう1つの後続基本ブロックwの先行基本ブロックでもあり、先行基本ブロックxとも示される)及び後続基本ブロックw、並びに、先行基本ブロックv以外の先行基本ブロックyを有し、先行基本ブロックvはエッジv→xで後続基本ブロックxと且つエッジv→wで後続基本ブロックwとそれぞれ接続されており、先行基本ブロックyはエッジy→xで後続基本ブロックxと接続されており、及び、後続基本ブロックxはエッジx→wで後続基本ブロックwと接続されている。 コンピュータは、変形前の制御フロー・グラフ(711)において、先行基本ブロックvと後続基本ブロックxとの間のエッジv→xにパス値0を割り当て、先行基本ブロックvと後続基本ブロックwとの間のエッジv→wにパス値1を割り当て、且つ、先行基本ブロックyと後続基本ブロックxとの間のエッジy→xにパス値2を割り当てる。また、コンピュータは、その他のエッジにパス値0を割り当てる。従って、制御フロー・グラフ(712)では、エッジv→xにパス値0が割り当てられており、エッジv→wにパス値1が割り当てられており、且つ、エッジy→xにパス値2が割り当てられている。 次に、コンピュータは、制御フロー・グラフ(712)にインストラメンテーション・コードを挿入する操作を行う。 コンピュータは、エッジv→xにパス値0が割り当てられているので、インストラメンテーション・コードを挿入しない。同様に、コンピュータは、パス値0が割り当てられているその他のエッジについてもインストラメンテーション・コードを挿入しない。 また、コンピュータは、エッジv→wにパス値1が割り当てられているので、エッジv→w上に、パス値として1を加算する命令(r+=1)を含む基本ブロック(714)を挿入する。挿入基本ブロック(714)は、パス値として1を加算する命令(r+=1)とともに、後続基本ブロックwへのジャンプ命令(jmp w)を含む。 同様に、コンピュータは、エッジy→xにパス値2が割り当てられているので、エッジy→x上に、パス値として2を加算する命令(r+=2)を含む基本ブロック(715)を挿入する。挿入基本ブロック(715)は、パス値として2を加算する命令(r+=2)とともに、後続基本ブロックxへのジャンプ命令(jmp x)を含む。 従って、図7Bに示す変形された制御フロー・グラフ(713)において、インストラメンテーション・コードを挿入することによってジャンプ命令の数が2つ増えることから(jmp w及びjmp x)(それぞれ、714及び715)、オーバーヘッドが増加するという問題が生じる。 図7C(従来技術3)において、変形前の制御フロー・グラフ(721)は、先行基本ブロックv、当該先行基本ブロックvの3つの後続基本ブロックである後続基本ブロックx(当該後続基本ブロックxは別の後続基本ブロックw1及びw2の先行基本ブロックでもあり、先行基本ブロックxとも示される)、後続基本ブロックw1及びw2、並びに、先行基本ブロックv以外の先行基本ブロックy(後続基本ブロックw2の先行基本ブロックである)を有し、先行基本ブロックvはエッジv→xで後続基本ブロックxと、エッジv→w1で後続基本ブロックw1と且つエッジv→w2で後続基本ブロックw2とそれぞれ接続されており、後続基本ブロックxはエッジx→w1で後続基本ブロックw1と接続されており、後続基本ブロックw1はエッジw1→yで先行基本ブロックyと接続されており、及び先行基本ブロックyはエッジy→w2で後続基本ブロックw2と接続されている。 コンピュータは、変形前の制御フロー・グラフ(721)において、先行基本ブロックvと後続基本ブロックxとの間のエッジv→xにパス値0を割り当て、先行基本ブロックvと後続基本ブロックw1との間のエッジv→w1にパス値1を割り当て、且つ、先行基本ブロックvと後続基本ブロックw2との間のエッジv→w2にパス値2を割り当てる。また、コンピュータは、その他のエッジにパス値0を割り当てる。従って、制御フロー・グラフ(722)では、エッジv→xにパス値0が割り当てられており、エッジv→w1にパス値1が割り当てられており、且つ、エッジv→w2にパス値2が割り当てられている。 次に、コンピュータは、制御フロー・グラフ(722)にインストラメンテーション・コードを挿入する操作を行う。 コンピュータは、エッジv→xにパス値0が割り当てられているので、インストラメンテーション・コードを挿入しない。同様に、コンピュータは、パス値0が割り当てられているその他のエッジについてもインストラメンテーション・コードを挿入しない。 また、コンピュータは、エッジv→w1にパス値1が割り当てられているので、エッジv→w1上に、パス値として1を加算する命令(r+=1)を含む基本ブロック(724)を挿入する。挿入基本ブロック(724)は、パス値として1を加算する命令(r+=1)とともに、後続基本ブロックw1へのジャンプ命令(jmp w1)を含む。 同様に、コンピュータは、エッジv→w2にパス値2が割り当てられているので、エッジv→w2上に、パス値として2を加算する命令(r+=2)を含む基本ブロック(725)を挿入する。挿入基本ブロック(725)は、パス値として2を加算する命令(r+=2)とともに、後続基本ブロックw2へのジャンプ命令(jmp w2)を含む。 従って、図7Cに示す変形された制御フロー・グラフ(723)において、インストラメンテーション・コードを挿入することによってジャンプ命令の数が2つ増えることから(jmp w1及びjmp w2)(それぞれ、724及び725)、オーバーヘッドが増加するという問題が生じる。 図7D(従来技術4)において、変形前の制御フロー・グラフ(731)は、先行基本ブロックv、当該先行基本ブロックvの3つの後続基本ブロックである後続基本ブロックx(当該後続基本ブロックxはもう1つの後続基本ブロックwの先行基本ブロックでもあり、先行基本ブロックxとも示される)、後続基本ブロックw1及びw2、並びに、先行基本ブロックz(後続基本ブロックw2の先行基本ブロックである)及び先行基本ブロックy(後続基本ブロックxの先行基本ブロックである)を有し、先行基本ブロックvはエッジv→xで後続基本ブロックxと、エッジv→w1で後続基本ブロックw1と且つエッジv→w2で後続基本ブロックw2とそれぞれ接続されており、先行基本ブロックyはエッジy→xで後続基本ブロックxと接続されており、後続基本ブロックxはエッジx→w1で後続基本ブロックw1と接続されており、後続基本ブロックw1はエッジw1→zで先行基本ブロックzと接続されており、及び先行基本ブロックzはエッジz→w2で後続基本ブロックw2と接続されている。 コンピュータは、変形前の制御フロー・グラフ(731)において、先行基本ブロックvと後続基本ブロックxとの間のエッジv→xにパス値0を割り当て、先行基本ブロックvと後続基本ブロックw1との間のエッジv→w1にパス値1を割り当て、且つ、先行基本ブロックvと後続基本ブロックw2との間のエッジv→w2にパス値2を割り当てる。また、コンピュータは、その他のエッジにパス値0を割り当てる。従って、制御フロー・グラフ(732)では、エッジv→xにパス値0が割り当てられており、エッジv→w1にパス値1が割り当てられており、且つ、エッジv→w2にパス値2が割り当てられている。 次に、コンピュータは、制御フロー・グラフ(732)にインストラメンテーション・コードを挿入する操作を行う。 コンピュータは、エッジv→xにパス値0が割り当てられているので、インストラメンテーション・コードを挿入しない。同様に、コンピュータは、パス値0が割り当てられているその他のエッジについてもインストラメンテーション・コードを挿入しない。 また、コンピュータは、エッジv→w1にパス値1が割り当てられているので、エッジv→w1上に、パス値として1を加算する命令(r+=1)を含む基本ブロック(734)を挿入する。挿入基本ブロック(734)は、パス値として1を加算する命令(r+=1)とともに、後続基本ブロックw1へのジャンプ命令(jmp w1)を含む。 同様に、コンピュータは、エッジv→w2にパス値2が割り当てられているので、エッジv→w2上に、パス値として2を加算する命令(r+=2)を含む基本ブロック(735)を挿入する。挿入基本ブロック(735)は、パス値として2を加算する命令(r+=2)とともに、後続基本ブロックw2へのジャンプ命令(jmp w2)を含む。 同様に、コンピュータは、エッジy→xにパス値3が割り当てられているので、エッジy→x上に、パス値として3を加算する命令(r+=3)を含む基本ブロック(736)を挿入する。挿入基本ブロック(736)は、パス値として3を加算する命令(r+=3)とともに、後続基本ブロックxへのジャンプ命令(jmp x)を含む。 従って、図7Dに示す変形された制御フロー・グラフ(733)において、インストラメンテーション・コードを挿入することによってジャンプ命令の数が3つ増えることから(それぞれ、jmp w1、jmp w2及びjmp x)、(724,725及び736)オーバーヘッドが増加するという問題が生じる。 以上に示す通り、従来技術に示す方法では、プロファイル情報を収集する為のインストラメンテーション・コードを挿入することによって、ジャンプ命令の数が増加し、オーバーヘッドが増加するという問題が生じている。 非特許文献1に記載の手法では、制御フロー・グラフの始点から終点にかけて通過した実行パスを表す整数値(パス値)を加減算のみで計算するように有向エッジ上にインストラメンテーション・コードを配置する。そして、非特許文献1に記載の手法では、当該インストラメンテーション・コードの配置を制御フロー・グラフの最大コスト・スパンニング木を求め、当該最大コスト・スパンニング木に含まれない有向エッジにインストラメンテーション・コードを挿入することにより最適化する。しかしながら、非特許文献1に記載の手法では、パス値を制御フロー・グラフの終点で毎回メモリに記録するためにオーバーヘッドが大きい。 非特許文献2に記載の手法では、非特許文献1に記載の手法を用いてインストラメンテーション・コードを配置する際に、他の手段で得られる実行頻度情報を用いて、実行頻度の高いエッジ上のインストラメンテーション・コードを削除する。しかしながら、非特許文献2に記載の手法それ自体が実行頻度を求める手法である為に、実行頻度情報が利用不可であるか、又は、実行頻度情報の精度が著しく低い可能性がある。また、非特許文献2に記載の手法では、パス値を、毎回メモリに記録せずに、一定時間毎にサンプリングする。従って、非特許文献2に記載の手法では、メモリの記録へのオーバーヘッドが大幅に削減された結果、インストラメンテーション・コードによるオーバーヘッドが支配的になり、特に、インストラメンテーション・コードの挿入にジャンプ命令の挿入が伴う場合のオーバーヘッドが顕著となる。 そこで、本発明は、プロファイル情報を収集する為の(例えば、非特許文献1及び2に記載の各手法におけるパス値を計算する為の)インストラメンテーション・コードを挿入する際に必要なジャンプ命令の数を最小化し、オーバーヘッドを削減することを目的とする。 非特許文献1及び2は参照によって本明細書に取り込まれる。

課題を解決するための手段[発明の詳細な説明]から抜粋

本発明は、制御フロー・グラフ上の実行パスの実行頻度情報を得るための技法を提供する。当該技法は、実行頻度情報を得るための方法、並びに、当該実行頻度情報を得るためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
【発明の効果】
本発明の実施態様に従うと、インストラメンテーション・コードを挿入する際に必要なジャンプ命令の数を削減することが可能となり、従ってオーバーヘッドが削減される。

この発明についての権利主張の範囲[特許請求の範囲]

知財ポータルサイト IP Force にログインして確認する (無料)

この特許公報に記載されている図面[図面の簡単な説明]から抜粋

【図1】本発明の実施態様において使用されうるコンピュータの一例を示した図である。

【図2A】本発明の実施態様に従い、図2Aに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックwとの間のエッジv→wにパス値ゼロを割り当て、後続基本ブロックxにパス値を加算する命令を挿入している模式図を示す。

【図2B】本発明の実施態様に従い、図2Bに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックwとの間のエッジv→wにパス値ゼロを割り当て、先行基本ブロックvと後続基本ブロックxとの間のエッジv→x上に、パス値を加算する命令を含む基本ブロックfを挿入している模式図を示す。

【図2C】本発明の実施態様に従い、図2Cに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックw1との間のエッジv→w1にパス値ゼロを割り当て、後続基本ブロックxにパス値を加算する命令を挿入する模式図を示す。

【図2D】本発明の実施態様に従い、図2Dに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックw1との間のエッジv→w1にパス値ゼロを割り当て、先行基本ブロックvと後続基本ブロックxとの間のエッジv→x上に、パス値を加算する命令を含む基本ブロックqを挿入している模式図を示す。

【図3A】本発明の実施態様に従い、制御フロー・グラフ上の実行パスの実行頻度情報を得る処理の為のフローチャートを示す。

【図3B】本発明の実施態様に従い、制御フロー・グラフを変形する処理の為のフローチャートを示す。

【図3C】本発明の実施態様に従い、制御フロー・グラフを変形する処理において、エッジに値を割り当てる処理の為のフローチャートを示す。

【図4】本発明の実施態様に従い、制御フロー・グラフを変形する処理において、新たな基本ブロックの挿入が必要なエッジに値を割り当てる処理を実行する為のアルゴリズムの一例を示す。

【図5】従来技術の手法を実行可能にするアルゴリズムをコンパイラに実装したプログラムと本発明の実施態様を実行可能にするアルゴリズムをコンパイラに実装したプログラムとのスループットとの対比結果を示す。

【図6】図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い制御フロー・グラフ上の実行パスの実行頻度情報を得るコンピュータの機能ブロック図の一例を示した図である。

【図7A】従来技術に従い、図7Aに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックwとの間のエッジv→wに1を割り当て、インストラメンテーション・コードを挿入している模式図を示す。

【図7B】従来技術に従い、図7Bに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックwとの間のエッジv→wに1を割り当て、インストラメンテーション・コードを挿入している模式図を示す。

【図7C】従来技術に従い、図7Cに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックw1との間のエッジv→w1に1を割り当て、インストラメンテーション・コードを挿入している模式図を示す。

【図7D】従来技術に従い、図7Dに示す変形前の制御フロー・グラフにおいて、先行基本ブロックvと後続基本ブロックw1との間のエッジv→w1に1を割り当て、インストラメンテーション・コードを挿入している模式図を示す。

選択図 図1出願人が指定した本件の代表的な図

全ての図面はログインすると無料で閲覧できます。ログイン・ユーザー登録

[広告欄]

ログインすれば広告は減ります

ログインすれば広告は減ります