JPH10254700A - 個々の命令の実行頻度をサンプリングするプロセッサ性能カウンタ - Google Patents
個々の命令の実行頻度をサンプリングするプロセッサ性能カウンタInfo
- Publication number
- JPH10254700A JPH10254700A JP10058067A JP5806798A JPH10254700A JP H10254700 A JPH10254700 A JP H10254700A JP 10058067 A JP10058067 A JP 10058067A JP 5806798 A JP5806798 A JP 5806798A JP H10254700 A JPH10254700 A JP H10254700A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instructions
- frequency
- execution
- stall
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3409—Recording 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 for performance assessment
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3447—Performance evaluation by modeling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/81—Threshold
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/815—Virtual
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Advance Control (AREA)
Abstract
ントするための性能カウンタを提供する。 【解決手段】 プロセッサは、実行パイプラインと、こ
の実行パイプラインの端に接続されたリタイアユニット
とを備えている。プロセッサは、プログラムの命令を実
行する。命令が実行される間に性能データを収集する装
置は、プロセッサのリタイアユニットに接続されたレジ
スタを備えている。実行パイプラインから命令がリタイ
アされるときにレジスタを増加するための手段が設けら
れる。又、この装置は、レジスタが所定値まで増加され
たときに割り込みハンドラーに割り込みを発生するため
の手段も備えている。
Description
ータシステムに係り、より詳細には、コンピュータシス
テムの性能関連事象をカウントするための性能カウンタ
に係る。
能データの収集は、ハードウェア及びソフトウェアエン
ジニアにより行われる頻繁で且つ非常に重要な作業であ
る。ハードウェアエンジニアは、新しいコンピュータハ
ードウェアが既存のオペレーティングシステム及びアプ
リケーションプログラムでいかに動作するかを決定する
ために性能データを必要とする。
なハードウェア構造体の特定の設計は、同じ1組のプロ
グラムに対して著しく異なるそして時には予想し得ない
使い方をすることがある。ハードウェアの欠陥を識別し
て、将来の設計においてそれらを修正できるようにする
ことが重要である。性能データは、ソフトウェアがいか
に効率的にハードウェアを使用するかを識別できると共
に、改良されたシステムを設計する上で助けとなる。
重大な部分を識別する必要がある。例えば、コンパイラ
ーの著者は、コンパイラーが命令を実行のためにいかに
スケジュールするか、又はソフトウェアに最適な入力を
与えるために条件分岐の実行をいかに良好に予想するか
を見出さねばならない。同様に、オペレーティングシス
テム、カーナル、デバイスドライバ、及びアプリケーシ
ョンソフトウェアプログラムの性能を理解することが重
要である。
の動作環境を妨げることなく、ハードウェア及びソフト
ウェアシステムの性能を正確に監視することが問題であ
る。特に、性能データが何日又は何週間といった長期間
にわたって収集される場合に問題となる。多くの場合
に、性能監視システムは、手作りされる。システムのオ
ペレーションが監視システムにより影響されないよう確
保するために、コストのかかるハードウェア及びソフト
ウェア変更を行う必要がある。
1つの方法は、性能カウンタを使用することによるもの
である。性能カウンタは、システムにおける重大な事象
の発生を「カウント」する。重大な事象は、例えば、キ
ャッシュミス、命令実行、I/Oデータ転送要求、等々
を含む。性能カウンタを周期的にサンプリングすること
により、システムの性能を推論することができる。
に、事象に関連してアクセスされる命令又はデータを厳
密に知ることも有用である。しかしながら、ほとんどの
性能カウンタでは、割り込みにおいて得られるプログラ
ムカウンタ(pc)値は、カウンタをサンプリングする
割り込みが処理を完了した後に実行されるべき次の命令
のpc(割り込み復帰アドレス)である。ほとんどの場
合に、割り込み復帰後に実行されるべき次の命令は、割
り込みを生じた事象を生じさせた命令ではなくて、その
後の命令である。それ故、アクセス時に、重大なプロセ
ッサ事象を表す命令又はデータの位置を直接的に決定す
ることが望ましい。
上のプロセッサを含むコンピュータシステムにおいて性
能データを収集するための装置が提供される。コンピュ
ータシステムは、1つ以上のプロセッサを含むことがで
きる。プロセッサは、実行パイプラインと、この実行パ
イプラインの端に接続されたリタイアユニットとを含
む。本発明は、その広い形態において、プロセッサの性
能データを収集するための請求項1に記載の装置に係
る。
のリタイアユニットに接続されたレジスタを備えてい
る。このレジスタは、命令が実行パイプラインからリタ
イアされるときにレジスタを増加するための手段に接続
される。レジスタが所定値まで増加されたときに割り込
みハンドラーへ割り込みを発生する手段は、割り込みハ
ンドラーがレジスタをサンプリングできるようにする。
装置は、リタイアによりカウンタをオーバーフローさせ
そして割り込みを生じさせるような命令に関連したプロ
グラムカウンタ値を記憶するための内部プロセッサレジ
スタも備えている。プログラムカウンタ値の識別は、命
令がリタイアされるときに内部プロセッサレジスタに記
録することができる。これは、個々の命令に対しリタイ
ア率の正確な統計学的サンプルを収集できるようにす
る。
定の実施形態の以下の詳細な説明より容易に理解されよ
う。システムの概要 図1に示すように、コンピュータシステム100は、バ
ス140により互いに接続された中央処理ユニット(C
PU)110、メモリサブシステム(メモリ)120、
及び入力/出力インターフェイス(I/O)130を備
えている。このシステム100は、埋め込まれたシステ
ム、PC、ワークステーション、メインフレーム、又は
ネットワークでリンクされたコンピュータシステムのク
ラスターである。
0は、高速パイプラインを使用するように設計された1
つ以上の個々のプロセッサチップ111を備えている。
パイプラインでは、各プロセッサ111は、多数の実行
ユニット113を用いて多数の命令を同時に発生しそし
てそれに基づいて動作することができる。実行ユニット
113は、整数演算、フローティングポイント演算、ロ
ード、記憶、分岐等の種々のオペレーションを実行する
ことができる。典型的に、パイプライン型プロセッサ
は、RISCアーキテクチャーを使用する。パイプライ
ン型アーキテクチャーでは、命令がメモリからフェッチ
され、発生待ち行列へとスケジューリングされ、実行さ
れ、そしてリタイアされる。
ンタ112が関連される。各組のカウンタ112は、複
数のレジスタとして実施できる。これらのレジスタは、
例えば実行される命令のようなシステムの性能を表すシ
ステムの重要な事象の発生をカウントすることができ
る。これらレジスタは、増加することができ、そしてオ
ーバーフロー時に、これらレジスタに割り込んで、レジ
スタに記憶されたカウントを性能データとしてサンプリ
ングすることができる。
的、ランダム、逐次、揮発性及び永続的記憶素子、又は
その組合せを含むことができる。これらの記憶素子は、
レジスタ、キャッシュ、DRAM、ディスク、テープ等
である。キャッシュは、同じプロセッサチップ上のプロ
セッサと共に常駐する命令及びデータキャッシュ(Iキ
ャッシュ及びDキャッシュ)を含むことができる。メモ
リ120は、マシンで実行可能な命令の形態のソフトウ
ェアプログラム121と、命令によりアクセスされるデ
ータ122とを記憶する。ソフトウェアプログラム12
1は、オペレーティングシステム、デバイスドライバ及
びアプリケーションプログラムを含むと共に、以下に詳
細に述べるようにシステム100の性能データを測定し
そして分析するのに使用されるプログラムを含むことが
できる。
キーボード等の入力/出力デバイスへのインターフェイ
スを含むことができる。又、I/O130は、ライン1
50を経て、他のコンピュータシステムにデータを通信
するネットワークに接続することもできる。バス140
は、通常、アドレス、データ、制御及びタイミング信号
を種々のシステム要素間に搬送するための複数のライン
として実施される。
1の命令がプロセッサ111により実行される。各命令
は、その命令によりどんなオペレーションを実行すべき
かを知らせるオペレータコードを含む。又、命令は、オ
ペレーション中に使用すべき付加的なデータを参照する
ための1つ以上のオペランドを含むこともできる。命令
は、一般に、プログラムの実行流を制御するか、又はデ
ータをアクセス(読み取り及び書き込み)する。又、処
理速度を上げるために、プロセッサは、分岐予想ロジッ
ク(図示せず)も備えている。分岐予想ロジックは、予
想される実行順序で命令をロードするように試みる。通
常のオペレーティング環境を著しく妨げることなくシス
テム100において実行されるプログラムのプロファイ
ルを発生することが望まれる。プロファイルは、好まし
い実施形態においては、プログラム121の種々の命令
の各々により被る動的なストールサイクルの平均数の指
示を含む。1つの効果として、各命令に対する動的なス
トールサイクルの平均数を使用して、プロセッサの発生
待ち行列における命令ストールの考えられる動的な原因
を決定することができる。
200の流れ線図である。このサブシステム200は、
制御流れ分析モジュール210と、性能データ分析器3
00とを備えている。マシンで実行可能なコードの形態
のプログラム121は、制御流れ分析モジュール210
に与えられる。プログラム121は、カーナル及びアプ
リケーションプログラム、例えば、完全に実行可能な
「2進イメージ」を含むことができる。マシンコードを
分析するためのプロセスの一例が、1996年7月23
日付けのスリバスタバ氏等の「コンピュータシステム性
能を監視するシステム(System for Monitoring Compute
r System Performance) 」と題する米国特許第5,53
9,907号に開示されている。
データ構造体206に仕切る。この構造体206は、手
順201を含み、そしてこれら手順201は、基本的な
ブロック202を含むことができる。仕切られた構造体
206は、手順及び基本的なブロックを識別するための
情報を含むことができる。通常、手順は、単一の入口ポ
イントと、単一の出口ポイントとを有する。基本的なブ
ロック202は、第1命令が実行される場合に全てが実
行される命令のグループ又はセットとして定義される。
換言すれば、基本的なブロックのいずれか1つの命令の
実行頻度が既知の場合には、そのブロックの全ての命令
の実行頻度が分かる。というのは、全ての命令が同じ回
数だけ実行されるからである。それ故、このような基本
的なブロックの命令は、同じ頻度の等価クラスに属する
と言える。
の命令を異なる回数で実行することができる。これは、
基本的なブロックが等価クラスを自動的に構成しないこ
とを意味する。例えば、ブロックの中間に割り込み又は
例外条件が生じるが、その割り込み又は例外からの復帰
がなされない場合には、ブロックのそれ以前の命令がそ
れ以降の命令よりも頻繁に実行されることになる。この
ような割り込み及び例外により導入される歪は、通常は
僅かであり、そして歪がコードにおける特定の命令に相
関されそして頻繁でもある非常に稀な環境を除くと無視
することができる。
命令は、制御流れグラフ(CFG)203を形成するよ
うに更に分析される。例えば、分岐及びジャンプのよう
な命令を識別することにより、手順と基本的なブロック
との間の実行の流れを決定することができる。CFG2
03において、ノード204(円)は、手順又は基本的
なブロックを表し、そしてこれらノードを接続するエッ
ジ205(指向されたアーク)は、ノード間の実行の流
れを表す。制御流れグラフ203は、基本的なブロック
及びアークのための頻度等価クラスを決定するのに使用
される。基本的なブロック及びアークの両方を検討する
ことにより、頻度等価クラスをできるだけ大きくするこ
とができる。
加えて、コード121は、実行のためにシステム100
にロードされる。実行中に、図1の性能カウンタ112
をサンプリングして、サンプル209を発生することが
できる。これらサンプルは、例えば、コード121の各
命令を発生するためにプロセッササイクルの平均数を指
示することができる。発生のために実際に必要な平均サ
イクル数を、プログラムの理想的な実行中に必要なサイ
クル数と比較して、パイプラインストールの考えられる
原因を決定することができる。CFG203、構造体2
06及びサンプル209は、性能データ分析器300へ
送られる。性能データ分析器300は、例えば、各命令
ごとに性能データ340を発生し、この性能データは、
実行の頻度、命令を発生するのに必要な平均サイクル数
(cpi)、及びパイプラインストールの考えられる原
因を含むことができる。
プ310で実行されたコードの命令に対しサンプルカウ
ント209を収集する。性能データは、何らかの既知の
プロファイリングシステムにより収集することができ
る。ステップ320では、実行される命令の実行頻度が
サンプルカウントに基づいて推定される。ステップ33
0の間に、各命令に対する平均サイクル数340が決定
される。平均サイクル数は、命令がいかに良好にスケジ
ュールされたかそしてストールがいかに頻繁に生じるか
の良好な指示である。この情報を使用して、システム1
00のハードウェア及びソフトウェアの設計を改善する
と共に、動的なパイプラインストールの原因を決定する
ことができる。
示す。ステップ410において、制御流れグラフ203
を使用し、コード121の命令が頻度等価クラスにグル
ープ分けされる。頻度等価クラスとは、上記したよう
に、同じ実行頻度を有すると分かっている命令又はアー
クのセットであり、例えば、同じ回数だけ実行された命
令である。同じ等価クラスにおけるアークは、同じ回数
だけ横断される。例えば、基本的なブロックがいかに頻
繁に実行されるか分かっている場合には、その基本的ブ
ロックの各命令の実行頻度も分かる。
は、ステップ420において推定され、初期頻度推定値
が決定される。これらの初期頻度推定値は、ステップ4
30において純化処理されて、最終的な頻度推定値44
0が形成される。これら推定値は、クラス間制約451
を使用して等価クラス間に推定頻度をローカルに且つグ
ローバルに伝播することにより純化処理される。クラス
間制約451は、以下に述べる設定ステップ450にお
いて制御流れグラフ203から導出される。
テップ500を詳細に説明する。ステップ410の目的
は、制御流れグラフ203の分析に基づき命令及びアー
クを頻度等価クラスにグループ分けすることである。定
義によれば、命令は、それらがプログラムの実行におい
て同じ回数だけ実行される場合に頻度等価である。同様
に、基本的ブロック及び制御流れアークは、それらがプ
ログラムの実行において同じ回数だけ実行され又は横断
される場合に頻度等価である。同じ基本的ブロックにお
ける命令は、常に、頻度等価である。というのは、1つ
の命令が実行されるときには、定義により、他の全ての
命令も実行されるからである。異なる基本的ブロックに
おける命令は、それに対応する基本的ブロックが頻度等
価である場合には、頻度等価となる。
の基本的ブロック及び制御流れアークを識別することを
目的とする。これは、頻度等価に密接に関連した特性で
あるサイクル等価である基本的ブロック及びアークを表
すノードを識別するために制御流れグラフ203を分析
することにより達成される。定義によれば、グラフにお
けるノード及びアークのセットは、そのグラフの各サイ
クル即ち閉じた経路がそれらを全て含むか又は全く含ま
ない場合にサイクル等価となる。サイクル等価のノード
及びアークを識別する方法は、プロシーディングズ・オ
ブ・ACM SIGPLAN ’94 コンファレンス
・オン・プログラミング・ランゲッジ・デザイン・アン
ド・インプレメンテーション、1994年の第171−
185ページに掲載されたジョンソン氏等の「プログラ
ム構造ツリー:直線的な時間での制御領域の計算(The P
rogram Structure Tree: Computing Control Regions i
n Linear Time)」に説明されている。しかしながら、グ
ラフにおけるサイクル等価は、頻度等価を意味しない。
以下の説明は、制御流れグラフを拡張しそしてグラフを
サブグラフに分割することにより頻度等価をいかに決定
するかについて述べる。次いで、各サブグラフに対する
サイクル等価を決定することができる。
は、入口ノード512及び出口ノード513と称する2
つの特殊なノードを含む。これらのノードは、制御が手
順514に入りそして出るポイントを表す。公知の方法
は、入口ノードから手順の他の各ノードへの経路があり
そして他の各ノードから手順の出口ノードへの経路もあ
るような流れグラフの制御にのみ適用される。本発明
は、これら制約を必ずしももたない更に一般的な制御流
れグラフにも適用できるように方法を改善する。
口ノードから入口ノードへアーク515で拡張される。
図6のステップ511は、ノード512−513及びア
ーク515のためのこの変換を示している。ステップ5
20において、拡張された制御流れグラフは、既知の方
法を使用して強く接続されたサブグラフに分解され、こ
れについては、例えば、SIAMジャーナル・オン・コ
ンピューティング、1(2):146−160、197
2年に掲載されたタージャン著の「深さ優先探索及びリ
ニアグラフアルゴリズム(Depth-first search and line
argraph algorithms)」を参照されたい。
分は、各ノードから他の各ノードへの経路が存在する最
大サブグラフである。図6のステップ521は、この分
解を示し、破線のボックス522−524で包囲された
3つの強く接続されたサブグラフが生じる。以下の説明
の目的上、「デッドエンド」サブグラフ又は成分524
とは、そのノードからグラフの他のノードへのアークを
もたずに強く接続された成分として定義される。
入る全てのアークは、出口ノードへ再指向される。これ
は、図6のステップ531によりアーク542の再指向
と共に示されている。ステップ540において、ジョン
ソン氏等により開発されたサイクル等価を計算する方法
が各デッドエンド成分524に適用される。各デッドエ
ンド成分524に対し、この方法は、デッドエンド成分
524におけるノード及びアークのサイクル等価クラス
を形成する。ステップ550において、この方法は、グ
ラフの残り部分に適用され、その残り部分に対するサイ
クル等価クラスを生じる。これら2つのステップは、図
6のステップ541に示されている。これら最後の2つ
のステップで形成されたサイクル等価クラスは、元のグ
ラフの頻度等価クラスを構成する。
の推定 プログラムの各命令に対して実行頻度及び命令当たりの
サイクル(cpi)を推定する方法と、これらの値に基
づいてパイプラインストールの理由を推論する方法とに
ついて、以下に詳細に説明する。これらの方法(A−
D)は、次の順に説明する。 A.性能のボトルネック又は問題、即ちパイプラインス
トールを、プログラムの個々の命令のレベルで識別する
ための方法; B.プログラムの個々の命令の実行頻度を推定する方
法; C.動的なストールの考えられる原因を推論する方法;
及び D.本発明による性能カウンタを用いてプログラムの個
々の命令の実行頻度を測定する方法(及び装置)。
に基づくサンプルカウントは、各々の命令が発生待ち行
列のヘッドにおいて費やす合計時間のみに比例すること
に注意されたい。周期的なサンプリングは、実行頻度に
関する情報を直接的に与えるものではない。実行頻度
は、方法Bについて述べるサンプルカウントから推定す
ることもできるし、又は方法Dを用いて直接測定するこ
ともできる。
データは、次のものを含む。 1.分析されるプログラム; 2.各命令のサンプルカウント。但し、このカウント
は、発生された命令が、応答なしにリタイアされ、即ち
応答に対する無カウント発生であって、例外条件の処理
により再発生される命令であるときに、発生待ち行列の
ヘッドにおいて費やされる時間に比例する;そして 3.分析されるシステムのためのモデル又はシュミレー
タ。
きに、生のサンプルカウント603が命令に対して収集
される。図3のステップ310も参照されたい。これ
は、異なるPC値を有する命令に対しサンプルカウント
が決定されることを意味する。サンプルカウントは、順
序正しいプロセッサの発生待ち行列のヘッドにおいて命
令が費やす時間(サイクル数)に比例する。いかなる性
能カウンタサンプリング技術もここに使用できることを
理解されたい。生のサンプルの異常は、ステップ640
において除去(正規化)され、信頼性のあるサンプル6
04を発生することができる。異常は、多発生命令によ
るか、又はストールサイクルがその後発生される命令と
重畳するような遅延実行を伴う命令によるものである。
ュミレータ(602)を使用して、動的なストールがな
いという仮定でプログラムの命令を理想的にスケジュー
リングすることができる(610)。このステップは、
全ての静的なストール及びそれらの原因を識別する。理
想的なスケジュールから、ステップ620において、各
命令を発生するのに必要な最小の(理想的な)サイクル
数を識別することができる。
化されたサンプルカウント630を使用して、各命令の
実行頻度をステップ650において推定することができ
る。実行頻度は、命令が「リタイア」された回数であ
る。リタイアされたとは、命令が実行を完了したことを
意味する。これは、少なくとも次の3つの方法で行うこ
とができる。 1)いかなるプログラムについても、これは、上記第1
ステップからのサンプルカウントのみに依存する以下の
方法Bを用いて行うことができる。 2)決定論的アプリケーションプログラムについては、
基本的ブロックの実行をカウントする従来のプロファイ
リング技術を用いて頻度を決定することもできる。この
場合、プログラムは、従来のプロファイラを用いて実行
され、実行頻度が得られる。この場合に、同等のサンプ
ルカウントを得るために同じ入力データでプログラムを
再実行しなければならない。 3)いかなるプログラムについても、これは、命令がリ
タイアされる割合をサンプリングするために改善された
ハードウェア性能カウンタに依存する方法Dを用いて行
うこともできる。
命令当たりのサイクル(cpi)を決定し、即ち各命令
を発生するのに必要とされる平均サイクル数を決定す
る。この値は、所与の命令に対するサンプルカウントを
その実行頻度で除算することにより計算できる。図3の
ステップ330も参照されたい。第5に、方法Cを使用
して、各命令に対する動的なストールサイクルの数と、
各ストールに対して考えられる原因をステップ670に
おいて識別する。動的なストールサイクルの数は、cp
iから最小(理想的)サイクル数(上記方法Aの第2ス
テップ)を減算することにより決定できる。これが分か
ると、動的なストールに対して考えられる原因を求める
ことができる。
力データは、次のものを含む。 1.プログラム701; 2.サンプルカウント702; 3.プログラムの制御流れグラフ(CFG)703;及
び 4.サンプルを収集する間にプログラムが実行されたプ
ロセッサに対する命令スケジューラ又はモデル704。
的なブロックを表し、そして基本的なブロックは、当然
同じ回数だけ実行される命令のシーケンスである。グラ
フにおける各アークは、1つのブロックから別のブロッ
クへの考えられる実行流を表す。この方法は、たとえC
FGがあるアークを欠落しても、CFGがおそらくアー
クを欠落しているとマークされる限り、機能する。ソー
ス、オブジェクト又は実行可能なコードからCFGを構
成する方法は、不正確であるために、アークが欠落する
ことがある。
TRUCTION)のアレーを入力として取り上げ、そ
してそれら命令に対する理想的なスケジュール(SHE
D)を出力として返送することができる。SHEDは、
整数のアレーの形態をとることができる。このアレーに
おいて、アレーエレメントSHED(I)は、静的なス
トールのサイクル数が正確に分かり且つ動的なストール
が生じないと仮定される理想的なケースのもとで命令
(INSTRUCTION(I))を発生するに必要と
されるサイクル数である。
の間の静的な依存性を識別しなければならない。INS
TRUCTION(I)は、j<Iの場合にINSTR
UCTION(j)に対して静的な依存性を有すると共
に、INSTRUCTION(I)は、INSTRUC
TION(j)により使用されるプロセッサリソース又
はその命令により計算された値を常に必要とするので、
INSTRUCTION(j)より早期にスケジュール
することができない。
ジューラは、アレーSHEDに加えて、アレーDEEP
も返送できる。アレーDEEPにおいては、アレーエレ
メントDEEP(I)は、INSTRUCTION
(I)がINSTRUCTION(j)に対して依存性
を有するときに値jを有するか、又はINSTRUCT
ION(I)が依存性をもたないときに値0を有するか
のいずれかである。INSTRUCTION(I)が多
数の先行する命令に対して静的な依存性を有する場合に
は、DEEP(I)は、INSTRUCTION(I)
に最も近い先行する命令を表す値にセットされねばなら
ない。
タとして発生する。CFG703の各ブロック及びアー
クに対し、頻度推定値は、(FREQUENCY、CO
NFIDENCE)の形態であり、負の数値ではないF
REQUENCYは、頻度の推定値であり、そしてCO
NFIDENCEは、推定値FREQUENCYがいか
に正確に予想されるかを示す値である。頻度推定値は、
サンプルを得るために使用されるサンプリング周期の単
位である。例えば、サンプリング周期が65,536サ
イクル当たり1サンプルである場合には、頻度推定値1
00を有する基本的ブロックは、6,553,600の
推定回数だけ実行されている。
論するために使用される。これら推定値は、理想的な命
令スケジュールをベースとし、各々の「成功裡な実
行」、即ち命令が首尾良くリタイアされるために、発生
待ち行列のヘッドにおいて短いシーケンスの命令(しば
しば単一の命令)が費やさねばならない最小サイクル数
を識別する。第1に、おそらくは動的なストールを招か
ない短いシーケンスの命令を識別する。CFGにおける
幾つかの基本的ブロックは、このようなシーケンスをも
たないことがある。
令が費やす最小サイクル数(「成功裡な実行」当たり)
でサンプルカウントの和を除算したものとして、動的な
ストールを伴わない命令シーケンスの実行頻度を推定す
る。動的なストールを招くことのある幾つかのシーケン
スについては、以下に述べる別の発見を使用して、それ
らの頻度を推定する。CFGの流れ制約を使用して、直
接推定できないブロック及びアークに推定値を伝播する
ことができる。先ず、ローカル伝播及び他の自然の発見
を利用して、CFGのほとんどの残り部分に対して推定
を行うことができる。次いで、各推定値に信頼値を指定
して、推定値の精度を指示する。最後に、ガウス排除(G
aussian Elimination)及び変形グラム−シュミット方法
に基づく制約ソルバー(solver)を使用し、初期推定値に
「最も密接な」流れ制約に対する解決策を見出す。
る。ここでは、信頼値を使用するようにグラム−シュミ
ット方法を変形し、即ち信頼性の高い推定値にあまり影
響を及ぼさない解決策は、信頼性の低い推定値に影響を
及ぼす解決策よりも「密接である」と考えられる。不当
に高い又は低い解決策の推定値、例えば、負の信頼値を
生じるような解決策の推定値は、これを修正する。
ゴリズムを使用して、CFGのブロック及びアークを、
メンバーが同じ「実行頻度」を有するセットに仕切る。
これらのセットは、「頻度等価クラス」(FREQ)7
11又は簡単に「クラス」と称する。
は、各ブロック及び各アークごとに頻度等価クラスを形
成する。各ブロック又はアークは、厳密に1つの頻度等
価クラスに入ることに注意されたい。又、頻度等価クラ
スの基本的なブロックにおける各命令は、同じ回数だけ
実行されねばならないことにも注意されたい。定義によ
れば、Bが頻度等価クラスCの基本的なブロックである
場合に、ブロックBの各命令は、Cの頻度等価クラスを
有する。
in head qの決定: 各々の基本的なブロックごとに、モデル命令スケジュー
ラを使用して、ブロックにおける命令のシーケンスに対
し動的なストールを伴わない理想的なスケジュールであ
るアレーSCHED721と、命令に対する静的な依存
性情報であるアレーDEEP722の両方を決定する。
又、ブロックの各命令に対し値「min head q」
のアレーも決定する。SHEDは、ブロックの各命令に
対し、動的なストールが生じない限り、第1の命令が直
ちに発生するという仮定に基づいて、命令を発生するに
必要なサイクルの数を与える。DEEPは、ブロックの
各命令に対し、それが依存するところの最も密接な先行
する命令の数を与える。min head qの値は、
発生待ち行列のヘッドにおいて命令が費やす最小(理想
的)サイクル数を表す。多数の先行項目をもつブロック
については、命令スケジューラへの入力が単にブロック
における命令のシーケンスとなる。
ク、例えば、P1、P2・・・Pnを有していて、P1
がBの唯一の先行項目であり、P2がP1の唯一の先行
項目であり、・・・そしてPn−1がPnの唯一の先行
項目である場合には、命令スケジューラへの入力は、ブ
ロックの実行順序、即ちPn、Pn−1・・・P2、P
1そしてBにおけるブロックの命令の連鎖でなければな
らない。先行ブロックの命令を使用する目的は、特定の
ブロックが実行されるところのコンテクストに関するよ
り多くの情報を命令スケジューラに与えることにより命
令のより正確なスケジュールを得ることである。
数をOFFSETとする。(ブロックが多数の先行項目
を有する場合には、OFFSETは0である。)次い
で、各命令Iに対し、理想的な命令スケジューリングの
もとで命令が発生待ち行列のヘッドにあると予想される
サイクル数を計算する。多数の先行項目をもつ基本的ブ
ロックにおける第1命令以外の全ての命令に対し、次の
ようにセットする。 min head q〔i〕=sched〔i+off
set〕−sched〔i+offset−1〕 多数の先行項目を有し、即ちoffset=0である基
本的ブロックの第1命令即ちI=0に対し、推定値mi
n head q
されるときには、第1命令のみが、min head
qアレーに非ゼロ値を有することに注意されたい。これ
は、多発生命令のグループにおいて、発生待ち行列のヘ
ッドには第1の命令しか現れないからである。この第1
命令は、「発生ポイント」と称される。性能カウンタ
は、発生ポイントである命令の性能データしか収集でき
ない。発生待ち行列において更に深部に同時に発生され
る他の命令に対する性能データは、使用できないので、
例えば、実行頻度のような性能データを以下に述べるよ
うに推論しなければならない。
度の推定: 頻度を推定するための基本的な戦略は、命令Iが動的な
ストールを伴わずに発生する場合に、サンプリングのエ
ラー及び以下に述べる他の問題を無視すると、その頻度
が次の式で表されるという一般的な言説に依存する。 頻度〔i〕=サンプル〔i〕/min head q〔i〕 式1 但し、サンプル〔i〕は、命令Iに対して同じカウント
である。min head q〔i〕が0である場合に
は、命令Iの頻度は、この式を用いて直接決定すること
ができない。
ンプル〔i〕/min head q〔i〕の比は、頻度
より大きくなるだけである。というのは、サンプル
〔i〕は増加するが、min head q〔i〕は一
定に保たれるからである。頻度を推定するために好まし
い実施形態により使用される発見は、これら両方の言説
を利用する。特定の頻度等価クラスCに充分に多数の命
令が与えられると、幾つかの命令が動的なストールをも
たないと仮定することが妥当となる。従って、セットに
おける幾つかの最小の比{サンプル〔i〕/min h
ead q〔i〕}を平均化することによりクラスCに
おける命令の実行頻度を推定することができる。ここ
で、INSTRUCTION Iは、クラスCにあり、
そしてIは、発生ポイントであり、即ちmin hea
d q〔i〕>0である。
幾つかある。第1に、基本的ブロックBがCFGに多数
の先行項目を有するときには、上記ステップ2で決定さ
れたmin head qアレーは、不正確なものとな
る。例えば、制御が先行項目ブロックP1からブロック
Bに入るときは、Bの最初の命令が、P1の最後の命令
と共に二重発生されることがある。この場合に、ブロッ
クBのmin head q
らないが、ステップ2では、それが1にセットされる。
態は、命令が「長い依存性」を有するときに生じる。I
NSTRUCTION Iは、理想的なスケジュールに
基づいてINSTRUCTION Iを早期に発生でき
ない理由が、INSTRUCTION jにより使用さ
れたリソースをINSTRUCTION Iが必要とす
るためであるときに、先行するINSTRUCTION
jに対して依存性を有する。INSTRUCTION
jに対するINSTRUCTION Iの依存性は、
I>j+1の場合、即ちINSTRUCTION jと
Iとの間に付加的な命令があるときに、「長い依存性」
となる。
命令が動的なストールを招き、即ち介在する命令が発生
待ち行列のヘッドにおいて予想以上の時間を費やすとき
に、問題が生じる。その結果、INSTRUCTION
Iは、発生待ち行列のヘッドにおいて予想以下の時間
を費やすことになり、サンプル〔i〕は、予想より小さ
くなり、そして式1は、不正確な値を生じる。
がある。その1つは、頻度を推定するときに長い依存性
を有する命令を無視することである。別の救済策は、I
NSTRUCTION jに対して長い依存性を有する
INSTRUCTION Iに対し、サンプル〔i〕/
min head q〔i〕の比を、(サンプル〔j+
1・・・I〕の和)/(min head q〔j+1
・・・I〕の和)に置き換えることである。
化されるべき比をいかに選択するかを含む。高いレベル
においては、以下に実施される重要なポイントの幾つか
は、次のものを含む。等価クラスCが発生ポイントにお
いて命令を含み、そして以下の方法Cに使用されるがご
とき分析により決定されるように、命令が決して動的な
ストールを招いてはならない場合には、これらの発生ポ
イントに対して決定された比を使用するのが最良であ
る。以下のサブステップ3.c及び3.fを参照された
い。所与のプロセッサ構成の場合に、通常は、ストール
の時間長さに上限がある。この上限は、頻度についての
下限に換算することができる。以下のサブステップ3.
dを参照されたい。
ールサイクルを全く生じないか又は僅かに生じるだけで
ある多数の発生ポイントが、ほぼ同じ比をもつことにな
る。サンプリングエラーは、比に若干の変化を導入する
が、最大の比は、おそらく、最小の比の1.5倍以下で
ある。以下のサブステップ3.gを参照されたい。ある
クラスが、非常に多数の発生ポイントを有する場合に
は、それらの発生ポイントのある最小の一部分が、動的
なストールを伴わずに発生しなければならない。従っ
て、ある最小数の比を平均化して、推定値を計算しなけ
ればならない。この発生ポイントを以前の発生ポイント
と共に使用して、サンプル又は分析における何らかの異
常のために不当に低いか又は高い比を破棄することがで
きる。サブステップ3.gを参照されたい。
し、図10に示すように次のサブステップ3aないし3
hを実行する。 a.クラスCが少なくとも1つの発生ポイントを含み、
そして等価クラスCの全ての命令がサンプルカウント0
を有するときには、ステップ810において、Cの頻度
を0と推定する。さもなくば、サブステップ3.bに進
む。 b.クラスCの命令に対する全サンプルカウントが、例
えば、Cにおける発生ポイントの全数の4倍というスレ
ッシュホールドより小さいときには、ステップ820に
おいて、クラスCに対し推定を行わない。 c.ステップ830において、推定値の下限であるfr
eq lower boundを、クラスCにおける命
令の最大サンプルカウントをプログラムを実行した特定
のハードウェアに対して考えられる最大ストールサイク
ルで除算したものにセットする。例えば、特定のプロセ
ッサ実施形態では、ストールが256サイクルより決し
て長くならないことがある。freq lower b
oundが1より小さい場合には、それを1にセットす
る。freq lower boundは、例えば、サ
ンプリングされた性能データの異常のために不当に低い
比を破棄するのに使用される。
することにより動的なストールの全ての共通の原因を排
除できるときにはストール不能となる。ステップ840
において、アレーUnstallableRatios
(RATIOS)への次の比を計算する。即ち、DEP
(I)=0であるクラスCの各発生ポイントに対し、I
がストール不能である場合には、 サンプル〔i〕/min head q〔i〕 である。DEP(I)=0でないクラスCの各発生ポイ
ントに対し、DEP(I)+1ないしIがストール不能
である場合には、 (サンプル〔DEP(I)+1・・・I〕の和)/(m
in head q〔dep〔i〕+1・・・I〕の
和) である。アレーRATIOSが空でない場合には、クラ
スCの頻度をアレーRATIOSにおける比の平均値と
して推定する。但し、これは、平均値が少なくともfr
eq lower boundと同じ大きさの場合であ
る。さもなくば、サブステップ3.eへ進む。
ンバーの各発生ポイントに対し、 サンプル〔i〕/min head q〔i〕 である。DEP(I)=0でないクラスCの各発生ポイ
ントに対し、 (サンプル〔DEP(I)+1・・・I〕の和)/(m
in head q〔DEP〔I〕+1・・・I〕の
和) である。 f.freq lower boundより小さいRA
TIOSのエレメントは破棄する(ステップ860)。
他のエレメントがない場合には、クラスCに対する推定
は行わない。 g.freq upper boundより大きいRA
TIOSのエレメントは破棄する(ステップ870)。
好ましい実施形態においては、freq upper
boundは、次のように決定される。即ち、RATI
OSにおける最小のエレメントをxとすると、x<15
の場合には、次のようになる。 freq upper bound=MIN(20、2
*x) さもなくば、freq upper bound=1.
5*x
に対する頻度の適度に大きなサブセットを、クラスCの
実行頻度を推定するように平均化するための考えられる
候補として識別することである。アレーRATIOSの
長さが、クラスCの発生ポイントの数の1/8以下であ
る場合には、アレーRATIOSにおける頻度値は、サ
ンプリングエラー又は他の問題により異常に低くなるこ
とが考えられる。freq lower boundを
sqrt(2)*xにセットし、そしてサブステップ
3.eに戻ることにより、大きな値について検討する。
しかしながら、これが、クラスCに対してサブステップ
3.gを実行する3回目である場合には、クラスCに対
して推定は行わない。
最も小さい比の平均値として推定する。高いレベルにお
いては、解決される問題は、平均値に含むべき最も小さ
い比の数であるNを選択することである。Nを小さくす
ることと、Nを大きくすることの間にはテンションがあ
る。Nが小さい場合には、統計学的なサンプリングエラ
ー又はある異常により、低いサンプルカウントを有する
発生ポイントの比のみを平均化する機会が増加する。N
が大きい場合には、動的なストールが存在する発生ポイ
ントの比を含む機会が増加し、推定値を非常に大きなも
のにする。例えば、1つの実施形態は、Nを次のように
選択する。 N=MIN(length(RATIOS)、 MAX(3、 発生ポイントの数/4、 最小の比のせいぜい1.1倍である比の数))
行: この点において、頻度等価クラスのあるものだけが頻度
推定値を有する。ローカル伝播は、「流入=流出」制約
を用いて、既存の推定値から付加的なクラスに対する頻
度推定値を決定する(ステップ740)。制約は、実行
流が等価クラスに入る全回数が、実行流がそのクラスか
ら出る全回数に等しくなければならないことを利用す
る。例えば、1つの入力アークと、3つの出力アークを
もつ基本的ブロックBを伴うCFG部分を考え、入力ア
ークの頻度が200で、そして3つの出力アークの頻度
が、左から右へ、未知、25及び100であると仮定す
る。
頻度を200と決定することができる。次いで、最も左
の既存のアークの頻度は、75、即ち(200−(25
+100))と計算することができる。多数(N)の到
来するアークをもつブロックがあり、即ちNがゼロ0よ
り大きく、そしてN個のアークのクラス及びブロックの
クラスの1つ以外の全ての頻度に対して推定値があると
きには、単一の伝播が可能である。伝播は、次の式を解
くことにより行われる。即ち、単一の未知の頻度に対
し、 freq(class(block)) = sum[i=1,N] of freq(class(incoming arc I)) 式2 未知の頻度の解が負の場合には、その解は使用しない。
ックがあり、即ちNがゼロより大きく、そしてN個のア
ークのクラス及びブロックのクラスの1つ以外の全ての
頻度に対して推定値があるときには、単一の伝播が可能
である。伝播は、次の式を解くことにより行われる。即
ち、単一の未知の頻度に対し、 freq(class(block)) = sum[i=1,N] of freq(class(outgoing arc I)) 式3 未知の頻度の解が負の場合には、その解は使用しない。
制約N>0は、式2及び3に対しCFG703の入口及
び出口ブロックを取り扱うことに注意されたい。ローカ
ル伝播を行うために、負の頻度を導入するもの以外、単
一の伝播がそれ以上考えられなくなるまでは、単一の伝
播を単に実行する。
の推定の実行: この点において、推定値をもたないクラスがまだ若干存
在する。というのは、それらが若干のサンプル又は発生
ポイントを含むからである。ステップ5(750)は、
このようなクラスに対し自然のままの推定を行う。少な
くとも1つの発生ポイントを含むが、頻度推定値に欠け
るクラスCに対して、クラスCの頻度を推定する。クラ
スCにおける命令のサンプルの和を、MAX(1、Cに
対するmin head qアレーの和)で除算する。ステップ6 .ローカル伝播の繰り返し: ステップ760では、ローカル伝播が付加的な推定値と
共に繰り返される。
行: この点において、幾つかのアークが、依然として、推定
値をもたないクラスにある。頻度200の1つの到来す
るアークと、未知の頻度の2つの出て行くアークと、既
知の頻度100の1つの出て行くアークとをもつ単一の
基本的ブロックBを伴うCFG部分Bについて考える。
ここでは、ローカル伝播は不可能である。というのは、
推定値をもたない2つ以上の出て行くアークがあるから
である。出て行くアークに対する自然のままの推定は、
残りの流れ(200−100)を、推定値をもたない出
て行くアークの数で除算することである。
スにおいて全てのアークを考えることによりこのような
推定を行う。各アークの両エンドポイントを検査するこ
とによりこれを行う。更に、残りの流れが負である(こ
れは、推定値が不正確であるために起こり得る)ときに
はエンドポイントを無視する。アークAがブロックBに
接続されたsibling arcs(アークA、ブロ
ックB)を、アークAが接続されたのと同じ側でブロッ
クBに接続されたアークA’(A以外)のセットして定
義する。例えば、アークAがブロックBに入る場合に
は、sibling arcs(A、B)は、ブロック
Bに入るA以外のアークのセットである。
に対する残りの流れは、sibling arcs
(A、B)にあって且つ頻度推定値freq(クラス
(A’))を、(頻度推定値+1をもたないsibli
ng arcs(A、B)内のアークの数)で除算した
ものを有するアークA’に対し、 freq(class(B))−sum freq(c
lass(A’)) となる。推定値をもたずそして少なくとも1つのアーク
を含まない各クラスCに対し、先ず、次の初期指定を行
う。 N:=0、及び 流れ:=0 次いで、クラスCの各アークAと、Aの各エンドポイン
トB、即ちAのソース又はターゲットブロックにおける
Bとに対し、推定値freq(クラス(b))及びre
sidual flow(b、A)≧0の場合には、 流れ:=流れ+residual flow(B、
A)、及び N:=N+1 となる。最後に、N>0の場合には、Cの頻度を(流れ
/N)と推定する。
である。例えば、サブステップ3で形成されたほとんど
の推定値は、おそらく、エラーを蓄積することのあるロ
ーカル伝播により形成される推定値、又は若干のサンプ
ル又は若干の発生ポイントをもつブロックに対して自然
のままの推定を行うステップ5で形成された推定値、或
いは残りの流れを用いてアークに対して自然のままの推
定を行うステップ7で形成された推定値よりも精度が高
い。更に、ステップ3で作られる推定値の場合には、精
度が次のものに相関する。 1)平均値に寄与する多数の発生ポイントを有する(サ
ブステップ3.h)。及び 2)平均値に寄与する多数の発生ポイントの比に小さな
変化しかもたない。 従って、ステップ780において「信頼値」を指定する
ことにより推定値の精度を確立することができる。好ま
しい実施形態は、3つの信頼値、即ち低、中間及び高の
信頼値を有する。
トをもつクラスに対してステップ3.aで形成された推
定値; b)ステップ3.dで形成された推定値;及び c)少なくとも3つの比(N≧3)(但し、最大の比
は、最小の比の1.2倍以上)を平均化することにより
ステップ3.hで形成された推定値≧100。 しかしながら、ステップ3.gが推定に対して2回以上
行われた場合には、推定値の信頼性が低い。
る。 a)2つの発生ポイントをもつクラスに対してステップ
3.aで形成された推定値; b)ステップ3で形成された推定値≧100。しかしな
がら、ステップ3.gが推定に対して2回以上行われた
場合には、推定値の信頼性が低い;及び c)完全なCFS(即ちアークの欠落がない)に対して
ステップ4(ローカル伝播)で形成された推定値≧10
0。しかしながら、ステップ3.gが、「流入=流出」
方程式に使用される推定に対して2回以上行われた場合
には、推定値の信頼性が低い。 低信頼性の推定値は、残りの推定値である。
ーの使用: この点において、頻度等価クラスのほとんどに対し推定
値及び信頼値が存在する。しかしながら、推定値は、流
れ制約に違反することがある。図8のステップ790
は、推定値が適度な限界を越えない限り、例えば、負の
推定値が許されることがない限り、制約ソルバーを使用
して、制約を満足するように推定値を修正する。制約ソ
ルバーの重要な特性は、次の通りである。 (1)ソルバーは、一次方程式の過少制約系を取り扱わ
ねばならず、これらはAx=bと表すことができる。但
し、Aは、制約のマトリクスであり、そしてx及びb
は、ベクトルである。 (2)変数の初期推定値のベクトルxと、変数の重みの
ベクトルwとが与えられると、ソルバーは、ベクトルx
−x’の重み付けされた大きさを最小にする解ベクトル
x’を見出す。重みのベクトルwに対するベクトルvの
重み付けされた大きさは、次の通りである。 sqrt(sum〔i=1、n〕(w(I)*(v
(I)2 ))
ム−シュミット正規直交化のような標準的な線型代数技
術を使用してこのようなソルバーを簡単に構成すること
ができる。 a)ステップ791において流れ制約をもつマトリクス
Aを設定する。推定値を有する各頻度等価クラスごとに
マトリクスAの1つの列を使用する。各流れ制約ごとに
1つの行を使用する。流れ制約は、ステップ4の式2及
び式3をCFGのブロックに適用することにより得られ
る。しかしながら、流れ制約は、これが推定値をもたな
い頻度等価クラスを指すときには破棄され、或いは流れ
制約は、式2又は式3の全ての変数が同じ頻度等価クラ
スにあるときには全て0の行を形成する。
るには不充分であるから、マトリクスAは、一次方程式
の過少制約系となる。 b)ステップ792において頻度推定値でベクトルxを
初期化する。x〔i〕は、頻度等価クラスに対する推定
値である。 c)ステップ793において頻度クラスIに対する重み
ベクトルw〔i〕を、頻度クラスIにおけるブロック及
びアークの数に推定値x〔i〕のconfidence
weightを乗算したものを、x〔i〕=0の場合
は1で除算し、さもなくば、x〔i〕で除算したものに
等しくなるように初期化する。但し、x及びwは、長さ
が等しい。
値の相対的な変化を制御するために次のステップに使用
される。例えば、制約マトリクスAが、2つの推定値の
みを等しくすべきであることを示す場合には、推定値x
〔1〕が次の量だけ増加される。 (w〔1〕/(w〔1〕+w〔2〕))x(x〔2〕−
x〔1〕) 高い信頼性の推定値の重みは、低い信頼性の推定値より
も大きくなければならない。好ましい実施形態は、変数
confidence weightを次の値にセット
する。 信頼性の低い推定値の場合は1; 中程度の信頼性の場合は100;そして 信頼性の高い推定値の場合は10000。
比例しなければならない。従って、同じ信頼値をもつ競
合する推定値は、各々、同じ割合だけ調整される。例え
ば、頻度が2つの到来するアークについて10及び1で
ありそして出て行くアークについて10であって、各推
定値が同じ信頼値を有するような基本的ブロックを有す
る流れグラフについて考える。重みが全て等しい場合に
は、制約ソルバーは、各々、値9.67、0.67及び
10.34を指定する。この解決策において、右のアー
クに対する推定値が33%だけ変更される。
は、各々、9.52、0.95及び10.47を形成す
る。従って、推定値の各々は、その元の値のほぼ5%変
更される。 d)ステップ794において、制約ソルバーを使用し、
重みについて元の推定値に最も密接な解を見つける。 e)ステップ795において、下限より小さい解をその
下限にリセットする。推定値の下限は、ステップ3.g
ではfreq lower boundであり或いはス
テップ3で推定値が形成されない場合には0である。 f)ステップ796において、元の値から10%以上変
化した推定値に対する信頼値を「低い信頼性」にリセッ
トする。
る。全体的な解決策 各命令ごとにストールサイクルの平均数が決定される
と、次のステップは、ストールに対して考えられる説明
を推論することである。これは、システム設計者が性能
問題の原因を理解すると共に、適当な解決策を案出する
上で助けとなる。
ことのある事象、例えば、データキャッシュミスの発生
をサンプリングするのに使用できる。しかしながら、ほ
とんどのシステムにおいては、このような性能カウンタ
は、どの命令が所与の事象を生じさせたかを正確に識別
しない。方法Cは、方法Bで計算された実行頻度及び命
令当たりのサイクルの情報を、手順に対する制御流れグ
ラフと共に使用して、各動的なストールに対する理由を
決定する。
られる説明を見出すための全体的な解決策を示す。ステ
ップ911において、各基本的なブロックの命令は、プ
ロセッサパイプラインの詳細なモデルを用いてスケジュ
ールされる。パイプラインのオペレーションの記録は、
各命令がストールされたサイクル数(920)、なぜ命
令がストールされたかの理由、及びもし適当であれば、
そのストールを生じさせた「カルプリット(罪人)」と
称する手前の命令(912)とを生じる。例えば、スト
ールされた命令は、カルプリット命令により計算された
結果を必要とする。
トールサイクル(920)が上記のように決定された全
ストールサイクル(930)から減算されて、各命令ご
とに動的なストールサイクル(940)を形成する。動
的なストールサイクルとは、プロセッサパイプラインに
より課せられる制約では説明できないストールサイクル
である。
及び個々の命令の特性、制御流れグラフ、及び上記のよ
うに得られた頻度推定値を含む(これらに限定されな
い)全ての使用可能な情報(950)を分析することに
より、動的なストールサイクルのための考えられる説明
が識別される。この分析は、動的なストールのための考
えられる理由、及びもし適当であれば、カルプリット
(全体的に952)を形成する。
考えられる説明を見出すために(ステップ951)、命
令が一般にストールを生じるようにさせる全ての既知の
理由が考慮される。これら理由の幾つかは、特定の場合
には、除外(又は排除)することができる。この排除プ
ロセスを以下に詳細に説明する。以下に述べる分析技術
に加えて、種々の種類の事象をカウントするハードウェ
ア性能カウンタを用いて、動的ストールの理由を識別す
ることもできる。Iキャッシュミスのような事象に対
し、各命令ごとにこれら事象の頻度を識別するサンプル
を得ることができる。
なストールに対する各考えられる理由の寄与を決定する
のに使用できる。所与の事象についてのサンプルは、各
命令ごとに、その命令に対して事象が生じた回数の適当
なカウントを与えねばならない。ある種の事象について
は、これは、方法Dにおいて以下に述べる形態のハード
ウェアサポートを必要とする。
ールに対する考えられる説明として与えられる。排除
は、各動的なストールに対し独特の説明を常には生じな
いが、しばしばそのようにすることができる。実際に、
命令は、多数の理由で同時に又は異なる時期にストール
されることがある。たとえ独特の理由を与えることがで
きなくても、全ての考えられる理由を与えることは、ユ
ーザがその可能性を絞り込む上で助けとなろう。動的な
ストールの幾つかの共通の原因を適当な条件のもとでい
かに除外できるかについて以下に説明する。
命令をフェッチするためにアクセスされたが、必要な命
令がIキャッシュにないときに生じる。これをIキャッ
シュミスと称する。この場合に、命令は、待ち時間の長
いメモリからフェッチしなければならない。同様に、動
的なストールは、命令変換のルックアサイドバッファ
(ITB)が命令の仮想メモリアドレスを物理的なメモ
リアドレスに変換するためにアクセスされたが、必要な
変換エントリーがITBにない(ITBミスと称する)
ときに生じる。この場合には、命令フェッチを続ける前
に必要なエントリーでITBを更新しなければならな
い。ストールされる命令の直前にフェッチされて実行さ
れる命令のアドレスによりある条件が満足される場合
に、Iキャッシュ又はITBミスを除外することができ
る。
るケースを示す。(ITBミスは、以下に述べる。)3
つの基本的なブロック1031、1032、1033が
図示されている。ブロック1031及び1032は、ブ
ロック1033をコールし、アーク1033−1034
は、制御流れグラフに表されたようにそれらの間に流れ
る。又、命令1011−13がブロック10のライン1
021−1024にいかにマップされ、そして基本的ブ
ロック1033の命令がメモリにいかにレイアウトされ
るかも図示されている。図12において、命令1011
−1013は、斜線で示されており、そしてこれらライ
ン間の分離は、破線で示されている。
示されたように、多数のケースについて考慮する。スト
ールされた命令が基本的ブロックの始めに存在しない場
合には、2つのサブケースがある。その命令、例えば、
1012がキャッシュラインの始めにある(換言すれ
ば、命令のアドレスがキャッシュラインサイズの整数倍
である)場合には、Iキャッシュミスを除外することが
できない。というのは、命令が別のキャッシュラインに
おいてその直前で実行されるからである。ストールされ
た命令(例えば、1013)がキャッシュラインの始め
に存在しない場合には、Iキャッシュミスを除外するこ
とができる。
的ブロックの始めに存在する場合には、それがキャッシ
ュラインの始めにも存在するかどうかに関わりなく、以
下先行項目ブロックと称する全ての基本的ブロック、例
えば、1031、1032の最後の命令が検査される
(先行項目ブロックから、制御は、ストールされた命令
を含む基本的ブロック、例えば、1033へ流れる)。
これらの命令が、全て、ストールされた命令、例えば1
011と同じキャッシュラインにある場合には、Iキャ
ッシュミスを除外することができる。命令は、それらの
アドレスが、キャッシュラインサイズで除算したときに
同じ商を生じる場合には、同じキャッシュラインに存在
する。この分析は、以前に得られた頻度推定値に基づ
き、ストールされた命令を含む基本的ブロックよりも相
当に低い頻度で実行される先行項目ブロックを無視す
る。
て単一のキャッシュしかもたないプロセッサ又はコンピ
ュータシステムに適用される場合には、1つの付加的な
チェックを行わねばならない。ストールされた命令がメ
モリをアクセスする直前にいずれか1つの命令が実行さ
れる場合には、Iキャッシュミスを除外することができ
ない。これは、メモリアクセスが、ストールされた命令
を含むキャッシュラインを変位して、アクセスされてい
るデータのための余地を作るからである。
フにより指示される順序を常にたどることを仮定する。
割り込みは、この仮定に違反させることがある。しかし
ながら、割り込みは、あまり頻繁に生じることがなくそ
して命令ストリームにおいてランダムなポイントで生じ
るので、この仮定は、統計学的な意味では合理的に保持
される。更に、例外も、この仮定に違反する。
キャッシュミス事象についてプログラムカウンタを統計
学的にサンプリングすることにより評価することができ
る。この方法は、時間経過に伴い、Iキャッシュミスの
ために各命令がいかに頻繁にストールされるかの正確な
推定値を形成することができる。この推定値から、Iキ
ャッシュミスに起因し得るストールサイクル(この命令
により被る)の数についての上限が計算される。より詳
細には、上限は、次のものの積である。 (a)この命令に対して観察されるIキャッシュミス事
象の数; (b)Iキャッシュミスに対するサンプリング周期(こ
の多数のIキャッシュミスのうちの各1つがサンプリン
グされる);及び (c)Iキャッシュミスの最大ペナルティ(通常は、メ
インメモリのアクセス待ち時間)。
れる推定回数で除算され、平均値が得られる。この平均
値が小さい(例えば、サイクルの半分未満)場合には、
Iキャッシュミスを、ストールについて考えられる説明
として除外できる。さもなくば、理由がユーザに情報と
して与えられる。ITBミスの分析も同様であるが、前
記説明の「キャッシュライン」を「仮想メモリページ」
として解釈しなければならない。
ュ)がロード命令でアクセスされるが、必要なデータが
Dキャッシュに存在しないときにも生じる。これは、D
キャッシュミスと称する。同様に、動的なストールは、
データ変換ルックアサイドバッファ(DTB)がデータ
の仮想メモリアドレスを物理的なメモリアドレスに変換
するためにアクセスされたが、必要な変換エントリーが
DTBに存在しない(DTBミスと称する)ときにも生
じる。
ュミス又はDTBミスが生じたときには異なる振る舞い
をする。ある実施形態では、ロード命令自体がストール
される。この場合に、Dキャッシュミス又はDTBミス
は、ストールされた命令がロード命令でない場合に除外
することができる。他の実施形態では、ロードは遅延を
伴わずに発生されるが、ロードの結果を使用する命令
は、その結果が実際に使用できるようになるまでストー
ルされる。この場合には、命令ストリームにおいてレジ
スタが読み取られそして書き込まれる順序を分析しなけ
ればならない。
ストリームにおいてレジスタが読み取られそして書き込
まれる順序及び仕方によってある条件が満足される場合
には除外することができる。ストールされた命令がDキ
ャッシュミス又はDTBミスによりストールされたかど
うかを決定するために、それが参照する各レジスタが考
慮される。図14は、データミスによるストールを除外
するために実行することのできる分析を示す。図14に
おいては、ブロック1201からブロック1202又は
ブロック1203へ実行が行われ、ブロック1204
は、ブロック1202又は1203が実行された後に実
行される。命令1213は、例えば、レジスタt0によ
る参照を分析するに必要なデータが直ちに得られないこ
とによりストールされる。
命令1213のレジスタt0を最後に参照した命令12
11−1212が、以下に詳細に述べる仕方で識別され
る。このような命令がメモリからレジスタt0へデータ
をロードする場合には、Dキャッシュミス又はDTBミ
スがストールのための考えられる説明とみなされ、その
命令は、カルプリットとして識別される。これは、スト
ールされた命令により参照された各レジスタに適用され
る。これらレジスタのいずれもカルプリットを生じない
場合には、Dキャッシュミス又はDTBミスがストール
のための考えられる説明として除外される。図14にお
いて、例えば、Dキャッシュミス又はDTBミスは、ロ
ード命令1212で、カルプリットと考えられる。
ために、同じブロック内のストールされた命令より前の
命令が、最初に、それらのアドレスの下降順で検査され
る。それらのいずれもレジスタを参照しない場合には、
制御がそのストールされた命令へと流れるところの基本
的ブロックの命令も検査される(これも所与の基本的ブ
ロックにおける命令のアドレスの下降順に)が、そのス
トールされた命令を含むものより著しく低い頻度で実行
される基本的ブロックは、無視することができる。スト
ールされた命令の頻度推定値の小さな割合としてスレッ
シュホールドを計算することができ、そして頻度推定値
がこのスレッシュホールドより低い基本的ブロックを無
視することができる。
トールされた命令を含む基本的ブロックから始めて逆の
制御流れグラフ(元のグラフにおける全ての制御流れア
ークの方向を逆転することによって形成された)におい
て深さ優先探索を行うことにより実行できる。これにつ
いては、ホプクロフト氏等の「グラフ操作のための効率
的なアルゴリズム(Efficient Algorithms for Graph Ma
niplation)」、コミュニケーションズ・オブ・ザ・AC
M、16(6):372−378、1973年を参照さ
れたい。この探索において、基本的なブロックに隣接す
るものは、その基本的ブロック自体が当該レジスタを参
照する命令を含む場合には、調べられる必要がない。
別のキャッシュ及び個別の変換ルックアサイドバッファ
を有するコンピュータシステムを参照して説明したが、
Iキャッシュ、ITB、Dキャッシュ及びDTBミスを
除外するための方法は、データ及び命令が単一のキャッ
シュを共用するか、又はデータ及び命令が単一の変換ル
ックアサイドバッファを共用するか、或いはその両方で
あるようなプロセッサ及びコンピュータシステムにも適
用できる。
ャッシュ又は変換ルックアサイドバッファを共用する場
合には、Dキャッシュ又はDTBミスに対して付加的な
理由を考慮しなければならない。例えば、メモリ位置A
に1つの命令がロードされ、同じ基本的ブロックにおけ
るその後の命令がその命令自体にキャッシュミスを招き
そしてキャッシュから位置Aのデータを変位し、次い
で、同じ基本的ブロックに依然として存在するその後の
命令がAにロードしようと試み、Aの第2のロードがキ
ャッシュにおいてミスとなると仮定する。Iキャッシュ
ミスに関する情報を用いて、このような状態を除外する
ことができる。
プロセッサの分岐予想ロジックにより予想されるターゲ
ットと相違するときにも生じる。これは、分岐予想ミス
と称する。ここでは、「分岐命令」は、プログラムの制
御流を変更し得る命令を意味し、即ちそれらは、一般に
「分岐」と称される命令を含むだけでなく、「ジャン
プ」、サブルーチンコール、及び復帰命令等も含む。
与するかは、制御が以下に述べるようにストールされた
命令に到達するときに生じ得る分岐予想ミスの頻度につ
いての上限を計算することにより推定できる。分岐予想
ミスは、その寄与がある適当なスレッシュホールドより
低い場合にはストールのための考えられる説明として除
外することができ、或いは又、その寄与は、それがいか
に小さくてもユーザに与えることができる。基本的ブロ
ックの始めにストールされた命令をいかに取り扱うかに
ついて以下に説明する。ストールされた命令が基本的ブ
ロックの第1の命令でない場合は、分岐予想ミスをスト
ールの考えられる説明として直ちに除外することができ
る。それ以上の分析は、必要とされない。
の頻度の上限を見出すために、その命令の直前に実行さ
れる全ての基本的ブロックが、図13に示すように検討
される。この説明上、これらの基本的ブロックは、先行
項目ブロック(例えば、1101、1102、110
3、1104)と称され;これら先行項目ブロックから
ストールされた命令(subq)を含む基本的ブロック
への制御流れアークは、先行項目アーク(例えば、11
11、1112、1113、1115)と称され;そし
て先行項目ブロックの最後の命令は、先行項目命令(例
えば、addq、br、jmp及びbeq命令)と称さ
れる。例えば、全ての先行項目ブロックが未知である場
合には、基本的ブロックは、未知のコールされたサブル
ーチンからの「戻り」命令のターゲットであり、従っ
て、未知の先行項目は、悲観的に、常に予想ミスである
と仮定することができる。
き限界1122は、各先行項目命令に1つづつある個々
の限界の和である。ここの限界は、ボックス1121と
して示されている。4つの形式の先行項目命令がある。
最初の4つが図13に示されている。即ち (1)基本的ブロック1101におけるaddq命令の
ような非分岐命令。個々の限界は、ゼロにセットされ、
予想を行う必要がないので分岐予想ミスは生じない。残
りのケースは、分岐命令−−実行の流れを変更し得る命
令に関する。 (2)基本的ブロック1102におけるbr命令のよう
に、ターゲットアドレスが動的なプログラムの振る舞い
に依存しない分岐命令(通常は無条件分岐)。個々の限
界は、ゼロにセットされ、ターゲットアドレスは以前の
確実性で分かるので分岐予想ミスは生じない。 (3)予想されたターゲットアドレスが実行可能にエン
コードされる(例えばマシンコードに埋め込まれたプロ
グラムカウンタオフセットとして)分岐命令。その例
は、基本的ブロック1103におけるジャンプ命令であ
る。予想されるターゲットアドレスは、実行可能性を検
査することにより(例えば、命令をデコードすることに
より)決定される。ターゲットアドレスは、ストールさ
れた命令のアドレスと比較される。
々の限界がゼロにセットされ、即ち予想であったために
制御がストールされた命令に移行される場合には分岐予
想ミスは生じない。さもなくば、個々の限界は、それに
対応する先行項目アークのための頻度推定値にセットさ
れ、即ちストールされた命令への各制御の移行は、予想
とは異なり、ひいては、予想ミスとなる。例えば、アー
ク1113の限界は、予想された経路がアーク1113
であった場合にゼロにセットされるが、予想された経路
がアーク1114であった場合にはアーク1113の頻
度推定値にセットされる。 (4)プロセッサのランタイム状態に基づき、制御を静
的に知られたターゲットアドレスへ条件移行させる分岐
命令。その例は、基本的ブロック1104におけるbe
q命令である。この形式の命令の場合に、多くのプロセ
ッサ設計では、動的な分岐予想技術を使用して、分岐が
命令の以前の実行で行われたかどうかに基づき分岐が行
われる(即ち、制御が移行される)かどうかを予想す
る。
ッサに使用される場合には、個々の限界が、先行項目ア
ークの頻度推定値か、又は図13のアーク1116のよ
うに先行項目アークから発せられる他の制御流アーク
(以下、別のアークと称する)の頻度推定値から計算さ
れた推定値かのいずれか小さい方にセットされる。この
後者の推定値は、分岐がそれ以外のものより非常に頻繁
に行われるか又はその逆である場合に、動的な分岐予想
メカニズムがおそらく命令のほとんどの実行においてそ
の結果を正しく予想するという仮定に基づいて選択され
る。
ムが、デジタル・イクイップメント社のアルファ211
64プロセッサに使用されるメカニズムと同様に、1つ
以上のビットをもつ経過テーブルを使用する場合には、
別のアーク1116の頻度推定値となる。これは、図1
3にアーク1115として示されたケースである。 (5)他の分岐命令(図13には示さず)。上記した以
外の他の形式の分岐命令については、上記分析を使用し
て、分岐予想ミスの頻度に関する限界を推定できるが、
他の点では、個々の限界が先行項目アークの頻度推定値
にセットされ、このアークに沿った各制御移行は、悲観
的に予想ミスであると仮定される。
限を使用して、所与の命令のストールサイクルに対する
分岐予想ミスの寄与を推定することができる。特に、こ
の寄与は、次のように計算することができる。 分岐予想ミスの頻度の上限を次のもので除算する: ストールされた命令を常に含む基本ブロックの頻度: ペナルティ。 但し、「ペナルティ」は、分岐予想ミスの間に被るパイ
プラインストールサイクルの数である。この数は、特定
のプロセッサ実施形態に基づく。
又は同じプロセッサで実行された以前の命令との同期オ
ペレーションを実行する命令を有する。これらの同期オ
ペレーションも、動的なストールを導入し得る。例え
ば、デジタル・イクイップメント社のアルファマイクロ
プロセッサアーキテクチャーは、マルチプロセッサの他
のプロセッサから見てプロセッサのメモリオペレーショ
ンを直列化するために動的なストールサイクルを導入す
る「メモリバリア」命令(mb)を有する。「トラップ
バリア」命令(trapb)は、全ての先行する命令が
トラップを招くことなく完了するよう保証されるまで動
的なストールを導入する。他のプロセッサアーキテクチ
ャーは、同様の機能のための命令を有する。同期は、ス
トールされた命令が同期を実行しない場合にストールの
考えられる説明として除外することができる。
ファマイクロプロセッサでは、mb命令は、その後に生
じる次のメモリアクセス命令にストールを生じさせる。
これらプロセッサでは、mb命令を介しての同期は、ス
トールされた命令がメモリアクセス命令でないか、又は
メモリアクセス命令ではあるがその直前にmb命令が生
じない場合には、ストールの考えられる説明として除外
することができる。同様に、これらプロセッサでは、t
rapb命令自体は、全ての先行する命令がトラップを
招くことなく完了するよう保証されるまでストールを生
じ、trapb命令を介しての同期は、ストールされた
命令それ自体がtrapb命令でない限り、ストールの
考えられる説明として除外することができる。
用できない1つ以上のプロセッサ実行ユニットを命令が
必要とする場合にも生じる。例えば、実行ユニットは、
手前の命令を実行している間には使用できない。この種
のストールを生じる実行ユニットのセットは、プロセッ
サの実施形態に依存する。実行ユニットは、メモリアク
セスユニット、レジスタオペレーションユニット、整数
乗算及びフローティングポイント除算ユニットを含む。
このような実行ユニットの各々に対し、ストールされた
命令がその実行ユニットを必要としない場合には、競合
をストールの考えられる説明として除外することができ
る。例えば、「add」命令は、フローティングポイン
ト除算ユニットの使用と競合しないので、決してストー
ルされない。
メモリ書き込みオペレーションを取り扱うプロセッサの
書き込みバッファが、まだ処理されている手前の書き込
み要求のためにいっぱいである場合にも生じる。これ
は、書き込みバッファオーバーフロート称される。
は、書き込みバッファオーバーフローは、ストールの考
えられる説明として除外することができる。さもなく
ば、「最近実行された」命令がいずれも記憶でない場合
にはおそらく考慮されない。より詳細には、同じ基本的
ブロックにおけるストールされた命令の前の命令は、そ
れらのアドレスの下降順に検査される。これらの命令が
いずれも記憶でない場合には、制御がそのストールされ
た命令へと流れるところの基本的ブロックの命令も検査
されるが、そのストールされた命令を含むものより相当
に低い頻度で実行される基本的ブロックは、無視するこ
とができる。Dキャッシュ又はDTBミスの取り扱いに
ついて既に述べた探索技術をここに適用することができ
る。探索は、記憶命令又は手順のエントリーポイントに
到達したときに終了する。
ストールのほとんどの一般的な理由を網羅する。現在又
は将来のプロセッサにおける他の理由は、所与の形式の
命令をストールさせることのある命令及びメカニズムに
より必要とされるリソースを決定し、ひいては、静的な
ストールと、動的なストールの考えられる理由とを識別
するためにプロセッサ実施形態の同様の分析により除外
することができる。動的なストールが考えられる場合に
は、所与の命令へと通じる命令を上記のように検査し、
それらのいずれかが所与の命令をストールさせるかどう
か決定することができる。
を正確に測定するハードウェア性能カウンタ 本発明の好ましい実施形態において、命令の実行頻度
は、「リタイア」カウンタを含む特定設計のハードウェ
アを用いて直接測定することができる。リタイアカウン
タは、プログラムの各命令がリタイアされる回数に関す
る統計学的にサンプリングされた情報を与える。
1300は、直列接続された命令キャッシュ(Iキャッ
シュ)1310、フェッチユニット1320、発生待ち
行列1330、実行パイプライン1340、及びリタイ
アユニット1350を備えている。リタイアユニット1
350は、リタイアカウンタ1360及び内部プロセッ
サレジスタ1370に接続される。更に、ハードウェア
は、割り込みハンドラー1380及び性能データ139
0を記憶するメモリ1301である。
ッチユニット1320は、Iキャッシュ1310から命
令をフェッチし、発生待ち行列1330に入れる。命令
は、発生待ち行列から実行パイプライン1340へ送ら
れる。好ましい実施形態において、単一のプロセッササ
イクル中に多数の命令を発生することができる。命令が
首尾良く完了すると、リタイアユニット1350がリタ
イアカウンタ1360を増加する。カウンタ1360
は、割り込み信号をライン1361に周期的に発生し、
このとき、それに関連したプログラムカウンタ(pc)
値がIPR1370に記憶される。これに応答して、割
り込みハンドラー1380は、カウンタ1360及びI
PR1370をサンプリングし、性能データ1390を
発生することができる。サンプリングされた性能データ
は、特定のプログラムアドレス(pc値)の命令がリタ
イアされる回数に実質的に比例する。
数は、カウンタの特定ビットのオーバーフロー時に割り
込みを発生するようにカウンタをプリセットすることに
より選択することができる。カウンタ1360は、セッ
トライン1362上の信号によりセットすることができ
る。割り込みと割り込みとの間の任意の間隔は、カウン
タを所定値にセットすることにより選択できる。ランダ
ム長さの間隔を選択することができる。或いは又、カウ
ンタがカウントダウンレジスタとして実施される場合に
は、割り込みと割り込みとの間の間隔は、カウンタを選
択された値にプリセットすることにより選択できる。こ
こでは、カウンタは、過少流即ちゼロ値の際に割り込
む。
込みハンドラーは、一般に、この割り込みハンドラーが
完了したときに実行されるべき次の命令のプログラムカ
ウンタ(pc)値にアクセスし、このpc値は、「例外
アドレス」又は「復帰pc」と称されることもある。し
かしながら、このpc値を単に記憶するだけでは、手前
の命令がリタイアされた回数を正確に反映しない。特
に、命令がリタイアしそして性能カウンタがオーバーフ
ローした場合には、そのオーバーフローを生じた命令が
既に実行されている。この場合は、復帰pcは、リタイ
アされた命令のpc値を反映しない。
は、命令ストリームにおいてリタイアにより割り込みが
生じた命令の直後の命令であってもよいし、又はフェッ
チユニット、発生待ち行列及び実行パイプラインの種々
の段階における命令の数に動的に基づいて、その後の可
変数の命令であってもよい。それ故、割り込みハンドラ
ー1380が復帰pcを単に記録するときは、「リタイ
ア命令」カウンタを用いて各命令に対して記憶されたサ
ンプルカウントは、命令の実行頻度を正確に反映しな
い。
の部分1400について考える。5つの基本的ブロック
1401−1405がループに編成され、各基本的ブロ
ックは、単一の命令(1410−1450)で構成され
る。基本的ブロックの命令がリタイアするときには、
「リタイア」カウンタがオーバーフローし、そして割り
込みが発生され、割り込みハンドラーの復帰pc値が、
実行されるべき次の命令となる。
みを発生するときには、復帰pc値が命令1440であ
り、同様に、命令1430が割り込みを発生するときに
は、復帰pc値が、命令1430における条件分岐の結
果に基づいて命令1440又は命令1450のいずれか
となる。従って、所与のpc値に対して記録された同じ
カウントが、多数の先行する命令のリタイアを反映す
る。例えば、命令1440に対して記録された同じカウ
ントは、命令1420の全てのリタイアの結果を命令1
430の幾つかのリタイアに加えたものであり、同様
に、命令1450に対して記憶されたカウントは、命令
1440の全てのリタイアの結果を命令1430の幾つ
かのリタイアに加えたものである。一般に、この形式の
サンプルデータが与えられると、各命令のリタイア事象
の数を明確に決定することは不可能である。
ることにより、割り込みハンドラー1380により記録
された情報が、実際にリタイアされる命令のプログラム
カウンタ値を含むように確保することができる。本質的
な考え方は、カウンタがオーバーフローしそして割り込
みを発生するときに、リタイアにより割り込みを発生し
た正にその命令のプログラムカウンタ値を記録すること
である。このプログラムカウンタ値は、図15の内部プ
ロセッサレジスタ(IPR)1370に記録することが
できる。IPRは、例えば、割り込みハンドラー138
0により実行される特権命令により読み取ることができ
る。
リタイアユニット1350に得られるようにすることが
できる。これらの値は、命令と共に全プロセッサパイプ
ラインを経て搬送することができる。より一般的には、
命令がパイプラインを進行するときの命令の識別は、比
較的小さな命令番号即ち「inum」である。inum
のサイズは、一度にパイプラインに存在することのでき
る全命令数より大きくなる必要はない。
値1520に対して実行命令のinum識別1510を
マッピングすることは、テーブル1500を使用するこ
とにより実行できる。リタイアユニット1350は、リ
タイアを待機している命令、即ちパイプラインにある命
令のinum1352の待ち行列1351を、各命令を
いつリタイアできるかを決定するのに使用される他の依
存性情報(DEP)1353と共に維持する。判断は、
ロジック1354により行われる。命令がリタイアされ
るときは、そのinum識別1352を用いて、それに
対応するpc値1520をテーブル1500から抽出す
る。このpc値は、次いで、IPR1370に記憶する
ことができる。
ーするときにサンプルを記録するために発生される割り
込み信号1361は、直ちに発生される必要がない。と
いうのは、リタイアされる命令のpc値がIPR137
0に得られるからである。この値は、次の割り込みまで
変化しない。従って、プロセッサのパイプラインの設計
が、リタイアされた命令のpc値を得るのに数サイクル
を必要とするようなものであるときには、pc値がIP
R1370に書き込まれた後のある時間に割り込み13
61を発生することが許される。
ササイクル中に多数の命令をリタイアすることができ
る。しかしながら、命令は、通常、「プログラム順序」
でリタイアされ、即ちそれらが一度に1つづつ実行され
る場合に実行される順序でリタイアされる。これは、通
常、命令を乱れた順序で発生できるプロセッサにおいて
も言えることである。従って、同じプロセッササイクル
中に命令のグループがリタイアされて、リタイアカウン
タをオーバーフローさせるときには、リタイアする命令
の少なくとも1つを、オーバーフローを生じさせた命令
として識別できる。例えば、リタイアカウンタは、値X
に達したときにオーバーフローにセットされ、プロセッ
サのリタイアサイクルは、値X−Nでスタートし、そし
てそのサイクル中にK個の命令がリタイアする。この場
合に、K個の命令のグループにおけるN番目の命令は、
オーバーフローを生じさせた命令であり、そのpc値
は、IPR1370に記憶されねばならない。
種類の性能カウンタへと拡張することができる。一般
に、いかなる事象に対しても、その事象に関連した情報
を記録することが望まれ、例えば、その事象を生じた命
令のpc値を記録することができ、又はキャッシュにお
いてミスしたメモリオペレーションによりアクセスされ
たデータの仮想アドレスを記録することができる。この
付加的なデータのためにIPR1370のセットを維持
し、そして適当な事象カウンタがオーバーフローしたと
きにIPR1370を更新することにより、各個々の命
令又はメモリ位置に対して所与の事象のレートを反映す
るサンプルデータを直接的に得ることができる。
改善する方法 ここに述べるハードウェアにより形成されるデータは、
ノイズを含む傾向がある。又、データは、潜在的に重大
な統計学的変化も含む。これらの変化は、次のような後
処理段階において減少することができる。 1.各手順の制御流れグラフにおける基本的ブロック
を、上記のように、頻度等価クラスにグループ分けす
る。稀な環境(例えば、ある手順が別の手順をコール
し、これが第3の手順のコードへとジャンプし、第1の
手順を終了するとき、又は割り込みが生じて、その割り
込まれたコードへ決して復帰しないとき)を除いて、所
与の頻度等価クラスにおける全ての基本的ブロックは、
プログラムの各実行において同じ回数だけ実行すること
が保証され、従って、これら基本的ブロックの各々にお
ける全ての命令も同じ回数だけ実行する。 2.各々の頻度等価クラスに対し、そのクラスの各命令
ごとにサンプルカウントの平均値を得ることにより新た
な実行頻度推定値を決定する。あるクラスの命令のサン
プルカウントの変化が非常に大きい(例えば、平均の5
0%以上)場合には、それにより得られる頻度推定値
は、「低い信頼性」と判断される。
説明したが、特許請求の範囲に規定した本発明の範囲か
ら逸脱せずに種々の変更がなされ得ることが当業者に容
易に明らかであろう。
ングサブシステムにより動作をプロファイリングするこ
とのできるコンピュータシステムのブロック図である。
る。
サイクル数を決定するためのプロセスを示すブロック図
である。
る。
ク図である。
るプロセスを示すブロック図である。
ロック図である。
のブロック図である。
線図である。
ク図である。
ク図である。
示すブロック図である。
のブロック図である。
示す図である。
ーブルを含む性能データ収集プロセスのデータ流れ線図
である。
Claims (3)
- 【請求項1】 実行パイプラインと、この実行パイプラ
インの端に接続されたリタイアユニットとを含むプロセ
ッサの性能データを収集する装置において、 上記プロセッサのリタイアユニットに接続されたレジス
タと、 上記実行パイプラインから命令がリタイアされるときに
上記レジスタを増加する手段と、 上記レジスタが所定値まで増加されたときに割り込みハ
ンドラーに割り込みを発生する手段と、を備えたことを
特徴とする装置。 - 【請求項2】 リタイアにより上記レジスタを増加さ
せ、オーバーフローさせ、そして割り込みを発生させる
ような命令に関連したプログラムカウンタ値を記憶する
ための内部プロセッサレジスタを更に備えた請求項1に
記載の装置。 - 【請求項3】 命令が実行される間に上記内部プロセッ
サレジスタに記録するために上記プログラムカウンタ値
を識別する手段を更に備えた請求項2に記載の装置。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/815,982 US6112317A (en) | 1997-03-10 | 1997-03-10 | Processor performance counter for sampling the execution frequency of individual instructions |
| US08/815982 | 1997-03-10 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH10254700A true JPH10254700A (ja) | 1998-09-25 |
Family
ID=25219362
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10058067A Pending JPH10254700A (ja) | 1997-03-10 | 1998-03-10 | 個々の命令の実行頻度をサンプリングするプロセッサ性能カウンタ |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US6112317A (ja) |
| EP (1) | EP0864979A3 (ja) |
| JP (1) | JPH10254700A (ja) |
| CA (1) | CA2231570A1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011519100A (ja) * | 2008-04-28 | 2011-06-30 | イマジネイション テクノロジーズ リミテッド | パイプライン型アーキテクチャを有するデータプロセッサ内のトレースデータを与えるシステム |
Families Citing this family (71)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6321375B1 (en) * | 1998-05-14 | 2001-11-20 | International Business Machines Corporation | Method and apparatus for determining most recently used method |
| US6480818B1 (en) | 1998-11-13 | 2002-11-12 | Cray Inc. | Debugging techniques in a multithreaded environment |
| US6314471B1 (en) | 1998-11-13 | 2001-11-06 | Cray Inc. | Techniques for an interrupt free operating system |
| US6952827B1 (en) | 1998-11-13 | 2005-10-04 | Cray Inc. | User program and operating system interface in a multithreaded environment |
| US6862635B1 (en) | 1998-11-13 | 2005-03-01 | Cray Inc. | Synchronization techniques in a multithreaded environment |
| US6353829B1 (en) | 1998-12-23 | 2002-03-05 | Cray Inc. | Method and system for memory allocation in a multiprocessing environment |
| US6430676B1 (en) | 1998-12-23 | 2002-08-06 | Cray Inc. | Method and system for calculating instruction lookahead |
| US6321379B1 (en) | 1998-12-23 | 2001-11-20 | Cray Inc. | Method and system for target register allocation |
| US6415433B1 (en) | 1998-12-23 | 2002-07-02 | Cray Inc. | Method and system for identifying locations to move portions of the computer program |
| US6230313B1 (en) | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
| FR2795837B1 (fr) * | 1999-06-30 | 2004-09-17 | Bull Cp8 | Procede pour comptabiliser le temps dans un dispositif de traitement d'information, et dispositif associe |
| US6611276B1 (en) * | 1999-08-31 | 2003-08-26 | Intel Corporation | Graphical user interface that displays operation of processor threads over time |
| US6772097B1 (en) * | 1999-09-30 | 2004-08-03 | Intel Corporation | Retrieving I/O processor performance monitor data |
| US6609208B1 (en) | 2000-07-07 | 2003-08-19 | Hewlett-Packard Development Company | Energy-based sampling for performance monitoring |
| JP3636986B2 (ja) * | 2000-12-06 | 2005-04-06 | 松下電器産業株式会社 | 半導体集積回路 |
| US6880072B1 (en) * | 2001-05-08 | 2005-04-12 | Lsi Logic Corporation | Pipelined processor and method using a profile register storing the return from exception address of an executed instruction supplied by an exception program counter chain for code profiling |
| TWI223138B (en) * | 2001-07-11 | 2004-11-01 | Faraday Tech Corp | Device and method for detecting micro-processor execution performance |
| US7069424B2 (en) * | 2002-01-02 | 2006-06-27 | Intel Corporation | Placing front instruction in replay loop to front to place side instruction into execution stream upon determination of criticality |
| US6968547B2 (en) * | 2002-01-29 | 2005-11-22 | Sun Microsystems, Inc. | Dynamic trap table interposition for efficient collection of trap statistics |
| US6701412B1 (en) * | 2003-01-27 | 2004-03-02 | Sun Microsystems, Inc. | Method and apparatus for performing software sampling on a microprocessor cache |
| US20090052608A1 (en) * | 2007-08-21 | 2009-02-26 | International Business Machines Corporation | Method for dynamically adjusting hardware event counting time-slice windows |
| US7415643B2 (en) * | 2003-05-09 | 2008-08-19 | Hewlett-Packard Development Company, L.P. | Coverage circuit for performance counter |
| US7404112B2 (en) * | 2003-05-09 | 2008-07-22 | Hewlett-Packard Development Company, L.P. | Data selection circuit for performance counter |
| US7275191B2 (en) * | 2003-05-09 | 2007-09-25 | Hewlett-Packard Development Company, L.P. | Coverage decoder circuit for performance counter |
| US7424397B2 (en) * | 2003-05-09 | 2008-09-09 | Hewlett-Packard Development Company, L.P. | General purpose performance counter |
| US7430696B2 (en) * | 2003-05-09 | 2008-09-30 | Hewlett-Packard Development Company, L.P. | Zeroing circuit for performance counter |
| US7331003B2 (en) * | 2003-05-09 | 2008-02-12 | Hewlett-Packard Development Company, L.P. | Match circuit for performance counter |
| US7475301B2 (en) * | 2003-05-09 | 2009-01-06 | Hewlett-Packard Development Company, L.P. | Increment/decrement circuit for performance counter |
| US7475302B2 (en) * | 2003-08-06 | 2009-01-06 | Hewlett-Packard Development Company, L.P. | Decoded match circuit for performance counter |
| US7318222B2 (en) * | 2003-08-27 | 2008-01-08 | Sun Microsystems, Inc. | Methods for execution control acquistion of a program and for executing an optimized version of a program |
| US7269830B2 (en) * | 2003-09-16 | 2007-09-11 | Sun Microsystems, Inc. | Methods and hardware for safe memory allocation in arbitrary program environments |
| US20050071516A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically profile applications |
| US7395527B2 (en) | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
| US7036534B2 (en) * | 2003-09-30 | 2006-05-02 | Mcclure Thomas W | Marine engine corrosion prevention system |
| US7373637B2 (en) | 2003-09-30 | 2008-05-13 | International Business Machines Corporation | Method and apparatus for counting instruction and memory location ranges |
| US7937691B2 (en) * | 2003-09-30 | 2011-05-03 | International Business Machines Corporation | Method and apparatus for counting execution of specific instructions and accesses to specific data locations |
| US8381037B2 (en) | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
| US7421681B2 (en) | 2003-10-09 | 2008-09-02 | International Business Machines Corporation | Method and system for autonomic monitoring of semaphore operation in an application |
| US7257657B2 (en) * | 2003-11-06 | 2007-08-14 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses for specific types of instructions |
| US7392370B2 (en) | 2004-01-14 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics |
| US7415705B2 (en) | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
| US7895382B2 (en) | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
| US7526757B2 (en) | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
| US7379858B2 (en) * | 2004-02-17 | 2008-05-27 | Intel Corporation | Computation of all-pairs reaching probabilities in software systems |
| US20050188185A1 (en) * | 2004-02-20 | 2005-08-25 | Grochowski Edward T. | Method and apparatus for predicate implementation using selective conversion to micro-operations |
| US7421684B2 (en) | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
| US20050216900A1 (en) * | 2004-03-29 | 2005-09-29 | Xiaohua Shi | Instruction scheduling |
| US7676530B2 (en) * | 2004-06-03 | 2010-03-09 | Hewlett-Packard Development Company, L.P. | Duration minimum and maximum circuit for performance counter |
| US7346824B2 (en) * | 2004-06-03 | 2008-03-18 | Hewlett-Packard Development Company, L.P. | Match circuit for performing pattern recognition in a performance counter |
| US7624319B2 (en) * | 2004-06-03 | 2009-11-24 | Hewlett-Packard Development Company, L.P. | Performance monitoring system |
| US20050283669A1 (en) * | 2004-06-03 | 2005-12-22 | Adkisson Richard W | Edge detect circuit for performance counter |
| FR2881244B1 (fr) * | 2005-01-24 | 2007-05-04 | Meiosys Soc Par Actions Simpli | Procede de comptage d'instructions pour journalisation et rejeu d'une sequence d'evenements deterministes |
| EP1856612B1 (en) * | 2005-01-28 | 2008-10-01 | International Business Machines Corporation | Method for counting instructions for logging and replay of a deterministic sequence of events |
| TWI306215B (en) * | 2005-04-29 | 2009-02-11 | Ind Tech Res Inst | Method and corresponding apparatus for compiling high-level languages into specific processor architectures |
| US7373565B2 (en) * | 2005-08-23 | 2008-05-13 | Hewlett-Packard Development Company, L.P. | Start/stop circuit for performance counter |
| US20080141008A1 (en) * | 2006-12-08 | 2008-06-12 | Advanced Micro Devices, Inc. | Execution engine monitoring device and method thereof |
| US20080141002A1 (en) * | 2006-12-08 | 2008-06-12 | Advanced Micro Devices, Inc. | Instruction pipeline monitoring device and method thereof |
| US20080140993A1 (en) * | 2006-12-08 | 2008-06-12 | Advanced Micro Devices, Inc. | Fetch engine monitoring device and method thereof |
| US8051411B2 (en) * | 2007-08-08 | 2011-11-01 | National Tsing Hua University | Method for copy propagations for a processor with distributed register file design |
| JPWO2009022371A1 (ja) * | 2007-08-16 | 2010-11-04 | ネットクリアスシステムズ株式会社 | タスク処理装置 |
| US8161493B2 (en) * | 2008-07-15 | 2012-04-17 | International Business Machines Corporation | Weighted-region cycle accounting for multi-threaded processor cores |
| US9971603B2 (en) | 2011-12-29 | 2018-05-15 | Intel Corporation | Causing an interrupt based on event count |
| US9575766B2 (en) * | 2011-12-29 | 2017-02-21 | Intel Corporation | Causing an interrupt based on event count |
| US11024352B2 (en) | 2012-04-10 | 2021-06-01 | Samsung Electronics Co., Ltd. | Memory system for access concentration decrease management and access concentration decrease method |
| KR101711388B1 (ko) | 2013-01-28 | 2017-03-02 | 삼성전자주식회사 | 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치 |
| WO2014149080A1 (en) * | 2013-03-18 | 2014-09-25 | The Trustees Of Columbia University In The City Of New York | Detection of anomalous program execution using hardware-based micro-architectural data |
| US10067813B2 (en) | 2014-11-21 | 2018-09-04 | Samsung Electronics Co., Ltd. | Method of analyzing a fault of an electronic system |
| US9612881B2 (en) | 2015-03-30 | 2017-04-04 | Nxp Usa, Inc. | Method, apparatus, and system for unambiguous parameter sampling in a heterogeneous multi-core or multi-threaded processor environment |
| US9916161B2 (en) | 2015-06-25 | 2018-03-13 | Intel Corporation | Instruction and logic for tracking fetch performance bottlenecks |
| JP6693308B2 (ja) * | 2016-07-05 | 2020-05-13 | 富士通株式会社 | 負荷推定プログラム、負荷推定方法及び負荷推定装置 |
| CN117271428A (zh) * | 2022-06-13 | 2023-12-22 | 中科寒武纪科技股份有限公司 | 分析流水线上时线性能的方法及设备 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5067069A (en) * | 1989-02-03 | 1991-11-19 | Digital Equipment Corporation | Control of multiple functional units with parallel operation in a microcoded execution unit |
| US5537541A (en) * | 1994-08-16 | 1996-07-16 | Digital Equipment Corporation | System independent interface for performance counters |
-
1997
- 1997-03-10 US US08/815,982 patent/US6112317A/en not_active Expired - Lifetime
-
1998
- 1998-03-03 EP EP98301534A patent/EP0864979A3/en not_active Withdrawn
- 1998-03-09 CA CA002231570A patent/CA2231570A1/en not_active Abandoned
- 1998-03-10 JP JP10058067A patent/JPH10254700A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011519100A (ja) * | 2008-04-28 | 2011-06-30 | イマジネイション テクノロジーズ リミテッド | パイプライン型アーキテクチャを有するデータプロセッサ内のトレースデータを与えるシステム |
| US9720695B2 (en) | 2008-04-28 | 2017-08-01 | Imagination Technologies Limited | System for providing trace data in a data processor having a pipelined architecture |
Also Published As
| Publication number | Publication date |
|---|---|
| US6112317A (en) | 2000-08-29 |
| EP0864979A3 (en) | 1999-12-01 |
| EP0864979A2 (en) | 1998-09-16 |
| CA2231570A1 (en) | 1998-09-10 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4785213B2 (ja) | コンピュータ性能データを分析する方法 | |
| US6112317A (en) | Processor performance counter for sampling the execution frequency of individual instructions | |
| US5797019A (en) | Method and system for performance monitoring time lengths of disabled interrupts in a processing system | |
| US6708296B1 (en) | Method and system for selecting and distinguishing an event sequence using an effective address in a processing system | |
| US5752062A (en) | Method and system for performance monitoring through monitoring an order of processor events during execution in a processing system | |
| US5751945A (en) | Method and system for performance monitoring stalls to identify pipeline bottlenecks and stalls in a processing system | |
| US5691920A (en) | Method and system for performance monitoring of dispatch unit efficiency in a processing system | |
| US7086035B1 (en) | Method and system for counting non-speculative events in a speculative processor | |
| US6446029B1 (en) | Method and system for providing temporal threshold support during performance monitoring of a pipelined processor | |
| JP4294778B2 (ja) | プロセッサパイプラインにより処理される相互作用の特性の統計値を推定する方法 | |
| US6189072B1 (en) | Performance monitoring of cache misses and instructions completed for instruction parallelism analysis | |
| JP4467094B2 (ja) | プロセッサパイプラインにおいて多数の潜在的に同時の命令をサンプリングする装置 | |
| US5938760A (en) | System and method for performance monitoring of instructions in a re-order buffer | |
| JP4467093B2 (ja) | プロセッサパイプラインにおいて命令をランダムにサンプリングする装置 | |
| US5615357A (en) | System and method for verifying processor performance | |
| US5949971A (en) | Method and system for performance monitoring through identification of frequency and length of time of execution of serialization instructions in a processing system | |
| US6539502B1 (en) | Method and apparatus for identifying instructions for performance monitoring in a microprocessor | |
| JPH11272518A (ja) | プロセッサパイプラインにより処理される命令の特性の統計値を推定する方法 | |
| JPH11272514A (ja) | プロセッサパイプラインにおいて命令オペランド又は結果の値をサンプリングする装置 | |
| BRPI0611318A2 (pt) | melhoramentos em arquitetura de monitoramento de desempenho para análise baseada em percurso crìtico | |
| US20070043531A1 (en) | Method and apparatus for precisely identifying effective addresses associated with hardware events | |
| JP2000003295A (ja) | 回路、方法及びプロセッサ | |
| US5881306A (en) | Instruction fetch bandwidth analysis | |
| US5729726A (en) | Method and system for performance monitoring efficiency of branch unit operation in a processing system | |
| US6415378B1 (en) | Method and system for tracking the progress of an instruction in an out-of-order processor |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041119 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060306 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060313 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060613 |
|
| A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20060613 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060724 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070416 |