Measuring time in a multithreaded C++ application

前端 未结 2 806
小鲜肉
小鲜肉 2021-01-25 18:30

I\'m writing an application using C++ and OpenMP and I want to reliably (and correctly) measure time of execution of parts of it. I have reviewed a few options (Windows, TDM-GC

相关标签:
2条回答
  • 2021-01-25 18:52

    You didn't mention boost::chrono. Same as C++11 chrono, but works with C++03 compiler.

    Also, I cannot understand your hesitation about C++11. We are almost in 2015, and C++11 is not that new. It is even not the most recent standard. So, #include <chrono> is a way to go.

    Note however, that chrono is somewhat broken in Visual Studio 2013 Standard library implementation. I, personally, use std::chrono everywhere and swap it to boost::chrono via conditional defines and typedefs. Hope they'll fix it in Visual Studio Next.

    0 讨论(0)
  • 2021-01-25 19:00

    Copied directly from my current research project:

    #include <chrono>
    #include <type_traits>
    
    /** @brief Best available clock. */
    using clock_type = typename std::conditional<
      std::chrono::high_resolution_clock::is_steady,
      std::chrono::high_resolution_clock,
      std::chrono::steady_clock>::type;
    

    We want to measure wall time, not user-space CPU cycles to be fair and account for the multi-threading overhead as well. Unfortunately, many implementations define high_resolution_clock as an alias for real_time_clock which would spoil our results in case the system time is adjusted during our measurements.

    Yes, std::chrono is a C++11 feature but if this is research as you say, what stops you from using the most modern compiler? You won't need your code to compile on the most weird platform that might exist somewhere in some dusty cellar of a customer. Anyway, if you just cannot have C++11, you can easily implement these clocks yourself. They are (at least in GNU libstdc++) just thin wrappers around clock_gettime.

    0 讨论(0)
提交回复
热议问题