(57)【要約】【課題】  代表的なトレースを得るための命令を識別する方法、システム及びコンピュータ・プログラム製品を提供する。【解決手段】  １組のフェーズのうちの各フェーズごとのフェーズ命令割当数を計算する。フェーズ命令割当数は、各フェーズに関連する重み及びグローバル命令割当数に基づく。各フェーズごとの前記フェーズ命令割当数を満たすために、各フェーズにおける１組のインターバル内の命令用の開始インデックス及び終了インデックスを識別することにより、１組のインターバル・インデックスを形成する。前記１組のインターバル・インデックス内の前記命令が前記グローバル命令割当数を満たすか否かを決定する。前記グローバル命令割当数が満たされているとの前記決定に応答して、前記１組のインターバル・インデックスを、前記代表的なトレース用のコレクション・ポイントとして出力する。【選択図】  図８
2008305402.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムにおいて、代表的なトレースを得るための命令を識別する方法であって、
（ａ）１組のフェーズのうちの各フェーズに関連する重み及びグローバル命令割当数に基づき、各フェーズごとのフェーズ命令割当数を計算するステップと、
（ｂ）各フェーズごとの前記フェーズ命令割当数を満たすために、各フェーズにおける１組のインターバル内の命令用の開始インデックス及び終了インデックスを識別することにより、１組のインターバル・インデックスを形成するステップと、
（ｃ）前記１組のインターバル・インデックス内の前記命令が前記グローバル命令割当数を満たすか否かを決定するステップと、
（ｄ）前記グローバル命令割当数が満たされているとの前記決定に応答して、前記１組のインターバル・インデックスを、前記代表的なトレース用のコレクション・ポイントとして出力するステップとを含む、方法。
【請求項２】
前記グローバル命令割当数内の前記命令に、１組のウォームアップ命令を含めるべきか否かを決定するステップと、
ウォームアップ命令を含めるべきとの前記決定に応答して、前記開始インデックスを、予定数の命令だけ調整するか、又は前記１組のインターバル内の以前のインターバルの終端に調整するステップとをさらに含む、請求項１記載の方法。
【請求項３】
前記ステップ（ｂ）が、
前記１組のインターバルのうちの最も代表的なインターバル内の命令の数が前記フェーズ命令割当数と等しいか否かを決定するステップと、
前記最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数と等しいとの前記決定に応答して、前記最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記最も代表的なインターバルの終端を前記終了インデックスとして識別するステップとを含む、請求項１記載の方法。
【請求項４】
前記ステップ（ｂ）が、
前記１組のインターバルのうちの最も代表的なインターバル内の命令の数が前記フェーズ命令割当数より大きいか否かを決定するステップと、
前記最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数より大きいとの前記決定に応答して、前記最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記最も代表的なインターバルを、前記命令の数が前記フェーズ命令割当数と等しくなるポイントである、前記終了インデックスにスケーリングするステップとを含む、請求項１記載の方法。
【請求項５】
前記ステップ（ｂ）が、
前記１組のインターバルのうちの２つ以上の最も代表的なインターバル内の命令の数が前記フェーズ命令割当数と等しいか否かを決定するステップと、
前記２つ以上の最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数と等しいとの前記決定に応答して、前記２つ以上の最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記２つ以上の最も代表的なインターバルの終端を前記終了インデックスとして識別するステップとを含む、請求項１記載の方法。
【請求項６】
前記ステップ（ｂ）が、
前記１組のインターバルのうちの２つ以上の最も代表的なインターバル内の命令の数が前記フェーズ命令割当数より大きいか否かを決定するステップと、
前記２つ以上の最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数より大きいとの前記決定に応答して、前記２つ以上の最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記２つ以上の最も代表的なインターバルを、前記命令の数が前記フェーズ命令割当数と等しくなるポイントである、前記終了インデックスにスケーリングするステップとを含む、請求項１記載の方法。
【請求項７】
前記グローバル命令割当数が満たされていないとの前記ステップ（ｃ）の決定に応答して、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より小さいか否かを決定するステップと、
前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より小さいとの前記決定に応答して、前記グローバル命令割当数を満たすように、前記１組のフェーズのうちの１つのフェーズの１つのインターバル内の前記命令を増加させるステップとをさらに含む、請求項１記載の方法。
【請求項８】
前記グローバル命令割当数が満たされていないとの前記ステップ（ｃ）の決定に応答して、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より大きいか否かを決定するステップと、
前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より大きいとの前記決定に応答して、前記グローバル命令割当数を満たすように、前記１組のフェーズのうちの１つのフェーズの１つのインターバル内の前記命令を減少させるステップとをさらに含む、請求項１記載の方法。
【請求項９】
請求項１ないし請求項８の何れか１項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【請求項１０】
システムであって、
プロセッサと、
前記プロセッサに結合されたメモリとを備え、
前記メモリ内に格納された命令が、前記プロセッサによって実行されるときに、前記プロセッサに
（ａ）１組のフェーズのうちの各フェーズに関連する重み及びグローバル命令割当数に基づき、各フェーズごとのフェーズ命令割当数を計算する機能と、
（ｂ）各フェーズごとの前記フェーズ命令割当数を満たすために、各フェーズにおける１組のインターバル内の命令用の開始インデックス及び終了インデックスを識別することにより、１組のインターバル・インデックスを形成する機能と、
（ｃ）前記１組のインターバル・インデックス内の前記命令が前記グローバル命令割当数を満たすか否かを決定する機能と、
（ｄ）前記グローバル命令割当数が満たされているとの前記決定に応答して、前記１組のインターバル・インデックスを、前記代表的なトレース用のコレクション・ポイントとして出力する機能とを実現させる、システム。
【請求項１１】
前記命令が前記プロセッサに
前記グローバル命令割当数内の前記命令に、１組のウォームアップ命令を含めるべきか否かを決定する機能と、
ウォームアップ命令を含めるべきとの前記決定に応答して、前記開始インデックスを、予定数の命令だけ調整するか、又は前記１組のインターバル内の以前のインターバルの終端に調整する機能とをさらに実現させる、請求項１０記載のシステム。
【請求項１２】
前記機能（ｂ）が、
前記１組のインターバルのうちの最も代表的なインターバル内の命令の数が前記フェーズ命令割当数と等しいか否かを決定する機能と、
前記最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数と等しいとの前記決定に応答して、前記最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記最も代表的なインターバルの終端を前記終了インデックスとして識別する機能と、
前記１組のインターバルのうちの最も代表的なインターバル内の命令の数が前記フェーズ命令割当数より大きいか否かを決定する機能と、
前記最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数より大きいとの前記決定に応答して、前記最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記最も代表的なインターバルを、前記命令の数が前記フェーズ命令割当数と等しくなるポイントである、前記終了インデックスにスケーリングする機能と、
前記１組のインターバルのうちの２つ以上の最も代表的なインターバル内の命令の数が前記フェーズ命令割当数と等しいか否かを決定する機能と、
前記２つ以上の最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数と等しいとの前記決定に応答して、前記２つ以上の最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記２つ以上の最も代表的なインターバルの終端を前記終了インデックスとして識別する機能とを含む、請求項１０記載のシステム。
【請求項１３】
前記機能（ｂ）が、
前記１組のインターバルのうちの２つ以上の最も代表的なインターバル内の命令の数が前記フェーズ命令割当数より大きいか否かを決定する機能と、
前記２つ以上の最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数より大きいとの前記決定に応答して、前記２つ以上の最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記２つ以上の最も代表的なインターバルを、前記命令の数が前記フェーズ命令割当数と等しくなるポイントである、前記終了インデックスにスケーリングする機能とを含む、請求項１０記載のシステム。
【請求項１４】
前記命令が前記プロセッサに
前記グローバル命令割当数が満たされていないとの前記機能（ｃ）の決定に応答して、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より小さいか否かを決定する機能と、
前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より小さいとの前記決定に応答して、前記グローバル命令割当数を満たすように、前記１組のフェーズのうちの１つのフェーズの１つのインターバル内の前記命令を増加させる機能とをさらに実現させる、請求項１０記載のシステム。
【請求項１５】
前記命令が前記プロセッサに
前記グローバル命令割当数が満たされていないとの前記機能（ｃ）の決定に応答して、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より大きいか否かを決定する機能と、
前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より大きいとの前記決定に応答して、前記グローバル命令割当数を満たすように、前記１組のフェーズのうちの１つのフェーズの１つのインターバル内の前記命令を減少させる機能とをさらに実現させる、請求項１０記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令のトレーシングに係り、さらに詳細に説明すれば、代表的な命令トレース用のコレクション・ポイントを識別するために、当該トレースのフェーズから命令インターバルをスケールすることに係る。
【背景技術】
【０００２】
最近のソフトウェア作業負荷は、単一のデータセット用の数兆（１０１２）の命令を構成する、動的命令パス・レングスを有することがある。例えば、最新の動画圧縮標準Ｈ．２６４／ＡＶＣ（Advanced Video Coding）の参照実装であるコンピュータ・プログラム「464.h264ref」は、単一のデータセットを使用中のプロセッサ上で完了するまで実行される場合、３．２×１０１２以上の動的命令を有することがある。
【０００３】
トレース駆動型性能シミュレータは、設計変更を評価したり、将来のプロセッサ用の作業負荷性能を推定するために使用される。これらのシミュレータは、最近の機械上で毎秒当たり約１×１０４程度の命令を実行することができる。従って、１×１０１２の動的命令を有するプログラムについては、シミュレーションを完了するまで、約３．１年を要するであろう。しかし、従来の技術は、作業負荷内の動的命令が、しばしば実行のフェーズ、すなわちプログラムによって実行されている基本ブロックに強く相関する命令の反復シーケンスを呈することを示している。かかる顕著なプログラム・フェーズだけから代表的なトレースを作成することにより、シミュレーションを要する命令の数が著しく減少される。
【０００４】
幾つかの既知のシステムは、統計的解析技術を使用して得られる粗粒度のフェーズ又は細粒度の命令ブロックを使用して、プログラムの動的実行から非常に多数の命令の機械実行特性を比例的に表す、少数の命令を識別する。これらの既知のシステムの出力は、１組の開始及び終了命令インデックス・ペアである。これらの命令インデックス・ペアは、プログラムの実行を最も良く表す、プログラム実行又はプログラム・トレースの部分（例えば、フェーズ又は命令ブロック）を指示する。多くの場合、全てのフェーズの長さは同じであるから、総合的性能を得るためには、各フェーズごとの性能結果と完全なプログラム実行（full program execution）における当該フェーズの出現頻度とを掛ければよい。さらに、これらのフェーズは、シミュレータ上の同時実行用の全ての入力データセットから得られないことがある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、これらの既知のシステムは、（１）プログラムを表すために特定数の命令を使用すること、（２）各入力データセットからのフェーズを含めること、（３）全てのデータセットを一度に含めることを意図しておらず、その結果、シミュレータ・システムにおける効率的且つ正確なトレース駆動型プログラム実行にとって重要な事項である、全てのデータセット用の全てのプログラム・フェーズがトレースにおいて正確に表されることも意図していない。
【課題を解決するための手段】
【０００６】
実施形態は、プログラムの動的実行及びその全ての入力データセットから、小さな１組の代表的な命令のコレクションを提供する。プログラム実行トレースは、命令インターバルへ分割される。次に、これらのインターバルは、当該インターバルの各々に割り当てられた重み及び命令割当数（instruction budget）に基づき、選択され、順序付けられ、スケールされる。これらのインターバルは、命令割当数内の作業負荷を表すように選択される。或る場合は、ハードウェア性能モニタ・カウンタを使用して、選択されたインターバルを代表性（representativeness）について評価することができる。そうするためには、選択されたインターバルの各々からのスケールされた命令を丸めることが必要になることがある。しかし、スケールされた命令を丸めることは、命令割当数に関する全体的な命令の不足又は過剰のような誤差を導くことがある。これらの誤差は、1つ以上のインターバル内の命令の数を調整することによって修正される。さらに、選択されたインターバルに基づき、ウォームアップ命令を含めることができる。ウォームアップ命令は、キャッシュ及びブランチ予測機構のような、プロセッサの局所性構造をウォームアップするために必要とされる追加の命令である。その後、所望のウォームアップ命令を含む、命令の代表的なトレースが収集され、当該プログラムの実行をシミュレートするためにシミュレータによって使用される。
【０００７】
方法に係る実施形態は、代表的なトレースを得るための命令を識別することに向けられている。この実施形態は、（ａ）１組のフェーズのうちの各フェーズに関連する重み及びグローバル命令割当数に基づき、各フェーズごとのフェーズ命令割当数を計算するステップと、（ｂ）各フェーズごとの前記フェーズ命令割当数を満たすために、各フェーズにおける１組のインターバル内の命令用の開始インデックス及び終了インデックスを識別することにより、１組のインターバル・インデックスを形成するステップと、（ｃ）前記１組のインターバル・インデックス内の前記命令が前記グローバル命令割当数を満たすか否かを決定するステップと、（ｄ）前記グローバル命令割当数が満たされているとの前記決定に応答して、前記１組のインターバル・インデックスを、前記代表的なトレース用のコレクション・ポイントとして出力するステップとを含む。
【０００８】
実施形態は、前記グローバル命令割当数内の前記命令に、１組のウォームアップ命令を含めるべきか否かを決定するステップと、ウォームアップ命令を含めるべきとの前記決定に応答して、前記開始インデックスを、予定数の命令だけ調整するか、又は前記１組のインターバル内の以前のインターバルの終端に調整するするステップとをさらに含む。
【０００９】
1つの実施形態では、前記ステップ（ｂ）が、前記１組のインターバルのうちの最も代表的なインターバル内の命令の数が前記フェーズ命令割当数と等しいか否かを決定するステップと、前記最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数と等しいとの前記決定に応答して、前記最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記最も代表的なインターバルの終端を前記終了インデックスとして識別するステップとを含む。
【００１０】
他の実施形態では、前記ステップ（ｂ）が、前記１組のインターバルのうちの最も代表的なインターバル内の命令の数が前記フェーズ命令割当数より大きいか否かを決定するステップと、前記最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数より大きいとの前記決定に応答して、前記最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記最も代表的なインターバルを、前記命令の数が前記フェーズ命令割当数と等しくなるポイントである、前記終了インデックスにスケーリングするステップとを含む。
【００１１】
さらに他の実施形態では、前記ステップ（ｂ）が、前記１組のインターバルのうちの２つ以上の最も代表的なインターバル内の命令の数が前記フェーズ命令割当数と等しいか否かを決定するステップと、前記２つ以上の最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数と等しいとの前記決定に応答して、前記２つ以上の最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記２つ以上の最も代表的なインターバルの終端を前記終了インデックスとして識別するステップとを含む。
【００１２】
さらに他の実施形態では、前記ステップ（ｂ）が、前記１組のインターバルのうちの２つ以上の最も代表的なインターバル内の命令の数が前記フェーズ命令割当数より大きいか否かを決定するステップと、前記２つ以上の最も代表的なインターバル内の前記命令の数が前記フェーズ命令割当数より大きいとの前記決定に応答して、前記２つ以上の最も代表的なインターバルの始端を前記開始インデックスとして識別し且つ前記２つ以上の最も代表的なインターバルを、前記命令の数が前記フェーズ命令割当数と等しくなるポイントである、前記終了インデックスにスケーリングするステップとを含む。
【００１３】
実施形態は、前記グローバル命令割当数が満たされていないとの前記ステップ（ｃ）の決定に応答して、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より小さいか否かを決定するステップと、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より小さいとの前記決定に応答して、前記グローバル命令割当数を満たすように、前記１組のフェーズのうちの１つのフェーズの１つのインターバル内の前記命令を増加させるステップとをさらに含む。
【００１４】
実施形態は、前記グローバル命令割当数が満たされていないとの前記ステップ（ｃ）の決定に応答して、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より大きいか否かを決定するステップと、前記１組のインターバル・インデックス内の前記命令の和が前記グローバル命令割当数より大きいとの前記決定に応答して、前記グローバル命令割当数を満たすように、前記１組のフェーズのうちの１つのフェーズの１つのインターバル内の前記命令を減少させるステップとをさらに含む。
【００１５】
他の実施形態では、コンピュータ可読プログラムを有するコンピュータ使用可能な媒体から成る、コンピュータ・プログラム製品が提供される。このコンピュータ可読プログラムは、コンピュータ上で実行されるとき、コンピュータに前述の各動作を実行させる。
【００１６】
さらに他の実施形態では、システムが提供される。このシステムは、プロセッサと、前記プロセッサに結合されたメモリとを備える。前記メモリ内に格納された命令が前記プロセッサによって実行されるときに、前記命令が前記プロセッサに前述の各動作を実行させる。
【発明を実施するための最良の形態】
【００１７】
最近のソフトウェア・シミュレーションは、代表的なトレースが、次のような基準を満たすことを必要とすることがある。
（１）単一のトレースは、プログラム又は作業負荷用の全ての入力データセットを表さなければならない。
（２）当該トレースは、当該入力データセット用の全ての実行のフェーズを表すために、十分に長くなければならない。
（３）ウォームアップ命令を含む当該トレースは、高速ターンアラウンドの性能設計検討及び予測を可能とするために、妥当な量の時間内に性能シミュレータで実行しなければならない。
一般に、妥当な量の時間は、１日又は２日以内である。このことは、トレースが、全てのフェーズを網羅する命令の点で、特定の長さを持たなければならないことを意味する。さらに、任意のプログラム用のトレースは、他の任意のプログラム用のものと同じ数の命令であることが望ましい。というのは、性能シミュレータを通して両者が実行される場合、実行レートの比較を合理的に行うことができるからである。言い換えれば、もし、１つのトレースが他のトレースよりもかなり前に終了すれば、最終的な性能レートの結果は、実プロセッサ等における同様のプログラムの実行を表さないことがある。
【００１８】
実施形態によれば、データ処理システムは、かかる基準を満たす代表的なトレースを得るための方法を提供する。図１は、実施形態の諸側面を実装することができる、代表的なデータ処理システムを示す。データ処理システム１００は、本発明の実施形態のプロセスを実装するコンピュータ使用可能コード又は命令を有するコンピュータの１例である。
【００１９】
データ処理システム１００は、ノース・ブリッジ兼メモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ）１０２及びサウス・ブリッジ兼入出力（Ｉ／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ）１０４を含む、ハブ・アーキテクチャを使用する。処理ユニット１０６、主メモリ１０８及びグラフィックス・プロセッサ１１０は、ＮＢ／ＭＣＨ １０２に接続される。 グラフィックス・プロセッサ１１０は、アクセラレィテッド・グラフィックス・ポート（ＡＧＰ）を介して、ＮＢ／ＭＣＨ １０２に接続することができる。
【００２０】
ネットワーク・アダプタ１１２は、ＳＢ／ＩＣＨ １０４に接続する。オーディオ・アダプタ１１６、キーボード及びマウス・アダプタ１２０、モデム１２２、読み取り専用メモリ（ＲＯＭ）１２４、ハード・ディスク・ドライブ（ＨＤＤ）１２６、ＣＤ−ＲＯＭドライブ１３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポート及び他の通信ポート１３２、ＰＣＩ／ＰＣＩｅ装置１３４は、バス１３８及びバス１４０を通して、ＳＢ／ＩＣＨ １０４に接続する。ＰＣＩ／ＰＣＩｅ装置１３４は、イーサネット（登録商標）・アダプタ、アドイン・カード、ノート型コンピュータ用のＰＣカード等を含むことができる。ＰＣＩはカード・バス・コントローラを使用するが、ＰＣＩｅはこれを使用しない。ＲＯＭ １２４は、フラッシュ型の基本入出力システム（ＢＩＯＳ）とすることができる。
【００２１】
ＨＤＤ １２６及びＣＤ−ＲＯＭドライブ１３０は、バス１４０を通して、ＳＢ／ＩＣＨ １０４に接続する。ＨＤＤ １２６及びＣＤ−ＲＯＭドライブ１３０は、統合ドライブ・エレクトロニクス（ＩＤＥ）又はシリアル・アドバンスト・テクノロジー・アタッチメント（ＳＡＴＡ）インタフェースを使用することができる。ＳＩＯ（Super I/O））装置１３６は、ＳＢ／ＩＣＨ １０４に接続することができる。
【００２２】
オペレーティング・システムは、処理ユニット１０６上で稼働する。オペレーティング・システムは、データ処理システム１００内の種々のコンポーネントを制御する。クライアントとして、オペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ＸＰ（「Ｍｉｃｒｏｓｏｆｔ」及び「Ｗｉｎｄｏｗｓ」は、マイクロソフト社の登録商標）のような市販のオペレーティング・システムとすることができる。Ｊａｖａのようなオブジェクト指向のプログラミング・システムは、オペレーティング・システムと共に稼働することができ、データ処理システム１００上で実行中のＪａｖａプログラム又はアプリケーションからオペレーティング・システムへの呼び出しを提供する（「Ｊａｖａ」は、サン・マイクロシステムズ社の登録商標）。
【００２３】
サーバとして、データ処理システム１００は、例えば、ＡＩＸ（Advanced Interactive Executive）オペレーティング・システム又はＬＩＮＵＸオペレーティング・システムを搭載した、ＩＢＭ ｅＳｅｒｖｅｒ ｐＳｅｒｉｅｓコンピュータ・システムとすることができる（「ｅＳｅｒｖｅｒ」、「ｐＳｅｒｉｅｓ」及び「ＡＩＸ」は、ＩＢＭ社の商標であり、「ＬＩＮＵＸ」は、リーナス・トーバルズの商標）。データ処理システム１００は、処理ユニット１０６内に複数のプロセッサを含む対称マルチプロセッサ（ＳＭＰ）システムとすることができる。代替的に、単一プロセッサ・システムを使用することもできる。
【００２４】
オペレーティング・システム、オブジェクト指向のプログラミング・システム及びアプリケーション又はプログラムのための命令は、ＨＤＤ １２６のような記憶装置に置かれ、処理ユニット１０６による実行のために主メモリ１０８にロードすることができる。本発明の実施形態のプロセスは、（主メモリ１０８、ＲＯＭ １２４、周辺装置１２６及び１３０等の）メモリ内に置かれたコンピュータ使用可能なプログラム・コードを使用する、処理ユニット１０６によって実行することができる。
【００２５】
バス１３８又はバス１４０のようなバス・システムは、１つ以上のバスで構成することができる。もちろん、このバス・システムは、異なるコンポーネント又は装置の間でデータを転送する、任意のタイプの通信ファブリック又はアーキテクチャを使用して実装することができる。モデム１２２又はネットワーク・アダプタ１１２のような通信ユニットは、データを送信及び受信するために使用される１つ以上の装置を含むことができる。メモリは、例えば、主メモリ１０８、ＲＯＭ １２４又はＮＢ／ＭＣＨ １０２内にあるキャッシュとすることができる。
【００２６】
図１のハードウェアは、実装に依存して変わることがある。図１に示すハードウェアに加えて、又はそのハードウェアに代えて、フラッシュ・メモリ、それと同等の不揮発性メモリ、光ディスク・ドライブ等の、他の内部ハードウェア又は周辺装置を使用することができる。さらに、実施形態のプロセスは、本発明の精神及び範囲から逸脱することなく、前述のＳＭＰシステムとは異なる多重プロセッサ・データ処理システムにも適用することができる。
【００２７】
さらに、データ処理システム１００は、クライアント計算装置、サーバ計算装置、タブレット・コンピュータ、ラップトップ・コンピュータ、電話機、パーソナル・デジタル・アシスタント（ＰＤＡ）等を含む、多数の異なるデータ処理システムのうちの任意の形式を取ることができる。幾つかの例では、データ処理システム１００は、オペレーティング・システムのファイル又はユーザ生成データを格納するための不揮発性メモリ又はフラッシュ・メモリで構成される、ポータブル計算装置とすることができる。本質的に、データ処理システム１００は、アーキテクチャ上の制限がなく、既知又は将来に開発されるデータ処理システムのうち任意のものとすることができる。
【００２８】
実施形態は、開始及び終了命令インデックスを使用し、特定の命令割当数を満たすように、すなわち、或る数の命令がシミュレータ上で或る量の時間内に稼働するように、これらの開始及び終了インデックスを配分する。実施形態は、線形の命令シミュレーション環境のような、特定のシミュレーション環境内で有効に使用することができる。線形の命令シミュレーション環境では、命令は、命令間のフェーズ関係に拘わらず、特定の順序で次々にシミュレートされなければならない。
【００２９】
図２は、実施形態に従った、代表的なトレース用のコレクション・ポイントを識別する、命令スケーリング・システム２００を示す。命令スケーリング・システム２００は、インターバル・サイズ２０４を受け取るフェーズ識別モジュール２０２と、入力として、各データセットごとに１つずつ存在し、単一のトレースへ連結される複数のプログラム・トレース２０６と、分割ファイル２０８とを含む。各データセットは、プログラムの実行中に使用される１組のデータである。実施形態は、１つのデータセット又は複数のデータセットを使用することができる。プログラム・トレース２０６の各々は、プログラムの実行された命令の完全なトレースである。フェーズ識別モジュール２０２は、プログラム・トレース２０６を、インターバル・サイズ２０４に等しいサイズを有するサンプル又は命令のインターバルへ分割する。インターバル・サイズ２０４は、ユーザから提供されて、フェーズ識別モジュール２０２に引き渡される。インターバル・サイズ２０４は、予め定義されたサイズを有することができる。例えば、代表的なインターバル・サイズは、１０×１０６〜１００×１０６の命令である。インターバル・サイズ２０４は、性能モデル・シミュレータ２１０上のシミュレーション結果の効率的なターンアラウンド・タイムに必要な命令割当数よりも小さくすべきである。好ましくは、ターンアラウンド・タイムは、１日又は他の所望の期間であり、性能モデルの詳細及び性能モデル・シミュレータ２１０の速度に依存する。正確なプログラム・シミュレーションのためにプログラム・トレース２０６に必要とされるインターバルの数は、変わることがある。しかし、シミュレーション実験によれば、多くのプログラムについて完全なプログラム実行を表すためには、通常、５〜１５のインターバル、又は平均で約１０のインターバルが必要であることが分かっている。従って、１０のインターバルとインターバル当たり１０×１０６の命令とを掛けると、１００×１０６の命令を有する総命令割当数が提供されることになる。
【００３０】
分割ファイル２０８は、プログラム・トレース２０６から生成される。分割ファイル２０８は、データセット・トレースが互いに連結される順序で、プログラム・トレース２０６内の命令の累積数を指定する。例えば、第１のデータセットが１０×１０６の命令を生成し、第２のデータセットが３０×１０６の命令を生成し、第３のデータセットが２０×１０６の命令を生成する場合、分割ファイル２０８は、第１のデータセットについてはその命令が０×１０６において開始することを指示し、第２のデータセットについてはその命令が１０×１０６において開始することを指示し、第３のデータセットについてはその命令が４０×１０６において開始することを指示するであろう。もし、第４のデータセットが含まれていたならば、分割ファイル２０８は、第４のデータセットのサイズに拘わらず、その命令が６０×１０６において開始することを指示するであろう。前述のように、プログラム・トレース２０６は、フェーズ識別モジュール２０２を使用するフェーズ識別のために、互いに連結される。その後、分割ファイル２０８を使用して、識別されたフェーズを、各プログラム・トレース２０６内の最初の命令に関係するコレクション・ポイントに分割することができる。というのは、これらの代表的なトレースは、プログラム・シミュレータ内で個々に実行されるからである。
【００３１】
フェーズ識別モジュール２０２は、周知のＫ−ｍｅａｎｓアルゴリズムのようなソフトウェア形態のクラスタ化アルゴリズムを使用して、プログラム・トレース２０６上でフェーズ検出を実行する。すなわち、プログラム・トレース２０６のインターバル間の類似性を見つけ、これらのインターバルを、プログラムの各フェーズごとに１つずつ、別個のフェーズ・リストへグループ化した後、それらをラベル・ファイル２１２にリストする。ラベル・ファイル２１２は、各フェーズ内のインターバルを、各インターバルがクラスタ化アルゴリズムによって決定されたフェーズをどの程度良好に表すかに応じて、最上部から最下部まで順序付けてリストする。ラベル・ファイル２１２内にある各フェーズの最上部におけるインターバルは、当該フェーズの最も代表的なインターバルであると呼ばれる。これに対し、ラベル・ファイル２１２内にある各フェーズの最下部におけるインターバルは、当該フェーズの最も代表的でないインターバルであると呼ばれる。フェーズ識別モジュール２０２は、他のフェーズ識別生成化ファイル２１４と共に、ラベル・ファイル２１２を生成する。また、フェーズ識別生成化ファイル２１４は、シミュレーション・ポイント（以下「Ｓｉｍｐｏｉｎｔｓ」と表記）ファイル２１６及び重みファイル２１８を含むことができる。
【００３２】
Ｓｉｍｐｏｉｎｔｓファイル２１６は、ラベル・ファイル２１２内にあるフェーズの最上部におけるインターバル、すなわち、当該フェーズを表すインターバル・グループのうち最も代表的なインターバルを指定する。Ｓｉｍｐｏｉｎｔｓファイル２１６は、当該インターバルの開始動的命令の番号をインターバル・サイズ２０４で割ることによって、当該インターバルを指定する。重みファイル２１８は、各フェーズごとの重みを、当該フェーズに帰することができる完全なプログラム実行からの命令の割合として指定する。例えば、プログラム・トレース２０６内の全ての命令の和が１５０×１０６の命令に等しく、そして１つの特定のフェーズが６０×１０６の命令を有していれば、当該特定のフェーズの重みは４０パーセントである。性能の加重和は、全てのフェーズについて得ることができ、プログラム・トレース２０６の実行の性能を表す。
【００３３】
命令計算モジュール２２０は、フェーズ識別生成化ファイル２１４を次のように処理する。すなわち、Ｓｉｍｐｏｉｎｔｓファイル２１６によって指示された各フェーズについて、命令計算モジュール２２０は、重みファイル２１８からの当該各フェーズに対応する重みを使用して、所与の命令割当数に基づき、当該各フェーズから幾つの命令が必要とされるかを計算する。命令計算モジュール２２０は、最も代表的なインターバルから順次に、各フェーズごとのインターバル命令開始インデックス及びインターバル命令終了インデックスを識別する。各フェーズごとの命令の数は、インターバル・サイズ又はインターバル・サイズの或る倍数より小さいことがあり、或いは１インターバル・サイズよりもその端数分だけ大きいことがある。
【００３４】
もし、命令の数が、１つのインターバル全体の命令よりも小さければ、命令計算モジュール２２０は、ラベル・ファイル２１２からの順序付きフェーズ・リスト上の最上部の要素をスケールすることにより、この要素が、重みと命令割当数とを掛けたものに等しい命令の数（但し、１×１０６の命令のような、或る命令の数に丸めるものとする）を有するようにする。例えば、命令割当数が１００×１０６の命令であり且つ或るフェーズのための重みが７．１％であると仮定すると、０．０７１と１００×１０６の命令とを掛けた結果は、７．１×１０６の命令となり、これを丸めると７×１０６の命令となるが、この数は１０×１０６のインターバル・サイズより小さい。命令計算モジュール２２０は、これらの命令を予定の丸め単位、例えば、１×１０６で丸める。というのは、ハードウェア性能モニタ・データを使用する場合、選択されたインターバルの性能は、１×１０６の命令境界上で検証することができるからである。
【００３５】
命令の丸めによって導入されることがある誤差は、命令割当数を正確に満たすために、これに対処しなければならない。もし、命令割当数を満たすために必要な命令の数が、２つ以上のインターバルの数の倍数（例えば、Ｎインターバル）であれば、命令計算モジュール２２０は、ラベル・ファイル２１２の順序付きフェーズ・リストを使用して、当該フェーズのための最も代表的な最上部のＮインターバルを選択する。留意すべきは、これらの２つ以上のインターバルが、作業負荷の動的命令間で連続していることもあるし、連続していないこともあるという点である。
【００３６】
もし、命令の必要な数が、その長さにおいて１つのインターバルより大きいが、インターバル・サイズの偶数倍よりも大きくなければ、命令計算モジュール２２０は、ラベル・ファイル２１２内のフェーズ・リストから取られた最後のインターバルを、その重みを満たす要件を達成するようにスケールし、これを再び最も近い１×１０６命令等に丸める。例えば、重みが２３．４％であれば、２１．４×１０６の命令が必要とされる。このことは、フェーズ・リストから最上部の２つのインターバルを必要とし、第３のインターバルから３×１０６の命令を必要とする。この例では、予定の丸め単位が１×１０６であれば、最後のインターバルは、再び３×１０６の命令に丸められる。
【００３７】
丸め誤差のために、命令の総数は、グローバル命令割当数を満たすように調整されなければならない。この命令の調整は、ラベル・ファイル２１２内にあるフェーズ・リストからの追加のインターバルの使用を必要とするか、又は既に選択されたインターバルのスケーリングを必要とすることがある。代表的な実装では、命令計算モジュール２２０は、最後に処理されたフェーズの最後に選択されたインターバル内の命令の数を調整する。
【００３８】
もし、丸めの結果として、命令の総数がグローバル命令割当数よりも小さくなれば、命令計算モジュール２２０は、最後のインターバルを必要な量の命令だけ増加させる。もし、当該最後のインターバルが、既に１インターバル・サイズの命令を含んでいれば、命令計算モジュール２２０は、ラベル・ファイル２１２内のフェーズ・リストの同じフェーズから次の順番のインターバルを選択し、当該インターバルをスケールし、当該インターバルをリストに追加する。もし、当該フェーズが他のインターバルを有していなければ、以前のフェーズが選択され、当該フェーズ内で最後に選択されたインターバルから順次に開始して、当該フェーズ内の１つ以上のインターバルからより多くの命令が取られる。一般に、グローバル命令割当数は、完全な実行トレースよりも遙かに小さく、そして当該トレース全体は、フェーズに割り当てねばならないインターバルに完全に分割されるので、通常、或るフェーズ内で余分な命令を見つけることは可能である。
【００３９】
もし、丸めの結果として、命令の総数がグローバル命令割当数よりも大きくなれば、最後に処理されたフェーズ内のインターバルが影響される。命令計算モジュール２２０は、割当数を満たすために、当該フェーズ内の最後に処理されたインターバルを縮小させる。もし、最後に処理されたインターバル内に十分な命令が存在しなければ、割当数を満たすために、１つ以上の以前のインターバルが、例えば、１つ以上のインターバルを除去してスケール・バックを行うために選択され、そして可能であれば他のインターバルがスケール・バックを行うために選択される。これらのインターバルは、最後に選択されたインターバルで開始し、それらのフェーズ・リスト順に、選択されたインターバルを通して逆方向に進行する。さらに、このようなスケール・バックを行っても、依然として十分な命令が除去されていなければ、同じ方法を使用して、以前のフェーズを縮小させることができる。しかし、一般に、丸め誤差は小さいから、１つのフェーズの１つのインターバルだけが影響される。
【００４０】
次の２つの異常なケースが存在する。
（１）もし、グローバル命令割当数が、プログラム・トレース２０６内の命令の数よりも大きければ、解決方法は存在しない。すなわち、代表的なトレーシングは、完全な実行トレース内の命令の数に等しいか又はこれより小さい割当数に制限される。
（２）もし、グローバル命令割当数が、プログラム・トレース２０６内の命令の数に等しければ、本プロセスは、収束し、当該トレースの全てのフェーズからの全てのインターバルを使用するであろう。このケースでは、グローバル命令割当数が満たされ、重みが満たされるであろう。
何れのケースも、シミュレーション時間を高速化するような代表的なトレースに帰着しないから、通常は望ましくない。
【００４１】
代表的な作業負荷を生成するに当たり、実証的証拠は、キャッシュ及びブランチ予測機構のようなプロセッサの局所性構造をウォームアップするために、追加の命令が必要であることを示唆する。そうするためには、（命令スケーリング・システム２００への入力としてユーザから提供することができる）追加の命令を、作業負荷を表すために命令計算モジュール２２０によって選択されたインターバルの各々の前に、収集する必要があろう。一旦、命令計算モジュール２２０が前述のような代表的なインターバルを選択すれば、命令計算モジュール２２０は、各インターバルの開始命令に先立って、インターバル・コレクションが或る予定数の命令（例えば、Ｍ命令）を開始すべきであることを指定する。１例として、Ｍをインターバル当たり１０×１０６のウォームアップ命令と等しくすることが必要かもしれない。もし、当該インターバルが代表的な命令トレースにおける以前に選択されたインターバルに連続していれば、当該以前のインターバルが局所性構造をウォームアップするので、如何なるウォームアップ命令も指定されない。もし、当該インターバルと以前に選択されたインターバルの終端との間に、ゼロより大きいがＭより小さい命令が存在すれば、かかる命令の差がウォームアップ命令の追加の数として指定される。
【００４２】
次いで、命令計算モジュール２２０は、代表的なトレースを構築するために使用することができる、１組のインターバル・コレクション・ポイント２２２を出力する。インターバル・コレクション・ポイント２２２は、各インターバルごとの最初のウォームアップ命令の開始ポイント並びにウォームアップ命令及び当該インターバル自体を含む、収集すべき命令の総数によって指定される。各インターバルは、完全なインターバル・サイズ又は当該フェーズの重みを表すようにスケール・ダウンされたものとすることができる。もし、これらのウォームアップ命令及び／又はインターバルが連続していれば、２つ以上のインターバル・コレクション・ポイント２２２を結合して、これを１つにすることができる。インターバル・コレクション・ポイント２２２は、或るシーケンスで全てのデータセットをともに実行中のプログラムに関しそれらの開始命令について順序付けられるか、又は各データセットごとに別々に順序付けられる。もし、トレースが、一度に１つのデータセットについて収集されるならば、インターバル・コレクション・ポイント２２２は、命令の数が当該データセットを実行中の動的命令の数に関係するように指定されなければならない。分割ファイル２０８は、全てのデータセットに関し特定のデータセット用の開始命令を決定するために使用される。インターバル・コレクション・ポイント２２２を使用する場合、代表的なトレース・コレクタ２２４は、プログラム・トレース２０６からの命令の代表的なトレース２２６を収集する。性能モデル・シミュレータ２１０は、代表的なトレース２２６を使用して、プロセッサ設計の性能をモデル化する。
【００４３】
前述のプロセスを使用すると、複数のプログラムの動的実行及びそれらの全てのデータセットから、小さな１組の代表的な命令が収集される。完全な実行トレースは、命令インターバルへ分割され、そして当該インターバルは、命令割当数内の作業負荷を表すために、当該インターバルに割り当てられた重みに基づき、順序付けられ、選択され、スケールされる。全体的な命令の不足又は過剰に帰着する丸め誤差は、１つ以上のインターバル内の命令を調整することにより修正される。ウォームアップ命令は、選択されたインターバルに基づき指定される。このプロセスを通して、ウォームアップ命令及び命令割当数が得られる。これは、（１）プログラムのための全てのデータセットを表す、（２）必要な命令割当数を使用して、プログラム実行を表すのに十分に長い、（３）命令割当数に基づき、妥当な量の時間で実行される、（４）ウォームアップ命令及び命令割当数に等しい全ての作業負荷のためのトレースを作成する、という特性を有する。
【００４４】
図３は、実施形態に従ったフェーズ識別モジュールによって生成される、ラベル・ファイル内のフェーズ・リスト３００を例示する。フェーズ・リスト３００は、図２のフェーズ識別モジュール２０２のような、フェーズ識別モジュールによって生成することができる。このフェーズ識別モジュールは、ソフトウェア・クラスタ化アルゴリズムを使用して、プログラム・トレースのインターバル間の類似性を見つけ、これらのインターバルを、当該プログラムの各フェーズごとに１つずつ、別々のフェーズ・リストへグループ化する。フェーズ・リスト３００は、５つの代表的なフェーズ（フェーズ３０２〜３１０）を例示する。フェーズ３０２〜３１０の各々は、予め定義されたインターバル・サイズに等しいサイズの多数の命令インターバルを含む。この例では、予め定義されたインターバル・サイズは、１０×１０６の命令である。フェーズ３０２〜３１０には、合計で１０のインターバルが存在する。但し、フェーズ３０２〜３１０の全てが、同数のインターバルを含むとは限らない。
【００４５】
フェーズ・リスト３００内の１０の代表的なインターバルは、完全なプログラム実行を表すのに必要とされるインターバルの量の１例である。この例において、フェーズ３０２はインターバル３１２及び３１４を含み、フェーズ３０４はインターバル３１６及び３１８を、フェーズ３０６はインターバル３２０、３２２及び３２４を、フェーズ３０８はインターバル３２６を、フェーズ３１０はインターバル３２８及び３３０を含む。フェーズ・リスト３００は、ソフトウェア・クラスタ化アルゴリズムに基づき、各インターバルが各フェーズをどの程度良好に表すかに応じて順序付けられる。フェーズ識別モジュールは、フェーズ・リスト３００を生成し、フェーズ・リスト３００を使用して、Ｓｉｍｐｏｉｎｔｓファイル、重みファイル、ラベル・ファイル及び分割ファイルを生成する。
【００４６】
図４〜図７は、実施形態に従った、Ｓｉｍｐｏｉｎｔｓファイル、重みファイル、順序付きフェーズ・リストを有するラベル・ファイル及び分割ファイルをそれぞれ例示する。Ｓｉｍｐｏｉｎｔｓファイル、重みファイル及びラベル・ファイルは、図２のフェーズ識別モジュール２０２のような、フェーズ識別モジュールによって生成することができる。分割ファイルは、図２の連結されたプログラム・トレース２０６の各々における命令から生成される。図４は、図２の重みファイル２１８に相当する、重みファイル４０２を示す。重みファイル４０２は、図３に示すフェーズ３０２〜３１０の各々ごとの重みを指定する。この重みは、フェーズ３０２〜３１０の各々に帰することができる、完全なプログラム実行からの命令の割合である。全てのフェーズについて得られた性能の加重和は、完全なプログラム実行を表す。重みファイル４０２において、フェーズ３０２は２０％の重みを有し、フェーズ３０４は２０％の重みを、フェーズ３０６は３０％の重みを、フェーズ３０８は１０％の重みを、フェーズ３１０は２０％の重みを有する。命令計算モジュールは、重みファイル４０２を使用して、所与の命令割当数に基づき、フェーズ３０２〜３１０の各々から幾つの命令が必要とされるかを計算する。前述のように、各フェーズごとの命令の数は、インターバル・サイズ又はインターバル・サイズの或る倍数より小さいことがあり、或いは１インターバル・サイズよりもその端数分だけ大きいことがある。
【００４７】
図５は、図２のラベル・ファイル２１２に相当する、ラベル・ファイル４０４を示す。ラベル・ファイル４０４は、図３のフェーズ３０２〜３１０の各々に割り当てられるインターバルを、代表性の順にリストする。ラベル・ファイル４０４において、フェーズ３０２は、２つのインターバル３１４及び３１２を含み、そのうちインターバル３１４は最も代表的なものであり、インターバル３１２は最も代表的でないものである。フェーズ３０４は、２つのインターバル３１６及び３１８を含み、そのうちインターバル３１６は最も代表的なものであり、インターバル３１８は最も代表的でないものである。フェーズ３０６は、３つのインターバル３２２、３２４及び３２０を含み、そのうちインターバル３２２は最も代表的なものであり、インターバル３２４は次に最も代表的ものであり、インターバル３２０は最も代表的でないものである。フェーズ３０８は、インターバル３２６のみを含む。フェーズ３１０は、２つのインターバル３２８及び３３０を含み、そのうちインターバル３２８は最も代表的なものであり、インターバル３３０は最も代表的でないものである。
【００４８】
図６は、図２のＳｉｍｐｏｉｎｔｓファイル２１６に相当する、Ｓｉｍｐｏｉｎｔｓファイル４０６を示す。Ｓｉｍｐｏｉｎｔｓファイル４０６は、フェーズ当たり１つのインターバルを指定する。当該インターバルは、当該フェーズを表すインターバル・グループのうちの最も代表的なインターバルである。Ｓｉｍｐｏｉｎｔｓファイル４０６は、当該インターバルの開始動的命令の番号をインターバル・サイズで割ることによって、当該インターバルを指定する。例えば、インターバル・サイズが１０×１０６であれば、Ｓｉｍｐｏｉｎｔｓファイル４０６内のインターバル３１４は、最初の動的命令が３．１４×１０９において開始することを指示する。Ｓｉｍｐｏｉｎｔｓファイル４０６において、フェーズ３０２についてはインターバル３１４が最も代表的なインターバルであり、フェーズ３０４についてはインターバル３１６が、フェーズ３０６についてはインターバル３２２が、フェーズ３０８についてはインターバル３２６が、フェーズ３１０についてはインターバル３２８が最も代表的なインターバルである。
【００４９】
図７は、図２の分割ファイル２０８に相当する、分割ファイル４０８を示す。分割ファイル４０８は、図２の連結されたプログラム・トレース２０６における各データセットに関連する、動的命令の開始ポイントを指定する。分割ファイル４０８が提供される理由は、当該プログラムに対する各データセットが、代表的なプログラム・トレースを収集するために別々に実行されるということにある。分割ファイル４０８において、データセット４１０上の実行は連結されたプログラム・トレース内の０×１０６の命令の後に開始し、データセット４１２上の実行は連結されたプログラム・トレース内の１０×１０６の命令において開始し、データセット４１４上の実行は連結されたプログラム・トレース内の４０×１０６の命令において開始し、データセット４１６上の実行は連結されたプログラム・トレース内の７０×１０６の命令において開始する。
【００５０】
通常、代表的なトレースは、一度に１つのデータセットについて収集されるから、インターバル・コレクション・ポイントは、命令番号がそのデータセット用の動的命令に関係するように指定される。従って、分割ファイル４０８は、全てのデータセットに関し特定のデータセット用の開始命令を決定するために使用される。図２のインターバル・コレクション・ポイント２２２及び分割ファイル４０８からの特定のデータセット用の開始命令を使用して、図２の代表的なトレース・コレクタ２２４は、そのデータセット用のプログラム・トレースから命令の代表的なトレースを収集することができる。
【００５１】
図３及び図４〜図７に示すリスト及びファイルを使用することによって、プログラムの動的実行及びその全てのデータセットから、小さな１組の代表的な命令が収集される。完全な実行トレースが命令インターバルへ分割された後、当該インターバルは、命令割当数内の作業負荷を表すために当該インターバルに割り当てられた重みに基づき、順序付けられ、選択され、スケールされる。
【００５２】
図８は、実施形態に従って代表的な命令トレース用のコレクション・ポイントを識別するために命令インターバルをスケーリングする際に実行される動作のフローチャートを示す。動作が開始すると、図２の命令スケーリング・システム２００のような命令スケーリング・システムは、複数の完全なプログラム・トレースを連結することによって作成されたプログラム・トレースと、インターバル・サイズと、分割ファイルとを受け取る（ステップ５０２）。分割ファイルは、元のトレースを生成するために使用された各データセットごとに幾つの命令が存在するかを指定する。図２のフェーズ識別モジュール２０２のようなフェーズ識別モジュールは、このプログラム・トレースを、受け取られたインターバル・サイズに等しいサイズを有する命令インターバルに分割する（ステップ５０４）。フェーズ識別モジュールは、プログラム・トレースのインターバル間の類似性を見つけるために、当該完全なプログラム・トレース上でフェーズ検出を実行する（ステップ５０６）。フェーズ識別モジュールは、Ｋ−ｍｅａｎｓクラスタ化アルゴリズムのようなソフトウェア・アルゴリズムを使用して、ラベル・ファイル内に順序付きフェーズ・リストを生成する（ステップ５０８）。ラベル・ファイルは、これらのインターバルを、プログラム・トレースの各フェーズごとに１つずつ、別々のフェーズへグループ化する。ラベル・ファイル内の各フェーズ・リストは、Ｋ−ｍｅａｎｓアルゴリズムにおけるようにユークリッド距離のようなメトリックを使用して、各インターバルが当該フェーズをどの程度良好に表すかに応じて順序付けられる。
【００５３】
また、フェーズ識別モジュールは、Ｓｉｍｐｏｉｎｔｓファイル及び重みファイルを生成する（ステップ５１０）。Ｓｉｍｐｏｉｎｔｓファイルは、フェーズ当たり１つのインターバルを指定する。当該インターバルは、当該フェーズを表すインターバル・グループのうち最も代表的なインターバルである。重みファイルは、各フェーズごとの重みを指定する。この重みは、当該フェーズに帰することができる、完全なプログラム実行からの命令の割合である。
【００５４】
図２の命令計算モジュール２２０のような命令計算モジュールは、Ｓｉｍｐｏｉｎｔｓファイル内の各フェーズごとに、重みファイルからの当該各フェーズに対応する重みを使用して、所与の命令割当数に基づき、当該各フェーズから幾つの命令が必要とされるかを計算する（ステップ５１２）。命令計算モジュールは、フェーズ・リスト内の各フェーズごとに、その最も代表的なインターバルから順次に、インターバル命令開始インデックス及びインターバル命令終了インデックスを識別する（ステップ５１４）。各フェーズごとの命令の数は、インターバル・サイズ又はインターバル・サイズの或る倍数より小さいことがあり、或いは１インターバル・サイズよりもその端数分だけ大きいことがあるので、命令計算モジュールは、各フェーズのフェーズ・リスト内に、各フェーズ用の命令割当数を満たすのに十分な命令が存在するか否かを決定する（ステップ５１６）。個々のフェーズ命令割当数は、総合的な命令割当数に適用され且つフェーズ識別モジュールによって生成される重みフィルに基づき決定されるから、ステップ５１６の決定がＮＯであれば、命令計算モジュールは、動作を終了させるために、管理者へエラーを送信する（ステップ５１８）。一般に、命令割当数が最近のプログラム・トレース内の命令の数より遙かに小さいということを考えれば、エラーが送信されるという事態は、到底起こりそうもない。
【００５５】
ステップ５１６の決定がＹＥＳであれば、命令計算モジュールは、これらの個々の命令割当数の全てがともにグローバル命令割当数を満たすか否かを決定する（ステップ５２０）。ステップ５２０の決定がＮＯであれば、命令計算モジュールは、命令の総数がグローバル命令割当数と一致するまで、前述の方法のうちの１つを使用して、１つ以上のフェーズの１つ以上のインターバルからのインターバル命令開始インデックスを変更することにより、命令を追加又は削減する（ステップ５２２）。次に、命令計算モジュールは、命令を追加するか又は削減することにより、グローバル命令割当数を満たすことができるか否かを決定する（ステップ５２４）。ステップ５２４の決定がＮＯであれば、命令計算モジュールは、動作を終了させるために、管理者へエラーを送信する（ステップ５１８）。グローバル命令割当数を満たすための命令の追加又は削減は、個々のフェーズ命令割当数を変更することがあるが、通常、そのような変更は、割当数計算の丸め機能の粒度に依存して影響が小さい。
【００５６】
ステップ５２０の決定がＹＥＳであるか、又はステップ５２４の決定がＹＥＳであれば、命令計算モジュールは、ウォームアップ命令が望ましいか否かを決定する（ステップ５２６）。ステップ５２６の決定がＹＥＳであれば、命令計算モジュールは、各インターバルの開始命令に先立って、或る数Ｍの命令を開始するように、インターバル命令開始インデックスを変更する（ステップ５２８）。前述のように、当該インターバルが動的命令トレース内の以前のインターバルに連続しているならば、ウォームアップ命令は、指定されない。なぜなら、当該以前のインターバルは、局所性構造をウォーミング・アップしているからである。もし、当該インターバルと以前のインターバルの終端との間に、ゼロより大きく且つＭより小さい命令が存在すれば、両者の差に相当する命令が、ウォームアップ命令の数として指定される。
【００５７】
ステップ５２６又は５２８から、命令計算モジュールは、１組のインターバル・コレクション・ポイントを出力する（ステップ５３０）。これらのインターバル・コレクション・ポイントを、分割ファイルと一緒に使用すると、データセット当たりの命令を分離して、代表的なトレースを構築することができる。インターバル・コレクション・ポイントは、インターバル命令開始インデックス及びインターバル命令終了インデックスによって指定される。代表的なトレース・コレクタは、インターバル・コレクション・ポイントを使用して、各データセット用のプログラム・トレースから命令の代表的なトレースを収集する（ステップ５３２）。性能モデル・シミュレータは、これらの代表的なトレースを使用して、プロセッサ設計の性能をモデル化する（ステップ５３４）。
【００５８】
図９及び図１０は、実施形態に従った、フェーズ命令割当数及びグローバル命令割当数を満たすために命令の数を計算する際に実行される動作のフローチャートを示す。以下の動作は、図２の命令計算モジュール２２０のような命令計算モジュールによって実行される。動作が開始すると、命令計算モジュールは、命令計算用の最初のフェーズ及び／又は次のフェーズを取る（ステップ６０２）。Ｓｉｍｐｏｉｎｔｓファイルによって指示されたフェーズについて、命令計算モジュールは、重みファイル内の当該フェーズに対応する重みを使用して、所与のグローバル命令割当数に基づき、幾つのフェーズ命令が必要とされるかを計算し、その結果、フェーズ命令割当数を作成する（ステップ６０４）。命令計算モジュールは、フェーズ・リストの最上部にある（最も代表的な）インターバル内の命令の数が、フェーズ命令割当数と等しいか否かを決定する（ステップ６０６）。
【００５９】
ステップ６０６の決定がＹＥＳであれば、命令計算モジュールは、当該フェーズの最上部のインターバルを選択する（ステップ６０８）。一方、ステップ６０６の決定がＮＯであれば、命令計算モジュールは、最上部のインターバル内の命令の数がフェーズ命令割当数より大きいか否かを決定する（ステップ６１０）。ステップ６１０の決定がＹＥＳであれば、命令計算モジュールは、フェーズ命令割当数を満たすように当該フェーズの最上部のインターバルをスケールする（ステップ６１２）。一方、ステップ６１０の決定がＮＯであれば、命令計算モジュールは、ラベル・ファイル内のそのフェーズ・リストによって決定されるような、当該フェーズ内の最上部のＮインターバルが、フェーズ命令割当数を正確に満たすか否かを決定する（ステップ６１４）。
【００６０】
ステップ６１４の決定がＹＥＳであれば、命令計算モジュールは、当該フェーズの最上部のＮインターバルを選択する（ステップ６１６）。一方、ステップ６１４の決定がＮＯであれば、命令計算モジュールは、ラベル・ファイル内のインターバル順序によって決定されるような、最上部のＮインターバル内の命令の数がフェーズ命令割当数より大きいか否かを決定する（ステップ６１８）。ステップ６１８の決定がＹＥＳであれば、命令計算モジュールは、フェーズ命令割当数を満たすように当該フェーズ・リスト内の最上部のＮインターバルをスケールする（ステップ６２０）。一方、ステップ６１８の決定がＮＯであれば、命令計算モジュールは、動作を終了させるために管理者へエラーを送信する（ステップ６２２）。このエラーは、当該フェーズ内の全てのインターバルを使用しても、フェーズ命令割当数を満足させることができないことを指示する。
【００６１】
一旦、ステップ６０８、６１２、６１６又は６２０のうちの１つでフェーズ命令割当数が満たされたならば、命令計算モジュールは、命令の数を計算すべき他のフェーズが存在するか否かを決定する（ステップ６２４）。ステップ６２４の決定がＹＥＳであれば、動作はステップ６０２に戻る。一方、ステップ６２４の決定がＮＯであれば、命令計算モジュールは、全てのフェーズ命令割当数の和がグローバル命令割当数と等しいか否かを決定する（ステップ６２６）。ステップ６２６の決定がＹＥＳであれば、命令計算モジュールは、ウォームアップ命令を含めるべきか否かを決定する（ステップ６２８）。ステップ６２８の決定がＮＯであれば、命令計算モジュールは、代表的なトレース・コレクタにインターバル・コレクション・ポイントを出力する（ステップ６３０）。一方、ステップ６２８の決定がＹＥＳであれば、命令計算モジュールは、当該インターバルの開始インデックスを、指定された数の命令だけ変更するか、又は以前のインターバルの終端に変更する（ステップ６３２）。その後、動作は、ステップ６３０に継続する。
【００６２】
ステップ６２６に戻って説明を続ける。ステップ６２６の決定がＮＯであれば、命令計算モジュールは、全てのフェーズ命令割当数の和がグローバル命令割当数より小さいか否かを決定する（ステップ６３４）。ステップ６３４の決定がＹＥＳであれば、命令計算モジュールは、グローバル命令割当数を満たすように、最後に処理されたフェーズから開始し且つ当該フェーズ又は他のフェーズ内の他のインターバルへ移動しつつ、命令の数を増加させる（ステップ６３６）。一方、ステップ６３４の決定がＮＯであれば、命令計算モジュールは、グローバル命令割当数を満たすように、最後の又は最も代表的でないフェーズから順次に、命令の数を減少させる（ステップ６３８）。その後、動作は、ステップ６２８に継続する。
【００６３】
命令計算モジュールが出力する１組のインターバル・コレクション・ポイントは、プログラム・トレースから命令の代表的なトレースを収集するために、分割ファイルと組み合わされて、代表的なトレース・コレクタによって使用される。性能モデル・シミュレータは、プロセッサ設計の性能をモデル化するために、これらの代表的なトレースを使用する。
【００６４】
実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、又はソフトウェア及びハードウェア要素の両方を含む実施形態の形式を取ることができる。１つの代表的な実施形態は、ファームウェア、常駐ソフトウェア、マイクロコード等を含む、ソフトウェアで実装される。
【００６５】
さらに、実施形態は、コンピュータ又は任意の命令実行システムに関連して又はこれらによって使用するためのプログラム・コードを提供する、コンピュータ使用可能媒体又はコンピュータ可読媒体からアクセス可能なコンピュータ・プログラム製品の形式を取ることができる。この記載の目的上、コンピュータ使用可能媒体又はコンピュータ可読媒体は、前記命令実行システム又は装置に関連して又はこれらによって使用するためのプログラムを保持し、格納し、通信し、伝送し、移送することができる、任意の装置とすることができる。
【００６６】
媒体は、電子、磁気、光学、電磁気、赤外線又は半導体式のシステム（若しくは装置）又は伝送媒体とすることができる。コンピュータ可読媒体の例には、半導体又は固体メモリ、磁気テープ、取り外し可能なフレキシブル・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛体磁気ディスク及び光ディスク等がある。光ディスクの例には、読み取り専用のＣＤ−ＲＯＭ、読み書き可能なＣＤ−Ｒ／Ｗ及びＤＶＤがある。
【００６７】
プログラム・コードを格納及び／又は実行するのに適したデータ処理システムは、システム・バスを通してメモリ要素に直接的又は間接的に接続された少なくとも１つのプロセッサを含む。メモリ要素は、プログラム・コードの実行中に使用されるローカル・メモリ、バルク記憶装置、プログラム・コードの実行中にバルク記憶装置からの検索回数を減少させるために少なくとも或るプログラム・コードの一時的記憶領域を提供するキャッシュ・メモリを含むことができる。
【００６８】
Ｉ／Ｏ装置（キーボード、ディスプレイ、ポインティング装置等を含む）は、システムに対し直接的に又は介在するＩ／Ｏコントローラを通して結合することができる。また、ネットワーク・アダプタをデータ処理システムに対し結合することもできる。そのようにすると、当該データ処理システムは、介在する専用又は公衆ネットワークを通して、他のデータ処理システム、遠隔プリンタ又は記憶装置に結合されるようになる。ネットワーク・アダプタの例には、モデム、ケーブル・モデム及びイーサネット（登録商標）・カード等がある。
【００６９】
本発明に関する記述は、例示及び説明を目的として与えられたものであって、網羅的であること及び開示された形態に本発明を限定することを意図するものではない。当業者にとって、多くの修正及び変形が明らかであろう。実施形態は、本発明の原理及び実際的な応用を最もよく説明し、考えられる特定の用途に適するような種々の修正を伴う種々の実施形態に関して当業者が本発明を理解することを可能にするために、選択され説明されたものである。
【図面の簡単な説明】
【００７０】
【図１】代表的なデータ処理システムのブロック図である。
【図２】代表的なトレース用のコレクション・ポイントを識別する、命令スケーリング・システムの機能ブロック図である。
【図３】フェーズ識別モジュールによって生成されるラベル・ファイル内のフェーズ・リストを例示する図である。
【図４】代表的な重みファイルを例示する図である。
【図５】代表的な順序付きフェーズ・リストを有するラベル・ファイルを例示する図である。
【図６】代表的なＳｉｍｐｏｉｎｔｓファイルを例示する図である。
【図７】代表的な分割ファイルを例示する図である。
【図８】代表的な命令トレース用のコレクション・ポイントを識別するために命令インターバルをスケーリングする際に実行される動作のフローチャートである。
【図９】フェーズ命令割当数及びグローバル命令割当数を満たすために命令の数を計算する際に実行される動作のフローチャートである。
【図１０】フェーズ命令割当数及びグローバル命令割当数を満たすために命令の数を計算する際に実行される動作のフローチャートである。
【符号の説明】
【００７１】
２００  命令スケーリング・システム
２０２  フェーズ識別モジュール
２０４  インターバル・サイズ
２０６  プログラム・トレース
２０８  分割ファイル
２１０  性能モデル・シミュレータ
２１２  ラベル・ファイル
２１４  フェーズ識別生成化ファイル
２１６  Ｓｉｍｐｏｉｎｔｓ（シミュレーション・ポイント）ファイル
２１８  重みファイル
２２０  命令計算モジュール
２２２  インターバル・コレクション・ポイント
２２４  代表的なトレース・コレクタ
２２６  代表的なトレース
【図１】
2008305402.tif 000003
【図２】
2008305402.tif 000004
【図３】
2008305402.tif 000005
【図４】
2008305402.tif 000006
【図５】
2008305402.tif 000007
【図６】
2008305402.tif 000008
【図７】
2008305402.tif 000009
【図８】
2008305402.tif 000010
【図９】
2008305402.tif 000011
【図１０】
2008305402.tif 000012