summaryrefslogtreecommitdiff
path: root/src/cuda-sim/cuda-sim.cc
diff options
context:
space:
mode:
authorJonathan <[email protected]>2018-06-26 13:20:39 -0700
committerJonathan <[email protected]>2018-06-26 13:20:39 -0700
commit584ebaa74a838680e6ed1fa13ac266e88c30c071 (patch)
tree59523a4db9b6b4923611777928818d0bfc8b0ffc /src/cuda-sim/cuda-sim.cc
parent978730086509050df16b77b9fbb4cc3ef19f3f6a (diff)
exports and imports param data in new debug tool: WatchYourStep
Diffstat (limited to 'src/cuda-sim/cuda-sim.cc')
-rw-r--r--src/cuda-sim/cuda-sim.cc102
1 files changed, 27 insertions, 75 deletions
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index 6a36fcf..bdb1e8d 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -1226,85 +1226,37 @@ void function_info::list_param( FILE *fout ) const
fflush(fout);
}
-void function_info::debug_param( ) const
+void function_info::debug_param() const
{
- char filename[] = "params.txt";
- char buff[1024];
- snprintf(buff,1024,"c++filt %s > %s", get_name().c_str(), filename);
- system(buff);
- FILE *fp = fopen(filename, "r");
- fgets(buff, 1024, fp);
- fclose(fp);
+ static unsigned long counter = 0;
+ std::string gpgpusim_path(getenv("GPGPUSIM_ROOT"));
+ assert(!gpgpusim_path.empty());
+ std::string command = "mkdir " + gpgpusim_path + "/debug_tools/WatchYourStep/data";
+ system(command.c_str());
- std::string fn(buff);
- size_t pos1, pos2;
- pos1 = fn.find("(");
- pos2 = fn.find(")");
- assert(pos2>pos1&&pos1>0);
- strcpy(buff, fn.substr(pos1 + 1, pos2 - pos1 - 1).c_str());
- printf("params: %s\n", buff);
- char *tok;
- std::vector<std::string> params;
- tok = strtok(buff, ",");
- while(tok!=NULL){
- std::string param(tok);
- param.erase(0, param.find_first_not_of(" "));
- param.erase(param.find_last_not_of(" ")+1);
- params.push_back(param);
- tok = strtok(NULL, ",");
- }
- for (auto const& it : params){
- std::cout<<it<<std::endl;
- }
-
- FILE *fout = fopen (filename, "w");
- fprintf(fout, "Name of function:%s\n", fn.c_str());
+ std::string filename(gpgpusim_path + "/debug_tools/WatchYourStep/data/params.config" + std::to_string(counter++));
+ std::vector< std::pair<size_t, unsigned char*> > param_data;
- for( std::map<unsigned,param_info>::const_iterator i=m_ptx_kernel_param_info.begin(); i!=m_ptx_kernel_param_info.end(); i++ ) {
- const param_info &p = i->second;
- std::string name = p.get_name();
- param_t param_value = p.get_value();
- if(params[i->first].find("const")!=std::string::npos){
- fprintf(fout, "Input: ");
- } else {
- fprintf(fout, "Input/output: ");
- }
-
- symbol *param = m_symtab->lookup(name.c_str());
- addr_t param_addr = param->get_address();
- fprintf(fout, "%s: %#08x, pdata = %p\n", name.c_str(), param_addr, param_value.pdata);
+ for( std::map<unsigned,param_info>::const_iterator i=m_ptx_kernel_param_info.begin(); i!=m_ptx_kernel_param_info.end(); i++ ) {
+ const param_info &p = i->second;
+ param_t param_value = p.get_value();
+ unsigned char val[param_value.size];
+ memcpy((void*) val, (void*)((char*)param_value.pdata+param_value.offset), param_value.size);
+ param_data.push_back(std::pair<size_t, unsigned char*>(param_value.size,val));
+ }
- if(params[i->first].find("int")!=std::string::npos){
- size_t len = param_value.size/sizeof(int);
- int val[len];
- memcpy((void*) val, (void*)((char*)param_value.pdata+param_value.offset), param_value.size);
- fprintf(fout, "val (int) = ");
- for (unsigned i = 0; i<len; i++){
- fprintf(fout, "%d ", val[i]);
- }
- fprintf(fout, "\n");
- } else if(params[i->first].find("float")!=std::string::npos){
- size_t len = param_value.size/sizeof(float);
- float val[len];
- memcpy((void*) val, (void*)((char*)param_value.pdata+param_value.offset), param_value.size);
- fprintf(fout, "val (float) = ");
- for (unsigned i = 0; i<len; i++){
- fprintf(fout, "%f ", val[i]);
- }
- fprintf(fout, "\n");
- }else{
- size_t len = param_value.size/sizeof(char);
- char val[len];
- memcpy((void*) val, (void*)((char*)param_value.pdata+param_value.offset), param_value.size);
- fprintf(fout, "val (char) = ");
- for (unsigned i = 0; i<len; i++){
- fprintf(fout, "%c ", val[i]);
- }
- fprintf(fout, "\n");
- }
- }
- fflush(fout);
- fclose(fout);
+ FILE *fout = fopen (filename.c_str(), "w");
+ fprintf(fout, "%s\n", get_name().c_str());
+ for( std::vector< std::pair<size_t,unsigned char*> >::const_iterator i=param_data.begin(); i!=param_data.end(); i++ ) {
+ fprintf(fout, "%lu :", i->first);
+ for (size_t j = 0; j<i->first; j++){
+ fprintf(fout, " %u", i->second[j]);
+ }
+ fprintf(fout, "\n");
+ }
+ fflush(fout);
+ fclose(fout);
+ exit(0);
}
template<int activate_level>