現在の位置
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 0003 ... ***ログ本体 [#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] -シミュレーション開始からの経過サイクル数を指定する -使用例:7サイクル目から開始 C= 7 -通常,ヘッダ行の次に現れる -Kanataの表示には反映されない ***C [#c83ec5a5] -前回ログ出力時からの経過サイクル数を指定 -使用例:1サイクルが経過 C 1 -次のC行が現れるまでのコマンドは全てこのタイムドメインに属する -大体毎サイクル何かしらコマンドが出力されるので、C 1ばかりになる ***L [#c83ec5a5] -特定の命令に関するコマンド出力の開始 -使用例: L 0 0 0 12003ffa0 r64 = ADDR(r30) -命令に関するコマンドを出力する前にこれが必要 --ファイル内に新しい命令が初めて現れた際に出力 -2列目はファイル内の一意のID --ファイル内で現れるたびに振られるシーケンシャルなID --基本的に他のコマンドは全てこのIDを使って命令を指定する -3列目は命令のID --シミュレータ内で命令に振られているID.任意のIDが使える -4列目はTID(スレッド識別子) -5列目は任意の命令の情報(命令アドレスやOpコード,レジスタ番号など)を表すテキスト.これはそのままKanata に表示される. ***S [#o7cab2d9] -ステージ開始 -使用例: S 0 F -2列目は命令のID -3列目はレーンのID -4列目はステージ名 --onikiri2側で新しいステージを勝手に追加しても大丈夫 ***E [#nec6ef26] -ステージ終了 -使用例: E 0 F -2列目は命令のID -3列目はレーンのID -4列目はステージ名 ***R [#ob57d622] -特定の命令に関するコマンド出力の終了 -使用例: R 4 4 0 -フラッシュの場合もリタイアの場合もRを出力する必要がある -2列目は命令のID -3列目はリタイアID --フラッシュされずにリタイアされた命令に対して一意となるID --onikiri2はフラッシュされる命令にも投機的にリタイアIDを振るため,リタイアIDは重複する場合がある -4列目はリタイア/フラッシュの識別 --0ならリタイア --1ならフラッシュ -5列目はコメント --任意の文字列を格納できる ***W [#o4369339] -任意の依存関係 --典型的にはウェイクアップ --タイプ番号の指定により,違う色で表示される -使用例: W 1 0 0 -2列目はコンシューマーのID -3列目はプロデューサーのID -4列目は依存関係のタイプ --0ならウェイクアップ --1以降は今のところ予約 -コンシューマーが生きている期間のみ使用可能 **出力例 [#h52fce89] 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ステージ開始 (文責:堀尾,改訂:塩谷)