How to measure function execution time in C++

3 Answers

0 votes
// Measuring execution time using <chrono>

#include <iostream>
#include <chrono>

// A sample function to measure
void work() {
    volatile long long sum = 0;
    for (long long i = 0; i < 100000000; ++i)
        sum += i;
}

int main() {
    // Use std::chrono:: explicitly (this fixes the error)
    auto start = std::chrono::high_resolution_clock::now();

    work();

    auto end = std::chrono::high_resolution_clock::now();

    // Compute duration in microseconds
    auto micro = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
    double seconds = micro / 1'000'000.0;

    std::cout << "Execution time: " << micro << " microseconds\n";
    std::cout << "Execution time: " << seconds << " seconds\n";
}



/* 
run:

Execution time: 213278 microseconds
Execution time: 0.213278 seconds

*/

 



answered May 27 by avibootz
0 votes
// Measuring execution time using clock()

#include <iostream>
#include <ctime>

void work() {
    volatile long long sum = 0;
    for (long long i = 0; i < 100000000; ++i)
        sum += i;
}

int main() {
    clock_t start = clock();

    work();

    clock_t end = clock();

    // Convert to seconds
    double seconds = double(end - start) / CLOCKS_PER_SEC;
    double micro = seconds * 1'000'000.0;

    std::cout << "Execution time: " << micro << " microseconds\n";
    std::cout << "Execution time: " << seconds << " seconds\n";
}




/* 
run:

Execution time: 175181 microseconds
Execution time: 0.175181 seconds

*/

 



answered May 27 by avibootz
0 votes
// Measuring function execution time in C++ using a reusable Timer (milliseconds + seconds)

#include <iostream>
#include <chrono>

// ---------------------------
// Reusable Timer class
// ---------------------------
class Timer {
private:
    std::chrono::high_resolution_clock::time_point start;
    std::chrono::high_resolution_clock::time_point end;

public:
    // Start the timer
    void Start() {
        start = std::chrono::high_resolution_clock::now();
    }

    // Stop the timer
    void Stop() {
        end = std::chrono::high_resolution_clock::now();
    }

    // Return elapsed time in milliseconds
    long long ElapsedMilliseconds() const {
        return std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
    }

    // Return elapsed time in seconds
    double ElapsedSeconds() const {
        return ElapsedMilliseconds() / 1000.0;
    }
};

// ---------------------------
// Function to measure
// ---------------------------
void work() {
    volatile long long sum = 0;
    for (long long i = 0; i < 100000000; ++i)
        sum += i;
}

// ---------------------------
// Main program
// ---------------------------
int main() {
    Timer t;

    t.Start();
    work();
    t.Stop();

    long long ms = t.ElapsedMilliseconds();
    double sec = t.ElapsedSeconds();

    std::cout << "Execution time: " << ms << " ms\n";
    std::cout << "Execution time: " << sec << " seconds\n";
}



/* 
run:

Execution time: 99 ms
Execution time: 0.099 seconds

*/

 



answered May 27 by avibootz
edited May 27 by avibootz
...