JP5473768B2 - マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム - Google Patents

マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム Download PDF

Info

Publication number
JP5473768B2
JP5473768B2 JP2010109001A JP2010109001A JP5473768B2 JP 5473768 B2 JP5473768 B2 JP 5473768B2 JP 2010109001 A JP2010109001 A JP 2010109001A JP 2010109001 A JP2010109001 A JP 2010109001A JP 5473768 B2 JP5473768 B2 JP 5473768B2
Authority
JP
Japan
Prior art keywords
code
application
profile data
regions
bad
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.)
Active
Application number
JP2010109001A
Other languages
English (en)
Other versions
JP2011022993A (ja
Inventor
ヤオチン・ガオ
ラウル・エステバン・シルベラ
ロシュ・ジョージズ・アーシャンボー
グラハム・ユー
マーク・ピーター・メンデル
アラン・ラッセル・マーティン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2011022993A publication Critical patent/JP2011022993A/ja
Application granted granted Critical
Publication of JP5473768B2 publication Critical patent/JP5473768B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Landscapes

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

Description

本発明は、コンパイラに係り、さらに詳細に説明すれば、マルチパス及び多目的の動的分析を促進するためのコンパイラ装備化(instrumentation)インフラストラクチャに係る。
コンパイラは、高水準プログラミング言語で書かれたコンピュータ・プログラムを、コンピュータ・システム内の1つ以上の中央処理装置(CPU)によって実行されるマシン・コードに変換するために使用されるツールである。コンパイラがこの変換をどのように行うかに依存して、結果的なプログラムは、コンピュータ上で異なる速度で実行されるか、或いはより多い又はより少ないシステム・メモリ及びストレージ空間を必要とすることがある。
従来、ソース・コードからマシン・コードへの直接変換以上のことを行うコンパイラを作成するために、多くの研究開発がなされてきた。一般に、かかるコンパイラは、最適化コンパイラと呼ばれる。最適化コンパイラは、ソース・コードを分析し、ターゲット・コンピュータ・システム上でより効率的に実行可能な戦略を実装する。この文脈において、「最適化」とは、一般に、ソース・コードのコンパイル方法を選択的に修正することにより、コンピュータ・プログラムの速度又は効率を改良することを意味する。
最適化コンパイラは、効率的なマシン・コードを生成するために、ループ変換又はデータ・リマッピングのような多くの技術を使用することがあるが、コンピュータ・ハードウェアの進歩は、コンパイラの設計者に対し新しい挑戦を突きつけている。具体的には、最近ではCPU装置のクロック速度が増加しているのに対し、システム・メモリの速度は遅れを取っている。この速度の差(一般にメモリ待ち時間と呼ばれる)を管理しないと、データがシステム・メモリと授受される間に、CPUがアイドル状態に留まることになる。コンパイラ内で使用される1つの最適化戦略は、キャッシュの使用率(従って実行時間)を改良し且つプログラム実行中に生じるキャッシュ・ミスの数を減少させるというものである。
本発明の1つの側面は、コンピュータ内の1つ以上のプロセッサによって実行される、マルチパス動的プロファイリングのためのコンピュータに実行させる方法に向けられている。前記コンピュータに実行させる方法は、アプリケーションの複数のコード領域(code regions)が前記1つ以上のプロセッサ上でリンクされ且つ実行されるときにプロファイル・データを生成するための注釈(annotations)を、前記複数のコード領域に装備(instrument)するステップと、前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成するステップと、前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域(delinquent code region)として識別するステップと、前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備するステップと、前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成するステップと、前記追加のプロファイル・データから、前記不良コード領域の一の部分領域(sub-region)を識別するステップとを含む。前記コンピュータに実行させる方法は、前記識別された部分領域を最適化するステップをさらに含むことがある。
本発明の他の側面は、マルチパス動的プロファイリングのためのコンピュータ・プログラム(または、そのコンピュータ・プログラムを保持するコンピュータ可読ストレージ媒体)に向けられている。前記プログラムは、プロセッサに、アプリケーションの複数のコード領域が前記プロセッサ上でリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記複数のコード領域に装備するステップと、前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成するステップと、前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域として識別するステップと、前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備するステップと、前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成するステップと、前記追加のプロファイル・データから、前記不良コード領域の一の部分領域を識別するステップとを実行させる。また、前記プログラムは、前記プロセッサに、前記複数のコード領域の各々のための前記生成されたプロファイル・データに基づき、前記識別された部分領域を最適化するステップをさらに実行させることがある。
本発明の他の側面は、プロセッサと、マルチパス動的プロファイリングのためのプログラムを保持するメモリとを備えるシステムに向けられている。前記プログラムは、前記プロセッサに、アプリケーションの複数のコード領域が前記プロセッサ上でリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記複数のコード領域に装備するステップと、前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成するステップと、前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域として識別するステップと、前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備するステップと、前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成するステップと、前記追加のプロファイル・データから、前記不良コード領域の一の部分領域を識別するステップとを実行させる。前記プログラムは、前記プロセッサに、前記識別された部分領域を最適化するステップをさらに実行させることがある。
本発明は、アプリケーションの実行を最適化するという効果を奏する。具体的には、本発明は、アプリケーションの複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記複数のコード領域に装備し、前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成し、前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域として識別し、前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備し、前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成し、前記追加のプロファイル・データから、前記不良コード領域の一の不良コード部分領域を識別し、当該識別された不良コード部分領域を使用して、アプリケーションの実行を最適化するという効果を奏する。
本発明の実施形態に従った、アプリケーションの実行を最適化するためのシステムを示すブロック図である。 本発明の実施形態に従った、図1のマルチパス・プロファイラのコンポーネントを示すブロック図である。 本発明の実施形態に従った、ユーザの観点からアプリケーションの実行を最適化するための方法を示すフローチャートである。 本発明の実施形態に従った、アプリケーションの実行を最適化するための方法を示すフローチャートである。 本発明の実施形態に従った、マルチパス動的プロファイリングを行うための方法を示すフローチャートである。 本発明の実施形態に従った、マルチパス動的プロファイリングを行うための方法を示すフローチャートである。
本発明の実施形態は、マルチパス(すなわち、複数の装備化サイクル)及び多目的(すなわち、キャッシュミス・プロファイリング及び呼び出しセンシティブなブロック・カウントのプロファイリングのような複数のタイプのプロファイリングをサポートすること)の動的プロファイリングのための、一般化されたコンパイラ装備化インフラストラクチャを提供する。このインフラストラクチャは、マルチパス・プロファイリングをサポートし、その場合、後続するパスが先行するパスからのプロファイル・データを使用して、プロファイリングを洗練化する。マルチパス・プロファイラは、粗粒度(coarse-grained)のキャッシュミス・プロファイリングを行うことにより、不良コード領域を識別する。不良コード領域とは、キャッシュ・ミスの許容可能なしきい値カウントよりも大きな数のキャッシュ・ミスを生ずるコード領域(これは準最適なアプリケーションの性能をもたらすことがある)を意味する。同様に、不良メモリ参照(delinquent memory reference)とは、キャッシュの許容可能なしきい値カウントよりも大きな数のキャッシュ・ミスを生ずるメモリ参照を意味する。その後、マルチパス・プロファイラは、前記不良コード領域内のメモリ参照だけを対象として、細粒度(fine-grained)のキャッシュミス・プロファイリングを行う。例えば、キャッシュミス・プロファイリングについて、コンパイラは、最初に粗粒度のキャッシュミス・プロファイリングを行うことにより、不良ロード(すなわち、キャッシュ・ミスに帰着する可能性が高いロード)を保持するコード領域を識別し、次に、当該コード領域内で細粒度のキャッシュミス・プロファイリングを行うことにより、個々の不良ロードを正確に識別する。すなわち、キャッシュ・ミスに帰着する可能性が高いメモリ参照を含む、ソース・コードの特定の行を識別する。
本明細書に開示したコンパイラ・インフラストラクチャは、マルチパス・プロファイリングを静的分析とともに使用することにより、アプリケーションのプロファイリング・オーバーヘッドを減少させる。さらに、このコンパイラは、一様な内部表現を使用することにより、不良コード領域を注釈し且つコードの低水準表現から当該コードの高水準表現に正確にマッピングする。さらに、複数の装備化サイクルは、コンパイラとプロファイリング・ツール(例えば、性能ライブラリ・パッケージ)との間の相互作用を改良することにより、プロファイリング・オーバーヘッドを減少させ且つ最適化の結果を改良する。例えば、複数の装備化サイクルは、異なる性能カウンタ・グループにわたってアプリケーションの特性をプロファイルすることを可能にする。さらに、複数の装備化サイクルは、異なるプロファイリング機構(例えば、ブロックカウンタ・プロファイリング、値のプロファイリング及び性能カウンタのプロファイリング)を組み合わせることを可能にする。
コンパイラ内で使用される最適化戦略は、プログラムのプロファイル・データに依存することがある。プロファイル・データは、コンパイル時の分析(静的プロファイリングと呼ばれる)及び/又は実行時の分析(動的プロファイリングと呼ばれる)を通して、これを収集することができる。プロファイル・ディレクテッド・フィードバック(profile-directed feedback:PDF)とは、プログラム用のプロファイル・データを生成するために代表的なデータ・サンプルを使用して、当該プログラムの実行をプロファイルする方法を意味する。次に、コンパイラは、生成されたプロファイル・データを使用することにより、最適化をガイドする。
プロファイリング技術は、制御フローのプロファイリング、値のプロファイリング及び性能カウンタのプロファイリングを含む。さらに、制御フローのプロファイリングは、ノード・プロファイリング(vertex profiling)、エッジ・プロファイリング及びパス・プロファイリングに分類される。ノード・プロファイリングは、実行時の間に、コードの各基本ブロックが実行される頻度を測定する。基本ブロックとは、連続的な動作のシーケンスであって、制御のフローが当該シーケンスの開始点に入り且つ当該シーケンスの終了点を除き停止又は分岐する可能性なしに当該シーケンスの終了点から出るというようなシーケンスを意味する。エッジ・プロファイリングは、実行時の間に、各分岐遷移が実行される頻度を測定する。パス・プロファイリングは、実行時の間に、各パス(すなわち、相関のある分岐)が実行される頻度を測定する。値のプロファイリングは、不変性、生じそうな値、変数の範囲(例えば、分岐予測目的のため)を測定する。性能カウンタのプロファイリングは、特定のハードウェア・イベント(例えば、キャッシュ・ミス)を追跡する、ハードウェア性能カウンタを測定する。一般に、コンパイラは、性能ライブラリ・パッケージによって提供される、アプリケーション・プログラム・インタフェース(API)を起動するための呼び出しを挿入する。性能カウンタのプロファイリングは、アプリケーションに特有のメトリクス(例えば、CPI(cycles per instruction)、FLOPS(floating point operations per second)、MIPS(million instructions per second)及びキャッシュミス・レート)を決定するために使用される。
以下、本発明の実施形態を参照する。しかし、本発明が本明細書に開示した特定の実施形態に制限されないことを理解されたい。以下で説明する特徴及び要素の任意の組み合わせは、異なる実施形態に関係するか否かに拘わらず、本発明を実装し且つ実施することが意図されるからである。さらに、本発明の実施形態は、他の可能な解決法及び/又は従来技術に比較して優れた効果を奏することがあるが、所与の実施形態が特定の効果を奏するか否かは、本発明を制限するものではない。従って、以下で説明する側面、特徴、実施形態及び効果は、単に例示的なものであって、請求項に明示的に記載されている場合を除き、請求項に係る発明の要素又は制限事項であると解すべきではない。同様に、「本発明」という用語が使用されている場合であっても、このことは、本明細書に開示した発明性のある任意の主題の一般化と解すべきではなく、請求項に明示的に記載されている場合を除き、請求項に係る発明の要素又は制限事項であると解すべきではない。
本発明の1つの側面は、コンピュータ・システムに関連して使用するためのコンピュータ・プログラムに向けられている。このプログラムは、実施形態の機能(本明細書に開示した方法を含む)を定義し、種々のコンピュータ可読ストレージ媒体上に保持されることができる。コンピュータ可読ストレージ媒体は、情報を永久に格納するための書き込み不能ストレージ媒体(例えば、CD−ROMドライブによって読み取り可能なCD−ROMディスクのようなコンピュータ内の読み取り専用メモリ装置)、変更可能な情報を格納するための書き込み可能ストレージ媒体(例えば、ディスケット・ドライブ内のフレキシブル・ディスク又はハードディスク・ドライブ)等を含む。かかるコンピュータ可読ストレージ媒体は、本発明の機能を指示するコンピュータ可読命令を担持する場合、本発明の実施形態である。他の媒体は、例えば、コンピュータ又は電話網を通してコンピュータに情報を伝達する通信媒体であって、無線通信ネットワークを含む。特に、後者の実施形態は、インターネット及び他のネットワークと情報を授受することを含む。かかる通信媒体は、本発明の機能を指示するコンピュータ可読命令を担持する場合、本発明の実施形態である。広義には、コンピュータ可読ストレージ媒体及び通信媒体は、本明細書において、これをコンピュータ可読媒体と称することがある。
一般に、本発明の実施形態を実装するために実行されるルーチンは、オペレーティング・システム又は特定アプリケーションの一部、コンポーネント、プログラム、モジュール、オブジェクト又は命令シーケンスとすることができる。一般に、本発明のコンピュータ・プログラムは、ネイティブ・コンピュータによってマシン可読フォーマット(従って、実行可能命令)に変換される、複数の命令から構成される。さらに、プログラムは、当該プログラムに対しローカルに存在するか、或いはメモリ内に又はストレージ装置上に置かれる、変数及びデータ構造から構成される。さらに、後述する種々のプログラムは、本発明の特定の実施形態において当該プログラムがそのために実装されるアプリケーションに基づき、これを識別することができる。しかし、以下で使用する特定のプログラム命名法は、便宜上のものであるに過ぎないから、本発明は、かかる命名法によって識別されるか又は暗示される特定のアプリケーション内でのみ使用するように制限されないことを理解されたい。
図1は、本発明の実施形態に従った、アプリケーションの実行を最適化するためのシステム100を示す。ネットワーク化されたシステム100は、コンピュータ102を含む。コンピュータ102は、ネットワーク130を介して、他のコンピュータに接続することができる。一般に、ネットワーク130は、通信ネットワーク及び/又は広域ネットワーク(WAN)である。特定の実施形態では、ネットワーク130は、インターネットである。
一般に、コンピュータ102は、バス112を介してメモリ106に接続されたプロセッサ104、ネットワーク・インタフェース装置110、ストレージ108、入力装置114及び出力装置116を含む。一般に、コンピュータ102は、オペレーティング・システム(図示せず)の制御下にある。かかるオペレーティング・システムの例は、UNIX(The Open Groupの商標または登録商標)、マイクロソフト社のWindows(Microsoft Corporationの商標または登録商標)オペレーティング・システムのバージョン及びLinux(Linus Torvaldsの商標または登録商標)オペレーティング・システムを含む。より一般的に云えば、本明細書に開示した機能をサポートするものであれば、任意のオペレーティング・システムを使用することができる。
メモリ106は、単一の実体であるランダム・アクセス・メモリとして示されている。しかし、メモリ106は、実際には複数のモジュールから構成され、そして高速レジスタ及びキャッシュから低速大容量のDRAMチップに至るまでの、複数のレベルにおいて存在可能であることを理解されたい。
ネットワーク・インタフェース装置110は、ネットワーク130を介してコンピュータ102と他のコンピュータとの間のネットワーク通信を可能にする。例えば、ネットワーク・インタフェース装置110は、ネットワーク・アダプタ又は他のネットワーク・インタフェース・カード(NIC)である。
ストレージ108は、単一のユニットであるハードディスク・ドライブとして示されている。しかし、ストレージ108は、固定及び/又は取り外し可能なストレージ装置(例えば、ハードディスク・ドライブ、フレキシブルディスク・ドライブ、テープ・ドライブ、取り外し可能なメモリ・カード又は光ストレージ)の組み合わせとすることができる。メモリ106及びストレージ108は、複数の1次及び2次ストレージ装置をカバーする、1つの仮想アドレス空間の一部とすることができる。
入力装置114は、コンピュータ102に対し入力を提供するための任意の装置である。例えば、入力装置114として、キーボード、キーパッド、ライト・ペン、タッチ・スクリーン、トラック・ボール、音声認識ユニット、オーディオ/ビデオ・プレーヤ等を使用することができる。
出力装置116は、コンピュータ102のユーザに対し出力を提供するための任意の装置である。例えば、出力装置116は、ビデオ・カード及びサウンド・カード(図示せず)のようなインタフェース・カードを有する、通常のディスプレイ・スクリーン又は1セットのスピーカとすることができる。出力装置116は、入力装置114とは別々に示されているが、出力装置116及び入力装置114を組み合わせてもよい。例えば、統合タッチ・スクリーンを有するディスプレイ・スクリーン、統合キーボードを有するディスプレイ又はテキスト・スピーチ変換器と組み合わされた音声認識ユニットを使用することができる。
図示のように、メモリ106は、コンパイラ148及び装備化アプリケーション(instrumented application)152を含む。コンパイラ148は、マルチパス・プロファイラ150を含む。さらに、ストレージ108は、アプリケーション・コード(単に「コード」とも称する)154、プロファイル・データ156、粒度レベル(granularity levels)158、ユーザ・オプション160、しきい値162及び注釈164を含む。コード154は、アプリケーションのソース・コード、当該アプリケーションのオブジェクト・コード及び当該ソース・コードの任意の中間コンパイラ表現を含むことができる。図2〜図5及びこれらの図面に関連する説明は、コンピュータ102上で走るマルチパス・プロファイラ150の構造及び動作を詳述する。
本明細書では、コンパイラ148の一部であるマルチパス・プロファイラ150を参照して、実施形態を説明する。しかし、かかる説明は、他の実施形態(例えば、スタンド・アロンのマルチパス・プロファイラ150、リンカの一部であるマルチパス・プロファイラ150、及びコンパイラ148の一部であり且つリンカの一部でもあるマルチパス・プロファイラ150)も広くカバーすることを意図している。
図2は、本発明の実施形態に従った、図1のマルチパス・プロファイラ150のコンポーネントを示す。図示のように、マルチパス・プロファイラ150は、粒度マネージャ210、オプション・マネージャ220、しきい値マネージャ230、注釈マネージャ240及び領域エバリュエータ250を含む。
マルチパス・プロファイラ150は、コード154を受け取り、(第1の装備化サイクルの間に)注釈164をコード154に装備する。コンパイラ148は、注釈が付けられたコードに基づき、実行可能コードを生成する。この実行可能コードは、注釈が付けられていないコードから生じる実行可能コードから区別するために、これを「装備化」実行可能コードと称することがある。ユーザは、(例えば、サンプル・データセットを使用して)この装備化アプリケーションをランさせることにより、プロファイル・データ156を生成する。プロファイル・データ156は、アプリケーションの実行特性を記述する。例えば、当該アプリケーションの実行中に生成されるプロファイル・データ156は、ハードウェア性能カウンタに基づき、複数のコード領域の各々に関連するキャッシュ・ミスのカウントを含む。すなわち、この装備化は、プロファイリング目的のために、コード154を複数のコード領域に分割する。各コード領域は、コンパイラ148によって生成されるコードの1ブロックに対応する。また、各コード領域は、当該コードの高水準表現(例えば、ソース・コード)の対応する1ブロックにマッピングされる。さらに、前記複数のコード領域は、当該アプリケーションの少なくとも1つのコンパイル単位を(例えば、静的分析を介して)評価することにより、これを識別することができる。また、前記複数のコード領域は、これをコード領域の「候補セット」と称することもできる。
マルチパス・プロファイラ150は、プロファイル・データ156に基づき、(第2の装備化サイクルの間に)コード154を再装備化する。例えば、マルチパス・プロファイラ150は、「ホット」ブロック(例えば、予定のしきい値を超えるキャッシュ・ミスのカウントをもたらした、コードの1基本ブロック)を識別することができる。このような場合、マルチパス・プロファイラ150は、注釈164を使用して、識別されたホット・ブロック内の複数のメモリ参照を装備化する。コンパイラ148は、この再装備化コードに基づき、装備化実行可能コードを生成する。ユーザは、この装備化実行可能コードをランさせることにより、アプリケーションの実行特性を一層詳細なレベル(例えば、基本ブロックのレベルではなく、識別されたホット・ブロックのメモリ参照レベル)で記述する、追加のプロファイル・データ156を生成する。
さらに、マルチパス・プロファイラ150は、この新しく生成されたプロファイル・データ156に基づき、コード154を再装備化する。マルチパス・プロファイラ150は、任意の数の装備化サイクルを行うことにより、追加のプロファイル・データ156に基づき、注釈されたコードをさらに洗練化する。複数の装備化サイクルを提供する(その結果、漸進的及び反復的な動的プロファイリングをサポートする)ことにより、マルチパス・プロファイラ150は、柔軟且つ効率的な態様で、不良コード領域を識別することができる。例えば、マルチパス・プロファイラ150は、(コード154における全てのメモリ参照とは対照的に)識別された不良コード領域内のメモリ参照だけをプロファイルすることにより、プロファイリング・オーバーヘッドを減少させることができる。
異なるサンプル・ランの間に、異なるタイプのハードウェア実行イベント情報が収集される。コード154のマルチパス動的プロファイリングは、異なるタイプ(すなわち、サンプル・ランごとに1つのタイプ)のハードウェア実行イベント情報に基づき、コード154を最適化することを可能にする。さらに、コード154のマルチパス動的プロファイリングは、累積的なプロファイリングを可能にする。すなわち、累積的なプロファイリングでは、1つ以上の先行するランからのプロファイル・データ156を使用して、後続するプロファイリングを洗練化する。さらに、コード154のマルチパス動的プロファイリングは、過剰な装備化(例えば、コード154の全ての装備化)を行うことなしに、最適化のためのコード領域を効率的に識別する。過剰な装備化は、観察されるアプリケーション行動の(プロファイリングのための)有用性を害することがある。例えば、過度に装備化されるアプリケーションの追加の時間及び空間要件は、非装備化アプリケーションを表すことがより少ない(すなわち、非装備化アプリケーションの行動をより不正確に反映する)、アプリケーション行動に結びつくことがある。
粒度マネージャ210は、アプリケーション・コード154のプロファイリングが行われるべき、複数の粒度レベル158を定義する。コード154は、アプリケーションのソース・コード、当該アプリケーションのオブジェクト・コード及び当該ソース・コードの任意の中間コンパイラ表現を含むことができる。粒度マネージャ210は、(例えば、入力装置114を介する)ユーザ入力に基づき、複数の粒度レベル158を定義することができる。表1は、粒度レベル158の1例を示す。
Figure 0005473768
この特定の例では、粒度マネージャ210は、2つの粒度レベル158を定義する。これらの粒度レベルは、コード154の基本ブロックをプロファイルするための第1の粒度レベル(粗粒度)と、コード154の個々のメモリ参照をプロファイルするための第2の粒度レベル(細粒度)とを含む。各粒度レベル158は、コード154の任意の単位(例えば、ソース・コード、オブジェクト・コード、中間コンパイラ表現等の単位)を意味することがある。例えば、粒度レベルは、プロファイリング単位として「手順」を指定する(その結果、コード154の各手順が個々にプロファイルされることを指定する)ことがある。
マルチパス・プロファイラ150は、選択された粒度レベル158に基づき、注釈164を異なった方法で使用して、コード154を装備化する。例えば、ユーザが粗粒度プロファイリングを選択すれば、マルチパス・プロファイラ150は、コード154の各基本ブロックの開始点及び終了点に注釈164を挿入することにより、コード154を装備化する。各注釈は、関数呼び出しを提供することにより、コード154がコンパイルされ、リンクされ、実行されるとき、プロファイル・データを提供する。例えば、コード154の各基本ブロックのキャッシュ・ミスをプロファイルするために、マルチパス・プロファイラ150は、
(1)各基本ブロックの開始点を通知するための関数呼び出し(例えば、__pdf_profile_PM_start()という名前の関数)を提供する注釈を、各基本ブロックの開始点に装備し、
(2)各基本ブロックの終了点を通知するための関数呼び出し(例えば、__pdf_profile_PM_end()という名前の関数)を提供する注釈を、各基本ブロックの終了点に装備する。
さらに、ユーザが細粒度プロファイリングを選択すれば、マルチパス・プロファイラ150は、コード154のメモリ参照ごとに注釈164を挿入することにより、コード154を装備化することができる。このような場合、マルチパス・プロファイラ150は、プロファイルすべき各メモリ参照の位置を通知するためのマーカ(例えば、__pdf_profile_cache_miss()という名前の関数)を提供する注釈を、各メモリ参照に装備する。注釈164については、注釈マネージャ240に関連して以下で説明する。
オプション・マネージャ220は、ユーザがアプリケーションのマルチパス動的プロファイリングを構成することを可能にする。表2は、ユーザ・オプション160を例示する。
Figure 0005473768
この特定の例では、オプション・マネージャ220は、マルチパス動的プロファイリングを構成するために4つのユーザ・オプション160を定義する。さらに、オプション・マネージャ220は、各ユーザ・オプション160を一の条件と関連付けることにより、一のユーザ・オプション160を適用することができる。表2に示すように、ユーザ・オプション160は、プロファイリング用の注釈を除去するためのオプションを含む(すなわち、ユーザがコンパイラ148に対し-qnopdfフラグを提供する場合)。また、ユーザ・オプション160は、粗粒度プロファイリングを行うためのオプションを含む(すなわち、ユーザがコンパイラ148に対し-qpdf1フラグを提供し、そして以前のプロファイル・データ156が使用不能である場合)。また、ユーザ・オプション160は、細粒度プロファイリングを行うためのオプションを含む(すなわち、ユーザがコンパイラ148に対し-qpdf1フラグを提供し、そして以前のプロファイル・データ156が使用可能である場合)。最後に、ユーザ・オプション160は、プロファイル・データ156を使用して、実行可能コードを最適化するためのオプションを含む(すなわち、ユーザがコンパイラ148に対し-qpdf2フラグを提供する場合)。当業者には明らかなように、本発明の実施形態は、本発明の範囲から逸脱することなく、他のユーザ・オプション及び条件をサポートするように適応させることができる。
しきい値マネージャ230は、アプリケーションの実行を最適化するための少なくとも1つのしきい値162を定義する。例えば、しきい値マネージャ230は、アプリケーションのプロファイリングを行う際に1つのパスから得られた情報をどのように使用して、後続するパスにおいて当該アプリケーションが装備化される(従って、プロファイルされる)方法をどのように修正すべきかを、ユーザが指定することを可能にする。表3は、しきい値162の例を示す。
Figure 0005473768
この特定の例では、アプリケーションを最適化するために、2つのしきい値162が指定されている。その1つは、コード領域用のものであり、他の1つは、個々のメモリ参照用のものである。第1に、200個のキャッシュ・ミスのしきい値が、一のコード領域を不良として識別するために使用される。例えば、かかる領域は、コンパイラによって生成されたコードの1ブロック又はソース・コード・レベルの手順、機能、メソッド、モジュール等を含む。第2に、75個のキャッシュ・ミスのしきい値が、一のメモリ参照を不良として識別するために使用される。実施形態では、コードの異なる領域を(コード領域用のしきい値に従って)プロファイルすることにより、コンパイル済み実行可能コード内でキャッシュ・ミスが生じるような広い領域が識別される。一旦識別されると、(メモリ参照用のしきい値に従った)連続的な細粒度プロファイリングを使用することにより、キャッシュ・ミスの原因を突き止めることができる。
或る場合には、少数のメモリ参照が、キャッシュ・ミス全体の大きな割合の原因となることがある。かかる多数のキャッシュ・ミスは、実行中アプリケーションの性能を著しく低下させることがある。不良コード領域を識別すると、コンパイラ148は、アプリケーションをより良く最適化することができる。例えば、コンパイラ148は、不良コード領域(具体的には、不良メモリ参照)に対しデータ・プリフェッチング及びデータ再編成技術を使用することにより、実行可能コードを生成することができる。従って、マルチパス・プロファイラ150は、装備化アプリケーション152を実行してプロファイル・データ156を評価することにより、キャッシュ・ミスを減少させるように最適化すべきコード154のサブセットを識別することができる。
注釈マネージャ240は、複数の注釈164を定義し、コード154に当該定義された複数の注釈164を装備する。表4は、注釈164の例を示す。
Figure 0005473768
この特定の例では、注釈マネージャ240は、7つの注釈164を定義する。各注釈は、コンパイル済みコードの実行中に、データをプロファイルするための関数呼び出しを提供する。この例では、注釈164は、高水準の注釈、低水準の注釈及び最適化注釈を含む。低水準のコンパイラは、これらの関数呼び出しを実行可能命令のインライン・シーケンスに変換する。高水準の注釈は、関数呼び出しを高水準のオプティマイザ・インタフェースに提供することにより、高水準プログラミング言語(例えば、当該アプリケーションのソース・コード又はその中間コンパイラ表現)におけるメモリ参照をプロファイルする。低水準の注釈は、関数呼び出しを低水準のオプティマイザ・インタフェースに提供することにより、(例えば、当該アプリケーションのソース・コード又はその中間コンパイラ表現における)特定のメモリ参照をプロファイルする。例えば、注釈マネージャ240は、低水準コードの生成中(例えば、高水準の中間表現に基づき、低水準の中間表現を生成中)に、高水準の注釈を低水準の注釈に変換する。すなわち、注釈マネージャ240は、低水準の注釈を、高水準の注釈を有する高水準コード(例えば、不良ステートメント)に対応する、低水準コード(例えば、ロード又はストア動作における不良メモリ参照)に関連付ける。言いかえれば、高水準の注釈及び低水準の注釈は、種々のコンパイル及び最適化段階(すなわち、異なるレベルのコード表現を含む段階)にわたって、これを維持することができる。さらに、コンパイラ148は、最適化用の注釈に基づき、コード154を最適化することができる。言いかえれば、最適化用の注釈は、コンパイラに対する「ヒント」として作用する。
低水準の注釈は、関数呼び出しを、仮パラメータ・リストを有するvoid __profile_cache_miss()に提供する。この仮パラメータ・リストは、メモリ・アドレス(例えば、void *addr)、カウンタ・アドレス(例えば、long long *counter)、ロード又はストア動作(例えば、unsigned int LoadStoreType)、メモリ参照タイプ(例えば、unsigned int dataType)及びメモリ参照長さ(例えば、unsigned int length)を含む。このメソッドは、次の動作を行う。
(1)性能カウンタを読み取る。
(2)指定されたdataType及びlengthを有する、LoadStoreTypeの動作を行う。
(3)再び性能カウンタを読み取り、性能カウンタが1だけ増加されているか否かをチェックする。
(4)そうであれば、1を加えることによりcounterを更新する(そうでなければ、リターンする)。
簡述すると、低水準の注釈は、アプリケーションの実行中に、プロファイル・データ(例えば、一のコード領域又はコード部分領域についてのキャッシュ・ミスのカウント)を収集する。実施形態では、コンパイラ148は、性能カウンタを直接的に読み取るためのコード・セグメントを生成することにより、プロファイリング・オーバーヘッドを減少させることができる。例えば、コンパイラ148は、関数呼び出しを、実行可能コードのインライン・シーケンスに変換することができる。
高水準の注釈は、粗粒度プロファイリングを行うための2つの関数呼び出し(すなわち、unsigned int __pdf_profile_PM_start()及びunsigned int __pdf_profile_PM_end())を提供する。これらのメソッドは、一のイベント・タイプ(例えば、unsigned int eventType)を含む、仮パラメータ・リストを有する。例えば、マルチパス・プロファイラ150の第1パス中に、マルチパス・プロファイラ150は、粗粒度のキャッシュミス・プロファイリングを行うべき、コード154の複数の領域を識別する。マルチパス・プロファイラ150は、識別された複数の領域の各々を、(例えば、各領域の開始点及び終了点のそれぞれにおける)__pdf_profile_PM_start()及び__pdf_profile_PM_end()注釈内に囲むことができる。マルチパス・プロファイラ150の第2パス中に、ユーザが-qnopdfフラグを提供すれば、マルチパス・プロファイラ150は、コード154から全ての__pdf_profile_PM_start()及び__pdf_profile_PM_end()注釈を除去する。しかし、ユーザが-qpdf1フラグを提供すれば、マルチパス・プロファイラ150は、__pdf_profile_PM_start()及び__pdf_profile_PM_end()注釈を、性能メトリクスAPIのメソッドを起動するための注釈に変換する。さらに、ユーザが-qpdf2フラグを提供すれば、マルチパス・プロファイラ150は、__pdf_profile_PM_start()及び__pdf_profile_PM_end()の高水準の注釈を、低水準の__mem_delay()呼び出しに変換する。
また、高水準の注釈は、細粒度のキャッシュミス・プロファイリングを行うための関数呼び出し(void * __pdf_profile_cache_miss())を提供する。このメソッドが有するパラメータ・リストは、内部マッピング用のシーケンス番号(例えば、unsigned int sequenceNumber)、メモリ・アドレス(例えば、void *addr)、ロード又はストア動作(例えば、unsigned int LoadStoreType)、メモリ参照タイプ(例えば、unsigned int dataType)及びメモリ参照長さ(例えば、unsigned int length)を含む。例えば、マルチパス・プロファイラ150の第1パス中に、マルチパス・プロファイラ150は、細粒度のキャッシュミス・プロファイリングを行うべき、コード154内の複数の命令を識別する。各命令は、メモリ・アドレスを参照することがある。マルチパス・プロファイラ150は、識別された命令ごとに(例えば、LoadStoreTypeがゼロである場合はメモリ・ロード参照ごとに、LoadStoreTypeが1である場合はメモリ・ストア動作ごとに)、__pdf_profile_cache_miss()注釈を挿入する。マルチパス・プロファイラ150の第2パス中に、ユーザが-qnopdfフラグを提供すれば、マルチパス・プロファイラ150は、コード154から全ての__pdf_profile_cache_miss()注釈を除去する。しかし、ユーザが-qpdf1フラグを提供すれば、マルチパス・プロファイラ150は、__profile_cache_miss()注釈を、低水準の__profile_cache_miss()注釈に変換する。さらに、ユーザが-qpdf2フラグを提供すれば、マルチパス・プロファイラ150は、高水準の__pdf_profile_cache_miss()注釈を、低水準の__mem_delay()注釈に変換する。
例示的に説明すると、これらの最適化用の注釈は、メモリ遅延注釈を含む。このメモリ遅延注釈は、メモリ参照アドレス(例えば、void *addr)及び予測される遅延サイクル数(例えば、unsigned int delayCycles)の仮パラメータ・リストを有する、void __mem_delay()に対し関数呼び出しを提供する。このメモリ遅延注釈は、(例えば、プロファイル・データ156に基づき)キャッシュ・ミスが生じそうな場所を指定する。例えば、このメモリ遅延注釈は、アプリケーションの実行可能コード(すなわち、マシン・コード)の不良メモリ参照に対応するコード154(又はコード154の中間コンパイラ表現)における一の命令のアドレスを指定する。しかし、これらのメモリ遅延注釈に基づきコード154に対しどのような最適化を導入すべきかという点については、コンパイラ148の裁量に任せることができる。言いかえれば、コード154のメモリ遅延注釈は、アプリケーションを最適化するに際し、コンパイラに対する「ヒント」として作用する。
また、これらの最適化用の注釈は、予測値注釈を含むことがある。この予測値注釈は、予測値(例えば、int expectedValue)の仮パラメータ・リストを有する、void __expect_value()に対し関数呼び出しを提供する。この予測値注釈は、一の表現の生じ得る値を指定するから、コンパイラ156は、当該予測値を有する当該表現を支持するように(例えば、分岐予測において)最適化のトレードオフを行うことができる。
領域エバリュエータ250は、注釈164及びプロファイル・データ156(第1パスの後にプロファイル・データが使用可能である場合)に基づき、コード154の複数の領域(又は部分領域)を装備化する。例えば、領域エバリュエータ250は、表3のしきい値162と対照してプロファイル・データ156を評価することにより、装備化すべきコード154の複数の領域を決定するとともに、高水準(粗粒度の分析用)又は低水準の注釈(細粒度の分析用)のどちらを使用すべきであるかを決定する。
図3は、本発明の実施形態に従った、アプリケーションの実行を最適化するための方法300を示すフローチャートである。図示のように、方法300はステップ310で開始し、そこでユーザは、プロファイリングを行うべきであることを指示するコンパイラ・フラグ(例えば、-qpdf1)を使用して、ソース・コード154をコンパイル及びリンクする。これに応答して、マルチパス・プロファイラ150は、コンパイル・プロセスの一部として、粗粒度プロファイリング用の注釈を、当該コードに装備する。次に、ユーザは、サンプル入力320のような代表的なデータセットを使用して、装備化アプリケーション152の1つ以上のサンプル・ランを実行する。装備化アプリケーション152は、その実行に応じて、プロファイル・データ156を生成する、例えば、装備化アプリケーション152は、キャッシュ・ミスの数を記録する。代表的なデータセットを使用して、装備化アプリケーション152の1つ以上のサンプル・ランを実行した後、ユーザは、ステップ310に戻ることにより、-qpdf1コンパイラ・フラグを使用してソース・コード154を再コンパイル及び再リンクする。これに応答して、ステップ310で、マルチパス・プロファイラ150は、粗粒度プロファイリングの結果に基づき、コードに細粒度プロファイリング用の注釈を装備する。ユーザは、(複数のサンプル・データセットを使用して)装備化アプリケーション152のプロファイリング及び実行を継続することができる。
代表的なデータセットを使用して、装備化アプリケーション152の1つ以上のサンプル・ランを実行した後、ユーザは、ステップ330に進むことにより、-qpdf2コンパイラ・フラグを使用してソース・コード154を再コンパイル及び再リンクする。ステップ330で、コンパイラ148は、使用可能なプロファイル・データ156及び注釈164に基づき(例えば、__mem_delay() 呼び出しを生成することにより)、最適化されたアプリケーション340を生成する。ステップ340の後、本方法300は終了する。
図4は、本発明の実施形態に従った、アプリケーションの実行を最適化するための方法400を示すフローチャートである。図示のように、方法400はステップ410で開始し、そこでマルチパス・プロファイラ150は、アプリケーションの複数のコード領域に、当該複数のコード領域の各々ごとのプロファイル・データを生成するための注釈を装備する。例えば、マルチパス・プロファイラ150は、コンパイル済みコードが実行されるときにプロファイル・データを収集するように、コード154の複数の基本ブロックを装備化する。ステップ420で、装備化アプリケーションは、これらのコード領域用のプロファイル・データ156を(装備化コンパイル済みコードの実行を介して)生成する。例えば、このプロファイル・データ156は、装備化コードによってモニタされるハードウェア性能カウンタに基づき、コード領域ごとのキャッシュ・ミスのカウントを含む。
ステップ430で、マルチパス・プロファイラ150は、プログラムの実行中に生成されたプロファイル・データ156に基づき、一の不良コード領域を識別する。例えば、マルチパス・プロファイラ150は、指定されたしきい値と対照してプロファイル・データ156を評価する。ステップ440で、マルチパス・プロファイラ150は、コンパイル済みコードが実行されるときにプロファイル・データを収集するように、前記不良コード領域の複数のコード部分領域に注釈を装備する。例えば、マルチパス・プロファイラ150は、コンパイル済みコードが実行されるときに前記不良コード領域内のメモリ参照ごとのプロファイル・データ156が収集されるように、当該メモリ参照を装備化する。
ステップ450で、ステップ440でコンパイル及びリンクされたアプリケーションが実行される。前述のように、アプリケーションは、その実行中に、前記各メモリ参照用のプロファイル・データ156を生成する。例えば、プロファイル・データ156は、ハードウェア性能カウンタに基づき、メモリ参照ごとのキャッシュ・ミスのカウントを含む。ステップ460で、マルチパス・プロファイラ150は、これらのコード部分領域のために収集されたプロファイル・データから、一の不良コード部分領域を識別する。
ステップ470で、ユーザは、コンパイラの最適化をガイドするために、しきい値を超えるキャッシュ・ミスに帰着するコードの部分領域をアドレスするために、コードがどのようにコンパイルされるかを指示することができる。また、ユーザは、注釈(例えば、__mem_delay()注釈)を手動的に追加することにより、コンパイラの最適化をガイドすることができる。例えば、マルチパス・プロファイラ150は、識別された不良コード部分領域及び生成されたプロファイル・データ156に基づき、アプリケーションをコンパイルすることにより、最適化されたアプリケーションを生成する。
図5は、本発明の実施形態に従った、マルチパス動的プロファイリングを行うための方法500を示すフローチャートである。図示のように、方法500はステップ510で開始し、そこでユーザは、マルチパス・プロファイラ150の第1パスを開始する。例えば、コンパイラ148は、アプリケーションのソース・コードをコンパイル及びリンクすべしという命令を受け取ることができる。この命令に含まれるコンパイラ・フラグは、コンパイラに対し、コンパイルされ且つリンクされたコード内に(例えば、-qpdf1フラグを使用して)プロファイリング用の装備化を含めるように指示する。ステップ520で、マルチパス・プロファイラ150は、粗粒度プロファイリング又は細粒度プロファイリングのどちらを行うべきかを決定する。例えば、マルチパス・プロファイラ150は、表2の条件として示される以前のプロファイル・データが使用可能であるか否かを評価する。もし、以前のプロファイル・データが使用可能でなければ、マルチパス・プロファイラ150は、粗粒度のアプローチを使用して、動的プロファイリングの第1パスを行う。もし、以前のプロファイル・データが使用可能であれば、マルチパス・プロファイラ150は、動的プロファイリングの先行するパスから得られた以前のプロファイル・データに基づき、追加の細粒度プロファイリングを行う。
マルチパス・プロファイラが粗粒度プロファイリングを行うことを決定すれば、ステップ530で、マルチパス・プロファイラ150は、プロファイリング関数(例えば、__pdf_profile_PM_start() 及び __pdf_profile_PM_end())に対する呼び出しを、コードに装備する。例えば、マルチパス・プロファイラ150は、コードの複数のブロックを識別するとともに、対応する複数のコンパイル単位を一体化ブロックとしてプロファイルするための呼び出しを(例えば、表3の注釈を使用して)当該複数のコンパイル単位に装備する。サンプル・データを使用してコードを実行した後、ステップ540で、ユーザは、マルチパス・プロファイラ150の第2パスを開始し、一のフラグを再び指定することにより、アプリケーション内でどのプロファイリングを行うべきかを指示する。これに応答して、マルチパス・プロファイラ150は、ユーザによって提供されたフラグを識別する。もし、このフラグが(例えば、-qnopdfコンパイラ・フラグを使用して)プロファイリングを行うべきでないことを指示すれば、ステップ560で、マルチパス・プロファイラ150は、当該プロファイリング関数への参照(例えば、__pdf_profile_PM_start() 及び __pdf_profile_PM_end()呼び出し)を除去する。もし、このフラグが(例えば、-qpdf1フラグを使用して)動的プロファイリングを継続すべきことを指示すれば、ステップ562で、マルチパス・プロファイラ150は、ステップ530からの注釈を、(例えば、全ての以前のプロファイル・データ156をマージするための)__pdf_get_data()呼び出しに変換する。もし、このフラグが-qpdf2であれば、本方法500はステップ564に進み、そこでコンパイラ148は、プロファイル・データ156及び注釈に基づき、__mem_delay()呼び出しを生成する。すなわち、-qpdf2フラグは、コンパイラ148に対し、使用可能なプロファイル・データ156に基づき、コード154をコンパイルし且つ最適化するように命令するために使用される。
しかし、ステップ520で、マルチパス・プロファイラ150が細粒度プロファイリングを行うことを決定すれば、ステップ535で、マルチパス・プロファイラ150は、__pdf_profile_cache_miss()呼び出しを生成する。例えば、マルチパス・プロファイラ150は、コード154に、表3の対応する注釈を付ける。ステップ545で、ユーザは、マルチパス・プロファイラ150の第2パスを開始する。例えば、コンパイラ148は、ユーザからコード154及び一のフラグを受け取る。ステップ555で、マルチパス・プロファイラ150は、ユーザによって提供されたフラグを識別する。もし、このフラグが-qnopdf であれば(すなわち、表2のシナリオ1に対応)、本方法500はステップ566に進み、そこでマルチパス・プロファイラ150は、コード154から全ての__pdf_profile_cache_miss()呼び出しを除去する。もし、このフラグが-qpdf1であれば、本方法500はステップ570に進み、そこでマルチパス・プロファイラ150は、ステップ535からの注釈を__profile_cache_miss()呼び出しに変換する。もし、このフラグが-qpdf2であれば、本方法500はステップ568に進み、そこでマルチパス・プロファイラ150は、ステップ535からの注釈を__mem_delay()呼び出しに変換する。
ステップ560又はステップ566の後、コンパイラ148は、コード154のみに基づき、アプリケーションを生成する。ステップ562又はステップ570の後、コンパイラ148は、コード154及びステップ562又はステップ570からの注釈に基づき、装備化アプリケーション152を生成する。ステップ564又はステップ568で、コンパイラ148は、コード154及びステップ564又はステップ568からの注釈に基づき、最適化されたアプリケーションを生成する。
マルチパス・プロファイラ150は、コンパイル中に装備化を行うことができる(コンパイル・ステップの装備とも称する)。例えば、ユーザが-qpdf1フラグを提供すれば、マルチパス・プロファイラ150は、アプリケーション用の以前のプロファイル・データ156をチェックする。もし、以前のプロファイル・データ156が存在すれば、マルチパス・プロファイラ150は、全ての以前のプロファイル・データ156をマージするか又は当該以前のプロファイル・データ156を使用する(例えば、細粒度プロファイリングを行うために粗粒度のプロファイル・データを使用する)ことにより、不良コード領域の識別を改良/洗練化する。もし、ユーザが-qpdf2フラグを提供すれば、マルチパス・プロファイラ150は、プロファイル・データ156及び先行する装備化サイクルからの注釈164に基づき、注釈(例えば、一の不良メモリ参照用の__mem_delay()及び一の表現用の__expect_value())を生成する。コンパイラ148は、これらの生成された注釈及びプロファイル・データ156に基づき、アプリケーションを最適化する。最適化の例は、インライニング、クローニング、アウトライニング、間接呼び出しの特化(indirect call specialization)、不良ロード主導型データ・プリフェッチング(delinquent-load-driven data prefetch)、データ再編成、命令スケジューリング等を含む。
また、マルチパス・プロファイラ150は、アプリケーションのコンパイル後に装備化を行うことができる(リンク・ステップの装備化とも称する)。例えば、マルチパス・プロファイラ150は、全てのコンパイル単位に基づき、呼び出しグラフを生成する。もし、ユーザが-qnopdfフラグを提供すれば、マルチパス・プロファイラ150は、コンパイル中に生成された全ての注釈164を除去する。もし、ユーザが-qpdf1フラグを提供すれば、マルチパス・プロファイラ150は、各コンパイル単位用のメモリを予約するとともに、識別されたコード領域(又は識別されたコード部分領域)ごとにメモリ・マッピングを行う。また、マルチパス・プロファイラ150は、動的プロファイリング用の呼び出しを生成する。さらに、マルチパス・プロファイラ150は、コンパイルからの任意の最適化を調査することにより、冗長なプロファイリングを除去する。次に、マルチパス・プロファイラ150は、低水準オプティマイザとインタフェースすることにより、注釈164を命令シーケンスに拡張するか又は実行時ライブラリへの呼び出しを生成する。すなわち、これらの注釈は、プログラム実行中にプロファイル・データを収集する実際の命令(又は関数への呼び出し)で置き換られる。
図6は、本発明の実施形態に従った、マルチパス動的プロファイリングを行うための方法600を示すフローチャートである。図示のように、本方法600はステップ610で開始し、そこでユーザは、コンパイラ148を起動することにより、アプリケーション用のソース・コードをコンパイルする。ステップ620〜650は、実施形態に従って、コンパイラ148の高水準オプティマイザ612によって行うことができる。ステップ620で、高水準オプティマイザ612は、ユーザが装備化を望むか否かを決定する。そうでなければ、本方法600はステップ625に進み、そこで高水準オプティマイザ612は、ソース・コード及び任意のプロファイル・データ156に基づき、アプリケーション用の中間コードを最適化し且つ生成する。
しかし、ユーザが装備化を望むのであれば、本方法600はステップ630に進み、そこで高水準オプティマイザ612は、以前のプロファイル・データ156が存在するか否かを決定する。そうでなければ、本方法600はステップ640に進み、そこで高水準オプティマイザ612は、キャッシュ・ミスについてプロファイルすべきコード領域を識別する(すなわち、粗粒度プロファイリングを行う)。しかし、以前のプロファイル・データ156が存在すれば、本方法600はステップ635に進み、そこで高水準オプティマイザ612は、プロファイル・データ156に基づき、キャッシュ・ミスについてプロファイルすべき個々のメモリ参照を識別する(すなわち、細粒度プロファイリングを行う)。ステップ640又はステップ635の後、本方法600はステップ650に進み、そこで高水準オプティマイザ612は、アプリケーション用の装備化中間コードを生成する。
ステップ650又はステップ625の後、本方法600はステップ660に進み、そこでコンパイラ148の低水準オプティマイザは、装備化中間コードに基づき、アプリケーション用の1つ以上のオブジェクト・ファイルを生成する。ステップ660の後、リンカは、当該1つ以上のオブジェクト・ファイル及び任意のライブラリをリンクすることにより、プログラム(実行可能コード)を生成する。もし、このプログラムが(ステップ625及び660から生成された)最適化済みのプログラムであれば、ステップ670で、ユーザは、オプションとして、当該最適化済みのプログラムを実行する。しかし、当該最適化済みのプログラムは、プロファイル・データ156を生成しないことがある。すなわち、もし、ユーザが最終的にコンパイルすることを決定すれば(すなわち、ステップ625及び660)、「実行」ステップ670を行う必要はない。一方、このプログラムが(ステップ650及び660から生成された)装備化プログラムであれば、ステップ670で、ユーザは、サンプル・データを使用して当該装備化プログラムを実行することにより、プロファイル・データ156を生成する。ステップ670の後、ユーザがプロファイリングを継続することを望むのであれば、本方法600はステップ610に戻る。そうでなければ、本方法600は終了する。
もちろん、本明細書に開示した実施形態は、例示を目的とするものであって、本発明を制限するものではないことが意図される。他の実施形態も、広く予測されるからである。当業者には明らかなように、本発明の実施形態は、例えば、他の粒度レベル、ユーザ・オプション、しきい値及び注釈をサポートするように、これを適合させることができる。さらに、本発明の実施形態は、コードに注釈を付ける他の方法をサポートするように、これを適合させることができる。例えば、マルチパス・プロファイラは、コードの中間表現を生成することができる。次に、マルチパス・プロファイラは、コードの中間表現に注釈を付けて、コードそれ自体をそのままにしておくことができる。さらに、本発明の実施形態は、キャッシュミス・プロファイリングとは異なるプロファイリングのタイプ(例えば、ブロック・カウントのプロファイリング及び値のプロファイリング)をサポートするように、これを適合させることができる。
本発明の実施形態は、アプリケーションの実行を最適化するという点で有利である。1つの実施形態では、マルチパス・プロファイラは、アプリケーションの複数のコード領域に、当該複数のコード領域の各々ごとのプロファイル・データを生成するための注釈を装備する。ユーザが装備化コード領域を有するアプリケーションを実行するとき、これらの注釈は、前記複数のコード領域の各々のためのプロファイル・データを生成する。マルチパス・プロファイラは、前記複数のコード領域の各々ごとに生成されたプロファイル・データに基づき、一の不良コード領域を識別する。さらに、マルチパス・プロファイラは、前記識別された不良コード領域の複数のコード部分領域に、当該複数のコード部分領域の各々ごとのプロファイル・データを生成するための注釈を装備する。ユーザが装備化コード部分領域を有するアプリケーションを実行するとき、これらの注釈は、前記複数のコード部分領域の各々ごとのプロファイル・データを生成する。マルチパス・プロファイラは、前記複数のコード部分領域の各々ごとに生成されたプロファイル・データに基づき、一の不良コード部分領域を識別する。コンパイラは、当該識別された不良コード部分領域を使用して、アプリケーションの実行を最適化する。
前述の説明は、本発明の実施形態に向けられているが、本発明の基本的な範囲から逸脱することなく、他の実施形態を考案することができる。本発明の範囲は、以下の請求項の記載によって決定される。
100・・・アプリケーションの実行を最適化するためのシステム
102・・・コンピュータ
104・・・プロセッサ
106・・・メモリ
108・・・ストレージ
148・・・コンパイラ
150・・・マルチパス・プロファイラ
152・・・装備化アプリケーション
154・・・アプリケーション・コード
156・・・プロファイル・データ
158・・・粒度レベル
160・・・ユーザ・オプション
162・・・しきい値
164・・・注釈
210・・・粒度マネージャ
220・・・オプション・マネージャ
230・・・しきい値マネージャ
240・・・注釈マネージャ
250・・・領域エバリュエータ

Claims (24)

  1. コンピュータ内の1つ以上のプロセッサによって実行される、マルチパス動的プロファイリングのためのコンピュータに実行させる方法であって、
    アプリケーションの複数のコード領域が前記1つ以上のプロセッサ上でリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記複数のコード領域に装備するステップと、
    前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成するステップと、
    前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域として識別するステップと、
    前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備するステップと、
    前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成するステップと、
    前記追加のプロファイル・データから、前記不良コード領域の一の部分領域を識別するステップとを含む、コンピュータに実行させる方法。
  2. 前記複数のコード領域が、前記アプリケーションの少なくとも1つのコンパイル単位を評価することによって識別される、請求項1記載のコンピュータに実行させる方法。
  3. 前記プロファイル・データが、少なくとも1つのハードウェア性能カウンタに基づいて生成される、請求項1記載のコンピュータに実行させる方法。
  4. 前記プロファイル・データが、各コード領域を実行する間に生じるキャッシュ・ミスのカウントを含む、請求項1記載のコンピュータに実行させる方法。
  5. 前記複数のコード領域が、前記アプリケーションのソース・コード、前記アプリケーションのオブジェクト・コード及び前記アプリケーションの中間コンパイラ表現から選択される、請求項1記載のコンピュータに実行させる方法。
  6. 前記識別された部分領域が、メモリ参照を含む前記アプリケーションのソース・コード内の命令に対応する、請求項1記載のコンピュータに実行させる方法。
  7. 前記識別された部分領域を最適化するステップをさらに含み、
    当該最適化するステップが、インライニング、クローニング、アウトライニング、間接呼び出しの特化、不良ロード主導型データ・プリフェッチング、データ再編成及び命令スケジューリングのうち少なくとも1つを行うことを含む、請求項1記載のコンピュータに実行させる方法。
  8. 各注釈が、少なくとも実行時ライブラリへの関数呼び出し又は命令のインライン・シーケンスから選択された注釈コードに拡張される、請求項1記載のコンピュータに実行させる方法。
  9. マルチパス動的プロファイリングのためのコンピュータ・プログラムであって、前記プログラムが、プロセッサに、
    アプリケーションの複数のコード領域が前記プロセッサ上でリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記複数のコード領域に装備するステップと、
    前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成するステップと、
    前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域として識別するステップと、
    前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備するステップと、
    前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成するステップと、
    前記追加のプロファイル・データから、前記不良コード領域の一の部分領域を識別するステップとを実行させる、コンピュータ・プログラム。
  10. 前記複数のコード領域が、前記アプリケーションの少なくとも1つのコンパイル単位を評価することによって識別される、請求項9記載のコンピュータ・プログラム。
  11. 前記プロファイル・データが、少なくとも1つのハードウェア性能カウンタに基づいて生成される、請求項9記載のコンピュータ・プログラム。
  12. 前記プロファイル・データが、各コード領域を実行する間に生じるキャッシュ・ミスのカウントを含む、請求項9記載のコンピュータ・プログラム。
  13. 前記複数のコード領域が、前記アプリケーションのソース・コード、前記アプリケーションのオブジェクト・コード及び前記アプリケーションの中間コンパイラ表現から選択される、請求項9記載のコンピュータ・プログラム。
  14. 前記識別された部分領域が、少なくとも前記アプリケーションのソース・コード命令、前記アプリケーションのオブジェクト・コード命令及び前記アプリケーションの中間コンパイラ表現の命令から選択された命令に対応する、請求項9記載のコンピュータ・プログラム。
  15. 前記プログラムが、前記プロセッサに、
    前記複数のコード領域の各々のための前記生成されたプロファイル・データに基づき、前記識別された部分領域を最適化するステップをさらに実行させ、
    当該最適化するステップが、インライニング、クローニング、アウトライニング、間接呼び出しの特化、不良ロード主導型データ・プリフェッチング、データ再編成及び命令スケジューリングのうち少なくとも1つを行うことを含む、請求項9記載のコンピュータ・プログラム。
  16. 各注釈が、少なくとも実行時ライブラリへの関数呼び出し又は命令のインライン・シーケンスから選択された注釈コードに拡張される、請求項9記載のコンピュータ・プログラム。
  17. プロセッサと、
    マルチパス動的プロファイリングのためのプログラムを保持するメモリとを備えるシステムにして、
    前記プログラムが、前記プロセッサに、
    アプリケーションの複数のコード領域が前記プロセッサ上でリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記複数のコード領域に装備するステップと、
    前記アプリケーションを実行することにより、前記複数のコード領域の各々のためのプロファイル・データを生成するステップと、
    前記生成されたプロファイル・データから、キャッシュ・ミスのカウントが予定のしきい値を超える一のコード領域を、一の不良コード領域として識別するステップと、
    前記複数のコード領域がリンクされ且つ実行されるときにプロファイル・データを生成するための注釈を、前記不良コード領域に装備するステップと、
    前記アプリケーションを実行することにより、前記不良コード領域を含む前記複数のコード領域のための追加のプロファイル・データを生成するステップと、
    前記追加のプロファイル・データから、前記不良コード領域の一の部分領域を識別するステップとを実行させる、システム。
  18. 前記複数のコード領域が、前記アプリケーションの少なくとも1つのコンパイル単位を評価することによって識別される、請求項17記載のシステム。
  19. 前記プロファイル・データが、少なくとも1つのハードウェア性能カウンタに基づいて生成される、請求項17記載のシステム。
  20. 前記プロファイル・データが、各コード領域を実行する間に生じるキャッシュ・ミスのカウントを含む、請求項17記載のシステム。
  21. 前記複数のコード領域が、前記アプリケーションのソース・コード、前記アプリケーションのオブジェクト・コード及び前記アプリケーションの中間コンパイラ表現から選択される、請求項17記載のシステム。
  22. 前記識別された部分領域が、メモリ参照を含む前記アプリケーションのソース・コード内の命令に対応する、請求項17記載のシステム。
  23. 前記プログラムが、前記プロセッサに、
    前記識別された部分領域を最適化するステップをさらに実行させ、
    当該最適化するステップが、インライニング、クローニング、アウトライニング、間接呼び出しの特化、不良ロード主導型データ・プリフェッチング、データ再編成及び命令スケジューリングのうち少なくとも1つを行うことを含む、請求項17記載のシステム。
  24. 各注釈が、少なくとも実行時ライブラリへの関数呼び出し又は命令のインライン・シーケンスから選択された注釈コードに拡張される、請求項17記載のシステム。
JP2010109001A 2009-07-15 2010-05-11 マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム Active JP5473768B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CA2672337A CA2672337C (en) 2009-07-15 2009-07-15 Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis
CA2672337 2009-07-15

Publications (2)

Publication Number Publication Date
JP2011022993A JP2011022993A (ja) 2011-02-03
JP5473768B2 true JP5473768B2 (ja) 2014-04-16

Family

ID=43448724

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010109001A Active JP5473768B2 (ja) 2009-07-15 2010-05-11 マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム

Country Status (4)

Country Link
US (1) US9946523B2 (ja)
JP (1) JP5473768B2 (ja)
CN (1) CN101957773B (ja)
CA (1) CA2672337C (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7351326B2 (ja) 2021-09-22 2023-09-27 カシオ計算機株式会社 時計外装部材、時計、時計外装部材の製造方法

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9280439B2 (en) * 2011-02-11 2016-03-08 Sap Se Usage analysis of productive environment to establish new data source for process optimization and project planning
CN102650964B (zh) 2011-02-28 2016-03-09 国际商业机器公司 用于监控面向对象的应用的方法、系统和自监控系统
US9274919B2 (en) * 2011-04-29 2016-03-01 Dynatrace Software Gmbh Transaction tracing mechanism of distributed heterogenous transactions having instrumented byte code with constant memory consumption and independent of instrumented method call depth
JP5998764B2 (ja) * 2012-09-04 2016-09-28 富士通株式会社 情報処理装置、ログ出力方法およびログ出力プログラム
US9110765B2 (en) * 2012-10-17 2015-08-18 Sap Portals Israel Ltd Displaying different hierarchy levels of computer program source code
US9875090B2 (en) 2012-12-20 2018-01-23 Microsoft Technology Licensing, Llc Program analysis based on program descriptors
US9880842B2 (en) * 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
JP6127639B2 (ja) * 2013-03-26 2017-05-17 富士通株式会社 プログラム実行制御プログラム、プログラム実行制御方法
KR102125559B1 (ko) * 2013-10-28 2020-06-22 삼성전자주식회사 멀티 패스 시뮬레이터에서 캐시 프로파일링 정보를 보정하는 방법 및 이를 위한 장치
US10157239B2 (en) * 2013-12-23 2018-12-18 Oracle International Corporation Finding common neighbors between two nodes in a graph
US9348567B2 (en) 2014-07-03 2016-05-24 Microsoft Technology Licensing, Llc. Profile guided optimization in the presence of stale profile data
US9928310B2 (en) 2014-08-15 2018-03-27 Oracle International Corporation In-memory graph pattern matching
JP6471615B2 (ja) * 2015-06-02 2019-02-20 富士通株式会社 性能情報生成プログラム、性能情報生成方法及び情報処理装置
US9535673B1 (en) * 2016-02-03 2017-01-03 International Business Machines Corporation Reducing compilation time using profile-directed feedback
US10261763B2 (en) * 2016-12-13 2019-04-16 Palantir Technologies Inc. Extensible data transformation authoring and validation system
US11182272B2 (en) 2018-04-17 2021-11-23 International Business Machines Corporation Application state monitoring
US11775471B2 (en) * 2019-10-08 2023-10-03 Embarcadero Technologies, Inc. System and method for caching converted files and compiling computer code from the cache
CN112988593B (zh) * 2021-04-13 2024-02-06 苏州沁游网络科技有限公司 代码分析方法、装置、计算机设备及存储介质
US11775317B2 (en) 2021-04-30 2023-10-03 International Business Machines Corporation Locate neural network performance hot spots

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08263372A (ja) * 1995-03-28 1996-10-11 Hitachi Ltd キャッシュミス情報の収集とチューニングを行う装置
US5815720A (en) * 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
US6631518B1 (en) * 1997-03-19 2003-10-07 International Business Machines Corporation Generating and utilizing organized profile information
US6149318A (en) * 1997-04-15 2000-11-21 Samuel C. Kendall Link-time and run-time error detection, and program instrumentation
US6047363A (en) * 1997-10-14 2000-04-04 Advanced Micro Devices, Inc. Prefetching data using profile of cache misses from earlier code executions
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6134710A (en) * 1998-06-26 2000-10-17 International Business Machines Corp. Adaptive method and system to minimize the effect of long cache misses
US6308324B1 (en) * 1999-06-10 2001-10-23 International Business Machines Corporation Multi-stage profiler
US6934832B1 (en) * 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer
US6865730B1 (en) * 2000-03-08 2005-03-08 International Business Machines Corporation Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading
US7120906B1 (en) * 2000-04-28 2006-10-10 Silicon Graphics, Inc. Method and computer program product for precise feedback data generation and updating for compile-time optimizations
US6681318B2 (en) 2000-09-08 2004-01-20 Sun Microsystems, Inc. Method and apparatus for using an assist processor to prefetch instructions for a primary processor
US6832296B2 (en) 2002-04-09 2004-12-14 Ip-First, Llc Microprocessor with repeat prefetch instruction
US7146607B2 (en) * 2002-09-17 2006-12-05 International Business Machines Corporation Method and system for transparent dynamic optimization in a multiprocessing environment
US7194732B2 (en) * 2003-06-26 2007-03-20 Hewlett-Packard Development Company, L.P. System and method for facilitating profiling an application
US7788657B2 (en) * 2004-02-27 2010-08-31 Tvworks, Llc Targeted runtime compilation
US8301868B2 (en) * 2005-09-23 2012-10-30 Intel Corporation System to profile and optimize user software in a managed run-time environment
US7987456B2 (en) * 2006-01-24 2011-07-26 Microsoft Corporation Qualitatively annotated code
US8136124B2 (en) * 2007-01-18 2012-03-13 Oracle America, Inc. Method and apparatus for synthesizing hardware counters from performance sampling

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7351326B2 (ja) 2021-09-22 2023-09-27 カシオ計算機株式会社 時計外装部材、時計、時計外装部材の製造方法

Also Published As

Publication number Publication date
CA2672337A1 (en) 2011-01-15
JP2011022993A (ja) 2011-02-03
CN101957773A (zh) 2011-01-26
US9946523B2 (en) 2018-04-17
CA2672337C (en) 2017-01-03
CN101957773B (zh) 2014-10-29
US20110016460A1 (en) 2011-01-20

Similar Documents

Publication Publication Date Title
JP5473768B2 (ja) マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム
JP4003830B2 (ja) マルチプロセッシング環境における透過動的最適化のための方法およびシステム
US7725883B1 (en) Program interpreter
US8181170B2 (en) Unwind information for optimized programs
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US20070226698A1 (en) Method for improving performance of executable code
US20040025152A1 (en) Compiling method, apparatus, and program
US8886887B2 (en) Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization
Bebenita et al. Trace-based compilation in execution environments without interpreters
JPH09330233A (ja) 最適目的コード生成方法
US20130125096A1 (en) Systems and Methods for Dynamic Collection of Probe Call Sites
US20080091923A1 (en) Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US6360360B1 (en) Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
US7143404B2 (en) Profile-guided data layout
JP3992102B2 (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
JP5719278B2 (ja) 情報処理装置、プロファイル対象決定プログラム及び方法
Leopoldseder et al. Fast-path loop unrolling of non-counted loops to enable subsequent compiler optimizations
Su et al. An efficient GPU implementation of inclusion-based pointer analysis
JP5871589B2 (ja) 情報処理装置、配列の初期サイズ調整プログラム及び方法
US6925636B2 (en) Method and apparatus for refining an alias set of address taken variables
JP5447774B2 (ja) プリフェッチ命令生成方法、コンパイラ、及びプログラム
KR20060035077A (ko) 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
Häubl et al. Evaluation of trace inlining heuristics for Java
Nakamura et al. Performance Study of Kotlin and Java Programs with Bytecode Analysis
JP4064869B2 (ja) コード変換装置、コード変換方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131210

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140114

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140204

R150 Certificate of patent or registration of utility model

Ref document number: 5473768

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150