Измерьте время выполнения функции в C ++
Мы можем узнать время, затрачиваемое различными частями программы, с помощью библиотеки std :: chrono, представленной в C ++ 11. Мы обсудили в разделе Как измерить время, затрачиваемое программой на C. Описанные здесь функции поддерживаются и в C ++. но они специфичны для C. Для чистых и надежных программ на C ++ мы должны стремиться использовать только специфические языковые конструкции C ++.
std :: chrono имеет два разных объекта - момент времени и продолжительность. Точка времени, как следует из названия, представляет собой момент времени, тогда как продолжительность представляет интервал или промежуток времени. Библиотека C ++ позволяет нам вычесть две точки времени, чтобы получить интервал времени, прошедший между ними. Используя предоставленные методы, мы также можем преобразовать эту продолжительность в соответствующие единицы.
Std :: chrono предоставляет нам три тактовых генератора с разной точностью. High_resolution_clock является наиболее точным и, следовательно, используется для измерения времени выполнения.
Шаг 1. Получите момент времени до вызова функции.
#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(); |
Шаг 2. Получите момент времени после вызова функции.
#include <chrono> using namespace std::chrono; // After function call auto stop = high_resolution_clock::now(); |
Шаг 3. Получите разницу во временных точках и примените ее к требуемым единицам.
// 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; |
Полная программа на C ++, демонстрирующая процедуру, приведена ниже. Мы заполняем вектор некоторыми случайными числами и измеряем время, затраченное функцией sort () на сортировку этого вектора.
// 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 durarion. 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; } |
Выход: (Зависит от машины)
Время, затраченное функцией: 3062 микросекунды
использованная литература
https://www.geeksforgeeks.org/chrono-in-c/