summaryrefslogtreecommitdiff
path: root/src/trace-driven/trace_driven.h
diff options
context:
space:
mode:
authorMahmoud <[email protected]>2020-05-27 18:52:01 -0400
committerMahmoud <[email protected]>2020-05-27 18:52:01 -0400
commitede0540e798bac59f65111c8d48661f042412aa8 (patch)
treeb3a096b17ba60881f92831de6038bf66b161589e /src/trace-driven/trace_driven.h
parent7ebe47ac5d1f0255527a27a9bb7cd3c29fa9f6e3 (diff)
splitting trace-driven from gpgpu-sim - part 2
Diffstat (limited to 'src/trace-driven/trace_driven.h')
-rw-r--r--src/trace-driven/trace_driven.h59
1 files changed, 55 insertions, 4 deletions
diff --git a/src/trace-driven/trace_driven.h b/src/trace-driven/trace_driven.h
index a35cd83..ea315a1 100644
--- a/src/trace-driven/trace_driven.h
+++ b/src/trace-driven/trace_driven.h
@@ -36,6 +36,7 @@ class trace_warp_inst_t : public warp_inst_t {
m_gpgpu_context = NULL;
m_opcode = 0;
m_tconfig = NULL;
+ should_do_atomic = false;
}
trace_warp_inst_t(const class core_config* config,
@@ -44,6 +45,7 @@ class trace_warp_inst_t : public warp_inst_t {
m_gpgpu_context = gpgpu_context;
m_opcode = 0;
m_tconfig = tconfig;
+ should_do_atomic = false;
}
bool parse_from_string(
@@ -80,16 +82,24 @@ class trace_kernel_info_t : public kernel_info_t {
class trace_config {
public:
- trace_config(gpgpu_sim* m_gpgpu_sim);
+ trace_config();
void set_latency(unsigned category, unsigned& latency,
unsigned& initiation_interval);
void parse_config();
+ void reg_options(option_parser_t opp);
+ char* get_traces_filename() { return g_traces_filename; }
private:
unsigned int_latency, fp_latency, dp_latency, sfu_latency, tensor_latency;
unsigned int_init, fp_init, dp_init, sfu_init, tensor_init;
- gpgpu_sim* m_gpgpu_sim;
+
+ char* g_traces_filename;
+ char* trace_opcode_latency_initiation_int;
+ char* trace_opcode_latency_initiation_sp;
+ char* trace_opcode_latency_initiation_dp;
+ char* trace_opcode_latency_initiation_sfu;
+ char* trace_opcode_latency_initiation_tensor;
};
class trace_parser {
@@ -130,6 +140,30 @@ class trace_shd_warp_t : public shd_warp_t {
unsigned trace_pc;
};
+class trace_gpgpu_sim : public gpgpu_sim {
+ public:
+ trace_gpgpu_sim(const gpgpu_sim_config& config, gpgpu_context* ctx)
+ : gpgpu_sim(config, ctx) {
+ createSIMTCluster();
+ }
+
+ virtual void createSIMTCluster();
+};
+
+class trace_simt_core_cluster : public simt_core_cluster {
+ public:
+ trace_simt_core_cluster(class gpgpu_sim* gpu, unsigned cluster_id,
+ const shader_core_config* config,
+ const memory_config* mem_config,
+ class shader_core_stats* stats,
+ class memory_stats_t* mstats)
+ : simt_core_cluster(gpu, cluster_id, config, mem_config, stats, mstats) {
+ create_shader_core_ctx();
+ }
+
+ virtual void create_shader_core_ctx();
+};
+
class trace_shader_core_ctx : public shader_core_ctx {
public:
trace_shader_core_ctx(class gpgpu_sim* gpu, class simt_core_cluster* cluster,
@@ -138,7 +172,12 @@ class trace_shader_core_ctx : public shader_core_ctx {
const memory_config* mem_config,
shader_core_stats* stats)
: shader_core_ctx(gpu, cluster, shader_id, tpc_id, config, mem_config,
- stats) {}
+ stats) {
+ create_front_pipeline();
+ create_shd_warp();
+ create_schedulers();
+ create_exec_pipeline();
+ }
virtual void checkExecutionStatusAndUpdate(warp_inst_t& inst, unsigned t,
unsigned tid);
@@ -146,7 +185,19 @@ class trace_shader_core_ctx : public shader_core_ctx {
unsigned end_thread, unsigned ctaid, int cta_size,
kernel_info_t& kernel);
virtual void func_exec_inst(warp_inst_t& inst);
- friend class shader_core_ctx;
+ virtual unsigned sim_init_thread(kernel_info_t& kernel,
+ ptx_thread_info** thread_info, int sid,
+ unsigned tid, unsigned threads_left,
+ unsigned num_threads, core_t* core,
+ unsigned hw_cta_id, unsigned hw_warp_id,
+ gpgpu_t* gpu);
+ virtual void create_shd_warp();
+ virtual const warp_inst_t* get_next_inst(unsigned warp_id, address_type pc);
+ virtual void updateSIMTStack(unsigned warpId, warp_inst_t* inst);
+ virtual void get_pdom_stack_top_info(unsigned warp_id, const warp_inst_t* pI,
+ unsigned* pc, unsigned* rpc);
+ virtual const active_mask_t& get_active_mask(unsigned warp_id,
+ const warp_inst_t* pI);
private:
void init_traces(unsigned start_warp, unsigned end_warp,