JP2003271394A - 関数と基本ブロックの配置割付装置および割付最適化プログラム - Google Patents

関数と基本ブロックの配置割付装置および割付最適化プログラム

Info

Publication number
JP2003271394A
JP2003271394A JP2002076685A JP2002076685A JP2003271394A JP 2003271394 A JP2003271394 A JP 2003271394A JP 2002076685 A JP2002076685 A JP 2002076685A JP 2002076685 A JP2002076685 A JP 2002076685A JP 2003271394 A JP2003271394 A JP 2003271394A
Authority
JP
Japan
Prior art keywords
function
call information
calls
call
information
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
Application number
JP2002076685A
Other languages
English (en)
Inventor
Rika Ono
梨香 小野
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.)
NEC Electronics Corp
Original Assignee
NEC Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Electronics Corp filed Critical NEC Electronics Corp
Priority to JP2002076685A priority Critical patent/JP2003271394A/ja
Publication of JP2003271394A publication Critical patent/JP2003271394A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【課題】高い頻度で呼び出される関数と高い頻度で実行
される基本ブロックを抽出してキャッシュコンフリクト
が低減するように最適割付する装置を提供する。 【解決手段】直接関数呼出情報記録手段20、間接関数
呼出情報記録手段22およびパスプロファイル情報記録
手段25を備える。直接関数呼出情報記録手段20は、
直接関数呼出で呼び出される関数名と呼出回数を記録す
る。間接関数呼出情報記録手段22は、最多呼出情報2
3に間接関数呼出で最も多くの回数呼び出された関数の
アドレスと最多の連続呼出回数と累計呼出回数を記録
し、カレント情報24に最近の間接関数呼出で呼び出さ
れた関数のアドレスと連続呼出回数を記録する。パスプ
ロファイル情報記録手段25は基本ブロックレベルのパ
スの実行回数に関する情報を記録する。配置割付装置は
これらの情報に基づいてキャッシュコンフリクトが低減
するように関数と基本ブロックを最適配置する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、関数と基本ブロッ
クの命令キャッシュでのコンフリクト発生が低減するよ
うにプログラムのメモリ空間への割付を行う配置割付装
置および割付プログラムに関する。
【0002】
【従来の技術】近年、CPUの高速化が急速に進み、D
RAMなどの外部メモリのアクセス時間とCPUの処理
速度のギャップは増大の一途を辿っている。このような
状況下にあるため、CPUから高速にアクセスできるバ
ッファであるキャッシュを設け、外部メモリ上のプログ
ラムの一部をキャッシュ内にコピーして実行する技術が
高速のコンピュータを中心に広く使用されている。しか
しながら、高速なキャッシュ用のメモリはコストがかか
るため、そのサイズは外部メモリと比較してずっと小さ
くせざるを得ない。したがって、実行するプログラムの
どの部分をキャッシュに格納するかがプログラムを高速
に実行する上できわめて重要となる。
【0003】外部メモリはキャッシュのサイズで区切っ
た領域に分割され、また、キャッシュはキャッシュライ
ンと呼ばれる特定のサイズに分割される。外部メモリか
らキャッシュへのコピーはキャッシュライン単位で行わ
れる。同一のキャッシュラインに割り当てられた関数お
よび関数を構成する基本的ブロックは、プログラムの実
行中に関数、基本ブロックが切り替わるたびにキャッシ
ュにコピーし直す必要が生じる。このようなキャッシュ
コンフリクトが頻繁に起きるとプログラムの実行速度が
低下するため、ソースプログラムをコンパイルする際に
キャッシュコンフリクトが生じないように外部メモリ上
に関数、基本ブロックを割り付ける方法が研究されてい
る。なお、キャッシュには、もっとも単純なダイレクト
マップ方式、セットアソシアティブ方式、フルアソシア
ティブ方式等があるが、基本的な問題は共通しているた
め、ダイレクトマップ方式を例として説明する。
【0004】命令キャッシュへの割付最適化技術として
特開2001−216140号公報に記載の技術があ
る。図15は、この第1の従来技術による配置割付装置
の図である。配置割付装置41は、関数呼出情報生成部
51とメモリ空間配置最適化部52とを備えている。配
置割付装置41は、ソースプログラム42をもとに関数
呼出情報生成部51で関数呼出組合せ情報43を生成
し、また関数呼出組合せ情報43をもとにメモリ空間配
置最適化部52で配置最適化情報44を生成し出力す
る。配置最適化情報44には、キャッシュコンフリクト
による実行性能の低下が極力低減されるように最適配置
された外部メモリにおける関数の配置情報が出力され
る。
【0005】図16は、関数呼出組合せ情報43の一例
を示す図である。図17はメモリ空間配置最適化部52
の処理を示すフロー図である。ステップS51で関数呼
出組合せ情報43をもとに呼出回数をその辺に対する重
みとして図18に示す関数呼出グラフを作成し、ステッ
プS52で、ステップ呼出回数の多いものと少ないもの
に分割する。ステップS53で、呼出回数の多い順に並
べ替え、その順番でステップS54以降の処理を行う。
ステップS54以降では、キャッシュサイズに含まれる
キャッシュラインに「色」が割り当てられ、ステップS
53で決められた順番で関数をメモリ空間に配置される
とともに、配置する関数が利用できない「色」の集合を
認識し、これを避けて配置する。関数が占める色の数す
なわちキャッシュライン数は関数funcが2個で、そ
の他の関数はそれぞれ1個とする。
【0006】まず、ステップS54で、図18の関数呼
出グラフにおいて最も重みが大きい辺の両端のノードで
ある関数funcと関数funcAとを取り出し、ステ
ップS56で、メモリ空間に配置する。この例では
「赤」と「緑」にfuncが配置されたので隣接する
「青」にfuncAが配置される。図19(a)にこの
段階での関数のメモリ空間への配置を示す。ステップS
54に戻り、2番目に重みが大きい辺を選択する。2番
目に重みが大きい辺の両端のノードが関数funcと関
数funcCであり、ステップS62で一方のfunc
は配置済であると判断されてステップS63に進み、f
uncCを使用不可能な「色」を避けてfuncに近い
キャッシュラインに配置する。図19(b)にこの段階
での関数のメモリ空間への配置を示す。3番目以降に重
みが大きい辺についても同様に処理して図19(c)に
示すように関数funcBおよび関数mainが配置さ
れる。この第1の従来技術の配置割付装置では、関数を
単位として配置の割付を行うため、すなわち、関数fu
ncが高い頻度で実行されるプログラム部分と低い頻度
で実行されるプログラム部分とで構成されているとして
も、キャッシュメモリには低い頻度で実行されるプログ
ラム部分を含めた関数func全体がひとつとして割り
付けられるため、キャッシュメモリを有効に利用してい
るとはいえず改良の余地がある。また、関数呼出組合せ
情報43を取得するためのプロファイリングでは、通
常、すべての関数の組合せが記録できるメモリ領域を確
保する必要があるため、関数の数が多い場合にはプロフ
ァイル作成用に大きなメモリ領域が占有されてしまう。
【0007】特開平11−212837号公報には、ソ
ースプログラムを静的解析することにより関数呼出を検
出して呼出元と呼出先のペアごとに識別番号を設定し、
プロファイリング時に識別番号毎に回数を格納すること
により占有するメモリ領域を削減する技術が記載されて
いる。しかしながら、この技術は直接間接呼出(イミデ
ィエート値によるPC相対アドレスでの分岐)の場合を
対象としており、間接関数呼出(レジスタ間接による分
岐)の場合においてプロファイル作成用メモリを削減す
る方法については開示されていない。
【0008】上記特開2001−216140号公報に
は、上記の第1の従来技術の改良技術として、関数実行
の時系列情報を収集しこれを解析して間接的に発生する
キャッシュコンフリクトをも考慮して割り付ける技術に
ついても開示されているが、関数を単位としてメモリ空
間への配置割付を行う点においては同じであるため、キ
ャッシュメモリを有効に利用してはいない。また、時系
列情報を記録するために必要なメモリ容量が予め予測で
きないので、十分大きいメモリ領域をプロファイル作成
用に確保しておかなければならない。
【0009】関数を複数の基本ブロックに分割し、基本
ブロックで構成されるパスの実行回数のプロファイリン
グを効率的に行う第2の従来技術(゛Efficient Path P
rofiling″,Thomas Ball and James Larus, Priceeding
s of the 29th Annual IEEE/ACM International Sympos
ium on Microarchitecture (Micro-29),pp.46-57,Nov.
1996.)が知られている。図20は、第2の従来技術を説
明する図で、(a)は基本ブロック間の制御フローグラ
フであり、(b)はパス(path)とパスサム(path sum)の
対応を示す図である。
【0010】第2の従来技術では、ループを含まない制
御フローグラフの例である図20(a)において、制御
フローグラフの辺に整数のラベルを付加する。このと
き、手続きの入り口である基本ブロックAから出口であ
る基本ブロックFに至るパスの各々のパスに対して、パ
スサム、すなわち、辿ったパスに付加されたラベルの合
計がパス毎にユニークな値となり、制御フローグラフに
おける可能なパスの数がn個である場合にはパスサムが
0から(n−1)までのいずれかの値になるように各々
の辺のラベルを決める。図20(a)のようにラベル付
けされたとすれば、ABDEFのパスを通る場合にはパ
スサムは(4+1=5)となり、ACDEFのパスを通
る場合にはパスサムは(0+1=1)となるので、パス
サムが分かれば基本ブロックAから基本ブロックBまで
のどのパスを実行したかを決定できる。制御フローグラ
フがループを含む場合には、予めループの含まない制御
グラフに変換しておく。
【0011】パスプロファイリングを実行する際には、
パスサムに対応したレジスタを用意する。また、図20
(a)で黒い四角が付されている辺でのラベル設定、パ
スサム計算、パスサムに対応するレジスタのインクリメ
ント等の処理に対応するコードをプログラムに付加す
る。そののち基本ブロックA〜Fからなるプログラムを
実行する。プログラムの実行後にパスサムに対応するレ
ジスタの格納値を読み出すことにより、パスとそのパス
の実行回数が得られる。
【0012】この第2の従来技術では、基本ブロック単
位の実行遷移情報を取得できるものの、関数内の遷移に
限られる。すなわち反復して実行されるループについて
は認識できるが、ループから呼び出される関数があって
も得られたプロファイル情報からは判別できない。した
がって、この第2の従来技術を用いて取得したプロファ
イル情報に基づいてキャッシュへの配置割付を行う場合
に、ループから頻繁に呼び出される関数があったとして
も考慮し得ないので、最適な割付を実現することができ
ない。
【0013】
【発明が解決しようとする課題】以上に説明したよう
に、第1の従来技術の配置割付装置およびその改良技術
では、配置割付が関数単位であるために低い頻度で実行
されるプログラム部分(低い頻度で実行される基本ブロ
ック)をも含めてひとつの関数として割り付けられるた
め、キャッシュメモリを有効に利用しているとはいえな
かった。また、間接関数呼出も含めて関数のプロファイ
ル情報を取得する場合にはプロファイル作成用に大きな
メモリ領域を必要とするという問題点があった。第2の
従来技術のプロファイリングでは、ループ内から呼び出
される関数については考慮し得ないので、実行頻度の高
い関数同士が同じキャッシュライン上に配置されキャッ
シュコンフリクトが発生する可能性がある。
【0014】本発明はこのような事情に鑑みてなされた
もので、本発明の目的は、(1)小さな容量のプロファ
イル作成用メモリで間接関数呼出を含めて実用的に十分
なプロファイル情報を取得でき、(2)基本ブロックと
基本ブロックから呼び出される直接呼出関数および間接
呼出関数の中から高い頻度で呼び出される関数と高い頻
度で実行される基本ブロックだけを抽出して最適割付の
対象とすることによって、キャッシュコンフリクトを削
減できるとともに限られた容量のキャッシュメモリをよ
り有効に使用できる配置割付装置およびプログラムを提
供することである。
【0015】
【課題を解決するための手段】本発明の関数と基本ブロ
ックの配置割付装置は、ソースプログラムを入力してコ
ンパイルし各々に含まれる関数呼出が1個以下の複数の
基本ブロックに関数を分割し、該関数の基本ブロックレ
ベルでのパスの実行を計数するためのコードと、基本ブ
ロックから関数呼出がある場合に直接呼出か間接呼出か
を判別して計数するためのコードとを付加しコード挿入
済みコンパイルプログラムとして出力するプロファイリ
ングコード挿入部と、基本ブロックレベルでのパス毎の
実行回数を記録するパスプロファイル情報記録手段と直
接関数呼出の実行回数を記録する直接関数呼出情報記録
手段と間接関数呼出の実行回数を記録する間接関数呼出
情報記録手段とを備え、前記コード挿入済みコンパイル
プログラムを入力して実行し前記パス毎の実行回数、前
記直接関数呼出の実行回数、前記間接関数呼出の実行回
数を計数して記録するコンパイルプログラム実行部と、
を有して構成される。
【0016】また、本発明の割付最適化プログラムは、
命令キャッシュの割付を最適化するコンピュータプログ
ラムにおいてソースプログラムを入力してコンパイルし
関数を各々に含まれる関数呼出が1個以下の複数の基本
ブロックに分割し、関数の基本ブロックレベルでのパス
の実行を計数するためのパスプロファイリングコード
と、基本ブロックから関数呼出がある場合に直接呼出か
間接呼出かを判別して計数するための関数呼出プロファ
イリングコードとを挿入しコード挿入済みコンパイルプ
ログラムを生成する第1の手順と、前記コード挿入済み
コンパイルプログラムを入力し実行して実行終了後に基
本ブロックレベルでのパス毎の実行回数が計数され記録
されたパスプロファイル情報と、直接関数呼出を含む基
本ブロックの直接関数呼出の実行回数が計数され記録さ
れた直接関数呼出情報と、間接関数呼出を含む基本ブロ
ックの間接関数呼出の実行回数が計数され記録された間
接関数呼出情報とを含むプロファイル情報を生成する第
2の手順と、前記プロファイル情報に基づいて実行回数
の多い基本ブロックおよび関数を抽出しこれらが同一の
キャッシュラインに割り当てられることが少なくなるよ
うにメモリ空間に配置割付する第3の手順と、をコンピ
ュータに実行させることを特徴とする。
【0017】
【発明の実施の形態】次に本発明について図面を用いて
説明する。図1は、本発明の一実施の形態の配置割付装
置を含むシステムのブロック図である。配置割付装置1
は、プロファイリングコード挿入部11と、コンパイル
プログラム実行部12と、プロファイル情報統合部13
とメモリ空間配置最適化部14とを有する。なお、以下
の説明では、ソースプログラムからマシン語またはアセ
ンブリ言語にコンパイルされたプログラムを各々に含ま
れる関数呼出が1個以下の複数のブロックに分割したと
きに、このようなブロックのそれぞれを基本ブロックと
呼び、これら複数の基本ブロックの全体をコンパイルプ
ログラムと呼ぶことにする。
【0018】プロファイリングコード挿入部11は、ソ
ースプログラム2をコンパイルし、プログラムをラベル
または分岐または関数呼出の出現毎に、各々に含まれる
関数呼出が1個以下の複数の基本ブロックに分割し、制
御フローグラフを作成し、パス毎にユニークなパスサム
を割り当て、基本ブロックのパスプロファイリングコー
ドを挿入するとともに、基本ブロックからの関数呼出を
含む場合に、イミディエート値によるPC相対アドレス
での分岐である直接関数呼出か、または、レジスタ間接
による分岐である間接関数呼出か、を区別して関数呼出
回数を計測するための関数呼出頻度プロファイリングコ
ードを挿入しコード挿入済コンパイルプログラムを生成
する。また、基本ブロック情報、ループ逆向き情報、パ
ス情報等をパスデータファイルに格納する。
【0019】コンパイルプログラム実行部12は、図2
に示すように、関数の基本ブロックレベルのパスプロフ
ァイル情報を記録するパスプロファイル情報記録手段2
5と、直接関数呼出情報を記録する直接関数呼出情報記
録手段20と、間接関数呼出情報を記録する間接関数呼
出情報記録手段22とを有し、コード挿入済コンパイル
プログラム4を実行して基本ブロックレベルのパスプロ
ファイル情報を記録し、また、基本ブロックが関数呼出
を含む場合に直接関数呼出か間接関数呼出かを区別して
呼出回数を記録する。また、コンパイルプログラム実行
部12は、コンパイルプログラムの実行完了後に基本ブ
ロックレベルのパスプロファイル情報と、直接関数呼出
情報および間接関数呼出情報とをプロファイル格納ファ
イル5に格納する。
【0020】プロファイル情報統合部13は、プロファ
イル格納ファイル5に格納されたパスデータファイルを
参照して基本ブロックレベルのパスプロファイル情報を
パスサムと回数の関係から基本ブロック名(基本ブロッ
クのID)で表現されたパスと回数との関係へ変換し、
直接関数呼出情報および間接関数呼出情報とともにプロ
ファイル情報ファイル6に出力する。
【0021】メモリ空間配置最適化部14は、プロファ
イル情報ファイル6に格納された基本ブロックレベルの
パスプロファイル情報と直接関数呼出情報および間接関
数呼出情報とに基づいて、例えば第1の従来技術におけ
る関数の配置割付(図17)と同様の方法を用いて、基
本ブロックと関数とをメモリ空間に割り付けることによ
りキャッシュコンフリクトの発生を低減した配置最適化
情報7を生成し出力する。
【0022】図2は、コンパイルプログラム実行部12
が内部に備える直接関数呼出情報記録手段20、間接関
数呼出情報記録手段22およびパスプロファイル情報記
録手段25の構成を示す図である。直接関数呼出情報記
録手段20は、直接関数呼出情報21について、直接関
数呼出で基本ブロックから呼び出される関数名を記録領
域31に記録し呼出回数を記録領域32に記録する。図
2の例では、記録領域31に記録された関数(func
A)が100回呼び出されたことを示す。間接関数呼出
情報記録手段22は、累計呼出回数の多い間接関数呼出
の情報である最多呼出情報23と最近に呼び出した間接
関数の情報であるカレント情報24とを含む間接関数呼
出情報を記録する。最多呼出情報23については、間接
関数呼出で基本ブロックから最も多くの回数呼び出され
た関数のアドレスが記録領域33に記録され、この関数
アドレスに対する最多の連続呼出回数が記録領域34に
記録され、この関数アドレスの累計呼出回数が記録領域
35に格納される。カレント情報24については、最近
の間接関数呼出で基本ブロックから呼び出された関数の
アドレスが記録領域36に記録され、この関数に対する
連続呼出回数が記録領域37に記録される。図2の例で
は、最多呼出情報23は、記録領域33に記録された関
数アドレス(funcB)が最多の連続呼出回数として
24回呼び出されたことがあり、この時点までの累計で
96回呼び出されたことを示す。また、カレント情報2
4は、記録領域36に記録された関数アドレス(fun
cC)が最近に呼び出された関数アドレスであり、現在
までの連続呼出回数が1回であることを示している。
【0023】図2は、直接関数呼出する基本ブロックが
1個で間接関数呼出する基本ブロックが1個の単純な場
合であるが、直接関数呼び出しする基本ブロックがm個
ある場合には、直接関数呼出情報記録手段20内には直
接関数呼び出しする基本ブロックのそれぞれに対応して
計m個の直接関数呼出情報21が設けられる。同様に、
間接関数呼出する基本ブロックがn個である場合には、
間接関数呼出情報記録手段22内には間接関数呼び出し
する基本ブロックのそれぞれに対応して最多呼出情報と
カレント情報との組からなる間接関数呼出情報が計n組
設けられる。また、図2の例では最多呼出情報23は1
つであるが、最多呼出情報として累計呼出回数が多い方
からk個の関数アドレスを最多呼出情報として設定して
もよい。この場合には、k個の最多呼出情報と1個のカ
レント情報とで1組の間接関数呼出情報となる。このよ
うに最多呼出情報を複数持つ場合であっても、従来の技
術のような関数の呼出元と呼出先との組み合わせを記録
するメモリ領域を用意するもの、および、関数実行の時
系列情報の始終を記録するもの、と比較して記録する情
報量を削減できるので、直接関数呼出情報記録手段20
および間接関数呼出情報記録手段22に使用されるメモ
リ容量を従来に比較して小容量で済ますことが可能とな
る。
【0024】パスプロファイル情報記録手段25は、実
行された基本ブロックのパスをパス毎に計数し記録す
る。記録領域38に記録されたパスサムのそれぞれの値
に対応するパスが実行された回数が計数され、記録領域
39に記録される。図2では、現時点までのコンパイル
プログラムの実行においてパスサム=0に対応する基本
ブロックのパスをたどった回数が1であり、パスサム=
2に対応する基本ブロックのパスをたどった回数が98
であり、パスサム=3に対応する基本ブロックのパスを
たどった回数が1であることを示している。
【0025】次に、本実施の形態の動作について説明す
る。なお、以下の動作説明では、説明の簡単化のために
直接関数呼出する基本ブロックが1個であり、また、間
接関数呼出する基本ブロックが1個でかつ間接関数呼出
情報記録手段22が記録する最多呼出情報23も1つで
ある場合を例として説明する。
【0026】図3は、プロファイリングコード挿入部1
1の動作を示すフロー図である。プロファイリングコー
ド挿入部11は、ソースプログラム2をコンパイルして
関数を基本ブロックに分割した後、ステップS11で関
数の制御フローグラフを構築する。
【0027】図4は、C言語で記述されたソースプログ
ラムの例である。Iが1から100までの間+1加わる
毎に関数funcAを呼び出しfpのアドレスで示され
る関数を実行する。funcAの呼出回数を25で割っ
て剰余がでる場合にはfp=funcBとしてアドレス
funcBの関数を実行し、funcAの呼出回数を2
5で割って剰余がでない場合にはfp=funcCとし
てアドレスfuncCの関数を実行する。図5は、図4
のソースプログラムをコンパイルしてB0、B1,B
2,B3,B4の5つの基本ブロックに分割した場合の
制御フローグラフである。それぞれの基本ブロックはア
センブル言語またはマシン語で記述されるが、ここでは
具体的な記述による煩雑さを避けるためにそれぞれの基
本ブロックでの大まかな処理を記すのみとする。図5の
基本ブロックB0では、関数funcの開始に伴うスタ
ックフレームの生成やレジスタの退避等の処理と変数i
の初期化を行う。基本ブロックB1では、funcAの
呼び出し処理(直接関数呼出)を行う。基本ブロックB
2では、ポインタfpによる間接関数呼出処理を行う。
基本ブロックB3では100回のループが終了したかの
判定処理を行う。i=100に満たない場合には基本ブ
ロックB1に戻り、i=100の場合には基本ブロック
B4へ進む。基本ブロックB4では、レジスタの復帰、
スタックフレームの消滅などの関数エピローグ処理を行
い呼び側関数へ復帰する。
【0028】本実施の形態では、基本ブロックの制御フ
ローグラフに対して、前述した第2の従来技術と同様の
方法でパスプロファイルを収集してパスプロファイル情
報記録手段25に記録する。
【0029】図3に戻り、ステップS12では、制御フ
ローグラフにループ情報があるか否かの解析を行う。図
5の制御フローグラフではB1からB2,B3を通って
B1に戻るループが存在することを検出する。ステップ
S13に進み、B0〜B4の基本ブロック情報、ループ
逆向き辺の情報をパスデータファイル3に出力する。図
10は、パスデータファイル3の一例を示す図である。
6行目から10行目にかけて基本ブロック情報が格納さ
れている。例えば、6行目の(0:14:1)は、基本
ブロックB0(ブロックIDが「0」)に属するプログ
ラムはコンパイルプログラムの14行目から記述されて
いて後続のブロックIDが「1」(基本ブロックB1)
であることを示している。また、ループ逆向き辺の情報
については、12行目の(3,1)により、IDが3の
ブロック(基本ブロックB3)からIDが1のブロック
(基本ブロックB1)へ向かう逆向き辺が存在すること
を示している。
【0030】次にステップS14に進み、ループ逆向き
辺の変形を行う。具体的には、図6(a)に示すよう
に、ENTRYとEXITを設け、ENTRYから基本
ブロックB0に進む辺と、ENTRYから基本ブロック
B1に進む辺と、基本ブロックB3からEXITに進む
辺と、基本ブロックB4からEXITに進む辺と、EX
ITからENTRYへ戻る辺とを付加し、基本ブロック
B3から基本ブロックB1へ戻る辺を削除する。この変
形により、基本ブロックB3から基本ブロックB1へ戻
る逆向き辺は、B3,EXIT、ENTRY,B1の経
路に置き換わり、基本ブロックB1から基本ブロックB
4までの間から逆向き辺をなくすことができるわけであ
る。ENTRYおよびEXITのIDは基本ブロックの
IDとして割り当てられていないIDを割り当てる。こ
こではENTRYのIDを「−2」、EXITのIDを
「−1」としている。
【0031】次にステップS15に進み、ENTRYか
らEXITへのそれぞれのパスにユニークな値のパスサ
ムが対応し、かつ,パスサムの範囲が0から(パスの数
−1)となるように、各々の辺のラベルを決定する。す
なわち、制御フローグラフの出口から入口に向かって走
査して基本ブロックにラベルを付けた後、再び制御フロ
ーグラフの出口から入口に向かって走査して基本ブロッ
クのラベルに基づいて各辺のラベルを決定する。図6
(a)の変形された制御フローグラフにおいては、基本
ブロックB3からB4への辺にラベル“1”を付け、E
NTRYからB1への辺にラベル“2”を付け、図6
(b)に示すように、ENTRYからEXITまでの可
能な4通りのパスに対してパスサム0,1,2,3を割
り当てる。
【0032】図7は、ラベル設定、パスサム計算、パス
サムに対応するレジスタのインクリメント等のパスプロ
ファイリングのための処理を付加する辺に黒い四角を付
して表示した制御フローグラフである。ステップS16
では、パスプロファイル情報記録部25にパスサムと実
行回数とを対応させて記録するために、これらの付加処
理に対応するコードを辺に沿って付加する。
【0033】次に、ステップS17では、直接関数呼出
の計数および間接関数呼出の計数のための関数呼出頻度
プロファイリングコードを挿入する。
【0034】図8は、ステップS17の関数呼出頻度プ
ロファイリングコード挿入処理の詳細なフロー図であ
る。ステップS17の関数呼出頻度プロファイリングコ
ード挿入処理では、まずステップS21で、関数呼出頻
度プロファイリングコード挿入処理未了の基本ブロック
を選択する。次に選択した基本ブロックが関数呼出を含
むか否かを判断する。関数呼出を含まない場合にはその
ままコード挿入済コンパイルプログラム4に出力してス
テップS29へ進む。関数呼出を含む場合にはステップ
S23へ進み直接関数呼出か否かを判断する。直接関数
呼出を含む場合にはステップS24で直接関数呼出情報
記録手段20内に直接関数呼出情報21を記録する領域
を設けて割り当て、ステップS25で呼び出される関数
名を設定し、ステップS26でこの基本ブロックのプロ
グラムを実行する毎に対応する直接関数呼出情報21の
呼出回数を+1加算する処理を行うようにプロファイリ
ングコードを挿入してステップS29へ進む。図6の制
御フローグラフの例では、基本ブロックB1に呼び出さ
れる関数名をfuncAとして直接関数呼出のプロファ
イリングコードが挿入される。ステップS23で直接関
数呼出でないと判断された場合には、ステップS27へ
進み、間接関数呼出情報記録手段22内に最多呼出情報
とカレント情報との組からなる間接関数呼出情報を記録
する領域を設けて割り当て、ステップS28で後述する
図9の処理を行うためのプロファイリングコードを挿入
しコード挿入済コンパイルプログラム4に格納してステ
ップS29へ進む。図6の制御フローグラフの例では、
基本ブロックB2に間接関数呼出のプロファイリングコ
ードが挿入される。ステップS29ですべての基本ブロ
ックの処理が終了したか否かを判断し、処理未了の基本
ブロックがあればステップS21へ戻る。ステップS2
9ですべての基本ブロックについて処理が終了したと判
断された場合には図3のステップS17を終了しステッ
プS18へ進む。
【0035】ステップS18では、パスの情報をパスデ
ータファイル3に格納する。パスデータファイルの例で
ある図10を参照すると、パスの情報として、14行目
にパスサムの範囲が0から3までの整数値であることが
追加され、16行目、17行目にラベル付けされた辺の
情報が追加されている。16行目の(−2,1:2:
3)は、前半の(−2,1:2)でブロックIDが「−
2」のENTRYからブロックIDが「1」の基本ブロ
ックB1へ向かう辺にラベル2が付与されたことを示
し、最後の(:3)はこの辺が対応する元のループ逆向
き辺がブロックIDが「3」の基本ブロックB3からの
辺であることを示す。同様に、17行目は、ブロックI
Dが「3」の基本ブロックB3からブロックIDが
「4」の基本ブロックB4へ向かう辺にラベル1が付与
されたことを示す。
【0036】次に、図8のステップS28で挿入される
プロファイリングコードにより実行される処理について
説明する。図9は、間接関数呼出におけるプロファイリ
ング処理のフローを示す図である。すなわち、図8のス
テップS28において図9の処理を行うためのプロファ
イリングコードが挿入され、コンパイルプログラム実行
部12によるコード挿入済みコンパイルプログラムの実
行の際に、間接関数呼出を含む基本ブロックが実行され
る毎に図9のフローに従ってプロファイリングが行われ
る。図2に関連して説明したように、関数呼出を含む基
本ブロックに対応して最多呼出情報23とカレント呼出
情報24とが設けられていて、プロファイリング実行時
にはカレント呼出情報24の記録領域36に呼び出され
る関数のアドレスを記録し、記録領域37に連続呼出回
数を呼出毎に計数して記録する。
【0037】間接関数呼出があったときに、まずステッ
プS31で呼び出される関数のアドレス(間接呼出関数
であるので、プログラム中に指定されたレジスタRに格
納された値が呼び出される関数の開始アドレスを示す)
と、カレント呼出情報24の記録領域36に記録された
関数アドレスとを比較する。ステップS32で両者が同
一アドレスか否かを判断し、同一アドレスであると判断
された場合にはステップS33に進み、カレント呼出情
報24の記録領域37に記録された連続呼出回数に+1
を加算して更新し、この間接関数呼出に関するプロファ
イリング処理を終了する。
【0038】ステップS32で同一アドレスではないと
判断された場合にはカレント呼出情報24を新規に設定
し直す必要が生じる。この場合にはまずステップS34
に進み、記録領域33に記録された最多呼出情報23の
関数アドレスと記録領域36に記録されたカレント呼出
情報24の関数アドレスとを比較する。ステップS35
で両者が同一アドレスか否かを判断し、同一アドレスで
あると判断された場合には最多呼出情報23の記録領域
35に記録された累計呼出回数にカレント呼出情報24
の記録領域37に記録された連続呼出回数を加算し累計
呼出回数として記録領域35に書き戻したのちにカレン
ト呼出情報の更新ステップであるステップS40に進
む。
【0039】ステップS35で同一アドレスではないと
判断された場合にはステップS37に進み、カレント呼
出情報24の記録領域37に記録されている連続呼出回
数と最多呼出情報23の記録領域35に記録されている
累計呼出回数とを比較する。ステップS38でカレント
呼出情報24の連続呼出回数の方が大きいと判断された
場合にはカレント呼出情報24の記録領域36にあった
関数アドレスを最多呼出情報23の記録領域33に書き
込み、カレント呼出情報24の記録領域37にあった連
続呼出回数を最多呼出情報23の記録領域34及び記録
領域35に書き込んだのちにカレント呼出情報の更新ス
テップであるステップS40に進む。ステップS38で
カレント呼出情報24の連続呼出回数の方が大きくはな
いと判断された場合にはそのままカレント呼出情報の更
新ステップであるステップS40に進む。
【0040】ステップS40では、カレント呼出情報2
4の記録領域36に新たに呼び出された関数のアドレス
を書き込み、連続呼出回数を1に更新し、この間接関数
呼出に関するプロファイリング処理を終了する。
【0041】次に、図1に戻り、コンパイルプログラム
実行部12の動作について説明する。コンパイルプログ
ラム実行部12は、コード挿入済コンパイルプログラム
4からプロファイリングコードが付加された基本ブロッ
クを読み込んで各基本ブロックをリンクして実行する。
基本ブロックのパスプロファイルについては図7のEN
TRYからEXITまでの基本ブロックのパスを実行す
る毎に、基本ブロッB0からB1への辺またはENTR
YからB1への辺ではパスサムの値に対応するレジスタ
を設定し、B3からB4への辺またはB3からEXIT
への辺ではパスサムの値に対応するレジスタを更新し、
パスプロファイル情報記録手段25のパスサムの値に対
応する記録領域39が格納する値に+1を加える。ま
た、関数呼出を含む基本ブロックについては次のように
してプロファイリングする。基本ブロックが直接関数呼
出を含む場合は、呼び出される関数名はプロファイリン
グコードの挿入処理(図8のステップS25)で設定さ
れて図2の直接関数呼出情報記録手段20の直接関数呼
出情報21内の記録領域31に記録されており、プロフ
ァイリングの実行時に呼出回数をカウントする。基本ブ
ロックが関数呼出を含む場合は、関数アドレスは呼び出
される関数の実行時に判明し、図9の処理フローに従っ
てプロファイリングする。
【0042】図11(a)は図7の基本ブロックB1に
対応して設定された直接関数呼出情報21の初期状態を
示し、図11(b)はループ100回実行後の直接関数
呼出情報21を示している。関数funcAは図8のス
テップS25で設定されており、コード挿入済みコンパ
イルプログラムの基本ブロックB1を実行する毎に記録
領域32に記録される呼出回数に+1を加算する。図4
のソースプログラムではI=100まで繰り返すので基
本ブロックB1は100回実行されることになり、コー
ド挿入済みコンパイルプログラムの実行が終了したのち
には直接関数呼出情報21の記録領域32に記録される
funcAの呼出回数は図11(b)に示すように10
0となる。
【0043】図12(a)〜(f)は、基本ブロックB
2に対応して設定された間接関数呼出の最多呼出情報お
よびカレント呼出情報の初期状態からループ100回実
行後の状態までの推移を示す。図12(a)の初期状態
では最多呼出情報の関数アドレス、連続呼出回数、累計
呼出回数をそれぞれ記録する記録領域33,34,35
と、カレント呼出情報の関数アドレス、連続呼出回数を
それぞれ記録する記録領域36,37とはクリアされた
状態になっている。図7のENTRYからEXITへ行
きENTRYに戻るループ(1回目はENTRY,B
0,B1,B2,B3,EXIT,ENTRYのパスを
通る)を1回実行した段階では、図12(b)のように
カレント呼出情報のみが記録され、記録領域36に関数
アドレスとしてfuncBが記録され記録領域37に連
続呼出回数1が記録される。2回目のループから24回
目のループ終了まではループの回数を重ねる(2回目か
らはENTRY,B1,B2,B3,EXIT,ENT
RYのパスを通る)毎に図9のステップS32からステ
ップS33のフローを通ってカレント呼出情報の連続呼
出回数が+1される。
【0044】25回目のループでfuncAの実行回数
を25で割った剰余が0となるので基本ブロックB2か
ら関数アドレスfuncCを呼び出す。したがって図9
のステップS32からステップS34,S35,S3
7,S38,S39,S40のフローを通るため、ルー
プ25回終了後は図12(c)のように最多呼出情報の
関数アドレス、連続呼出回数、累計呼出回数に、fun
cB、24、24がそれぞれ記録され、カレント呼出情
報の関数アドレス、連続呼出回数にfuncC、1がそ
れぞれ記録される。26回目のループではfuncAの
実行回数を25で割った剰余が1となるので基本ブロッ
クB2から関数アドレスfuncBを呼び出す。図9の
ステップS32からステップS34,S35,S37,
S38,S40のフローを通るため、ループ26回終了
後は図12(d)のように最多呼出情報はループ25回
終了時と変わらず、カレント呼出情報のみが関数アドレ
ス、連続呼出回数にfuncB、1がそれぞれ記録され
る。27回目のループから49回目のループまでは基本
ブロックB2を実行する毎に図9のステップS32,S
33を通ってカレント呼出情報の連続呼出回数が+1さ
れる。
【0045】50回目のループではfuncAの実行回
数を25で割った剰余が0となるので基本ブロックB2
から関数アドレスfuncCを呼び出し、図9のステッ
プS32からステップS34,S35,S36,S40
のフローを通るため、図12(e)のように最多呼出情
報の関数アドレス、連続呼出回数、累計呼出回数に、f
uncB、24、48がそれぞれ記録され、カレント呼
出情報の関数アドレス、連続呼出回数にfuncC、1
がそれぞれ記録される。51回目のループではfunc
Aの実行回数を25で割った剰余が1となるので基本ブ
ロックB2から関数アドレスfuncBを呼び出し、図
9のステップS32からステップS34,S35,S3
7,S38,S40のフローを通るため、ループ51回
終了後は最多呼出情報はループ50回終了時と変わら
ず、カレント呼出情報のみが関数アドレス、連続呼出回
数にfuncB、1がそれぞれ記録される。52回目の
ループから74回目のループまでは基本ブロックB2を
実行する毎に図9のステップS32,S33を通ってカ
レント呼出情報の連続呼出回数が+1される。
【0046】75回目のループではfuncAの実行回
数を25で割った剰余が0となるので基本ブロックB2
から関数アドレスfuncCを呼び出し、図9のステッ
プS32からステップS34,S35,S36,S40
のフローを通るため、最多呼出情報の関数アドレス、連
続呼出回数、累計呼出回数に、funcB、24、72
がそれぞれ記録され、カレント呼出情報の関数アドレ
ス、連続呼出回数にfuncC、1がそれぞれ記録され
る。76回目のループではfuncAの実行回数を25
で割った剰余が1となるので基本ブロックB2から関数
アドレスfuncBを呼び出し、図9のステップS32
からステップS34,S35,S37,S38,S40
のフローを通るため、ループ76回終了後は最多呼出情
報はループ50回終了時と変わらず、カレント呼出情報
のみが関数アドレス、連続呼出回数にfuncB、1が
それぞれ記録される。77回目のループから99回目の
ループまでは基本ブロックB2を実行する毎に図9のス
テップS32,S33を通ってカレント呼出情報の連続
呼出回数が+1される。
【0047】100回目のループではfuncAの実行
回数を25で割った剰余が0となるので基本ブロックB
2から関数アドレスfuncCを呼び出し、図9のステ
ップS32からステップS34,S35,S36,S4
0のフローを通るため、図12(f)に示すように、最
多呼出情報の関数アドレス、連続呼出回数、累計呼出回
数に、funcB、24、96がそれぞれ記録され、カ
レント呼出情報の関数アドレス、連続呼出回数にfun
cC、1がそれぞれ記録される。なお100回目にはE
NTRY,B1,B2,B3,B4,EXITのパスを
通りコンパイルプログラムの実行をすべて終了する。
【0048】上に述べたように1回目のループではEN
TRY,B0,B1,B2,B3,EXITのパスは通
るが、図6を参照するとこのパスに対応するパスサムは
0であり、2回目から99回目までのループではENT
RY,B1,B2,B3,EXITのパスを通るが、図
6を参照するとこのパスのパスサムは2であり、100
回目のループではENTRY,B1,B2,B3,B
4,EXITのパスを通るが、図6を参照するとこのパ
スのパスサムは3である。したがって基本ブロックレベ
ルのパスプロファイル情報は、パスサムが0のパスの実
行回数が1となり、パスサムが2のパスの実行回数が9
8となり、パスサムが3のパスの実行回数が1となる。
【0049】コンパイルプログラムの実行が終了した段
階では、直接関数呼出情報記録手段20に記録された直
接関数呼出情報21と、間接関数呼出情報記録手段22
に記録された最多呼出情報23およびカレント呼出情報
24と、パスプロファイル情報記録手段25に記録され
た基本ブロックレベルのパスプロファイル情報とは、図
2に示したようになり、コンパイルプログラム実行部1
2はこれらのプロファイル情報をプロファイル格納ファ
イル5に格納する。
【0050】なお、以上の間接関数呼出のプロファイリ
ングの説明では、図9のフローに示したようにカレント
呼出情報に記録された関数アドレスとは異なる関数アド
レスが呼び出されて呼び出された関数アドレスが最多呼
出情報に記録された関数アドレスとも異なる場合(すな
わち、図9でステップS32,S34を通りステップS
35でNOと判断された場合)に、ステップS37で最
多呼出情報の累計呼出回数とカレント呼出情報の連続呼
出回数とを比較していたが、最多呼出情報の連続呼出回
数とカレント呼出情報の連続呼出回数とを比較するよう
にしてもよい。図13は、図9とは別の実施例で最多呼
出情報の連続呼出回数とカレント呼出情報の連続呼出回
数とを比較するように変更したフロー図である。図9に
おけるステップS37を、最多呼出情報の連続呼出回数
とカレント呼出情報の連続呼出回数とを比較するステッ
プS37aに置き換えたこと以外は図9と同一であり、
ステップS38でカレント呼出情報の連続呼出回数の方
が最多呼出情報の連続呼出回数よりも大である場合には
ステップS39でカレント呼出情報に記録されていた関
数アドレスを最多呼出情報の関数アドレスに書き込み、
カレント呼出情報の連続呼出回数を最多呼出情報の連続
呼出回数および累計呼出回数に書き込む。図9のフロー
を用いた場合には、累計呼出回数を最重要視したプロフ
ァイル情報が得られるのに対して、図13のフローを用
いた場合には累計呼出回数よりも連続呼出回数を重要視
したプロファイル情報が得られる。
【0051】次に、図1に戻り、プロファイル情報統合
部13の動作について説明する。プロファイル格納ファ
イル5に格納された基本ブロックレベルのパスプロファ
イル情報はパスサムと実行回数の対応を示すだけである
ため、プロファイル情報統合部13ではプロファイル格
納ファイル5とパスデータファイル3とを読み込み、基
本ブロックレベルのパスプロファイル情報とパスデータ
ファイル3に格納された基本ブロックレベルのパスとの
対応(図10参照)と統合して基本ブロック名(基本ブ
ロックのID)で表現されたパスと回数との関係へ変換
する。このようにして統合されたパスプロファイル情報
と、プロファイル格納ファイル5から読み出した直接関
数呼出情報21および間接関数呼出情報(最多呼出情報
およびカレント呼出情報)とをプロファイル情報ファイ
ル6に格納する。
【0052】次に、メモリ空間配置最適化部14の動作
について説明する。メモリ空間配置最適化部14には、
配置対象となる各関数プログラムのサイズおよび各基本
ブロックプログラムのサイズに関する情報が格納され
る。これらを予め算出して直接にメモリ空間配置最適化
部14に供給してもよく、またプロファイル情報ファイ
ル6などに一旦格納してからメモリ空間配置最適化部1
4に読み込んでもよい。メモリ空間配置最適化部14
は、統合されたパスプロファイル情報、直接関数呼出情
報および間接関数呼出情報(最多呼出情報およびカレン
ト呼出情報)をプロファイル情報ファイル6から読み込
み、各関数プログラムのサイズおよび各基本ブロックプ
ログラムのサイズを参照して、例えば第1の従来技術に
おける関数の割付と同様の方法を関数および基本ブロッ
クに適用してメモリ空間に割り付けることによりキャッ
シュコンフリクトの発生を低減した配置最適化情報7を
生成し出力する。
【0053】図14は、図2で示されたパスプロファイ
ル情報、直接関数呼出情報および間接関数呼出情報(最
多呼出情報およびカレント呼出情報)に基づいて関数f
uncを構成する基本ブロックB0〜B4と基本ブロッ
クB1から直接関数呼出される関数funcAと基本ブ
ロックB2から間接関数呼出される関数funcBおよ
びfuncCを最適配置した一例である。この例では、
B0〜B4の各基本ブロック、関数funcA、関数f
uncB、関数funcCのそれぞれが1キャッシュラ
インのサイズであるとし、キャッシュサイズには5キャ
ッシュラインを含むものとしている。
【0054】図14においては、キャッシュサイズで区
切られたメモリ空間(キャッシュサイズ空間と呼ぶこと
にする)で左端から数えて1番目のキャッシュラインに
対応する位置に呼出回数が100回の関数funcAが
配置され、これと隣接した左端から数えて2番目のキャ
ッシュラインに対応する位置に累計呼出回数が96回の
関数funcBが配置されている。これらとのコンフリ
クトの発生を抑制するように、隣のキャッシュサイズ空
間で左端から数えて3番目のキャッシュラインから5番
目キャッシュラインに対応する位置に実行回数が98回
のパスに含まれる基本ブロックB1,B2,B3が配置
されている。このようにパスプロファイル情報、直接関
数呼出情報および間接関数呼出情報(最多呼出情報およ
びカレント呼出情報)に基づいて関数および基本ブロッ
クの配置が割り付けられることにより、コンフリクトの
発生を低減することができる。
【0055】第1の従来技術では関数funcを5キャ
ッシュラインを占める1個の関数として扱っていたため
関数数funcA、関数funcB、関数funcの3
つを(すべてをコンフリクトなく配置するには7キャッ
シュライン必要なので)5キャッシュラインのキャッシ
ュサイズの中に最適配置することができなかったが、本
発明によれば、関数funcは基本ブロックB0〜B4
に分割され、そのうちの基本ブロックB1,B2,B3
だけが関数funcA,funcBとともに最適配置の
対象とされるので、図14に示す配置割付をとることが
可能となり、キャッシュコンフリクトを著しく低減する
ことができる。
【0056】なお、以上において配置割付装置1は、専
用の装置として説明したが、汎用のコンピュータと、プ
ロファイリングコード挿入手順を記述したプログラム、
コンパイルプログラム実行手順を記述したプログラムお
よびプロファイル情報統合の手順を記述したプログラム
を含むプロファイル情報生成プログラムとメモリ空間配
置最適化プログラムとからなる配置割付プログラムと、
を用いても本発明の配置割付装置1をまったく支障なく
実現し適用することができる。
【0057】
【発明の効果】以上のように、本発明を適用することに
より、関数呼出のプロファイル情報とパスプロファイリ
ングにより取得した基本ブロックレベルでのパスプロフ
ァイル情報との両方に基づき基本ブロックと関数とを同
様に扱って高い頻度で呼び出される関数と高い頻度で実
行される基本ブロックだけを抽出し最適割付の対象とし
てメモリ空間への配置割付を行うので、キャッシュの限
られた容量を従来よりも有効に活用してキャッシュコン
フリクトを削減することが可能となる。また、関数呼出
のプロファイリングにおいて記録する情報の量が従来よ
り少ないため小容量で直接関数呼出だけでなく間接関数
呼出を含めた関数呼出のプロファイル情報を記録できる
ので、パスプロファイル情報を含めたプロファイル情報
の作成が小さなメモリ容量で可能となる。
【図面の簡単な説明】
【図1】本発明の一実施の形態の配置割付装置を含むシ
ステムのブロック図である。
【図2】直接関数呼出情報記録手段、間接関数呼出情報
記録手段およびパスプロファイル情報記録手段の構成を
示す図である。
【図3】プロファイリングコード挿入部の動作を示すフ
ロー図である。
【図4】C言語で記述されたソースプログラムの例であ
る。
【図5】ソースプログラムをコンパイルしてB0、B
1,B2,B3,B4の5つの基本ブロックに分割した
場合の制御フローグラフである。
【図6】(a)は変形された制御フローグラフを示す図
であり、(b)はパスサムと関数funcの基本ブロッ
クレベルのパスとの対応を示す図である。
【図7】付加処理を辺に対応させて表示した制御フロー
グラフである。
【図8】関数呼出頻度プロファイリングコード挿入処理
のフロー図である。
【図9】間接関数呼出におけるプロファイリング処理の
フロー図である。
【図10】パスデータファイルの一例を示す図である。
【図11】直接関数呼出情報の状態の推移を示す図であ
る。
【図12】最多呼出情報およびカレント呼出情報の状態
の推移を示す図である。
【図13】間接関数呼出におけるプロファイリング処理
の別の実施例を示すフロー図である。
【図14】本発明による最適配置割付の一例である。
【図15】第1の従来技術による配置割付装置の図であ
る。
【図16】第1の従来技術における関数呼出組合せ情報
の一例を示す図である。
【図17】第1の従来技術におけるメモリ空間配置最適
化部の処理を示すフロー図である。
【図18】図16に対応する関数呼出グラフである。
【図19】第1の従来技術による配置割付の各段階での
関数のメモリ空間への配置状況と使用不可能集合を示す
図である。
【図20】第2の従来技術によるパスプロファイリング
の概略を説明するための図で、(a)は基本ブロックレ
ベルの制御フロー図であり、(b)はパスとパスサムと
の対応を示す図である。
【符号の説明】
1 配置割付装置 2 ソースプログラム 3 パスデータファイル 4 コード挿入済コンパイルプログラム 5 プロファイル格納ファイル 6 プロファイル情報ファイル 7 配置最適化情報 11 プロファイリングコード挿入部 12 コンパイルプログラム実行部 13 プロファイル情報統合部 14 メモリ空間配置最適化部 20 直接関数呼出情報記録手段 21 直接関数呼出情報 22 間接関数呼出情報記録手段 23 最多呼出情報 24 カレント呼出情報 25 パスプロファイル情報記録手段 31,32,33,34,35,36,37,38,3
9 記録領域 B0,B1,B2,B3,B4 基本ブロック

Claims (11)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムを入力してコンパイル
    し各々に含まれる関数呼出が1個以下の複数の基本ブロ
    ックに関数を分割し、該関数の基本ブロックレベルでの
    パスの実行を計数するためのコードと、基本ブロックか
    ら関数呼出がある場合に直接呼出か間接呼出かを判別し
    て計数するためのコードとを付加しコード挿入済みコン
    パイルプログラムとして出力するプロファイリングコー
    ド挿入部と、 基本ブロックレベルでのパス毎の実行回数を記録するパ
    スプロファイル情報記録手段と直接関数呼出の実行回数
    を記録する直接関数呼出情報記録手段と間接関数呼出の
    実行回数を記録する間接関数呼出情報記録手段とを備
    え、前記コード挿入済みコンパイルプログラムを入力し
    て実行し前記パス毎の実行回数、前記直接関数呼出の実
    行回数、前記間接関数呼出の実行回数を計数して記録す
    るコンパイルプログラム実行部と、を有して構成される
    ことを特徴とする関数と基本ブロックの配置割付装置。
  2. 【請求項2】 前記直接関数呼出情報記録手段は、呼び
    出された関数名と呼出回数とを対応させて記録し、 前記間接関数呼出情報記録手段は、呼出回数の累計が最
    多である間接関数呼出について呼び出された関数のアド
    レスと累計呼出回数とを対応させて記録することを特徴
    とする請求項1記載の関数と基本ブロックの配置割付装
    置。
  3. 【請求項3】 前記直接関数呼出情報記録手段は、呼び
    出された関数名と呼出回数とを対応させて直接関数呼出
    情報として記録し、 前記間接関数呼出情報記録手段は、呼出回数の累計が最
    多である間接関数呼出について呼び出された関数のアド
    レスと連続呼出回数と累計呼出回数とを対応させて最多
    呼出情報として記録し、前回に実行された間接関数呼出
    について呼び出された関数のアドレスと連続呼出回数と
    を対応させてカレント呼出情報として記録し、今回呼び
    出される関数アドレスが前記カレント呼出情報に記録さ
    れた関数アドレスと異なりかつ前記最多呼出情報に記録
    された関数アドレスと同一である場合には前記カレント
    呼出情報の連続呼出回数を前記最多呼出情報の累計呼出
    回数に加算して得られる回数が累計呼出情報として書き
    込まれ、今回呼び出される関数アドレスが前記カレント
    呼出情報に記録された関数アドレスと異なりかつ前記最
    多呼出情報に記録された関数アドレスとも異なる場合に
    は前記カレント呼出情報の連続呼出回数が前記最多呼出
    情報の累計呼出回数よりも大きければ前記カレント呼出
    情報の関数アドレスが前記最多呼出情報の関数アドレス
    として書き込まれるとともに前記カレント呼出情報の連
    続呼出回数が前記最多呼出情報の連続呼出回数および累
    計呼出回数として書き込まれることを特徴とする請求項
    1記載の関数と基本ブロックの配置割付装置。
  4. 【請求項4】 前記直接関数呼出情報記録手段は、呼び
    出された関数名と呼出回数とを対応させて記録し、 前記間接関数呼出情報記録手段は、連続呼出回数が最多
    である間接関数呼出について呼び出された関数のアドレ
    スと連続呼出回数とを対応させて記録することを特徴と
    する請求項1記載の関数と基本ブロックの配置割付装
    置。
  5. 【請求項5】 前記直接関数呼出情報記録手段は、呼び
    出された関数名と呼出回数とを対応させて直接関数呼出
    情報として記録し、 前記間接関数呼出情報記録手段は、連続呼出回数が最多
    である間接関数呼出について呼び出された関数のアドレ
    スと連続呼出回数と累計呼出回数とを対応させて最多呼
    出情報として記録し、前回に実行された間接関数呼出に
    ついて呼び出された関数のアドレスと連続呼出回数とを
    対応させてカレント呼出情報として記録し、今回呼び出
    される関数アドレスが前記カレント呼出情報に記録され
    た関数アドレスと異なりかつ前記最多呼出情報に記録さ
    れた関数アドレスと同一である場合には前記カレント呼
    出情報の連続呼出回数を前記最多呼出情報の累計呼出回
    数に加算して得られる回数が累計呼出情報として書き込
    まれ、今回呼び出される関数アドレスが前記カレント呼
    出情報に記録された関数アドレスと異なりかつ前記最多
    呼出情報に記録された関数アドレスとも異なる場合には
    前記カレント呼出情報の連続呼出回数が前記最多呼出情
    報の連続呼出回数よりも大きければ前記カレント呼出情
    報の関数アドレスが前記最多呼出情報の関数アドレスと
    して書き込まれるとともに前記カレント呼出情報の連続
    呼出回数が前記最多呼出情報の連続呼出回数および累計
    呼出回数として書き込まれることを特徴とする請求項1
    記載の関数と基本ブロックの配置割付装置。
  6. 【請求項6】 命令キャッシュの割付を最適化するコン
    ピュータプログラムにおいて ソースプログラムを入力してコンパイルし関数を各々に
    含まれる関数呼出が1個以下の複数の基本ブロックに分
    割し、関数の基本ブロックレベルでのパスの実行を計数
    するためのパスプロファイリングコードと、基本ブロッ
    クから関数呼出がある場合に直接呼出か間接呼出かを判
    別して計数するための関数呼出プロファイリングコード
    とを挿入しコード挿入済みコンパイルプログラムを生成
    する第1の手順と、 前記コード挿入済みコンパイルプログラムを入力し実行
    して実行終了後に基本ブロックレベルでのパス毎の実行
    回数が計数され記録されたパスプロファイル情報と、直
    接関数呼出を含む基本ブロックの直接関数呼出の実行回
    数が計数され記録された直接関数呼出情報と、間接関数
    呼出を含む基本ブロックの間接関数呼出の実行回数が計
    数され記録された間接関数呼出情報とを含むプロファイ
    ル情報を生成する第2の手順と、 前記プロファイル情報に基づいて実行回数の多い基本ブ
    ロックおよび関数を抽出しこれらが同一のキャッシュラ
    インに割り当てられることが少なくなるようにメモリ空
    間に配置割付する第3の手順と、をコンピュータに実行
    させることを特徴とする割付最適化プログラム。
  7. 【請求項7】 前記第1の手順において前記関数呼出プ
    ロファイリングコードを挿入する手順は、基本ブロック
    が関数呼出を含む場合に直接関数呼出か間接関数呼出か
    を判断しするステップと、 直接関数呼出である場合には前記直接関数呼出情報の記
    録領域を割り当て呼び出される関数名を記録し前記直接
    関数呼出情報を収集するためのプロファイリングコード
    を挿入するステップと、 間接関数呼出である場合には前記間接関数呼出情報の記
    録領域を割り当て前記間接関数呼出情報を収集するため
    のプロファイリングコードを挿入するステップと、を有
    することを特徴とする請求項6に記載の割付最適化プロ
    グラム。
  8. 【請求項8】 前記直接関数呼出情報の記録領域には呼
    び出された関数名と呼出回数とを対応させて記録し、 前記間接関数呼出情報の記録領域には最多呼出情報とし
    て呼出回数の累計が最多である間接関数呼出について呼
    び出された関数のアドレスと連続呼出回数と累計呼出回
    数とを対応させて記録し、カレント呼出情報として前回
    に実行された間接関数呼出について呼び出された関数の
    アドレスと連続呼出回数とを対応させて記録することを
    特徴とする請求項7に記載の割付最適化プログラム。
  9. 【請求項9】 前記間接関数情報を収集するためのプロ
    ファイリング情報を挿入する手順は、 今回呼び出される関数アドレスが前記カレント呼出情報
    に記録された関数アドレスと同一かを判断するステップ
    と 前記カレント呼出情報に記録された関数アドレスと同一
    である場合に前記カレント呼出情報の連続呼出回数に1
    を加算して更新するステップと、 前記カレント呼出情報に記録された関数アドレスと異な
    る場合に前記最多呼出情報に記録された関数アドレスと
    同一かを判断するステップと、 前記最多呼出情報に記録された関数アドレスと同一であ
    る場合に前記カレント呼出情報の連続呼出回数を前記最
    多呼出情報の累計呼出回数に加算して得られる回数を累
    計呼出情報として記録するステップと、 前記最多呼出情報に記録された関数アドレスと異なる場
    合に前記カレント呼出情報の連続呼出回数が前記最多呼
    出情報の累計呼出回数よりも大きければ前記カレント呼
    出情報の連続呼出回数を前記最多呼出情報の連続呼出回
    数および累計呼出回数として記録するステップと、を有
    することを特徴とする請求項8に記載の割付最適化プロ
    グラム。
  10. 【請求項10】 前記直接関数呼出情報の記録領域には
    呼び出された関数名と呼出回数とを対応させて記録し、 前記間接関数呼出情報の記録領域には最多呼出情報とし
    て連続呼出回数が最多である間接関数呼出について呼び
    出された関数のアドレスと連続呼出回数と累計呼出回数
    とを対応させて記録し、カレント呼出情報として前回に
    実行された間接関数呼出について呼び出された関数のア
    ドレスと連続呼出回数とを対応させて記録することを特
    徴とする請求項7に記載の割付最適化プログラム。
  11. 【請求項11】 前記間接関数情報を収集するためのプ
    ロファイリング情報を挿入する手順は、 今回呼び出される関数アドレスが前記カレント呼出情報
    に記録された関数アドレスと同一かを判断するステップ
    と 前記カレント呼出情報に記録された関数アドレスと同一
    である場合に前記カレント呼出情報の連続呼出回数に1
    を加算して更新するステップと、 前記カレント呼出情報に記録された関数アドレスと異な
    る場合に前記最多呼出情報に記録された関数アドレスと
    同一かを判断するステップと、 前記最多呼出情報に記録された関数アドレスと同一であ
    る場合に前記カレント呼出情報の連続呼出回数を前記最
    多呼出情報の累計呼出回数に加算して得られる回数を累
    計呼出情報として記録するステップと、 前記最多呼出情報に記録された関数アドレスと異なる場
    合に前記カレント呼出情報の連続呼出回数が前記最多呼
    出情報の連続呼出回数よりも大きければ前記カレント呼
    出情報の連続呼出回数を前記最多呼出情報の連続呼出回
    数および累計呼出回数として記録するステップと、を有
    することを特徴とする請求項10に記載の割付最適化プ
    ログラム。
JP2002076685A 2002-03-19 2002-03-19 関数と基本ブロックの配置割付装置および割付最適化プログラム Pending JP2003271394A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002076685A JP2003271394A (ja) 2002-03-19 2002-03-19 関数と基本ブロックの配置割付装置および割付最適化プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002076685A JP2003271394A (ja) 2002-03-19 2002-03-19 関数と基本ブロックの配置割付装置および割付最適化プログラム

Publications (1)

Publication Number Publication Date
JP2003271394A true JP2003271394A (ja) 2003-09-26

Family

ID=29205376

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002076685A Pending JP2003271394A (ja) 2002-03-19 2002-03-19 関数と基本ブロックの配置割付装置および割付最適化プログラム

Country Status (1)

Country Link
JP (1) JP2003271394A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005266941A (ja) * 2004-03-16 2005-09-29 Fujitsu Ltd キャッシュカラーリング方法
JP2006079338A (ja) * 2004-09-09 2006-03-23 Fujitsu Ltd プログラムセクションレイアウト方法およびレイアウト処理プログラム
JP2007148556A (ja) * 2005-11-24 2007-06-14 Nec Electronics Corp 関数割付方法および関数割付装置
JP2008015941A (ja) * 2006-07-07 2008-01-24 Fujitsu Ltd プログラム調整装置およびプログラム調整方法
WO2010106914A1 (ja) * 2009-03-17 2010-09-23 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、および記録媒体
US8341354B2 (en) 2007-07-30 2012-12-25 Fujitsu Semiconductor Limited Cache coloring method and apparatus based on function strength information
JP2015103021A (ja) * 2013-11-25 2015-06-04 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 制御フロー・グラフ上の実行パスの実行頻度情報を得るための方法、並びに、当該情報を得るためのコンピュータ及びそのコンピュータ・プログラム
KR101670916B1 (ko) * 2009-03-03 2016-10-31 삼성전자 주식회사 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005266941A (ja) * 2004-03-16 2005-09-29 Fujitsu Ltd キャッシュカラーリング方法
JP4554241B2 (ja) * 2004-03-16 2010-09-29 富士通セミコンダクター株式会社 キャッシュカラーリング方法
JP4592367B2 (ja) * 2004-09-09 2010-12-01 富士通セミコンダクター株式会社 プログラムセクションレイアウト方法およびレイアウト処理プログラム
JP2006079338A (ja) * 2004-09-09 2006-03-23 Fujitsu Ltd プログラムセクションレイアウト方法およびレイアウト処理プログラム
JP2007148556A (ja) * 2005-11-24 2007-06-14 Nec Electronics Corp 関数割付方法および関数割付装置
JP2008015941A (ja) * 2006-07-07 2008-01-24 Fujitsu Ltd プログラム調整装置およびプログラム調整方法
US8341354B2 (en) 2007-07-30 2012-12-25 Fujitsu Semiconductor Limited Cache coloring method and apparatus based on function strength information
KR101670916B1 (ko) * 2009-03-03 2016-10-31 삼성전자 주식회사 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치
JP2010218218A (ja) * 2009-03-17 2010-09-30 Nec Corp プログラムのメモリ空間への配置方法、装置、およびプログラム
JP4600700B2 (ja) * 2009-03-17 2010-12-15 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、およびプログラム
WO2010106914A1 (ja) * 2009-03-17 2010-09-23 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、および記録媒体
US8732687B2 (en) 2009-03-17 2014-05-20 Nec Corporation Arrangement method of programs to memory space, apparatus, and recording medium
JP2015103021A (ja) * 2013-11-25 2015-06-04 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 制御フロー・グラフ上の実行パスの実行頻度情報を得るための方法、並びに、当該情報を得るためのコンピュータ及びそのコンピュータ・プログラム

Similar Documents

Publication Publication Date Title
JP3327818B2 (ja) プログラム変換装置及び記録媒体
JP4003830B2 (ja) マルチプロセッシング環境における透過動的最適化のための方法およびシステム
US6922829B2 (en) Method of generating profile-optimized code
US6718541B2 (en) Register economy heuristic for a cycle driven multiple issue instruction scheduler
US5828886A (en) Compiling apparatus and method for promoting an optimization effect of a program
US8291398B2 (en) Compiler for optimizing program
JP3284956B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US5963972A (en) Memory architecture dependent program mapping
US6523173B1 (en) Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost
US5946491A (en) Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds
US5930507A (en) Compiling processing apparatus
JP3178403B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2011022993A (ja) マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム
CN102099786A (zh) 程序优化方法
JPH04330527A (ja) プログラムの最適化方法及びコンパイラ・システム
US6360360B1 (en) Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
JP2003271394A (ja) 関数と基本ブロックの配置割付装置および割付最適化プログラム
US7979853B2 (en) Compiler device, method, program and recording medium
US6584611B2 (en) Critical path optimization—unload hard extended scalar block
US20010039653A1 (en) Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program
JP3156761B2 (ja) ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体
US8032876B2 (en) Method and apparatus for restructuring a software program hierarchy
JPH01118931A (ja) プログラム変換方式
JPH06214803A (ja) 仮想空間ブロック配置方式
JP3323147B2 (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050801

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050816

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051017

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20051115