44 #include "Teuchos_Assert.hpp"
45 #include "Teuchos_CommHelpers.hpp"
62 TEUCHOS_ASSERT( PAPI_library_init(PAPI_VER_CURRENT) == PAPI_VER_CURRENT );
66 for (std::vector<int>::const_iterator event =
m_events.begin();
76 std::map<std::string,InternalCounter2>::const_iterator counter;
103 std::vector<long_long>::const_iterator start = c.
start_counters.begin();
104 std::vector<long_long>::const_iterator stop = c.
stop_counters.begin();
106 *accum += *stop - *start;
114 "Error - cannot add event after PAPICounter is initialized!");
133 os <<
"************************************************************" << std::endl;
134 os <<
"* PAPI Counter Report (over all processes) " << std::endl;
135 os <<
"************************************************************" << std::endl;
137 for (std::map<std::string,InternalCounter2>::const_iterator timer =
m_counters.begin();
142 const std::vector<long long int>& accum = timer->second.accumulated_counters;
143 std::vector<long long int> global_min(accum.size(),0);
144 std::vector<long long int> global_max(accum.size(),0);
145 std::vector<long long int> global_sum(accum.size(),0);
146 std::vector<long long int> global_avg(accum.size(),0);
147 long long int average_time = 0;
149 Teuchos::reduceAll(comm,
Teuchos::REDUCE_MIN, static_cast<int>(accum.size()), &accum[0], &global_min[0]);
150 Teuchos::reduceAll(comm,
Teuchos::REDUCE_MAX, static_cast<int>(accum.size()), &accum[0], &global_max[0]);
151 Teuchos::reduceAll(comm,
Teuchos::REDUCE_SUM, static_cast<int>(accum.size()), &accum[0], &global_sum[0]);
152 Teuchos::reduceAll(comm,
Teuchos::REDUCE_SUM, static_cast<int>(accum.size()), &accum[0], &global_avg[0]);
154 for (std::vector<long long int>::iterator i = global_avg.begin();
155 i != global_avg.end(); ++i)
156 (*i) = *i / Teuchos::as<long long int>(comm.
getSize());
158 Teuchos::reduceAll(comm,
Teuchos::REDUCE_SUM, 1, &(timer->second.accumulated_time), &average_time);
159 average_time /= Teuchos::as<long long int>(comm.
getSize());
161 os << timer->first<<
": Average Process Time (seconds) = "
162 << timer->second.accumulated_time / 1.0e6 << std::endl;
163 os << timer->first<<
": Number of Calls = " << timer->second.num_calls << std::endl;
166 for (std::vector<long_long>::const_iterator event=timer->second.accumulated_counters.begin();
167 event != timer->second.accumulated_counters.end(); ++event,++i) {
168 char event_name[PAPI_MAX_STR_LEN];
170 std::string string_event_name(event_name);
171 os << timer->first <<
": " << string_event_name <<
" = "
172 <<
"min:" << global_min[i]
173 <<
", max:" << global_max[i]
174 <<
", total:" << global_sum[i]
175 <<
", avg:" << global_avg[i]
181 os <<
"************************************************************" << std::endl;
PAPICounter2(const std::string)
static void stopCounters()
virtual int getSize() const =0
std::vector< long_long > stop_counters
long_long accumulated_time
static bool m_is_initialized
true if the static members have been intitialized
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
std::vector< long_long > start_counters
std::string m_name
name of this counter
static std::map< std::string, InternalCounter2 > m_counters
maps the counter name to the data object
static void addEventCounter(const int event)
static void report(std::ostream &os, const Teuchos::Comm< int > &comm)
static std::vector< int > m_events
papi event index
static int m_event_set
PAPI event set.
static void startCounters()
std::vector< long_long > accumulated_counters
#define TEUCHOS_ASSERT(assertion_test)