FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

サイクルベースシミュレータSniperについて調査する (SniperのトレースログをO3Pipeviewに変換してみる)

Sniperの実行結果をO3Pipeviewに変換するための試行

以下のようにして、LoopTracer::traceInstruction() に出力を追加してみた。コミットの時間だけが本物で、それ以外は全部適当。パイプラインも全部1サイクルずつ進むように適当に改変しているだけ

diff --git a/common/performance_model/instruction_tracers/loop_tracer.cc b/common/performance_model/instruction_tracers/loop_tracer.cc
index 1af719d..319ffd8 100644
--- a/common/performance_model/instruction_tracers/loop_tracer.cc
+++ b/common/performance_model/instruction_tracers/loop_tracer.cc
@@ -111,4 +111,18 @@ LoopTracer::traceInstruction(const DynamicMicroOp *uop, uop_times_t *times)
       if (m_iter_instr > 100)
          m_active = false;
    }
+
+   static FILE *o3_fp = NULL;
+   static int instr_idx = 0;
+   if (o3_fp == NULL) {
+     o3_fp = fopen("o3_trace.out", "w");
+   }
+   fprintf (o3_fp, "O3PipeView:fetch:%ld:0x%08lx:0:%d:%s\n", (cycle_issue+0)*500, (uint64_t)inst->getAddress(), ++instr_idx, inst->getDisassembly().c_str());
+   fprintf (o3_fp, "O3PipeView:decode:%ld\n",                (cycle_issue+1)*500);
+   fprintf (o3_fp, "O3PipeView:rename:%ld\n",                (cycle_issue+2)*500);
+   fprintf (o3_fp, "O3PipeView:dispatch:%ld\n",              (cycle_issue+3)*500);
+   fprintf (o3_fp, "O3PipeView:issue:%ld\n",                 (cycle_issue+4)*500);
+   fprintf (o3_fp, "O3PipeView:complete:%ld\n",              (cycle_issue+5)*500);
+   fprintf (o3_fp, "O3PipeView:retire:%ld:store:0\n",        (cycle_issue+6)*500);
+
 }

これにより以下のようなトレースファイルが出力された。

O3PipeView:fetch:136500:0x00001000:0:1:auipc       t0, pc + 0
O3PipeView:decode:137000
O3PipeView:rename:137500
O3PipeView:dispatch:138000
O3PipeView:issue:138500
O3PipeView:complete:139000
O3PipeView:retire:139500:store:0
O3PipeView:fetch:136500:0x00001004:0:2:addi        a1, t0, 32
O3PipeView:decode:137000
O3PipeView:rename:137500
O3PipeView:dispatch:138000
O3PipeView:issue:138500
O3PipeView:complete:139000
O3PipeView:retire:139500:store:0
O3PipeView:fetch:136500:0x00001008:0:3:csrrs       a0, mhartid, zero
O3PipeView:decode:137000
O3PipeView:rename:137500
O3PipeView:dispatch:138000
O3PipeView:issue:138500
O3PipeView:complete:139000
O3PipeView:retire:139500:store:0
O3PipeView:fetch:137000:0x0000100c:0:4:ld          t0, 24(t0)

Konataで表示してみると以下のようになった。一応表示することができているが、パイプラインの詳細を出力できていないので、もうちょっと改造する必要がありそう。