diff options
| author | Mahmoud <[email protected]> | 2019-12-25 16:25:21 -0500 |
|---|---|---|
| committer | Mahmoud <[email protected]> | 2019-12-25 16:25:21 -0500 |
| commit | b9cff5a53d576f1b2b953b3ce41b281128708787 (patch) | |
| tree | 1de68d56e712e615b568a7a344b08b71ef4dad4b /src/trace-driven | |
| parent | 0dae88ce0e247acd12259fb57362d9600c05c18b (diff) | |
adding memcpy traces
Diffstat (limited to 'src/trace-driven')
| -rw-r--r-- | src/trace-driven/gpgpusim_trace_driven_main.cc | 18 | ||||
| -rw-r--r-- | src/trace-driven/trace_driven.cc | 40 | ||||
| -rw-r--r-- | src/trace-driven/trace_driven.h | 2 |
3 files changed, 50 insertions, 10 deletions
diff --git a/src/trace-driven/gpgpusim_trace_driven_main.cc b/src/trace-driven/gpgpusim_trace_driven_main.cc index 2f5d04d..58239b8 100644 --- a/src/trace-driven/gpgpusim_trace_driven_main.cc +++ b/src/trace-driven/gpgpusim_trace_driven_main.cc @@ -49,12 +49,22 @@ int main ( int argc, const char **argv ) trace_parser tracer(m_gpgpu_sim->get_config().get_traces_filename(), m_gpgpu_sim, m_gpgpu_context); - std::vector<std::string> kernellist = tracer.parse_kernellist_file(); + std::vector<std::string> commandlist = tracer.parse_kernellist_file(); - for(unsigned i=0; i<kernellist.size(); ++i) { + for(unsigned i=0; i<commandlist.size(); ++i) { - trace_kernel_info_t* kernel_info = tracer.parse_kernel_info(kernellist[i]); - m_gpgpu_sim->launch(kernel_info); + trace_kernel_info_t* kernel_info; + if(commandlist[i].substr(0,6) == "Memcpy") { + + size_t addre, Bcount; + tracer.parse_memcpy_info(commandlist[i], addre, Bcount); + m_gpgpu_sim->perf_memcpy_to_gpu(addre, Bcount); + continue; + } + else if(commandlist[i].substr(0,6) == "kernel") { + kernel_info = tracer.parse_kernel_info(commandlist[i]); + m_gpgpu_sim->launch(kernel_info); + } bool active = false; bool sim_cycles = false; diff --git a/src/trace-driven/trace_driven.cc b/src/trace-driven/trace_driven.cc index 48ba0f6..fb8afdd 100644 --- a/src/trace-driven/trace_driven.cc +++ b/src/trace-driven/trace_driven.cc @@ -25,6 +25,23 @@ #include "pascal_opcode.h" #include "../gpgpusim_entrypoint.h" + +bool is_number(const std::string& s) +{ + std::string::const_iterator it = s.begin(); + while (it != s.end() && std::isdigit(*it)) ++it; + return !s.empty() && it == s.end(); +} + +void split(const std::string& str, std::vector<std::string>& cont, char delimi = ' ') +{ + std::stringstream ss(str); + std::string token; + while (std::getline(ss, token, delimi)) { + cont.push_back(token); + } +} + trace_parser::trace_parser(const char* kernellist_filepath, gpgpu_sim * m_gpgpu_sim, gpgpu_context* m_gpgpu_context) { @@ -55,14 +72,30 @@ std::vector<std::string> trace_parser::parse_kernellist_file() { getline(ifs, line); if(line.empty()) continue; + else if(line.substr(0,6) == "Memcpy") { + kernellist.push_back(line); + } + else if(line.substr(0,6) == "kernel") { filepath = directory+"/"+line; kernellist.push_back(filepath); + } } ifs.close(); return kernellist; } +void trace_parser::parse_memcpy_info(const std::string& memcpy_command, size_t& address, size_t& count) { + std::vector<std::string> params; + split(memcpy_command, params, ','); + assert(params.size() == 3); + std::stringstream ss; + ss.str(params[1]); + ss>>std::hex>>address; + ss.clear(); + ss.str(params[2]); + ss>>std::dec>>count; +} trace_kernel_info_t* trace_parser::parse_kernel_info(const std::string& kerneltraces_filepath) { @@ -266,12 +299,7 @@ bool trace_warp_inst_t::check_opcode_contain(const std::vector<std::string>& opc return false; } -bool is_number(const std::string& s) -{ - std::string::const_iterator it = s.begin(); - while (it != s.end() && std::isdigit(*it)) ++it; - return !s.empty() && it == s.end(); -} + unsigned trace_warp_inst_t::get_datawidth_from_opcode(const std::vector<std::string>& opcode) { diff --git a/src/trace-driven/trace_driven.h b/src/trace-driven/trace_driven.h index 8917502..33f4baf 100644 --- a/src/trace-driven/trace_driven.h +++ b/src/trace-driven/trace_driven.h @@ -77,6 +77,8 @@ public: std::vector<std::string> parse_kernellist_file(); trace_kernel_info_t* parse_kernel_info(const std::string& kerneltraces_filepath); + void parse_memcpy_info(const std::string& memcpy_command, size_t& add, size_t& count); + void kernel_finalizer(trace_kernel_info_t* kernel_info); private: |
