現在の位置
backup プラグインを使用中
- バックアップ一覧
- 差分 を表示
- ソース を表示
- バックアップ を表示
- 仕様/ビジュアライザ/ログのフォーマット へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
*はじめに [#z877be99] **Kanata とは [#j33751b6] プロセッサのパイプラインの状態を可視化するツール.鬼斬のトップページにあるスクリーンショットのようなパイプラインチャートを見ることができる. **処理の流れ [#c5e0f135] -鬼斬側 --1. VizualizationDumper がログを出力(.log/.log.gz) -Kanata側 --2. KanataPP が .log ファイルを .kanata ファイルに変換 --3. Kanata が .kanata ファイルを解釈して表示 Kanata は .log ファイルを渡されると KanataPP を自動的に呼び出すため,通常は2. を意識することはない. **関係箇所 [#r369df22] -鬼斬側でログを出力しているのは VizualizationDumper -KanataPP の LogConverter.cs の中でログを .kanata に変換 *ログのフォーマット [#p6a01e00] **概要 [#ca39852e] -ログはテキスト形式であり,1行ごとにコマンドとその引数がタブ区切りで並んだ形式をとる -各サイクルごとに,プロセッサ内で起きたイベント(フェッチとかリネームとかディスパッチとか)を出力する -ログファイル内の時間は先頭から末尾に向けて一方向に進む --一度未来のデータを出力してしまった場合,過去に起きたイベントを追加することはできない **ファイルフォーマット [#j95c2b41] ***ヘッダ [#m1a7169f] ファイルの先頭行は Kanata ファイルであることを表すヘッダと,ファイルのバージョンを格納する.現在のファイルのバージョンは3であり,たとえば以下の様になる ファイルの先頭行は Kanata ファイルであることを表すヘッダと,ファイルのバージョンを格納する.現在のファイルのバージョンは4であり,たとえば以下の様になる Kanata 0003 Kanata 0004 ... ***ログ本体 [#tc450136] ヘッダ以降はログの本体であり,1行ごとに1命令の動作を表すコマンドを格納する. 各行の基本フォーマットはおおよそ以下のようになる. -各行は,文字列をタブで区切った複数の列からなる -1列目はコマンド -2列目以降は可変個のパラメータであり,コマンドに従って解釈される 典型的には以下のようになる commandA param0 param1 ... commandB param0 ... 多くの場合,第1パラメータ(param0)は命令のIDである **その他 [#u2a412ba] ***命令の指定 [#v0130fc2] 各コマンドはファイル内で一意のIDを指定して,コマンドの対象を指定する.このIDは後述するLコマンドの第二引数で指定されるものである. ***レーン [#daf98d2a] 各命令は複数のパイプラインの進行状態を持つ事ができ,それらをオーバーレイして表示できる.たとえば,通常のパイプラインの進行の上にストール状態をオーバーレイすることができる. この時のレイヤーをレーンと呼び,SやEコマンドの第二引数で指定する.デフォルトでは,レーン0は通常のパイプライン,レーン1はストールを出力するようになっている. **コマンドのリファレンス [#sa4c821b] ***C= [#m5b43836] *コマンドのリファレンス [#sa4c821b] **C= [#m5b43836] -シミュレーション開始からの経過サイクル数を指定する -使用例:7サイクル目から開始 ***フォーマット: [#r641cd0d] C= <Cycle> --Cycle はシミュレーション開始からログ開始時点までの経過サイクル数. ***使用例:7サイクル目から開始 [#h3592c54] C= 7 -通常,ヘッダ行の次に現れる -Kanataの表示には反映されない ***備考: [#o9dde57c] --通常,ヘッダ行の次に現れる --Kanataの表示には反映されない ***C [#c83ec5a5] **C [#c83ec5a5] -前回ログ出力時からの経過サイクル数を指定 -使用例:1サイクルが経過 ***フォーマット: [#o649e567] C <Cycle> -Cycle: 経過サイクル数 ***使用例:1サイクルが経過 [#k4c6368b] C 1 -次のC行が現れるまでのコマンドは全てこのタイムドメインに属する -大体毎サイクル何かしらコマンドが出力されるので、C 1ばかりになる ***備考: [#m53a349d] --次のC行が現れるまでのコマンドは全てこのタイムドメインに属する --大体毎サイクル何かしらコマンドが出力されるので、C 1ばかりになる ***L [#c83ec5a5] **I [#c83ec5a5] -特定の命令に関するコマンド出力の開始 -使用例: L 0 0 0 12003ffa0 r64 = ADDR(r30) I 0 0 0 -命令に関するコマンドを出力する前にこれが必要 --ファイル内に新しい命令が初めて現れた際に出力 -2列目はファイル内の一意のID --ファイル内で現れるたびに振られるシーケンシャルなID --基本的に他のコマンドは全てこのIDを使って命令を指定する -3列目は命令のID --シミュレータ内で命令に振られているID.任意のIDが使える -4列目はTID(スレッド識別子) -5列目は任意の命令の情報(命令アドレスやOpコード,レジスタ番号など)を表すテキスト.これはそのままKanata に表示される. ***S [#o7cab2d9] -ステージ開始 -使用例: S 0 F **L [#u8873c04] -命令に任意のラベルをつける --命令が生きている期間は任意のラベルをつけることができる --Lが複数回実行された場合,前回までに設定したラベルに追記される ***フォーマット: [#nc3059e2] L <ID> <Type> <Label Data> +ID --ファイル内の一意のID +Type --ラベルのタイプ ---0: ビジュアライザ左に直接表示されるラベル.通常はPCと命令,レジスタ番号など ---1: マウスオーバー時に表示される詳細.実行時のレジスタの値や使用した演算器など +Label Data --任意のテキスト ***使用例: [#t465d82d] L 0 0 120047734: r1 = iALU( r16 ) **S [#o7cab2d9] ステージ開始 ***フォーマット [#s33dedde] S <ID> <Lane> <Stage Name> -2列目は命令のID -3列目はレーンのID -4列目はステージ名 --onikiri2側で新しいステージを勝手に追加しても大丈夫 ***E [#nec6ef26] -ステージ終了 -使用例: E 0 F ***使用例: [#r3720fdc] S 0 F **E [#nec6ef26] ステージ終了 ***フォーマット [#rf865a5d] E <ID> <Lane> <Stage Name> -2列目は命令のID -3列目はレーンのID -4列目はステージ名 ***R [#ob57d622] -特定の命令に関するコマンド出力の終了 -使用例: R 4 4 0 ***使用例: [#h8d4b586] E 0 F **R [#ob57d622] 特定の命令に関するコマンド出力の終了 ***フォーマット [#y011bace] R <ID> <Retire ID> <Type> -フラッシュの場合もリタイアの場合もRを出力する必要がある -2列目は命令のID -3列目はリタイアID --フラッシュされずにリタイアされた命令に対して一意となるID --onikiri2はフラッシュされる命令にも投機的にリタイアIDを振るため,リタイアIDは重複する場合がある -4列目はリタイア/フラッシュの識別 --0ならリタイア --1ならフラッシュ -5列目はコメント --任意の文字列を格納できる ***W [#o4369339] ***使用例: [#h45ac5fb] R 4 4 0 **W [#o4369339] -任意の依存関係 --典型的にはウェイクアップ --タイプ番号の指定により,違う色で表示される -使用例: W 1 0 0 ***フォーマット [#f718c6ac] W <Consumer ID> <Producer ID> <Type> -2列目はコンシューマーのID -3列目はプロデューサーのID -4列目は依存関係のタイプ --0ならウェイクアップ --1以降は今のところ予約 -コンシューマーが生きている期間のみ使用可能 **出力例 [#h52fce89] ***使用例: [#k2e028ed] W 1 0 0 Kanata 0003 // 0003 バージョンのファイル *出力例 [#h52fce89] Kanata 0004 // 0004 バージョンのファイル C= 216 // 216 サイクル目から開始 L 0 0 0 12000d918 r4 = iALU(r3, r2) // 命令0の開始 I 0 0 0 // 命令0の開始 L 0 0 12000d918 r4 = iALU(r3, r2) // 命令0にラベル付け S 0 0 F // 命令0のFステージを開始 L 1 1 0 12000d91c iBC(r17) // 命令1の開始 I 1 1 0 // 命令1の開始 L 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ステージ開始 (文責:堀尾,改訂:塩谷)