• 検索結果がありません。

第 9 章 Itanium ® 2 プロセッサ向けの最適化

10.2 パフォーマンス・モニタのプログラミング・モデル

10.3.4 オペコード・マッチ・チェック (PMC8,9,15)

Itanium 2プロセッサは、命令アドレスや命令のItaniumアーキテクチャ・エンコーディング(オペ コード)に基づいて、監視対象となるイベントを制限できる。これらの機能を有効にするには、レ ジスタPMC15およびPMC14 (10.3.5項「命令アドレス範囲マッチング」を参照)を使用する。レジ スタPMC8,9を使用すると、これらの機能を設定できる。メモリ関連のイベントの場合、この機能 を有効にするには、該当するビットをPMC13に設定する必要がある。詳細は、10.3.6項「デー タ・アドレス範囲マッチング(PMC13)」を参照のこと。Itaniumプロセッサの場合と異なり、

Itanium 2プロセッサのオペコード・マッチャーは、Itaniumアーキテクチャ・ベースのコード実行

中およびIA32のコード実行中の両方で動作する。IA32モードで動作中、このオペコード・マッ チャーは、Itaniumアーキテクチャ・オペコードがないかどうかをチェックする。

図 10-13. Itanium® 2 プロセッサのパフォーマンス・モニタ・オーバーフロー・ステータス・レジスタ (PMC0,1,2,3)

63 8 7 6 5 4 3 2 1 0

予約済み(PMC0) オーバー

フロー

予約済み fr

4 3 1

予約済み(PMC1) 予約済み(PMC2) 予約済み(PMC3)

表 10-8. Itanium® 2 プロセッサのパフォーマンス・モニタ・オーバーフロー・レジスタのフィールド (PMC0,1,2,3)

レジスタ フィールド ビット 説明

PMC0 fr 0 パフォーマンス・モニタ「フリーズ」ビット - 1の場合、イベント監視 機能は無効になる。0の場合、イベント監視機能は有効になる。パ フォーマンス・モニタに対応するオーバーフロー割り込みビット (PMC.oi)1にセットされている場合、そのモニタのオーバーフローが 発生すると、このビットがハードウェアによってセットされる。この ビットをクリアする役割は、ソフトウェアが受け持つ。PMC.oiビット がセットされていない場合は、カウンタ・オーバーフローが発生しても このビットはセットされない。

PMC0 無視 3:1 0として読み出され、書き込みは無視される。

PMC0 オーバー

フロー

7:4 イベント・カウンタ・オーバーフロー - ビットn1の場合は、PMDn がオーバーフローしたことを示す。これは、どのパフォーマンス・モニ タがオーバーフローしたかを示すビット・ベクトルである。これらの オーバーフロー・ビットは、PMC.oiビットの状態に関係なく、その ビットに対応するカウンタがオーバーフローしたときにセットされる。

これらのビットは、ソフトウェアによってもセットできる。これらの ビットはスティッキー・ビットであり、複数のビットをセットできる。

PMC0 無視 63:8 0として読み出され、書き込みは無視される。

PMC1,2,3 無視 63:0 0として読み出され、書き込みは無視される。

図10-14および表10-9に、PMC8,9レジスタのフィールドを示す。図10-15および表10-10に、レ ジスタPMC15を示す。ビット[63:60]のすべての組み合わせがサポートされている。Aスロット命 令に一致するためには、ビット[63:62]に11を設定する。すべての命令タイプに一致するために は、ビット[63:60]に1111を設定する必要がある。オペコード・マッチャーに関係なく、すべての イベントがカウントされるようにするには、PMC8,9のすべてのmifbビットとすべてのマスク・

ビットに1をセットする(すべてのオペコードが一致する)必要がある。

PMC9は、イベントIA64_TAGGED_INST_RETIREDのみを制限する。

IA64_TAGGED_INST_RETIREDイベントに対するItanium 2プロセッサのオペコード制限により、

PMC9の結果とIBRP1マッチおよびIBRP3マッチのAND演算、PMC8の結果とIBR0マッチおよ びIBRP2マッチのAND演算が行われる。ただし、PMC8は、その他のダウンストリーム・イベン トも制限する。オペコード・マッチャーに関係なく、すべてのイベントがカウントされるように するには、ビット[63:60]とビット[29:3]にすべて1をセットする必要がある。

図 10-14. オペコード・マッチ・レジスタ(PMC8,9)

63 62 61 60 59 32 31 30 29 3 2 1 0

m i f b マッチ 予約

済み

マスク inv ig_

ad

1 1 1 1 28 2 28 1 1

表 10-9. オペコード・マッチ・レジスタのフィールド(PMC8,9)

フィールド ビット 説明

ig_ad 0 1 命令アドレス範囲チェックを無視する。1をセットすると、命令アドレ

スのすべてがイベント用に考慮される。0にすると、IBR 0-1がアドレス 制限用に使用される。

: PMC9では、このビットは無視される。

inv 1 1 範囲チェックを反転する。1をセットすると、IBR0-1によって指定され たアドレス範囲が反転する。これは、ig_adビットを0にした場合にの み有効である。

: PMC9では、このビットは無視される。

マスク 29:2 28 Itanium命令エンコーディング・ビットをマスクするビット

[2]は、1にセットする必要がある。

[15:3]は、オペコード・ビット[12:0]のビットをマスクする。

[29:16]は、オペコード・ビット[40:27]のビットをマスクする。

マスク・ビットに1をセットした場合、オペコード・マッチでは、対応 するオペコード・ビットは使用されない。

マッチ 59:33 27 Itanium命令エンコーディングが一致されるオペコード・ビット

[45:33]は、オペコード・ビット[12:0]のビットに一致する。

[59:46]は、オペコード・ビット[40:27]のビットに一致する。

b 60 1 1の場合は、オペコードがBスロットの場合に一致する。

f 61 1 1の場合は、オペコードがFスロットの場合に一致する。

i 62 1 1の場合は、オペコードがIスロットの場合に一致する。

m 63 1 1の場合は、オペコードがMスロットの場合に一致する。

図 10-15. オペコード・マッチ設定レジスタ(PMC15)

63 4 3 2 1 0

予約済み ibrp3

pmc9 ibrp2 pmc8

ibrp1 pmc9

ibrp0 pmc8

1 1 1 1

オペコード・マッチの目的で、Itanium命令は、命令タイプ"itype" (M、I、F、またはBのうちの 一つ)と41ビットエンコーディングの2つの項目によって定義される(『インテル® Itanium®アー キテクチャ・ソフトウェア・デベロッパーズ・マニュアル』を参照)。各命令が、各オペコード・

マッチ・レジスタ(PMC8,9)に対して、次のように評価される。

Match(PMCi) = (imatch(itype, PMCi.mifb) AND ematch(enco,PMCi.match,PMCi.mask))

各項目は次のとおりである。

imatch(itype,PMC[i].mifb) = (itype=M AND PMC[i].m) OR (itype=I AND PMC[i].i) OR (itype=F AND PMC[i].f) OR (itype=B AND PMC[i].b)

ematch(enco,match,mask) = AND b=40..27 ((enco{b}=match{b-14}) OR mask{b-14}) AND b=12..0 ((enco{b}=match{b}) OR mask{b})

この関数は、エンコーディング・ビット{40:27} (メジャー・オペコード)とエンコーディング・

ビット{12:0} (デスティネーション・プレディケートおよび修飾プレディケート)にのみ一致す

る。オペコード・マッチャーは、命令エンコーディングのビット{26:13}を無視する。

IBRPマッチは、オペコードが配布される点を指す命令ポインタを使用して進められる。オペコー ド・マッチャーからのマッチは、この時点でのIBRPマッチを使用して、AND演算される。

この処理で、2つのオペコード・マッチ・イベントが得られる。これらの結果は、次のように命令 範囲チェック・タグ(IBRRangeTag)と組み合わされる(IBRRangeTagについては、10.3.5項「命令 アドレス範囲マッチング」を参照)。

Tag(PMC8) = Match(PMC8) and IBRRangeTag Tag(PMC9) = Match(PMC9) and IBRRangeTag

図10-5に示したように、Tag(PMC8)とTag(PMC9)の2つのタグは、命令がリタイアされるまで、

プロセッサのパイプライン内の下位の段に渡されていく。これらのタグは、リタイア命令カウン ト・イベントとして選択できる(リタイア命令カウント・イベントについては、11-147ページの

「IA64_TAGGED_INST_RETIRED」のイベントの説明を参照のこと)。この方法で、パフォーマン ス・カウンタ(PMC/PMD4,5,6,7)を使用して、指定したオペコードに一致する、設定されたアドレ ス範囲内のリタイアした命令数をカウントできる。

別のパイプラインに配布されるオペコードは、PMC8と比較される。オペコード・マッチは、多数 のユーザ設定可能ビット(本書のPMC15の定義を参照)でさらに制限され、IBRP0マッチとAND 演算された後、別の場所に配布される。

注: レジスタPMC15には、事前設定値である0xfffffff0が含まれていなければならない。表10-10に示 されていないビットをソフトウェアで変更した場合、プロセッサの動作は未定義である。

表 10-10. オペコード・マッチ設定レジスタのフィールド(PMC15)

フィールド ビット 説明

ibrp0-pmc8 0 1: PMUイベントは、オペコードによって制限されない。

0: PMUイベント(IA64_TAGGED_INST_RETIRED.00を含む)は、

PMC8によって制限されるオペコードになる。

ibrp1-pmc9 1 1: IA64_TAGGED_INST_RETIRED.01は、オペコードによって制限さ れない。

0: IA64_TAGGED_INST_RETIRED.01は、PMC9によって制限される オペコードになる。

ibrp2-pmc8 2 1: IA64_TAGGED_INST_RETIRED.10は、オペコードによって制限さ れない。

0: IA64_TAGGED_INST_RETIRED.10は、PMC8によって制限される オペコードになる。

ibrp3-pmc9 3 1: IA64_TAGGED_INST_RETIRED.11は、オペコードによって制限さ れない。

0: IA64_TAGGED_INST_RETIRED.11は、PMC9によって制限される オペコードになる。