Medir el tiempo de ejecución de una función en C++

Podemos averiguar el tiempo que tardan las diferentes partes de un programa utilizando la biblioteca std::chrono introducida en C++ 11. Hemos discutido en Cómo medir el tiempo que tarda un programa en C. Las funciones descritas allí también son compatibles con C++, pero son específicas de C. Para programas C++ limpios y robustos, debemos esforzarnos por usar solo construcciones de lenguaje específicas de C++.
std::chrono tiene dos objetos distintos: punto de tiempo y duración. Un punto de tiempo, como sugiere el nombre, representa un punto en el tiempo, mientras que una duración representa un intervalo o lapso de tiempo. La biblioteca de C++ nos permite restar dos puntos de tiempo para obtener el intervalo de tiempo transcurrido entre ellos. Usando los métodos provistos, también podemos convertir esta duración a las unidades apropiadas.
El std::crononos proporciona tres relojes con diferente precisión. El reloj de alta resolución es el más preciso y, por lo tanto, se utiliza para medir el tiempo de ejecución.
Paso 1: obtenga el punto de tiempo antes de llamar a la función
 

CPP

#include <chrono>
using namespace std::chrono;
 
// Use auto keyword to avoid typing long
// type definitions to get the timepoint
// at this instant use function now()
auto start = high_resolution_clock::now();

Paso 2: obtenga el punto de tiempo después de llamar a la función 
 

CPP

#include <chrono>
using namespace std::chrono;
 
// After function call
auto stop = high_resolution_clock::now();

Paso 3: obtenga la diferencia en los puntos de tiempo y transfiérala a las unidades requeridas 
 

CPP

// Subtract stop and start timepoints and
// cast it to required unit. Predefined units
// are nanoseconds, microseconds, milliseconds,
// seconds, minutes, hours. Use duration_cast()
// function.
auto duration = duration_cast<microseconds>(stop - start);
 
// To get the value of duration use the count()
// member function on the duration object
cout << duration.count() << endl;

A continuación se proporciona un programa completo en C++ que demuestra el procedimiento. Rellenamos un vector con algunos números aleatorios y medimos el tiempo que tarda la función sort() en ordenar este vector.
 

CPP

// C++ program to find out execution time of
// of functions
#include <algorithm>
#include <chrono>
#include <iostream>
#include<vector>
using namespace std;
using namespace std::chrono;
 
// For demonstration purpose, we will fill up
// a vector with random integers and then sort
// them using sort function. We fill record
// and print the time required by sort function
int main()
{
 
    vector<int> values(10000);
 
    // Generate Random values
    auto f = []() -> int { return rand() % 10000; };
 
    // Fill up the vector
    generate(values.begin(), values.end(), f);
 
    // Get starting timepoint
    auto start = high_resolution_clock::now();
 
    // Call the function, here sort()
    sort(values.begin(), values.end());
 
    // Get ending timepoint
    auto stop = high_resolution_clock::now();
 
    // Get duration. Substart timepoints to
    // get duration. To cast it to proper unit
    // use duration cast method
    auto duration = duration_cast<microseconds>(stop - start);
 
    cout << "Time taken by function: "
         << duration.count() << " microseconds" << endl;
 
    return 0;
}

Salida: (dependiente de la máquina) 
 

Time taken by function: 3062 microseconds

Referencias  
https://www.geeksforgeeks.org/chrono-in-c/
 

Publicación traducida automáticamente

Artículo escrito por Sayan Mahapatra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *