summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahmoud <[email protected]>2019-12-25 16:25:21 -0500
committerMahmoud <[email protected]>2019-12-25 16:25:21 -0500
commitb9cff5a53d576f1b2b953b3ce41b281128708787 (patch)
tree1de68d56e712e615b568a7a344b08b71ef4dad4b
parent0dae88ce0e247acd12259fb57362d9600c05c18b (diff)
adding memcpy traces
-rw-r--r--src/trace-driven/gpgpusim_trace_driven_main.cc18
-rw-r--r--src/trace-driven/trace_driven.cc40
-rw-r--r--src/trace-driven/trace_driven.h2
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: