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