前回の続き:
- トレースの解析と変換の決定
ChampSimのトレースフォーマット
- 各命令が64バイトを占有する固定フォーマット
- 命令ポインタ(8B) / is_branch(1B) / branch_taken (1B) / 書き込みレジスタ (2×1B) / ソースレジスタ (4×1B) / メモリの書き込みアドレス (2×8B) / メモリの読み込みアドレス (4×8B)
- 分岐命令の判定
- is_branchをチェックする
- 分岐のタイプは,読み込み・書き込みレジスタのアドレスをチェックする
- 例:スタックポインタと命令ポインタの両方を読み書きする場合はダイレクトコール命令
- ロード・ストアの判定
- メモリの読み込みアドレス・書き込みアドレス
- それ以外
- 算術演算命令
| 命令タイプ | 向上名 | コンバータの変換ポイント |
|---|---|---|
| メモリ | mem-regs | メモリ命令によって書き込まれたレジスタと、そこから読み込む命令間の依存関係をすべて伝える。 |
| base-update | メモリアクセスレイテンシではなく、ALU命令のレイテンシ後にベースレジスタを利用可能にする。 | |
| mem-footprint | 命令によってアクセスされたすべてのキャッシュラインにアクセスする。 | |
| 分岐 | call-stack | リターン値の識別を修正する。 |
| branch-regs | 分岐命令によって読み取られるレジスタと、その命令を生成する命令間のすべての依存関係を伝える。 | |
| flag-reg | フラグレジスタを、フラグから分岐する命令のデスティネーションレジスタとして追加する。これにより、フラグから分岐する命令はフラグに依存するようになる。 |
- 3.1. メモリ命令
- AArch64 ISAの複数のアドレッシング・モード
- LDR X1,[X0,#12]!
- X0を加算し,その結果をアドレスとして8バイトをX1にロードする
- LDP X1,X0,[X0]
- X0とX0+8の各8バイトをロードし,X0とX1に格納する
- しかし,CVP-1のトレースはアドレッシングモードを含んでいない
- 書き込みレジスタ = LDR/LDPともにX0/X1
- メモリアドレス = LDR/LDPともにX0
- 近似されていること:
- 命令が2つの書き込みレジスタを書き込む場合,1つの書き込みレジスタしか含まない
- メモリ・ロード・レジスタのベース・レジスタの区別をされていない
- 単一のアドレスがメモリ・ソースとして使用されている