.. _program_listing_file_include_timer.h: Program Listing for File timer.h ================================ |exhale_lsh| :ref:`Return to documentation for file ` (``include/timer.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef timer_h #define timer_h #include #include #include #include #include #include namespace exafmm_t { static const int stringLength = 20; static const int decimal = 7; static const int wait = 100; static const int dividerLength = stringLength + decimal + 9; // length of output section divider long long flop = 0; timeval time; std::map timer; void print(std::string s) { // if (!VERBOSE | (MPIRANK != 0)) return; s += " "; std::cout << "--- " << std::setw(stringLength) << std::left << std::setfill('-') << s << std::setw(decimal+1) << "-" << std::setfill(' ') << std::endl; } template void print(std::string s, T v, bool fixed=true) { std::cout << std::setw(stringLength) << std::left << s << " : "; if(fixed) std::cout << std::setprecision(decimal) << std::fixed << std::scientific; else std::cout << std::setprecision(1) << std::scientific; std::cout << v << std::endl; } void print_divider(std::string s) { s.insert(0, " "); s.append(" "); int halfLength = (dividerLength - s.length()) / 2; std::cout << std::string(halfLength, '-') << s << std::string(dividerLength-halfLength-s.length(), '-') << std::endl; } void add_flop(long long n) { #pragma omp atomic update flop += n; } void start(std::string event) { gettimeofday(&time, NULL); timer[event] = time; } double stop(std::string event, bool verbose=true) { gettimeofday(&time, NULL); double eventTime = time.tv_sec - timer[event].tv_sec + (time.tv_usec - timer[event].tv_usec) * 1e-6; if (verbose) print(event, eventTime); return eventTime; } } #endif