Как вычислить время выполнения программы

Это работает нормально, но дать мне результат в виде целочисленного значения.

Как я могу иметь время выполнения в миллисекундах?

Решение

Большинство простых программ имеют время вычисления в миллисекундах. Итак, я полагаю, вы найдете это полезным.

#include #include int main() < clock_t start = clock(); // Execuatable code clock_t stop = clock(); double elapsed = (double)(stop — start) * 1000.0 / CLOCKS_PER_SEC; printf(«Time elapsed in ms: %f», elapsed); >

Если вы хотите вычислить время выполнения всей программы и находитесь в системе Unix, запустите вашу программу с помощью команды time, подобной этой time ./a.out

Другие решения

Вы можете использовать лямбда с auto параметры в C ++ 14, чтобы время других ваших функций. Вы можете передать параметры функции timed вашей лямбде. Я бы сделал это так:

// Timing in C++14 with auto lambda parameters #include #include // need C++14 for auto lambda parameters auto timing = [](auto F, auto . params) < auto start = std::chrono::steady_clock::now(); std::forward(F) (std::forward(params). ); // execute the function return std::chrono::duration_cast( std::chrono::steady_clock::now() — start).count(); >; void f(std::size_t numsteps) // we’ll measure how long this function runs < // need volatile, otherwise the compiler optimizes the loop for (volatile std::size_t i = 0; i < numsteps; ++i); >int main() < auto taken = timing(f, 500’000’000); // measure the time taken to run f() std::cout

Преимущество заключается в том, что вы можете передать любой вызываемый объект timing лямбда. Если вы не можете использовать C ++ 14 auto лямбда-параметров, тогда вам нужно написать шаблонный функтор, чтобы «имитировать» лямбда-выражения.

Как узнать время выполнения программы? #python #программирование

Но если вы хотите сохранить простоту, вы можете просто сделать:

auto start = std::chrono::steady_clock::now(); your_function_call_here(); auto end = std::chrono::steady_clock::now(); auto taken = std::chrono::duration_cast(end — start).count(); std::cout

Если вы знаете, что не собираетесь изменять системное время во время выполнения, вы можете использовать std::chrono::high_resolution_clock вместо этого, что может быть более точным. std::chrono::steady_clock однако не чувствителен к изменениям системного времени во время выполнения.

Вы можете создать такую ​​функцию источник :

typedef unsigned long long timestamp_t; static timestamp_t timestampinmilliseconf ()

Затем вы можете использовать это, чтобы получить разницу во времени.

Читайте также:
Программа для настройки видеорегистратора dahua

timestamp_t time1 = get_timestamp(); // Your function timestamp_t time2 = get_timestamp();

Для окон вы можете использовать эту функцию:

#ifdef WIN32 #include #else #include #include #endif typedef long long int64; typedef unsigned long long uint64; /* Returns the amount of milliseconds elapsed since the UNIX epoch. Works on both * windows and linux. */ int64 GetTimeMs64() < #ifdef WIN32 /* Windows */ FILETIME ft; LARGE_INTEGER li; /* Get the amount of 100 nano seconds intervals elapsed since January 1, 1601 (UTC) and copy it * to a LARGE_INTEGER structure. */ GetSystemTimeAsFileTime( li.LowPart = ft.dwLowDateTime; li.HighPart = ft.dwHighDateTime; uint64 ret = li.QuadPart; ret -= 116444736000000000LL; /* Convert from file time to UNIX epoch time. */ ret /= 10000; /* From 100 nano seconds (10^-7) to 1 millisecond (10^-3) intervals */ return ret; #else /* Linux */ struct timeval tv; gettimeofday( uint64 ret = tv.tv_usec; /* Convert from micro seconds (10^-6) to milliseconds (10^-3) */ ret /= 1000; /* Adds the seconds (10^0) after converting them to milliseconds (10^-3) */ ret += (tv.tv_sec * 1000); return ret; #endif >

в шапке Eсть

Простой способ замерить скорость работы кода в python


учебный класс std::chrono::high_resolution_clock
это делает то, что вы хотите. это немного сложно использовать, хотя;

#include using namespace std; using namespace chrono; auto t1 = high_resolution_clock::now(); // do calculation here auto t2 = high_resolution_clock::now(); auto diff = duration_cast>(t2 — t1); // now elapsed time, in seconds, as a double can be found in diff.count() long ms = (long)(1000*diff.count());

Источник: web-answers.ru

Вычисление времени выполнения программ

На практике для определения времени выполнения программы пользуются несколькими базовыми принципами:

  1. Время выполнения операторов присваивания, чтения и записи обычно имеет порядок О(1). Исключение составляют операторы присваивания с вызовом функции в правой части. Y=fact(x).
  2. Время выполнения последовательности операторов определяется с помощью правила сумм. Степень роста времени выполнения последовательности операторов без определения констант пропорциональности совпадает с наибольшим временем выполнения оператора в данной последовательности.

Пусть T1(n) и T2(n) – время выполнения двух программных фрагментов Р1 и Р2, T1(n) имеет степень роста O(f(n)), а T2(n) – O(g(n)). Тогда T1(n)+ T2(n), т.е. время последовательного выполнения фрагментов Р1 и Р2 , имеет степень роста O(max(f(n),g(n))).

  1. Время выполнения условного оператора (всей конструкции if-then-else) состоит из времени вычисления логического выражения и наибольшего из времени, необходимого для выполнения операторов при значении логического выражения true и false.
  2. Время выполнения цикла является суммой времени всех исполняемых итераций цикла. Время выполнения каждой итерации цикла состоит из времени выполнения операторов тела цикла и времени вычисления условия прекращения цикла. Часто время выполнения цикла вычисляется, пренебрегая определением констант пропорциональности, по правилу произведений как произведение количества выполненных итераций цикла на наибольшее возможное время выполнения операторов тела цикла.
  3. Для программ, содержащих вызовы функций (среди которых нет рекурсивных), общее время выполнения программы находится путем последовательного нахождения времени выполнения функций, начиная с той, которая не имеет вызовов других функций. Затем можно определить время выполнения функций, вызывающих эту функцию и действуя таким образом мы найдем время выполнения всей программы.
  4. Для подсчета времени T(n) выполнения рекурсивной процедуры выводится рекуррентное соотношение (уравнение или неравенство) для T(n), где в правой части соотношения присутствуют значения T(k), k=1,…,n .
Читайте также:
Какие программы обязательно необходимы для работы компьютера

Анализ сложных рекурсивных программ мы рассмматривать не будем. Проанализируем простую рекурсивную программу. Программа вычисления факториала.

(1) (2) (3) long int fact(int n)

На практике эту программу нельзя использовать для вычисления факториала при больших значениях n, так как размер получаемых в процессе вычисления целых чисел может превышать длину машинного слова. Обозначим через T(n) время выполнения программы с объемом входных данных n. Время выполнения строк (1) и (2) имеет порядок О(1), а для строки (3) – О(1)+Т(n-1). Таким образом для некоторых констант с1 и с2 имеем Полагая, что n>2 получим T(n)=c1+T(n-1)=c1+(c1+T(n-2))=2c1+T(n-2). Полагая, что n>3 получим T(n)=c1+T(n-1)=c1+(c1+T(n-2))=2c1+T(n-2) = 2c1+(c1+T(n-3))=3c1+T(n-3). По индукции для n>i получим T(n)=i*c1+T(n-i), полагая i=n-1 получим T(n)=(n-1)*c1+T(1)=(n-1)*c1+c2. Отсюда следует, что T(n) имеет степень роста О(n). Общий метод решения рекуррентных соотношений состоит в последовательном раскрытии T(k) в правой части до тех пор, пока не получится формула, у которой в правой части отсутствует Т. При этом часто приходится находить суммы последовательностей. Если значения таких сумм нельзя вычислить точно, то для сумм находятся верхние границы, что позволяет получить верхние границы для T(n).

  1. При анализе времени выполнения программ мы неявно предполагали, что все ветвления в ходе выполнения процедур осуществлялись с помощью условных операторов и операторов циклов. Однако операторы безусловного перехода (goto) могут порождать более сложную логическую групповую структуру. В принципе, их можно исключить из программы.

В случае использования оператора безусловного перехода для досрочного окончания цикла, предполагается, что досрочное окончание цикла никогда не выполняется, т.е. мы предполагаем полное выполнение цикла. Для программ, где досрочный выход из цикла не исключение, а правило, такой консервативный подход значительно переоценивает степень роста времени выполнения в наихудшем случае. Если же переход осуществляется к ранее выполненным операторам, то в этом случае вообще нельзя игнорировать оператор безусловного перехода, поскольку такой оператор создает петлю в выполнении программы, что приводит к нарастанию времени выполнения всей программы. В этом случае необходимо анализировать структуру самой петли.

Читайте также:
Как описать алгоритм работы программы

Источник: studfile.net

Как рассчитать время выполнения программы?

Дан компьютер с процессором определенной частоты.
Как рассчитать сколько времени будет выполняться программа на этом компьютере (при условии, что никакие другие программы выполняться не будут)?

  • Вопрос задан более трёх лет назад
  • 1918 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 4
Раздолбай и программист

Никак не рассчитать, пока у вас не будет ОС жесткого реального времени. Ни винда ни линух не гарантируют вам никакого времени выполнения, следовательно все расчеты не имеют смысла.

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

Rsa97

Для правильного вопроса надо знать половину ответа

Взять ассемблерный код программы, для каждой команды по справочнику определить количество тактов, за которые она выполняется. Пройти по коду программы, определив все ветвления и количество проходов каждого цикла. Просуммировать такты всех выполняемых команд, умножить на время выполнения одного такта.
На современных процессорах с вычислительным конвейером расчёт невозможен, так как количество тактов на команду однозначно не определено.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Как подозреваю, ваше задание это присвоить взятые (с потолка?) значения различным операций, интерпретировать программу и суммировать «стоимости» всех выполненных операций.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

fox_12

Расставляю биты, управляю заряженными частицами

Проще измерить с какой-то точностью, чем посчитать. Вроде
$ time some_script
Да и то при условии что нет ветвлений, зависящих от внешних факторов — например ожидание результатов ввода/вывода.

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru