現在の位置
backup プラグインを使用中
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 仕様/ビジュアライザ/ログのフォーマット へ行く。
はじめに †
Kanata とは †
プロセッサのパイプラインの状態を可視化するツール.鬼斬のトップページにあるスクリーンショットのようなパイプラインチャートを見ることができる.
処理の流れ †
- 鬼斬側
- Kanata側
- 2. KanataPP が .log ファイルを .kanata ファイルに変換
- 3. Kanata が .kanata ファイルを解釈して表示
Kanata は .log ファイルを渡されると KanataPP を自動的に呼び出すため,通常は2. を意識することはない.
関係箇所 †
ログのフォーマット †
概要 †
- ログはテキスト形式であり,1行ごとにコマンドとその引数がタブ区切りで並んだ形式をとる
- 各サイクルごとに,プロセッサ内で起きたイベント(フェッチとかリネームとかディスパッチとか)を出力する
- ログファイル内の時間は先頭から末尾に向けて一方向に進む
- 一度未来のデータを出力してしまった場合,過去に起きたイベントを追加することはできない
ファイルフォーマット †
ヘッダ †
ファイルの先頭行は Kanata ファイルであることを表すヘッダと,ファイルのバージョンを格納する.現在のファイルのバージョンは3であり,たとえば以下の様になる
Kanata 0003 ...
ログ本体 †
ヘッダ以降はログの本体であり,1行ごとに1命令の動作を表すコマンドを格納する. 各行の基本フォーマットはおおよそ以下のようになる.
- 各行は,文字列をタブで区切った複数の列からなる
- 1列目はコマンド
- 2列目以降は可変個のパラメータであり,コマンドに従って解釈される
典型的には以下のようになる
commandA param0 param1 ... commandB param0 ...
多くの場合,第1パラメータ(param0)は命令のIDである
その他 †
命令の指定 †
各コマンドはファイル内で一意のIDを指定して,コマンドの対象を指定する.このIDは後述するLコマンドの第二引数で指定されるものである.
レーン †
各命令は複数のパイプラインの進行状態を持つ事ができ,それらをオーバーレイして表示できる.たとえば,通常のパイプラインの進行の上にストール状態をオーバーレイすることができる.
この時のレイヤーをレーンと呼び,SやEコマンドの第二引数で指定する.デフォルトでは,レーン0は通常のパイプライン,レーン1はストールを出力するようになっている.
コマンドのリファレンス †
C= †
- シミュレーション開始からの経過サイクル数を指定する
- 使用例:7サイクル目から開始
C= 7
- 通常,ヘッダ行の次に現れる
- Kanataの表示には反映されない
C †
- 前回ログ出力時からの経過サイクル数を指定
- 使用例:1サイクルが経過
C 1
- 次のC行が現れるまでのコマンドは全てこのタイムドメインに属する
- 大体毎サイクル何かしらコマンドが出力されるので、C 1ばかりになる
L †
- 特定の命令に関するコマンド出力の開始
- 使用例:
L 0 0 0 12003ffa0 r64 = ADDR(r30)
- 命令に関するコマンドを出力する前にこれが必要
- ファイル内に新しい命令が初めて現れた際に出力
- 2列目はファイル内の一意のID
- ファイル内で現れるたびに振られるシーケンシャルなID
- 基本的に他のコマンドは全てこのIDを使って命令を指定する
- 3列目は命令のID
- シミュレータ内で命令に振られているID.任意のIDが使える
- 4列目はTID(スレッド識別子)
- 5列目は任意の命令の情報(命令アドレスやOpコード,レジスタ番号など)を表すテキスト.これはそのままKanata に表示される.
S †
- ステージ開始
- 使用例:
S 0 F
- 2列目は命令のID
- 3列目はレーンのID
- 4列目はステージ名
- onikiri2側で新しいステージを勝手に追加しても大丈夫
E †
- ステージ終了
- 使用例:
E 0 F
- 2列目は命令のID
- 3列目はレーンのID
- 4列目はステージ名
R †
- 特定の命令に関するコマンド出力の終了
- 使用例:
R 4 4 0
- フラッシュの場合もリタイアの場合もRを出力する必要がある
- 2列目は命令のID
- 3列目はリタイアID
- フラッシュされずにリタイアされた命令に対して一意となるID
- onikiri2はフラッシュされる命令にも投機的にリタイアIDを振るため,リタイアIDは重複する場合がある
- 4列目はリタイア/フラッシュの識別
- 0ならリタイア
- 1ならフラッシュ
- 5列目はコメント
- 任意の文字列を格納できる
W †
- 任意の依存関係
- 典型的にはウェイクアップ
- タイプ番号の指定により,違う色で表示される
- 使用例:
W 1 0 0
- 2列目はコンシューマーのID
- 3列目はプロデューサーのID
- 4列目は依存関係のタイプ
- 0ならウェイクアップ
- 1以降は今のところ予約
- コンシューマーが生きている期間のみ使用可能
出力例 †
Kanata 0003 // 0003 バージョンのファイル C= 216 // 216 サイクル目から開始 L 0 0 0 12000d918 r4 = iALU(r3, r2) // 命令0の開始 S 0 0 F // 命令0のFステージを開始 L 1 1 0 12000d91c iBC(r17) // 命令1の開始 S 1 0 F // 命令1のFステージを開始 C 1 // 1サイクル経過 E 0 0 F // 命令0のFステージ終了 S 0 0 Rn // 命令0のRnステージ開始 E 1 0 F // 命令1のFステージ終了 S 1 0 Rn // 命令1のFステージ開始
(文責:堀尾,改訂:塩谷)