Using std::chrono for benchmarking code

When it comes to benchmarking code and measuring its performance, the std::chrono library in C++ is a powerful tool. std::chrono provides a set of classes and functions for time-related operations, making it convenient to measure the execution time of code snippets accurately. In this article, we will explore how to use std::chrono for benchmarking code in C++.

Using std::chrono to measure code execution time

To measure the execution time of a code snippet, we can make use of the std::chrono library’s high_resolution_clock. Here’s a simple example that demonstrates how to use std::chrono to measure the execution time of a code snippet:

#include <iostream>
#include <chrono>

int main()
{
    auto start = std::chrono::high_resolution_clock::now();
    
    // Code snippet to be benchmarked
    // ...

    auto end = std::chrono::high_resolution_clock::now();
    
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
    std::cout << "Execution time: " << duration.count() << " microseconds" << std::endl;

    return 0;
}

In the code above, we first record the starting time using std::chrono::high_resolution_clock::now() and store it in the start variable. Then, we execute the code snippet that we want to benchmark. After that, we retrieve the ending time using std::chrono::high_resolution_clock::now() and store it in the end variable. Finally, we calculate the duration by subtracting start from end and convert it to microseconds using std::chrono::duration_cast.

Benchmarking code with multiple iterations

In some cases, it’s necessary to run the code snippet multiple times and calculate the average execution time. We can accomplish this by introducing a loop around the code snippet and accumulating the execution times. Here’s an example:

#include <iostream>
#include <chrono>

int main()
{
    const int iterations = 100;
    long long totalDuration = 0;
    
    for (int i = 0; i < iterations; ++i)
    {
        auto start = std::chrono::high_resolution_clock::now();
        
        // Code snippet to be benchmarked
        // ...

        auto end = std::chrono::high_resolution_clock::now();
        
        auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
        totalDuration += duration.count();
    }

    std::cout << "Average execution time over " << iterations << " iterations: "
              << totalDuration / iterations << " microseconds" << std::endl;

    return 0;
}

In this example, we run the code snippet 100 times (specified by const int iterations = 100) and accumulate the execution times in the totalDuration variable. After the loop, we calculate the average execution time by dividing totalDuration by the number of iterations.

Conclusion

The std::chrono library in C++ provides a straightforward and reliable way to benchmark code and measure its execution time. By utilizing the std::chrono::high_resolution_clock, we can precisely measure the execution time of code snippets. Additionally, by running the code snippet multiple times and calculating the average execution time, we can gain more accurate insights into its performance.

Give it a try next time you need to benchmark your code, and see how std::chrono can help you gather valuable performance metrics!