情報処理装置、プロファイル対象決定プログラム及び方法
【課題】サンプリング型プロファイラのためにプロファイル対象を決定する技術を提供する。
【解決手段】本発明の情報処理システムは、プログラムの実行中に、クラス又はオブジェクトの割り付け場所毎のサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するプロファイル情報収集部と、
プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出した割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についてのサンプリング頻度を下げるサンプリング頻度更新部とを含む。
【解決手段】本発明の情報処理システムは、プログラムの実行中に、クラス又はオブジェクトの割り付け場所毎のサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するプロファイル情報収集部と、
プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出した割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についてのサンプリング頻度を下げるサンプリング頻度更新部とを含む。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、サンプリングを用いるプロファイリング技術に関し、より詳細には、プロファイリングによるプログラム実行時の速度オーバーヘッドを削減するための情報処理装置、プロファイル対象決定プログラム及び方法に関する。
【背景技術】
【0002】
多くのプログラムでは、メモリのヒープ領域に多数のオブジェクトが動的に割り付けられる。当該オブジェクト・フォーマットは、例えば現在のJava(登録商標)仮想マシン(Virtual Machine)実装においてプログラム実行を通じて固定されている。当該固定されたオブジェクト・フォーマットは、例えばヘッダ及びデータ・フィールドのレイアウト、並びにそれらのサイズである。ここで、メモリー・フットプリント(メモリ使用量)、必要メモリ帯域幅、キャッシュ・ミス、ガーベジコレクション(GC)頻度、及びGCオーバーヘッドを減少させることが、上記プログラムを実行するコンピュータのコストを減少させる上で有用である。
【0003】
そこでプログラム実行時にプロファイラによってオブジェクトへのアクセスに関する情報を取得しオブジェクトの性質を調べることによって、上記固定されたオブジェクト・フォーマットを上記コストが減少するように変形し、プログラムを最適化することが従来行われている。
【0004】
例えば、初期化の後は書込みがない又は書きこみ頻度が低いという性質を持ったオブジェクト(以下、「不変オブジェクト」という)が複数あった場合、内容が同じであればこれらのオブジェクトを単一のオブジェクトにまとめることができる。また、読み込みがない又は読み込み頻度が低いという性質を持つオブジェクト(以下、「書き込み専用オブジェクト」という)が見つかれば、該オブジェクトを圧縮できる。更にまた、配列要素の一部がアクセスされない配列オブジェクト(以下、非アクセスオブジェクト」という)が見つかれば、アクセスのない要素を削除できる。上記最適化により、メモリの節約によるGC頻度の低下や、キャッシュ使用効率の向上が図られる。
【0005】
上記プロファイリングでは、全てのオブジェクトへのアクセスについてプロファイルを取ると速度オーバーヘッドが非常に大きくなることから、オブジェクトのサンプリングが行われている。しかしながらサンプリングを用いても依然として速度オーバーヘッドは大きく、プログラムの種類によってはプロファイリングのために実行速度が40%以上遅くなる。一方で、速度オーバーヘッドを小さくするためにサンプリング頻度を単純に下げると、今度はプロファイルの精度が下がるという問題が生ずる。
【0006】
以下、本発明の先行技術調査において見つかった文献について説明する。
【0007】
特許文献1は、プロファイル情報又はユーザ指定情報をもとに選択したソース情報を入力し、そのソース情報を構文解析し、解析結果からソース情報に出現する手続き(親手続き)で呼び出される手続呼出し(子手続き)の属性を解析して手続き属性表に記憶し、インライン展開の際に子手続きの属性が手続き属性表に登録されていなければ親手続きに最適化不要をマークし、最適化不要がマークされている親手続きを除いて他の手続きを最適化する技術を開示する。かかる技術によれば、問題を生じる可能性のある最適化は自動的に抑止される。しかしながら、特許文献1に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【0008】
特許文献2は、中間形式データに、実行中の手続き内の変数に与えられる値で頻度が50%以上になりうる値とその出現回数とを最大2組まで記録する処理を付加して、一次プロファイル情報を取得し、続いて、中間形式データに、一次プロファイル情報の2つ値の出現回数と手続きの実行回数を記録する処理を付加して、最終プロファイル情報を取得し、最終プロファイル情報をもとに変数に対し出現頻度が50% 以上の値を求め、この値に関する手続きを最適化し、目的プログラムを生成する技術を開示する。かかる技術によれば、手続き中の変数に与えられる値の出現回数を誤りなく見積もることができ、特に、出現頻度が50%を超える値を確実に記録したプロファイル情報を出力することが可能となる。しかしながら、特許文献2に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【0009】
特許文献3は、記録媒体に記録されたコンパイル用プログラムである入力コードを、プロファイルデータを用いてコンパイルして一次目的コードを生成するコンパイル部と、一次目的コードをシミュレーションしプロファイルデータを生成するシミュレータとを備えるマイクロプロセッサ用目的コードの最適化装置において、コンパイル部が生成した一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、1命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、二次目的コードの命令コードを解析して命令コード実行を行うシミュレータを開示する。かかる技術によれば、ディスプレースメント範囲外データコードであっても、目的コード中のデータコードを再配置しデータへのアクセス方法を最適化するので、プログラムの実行速度を向上させることが可能となる。しかしながら、特許文献3に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【0010】
特許文献4は、コンパイラが生成した内部変数をレジスタ、メモリ等の機械資源に割り付ける資源割り付け部が割り付け、アセンブラコード生成部が命令列を出力すると、別名アクセス性解析部が、命令列内に含まれているメモリアクセス命令における別名アクセスの可能性の有無を割り付け資源情報に登録し、アセンブラ最適化部が割り付け情報を参照してアセンブラレベルの最適化を行う技術を開示する。かかる技術によれば、間接アドレス指定型のメモリアクセス命令の存在に起因する制約が緩和され、実行時間及びプログラムサイズの向上を図ることが可能となる。しかしながら、特許文献4に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】特開2004−0102597号公報
【特許文献2】特開2005−0071135号公報
【特許文献3】特開2002−0304302号公報
【特許文献4】特開1999−0039167号公報
【発明の概要】
【発明が解決しようとする課題】
【0012】
この発明は、上記の問題点を解決するためになされたものであって、プロファイルの精度を下げることなく、プロファイリングによるプログラム実行時の速度オーバーヘッドを削減するための情報処理装置、プロファイル対象決定プログラム及び方法を提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明の発明者は、上記課題を解決するために研究し、最適化処理において参照するプロファイル情報には真に必要となるプロファイル情報とそうでないプロファイル情報とが存在することに着目した。即ち、最適化処理において重要なのはオブジェクトへの正確なアクセス数ではなく、不変性、書き込み専用性、非アクセス性等の最適化に利用可能なオブジェクトの性質である。従って、このような性質を示さないオブジェクトへのアクセスのプロファイルを省略すれば、プロファイルの精度を下げることなく速度オーバーヘッドを削減することが可能となる。そこで本発明者は更に研究を進め、その結果、同じクラスのオブジェクトや同じ割り付け場所で割り付けられたオブジェクトの性質は似ていることを利用して、クラス又は割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出された割合が低いクラス又は割り付け場所に対するサンプリング頻度を下げるというアイデアに想到した。
【0014】
即ち、上記課題を解決するために、本発明の第1の態様においては、サンプリング型プロファイラのためにプロファイル対象を決定するプログラムが提供される。該プログラムはコンピュータに、(a)プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するステップと、(b)格納された前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出するステップと、(c)算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるステップとを実行させる。
【0015】
ここで、前記プログラムの最適化に利用する性質を有するオブジェクトとは、初期化の後に書き込みがない又は書き込み頻度が低い不変オブジェクト、読み込みがない又は読み込み頻度が低い書き込み専用オブジェクト、アクセスされないフィールドを有する非アクセス・オブジェクトのいずれかであってよい。
【0016】
好ましくは、前記プロファイル対象に設定されたオブジェクトは、該オブジェクトを指すポインタに付されたプロファイル対象のマークによって識別される。そして上記プログラムは上記コンピュータに、
(d)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトが前記プログラムの最適化に利用する性質を満たすか否かを判定するステップと、(e)前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったことを条件に、前記オブジェクトにプロファイル不要のマークを付すステップと、(f)前記プログラムの実行中に開始されたガーベジ・コレクション処理において、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外すステップとを更に実行させる。
【0017】
上記ステップ(d)の判定において、好ましくは、検出した前記オブジェクトへのアクセスが、該オブジェクトの初期化後になされる書き込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する。これに加えて、又はこれに代えて、検出した前記オブジェクトへのアクセスが、該オブジェクトに対する読み込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定してもよい。更に上記に加えて、又は上記に代えて、検出した前記オブジェクトへのアクセスが、該アクセス以前にアクセスのない最後の前記オブジェクトのフィールドへのアクセスである場合(ここで「最後の前記オブジェクトのフィールド」とは、該フィールド以外に前記アクセス以前にアクセスのない前記オブジェクトのフィールドがないことを意味する)に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定してもよい。
【0018】
好ましくは、上記プログラムは上記コンピュータに、(g)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトに前記プロファイル不要のマークが付されているか否かを判定するステップと、(h)前記プロファイル不要のマークが付されているとの判定に応答して、アクセスされる前記オブジェクトを指すポインタを格納するレジスタの値が、該アクセス以降に比較命令のオペランドとして用いられるか否かを判定するステップと、(i)前記比較命令のオペランドとして用いられないとの判定に応答して、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外して前記レジスタに書き戻すステップとを更に実行させる。
【0019】
更に好ましくは、上記プログラムは上記コンピュータに、(j)前記プログラムの最適化処理において、前記プログラムに含まれる全てのオブジェクトへのアクセス命令に対し、該オブジェクトを指すポインタを格納するレジスタの値が、前記アクセス命令以降に比較命令のオペランドとして用いられるか否かを判定し、比較命令のオペランドとして用いられないとの判定に対し前記アクセス命令のアドレスを記録するステップを更に実行させる。そして前記ステップ(h)は、ステップ(j)において記録されたアドレスの中からステップ(g)において検出した前記アクセスを指示したアクセス命令のアドレスを検索することにより行われる。
【0020】
更にまた好ましくは、ステップ(j)は、手続き呼び出しへの引数、手続きの返り値、ポインタの比較命令のオペランド、及びメモリに書き込まれる値のいずれかとして前記レジスタの値が利用されることを条件に、前記レジスタの値が前記比較命令のオペランドとして用いられるとの判定を行う。
【0021】
以上、サンプリング型プロファイラのためにプロファイル対象を決定するプログラムとして本発明を説明した。しかし、本発明は、上記プログラムをインストールしたコンピュータにおいて実行されるプロファイル対象決定方法として把握することもできる。また、本発明は、上記プログラムをインストールしてプロファイル対象決定方法を実行する情報処理装置として把握することもできる。
【発明の効果】
【0022】
本発明では、同じクラスのオブジェクトや同じ割り付け場所で割り付けられたオブジェクトの性質は似ていることを利用して、クラス又は割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出された割合が低いクラス又は割り付け場所に対するサンプリング頻度を下げる。結果、プログラムの最適化に利用する性質を示さないオブジェクトへのアクセスのプロファイルのみを省略することができるようになり、プロファイルの精度を下げることなく速度オーバーヘッドを削減することが可能となった。本発明のその他の効果については、各実施の形態の記載から理解される。
【図面の簡単な説明】
【0023】
【図1A】本発明の実施形態に係るコンピュータ50のハードウェア構成の一例を示す。
【図1B】本発明の実施形態に係るコンピュータ50のソフトウェア構成の一例を示す。
【図2】本発明の実施形態に係るプロファイル対象決定装置200の機能構成を示す。
【図3A】マーク解除機能を有しないプロファイラ利用時のプログラム実行軌跡の一例を示す。
【図3B】マーク解除機能を有するプロファイラ利用時のプログラム実行軌跡の一例を示す。
【図4】本実施形態に係るプロファイル対象決定装置200の動作フローの一例を示す。
【図5】図4に示すステップ410のメモリ管理部130による処理の詳細な動作フローの一例を示す。
【図6】図4に示すステップ420のプロファイラ120の詳細な動作フローの一例を示す。
【図7A】図4に示すステップ424の動的コンパイラ125による処理の詳細な動作フローの一例を示す。
【図7B】図4に示すステップ424の動的コンパイラ125による他の処理の詳細な動作フローの一例を示す。
【図8】速度オーバーヘッドに関する比較実験結果を示す。
【図9A】不変性プロファイルにおける誤差に関する実験結果を示す。
【図9B】書き込み専用性プロファイルにおける誤差に関する実験結果を示す。
【図9C】非アクセス性プロファイルにおける誤差に関する実験結果を示す。
【発明を実施するための形態】
【0024】
以下、本発明の実施形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
【0025】
図1は、本発明の実施形態による情報処理装置としてのコンピュータ50のハードウェア構成の一例を示した図である。コンピュータ50は、バス2に接続されたメインCPU(中央処理装置)1とメイン・メモリ4を含んでいる。CPU1は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore i(商標)シリーズ、Core 2(商標)シリーズ、Atom(商標)シリーズ、Xeon(商標)シリーズ、Pentium(登録商標)シリーズ、Celeron(登録商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ又はSempron(商標)が使用されうる。
【0026】
またハードディスク装置13、30、及びCD−ROM装置26、29、フレキシブル・ディスク装置20、MO装置28、DVD装置31のようなリムーバブル・ストレージ(記録メディアを交換可能な外部記憶システム)がフレキシブル・ディスクコントローラ19、IDEコントローラ25、SCSIコントローラ27などを経由してバス2へ接続されている。フレキシブル・ディスク、MO、CD−ROM、DVD−ROMのような記憶メディアが、リムーバブル・ストレージに挿入される。
【0027】
これら記憶メディアやハードディスク装置13、30、ROM14には、オペレーティング・システム、J2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、その他のプログラム及びデータが、メイン・メモリ4にロード可能に記憶されている。更に、上記記憶メディアやハードディスク装置13、30、ROM14には、オペレーティング・システムと協働してCPU1に命令を与え、本発明を実施するためのコンピュータ・プログラムを記録することができる。即ち、上記説明した数々の記憶装置には、コンピュータ50にインストールされ、コンピュータ50を本発明の実施形態によるプロファイル対象決定装置200として機能させるプロファイル対象決定プログラムやデータを記録することができる。
【0028】
上記プロファイル対象決定プログラムは、マーク設定モジュールと、初期化モジュールと、呼び出し設定モジュールと、検証モジュールと、プロファイル情報収集モジュールと、解除判定モジュールと、サンプリング頻度更新モジュールと、解除モジュールと、即時解除モジュールと、コード書き換えモジュールとを含む。これらプログラム及びモジュールは、CPU1に働きかけて、コンピュータ50を、各々後述するマーク設定部202と、初期化部203と、呼び出し設定部205と、検証部210と、プロファイル情報収集部220と、解除判定部230と、サンプリング頻度更新部235と、解除部245と、即時解除部250と、コード書き換え部255としてそれぞれ機能させる。コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。
【0029】
コンピュータ50は、キーボード/マウス・コントローラ5を経由して、キーボード6やマウス7のような入力デバイスからの入力を受ける。コンピュータ50は、オーディオコントローラ21を経由して、マイク24からの入力を受け、またスピーカー23から音声を出力する。コンピュータ50は、視覚データをユーザに提示するための表示装置11に、グラフィックスコントローラ10を経由して接続される。コンピュータ50は、ネットワーク・アダプタ18(イーサネット(登録商標)・カードやトークンリング・カード)等を介してネットワークに接続し、他のコンピュータ等と通信を行うことが可能である。
【0030】
以上の説明により、コンピュータ50は、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、又は、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【0031】
図1Bは、本発明を実現するソフトウェアの構成を示すブロック図である。同図において、オペレーティング・システム105は、CPUやメモリを資源として管理し、時分割によるマルチスレッドの機能を実現する。仮想マシン110は、アプリケーション135とオペレーティング・システム105とのインタフェースを行うソフトウェアであり、アプリケーション135から見て仮想マシン以下の階層全体を例えばJava(登録商標)仮想マシン(Virtual Machine)として作用させる。仮想マシン110は、プログラムがバイトコード等の中間コードで与えられるときこれを解釈する実行部(インタープリタ)115と、その解釈に応じて呼び出されるプロファイラ120と、メモリ管理部130とを含む。また、仮想マシン110は好ましくはJITコンパイラ等の動的コンパイラ125を含み、バイトコードを実行時に動的に機械語にコンパイルしてネイティブコードを生成し、プログラムの実行を高速化する。
【0032】
次に図1Bに示す仮想マシンの機能の更なる詳細を説明する前に、従来のオブジェクト・サンプリングを用いるプロファイリングに基づく最適化処理について説明する。従来の最適化処理では、プロファイル情報が示すオブジェクトの性質に従い次のような処理が行われていた。
(1)初期化の後は書込みがない又は書きこみ頻度が低いという性質を持った不変オブジェクトが複数見つかった場合、内容が同じであればこれらのオブジェクトを単一のオブジェクトにまとめる。
(2)読み込みがない又は読み込み頻度が低いという性質を持つ書き込み専用オブジェクトが見つかった場合、該オブジェクトを圧縮する。
(3)配列要素の一部がアクセスされない非アクセスオブジェクトが見つかった場合、アクセスのない要素を削除する。
上記最適化処理により、メモリの節約によるGC頻度の低下や、キャッシュ使用効率の向上が図られていた。
【0033】
しかしながら上述したように、従来のオブジェクト・サンプリングを用いるプロファイリングは速度のオーバーヘッドをもたらす。そこで本発明者は、上記最適化処理ではオブジェクトへのアクセス回数ではなくオブジェクトの性質がキーとなること、また、同じクラスのオブジェクトや同じ割り付け場所で割り付けられたオブジェクトの性質は似ていることに着目して、クラス又は割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出された割合が低いクラス又は割り付け場所に対するサンプリング頻度を下げるというアイデアに想到した。本発明の実施形態に係るプロファイル対象決定装置200は、上記アイデアを組み込んで、最適化に真に必要とされるオブジェクトへのアクセスのみを対象としてプロファイル情報を収集できるようにプロファイル対象を決定する。以下、本発明の実施形態に係るプロファイル対象決定装置200の各構成要素の詳細を説明する。なお、上記(1)〜(3)の処理は説明のための例示であり、他のオブジェクトの性質に基づく最適化のためのプロファイリングに対し以下に説明する本発明を適用可能なことは言うまでもない。
【0034】
図2は、図1Aに示すコンピュータ50のハードウェア機能と図1Bに示すソフトウェア機能とを有する、本発明の実施形態に係るプロファイル対象決定装置200の機能構成を示す。本発明の実施形態に係るプロファイル対象決定装置200は、マーク設定部202と、初期化部203と、呼び出し設定部205と、検証部210と、プロファイル情報収集部220と、解除判定部230と、サンプリング頻度更新部235と、解除部245と、即時解除部250と、コード書き換え部255とを備える。更にプロファイル対象決定装置200は、検証部210の検証結果に基づき求められたオブジェクト・アクセス命令のアドレスを記録したアドレス表を格納するアドレス表格納部215と、プロファイル情報収集部220により収集されたプロファイル情報を格納するプロファイル情報格納部225と、サンプリング頻度更新部235により更新されたサンプリング頻度を格納するサンプリング頻度格納部240とを備える。なお、上記マーク設定部202及び初期化部203の機能は、図1Bに示す実行部115の機能として実装してよい。また、呼び出し設定部205及び解除部245の機能は図1Bに示すメモリ管理部130の機能として実装してよい。また、検証部210、アドレス表格納部215及びコード書き換え部255の機能は、図1Bに示す動的コンパイラ125の機能として実装してよい。また、プロファイル情報収集部220、プロファイル情報格納部225、解除判定部230、サンプリング頻度更新部235、サンプリング頻度格納部240及び即時解除部250は、図1Bに示すプロファイラ120の機能として実装してよい。
【0035】
マーク設定部202は、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づき、割り付けたオブジェクトをプロファイル対象とするか否かを決定し、プロファイル対象とすると決定したオブジェクトに対しては、該オブジェクトを指すポインタにプロファイル対象であることを示すマークを設定する。
【0036】
ここでサンプリング頻度とは、例えば1MB割り付けるたび1つオブジェクトをサンプリングするといったようなサンプリングを行う頻度である。従来は固定された値のサンプリング頻度が1つだけ用いられていた。本発明では、かかるサンプリング頻度をクラス又はオブジェクトの割り付け場所ごとに用意し、最適化に利用する性質を有さないオブジェクトに対してはプロファイリングが行われないようにすることを可能とした。
【0037】
なお、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度は、実行対象プログラムの実行開始前又は直後に同じ所定の値で初期化しておく。また、上記マークの設定は、一例として、ポインタの空いている下1ビットをフラグとして利用したり、ポインタにオフセットを足してヒープ領域外を指すようにしたりして行ってよい。なお、マーク設定部202は、上記マークの設定を、例えばオブジェクトの割り付けにおいて、又は、ガーベジコレクションにおいて行う。
【0038】
初期化部203は、後述するプロファイル情報収集部220が、収集したプロファイル情報を所定のデータ構造でプロファイル情報格納部225に格納できるように、予め所定のデータ構造のプロファイル情報を生成し初期化してプロファイル情報格納部225に格納しておく。ここで所定のデータ構造とは、収集したプロファイル情報を効率よく格納するための構造であり、オブジェクト毎のプロファイル情報構造体と、クラス毎のプロファイル情報構造体又はオブジェクトの割り付け場所毎のプロファイル情報構造体とを含む。
【0039】
オブジェクト毎のプロファイル情報構造体は、オブジェクトの割り付け場所を識別する識別子(以下、「割り付け場所ID」という)を格納する第1フィールドと、最適化に利用する性質をオブジェクトが有するか否かを判定するのに用いる情報を格納する第2フィールドとを有する。第2フィールドに格納する情報は、適用する最適化の種類によって異なるため、ここでは、オブジェクトの不変性、書き込み専用性、及び非アクセス性を利用する最適化を例として説明する。
【0040】
オブジェクトの不変性を利用する最適化では、初期化の後は書込みがない又は書きこみ頻度が低いという性質を持つオブジェクトを識別する必要がある。そこで、上記第2フィールドには、これまでに一度でもreadがあったか否かを示す1ビット(該ビットには、初期値として「readがない」を示す1ビットを設定)を格納する。また、オブジェクトの書き込み専用性を利用する最適化では、読み込みがない又は読み込み頻度が低いという性質を持つオブジェクトを識別する必要がある。しかし該性質は、readのためのアクセスがあった時点で直ちにオブジェクトは書き込み専用性を有さないと判断できる。従って、本ケースでは上記第2フィールドに格納する情報はない(但し、読み込み頻度が低いとする場合は読み込み回数をカウントするカウンタ値や読み込み頻度情報を格納してもよい)。また、オブジェクトの非アクセス性を利用する最適化では、配列要素の一部がアクセスされない配列オブジェクトを識別する必要がある。そこで、上記第2フィールドには、オブジェクト中の各バイトにつきアクセスがあったか否かを示す1ビット(各ビットには、初期値として「アクセスがない」を示す1ビットを設定)を格納する。
【0041】
初期化部203は、オブジェクト毎のプロファイル情報構造体の生成及び初期化を、該オブジェクトの割り付け時に、該オブジェクトがプロファイル対象に決定されることを条件に行う。初期化部203は、空のハッシュ表(以下、「第1ハッシュ表」という)を生成してプロファイル情報格納部225に格納しておき、オブジェクト毎のプロファイル情報構造体を生成すると、これをオブジェクトの先頭アドレスをキーとして第1ハッシュ表に登録する。このとき初期化部203は、オブジェクトの割り付け場所のIDをオブジェクト毎のプロファイル情報構造体の第1フィールドに格納する。オブジェクト毎のプロファイル情報構造体の第2フィールドの値の初期化は、適用する最適化の種類によって異なり、オブジェクトの不変性、書き込み専用性、及び非アクセス性を利用する最適化オブジェクについては上述した通りである。
【0042】
クラス毎のプロファイル情報構造体は、割り付けられた該クラスのオブジェクトの全バイト数を格納する第1フィールド(該フィールドには、初期値として0を設定)と、割り付けられた該クラスのオブジェクトのうち最適化に利用する性質を有する全オブジェクトの全バイト数を格納する第2フィールド(該フィールドには、初期値として0を設定)とを有する。例えばオブジェクトの不変性を利用する最適化では、注目するクラスをクラスAとすると、クラスAのプロファイル情報構造体の第1フィールドに、クラスAに割り付けられたオブジェクトの全バイト数を格納し、クラスAのプロファイル情報構造体の第2フィールドに、クラスAに割り付けられた不変オブジェクトの全バイト数を格納する。なお、割り付け場所毎のプロファイル情報構造体についても同様である。即ち、割り付け場所毎のプロファイル情報構造体は、該割り付け場所に割り付けられたオブジェクトの全バイト数を格納する第1フィールド(該フィールドには、初期値として0を設定)と、該割り付け場所に割り付けられたオブジェクトのうち最適化に利用する性質を有する全オブジェクトの全バイト数を格納する第2フィールド(該フィールドには、初期値として0を設定)とを有する。
【0043】
初期化部203は、クラス毎のプロファイル情報構造体又は割り付け場所毎のプロファイル情報構造体の生成及び初期化を、オブジェクトの割り付け時に、該オブジェクトがプロファイル対象に決定されること、かつ、割り付けたオブジェクトがそのオブジェクトのクラスの最初のオブジェクトであること又はその割り付け場所で割り付けられた最初のオブジェクトであることを条件に行う。初期化部203は、空のハッシュ表(以下、「第2ハッシュ表」という)又は空の配列(以下、「第1配列」という)を生成してプロファイル情報格納部225に格納しておき、クラス毎のプロファイル情報構造体を生成すると該構造体を、クラスを識別する識別子(以下、「クラスID」という)をキーとして第2ハッシュ表に、又はクラスIDを添え字として第1配列に登録する。同様に初期化部203は、割り付け場所毎のプロファイル情報構造体を生成すると該構造体を、割り付け場所IDをキーとして第2ハッシュ表に、又は割り付け場所IDを添え字として第1配列に登録する。なお、初期化部203は、上記クラス毎のプロファイル情報構造体又は割り付け場所毎のプロファイル情報構造体の生成及び初期化とは別に、オブジェクト毎のプロファイル情報構造体の生成及び初期化を行う際に(対応するクラス毎のプロファイル情報構造体又は対応する割り付け場所毎のプロファイル情報構造体が生成されていない場合はその生成後に)、対応するクラス毎のプロファイル情報構造体又は対応する割り付け場所毎のプロファイル情報構造体の第1フィールド及び第2フィールドのそれぞれに、割り付けたオブジェクトのバイト数を加算する。
【0044】
呼び出し設定部205は、プロファイル対象であることを示すマークを付されたポインタを介してオブジェクトへのアクセスがあるとプロファイラ120が呼び出されるように、プロファイラ120の呼び出しを設定する。該設定には、実行対象のプログラムのコード(中間コード)を書き換えて行う方法と、ページ保護機構を利用する方法とがある。呼び出し設定部205は後者を採用し、前者については、後述するコード書き換え部255が採用する。従って、プロファイル対象決定装置200は、呼び出し設定部205と後述するコード書き換え部255のうち少なくとも一方を含めばよいことに留意されたい。
【0045】
ページ保護機構を利用する呼び出し設定部205は、より具体的には、プロファイル対象であることを示すマークを付されたポインタが指す先のページを読み書き禁止に設定し、該ポインタを介してオブジェクトがアクセスされるとシグナルハンドラが呼び出されるようにする。この場合、シグナルハンドラがプロファイラ120としてプロファイル情報の収集を行う。なお、呼び出し設定部205は、上記プロファイラ120の呼び出し設定を、例えば実行対象プログラムの実行開始前、又は直後に行う。
【0046】
検証部210は、実行対象プログラムである中間コードに含まれるオブジェクトへのアクセス命令に用いられるポインタの値を格納する全ベースレジスタの各々について、その値が上記アクセス命令の後においてポインタの比較命令のオペランドとして用いられているか否かを検証する。検証部210は、検証の結果、ポインタの比較命令に用いられないと判定したアクセス命令について、そのアクセス命令のアドレスをアドレス表格納部230に格納されるアドレス表に登録する。なお、アドレス表は、実行対象プログラムの実行開始前又は直後に空の値で初期化しておく。またアドレス表が大きくなりすぎるような場合は、頻繁に実行される手続き内の命令のアドレスだけを登録するようにしてもよい。アドレス表の利用方法については後述する。
【0047】
検証部210は、より具体的には、実行対象プログラムである中間コードを解析し、オブジェクトへのポインタを格納するベースレジスタの値が、手続き呼び出しへの引数、手続きの返り値、ポインタの比較命令のオペランド、及びメモリに書き込まれる値のいずれかとして利用されるか否かを判定する。好ましくは、検証部210は、手続き間解析を利用し、上記ベースレジスタの値が手続き呼び出しへの引数又は手続きの返り値として利用される場合、呼び出される先の手続き又は呼び出し元の手続きにおいて上記解析及び判定を繰り返す。また好ましくは、検証部210は、エイリアス解析を利用し、エイリアス解析の結果を用いてベースレジスタもしくはそれがコピーされた値がポインタの比較命令のオペランドとして利用されるか否かを判定する。
【0048】
なお、上記手続き間解析及びエイリアス解析を利用しない場合、検証部210は、上記オブジェクトへのポインタを格納するベースレジスタの値が、手続き呼び出しへの引数、手続きの返り値、メモリに書き込まれる値、及びポインタの比較命令のオペランドのいずれか1つにでも利用される場合、ベースレジスタの値がポインタの比較命令に用いられる可能性があると保守的に判定する。なお、検証部210は、上記検証及びアドレス表作成処理を、例えば実行対象プログラムである中間コードの部分の動的コンパイル処理において行う。
【0049】
プロファイル情報収集部220は、プロファイラ120又はシグナルハンドラの呼び出しに応答して、即ち、プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報の収集を行う。プロファイル情報収集部220は、収集したプロファイル情報を、上記説明したプロファイル情報の構造体に格納する。より具体的には、プロファイル情報収集部210は、アクセスされたオブジェクトの先頭アドレスをキーにして第1ハッシュ表を引き、上記オブジェクトに対応するオブジェクト毎のプロファイル情報構造体を得る。そしてプロファイル情報収集部220は、取得したオブジェクト毎のプロファイル情報構造体の第2フィールドに、最適化が利用する性質を上記アクセスされたオブジェクトが満たすか否かを判定するのに必要な情報を格納する。
【0050】
例えばオブジェクトの不変性を利用する最適化の場合、プロファイル情報収集部220は、現在のアクセスがreadのためのアクセスであれば、第2フィールドに格納される1ビットを立ててreadのためのアクセスがあったことを示し、現在のアクセスがwriteのためのアクセスであれば、何もしない。オブジェクトの書き込み専用性を利用する最適化の場合、上述したように、プロファイル情報収集部220は第2フィールドには何も格納しない。オブジェクトの非アクセス性を利用する最適化の場合、プロファイル情報収集部220は、アクセスのあったオブジェクトのバイトに対応するビットを立てる。なお、プロファイル情報収集部220は、上記プロファイル情報収集処理を、例えば実行プログラムの実行時においてなされるプロファイリングにおいて行う。プロファイル情報収集部220は、収集したプロファイル情報の格納処理が終わると、解除判定部230を呼び出す。
【0051】
解除判定部230は、プロファイル情報収集部220から呼び出されると、プロファイル情報格納部225に格納されるプロファイル情報に基づき、アクセスされるオブジェクトがプログラムの最適化に利用する性質を満たすか否かを判定する。そして解除判定部230は、オブジェクトがプログラムの最適化に利用する性質を満たさないと判定することを条件に、該オブジェクトにプロファイル不要のマークを設定する。これは、オブジェクトがプログラムの最適化に利用する性質を満たさない又は満たさなくなった場合には、それ以上プロファイルする価値がないためである。なお、解除判定部230は、対応するオブジェクト毎のプロファイル情報構造体へのポインタをプロファイル情報収集部220から受け取ってよく、あるいは、現在のアクセスされたオブジェクトの先頭アドレスをキーにして第1ハッシュ表を引くことにより取得してもよい。
【0052】
ここで、オブジェクトの不変性を利用する最適化を適用している場合、解除判定部230は、検出したオブジェクトへのアクセスが、該オブジェクトの初期化後になされる書き込みのためのアクセスであることを条件に、オブジェクトがプログラムの最適化に利用する性質を満たさなくなったと判定する。上記条件は、具体的には、取得した対応するオブジェクト毎のプロファイル情報構造体の第2フィールドのフラグの値がこれまでに1度でもreadがあったことを示す「1」となっており、かつ、現在のアクセスがwriteのためのアクセスである場合に満たされる。
【0053】
また、オブジェクトの書き込み専用性を利用する最適化を適用している場合、解除判定部230は、検出したオブジェクトへのアクセスが、該オブジェクトに対する読み込みのためのアクセスであることを条件に、オブジェクトがプログラムの最適化に利用する性質を満たさなくなったと判定する。上記条件は、具体的には、現在のアクセスがreadのためのアクセスである場合に満たされる。
【0054】
また、オブジェクトの非アクセス性を利用する最適化を適用している場合、解除判定部230は、検出したオブジェクトへのアクセスが、該アクセス以前にアクセスのない最後のオブジェクトのフィールドへのアクセスであることを条件に、オブジェクトがプログラムの最適化に利用する性質を満たさなくなったと判定する。上記条件は、具体的には、取得した対応するオブジェクト毎のプロファイル情報の第2フィールドの全フラグの値が、アクセスがあったことを示す「1」となっている場合に満たされる。
【0055】
オブジェクトへのプロファイル不要のマーク付けは、オブジェクトのヘッダを利用してよい。即ち、
オブジェクトは、典型的には、ヘッダ及び少なくとも1のフィールドを含む。ヘッダは、オブジェクト内に埋め込まれた、オブジェクト自体の情報を保持する部分であり、例えばオブジェクトのクラスID及びオブジェクトのサイズを含む。フィールドは、オブジェクトの利用者がアクセス可能な部分であり、例えばポインタと非ポインタの2種類のデータを有する。ポインタは、メモリ領域上のある場所を参照する値であり、多くの言語処理系では,オブジェクトへのポインタはオブジェクトの先頭アドレスを参照する。非ポインタは、プログラミングにおいて、値そのものを利用するものであり、数値、文字、及び/又は真偽値を包含する。そこで、上記プロファイル不要のマーク付けはオブジェクトのヘッダ内の1ビットをフラグとして使用してよい。
【0056】
解除判定部230はまた、上記判定結果を、対応するクラス毎のプロファイル情報構造体又は対応する割り付け場所毎のプロファイル情報構造体に残す。より具体的には、解除判定部230は、アクセスされるオブジェクトのヘッダに埋め込まれたクラスIDをキーとして第2ハッシュ表を引き、対応するクラス毎のプロファイル情報構造体を取得する。そして解除判定部230は、プログラムの最適化に利用する性質を満たさないとの判定結果に対し、上記構造体の第2フィールドに格納された、最適化に利用する性質を有する割り付けられた全オブジェクトの全バイト数から、アクセスされるオブジェクトのバイト数を減算する。割り付け場所毎のプロファイル情報構造体の場合も同様にして処理を行う。但しこの場合、割り付け場所IDは、対応するオブジェクト毎のプロファイル情報構造体の第1フィールドから取得する。
【0057】
なお、上記処理において減算処理を行う場合、解除判定部230は、サンプリング頻度の更新の必要性を判定する。解除判定部230はまず、プロファイル情報格納部225に格納されるプロファイル情報に基づき、クラス又はオブジェクトの割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出する。より具体的には、解除判定部230は、全クラス毎のサンプリング情報構造体の各々又は全割り付け場所毎のサンプリング情報構造体の各々について、第1フィールドに格納された割り付けられた全オブジェクトのバイト数に対する、第2フィールドに格納された最適化が用いる性質を満たす割り付けられたオブジェクトの全バイト数を求めることにより上記割合を算出する。
【0058】
続いて解除判定部230は、クラス又はオブジェクトの割り付け場所ごとに求めた上記割合を、予め設定した所定の閾値と比較し、所定の閾値よりも算出した割合が小さいと判断したクラス又はオブジェクトの割り付け場所についてサンプリング頻度の更新が必要と判定する。所定の閾値は実験により求めることが出来るが、例えば1%などの数値を用いることができる。結果、サンプリング頻度の更新が必要と判定した場合、解除判定部230は、後述するサンプリング頻度更新部235を呼び出す。なお、解除判定部230は、上記一連の処理を、例えば実行プログラムの実行時においてなされるプロファイリングにおいて行う。
【0059】
サンプリング頻度更新部235は、解除判定部230により呼び出されると、解除判定部230が所定の閾値よりも算出した割合が小さいと判断したクラス又はオブジェクトの割り付け場所についてのサンプリング頻度をサンプリング頻度格納部240から読み出し、読み出した値を小さくしてサンプリング頻度格納部240に書き戻す。ここでサンプリング頻度は、所定の値を引いたり、所定の値で割ったりして小さくしてよい。但し、頻度をゼロにしてしまうとプロファイルの正確性が落ちることから、予め所定の下限を設けるのが好ましい。例えば、初期値に1/8MB(8MB割り付ける毎に1回サンプリング)を設定し、頻度を下げる際には現在のサンプリング頻度を毎回2で割るよう設定し、下限値に1/512MB(512MB割り付ける毎に1回サンプリング)を設定してよい。サンプリング頻度格納部240に格納される更新されたサンプリング頻度は、次回のサンプリングにおいてマーク設定部202がプロファイル対象を決定する際に参照される。なお、サンプリング頻度更新部235は、上記サンプリング頻度更新処理を、例えば実行プログラムの実行時においてなされるプロファイリングにおいて行う。
【0060】
解除部245は、プログラムの実行中に開始されたガーベジコレクションにおいて不使用オブジェクトを検出するために全てのポインタをスキャンする際に、オブジェクトにプロファイル不要のマークが設定されているか否かを判定する。そして解除部245は、オブジェクトにプロファイル不要のマークが設定されていると判定することを条件に、上記オブジェクトを指すポインタに付されたプロファイル対象のマークを外す。
【0061】
上記解除処理をプログラムの実行時においてなされるガーベジコレクションにおいて行うのは次の理由による。即ち、あるオブジェクトをプロファイル対象から外すためには該オブジェクトを指す全てのポインタのプロファイル対象のマークを外す必要がある。そうしなければ、同一のオブジェクトを指す異なる二つのポインタ値が存在することになり、ポインタの比較が正しく動作しなくなるからである。しかしながら、当該方法には、プロファイル不要のマークが付されてから次回のガーベジコレクションまで、オブジェクトへのアクセスが無駄にプロファイルされてしまうという問題がある。そこで、本発明では即時解除部250を設け、上記問題の改善を図った。
【0062】
即時解除部250は、プロファイラ120又はシグナルハンドラの呼び出しに応答して、即ち、プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトにプロファイル不要のマークが付されているか否かを判定する。続いて即時解除部250は、オブジェクトにプロファイル不要のマークが付されていると判定することを条件に、アクセスされる上記オブジェクトを指すポインタを格納するベースレジスタの値が、該アクセス以降に比較命令のオペランドとして用いられるか否かを判定する。そして即時解除部250は、ベースレジスタの値が比較命令のオペランドとして用いられないと判定することを条件に、上記オブジェクトを指すポインタからプロファイル対象のマークを外してベースレジスタに書き戻す。即時解除部250は、上記即時解除処理を、例えば実行対象プログラムの実行時においてなされるプロファイリングにおいて行う。
【0063】
ここで、オブジェクトにプロファイル不要のマークが付されている場合に、該オブジェクトを指すポインタに付されたプロファイル対象のマークの取り外しを、該ポインタを格納するベースレジスタの値が上記検出したアクセス以降に比較命令のオペランドとして用いられないことを条件として行うのは次の理由による。上述したように、あるオブジェクトをプロファイル対象から外すためには、該オブジェクトを指す全てのポインタのプロファイル対象のマークを外すことによって、同一のオブジェクトを指す異なる二つのポインタ値が存在することに起因するポインタ比較動作の不具合が生じないようにする必要がある。しかしながら、プロファイル対象のマークを外そうとするポインタが、ポインタの比較命令に用いられることがなければ、該ポインタについてプロファイル対象のマークを外したとしても上記不具合は生じない。そして結果として、少なくともプロファイル対象のマークを外したポインタを介したアクセスについては次回のガーベジコレクションまで無駄にプロファイルすることがないという利益が得られる。
【0064】
なお、即時解除部250は、ベースレジスタの値が比較命令のオペランドとして用いられるか否かの上記判定を、アドレス表格納部230に格納されたアドレス表を用いて行う。即ち、即時解除部250は、アドレス表を検索して、プロファイル不要のマークが付されたオブジェクトへのアクセスを指示するアクセス命令のアドレスが登録されているか否かを判定する。アクセス命令のアドレスがアドレス表に登録されている場合、即時解除部250は、ベースレジスタの値が以降のプログラムの実行において比較命令のオペランドとして用いられないと判定する。
【0065】
ここで図3A、Bを参照して、上記解除判定部230と即時解除部250の機能を組み込んだプロファイラと組み込まないプロファイルとで同じプログラムを実行しても一定の条件が満たされた場合にはプロファイリング回数が異なることを説明する。
【0066】
図3Aは、解除判定部230と即時解除部250の機能を持たないプロファイラを呼び出すプログラムの実行軌跡を示す。ブロック300でレジスタr5にポインタobject_pointerが設定される。ここでポインタobject_pointerには、プロファイル対象のマークが付されているものとする。続いて処理はブロック302へ進み、if文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。ポインタにはプロファイル対象のマークが付されているため、判定結果は真となり、プロファイラが呼び出されてプロファイリング処理306が実行される。
【0067】
図3Aに示すプロファイリング処理306は、1.レジスタr5に設定されたポインタが指す先のオブジェクトへアクセスする処理、2.アクセスしたオブジェクトのプロファイル情報を更新する処理、3.現在のアクセス命令の直後に戻る処理を含む。従って、ブロック302におけるアクセス命令「r5.field1への書き込み」に応じたプロファイラの呼び出しでは、レジスタr5に設定されたポインタが指すオブジェクトのプロファイル情報が、該オブジェクトのfield1への書き込みに基づいて更新される。そして処理は、アクセス命令「r5.field1への書き込み」の直後の「done_Label_1」へ戻る。
【0068】
続いて処理はブロック304へ進み、再びif文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。レジスタr5の値は更新されていないため、今回も判定結果は真となり、プロファイラが呼び出されてプロファイリング処理306が実行される。ブロック304におけるアクセス命令「r5.field2から読み込み」に応じたプロファイラの呼び出しでは、レジスタr5に設定されたポインタが指すオブジェクトのプロファイル情報が、該オブジェクトのfield2からの読み込みに基づいて更新される。そして処理は、アクセス命令「r5.field2から読み込み」の直後の「done_Label_2」へ戻る。
【0069】
以上のように、解除判定部230と即時解除部250の機能を有しないプロファイラの下では、ポインタは一度プロファイル対象のマークを付されると少なくとも次回のガーベジコレクションまで該マークを外されることはない。そのため、図3Aに示す例では、ブロック302とブロック304におけるレジスタr5を介したオブジェクトへのアクセスのいずれについてもプロファイラが呼び出され、プロファイリング処理306が実行される(実行軌跡を示す矢印308を参照)。
【0070】
図3Bは、解除判定部230と即時解除部250の機能を組み込んだプロファイラを呼び出すプログラムの実行軌跡を示す。なお、図3Bに示すプログラム(ブロック300〜ブロック304を含む)は、図3Aに示すプログラム(ブロック300〜ブロック304を含む)と同一のものであることに留意されたい。まず、ブロック300でレジスタr5に、プロファイル対象のマークが付されたポインタobject_pointerが設定される。続いて処理はブロック302へ進み、if文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。レジスタr5に設定されたポインタにはプロファイル対象のマークが付されているため、判定結果は真となり、プロファイラが呼び出されてプロファイリング処理310が実行される。
【0071】
図3Bに示すプロファイリング処理310は、1.レジスタr5に設定されたポインタが指す先のオブジェクトへアクセスする処理、2.オブジェクトにプロファイル不要のマークが付されているか否かを判定する処理、2−1.プロファイル不要のマークがオブジェクトに付されている場合に、現在のオブジェクトへのアクセスを指示するアクセス命令のアドレスをアドレス表で引く処理、2−2、アドレス表にヒットしたか否かを判定して、ヒットした場合にレジスタr5に入っているポインタを取り出してプロファイル対象のマークを外し、レジスタr5に書き戻す処理、2−3.プロファイル不要のマークがオブジェクトに付されていない場合に、オブジェクトのプロファイルを更新する処理、2−4.オブジェクトが最適化に利用する性質を満たさなくなっている場合に、オブジェクトにプロファイル不要のマークを付す処理を含む。なお、上記2−4の処理が、解除判定部230の機能に対応し、上記2、2−1、及び2−2の処理が、即時解除部250の機能に対応している。
【0072】
従って、ブロック302におけるアクセス命令「r5.field1への書き込み」に応じたプロファイラの呼び出しでは、レジスタr5に設定されたポインタが指すオブジェクトにプロファイル不要のマークが付されているか否かが判定される。ここでは、オブジェクトにはプロファイル不要のマークが付されており、かつ、アクセス命令「r5.field1への書き込み」のアドレスがアドレス表に登録され、アクセス命令「r5.field1への書き込み」以降の処理において、レジスタr5の値がポインタ比較命令のオペランドとして用いられないことが保証されているものとする。すると、プロファイリング処理310において、プロファイル対象のマークが外されたポインタがレジスタr5に書き戻され、処理は、アクセス命令「r5.field1への書き込み」の直後の「done_Label_1」へ戻る。
【0073】
続いて処理はブロック304へ進み、再びif文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。上述したようにプロファイリング処理310においてポインタはプロファイル対象のマークを外されているため、今度は判定結果は偽となり、プロファイラは呼び出されることなく、アクセス命令「r5.field2から読み込み」が実行される。
【0074】
以上のように、解除判定部230と即時解除部250の機能を組み込んだプロファイラの下では、ポインタは一度プロファイル対象のマークを付されても、その後ポインタが指すオブジェクトが最適化に利用する性質を有しなくなり、かつ、該ポインタを格納するレジスタの値が以降の処理においてポインタ比較命令に用いられることがないことが確認されると、上記プロファイル対象のマークは外される。そのため、図3Bに示す例では、上記条件が満たされた後のブロック304におけるレジスタr5を介したオブジェクトへのアクセスに対しては、プロファイラが呼び出されることがないことが示されており、これによってプロファイリング処理310が無駄に実行されることはない(実行軌跡を示す矢印312を参照)というメリットが得られている。
【0075】
図2に戻って、コード書き換え部255は、プロファイル対象であることを示すマークを付されたポインタを介してオブジェクトへのアクセスがあるとプロファイラが呼び出されるように、プロファイラの呼び出しを設定する。上述したように、コード書き換え部255は上記プロファイラの呼び出しの設定をコードの書き換えによって行う。より具体的には、コード書き換え部255は、実行対象のプログラムに含まれる全てのポインタ経由のオブジェクトへのアクセス命令の前に、プロファイル対象であることを示すマークの有無を判定するコードと、マークが付されているとの判定結果に対してプロファイラを呼び出すコードとを挿入する(図3Bのブロック302の1行目のif文と2行目のジャンプ命令gotoを参照)。なお、コード書き換え部255は、上記コード書き換え処理を、例えば実行対象プログラムである中間コードの部分の動的コンパイル処理において行う。
【0076】
次に図4乃至図7A、Bを参照して、プロファイル対象決定装置200の動作を説明する。図4は、本実施形態に係るプロファイル対象決定装置200の動作フローの一例を示す。図5は、図4に示すステップ410のメモリ管理部130による処理の詳細な動作フローの一例を示す。図6は、図4に示すステップ420のプロファイラ120による処理の詳細な動作フローの一例を示す。図7Aは、図4に示すステップ424の動的コンパイラ125による処理(手続き間解析及びエイリアス解析を利用するケース)の詳細な動作フローの一例を示す。図7Bは、図4に示すステップ424の動的コンパイラ125による処理(手続き間解析及びエイリアス解析を利用しないケース)の詳細な動作フローの一例を示す。
【0077】
図4に示すプロファイル対象決定装置200の動作フローはステップ400から開始し、実行部115は、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度を同じ所定の値で初期化する。続いて実行部115は、メモリ管理部130を呼び出して、プロファイラ120の呼び出しのためのページ保護機構を設定させる(ステップ402)。続いて実行部115は、実行対象プログラム(中間コード)の実行を開始して、次に実行しようとする命令を読み出す。
【0078】
続いて実行部115は、実行しようとする現在の命令がオブジェクトを割り付けるか否かを判定する(ステップ406)。現在の命令がオブジェクトを割り付けると判定した場合(ステップ406:YES)、実行部115はガーベジコレクションが必要であるか否かを判定する(ステップ408)。ガーベジコレクションが必要であると判定した場合(ステップ408:YES)、実行部115は、メモリ管理部130を呼び出して処理を実行させる。メモリ管理部130による処理の詳細は、図5を参照して後述する。
【0079】
メモリ管理部130による処理の後、続いて実行部115はサンプリング頻度格納部240に格納されたクラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づき、現在の命令によって割り付けたオブジェクトをサンプリングするか否か、即ちプロファイル対象とするか否かを判定する(ステップ412、414)。プロファイル対象とすると判定した場合(ステップ414:YES)、実行部115は、割り付けたオブジェクトを指すポインタにサンプリング対象であることを示すマークを設定し(ステップ416)、割り付けたオブジェクトに対応する所定のデータ構造のプロファイル情報を生成し、初期化し、プロファイル情報格納部225に格納する(ステップ417)。なお、所定のデータ構造のプロファイル情報とは、上述したオブジェクト毎のプロファイル情報構造体と、該当する場合は、対応するクラス毎のプロファイル情報構造体/割り付け場所毎のプロファイル情報構造体である。なお、後者のプロファイル情報構造体は該当する場合にのみ生成されるが、対応するクラス毎のプロファイル情報構造体/対応する割り付け場所毎のプロファイル情報構造体の弟1及び弟2フィールドに割り付けたオブジェクトのバイト数を加算する処理は、対応するオブジェクト毎のプロファイル情報構造体の生成、初期化の際に常になされることに留意されたい。
【0080】
ステップ417の後、ステップ406において現在の命令がオブジェクトを割り付けないと判定された場合(ステップ406:NO)、又はステップ414においてプロファイル対象としないと判定された場合(ステップ414:NO)、処理はステップ418へ進み、実行部115は、現在の命令はサンプリングされた、即ちプロファイル対象のオブジェクトへのアクセス命令であるか否かを判定する。プロファイル対象のオブジェクトへのアクセス命令であると判定した場合(ステップ418:YES)、実行部はプロファイラ120を呼び出して処理を実行させる(ステップ420)。プロファイラ120による処理の詳細は、図6を参照して後述する。
【0081】
ステップ420の後、又はステップ418において現在の命令がプロファイル対象のオブジェクトへのアクセス命令ではないと判定された場合(ステップ418:NO)、処理はステップ422へ進み、実行部115は、次に実行する中間コードの部分を動的にコンパイルする必要があるか否かを判定する。動的コンパイルが必要であると判定した場合(ステップ422:YES)、実行部は動的コンパイラ125を呼び出して処理を実行させる(ステップ424)。動的コンパイラ125による処理の詳細は、図7A、Bを参照して後述する。
【0082】
ステップ424の後、又はステップ422において動的コンパイルが必要でないと判定された場合(ステップ422:NO)、処理はステップ426へ進み、実行部115は、実行対象プログラムの実行が終了したか否かを判定する。実行対象プログラムの実行がまだ終了していない場合(ステップ426:NO)、処理はステップ404へ戻る。一方、プログラムの実行が終了した場合(ステップ426:YES)、プロファイル対象決定装置200の動作フローは終了する。
【0083】
図5に示すメモリ管理部130による処理の動作フローはステップ500から開始し、メモリ管理部130は、ヒープ領域に生成されている未だ使用中の全オブジェクトを検出するために、オブジェクト間のポインタによる参照関係を示すツリー構造をスキャンし、使用中のオブジェクトを指す全ポインタについて以下の一連の処理を繰り返す。メモリ管理部130はまず、現在のポインタが指すオブジェクトにプロファイル不要のマークが付されているか否かを判定する(ステップ502)。プロフィル不要のマークが付されている場合(ステップ502:YES)、メモリ管理部130は、現在のポインタからプロファイル対象のマークを外す(ステップ504)。
【0084】
一方、ステップ502においてプロファイル不要のマークが付されてない場合(ステップ502:NO)、又はステップ504から処理はステップ506へ進み、メモリ管理部130は、現在のポインタに対して、通常のガーベジコレクション処理を実行する。一例としてメモリ管理部130は、現在のポインタが指すオブジェクトに対応するマーク記憶領域にマークを付ける(マーク&スイープ法)。通常のガーベジコレクション処理のアルゴリズムは周知の技術であり、本発明の要旨ではないので、これ以上の詳細な説明は省略する。
【0085】
使用中のオブジェクトを指す全ポインタについて上記一連の処理が行われると、続いてメモリ管理部130は、全不使用のオブジェクトについて、プロファイル情報格納部225に格納された対応するオブジェクト毎のプロファイル情報構造体を破棄する。そして処理は終了する。
【0086】
図6に示すプロファイラ120による処理の動作フローはステップ600から開始し、プロファイラ120は、プロファイラ120呼び出しの要因となった現在のオブジェクト・アクセス命令におけるオブジェクトをアクセスする。続いてプロファイラ120は、アクセスしたオブジェクトにプロファイル不要のマークが付されているか否かを判定する(ステップ602)。
【0087】
プロファイル不要のマークが付されている場合(ステップ602:YES)、続いてプロファイラ120は、アドレス表格納部230に格納されているアドレス表を検索して(ステプ604)、現在のオブジェクト・アクセス命令のアドレスと一致するアドレスが記録されているか否かを判定する(ステップ606)。一致するアドレスが記録されている場合(ステップ606:YES)、プロファイラ120は、現在のオブジェクト・アクセス命令に用いられる現在のポインタを格納したベースレジスタにアクセスして現在のポインタからプロファイル対象のマークを外し、プロファイル対象のマークのないポインタを上記ベースレジスタに書き戻す(ステップ608)。
【0088】
一方、プロファイル不要のマークが付されていない場合(ステップ602:NO)、プロファイラ120は、現在のオブジェクト・アクセス命令によりアクセスされるオブジェクトについてプロファイル情報を収集し、プロファイル情報格納部225に格納される対応するプロファイル情報を更新する(ステップ610)。続いてプロファイラ120は、現在のオブジェクト・アクセス命令によるオブジェクトへのアクセスが、該オブジェクトが実行対象プログラムの最適化に利用する性質を満たなくなったと判断するための所定の条件を満たすか否かを判定する(ステップ612)。所定の条件が満たされると判定した場合(ステップ612:YES)、プロファイラ120は、現在のオブジェクト・アクセス命令によりアクセスされるオブジェクトにプロファイル不要のマークを付ける(ステップ614)。
【0089】
ステップ614から処理はステップ616へ進み、プロファイラ120は、プロファイル情報格納部225に格納されたプロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度を算出し、算出したサンプリング頻度でサンプリング頻度格納部240に格納される情報を更新する。ステップ616若しくはステップ608の後、又はステップ606において一致するアドレスが記録されていない場合(ステップ606:NO)若しくはステップ612において所定の条件が満たされないと判定された場合(ステップ612:NO)、処理は終了する。
【0090】
図7Aに示す動的コンパイラ125による処理の動作フローはステップ700から開始し、動的コンパイラ125は、次に実行しようとする実行対象プログラムのコード部分を最適化する。最適化の種類は複数存在し、それぞれのアルゴリズムは既知の技術であり本発明の要旨でもないので、ここでは詳細な説明を省略する。続いて動的コンパイラ125は、上記コード部分に含まれるオブジェクト・アクセス命令に用いられるポインタの値を格納する全ベースレジスタを検出し、検出した各ベースレジスタについてステップ702からステップ712までの一連の処理を繰り返す。
【0091】
まず動的コンパイラ125は、現在のベースレジスタの値が、対応するオブジェクト・アクセス命令以降において、手続き呼び出しへの引数として利用されているか否かを判定する(ステップ702)。手続き呼び出しへの引数として利用されていると判定した場合(ステップ702:YES)、続いて動的コンパイラ125は、呼び出される先の手続きについて、ステップ702からステップ712までの一連の解析処理と同様の処理を行う。
【0092】
ステップ702において手続き呼び出しへの引数として利用されていないと判定した場合(ステップ702:NO)、又はステップ704の後処理はステップ706へ進み、動的コンパイラ125は、現在のベースレジスタの値が、対応するオブジェクト・アクセス命令以降において、手続きの戻り値として利用されているか否かを判定する。手続きの戻り値として利用されていると判定した場合(ステップ706:YES)、続いて動的コンパイラ125は、呼び出し元の手続きについて、ステップ702からステップ712までの一連の解析処理と同様の処理を行う。
【0093】
ステップ706において手続きの戻り値として利用されていないと判定した場合(ステップ706:NO)、又はステップ708の後処理はステップ710へ進み、動的コンパイラ125は、エイリアス解析の結果を利用して、現在のベースレジスタ又は該ベースレジスタの値がコピーされた値が、ポインタの比較命令のオペランドとして用いられるか否かを判定する。ポインタの比較命令のオペランドとして用いられないと判定した場合(ステップ710:NO)、続いて動的コンパイラ125は、現在のベースレジスタの値をポインタとして用いるオブジェクト・アクセス命令のアドレスをアドレス表格納部215に格納されているアドレス表に登録する(ステップ712)。一方、ステップ710においてポインタの比較命令のオペランドとして用いられると判定した場合(ステップ710:YES)、現在のベースレジスタについての上記一連の処理は終了する。
【0094】
全ベースレジスタについてステップ702からステップ712の一連の処理が終了すると、続いて動的コンパイラ125は、コンパイル対象の上記コード部分に対し、プロファイラ120呼び出しのためのコードの書き換えを行う(ステップ714)。続いて、動的コンパイラ125は、コンパイル対象の上記コード部分をコンパイルし、ネイティブコードを生成する(ステップ716)。コンパイル処理のアルゴリズムは既知の技術であり、本発明の要旨ではないので詳細な説明は省略する。ステップ716の後処理は終了する。
【0095】
なお、図7Bに示す、手続き間解析及びエイリアス解析を利用しないケースにおける動的コンパイラ125による処理の動作フローは、図7Aに示す動作フローと次の点を除いて変わらないことから、説明を省略する。
・図7Aに示す動作フローにおけるステップ704及びステップ708を含まない。
・図7Aに示す動作フローにおけるステップ710に対応するステップ757では、エイリアス解析を利用せずに単にベースレジスタの値がポインタの比較命令のオペランドとして用いられるか否かを判定する。
・図7Aに示す動作フローにおけるステップ702、706、710にそれぞれ対応するステップ752、754、757、及びステップ756として新たに追加したメモリに書き込まれるか否かの判定
のいずれか1つにでも該当すると、ベースレジスタの値がポインタの比較命令に用いられる可能性があると保守的に判定し、直ちに現在のベースレジスタについての一連の処理を終了する。
【0096】
[実験]
1.実装
動作周波数最大4.7GHzのRISCプロセッサ(クアッドコア、2スレッドのSMTエンジン搭載のPOWER6(商標))と32GBのメイン・メモリをハードウエアとして備え、オペレーティング・システムとしてLinux(商標)2.6.18を用いるIBM社のJava(登録商標)仮想マシンに、本発明の実施形態に係るプロファイル対象決定プログラムを実装した。なお、実装したプロファイル対象決定プログラムは、オブジェクトの不変性、書き込み専用性、及び非アクセス性に基づく3つの最適化を同時に行うためにそれぞれの最適化についてプロファイル対象を決定するプログラムである。また、SPECjvm2008の中からオブジェクトを多く割り付ける6つのベンチマークプログラム(compiler.compiler、derby、serial、Ssunflow、xml.transform、xml.validation)を選択した。
【0097】
2.比較対象
実験は、以下に示す3つのサンプリング手法について行った。
1MB/NoOpt(従来手法):オブジェクトを1MB割り付ける毎に1つサンプリングする(サンプリング頻度は1種類かつ固定)。
64MB/NoOpt(従来手法):オブジェクトを64MB割り付ける毎に1つサンプリングする(サンプリング頻度は1種類かつ固定、サンプリング頻度を単純に下げる手法)。
1MB/Opt(本発明):クラス/オブジェクト割り付け場所ごとの可変のサンプリング頻度に初期値として、オブジェクトを1MB割り付ける毎に1つサンプリングするサンプリング頻度を設定する。
【0098】
3.評価基準
実験は、速度オーバーヘッドと、プロファイル精度の2つを評価基準として行った。速度オーバーヘッドについては、アクセス・プロファイルを全く取らない場合をベースラインとした。プロファイル精度については、オブジェクトの不変性に基づく最適化のためのプロファイリングを例に説明すると、次のような計算を行った。まず、オブジェクトの割り付け場所毎に、そこに割り付けられた全オブジェクトの合計バイト数に対する不変オブジェクトの合計バイト数の推定割合をプロファイル情報に基づいて算出する。それとは別に全オブジェクトの全アクセスをプロファイルすることで割り付け場所毎に真の割合を求める。推定割合と真の割合の差の絶対値(=誤差)を各割付場所で割り付けられた全オブジェクトの合計バイト数で加重平均する。残りの2つの最適化についても同様にして求めた。
【0099】
4.実験結果
図8は、速度オーバーヘッドについての実験結果を示す。また、図9Aから図9Cは、順に、オブジェクトの不変性に基づく最適化のためのプロファイリングにおけるプロファイ精度、オブジェクトの書き込み専用性に基づく最適化のためのプロファイリングにおけるプロファイ精度、オブジェクトの非アクセス性に基づく最適化のためのプロファイリングにおけるプロファイル精度についての実験結果を示す。図8に示されるように、1MB/NoOpt(従来手法)では、最大40%以上の速度オーバーヘッドがあった。また、図9Aから図9Cに示されるように、64MB/NoOpt(従来手法)では、プロファイル誤差が非常に大きかった。また、1MB/Opt(本発明)は、オブジェクトの非アクセス性に基づく最適化のためのプロファイリングにおけるプロファイル精度が最も高く、上記3つの最適化の中ではオブジェクトの非アクセス性に基づく最適化に対して最も効果を発揮することが分かった。
【0100】
以上、実施形態を用いて本発明の説明をしたが、本発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更又は改良を加えることが可能であることが当業者に明らかである。従って、そのような変更又は改良を加えた形態も当然に本発明の技術的範囲に含まれる。
【0101】
なお、特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における動作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り任意の順序で実現しうることに留意すべきである。また、前の処理の出力を後の処理で用いる場合でも、前の処理と後の処理の間に他の処理が入ることは可能である場合があること、又は間に他の処理が入るように記載されていても前の処理を後の処理の直前に行うよう変更することも可能である場合があることも留意されたい。特許請求の範囲、明細書、及び図面中の動作フローに関して、便宜上「まず、」、「次に、」、「続いて、」等を用いて説明したとしても、この順で実施することが必須であることを必ずしも意味するとは限らない。
【技術分野】
【0001】
本発明は、サンプリングを用いるプロファイリング技術に関し、より詳細には、プロファイリングによるプログラム実行時の速度オーバーヘッドを削減するための情報処理装置、プロファイル対象決定プログラム及び方法に関する。
【背景技術】
【0002】
多くのプログラムでは、メモリのヒープ領域に多数のオブジェクトが動的に割り付けられる。当該オブジェクト・フォーマットは、例えば現在のJava(登録商標)仮想マシン(Virtual Machine)実装においてプログラム実行を通じて固定されている。当該固定されたオブジェクト・フォーマットは、例えばヘッダ及びデータ・フィールドのレイアウト、並びにそれらのサイズである。ここで、メモリー・フットプリント(メモリ使用量)、必要メモリ帯域幅、キャッシュ・ミス、ガーベジコレクション(GC)頻度、及びGCオーバーヘッドを減少させることが、上記プログラムを実行するコンピュータのコストを減少させる上で有用である。
【0003】
そこでプログラム実行時にプロファイラによってオブジェクトへのアクセスに関する情報を取得しオブジェクトの性質を調べることによって、上記固定されたオブジェクト・フォーマットを上記コストが減少するように変形し、プログラムを最適化することが従来行われている。
【0004】
例えば、初期化の後は書込みがない又は書きこみ頻度が低いという性質を持ったオブジェクト(以下、「不変オブジェクト」という)が複数あった場合、内容が同じであればこれらのオブジェクトを単一のオブジェクトにまとめることができる。また、読み込みがない又は読み込み頻度が低いという性質を持つオブジェクト(以下、「書き込み専用オブジェクト」という)が見つかれば、該オブジェクトを圧縮できる。更にまた、配列要素の一部がアクセスされない配列オブジェクト(以下、非アクセスオブジェクト」という)が見つかれば、アクセスのない要素を削除できる。上記最適化により、メモリの節約によるGC頻度の低下や、キャッシュ使用効率の向上が図られる。
【0005】
上記プロファイリングでは、全てのオブジェクトへのアクセスについてプロファイルを取ると速度オーバーヘッドが非常に大きくなることから、オブジェクトのサンプリングが行われている。しかしながらサンプリングを用いても依然として速度オーバーヘッドは大きく、プログラムの種類によってはプロファイリングのために実行速度が40%以上遅くなる。一方で、速度オーバーヘッドを小さくするためにサンプリング頻度を単純に下げると、今度はプロファイルの精度が下がるという問題が生ずる。
【0006】
以下、本発明の先行技術調査において見つかった文献について説明する。
【0007】
特許文献1は、プロファイル情報又はユーザ指定情報をもとに選択したソース情報を入力し、そのソース情報を構文解析し、解析結果からソース情報に出現する手続き(親手続き)で呼び出される手続呼出し(子手続き)の属性を解析して手続き属性表に記憶し、インライン展開の際に子手続きの属性が手続き属性表に登録されていなければ親手続きに最適化不要をマークし、最適化不要がマークされている親手続きを除いて他の手続きを最適化する技術を開示する。かかる技術によれば、問題を生じる可能性のある最適化は自動的に抑止される。しかしながら、特許文献1に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【0008】
特許文献2は、中間形式データに、実行中の手続き内の変数に与えられる値で頻度が50%以上になりうる値とその出現回数とを最大2組まで記録する処理を付加して、一次プロファイル情報を取得し、続いて、中間形式データに、一次プロファイル情報の2つ値の出現回数と手続きの実行回数を記録する処理を付加して、最終プロファイル情報を取得し、最終プロファイル情報をもとに変数に対し出現頻度が50% 以上の値を求め、この値に関する手続きを最適化し、目的プログラムを生成する技術を開示する。かかる技術によれば、手続き中の変数に与えられる値の出現回数を誤りなく見積もることができ、特に、出現頻度が50%を超える値を確実に記録したプロファイル情報を出力することが可能となる。しかしながら、特許文献2に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【0009】
特許文献3は、記録媒体に記録されたコンパイル用プログラムである入力コードを、プロファイルデータを用いてコンパイルして一次目的コードを生成するコンパイル部と、一次目的コードをシミュレーションしプロファイルデータを生成するシミュレータとを備えるマイクロプロセッサ用目的コードの最適化装置において、コンパイル部が生成した一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、1命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、二次目的コードの命令コードを解析して命令コード実行を行うシミュレータを開示する。かかる技術によれば、ディスプレースメント範囲外データコードであっても、目的コード中のデータコードを再配置しデータへのアクセス方法を最適化するので、プログラムの実行速度を向上させることが可能となる。しかしながら、特許文献3に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【0010】
特許文献4は、コンパイラが生成した内部変数をレジスタ、メモリ等の機械資源に割り付ける資源割り付け部が割り付け、アセンブラコード生成部が命令列を出力すると、別名アクセス性解析部が、命令列内に含まれているメモリアクセス命令における別名アクセスの可能性の有無を割り付け資源情報に登録し、アセンブラ最適化部が割り付け情報を参照してアセンブラレベルの最適化を行う技術を開示する。かかる技術によれば、間接アドレス指定型のメモリアクセス命令の存在に起因する制約が緩和され、実行時間及びプログラムサイズの向上を図ることが可能となる。しかしながら、特許文献4に記載の技術は、サンプリングを用いたプロファイリング技術を改善するためのものではないため、プロファイリングによる速度オーバーヘッドを削減することはできない。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】特開2004−0102597号公報
【特許文献2】特開2005−0071135号公報
【特許文献3】特開2002−0304302号公報
【特許文献4】特開1999−0039167号公報
【発明の概要】
【発明が解決しようとする課題】
【0012】
この発明は、上記の問題点を解決するためになされたものであって、プロファイルの精度を下げることなく、プロファイリングによるプログラム実行時の速度オーバーヘッドを削減するための情報処理装置、プロファイル対象決定プログラム及び方法を提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明の発明者は、上記課題を解決するために研究し、最適化処理において参照するプロファイル情報には真に必要となるプロファイル情報とそうでないプロファイル情報とが存在することに着目した。即ち、最適化処理において重要なのはオブジェクトへの正確なアクセス数ではなく、不変性、書き込み専用性、非アクセス性等の最適化に利用可能なオブジェクトの性質である。従って、このような性質を示さないオブジェクトへのアクセスのプロファイルを省略すれば、プロファイルの精度を下げることなく速度オーバーヘッドを削減することが可能となる。そこで本発明者は更に研究を進め、その結果、同じクラスのオブジェクトや同じ割り付け場所で割り付けられたオブジェクトの性質は似ていることを利用して、クラス又は割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出された割合が低いクラス又は割り付け場所に対するサンプリング頻度を下げるというアイデアに想到した。
【0014】
即ち、上記課題を解決するために、本発明の第1の態様においては、サンプリング型プロファイラのためにプロファイル対象を決定するプログラムが提供される。該プログラムはコンピュータに、(a)プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するステップと、(b)格納された前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出するステップと、(c)算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるステップとを実行させる。
【0015】
ここで、前記プログラムの最適化に利用する性質を有するオブジェクトとは、初期化の後に書き込みがない又は書き込み頻度が低い不変オブジェクト、読み込みがない又は読み込み頻度が低い書き込み専用オブジェクト、アクセスされないフィールドを有する非アクセス・オブジェクトのいずれかであってよい。
【0016】
好ましくは、前記プロファイル対象に設定されたオブジェクトは、該オブジェクトを指すポインタに付されたプロファイル対象のマークによって識別される。そして上記プログラムは上記コンピュータに、
(d)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトが前記プログラムの最適化に利用する性質を満たすか否かを判定するステップと、(e)前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったことを条件に、前記オブジェクトにプロファイル不要のマークを付すステップと、(f)前記プログラムの実行中に開始されたガーベジ・コレクション処理において、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外すステップとを更に実行させる。
【0017】
上記ステップ(d)の判定において、好ましくは、検出した前記オブジェクトへのアクセスが、該オブジェクトの初期化後になされる書き込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する。これに加えて、又はこれに代えて、検出した前記オブジェクトへのアクセスが、該オブジェクトに対する読み込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定してもよい。更に上記に加えて、又は上記に代えて、検出した前記オブジェクトへのアクセスが、該アクセス以前にアクセスのない最後の前記オブジェクトのフィールドへのアクセスである場合(ここで「最後の前記オブジェクトのフィールド」とは、該フィールド以外に前記アクセス以前にアクセスのない前記オブジェクトのフィールドがないことを意味する)に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定してもよい。
【0018】
好ましくは、上記プログラムは上記コンピュータに、(g)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトに前記プロファイル不要のマークが付されているか否かを判定するステップと、(h)前記プロファイル不要のマークが付されているとの判定に応答して、アクセスされる前記オブジェクトを指すポインタを格納するレジスタの値が、該アクセス以降に比較命令のオペランドとして用いられるか否かを判定するステップと、(i)前記比較命令のオペランドとして用いられないとの判定に応答して、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外して前記レジスタに書き戻すステップとを更に実行させる。
【0019】
更に好ましくは、上記プログラムは上記コンピュータに、(j)前記プログラムの最適化処理において、前記プログラムに含まれる全てのオブジェクトへのアクセス命令に対し、該オブジェクトを指すポインタを格納するレジスタの値が、前記アクセス命令以降に比較命令のオペランドとして用いられるか否かを判定し、比較命令のオペランドとして用いられないとの判定に対し前記アクセス命令のアドレスを記録するステップを更に実行させる。そして前記ステップ(h)は、ステップ(j)において記録されたアドレスの中からステップ(g)において検出した前記アクセスを指示したアクセス命令のアドレスを検索することにより行われる。
【0020】
更にまた好ましくは、ステップ(j)は、手続き呼び出しへの引数、手続きの返り値、ポインタの比較命令のオペランド、及びメモリに書き込まれる値のいずれかとして前記レジスタの値が利用されることを条件に、前記レジスタの値が前記比較命令のオペランドとして用いられるとの判定を行う。
【0021】
以上、サンプリング型プロファイラのためにプロファイル対象を決定するプログラムとして本発明を説明した。しかし、本発明は、上記プログラムをインストールしたコンピュータにおいて実行されるプロファイル対象決定方法として把握することもできる。また、本発明は、上記プログラムをインストールしてプロファイル対象決定方法を実行する情報処理装置として把握することもできる。
【発明の効果】
【0022】
本発明では、同じクラスのオブジェクトや同じ割り付け場所で割り付けられたオブジェクトの性質は似ていることを利用して、クラス又は割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出された割合が低いクラス又は割り付け場所に対するサンプリング頻度を下げる。結果、プログラムの最適化に利用する性質を示さないオブジェクトへのアクセスのプロファイルのみを省略することができるようになり、プロファイルの精度を下げることなく速度オーバーヘッドを削減することが可能となった。本発明のその他の効果については、各実施の形態の記載から理解される。
【図面の簡単な説明】
【0023】
【図1A】本発明の実施形態に係るコンピュータ50のハードウェア構成の一例を示す。
【図1B】本発明の実施形態に係るコンピュータ50のソフトウェア構成の一例を示す。
【図2】本発明の実施形態に係るプロファイル対象決定装置200の機能構成を示す。
【図3A】マーク解除機能を有しないプロファイラ利用時のプログラム実行軌跡の一例を示す。
【図3B】マーク解除機能を有するプロファイラ利用時のプログラム実行軌跡の一例を示す。
【図4】本実施形態に係るプロファイル対象決定装置200の動作フローの一例を示す。
【図5】図4に示すステップ410のメモリ管理部130による処理の詳細な動作フローの一例を示す。
【図6】図4に示すステップ420のプロファイラ120の詳細な動作フローの一例を示す。
【図7A】図4に示すステップ424の動的コンパイラ125による処理の詳細な動作フローの一例を示す。
【図7B】図4に示すステップ424の動的コンパイラ125による他の処理の詳細な動作フローの一例を示す。
【図8】速度オーバーヘッドに関する比較実験結果を示す。
【図9A】不変性プロファイルにおける誤差に関する実験結果を示す。
【図9B】書き込み専用性プロファイルにおける誤差に関する実験結果を示す。
【図9C】非アクセス性プロファイルにおける誤差に関する実験結果を示す。
【発明を実施するための形態】
【0024】
以下、本発明の実施形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
【0025】
図1は、本発明の実施形態による情報処理装置としてのコンピュータ50のハードウェア構成の一例を示した図である。コンピュータ50は、バス2に接続されたメインCPU(中央処理装置)1とメイン・メモリ4を含んでいる。CPU1は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore i(商標)シリーズ、Core 2(商標)シリーズ、Atom(商標)シリーズ、Xeon(商標)シリーズ、Pentium(登録商標)シリーズ、Celeron(登録商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ又はSempron(商標)が使用されうる。
【0026】
またハードディスク装置13、30、及びCD−ROM装置26、29、フレキシブル・ディスク装置20、MO装置28、DVD装置31のようなリムーバブル・ストレージ(記録メディアを交換可能な外部記憶システム)がフレキシブル・ディスクコントローラ19、IDEコントローラ25、SCSIコントローラ27などを経由してバス2へ接続されている。フレキシブル・ディスク、MO、CD−ROM、DVD−ROMのような記憶メディアが、リムーバブル・ストレージに挿入される。
【0027】
これら記憶メディアやハードディスク装置13、30、ROM14には、オペレーティング・システム、J2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、その他のプログラム及びデータが、メイン・メモリ4にロード可能に記憶されている。更に、上記記憶メディアやハードディスク装置13、30、ROM14には、オペレーティング・システムと協働してCPU1に命令を与え、本発明を実施するためのコンピュータ・プログラムを記録することができる。即ち、上記説明した数々の記憶装置には、コンピュータ50にインストールされ、コンピュータ50を本発明の実施形態によるプロファイル対象決定装置200として機能させるプロファイル対象決定プログラムやデータを記録することができる。
【0028】
上記プロファイル対象決定プログラムは、マーク設定モジュールと、初期化モジュールと、呼び出し設定モジュールと、検証モジュールと、プロファイル情報収集モジュールと、解除判定モジュールと、サンプリング頻度更新モジュールと、解除モジュールと、即時解除モジュールと、コード書き換えモジュールとを含む。これらプログラム及びモジュールは、CPU1に働きかけて、コンピュータ50を、各々後述するマーク設定部202と、初期化部203と、呼び出し設定部205と、検証部210と、プロファイル情報収集部220と、解除判定部230と、サンプリング頻度更新部235と、解除部245と、即時解除部250と、コード書き換え部255としてそれぞれ機能させる。コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。
【0029】
コンピュータ50は、キーボード/マウス・コントローラ5を経由して、キーボード6やマウス7のような入力デバイスからの入力を受ける。コンピュータ50は、オーディオコントローラ21を経由して、マイク24からの入力を受け、またスピーカー23から音声を出力する。コンピュータ50は、視覚データをユーザに提示するための表示装置11に、グラフィックスコントローラ10を経由して接続される。コンピュータ50は、ネットワーク・アダプタ18(イーサネット(登録商標)・カードやトークンリング・カード)等を介してネットワークに接続し、他のコンピュータ等と通信を行うことが可能である。
【0030】
以上の説明により、コンピュータ50は、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、又は、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【0031】
図1Bは、本発明を実現するソフトウェアの構成を示すブロック図である。同図において、オペレーティング・システム105は、CPUやメモリを資源として管理し、時分割によるマルチスレッドの機能を実現する。仮想マシン110は、アプリケーション135とオペレーティング・システム105とのインタフェースを行うソフトウェアであり、アプリケーション135から見て仮想マシン以下の階層全体を例えばJava(登録商標)仮想マシン(Virtual Machine)として作用させる。仮想マシン110は、プログラムがバイトコード等の中間コードで与えられるときこれを解釈する実行部(インタープリタ)115と、その解釈に応じて呼び出されるプロファイラ120と、メモリ管理部130とを含む。また、仮想マシン110は好ましくはJITコンパイラ等の動的コンパイラ125を含み、バイトコードを実行時に動的に機械語にコンパイルしてネイティブコードを生成し、プログラムの実行を高速化する。
【0032】
次に図1Bに示す仮想マシンの機能の更なる詳細を説明する前に、従来のオブジェクト・サンプリングを用いるプロファイリングに基づく最適化処理について説明する。従来の最適化処理では、プロファイル情報が示すオブジェクトの性質に従い次のような処理が行われていた。
(1)初期化の後は書込みがない又は書きこみ頻度が低いという性質を持った不変オブジェクトが複数見つかった場合、内容が同じであればこれらのオブジェクトを単一のオブジェクトにまとめる。
(2)読み込みがない又は読み込み頻度が低いという性質を持つ書き込み専用オブジェクトが見つかった場合、該オブジェクトを圧縮する。
(3)配列要素の一部がアクセスされない非アクセスオブジェクトが見つかった場合、アクセスのない要素を削除する。
上記最適化処理により、メモリの節約によるGC頻度の低下や、キャッシュ使用効率の向上が図られていた。
【0033】
しかしながら上述したように、従来のオブジェクト・サンプリングを用いるプロファイリングは速度のオーバーヘッドをもたらす。そこで本発明者は、上記最適化処理ではオブジェクトへのアクセス回数ではなくオブジェクトの性質がキーとなること、また、同じクラスのオブジェクトや同じ割り付け場所で割り付けられたオブジェクトの性質は似ていることに着目して、クラス又は割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出された割合が低いクラス又は割り付け場所に対するサンプリング頻度を下げるというアイデアに想到した。本発明の実施形態に係るプロファイル対象決定装置200は、上記アイデアを組み込んで、最適化に真に必要とされるオブジェクトへのアクセスのみを対象としてプロファイル情報を収集できるようにプロファイル対象を決定する。以下、本発明の実施形態に係るプロファイル対象決定装置200の各構成要素の詳細を説明する。なお、上記(1)〜(3)の処理は説明のための例示であり、他のオブジェクトの性質に基づく最適化のためのプロファイリングに対し以下に説明する本発明を適用可能なことは言うまでもない。
【0034】
図2は、図1Aに示すコンピュータ50のハードウェア機能と図1Bに示すソフトウェア機能とを有する、本発明の実施形態に係るプロファイル対象決定装置200の機能構成を示す。本発明の実施形態に係るプロファイル対象決定装置200は、マーク設定部202と、初期化部203と、呼び出し設定部205と、検証部210と、プロファイル情報収集部220と、解除判定部230と、サンプリング頻度更新部235と、解除部245と、即時解除部250と、コード書き換え部255とを備える。更にプロファイル対象決定装置200は、検証部210の検証結果に基づき求められたオブジェクト・アクセス命令のアドレスを記録したアドレス表を格納するアドレス表格納部215と、プロファイル情報収集部220により収集されたプロファイル情報を格納するプロファイル情報格納部225と、サンプリング頻度更新部235により更新されたサンプリング頻度を格納するサンプリング頻度格納部240とを備える。なお、上記マーク設定部202及び初期化部203の機能は、図1Bに示す実行部115の機能として実装してよい。また、呼び出し設定部205及び解除部245の機能は図1Bに示すメモリ管理部130の機能として実装してよい。また、検証部210、アドレス表格納部215及びコード書き換え部255の機能は、図1Bに示す動的コンパイラ125の機能として実装してよい。また、プロファイル情報収集部220、プロファイル情報格納部225、解除判定部230、サンプリング頻度更新部235、サンプリング頻度格納部240及び即時解除部250は、図1Bに示すプロファイラ120の機能として実装してよい。
【0035】
マーク設定部202は、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づき、割り付けたオブジェクトをプロファイル対象とするか否かを決定し、プロファイル対象とすると決定したオブジェクトに対しては、該オブジェクトを指すポインタにプロファイル対象であることを示すマークを設定する。
【0036】
ここでサンプリング頻度とは、例えば1MB割り付けるたび1つオブジェクトをサンプリングするといったようなサンプリングを行う頻度である。従来は固定された値のサンプリング頻度が1つだけ用いられていた。本発明では、かかるサンプリング頻度をクラス又はオブジェクトの割り付け場所ごとに用意し、最適化に利用する性質を有さないオブジェクトに対してはプロファイリングが行われないようにすることを可能とした。
【0037】
なお、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度は、実行対象プログラムの実行開始前又は直後に同じ所定の値で初期化しておく。また、上記マークの設定は、一例として、ポインタの空いている下1ビットをフラグとして利用したり、ポインタにオフセットを足してヒープ領域外を指すようにしたりして行ってよい。なお、マーク設定部202は、上記マークの設定を、例えばオブジェクトの割り付けにおいて、又は、ガーベジコレクションにおいて行う。
【0038】
初期化部203は、後述するプロファイル情報収集部220が、収集したプロファイル情報を所定のデータ構造でプロファイル情報格納部225に格納できるように、予め所定のデータ構造のプロファイル情報を生成し初期化してプロファイル情報格納部225に格納しておく。ここで所定のデータ構造とは、収集したプロファイル情報を効率よく格納するための構造であり、オブジェクト毎のプロファイル情報構造体と、クラス毎のプロファイル情報構造体又はオブジェクトの割り付け場所毎のプロファイル情報構造体とを含む。
【0039】
オブジェクト毎のプロファイル情報構造体は、オブジェクトの割り付け場所を識別する識別子(以下、「割り付け場所ID」という)を格納する第1フィールドと、最適化に利用する性質をオブジェクトが有するか否かを判定するのに用いる情報を格納する第2フィールドとを有する。第2フィールドに格納する情報は、適用する最適化の種類によって異なるため、ここでは、オブジェクトの不変性、書き込み専用性、及び非アクセス性を利用する最適化を例として説明する。
【0040】
オブジェクトの不変性を利用する最適化では、初期化の後は書込みがない又は書きこみ頻度が低いという性質を持つオブジェクトを識別する必要がある。そこで、上記第2フィールドには、これまでに一度でもreadがあったか否かを示す1ビット(該ビットには、初期値として「readがない」を示す1ビットを設定)を格納する。また、オブジェクトの書き込み専用性を利用する最適化では、読み込みがない又は読み込み頻度が低いという性質を持つオブジェクトを識別する必要がある。しかし該性質は、readのためのアクセスがあった時点で直ちにオブジェクトは書き込み専用性を有さないと判断できる。従って、本ケースでは上記第2フィールドに格納する情報はない(但し、読み込み頻度が低いとする場合は読み込み回数をカウントするカウンタ値や読み込み頻度情報を格納してもよい)。また、オブジェクトの非アクセス性を利用する最適化では、配列要素の一部がアクセスされない配列オブジェクトを識別する必要がある。そこで、上記第2フィールドには、オブジェクト中の各バイトにつきアクセスがあったか否かを示す1ビット(各ビットには、初期値として「アクセスがない」を示す1ビットを設定)を格納する。
【0041】
初期化部203は、オブジェクト毎のプロファイル情報構造体の生成及び初期化を、該オブジェクトの割り付け時に、該オブジェクトがプロファイル対象に決定されることを条件に行う。初期化部203は、空のハッシュ表(以下、「第1ハッシュ表」という)を生成してプロファイル情報格納部225に格納しておき、オブジェクト毎のプロファイル情報構造体を生成すると、これをオブジェクトの先頭アドレスをキーとして第1ハッシュ表に登録する。このとき初期化部203は、オブジェクトの割り付け場所のIDをオブジェクト毎のプロファイル情報構造体の第1フィールドに格納する。オブジェクト毎のプロファイル情報構造体の第2フィールドの値の初期化は、適用する最適化の種類によって異なり、オブジェクトの不変性、書き込み専用性、及び非アクセス性を利用する最適化オブジェクについては上述した通りである。
【0042】
クラス毎のプロファイル情報構造体は、割り付けられた該クラスのオブジェクトの全バイト数を格納する第1フィールド(該フィールドには、初期値として0を設定)と、割り付けられた該クラスのオブジェクトのうち最適化に利用する性質を有する全オブジェクトの全バイト数を格納する第2フィールド(該フィールドには、初期値として0を設定)とを有する。例えばオブジェクトの不変性を利用する最適化では、注目するクラスをクラスAとすると、クラスAのプロファイル情報構造体の第1フィールドに、クラスAに割り付けられたオブジェクトの全バイト数を格納し、クラスAのプロファイル情報構造体の第2フィールドに、クラスAに割り付けられた不変オブジェクトの全バイト数を格納する。なお、割り付け場所毎のプロファイル情報構造体についても同様である。即ち、割り付け場所毎のプロファイル情報構造体は、該割り付け場所に割り付けられたオブジェクトの全バイト数を格納する第1フィールド(該フィールドには、初期値として0を設定)と、該割り付け場所に割り付けられたオブジェクトのうち最適化に利用する性質を有する全オブジェクトの全バイト数を格納する第2フィールド(該フィールドには、初期値として0を設定)とを有する。
【0043】
初期化部203は、クラス毎のプロファイル情報構造体又は割り付け場所毎のプロファイル情報構造体の生成及び初期化を、オブジェクトの割り付け時に、該オブジェクトがプロファイル対象に決定されること、かつ、割り付けたオブジェクトがそのオブジェクトのクラスの最初のオブジェクトであること又はその割り付け場所で割り付けられた最初のオブジェクトであることを条件に行う。初期化部203は、空のハッシュ表(以下、「第2ハッシュ表」という)又は空の配列(以下、「第1配列」という)を生成してプロファイル情報格納部225に格納しておき、クラス毎のプロファイル情報構造体を生成すると該構造体を、クラスを識別する識別子(以下、「クラスID」という)をキーとして第2ハッシュ表に、又はクラスIDを添え字として第1配列に登録する。同様に初期化部203は、割り付け場所毎のプロファイル情報構造体を生成すると該構造体を、割り付け場所IDをキーとして第2ハッシュ表に、又は割り付け場所IDを添え字として第1配列に登録する。なお、初期化部203は、上記クラス毎のプロファイル情報構造体又は割り付け場所毎のプロファイル情報構造体の生成及び初期化とは別に、オブジェクト毎のプロファイル情報構造体の生成及び初期化を行う際に(対応するクラス毎のプロファイル情報構造体又は対応する割り付け場所毎のプロファイル情報構造体が生成されていない場合はその生成後に)、対応するクラス毎のプロファイル情報構造体又は対応する割り付け場所毎のプロファイル情報構造体の第1フィールド及び第2フィールドのそれぞれに、割り付けたオブジェクトのバイト数を加算する。
【0044】
呼び出し設定部205は、プロファイル対象であることを示すマークを付されたポインタを介してオブジェクトへのアクセスがあるとプロファイラ120が呼び出されるように、プロファイラ120の呼び出しを設定する。該設定には、実行対象のプログラムのコード(中間コード)を書き換えて行う方法と、ページ保護機構を利用する方法とがある。呼び出し設定部205は後者を採用し、前者については、後述するコード書き換え部255が採用する。従って、プロファイル対象決定装置200は、呼び出し設定部205と後述するコード書き換え部255のうち少なくとも一方を含めばよいことに留意されたい。
【0045】
ページ保護機構を利用する呼び出し設定部205は、より具体的には、プロファイル対象であることを示すマークを付されたポインタが指す先のページを読み書き禁止に設定し、該ポインタを介してオブジェクトがアクセスされるとシグナルハンドラが呼び出されるようにする。この場合、シグナルハンドラがプロファイラ120としてプロファイル情報の収集を行う。なお、呼び出し設定部205は、上記プロファイラ120の呼び出し設定を、例えば実行対象プログラムの実行開始前、又は直後に行う。
【0046】
検証部210は、実行対象プログラムである中間コードに含まれるオブジェクトへのアクセス命令に用いられるポインタの値を格納する全ベースレジスタの各々について、その値が上記アクセス命令の後においてポインタの比較命令のオペランドとして用いられているか否かを検証する。検証部210は、検証の結果、ポインタの比較命令に用いられないと判定したアクセス命令について、そのアクセス命令のアドレスをアドレス表格納部230に格納されるアドレス表に登録する。なお、アドレス表は、実行対象プログラムの実行開始前又は直後に空の値で初期化しておく。またアドレス表が大きくなりすぎるような場合は、頻繁に実行される手続き内の命令のアドレスだけを登録するようにしてもよい。アドレス表の利用方法については後述する。
【0047】
検証部210は、より具体的には、実行対象プログラムである中間コードを解析し、オブジェクトへのポインタを格納するベースレジスタの値が、手続き呼び出しへの引数、手続きの返り値、ポインタの比較命令のオペランド、及びメモリに書き込まれる値のいずれかとして利用されるか否かを判定する。好ましくは、検証部210は、手続き間解析を利用し、上記ベースレジスタの値が手続き呼び出しへの引数又は手続きの返り値として利用される場合、呼び出される先の手続き又は呼び出し元の手続きにおいて上記解析及び判定を繰り返す。また好ましくは、検証部210は、エイリアス解析を利用し、エイリアス解析の結果を用いてベースレジスタもしくはそれがコピーされた値がポインタの比較命令のオペランドとして利用されるか否かを判定する。
【0048】
なお、上記手続き間解析及びエイリアス解析を利用しない場合、検証部210は、上記オブジェクトへのポインタを格納するベースレジスタの値が、手続き呼び出しへの引数、手続きの返り値、メモリに書き込まれる値、及びポインタの比較命令のオペランドのいずれか1つにでも利用される場合、ベースレジスタの値がポインタの比較命令に用いられる可能性があると保守的に判定する。なお、検証部210は、上記検証及びアドレス表作成処理を、例えば実行対象プログラムである中間コードの部分の動的コンパイル処理において行う。
【0049】
プロファイル情報収集部220は、プロファイラ120又はシグナルハンドラの呼び出しに応答して、即ち、プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報の収集を行う。プロファイル情報収集部220は、収集したプロファイル情報を、上記説明したプロファイル情報の構造体に格納する。より具体的には、プロファイル情報収集部210は、アクセスされたオブジェクトの先頭アドレスをキーにして第1ハッシュ表を引き、上記オブジェクトに対応するオブジェクト毎のプロファイル情報構造体を得る。そしてプロファイル情報収集部220は、取得したオブジェクト毎のプロファイル情報構造体の第2フィールドに、最適化が利用する性質を上記アクセスされたオブジェクトが満たすか否かを判定するのに必要な情報を格納する。
【0050】
例えばオブジェクトの不変性を利用する最適化の場合、プロファイル情報収集部220は、現在のアクセスがreadのためのアクセスであれば、第2フィールドに格納される1ビットを立ててreadのためのアクセスがあったことを示し、現在のアクセスがwriteのためのアクセスであれば、何もしない。オブジェクトの書き込み専用性を利用する最適化の場合、上述したように、プロファイル情報収集部220は第2フィールドには何も格納しない。オブジェクトの非アクセス性を利用する最適化の場合、プロファイル情報収集部220は、アクセスのあったオブジェクトのバイトに対応するビットを立てる。なお、プロファイル情報収集部220は、上記プロファイル情報収集処理を、例えば実行プログラムの実行時においてなされるプロファイリングにおいて行う。プロファイル情報収集部220は、収集したプロファイル情報の格納処理が終わると、解除判定部230を呼び出す。
【0051】
解除判定部230は、プロファイル情報収集部220から呼び出されると、プロファイル情報格納部225に格納されるプロファイル情報に基づき、アクセスされるオブジェクトがプログラムの最適化に利用する性質を満たすか否かを判定する。そして解除判定部230は、オブジェクトがプログラムの最適化に利用する性質を満たさないと判定することを条件に、該オブジェクトにプロファイル不要のマークを設定する。これは、オブジェクトがプログラムの最適化に利用する性質を満たさない又は満たさなくなった場合には、それ以上プロファイルする価値がないためである。なお、解除判定部230は、対応するオブジェクト毎のプロファイル情報構造体へのポインタをプロファイル情報収集部220から受け取ってよく、あるいは、現在のアクセスされたオブジェクトの先頭アドレスをキーにして第1ハッシュ表を引くことにより取得してもよい。
【0052】
ここで、オブジェクトの不変性を利用する最適化を適用している場合、解除判定部230は、検出したオブジェクトへのアクセスが、該オブジェクトの初期化後になされる書き込みのためのアクセスであることを条件に、オブジェクトがプログラムの最適化に利用する性質を満たさなくなったと判定する。上記条件は、具体的には、取得した対応するオブジェクト毎のプロファイル情報構造体の第2フィールドのフラグの値がこれまでに1度でもreadがあったことを示す「1」となっており、かつ、現在のアクセスがwriteのためのアクセスである場合に満たされる。
【0053】
また、オブジェクトの書き込み専用性を利用する最適化を適用している場合、解除判定部230は、検出したオブジェクトへのアクセスが、該オブジェクトに対する読み込みのためのアクセスであることを条件に、オブジェクトがプログラムの最適化に利用する性質を満たさなくなったと判定する。上記条件は、具体的には、現在のアクセスがreadのためのアクセスである場合に満たされる。
【0054】
また、オブジェクトの非アクセス性を利用する最適化を適用している場合、解除判定部230は、検出したオブジェクトへのアクセスが、該アクセス以前にアクセスのない最後のオブジェクトのフィールドへのアクセスであることを条件に、オブジェクトがプログラムの最適化に利用する性質を満たさなくなったと判定する。上記条件は、具体的には、取得した対応するオブジェクト毎のプロファイル情報の第2フィールドの全フラグの値が、アクセスがあったことを示す「1」となっている場合に満たされる。
【0055】
オブジェクトへのプロファイル不要のマーク付けは、オブジェクトのヘッダを利用してよい。即ち、
オブジェクトは、典型的には、ヘッダ及び少なくとも1のフィールドを含む。ヘッダは、オブジェクト内に埋め込まれた、オブジェクト自体の情報を保持する部分であり、例えばオブジェクトのクラスID及びオブジェクトのサイズを含む。フィールドは、オブジェクトの利用者がアクセス可能な部分であり、例えばポインタと非ポインタの2種類のデータを有する。ポインタは、メモリ領域上のある場所を参照する値であり、多くの言語処理系では,オブジェクトへのポインタはオブジェクトの先頭アドレスを参照する。非ポインタは、プログラミングにおいて、値そのものを利用するものであり、数値、文字、及び/又は真偽値を包含する。そこで、上記プロファイル不要のマーク付けはオブジェクトのヘッダ内の1ビットをフラグとして使用してよい。
【0056】
解除判定部230はまた、上記判定結果を、対応するクラス毎のプロファイル情報構造体又は対応する割り付け場所毎のプロファイル情報構造体に残す。より具体的には、解除判定部230は、アクセスされるオブジェクトのヘッダに埋め込まれたクラスIDをキーとして第2ハッシュ表を引き、対応するクラス毎のプロファイル情報構造体を取得する。そして解除判定部230は、プログラムの最適化に利用する性質を満たさないとの判定結果に対し、上記構造体の第2フィールドに格納された、最適化に利用する性質を有する割り付けられた全オブジェクトの全バイト数から、アクセスされるオブジェクトのバイト数を減算する。割り付け場所毎のプロファイル情報構造体の場合も同様にして処理を行う。但しこの場合、割り付け場所IDは、対応するオブジェクト毎のプロファイル情報構造体の第1フィールドから取得する。
【0057】
なお、上記処理において減算処理を行う場合、解除判定部230は、サンプリング頻度の更新の必要性を判定する。解除判定部230はまず、プロファイル情報格納部225に格納されるプロファイル情報に基づき、クラス又はオブジェクトの割り付け場所ごとに、プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出する。より具体的には、解除判定部230は、全クラス毎のサンプリング情報構造体の各々又は全割り付け場所毎のサンプリング情報構造体の各々について、第1フィールドに格納された割り付けられた全オブジェクトのバイト数に対する、第2フィールドに格納された最適化が用いる性質を満たす割り付けられたオブジェクトの全バイト数を求めることにより上記割合を算出する。
【0058】
続いて解除判定部230は、クラス又はオブジェクトの割り付け場所ごとに求めた上記割合を、予め設定した所定の閾値と比較し、所定の閾値よりも算出した割合が小さいと判断したクラス又はオブジェクトの割り付け場所についてサンプリング頻度の更新が必要と判定する。所定の閾値は実験により求めることが出来るが、例えば1%などの数値を用いることができる。結果、サンプリング頻度の更新が必要と判定した場合、解除判定部230は、後述するサンプリング頻度更新部235を呼び出す。なお、解除判定部230は、上記一連の処理を、例えば実行プログラムの実行時においてなされるプロファイリングにおいて行う。
【0059】
サンプリング頻度更新部235は、解除判定部230により呼び出されると、解除判定部230が所定の閾値よりも算出した割合が小さいと判断したクラス又はオブジェクトの割り付け場所についてのサンプリング頻度をサンプリング頻度格納部240から読み出し、読み出した値を小さくしてサンプリング頻度格納部240に書き戻す。ここでサンプリング頻度は、所定の値を引いたり、所定の値で割ったりして小さくしてよい。但し、頻度をゼロにしてしまうとプロファイルの正確性が落ちることから、予め所定の下限を設けるのが好ましい。例えば、初期値に1/8MB(8MB割り付ける毎に1回サンプリング)を設定し、頻度を下げる際には現在のサンプリング頻度を毎回2で割るよう設定し、下限値に1/512MB(512MB割り付ける毎に1回サンプリング)を設定してよい。サンプリング頻度格納部240に格納される更新されたサンプリング頻度は、次回のサンプリングにおいてマーク設定部202がプロファイル対象を決定する際に参照される。なお、サンプリング頻度更新部235は、上記サンプリング頻度更新処理を、例えば実行プログラムの実行時においてなされるプロファイリングにおいて行う。
【0060】
解除部245は、プログラムの実行中に開始されたガーベジコレクションにおいて不使用オブジェクトを検出するために全てのポインタをスキャンする際に、オブジェクトにプロファイル不要のマークが設定されているか否かを判定する。そして解除部245は、オブジェクトにプロファイル不要のマークが設定されていると判定することを条件に、上記オブジェクトを指すポインタに付されたプロファイル対象のマークを外す。
【0061】
上記解除処理をプログラムの実行時においてなされるガーベジコレクションにおいて行うのは次の理由による。即ち、あるオブジェクトをプロファイル対象から外すためには該オブジェクトを指す全てのポインタのプロファイル対象のマークを外す必要がある。そうしなければ、同一のオブジェクトを指す異なる二つのポインタ値が存在することになり、ポインタの比較が正しく動作しなくなるからである。しかしながら、当該方法には、プロファイル不要のマークが付されてから次回のガーベジコレクションまで、オブジェクトへのアクセスが無駄にプロファイルされてしまうという問題がある。そこで、本発明では即時解除部250を設け、上記問題の改善を図った。
【0062】
即時解除部250は、プロファイラ120又はシグナルハンドラの呼び出しに応答して、即ち、プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトにプロファイル不要のマークが付されているか否かを判定する。続いて即時解除部250は、オブジェクトにプロファイル不要のマークが付されていると判定することを条件に、アクセスされる上記オブジェクトを指すポインタを格納するベースレジスタの値が、該アクセス以降に比較命令のオペランドとして用いられるか否かを判定する。そして即時解除部250は、ベースレジスタの値が比較命令のオペランドとして用いられないと判定することを条件に、上記オブジェクトを指すポインタからプロファイル対象のマークを外してベースレジスタに書き戻す。即時解除部250は、上記即時解除処理を、例えば実行対象プログラムの実行時においてなされるプロファイリングにおいて行う。
【0063】
ここで、オブジェクトにプロファイル不要のマークが付されている場合に、該オブジェクトを指すポインタに付されたプロファイル対象のマークの取り外しを、該ポインタを格納するベースレジスタの値が上記検出したアクセス以降に比較命令のオペランドとして用いられないことを条件として行うのは次の理由による。上述したように、あるオブジェクトをプロファイル対象から外すためには、該オブジェクトを指す全てのポインタのプロファイル対象のマークを外すことによって、同一のオブジェクトを指す異なる二つのポインタ値が存在することに起因するポインタ比較動作の不具合が生じないようにする必要がある。しかしながら、プロファイル対象のマークを外そうとするポインタが、ポインタの比較命令に用いられることがなければ、該ポインタについてプロファイル対象のマークを外したとしても上記不具合は生じない。そして結果として、少なくともプロファイル対象のマークを外したポインタを介したアクセスについては次回のガーベジコレクションまで無駄にプロファイルすることがないという利益が得られる。
【0064】
なお、即時解除部250は、ベースレジスタの値が比較命令のオペランドとして用いられるか否かの上記判定を、アドレス表格納部230に格納されたアドレス表を用いて行う。即ち、即時解除部250は、アドレス表を検索して、プロファイル不要のマークが付されたオブジェクトへのアクセスを指示するアクセス命令のアドレスが登録されているか否かを判定する。アクセス命令のアドレスがアドレス表に登録されている場合、即時解除部250は、ベースレジスタの値が以降のプログラムの実行において比較命令のオペランドとして用いられないと判定する。
【0065】
ここで図3A、Bを参照して、上記解除判定部230と即時解除部250の機能を組み込んだプロファイラと組み込まないプロファイルとで同じプログラムを実行しても一定の条件が満たされた場合にはプロファイリング回数が異なることを説明する。
【0066】
図3Aは、解除判定部230と即時解除部250の機能を持たないプロファイラを呼び出すプログラムの実行軌跡を示す。ブロック300でレジスタr5にポインタobject_pointerが設定される。ここでポインタobject_pointerには、プロファイル対象のマークが付されているものとする。続いて処理はブロック302へ進み、if文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。ポインタにはプロファイル対象のマークが付されているため、判定結果は真となり、プロファイラが呼び出されてプロファイリング処理306が実行される。
【0067】
図3Aに示すプロファイリング処理306は、1.レジスタr5に設定されたポインタが指す先のオブジェクトへアクセスする処理、2.アクセスしたオブジェクトのプロファイル情報を更新する処理、3.現在のアクセス命令の直後に戻る処理を含む。従って、ブロック302におけるアクセス命令「r5.field1への書き込み」に応じたプロファイラの呼び出しでは、レジスタr5に設定されたポインタが指すオブジェクトのプロファイル情報が、該オブジェクトのfield1への書き込みに基づいて更新される。そして処理は、アクセス命令「r5.field1への書き込み」の直後の「done_Label_1」へ戻る。
【0068】
続いて処理はブロック304へ進み、再びif文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。レジスタr5の値は更新されていないため、今回も判定結果は真となり、プロファイラが呼び出されてプロファイリング処理306が実行される。ブロック304におけるアクセス命令「r5.field2から読み込み」に応じたプロファイラの呼び出しでは、レジスタr5に設定されたポインタが指すオブジェクトのプロファイル情報が、該オブジェクトのfield2からの読み込みに基づいて更新される。そして処理は、アクセス命令「r5.field2から読み込み」の直後の「done_Label_2」へ戻る。
【0069】
以上のように、解除判定部230と即時解除部250の機能を有しないプロファイラの下では、ポインタは一度プロファイル対象のマークを付されると少なくとも次回のガーベジコレクションまで該マークを外されることはない。そのため、図3Aに示す例では、ブロック302とブロック304におけるレジスタr5を介したオブジェクトへのアクセスのいずれについてもプロファイラが呼び出され、プロファイリング処理306が実行される(実行軌跡を示す矢印308を参照)。
【0070】
図3Bは、解除判定部230と即時解除部250の機能を組み込んだプロファイラを呼び出すプログラムの実行軌跡を示す。なお、図3Bに示すプログラム(ブロック300〜ブロック304を含む)は、図3Aに示すプログラム(ブロック300〜ブロック304を含む)と同一のものであることに留意されたい。まず、ブロック300でレジスタr5に、プロファイル対象のマークが付されたポインタobject_pointerが設定される。続いて処理はブロック302へ進み、if文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。レジスタr5に設定されたポインタにはプロファイル対象のマークが付されているため、判定結果は真となり、プロファイラが呼び出されてプロファイリング処理310が実行される。
【0071】
図3Bに示すプロファイリング処理310は、1.レジスタr5に設定されたポインタが指す先のオブジェクトへアクセスする処理、2.オブジェクトにプロファイル不要のマークが付されているか否かを判定する処理、2−1.プロファイル不要のマークがオブジェクトに付されている場合に、現在のオブジェクトへのアクセスを指示するアクセス命令のアドレスをアドレス表で引く処理、2−2、アドレス表にヒットしたか否かを判定して、ヒットした場合にレジスタr5に入っているポインタを取り出してプロファイル対象のマークを外し、レジスタr5に書き戻す処理、2−3.プロファイル不要のマークがオブジェクトに付されていない場合に、オブジェクトのプロファイルを更新する処理、2−4.オブジェクトが最適化に利用する性質を満たさなくなっている場合に、オブジェクトにプロファイル不要のマークを付す処理を含む。なお、上記2−4の処理が、解除判定部230の機能に対応し、上記2、2−1、及び2−2の処理が、即時解除部250の機能に対応している。
【0072】
従って、ブロック302におけるアクセス命令「r5.field1への書き込み」に応じたプロファイラの呼び出しでは、レジスタr5に設定されたポインタが指すオブジェクトにプロファイル不要のマークが付されているか否かが判定される。ここでは、オブジェクトにはプロファイル不要のマークが付されており、かつ、アクセス命令「r5.field1への書き込み」のアドレスがアドレス表に登録され、アクセス命令「r5.field1への書き込み」以降の処理において、レジスタr5の値がポインタ比較命令のオペランドとして用いられないことが保証されているものとする。すると、プロファイリング処理310において、プロファイル対象のマークが外されたポインタがレジスタr5に書き戻され、処理は、アクセス命令「r5.field1への書き込み」の直後の「done_Label_1」へ戻る。
【0073】
続いて処理はブロック304へ進み、再びif文によりレジスタr5に設定されたポインタがプロファイル対象のマーク付きポインタであるか否かが判定される。上述したようにプロファイリング処理310においてポインタはプロファイル対象のマークを外されているため、今度は判定結果は偽となり、プロファイラは呼び出されることなく、アクセス命令「r5.field2から読み込み」が実行される。
【0074】
以上のように、解除判定部230と即時解除部250の機能を組み込んだプロファイラの下では、ポインタは一度プロファイル対象のマークを付されても、その後ポインタが指すオブジェクトが最適化に利用する性質を有しなくなり、かつ、該ポインタを格納するレジスタの値が以降の処理においてポインタ比較命令に用いられることがないことが確認されると、上記プロファイル対象のマークは外される。そのため、図3Bに示す例では、上記条件が満たされた後のブロック304におけるレジスタr5を介したオブジェクトへのアクセスに対しては、プロファイラが呼び出されることがないことが示されており、これによってプロファイリング処理310が無駄に実行されることはない(実行軌跡を示す矢印312を参照)というメリットが得られている。
【0075】
図2に戻って、コード書き換え部255は、プロファイル対象であることを示すマークを付されたポインタを介してオブジェクトへのアクセスがあるとプロファイラが呼び出されるように、プロファイラの呼び出しを設定する。上述したように、コード書き換え部255は上記プロファイラの呼び出しの設定をコードの書き換えによって行う。より具体的には、コード書き換え部255は、実行対象のプログラムに含まれる全てのポインタ経由のオブジェクトへのアクセス命令の前に、プロファイル対象であることを示すマークの有無を判定するコードと、マークが付されているとの判定結果に対してプロファイラを呼び出すコードとを挿入する(図3Bのブロック302の1行目のif文と2行目のジャンプ命令gotoを参照)。なお、コード書き換え部255は、上記コード書き換え処理を、例えば実行対象プログラムである中間コードの部分の動的コンパイル処理において行う。
【0076】
次に図4乃至図7A、Bを参照して、プロファイル対象決定装置200の動作を説明する。図4は、本実施形態に係るプロファイル対象決定装置200の動作フローの一例を示す。図5は、図4に示すステップ410のメモリ管理部130による処理の詳細な動作フローの一例を示す。図6は、図4に示すステップ420のプロファイラ120による処理の詳細な動作フローの一例を示す。図7Aは、図4に示すステップ424の動的コンパイラ125による処理(手続き間解析及びエイリアス解析を利用するケース)の詳細な動作フローの一例を示す。図7Bは、図4に示すステップ424の動的コンパイラ125による処理(手続き間解析及びエイリアス解析を利用しないケース)の詳細な動作フローの一例を示す。
【0077】
図4に示すプロファイル対象決定装置200の動作フローはステップ400から開始し、実行部115は、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度を同じ所定の値で初期化する。続いて実行部115は、メモリ管理部130を呼び出して、プロファイラ120の呼び出しのためのページ保護機構を設定させる(ステップ402)。続いて実行部115は、実行対象プログラム(中間コード)の実行を開始して、次に実行しようとする命令を読み出す。
【0078】
続いて実行部115は、実行しようとする現在の命令がオブジェクトを割り付けるか否かを判定する(ステップ406)。現在の命令がオブジェクトを割り付けると判定した場合(ステップ406:YES)、実行部115はガーベジコレクションが必要であるか否かを判定する(ステップ408)。ガーベジコレクションが必要であると判定した場合(ステップ408:YES)、実行部115は、メモリ管理部130を呼び出して処理を実行させる。メモリ管理部130による処理の詳細は、図5を参照して後述する。
【0079】
メモリ管理部130による処理の後、続いて実行部115はサンプリング頻度格納部240に格納されたクラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づき、現在の命令によって割り付けたオブジェクトをサンプリングするか否か、即ちプロファイル対象とするか否かを判定する(ステップ412、414)。プロファイル対象とすると判定した場合(ステップ414:YES)、実行部115は、割り付けたオブジェクトを指すポインタにサンプリング対象であることを示すマークを設定し(ステップ416)、割り付けたオブジェクトに対応する所定のデータ構造のプロファイル情報を生成し、初期化し、プロファイル情報格納部225に格納する(ステップ417)。なお、所定のデータ構造のプロファイル情報とは、上述したオブジェクト毎のプロファイル情報構造体と、該当する場合は、対応するクラス毎のプロファイル情報構造体/割り付け場所毎のプロファイル情報構造体である。なお、後者のプロファイル情報構造体は該当する場合にのみ生成されるが、対応するクラス毎のプロファイル情報構造体/対応する割り付け場所毎のプロファイル情報構造体の弟1及び弟2フィールドに割り付けたオブジェクトのバイト数を加算する処理は、対応するオブジェクト毎のプロファイル情報構造体の生成、初期化の際に常になされることに留意されたい。
【0080】
ステップ417の後、ステップ406において現在の命令がオブジェクトを割り付けないと判定された場合(ステップ406:NO)、又はステップ414においてプロファイル対象としないと判定された場合(ステップ414:NO)、処理はステップ418へ進み、実行部115は、現在の命令はサンプリングされた、即ちプロファイル対象のオブジェクトへのアクセス命令であるか否かを判定する。プロファイル対象のオブジェクトへのアクセス命令であると判定した場合(ステップ418:YES)、実行部はプロファイラ120を呼び出して処理を実行させる(ステップ420)。プロファイラ120による処理の詳細は、図6を参照して後述する。
【0081】
ステップ420の後、又はステップ418において現在の命令がプロファイル対象のオブジェクトへのアクセス命令ではないと判定された場合(ステップ418:NO)、処理はステップ422へ進み、実行部115は、次に実行する中間コードの部分を動的にコンパイルする必要があるか否かを判定する。動的コンパイルが必要であると判定した場合(ステップ422:YES)、実行部は動的コンパイラ125を呼び出して処理を実行させる(ステップ424)。動的コンパイラ125による処理の詳細は、図7A、Bを参照して後述する。
【0082】
ステップ424の後、又はステップ422において動的コンパイルが必要でないと判定された場合(ステップ422:NO)、処理はステップ426へ進み、実行部115は、実行対象プログラムの実行が終了したか否かを判定する。実行対象プログラムの実行がまだ終了していない場合(ステップ426:NO)、処理はステップ404へ戻る。一方、プログラムの実行が終了した場合(ステップ426:YES)、プロファイル対象決定装置200の動作フローは終了する。
【0083】
図5に示すメモリ管理部130による処理の動作フローはステップ500から開始し、メモリ管理部130は、ヒープ領域に生成されている未だ使用中の全オブジェクトを検出するために、オブジェクト間のポインタによる参照関係を示すツリー構造をスキャンし、使用中のオブジェクトを指す全ポインタについて以下の一連の処理を繰り返す。メモリ管理部130はまず、現在のポインタが指すオブジェクトにプロファイル不要のマークが付されているか否かを判定する(ステップ502)。プロフィル不要のマークが付されている場合(ステップ502:YES)、メモリ管理部130は、現在のポインタからプロファイル対象のマークを外す(ステップ504)。
【0084】
一方、ステップ502においてプロファイル不要のマークが付されてない場合(ステップ502:NO)、又はステップ504から処理はステップ506へ進み、メモリ管理部130は、現在のポインタに対して、通常のガーベジコレクション処理を実行する。一例としてメモリ管理部130は、現在のポインタが指すオブジェクトに対応するマーク記憶領域にマークを付ける(マーク&スイープ法)。通常のガーベジコレクション処理のアルゴリズムは周知の技術であり、本発明の要旨ではないので、これ以上の詳細な説明は省略する。
【0085】
使用中のオブジェクトを指す全ポインタについて上記一連の処理が行われると、続いてメモリ管理部130は、全不使用のオブジェクトについて、プロファイル情報格納部225に格納された対応するオブジェクト毎のプロファイル情報構造体を破棄する。そして処理は終了する。
【0086】
図6に示すプロファイラ120による処理の動作フローはステップ600から開始し、プロファイラ120は、プロファイラ120呼び出しの要因となった現在のオブジェクト・アクセス命令におけるオブジェクトをアクセスする。続いてプロファイラ120は、アクセスしたオブジェクトにプロファイル不要のマークが付されているか否かを判定する(ステップ602)。
【0087】
プロファイル不要のマークが付されている場合(ステップ602:YES)、続いてプロファイラ120は、アドレス表格納部230に格納されているアドレス表を検索して(ステプ604)、現在のオブジェクト・アクセス命令のアドレスと一致するアドレスが記録されているか否かを判定する(ステップ606)。一致するアドレスが記録されている場合(ステップ606:YES)、プロファイラ120は、現在のオブジェクト・アクセス命令に用いられる現在のポインタを格納したベースレジスタにアクセスして現在のポインタからプロファイル対象のマークを外し、プロファイル対象のマークのないポインタを上記ベースレジスタに書き戻す(ステップ608)。
【0088】
一方、プロファイル不要のマークが付されていない場合(ステップ602:NO)、プロファイラ120は、現在のオブジェクト・アクセス命令によりアクセスされるオブジェクトについてプロファイル情報を収集し、プロファイル情報格納部225に格納される対応するプロファイル情報を更新する(ステップ610)。続いてプロファイラ120は、現在のオブジェクト・アクセス命令によるオブジェクトへのアクセスが、該オブジェクトが実行対象プログラムの最適化に利用する性質を満たなくなったと判断するための所定の条件を満たすか否かを判定する(ステップ612)。所定の条件が満たされると判定した場合(ステップ612:YES)、プロファイラ120は、現在のオブジェクト・アクセス命令によりアクセスされるオブジェクトにプロファイル不要のマークを付ける(ステップ614)。
【0089】
ステップ614から処理はステップ616へ進み、プロファイラ120は、プロファイル情報格納部225に格納されたプロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度を算出し、算出したサンプリング頻度でサンプリング頻度格納部240に格納される情報を更新する。ステップ616若しくはステップ608の後、又はステップ606において一致するアドレスが記録されていない場合(ステップ606:NO)若しくはステップ612において所定の条件が満たされないと判定された場合(ステップ612:NO)、処理は終了する。
【0090】
図7Aに示す動的コンパイラ125による処理の動作フローはステップ700から開始し、動的コンパイラ125は、次に実行しようとする実行対象プログラムのコード部分を最適化する。最適化の種類は複数存在し、それぞれのアルゴリズムは既知の技術であり本発明の要旨でもないので、ここでは詳細な説明を省略する。続いて動的コンパイラ125は、上記コード部分に含まれるオブジェクト・アクセス命令に用いられるポインタの値を格納する全ベースレジスタを検出し、検出した各ベースレジスタについてステップ702からステップ712までの一連の処理を繰り返す。
【0091】
まず動的コンパイラ125は、現在のベースレジスタの値が、対応するオブジェクト・アクセス命令以降において、手続き呼び出しへの引数として利用されているか否かを判定する(ステップ702)。手続き呼び出しへの引数として利用されていると判定した場合(ステップ702:YES)、続いて動的コンパイラ125は、呼び出される先の手続きについて、ステップ702からステップ712までの一連の解析処理と同様の処理を行う。
【0092】
ステップ702において手続き呼び出しへの引数として利用されていないと判定した場合(ステップ702:NO)、又はステップ704の後処理はステップ706へ進み、動的コンパイラ125は、現在のベースレジスタの値が、対応するオブジェクト・アクセス命令以降において、手続きの戻り値として利用されているか否かを判定する。手続きの戻り値として利用されていると判定した場合(ステップ706:YES)、続いて動的コンパイラ125は、呼び出し元の手続きについて、ステップ702からステップ712までの一連の解析処理と同様の処理を行う。
【0093】
ステップ706において手続きの戻り値として利用されていないと判定した場合(ステップ706:NO)、又はステップ708の後処理はステップ710へ進み、動的コンパイラ125は、エイリアス解析の結果を利用して、現在のベースレジスタ又は該ベースレジスタの値がコピーされた値が、ポインタの比較命令のオペランドとして用いられるか否かを判定する。ポインタの比較命令のオペランドとして用いられないと判定した場合(ステップ710:NO)、続いて動的コンパイラ125は、現在のベースレジスタの値をポインタとして用いるオブジェクト・アクセス命令のアドレスをアドレス表格納部215に格納されているアドレス表に登録する(ステップ712)。一方、ステップ710においてポインタの比較命令のオペランドとして用いられると判定した場合(ステップ710:YES)、現在のベースレジスタについての上記一連の処理は終了する。
【0094】
全ベースレジスタについてステップ702からステップ712の一連の処理が終了すると、続いて動的コンパイラ125は、コンパイル対象の上記コード部分に対し、プロファイラ120呼び出しのためのコードの書き換えを行う(ステップ714)。続いて、動的コンパイラ125は、コンパイル対象の上記コード部分をコンパイルし、ネイティブコードを生成する(ステップ716)。コンパイル処理のアルゴリズムは既知の技術であり、本発明の要旨ではないので詳細な説明は省略する。ステップ716の後処理は終了する。
【0095】
なお、図7Bに示す、手続き間解析及びエイリアス解析を利用しないケースにおける動的コンパイラ125による処理の動作フローは、図7Aに示す動作フローと次の点を除いて変わらないことから、説明を省略する。
・図7Aに示す動作フローにおけるステップ704及びステップ708を含まない。
・図7Aに示す動作フローにおけるステップ710に対応するステップ757では、エイリアス解析を利用せずに単にベースレジスタの値がポインタの比較命令のオペランドとして用いられるか否かを判定する。
・図7Aに示す動作フローにおけるステップ702、706、710にそれぞれ対応するステップ752、754、757、及びステップ756として新たに追加したメモリに書き込まれるか否かの判定
のいずれか1つにでも該当すると、ベースレジスタの値がポインタの比較命令に用いられる可能性があると保守的に判定し、直ちに現在のベースレジスタについての一連の処理を終了する。
【0096】
[実験]
1.実装
動作周波数最大4.7GHzのRISCプロセッサ(クアッドコア、2スレッドのSMTエンジン搭載のPOWER6(商標))と32GBのメイン・メモリをハードウエアとして備え、オペレーティング・システムとしてLinux(商標)2.6.18を用いるIBM社のJava(登録商標)仮想マシンに、本発明の実施形態に係るプロファイル対象決定プログラムを実装した。なお、実装したプロファイル対象決定プログラムは、オブジェクトの不変性、書き込み専用性、及び非アクセス性に基づく3つの最適化を同時に行うためにそれぞれの最適化についてプロファイル対象を決定するプログラムである。また、SPECjvm2008の中からオブジェクトを多く割り付ける6つのベンチマークプログラム(compiler.compiler、derby、serial、Ssunflow、xml.transform、xml.validation)を選択した。
【0097】
2.比較対象
実験は、以下に示す3つのサンプリング手法について行った。
1MB/NoOpt(従来手法):オブジェクトを1MB割り付ける毎に1つサンプリングする(サンプリング頻度は1種類かつ固定)。
64MB/NoOpt(従来手法):オブジェクトを64MB割り付ける毎に1つサンプリングする(サンプリング頻度は1種類かつ固定、サンプリング頻度を単純に下げる手法)。
1MB/Opt(本発明):クラス/オブジェクト割り付け場所ごとの可変のサンプリング頻度に初期値として、オブジェクトを1MB割り付ける毎に1つサンプリングするサンプリング頻度を設定する。
【0098】
3.評価基準
実験は、速度オーバーヘッドと、プロファイル精度の2つを評価基準として行った。速度オーバーヘッドについては、アクセス・プロファイルを全く取らない場合をベースラインとした。プロファイル精度については、オブジェクトの不変性に基づく最適化のためのプロファイリングを例に説明すると、次のような計算を行った。まず、オブジェクトの割り付け場所毎に、そこに割り付けられた全オブジェクトの合計バイト数に対する不変オブジェクトの合計バイト数の推定割合をプロファイル情報に基づいて算出する。それとは別に全オブジェクトの全アクセスをプロファイルすることで割り付け場所毎に真の割合を求める。推定割合と真の割合の差の絶対値(=誤差)を各割付場所で割り付けられた全オブジェクトの合計バイト数で加重平均する。残りの2つの最適化についても同様にして求めた。
【0099】
4.実験結果
図8は、速度オーバーヘッドについての実験結果を示す。また、図9Aから図9Cは、順に、オブジェクトの不変性に基づく最適化のためのプロファイリングにおけるプロファイ精度、オブジェクトの書き込み専用性に基づく最適化のためのプロファイリングにおけるプロファイ精度、オブジェクトの非アクセス性に基づく最適化のためのプロファイリングにおけるプロファイル精度についての実験結果を示す。図8に示されるように、1MB/NoOpt(従来手法)では、最大40%以上の速度オーバーヘッドがあった。また、図9Aから図9Cに示されるように、64MB/NoOpt(従来手法)では、プロファイル誤差が非常に大きかった。また、1MB/Opt(本発明)は、オブジェクトの非アクセス性に基づく最適化のためのプロファイリングにおけるプロファイル精度が最も高く、上記3つの最適化の中ではオブジェクトの非アクセス性に基づく最適化に対して最も効果を発揮することが分かった。
【0100】
以上、実施形態を用いて本発明の説明をしたが、本発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更又は改良を加えることが可能であることが当業者に明らかである。従って、そのような変更又は改良を加えた形態も当然に本発明の技術的範囲に含まれる。
【0101】
なお、特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における動作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り任意の順序で実現しうることに留意すべきである。また、前の処理の出力を後の処理で用いる場合でも、前の処理と後の処理の間に他の処理が入ることは可能である場合があること、又は間に他の処理が入るように記載されていても前の処理を後の処理の直前に行うよう変更することも可能である場合があることも留意されたい。特許請求の範囲、明細書、及び図面中の動作フローに関して、便宜上「まず、」、「次に、」、「続いて、」等を用いて説明したとしても、この順で実施することが必須であることを必ずしも意味するとは限らない。
【特許請求の範囲】
【請求項1】
サンプリング型プロファイラのためにプロファイル対象を決定するプログラムであって、該プログラムはコンピュータに、
(a)プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するステップと、
(b)格納された前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出するステップと、
(c)算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるステップと、
を実行させる前記プロファイル対象決定プログラム。
【請求項2】
ステップ(b)において、前記プログラムの最適化に利用する性質を有するオブジェクトとは、初期化の後に書き込みがない又は書き込み頻度が低い不変オブジェクトである、請求項1に記載のプロファイル対象決定プログラム。
【請求項3】
ステップ(b)において、前記プログラムの最適化に利用する性質を有するオブジェクトとは、読み込みがない又は読み込み頻度が低い書き込み専用オブジェクトである、請求項1に記載のプロファイル対象決定プログラム。
【請求項4】
ステップ(b)において、前記プログラムの最適化に利用する性質を有するオブジェクトとは、アクセスされないフィールドを有する非アクセス・オブジェクトである、請求項1に記載のプロファイル対象決定プログラム。
【請求項5】
前記プロファイル対象に設定されたオブジェクトは、該オブジェクトを指すポインタに付されたプロファイル対象のマークによって識別され、
(d)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトが前記プログラムの最適化に利用する性質を満たすか否かを判定するステップと、
(e)前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったことを条件に、前記オブジェクトにプロファイル不要のマークを付すステップと、
(f)前記プログラムの実行中に開始されたガーベッジ・コレクション処理において、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外すステップとを更に前記コンピュータに実行させる、請求項1に記載のプロファイル対象決定プログラム。
【請求項6】
ステップ(d)において、検出した前記オブジェクトへのアクセスが、該オブジェクトの初期化後になされる書き込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する、請求項5に記載のプロファイル対象決定プログラム。
【請求項7】
ステップ(d)において、検出した前記オブジェクトへのアクセスが、該オブジェクトに対する読み込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する、請求項5に記載のプロファイル対象決定プログラム。
【請求項8】
ステップ(d)において、検出した前記オブジェクトへのアクセスが、該アクセス以前にアクセスのない最後の前記オブジェクトのフィールドへのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する、請求項5に記載のプロファイル対象決定プログラム。
【請求項9】
(g)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトに前記プロファイル不要のマークが付されているか否かを判定するステップと、
(h)前記プロファイル不要のマークが付されているとの判定に応答して、アクセスされる前記オブジェクトを指すポインタを格納するレジスタの値が、該アクセス以降に比較命令のオペランドとして用いられるか否かを判定するステップと、
(i)前記比較命令のオペランドとして用いられないとの判定に応答して、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外して前記レジスタに書き戻すステップとを更に前記コンピュータに実行させる、請求項5に記載のプロファイル対象決定プログラム。
【請求項10】
(j)前記プログラムの最適化処理において、前記プログラムに含まれる全てのオブジェクトへのアクセス命令に対し、該オブジェクトを指すポインタを格納するレジスタの値が、前記アクセス命令以降に比較命令のオペランドとして用いられるか否かを判定し、比較命令のオペランドとして用いられないとの判定に対し前記アクセス命令のアドレスを記録するステップを更に前記コンピュータに実行させ、前記ステップ(h)は、ステップ(j)において記録されたアドレスの中からステップ(g)において検出した前記アクセスを指示したアクセス命令のアドレスを検索することにより行われる、請求項9に記載のプロファイル対象決定プログラム。
【請求項11】
ステップ(j)は、手続き呼び出しへの引数、手続きの返り値、ポインタの比較命令のオペランド、及びメモリに書き込まれる値のいずれかとして前記レジスタの値が利用されることを条件に、前記レジスタの値が前記比較命令のオペランドとして用いられるとの判定を行うステップを含む、請求項10に記載のプロファイル対象決定プログラム。
【請求項12】
情報処理装置おいてサンプリング型プロファイラのためにプロファイル対象を決定する方法であって、 (a)前記情報処理装置が、プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するステップと、
(b)前記情報処理装置が、格納された前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出するステップと、
(c)前記情報処理装置が、算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるステップと、
を含むプロファイル対象決定方法。
【請求項13】
サンプリング型プロファイラのためにプロファイル対象を決定する情報処理装置であって、
プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するプロファイル情報収集部と、
前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるサンプリング頻度更新部と、
を含むプロファイル対象決定装置。
【請求項1】
サンプリング型プロファイラのためにプロファイル対象を決定するプログラムであって、該プログラムはコンピュータに、
(a)プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するステップと、
(b)格納された前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出するステップと、
(c)算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるステップと、
を実行させる前記プロファイル対象決定プログラム。
【請求項2】
ステップ(b)において、前記プログラムの最適化に利用する性質を有するオブジェクトとは、初期化の後に書き込みがない又は書き込み頻度が低い不変オブジェクトである、請求項1に記載のプロファイル対象決定プログラム。
【請求項3】
ステップ(b)において、前記プログラムの最適化に利用する性質を有するオブジェクトとは、読み込みがない又は読み込み頻度が低い書き込み専用オブジェクトである、請求項1に記載のプロファイル対象決定プログラム。
【請求項4】
ステップ(b)において、前記プログラムの最適化に利用する性質を有するオブジェクトとは、アクセスされないフィールドを有する非アクセス・オブジェクトである、請求項1に記載のプロファイル対象決定プログラム。
【請求項5】
前記プロファイル対象に設定されたオブジェクトは、該オブジェクトを指すポインタに付されたプロファイル対象のマークによって識別され、
(d)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトが前記プログラムの最適化に利用する性質を満たすか否かを判定するステップと、
(e)前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったことを条件に、前記オブジェクトにプロファイル不要のマークを付すステップと、
(f)前記プログラムの実行中に開始されたガーベッジ・コレクション処理において、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外すステップとを更に前記コンピュータに実行させる、請求項1に記載のプロファイル対象決定プログラム。
【請求項6】
ステップ(d)において、検出した前記オブジェクトへのアクセスが、該オブジェクトの初期化後になされる書き込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する、請求項5に記載のプロファイル対象決定プログラム。
【請求項7】
ステップ(d)において、検出した前記オブジェクトへのアクセスが、該オブジェクトに対する読み込みのためのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する、請求項5に記載のプロファイル対象決定プログラム。
【請求項8】
ステップ(d)において、検出した前記オブジェクトへのアクセスが、該アクセス以前にアクセスのない最後の前記オブジェクトのフィールドへのアクセスである場合に、前記オブジェクトが前記プログラムの最適化に利用する性質を満たさなくなったと判定する、請求項5に記載のプロファイル対象決定プログラム。
【請求項9】
(g)前記プロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該オブジェクトに前記プロファイル不要のマークが付されているか否かを判定するステップと、
(h)前記プロファイル不要のマークが付されているとの判定に応答して、アクセスされる前記オブジェクトを指すポインタを格納するレジスタの値が、該アクセス以降に比較命令のオペランドとして用いられるか否かを判定するステップと、
(i)前記比較命令のオペランドとして用いられないとの判定に応答して、前記プロファイル不要のマークを付されたオブジェクトを指すポインタに付された前記プロファイル対象のマークを外して前記レジスタに書き戻すステップとを更に前記コンピュータに実行させる、請求項5に記載のプロファイル対象決定プログラム。
【請求項10】
(j)前記プログラムの最適化処理において、前記プログラムに含まれる全てのオブジェクトへのアクセス命令に対し、該オブジェクトを指すポインタを格納するレジスタの値が、前記アクセス命令以降に比較命令のオペランドとして用いられるか否かを判定し、比較命令のオペランドとして用いられないとの判定に対し前記アクセス命令のアドレスを記録するステップを更に前記コンピュータに実行させ、前記ステップ(h)は、ステップ(j)において記録されたアドレスの中からステップ(g)において検出した前記アクセスを指示したアクセス命令のアドレスを検索することにより行われる、請求項9に記載のプロファイル対象決定プログラム。
【請求項11】
ステップ(j)は、手続き呼び出しへの引数、手続きの返り値、ポインタの比較命令のオペランド、及びメモリに書き込まれる値のいずれかとして前記レジスタの値が利用されることを条件に、前記レジスタの値が前記比較命令のオペランドとして用いられるとの判定を行うステップを含む、請求項10に記載のプロファイル対象決定プログラム。
【請求項12】
情報処理装置おいてサンプリング型プロファイラのためにプロファイル対象を決定する方法であって、 (a)前記情報処理装置が、プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するステップと、
(b)前記情報処理装置が、格納された前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出するステップと、
(c)前記情報処理装置が、算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるステップと、
を含むプロファイル対象決定方法。
【請求項13】
サンプリング型プロファイラのためにプロファイル対象を決定する情報処理装置であって、
プログラムの実行中に、クラス又はオブジェクトの割り付け場所ごとのサンプリング頻度に基づきプロファイル対象に設定されたオブジェクトへのアクセスを検出することに応答して、該アクセスに関するプロファイル情報を格納するプロファイル情報収集部と、
前記プロファイル情報に基づいて、クラス又はオブジェクトの割り付け場所ごとに、前記プログラムの最適化に利用する性質を有するオブジェクトを割り付けられた割合を算出し、算出した前記割合が所定の閾値以下であるクラス又はオブジェクトの割り付け場所についての前記サンプリング頻度を下げるサンプリング頻度更新部と、
を含むプロファイル対象決定装置。
【図1A】
【図1B】
【図2】
【図3A】
【図3B】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図8】
【図9A】
【図9B】
【図9C】
【図1B】
【図2】
【図3A】
【図3B】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図8】
【図9A】
【図9B】
【図9C】
【公開番号】特開2013−105256(P2013−105256A)
【公開日】平成25年5月30日(2013.5.30)
【国際特許分類】
【出願番号】特願2011−247635(P2011−247635)
【出願日】平成23年11月11日(2011.11.11)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【Fターム(参考)】
【公開日】平成25年5月30日(2013.5.30)
【国際特許分類】
【出願日】平成23年11月11日(2011.11.11)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【Fターム(参考)】
[ Back to top ]