76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 730
1

время работы алгоритма

01.01.2012, 12:01. Показов 9121. Ответов 11

Как посчитать? Так понимаю TTimer по частоте не подойдёт как минимум, да и просто неточен будет, если не предпологается параллельное программирование.
Задача вообщем - узнать за какое время выполняется участок кода.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2012, 12:01
Ответы с готовыми решениями:

Время работы алгоритма на С++ и Делфи
Меня всегда мучил вопрос, какой компилятор, Visual C++ или Delphi, лучше. Для сравнения реализовал...

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

Время работы программы (алгоритма)
не получается посчитать время работы алгоритма программы! #include <iostream> using std::cout;...

Время работы алгоритма сортировки
Есть такой код сортировки наивным методом: public static int msp1(int X) { int maxteilsumme...

11
Почетный модератор
64276 / 47575 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
01.01.2012, 12:11 2
Просто берем системное время начала и конца, вычитаем и получаем результат, вроде функция
Delphi
1
2
3
4
5
var a,b:TDateTime;
.......
a:=now;
//выполняем
b:=now;
вычитаем
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
01.01.2012, 12:12 3
Цитата Сообщение от Rayne Посмотреть сообщение
Задача вообщем - узнать за какое время выполняется участок кода.
Перед началом выполнения алгоритма взяли системное время и сохранили, потом в конце опять взяли системное время и отняли от него сохраненное
0
Puporev
01.01.2012, 12:26
  #4

Не по теме:

go, Зачем меня копировать? Это вроде твои слова?

0
go
01.01.2012, 12:38
  #5

Не по теме:

Цитата Сообщение от Puporev Посмотреть сообщение
go, Зачем меня копировать? Это вроде твои слова?
Когда я начал писать этот пост, вашего еще не было. И Вы это прекрасно знаете. Давайте не будем конфликтовать.

0
76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 730
01.01.2012, 13:23  [ТС] 6
а как миллисекунды отсюда получить?
0
Тимуровец
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
01.01.2012, 13:30 7
Это не очень удачное решение использовать Now для этих целей. Лучше взять GetTickCount.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
01.01.2012, 13:42 8
Цитата Сообщение от Rayne Посмотреть сообщение
а как миллисекунды отсюда получить?
наверное из поста №2 никак
Пробуйте так.
Delphi
1
2
3
4
t : longint;
t := GetTickCount; // Начало
...
t := t - GetTickCount ; // Время работы алгоритма в милисекундах
0
159 / 152 / 50
Регистрация: 03.08.2011
Сообщений: 299
Записей в блоге: 14
01.01.2012, 14:20 9
Можно и из поста №2:
Delphi
1
ms:=round((b-a)*24*60*60*1000);
0
13094 / 5875 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
01.01.2012, 16:00 10
Лучший ответ Сообщение было отмечено как решение

Решение

1. Частота обновления данных в системных часах - около 1/25 секунды. Это означает, что если исследуемый процесс выполняется за время меньшее, чем 1/25 секунды, то его время выполнения с большой вероятностью будет определено как 0 (ноль).
---
2. Частота обновления для таймера, показания которого читает функция GetTickCount() - около 10 миллисекунд. Этот таймер (счётчик) отсчитывает количество миллисекунд, прошедшее от момента запуска операционной системы Windows.
---
3. И самый точный таймер - это мультимедийный таймер - он считает такты микропроцессора. Задержка этого таймера по отношению к программе, которая с ним работает, определяется лишь скоростью чтения данных из его регистра. С помощью него можно даже замерить время, прошедшее между выполнением двух соседних команд в программе, без применения усреднения.
Чтобы воспользоваться показаниями мультимедийного таймера используются две функции:
QueryPerformanceFrequency() - замеряет тактовую частоту процессора.
QueryPerformanceCounter() - читает показание мультимедийного таймера.
---
В принципе, любой из этих таймеров можно применить для замера времени выполнения некоторого процесса. Если время выполнения процесса близко к интервалу обновления таймера - в этом случае следует применить усреднение. Т. е., надо организовать цикл на некоторое количество итераций - на 100, 1000 (иногда и больше). И в этом цикле запускать исследуемый процесс. После завершения цикла вычислить усреднённое время выполнения процесса.
---
Пример, как замерить усреднённое время выполнения некоторого скоротечного процесса с помощью мультимедийного таймера. Здесь в качестве исследуемого процесса применяется заглушка - Sleep(10) - это задержка выполнения текущего потока на 10 миллисекунд.
Заодно проверите тактовую частоту своего процессора.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TForm1.Button1Click(Sender: TObject);
const
  M = 10;
var
  i : Integer;
  Fr, t : Int64;
  Dt : Extended;
begin
  //Определяем тактовую частоту процессора (количество тактов в секунду).
  QueryPerformanceFrequency(Fr);
  if Fr = 0 then begin
    ShowMessage('Не удалось получить сведения о тактовой частоте. Действие отменено.');
    Exit;
  end;
  ShowMessage('Тактовая частота процессора (количество тактов в секунду): ' + IntToStr(Fr));
 
  //Чтение показания счётчика тактов.
  QueryPerformanceCounter(t);
  Dt := t;
 
  //Запуск исследуемого процесса.
  for i := 1 to M do Sleep(10);
 
  //Показание счётчика тактов.
  QueryPerformanceCounter(t);
  //Рассчёт времени.
  Dt := (t - Dt) / (M * Fr);
 
  ShowMessage('Усреднённая длительность выполнения в секундах: ' + FloatToStr(Dt));
end;
7
5687 / 2278 / 466
Регистрация: 20.11.2009
Сообщений: 7,670
Записей в блоге: 1
01.01.2012, 16:24 11
Цитата Сообщение от Mawrat Посмотреть сообщение
. И самый точный таймер - это мультимедийный таймер - он считает такты микропроцессора
Цитата Сообщение от Mawrat Посмотреть сообщение
Чтобы воспользоваться показаниями мультимедийного таймера используются две функции:
QueryPerformanceFrequency() - замеряет тактовую частоту процессора.
QueryPerformanceCounter() - читает показание мультимедийного таймера.

Не по теме:

Где же вы раньше были с этим описанием ;), Благодарю, теперь поможет решить одну задачу :good:

0
13094 / 5875 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
01.01.2012, 16:34 12
Кстати, надо иметь в виду, что в современных компах тактовая частота процессора может изменяться. Например - в ноутбуках. - В обычном режиме - одна частота, в режиме пониженного энергопотребления - уже может быть меньше. Могут быть задачи, где это придётся учитывать.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.01.2012, 16:34
Помогаю со студенческими работами здесь

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

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

Как найти время работы алгоритма?
Пусть время работы алгоритма Т(N) = O(f(N)). Если X элементов обрабатываются за Y мсек., то во...

Время работы алгоритма пирамидальной сортировки массива
Чему равно время работы алгоритма пирамидальной сортировки массива A длины n, в котором элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru