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