diff options
| author | Mahmoud <[email protected]> | 2020-05-26 15:12:38 -0400 |
|---|---|---|
| committer | Mahmoud <[email protected]> | 2020-05-26 15:12:38 -0400 |
| commit | 7ebe47ac5d1f0255527a27a9bb7cd3c29fa9f6e3 (patch) | |
| tree | 487285b9b273b20cbb7d929b85148a57a1982d59 /src/trace-driven/trace_driven.cc | |
| parent | 000631e85a91caef9ef8e6aa11551265655cff39 (diff) | |
splitting the trace-diven from the gpgpu-sim
Diffstat (limited to 'src/trace-driven/trace_driven.cc')
| -rw-r--r-- | src/trace-driven/trace_driven.cc | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/src/trace-driven/trace_driven.cc b/src/trace-driven/trace_driven.cc index 44468b1..8fa63b4 100644 --- a/src/trace-driven/trace_driven.cc +++ b/src/trace-driven/trace_driven.cc @@ -173,7 +173,7 @@ void trace_parser::kernel_finalizer(trace_kernel_info_t* kernel_info) { delete kernel_info; } -const trace_warp_inst_t* trace_shd_warp_t::get_next_inst() { +const trace_warp_inst_t* trace_shd_warp_t::get_next_trace_inst() { if (trace_pc < warp_traces.size()) { return &warp_traces[trace_pc++]; } else @@ -188,7 +188,7 @@ void trace_shd_warp_t::clear() { // functional_done bool trace_shd_warp_t::trace_done() { return trace_pc == (warp_traces.size()); } -address_type trace_shd_warp_t::get_start_pc() { +address_type trace_shd_warp_t::get_start_trace_pc() { assert(warp_traces.size() > 0); return warp_traces[0].pc; } @@ -629,43 +629,46 @@ void trace_config::set_latency(unsigned category, unsigned& latency, } } -unsigned trace_shader_core_ctx::trace_sim_inc_thread(kernel_info_t& kernel) { - if (kernel.no_more_ctas_to_run()) { - return 0; // finished! - } - - if (kernel.more_threads_in_cta()) { - kernel.increment_thread_id(); - } +void trace_shader_core_ctx::init_warps(unsigned cta_id, unsigned start_thread, + unsigned end_thread, unsigned ctaid, + int cta_size, kernel_info_t& kernel) { + // call base class + shader_core_ctx::init_warps(cta_id, start_thread, end_thread, ctaid, cta_size, + kernel); - if (!kernel.more_threads_in_cta()) kernel.increment_cta_id(); + // then init traces + unsigned start_warp = start_thread / m_config->warp_size; + unsigned end_warp = end_thread / m_config->warp_size + + ((end_thread % m_config->warp_size) ? 1 : 0); - return 1; + init_traces(start_warp, end_warp, kernel); } void trace_shader_core_ctx::init_traces(unsigned start_warp, unsigned end_warp, kernel_info_t& kernel) { std::vector<std::vector<trace_warp_inst_t>*> threadblock_traces; for (unsigned i = start_warp; i < end_warp; ++i) { - m_trace_warp[i].clear(); - threadblock_traces.push_back(&(m_trace_warp[i].warp_traces)); + trace_shd_warp_t* m_trace_warp = static_cast<trace_shd_warp_t*>(m_warp[i]); + m_trace_warp->clear(); + threadblock_traces.push_back(&(m_trace_warp->warp_traces)); } trace_kernel_info_t& trace_kernel = static_cast<trace_kernel_info_t&>(kernel); trace_kernel.get_next_threadblock_traces(threadblock_traces); - // set pc + // set the pc from the traces and ignore the functional model for (unsigned i = start_warp; i < end_warp; ++i) { - m_warp[i].set_next_pc(m_trace_warp[i].get_start_pc()); + trace_shd_warp_t* m_trace_warp = static_cast<trace_shd_warp_t*>(m_warp[i]); + m_trace_warp->set_next_pc(m_trace_warp->get_start_trace_pc()); } } void trace_shader_core_ctx::checkExecutionStatusAndUpdate(warp_inst_t& inst, unsigned t, unsigned tid) { - if (inst.isatomic()) m_warp[inst.warp_id()].inc_n_atomic(); + if (inst.isatomic()) m_warp[inst.warp_id()]->inc_n_atomic(); if (inst.op == EXIT_OPS) { - m_warp[inst.warp_id()].set_completed(t); + m_warp[inst.warp_id()]->set_completed(t); } } @@ -683,9 +686,10 @@ void trace_shader_core_ctx::func_exec_inst(warp_inst_t& inst) { checkExecutionStatusAndUpdate(inst, t, tid); } } - if (m_trace_warp[inst.warp_id()].trace_done() && - m_warp[inst.warp_id()].functional_done()) { - m_warp[inst.warp_id()].ibuffer_flush(); + trace_shd_warp_t* m_trace_warp = + static_cast<trace_shd_warp_t*>(m_warp[inst.warp_id()]); + if (m_trace_warp->trace_done() && m_trace_warp->functional_done()) { + m_trace_warp->ibuffer_flush(); m_barriers.warp_exit(inst.warp_id()); } } |
