Changeset d13e27 for src/base/timer.cpp


Ignore:
Timestamp:
Mar 29, 2013, 5:03:13 PM (13 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
f57182
Parents:
5ba22b
Message:

vmg: Work on output verbosity.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@2845 5161e1c8-67bf-11de-9fd5-51895aff932f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/base/timer.cpp

    r5ba22b rd13e27  
    5252std::map<std::string, TimerData> Timer::td;
    5353
    54 void Timer::Start(std::string event)
    55 {
    56 #ifdef HAVE_MPI
    57 #ifdef DEBUG_MEASURE_TIME
    58   std::map<std::string, TimerData>::iterator iter = td.find(event);
    59   if (iter == td.end())
    60     iter = td.insert(std::make_pair(event, TimerData())).first;
    61 
    62   iter->second.time_start = MPI_Wtime();
    63 #endif
    64 #endif
    65 }
    66 
    67 void Timer::Stop(std::string event)
    68 {
    69 #ifdef HAVE_MPI
    70 #ifdef DEBUG_MEASURE_TIME
    71   double time_end = MPI_Wtime();
    72 
    73   std::map<std::string, TimerData>::iterator iter = td.find(event);
    74 
    75   if (time_end - iter->second.time_start < std::numeric_limits<double>::min())
    76     ++(iter->second.warning);
    77 
    78   ++(iter->second.total);
    79 
    80   iter->second.duration += time_end - iter->second.time_start;
    81 #endif
    82 #endif
    83 }
    84 
    85 void Timer::Clear()
    86 {
    87   td.clear();
    88 }
    89 
    90 pugi::xml_node Timer::ToXMLNode()
    91 {
    92  std::map<std::string, TimerData>::iterator iter;
    93 
    94  pugi::xml_node node_process;
    95  node_process.append_attribute("Rank").set_value(MG::GetComm()->GlobalRank());
    96 
    97  pugi::xml_node node_timings = node_process.append_child("Timings");
    98 
    99  for (iter=Timer::td.begin(); iter!=Timer::td.end(); ++iter) {
    100 
    101    pugi::xml_node node_entry = node_timings.append_child("Sample");
    102    node_entry.append_attribute("Name").set_value(Helper::ToString(iter->first).c_str());
    103 
    104    node_entry.append_child("Duration")
    105      .append_child(pugi::node_pcdata)
    106      .set_value(Helper::ToString(iter->second.duration).c_str());
    107 
    108    node_entry.append_child("Warnings")
    109      .append_child(pugi::node_pcdata)
    110      .set_value(Helper::ToString(iter->second.warning).c_str());
    111 
    112    node_entry.append_child("Total")
    113      .append_child(pugi::node_pcdata)
    114      .set_value(Helper::ToString(iter->second.total).c_str());
    115 
    116  }
    117 
    118  return node_process;
    119 }
    120 
    121 std::string Timer::ToString()
    122 {
    123   pugi::xml_node node = Timer::ToXMLNode();
    124   std::stringstream str;
    125   node.print(str);
    126   return str.str();
    127 }
    128 
    129 void Timer::Print()
    130 {
    131 #ifdef DEBUG_MEASURE_TIME
    132  std::map<std::string, TimerData>::const_iterator iter;
    133  Comm& comm = *MG::GetComm();
    134 
    135  if (comm.GlobalRank() == 0) {
    136    comm.PrintStringOnce("Running times:");
    137    for (iter=Timer::td.begin(); iter!=Timer::td.end(); ++iter)
    138      comm.PrintStringOnce("  %s: %e s (%d)", iter->first.c_str(), iter->second.duration, iter->second.total);
    139  }
    140 #endif
    141 }
    142 
    14354template <class T>
    14455static T min(T* data, int num_data, int& at_rank)
     
    17990}
    18091
     92void Timer::Start(std::string event)
     93{
     94#ifdef HAVE_MPI
     95#ifdef OUTPUT_TIMING
     96  std::map<std::string, TimerData>::iterator iter = td.find(event);
     97  if (iter == td.end())
     98    iter = td.insert(std::make_pair(event, TimerData())).first;
     99
     100  iter->second.time_start = MPI_Wtime();
     101#endif
     102#endif
     103}
     104
     105void Timer::Stop(std::string event)
     106{
     107#ifdef HAVE_MPI
     108#ifdef OUTPUT_TIMING
     109  double time_end = MPI_Wtime();
     110
     111  std::map<std::string, TimerData>::iterator iter = td.find(event);
     112
     113  if (time_end - iter->second.time_start < std::numeric_limits<double>::min())
     114    ++(iter->second.warning);
     115
     116  ++(iter->second.total);
     117
     118  iter->second.duration += time_end - iter->second.time_start;
     119#endif
     120#endif
     121}
     122
     123void Timer::Clear()
     124{
     125  td.clear();
     126}
     127
     128pugi::xml_node Timer::ToXMLNode()
     129{
     130 std::map<std::string, TimerData>::iterator iter;
     131
     132 pugi::xml_node node_process;
     133 node_process.append_attribute("Rank").set_value(MG::GetComm()->GlobalRank());
     134
     135 pugi::xml_node node_timings = node_process.append_child("Timings");
     136
     137 for (iter=Timer::td.begin(); iter!=Timer::td.end(); ++iter) {
     138
     139   pugi::xml_node node_entry = node_timings.append_child("Sample");
     140   node_entry.append_attribute("Name").set_value(Helper::ToString(iter->first).c_str());
     141
     142   node_entry.append_child("Duration")
     143     .append_child(pugi::node_pcdata)
     144     .set_value(Helper::ToString(iter->second.duration).c_str());
     145
     146   node_entry.append_child("Warnings")
     147     .append_child(pugi::node_pcdata)
     148     .set_value(Helper::ToString(iter->second.warning).c_str());
     149
     150   node_entry.append_child("Total")
     151     .append_child(pugi::node_pcdata)
     152     .set_value(Helper::ToString(iter->second.total).c_str());
     153
     154 }
     155
     156 return node_process;
     157}
     158
     159std::string Timer::ToString()
     160{
     161  pugi::xml_node node = Timer::ToXMLNode();
     162  std::stringstream str;
     163  node.print(str);
     164  return str.str();
     165}
     166
     167void Timer::Print()
     168{
     169#ifdef OUTPUT_TIMING
     170  Comm& comm = *MG::GetComm();
     171  if (comm.GlobalRank() == 0) {
     172    std::map<std::string, TimerData>::const_iterator iter;
     173    comm.PrintOnce(Timing, "Running times:");
     174    for (iter=Timer::td.begin(); iter!=Timer::td.end(); ++iter)
     175      comm.PrintOnce(Timing, "  %s: %e s (%d)", iter->first.c_str(), iter->second.duration, iter->second.total);
     176  }
     177#endif
     178}
    181179void Timer::PrintGlobal()
    182180{
    183 #ifdef DEBUG_MEASURE_TIME
     181#ifdef OUTPUT_TIMING
    184182  std::map<std::string, TimerData>::const_iterator iter;
    185183  Comm& comm = *MG::GetComm();
     
    192190  int calls[size];
    193191
    194   comm.PrintStringOnce("Running times (global):");
     192  comm.PrintOnce(Timing, "Running times (global):");
    195193
    196194  int timer_size = Timer::td.size();
     
    216214        avg_calls = avg(calls, size);
    217215
    218         comm.PrintStringOnce("  %s: %e s (%d)", iter->first.c_str(), iter->second.duration, iter->second.total);
    219         comm.PrintStringOnce("    Min: %e s @ %d", min_duration, rank_min_duration);
    220         comm.PrintStringOnce("    Max: %e s @ %d", max_duration, rank_max_duration);
    221         comm.PrintStringOnce("    Avg: %e s", avg_duration);
    222         comm.PrintStringOnce("    Min calls: %d @ %d", min_calls, rank_min_calls);
    223         comm.PrintStringOnce("    Max calls: %d @ %d", max_calls, rank_max_calls);
    224         comm.PrintStringOnce("    Avg calls: %f", avg_calls);
     216        comm.PrintOnce(Timing, "  %s: %e s (%d)", iter->first.c_str(), iter->second.duration, iter->second.total);
     217        comm.PrintOnce(Timing, "    Min: %e s @ %d", min_duration, rank_min_duration);
     218        comm.PrintOnce(Timing, "    Max: %e s @ %d", max_duration, rank_max_duration);
     219        comm.PrintOnce(Timing, "    Avg: %e s", avg_duration);
     220        comm.PrintOnce(Timing, "    Min calls: %d @ %d", min_calls, rank_min_calls);
     221        comm.PrintOnce(Timing, "    Max calls: %d @ %d", max_calls, rank_max_calls);
     222        comm.PrintOnce(Timing, "    Avg calls: %f", avg_calls);
    225223    }
    226224  }else {
Note: See TracChangeset for help on using the changeset viewer.