С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
LVV
94 / 91 / 21
Регистрация: 15.02.2010
Сообщений: 369
#1

Замер времени вычисления - C++

13.11.2012, 09:59. Просмотров 1786. Ответов 6
Метки нет (Все метки)

Предположим, я хочу определить время "прокрутки" цикла (или другого процесса).
Я знаю два способа.

первый - основан на измерении времени с момента запуска операционной системы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream> 
#include <windows.h>
using namespace std;
 
int main() 
{
 
double start,finish;
start = GetTickCount();//миллисекунд с момента запуска системы
    for (int i=0; i<100000000; i++); //процесс
finish = GetTickCount();
cout << start << endl;
cout << finish - start; // время в милисекундах
 
 
system ("pause");
return 0; 
}
второй - определяет приблизительное процессорное время использованное программой (связано с тактовой частотой и прочее...)
C++
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
#include <iostream> 
#include <ctime>
#include <cmath>
using namespace std;
int main() 
{
 
float t;
clock_t start = 0, finish = 0;
start = clock(); // начинаем замер времени
 
 
for (double i=0; i<100000000; i++); //процесс
 
    
 
finish=clock(); // заканчиваем подсчет времени
    cout << finish - start <<endl;
    
     // подсчет затраченного времени в секундах c точностью до тысячных долей
    t = (float)(finish-start) / CLK_TCK;
cout << endl <<t<<" sekund\n";
system ("pause");
 
return 0; 
}
Второе (процессорное) время сильно отличается от первого (системного) времени...

Казалось бы первое время должно зависеть от других процессов, запущенных в системе (видео, музыка и прочее)... но этого не происходит. И системное время почти всегда одно и то же, независимо от количества запущенных процессов.

В то же время процессорное время даже при прочих одинаковых условиях даёт сильные расхождения...

Почему так?
И как можно замерить время вычислений в программе с наибольшей точностью и реальностью?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 09:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замер времени вычисления (C++):

Замер времени - C++
Работает через раз. #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;windows.h&gt; using namespace std; ...

Осуществить замер времени for и while - C++
Здравствуйте! Условие задачи: Написать программу выводящее на экран любое текстовое сообщение 100 раз. Вывод осуществить с помощью for...

Замер времени выполнения программного кода - C++
Как замерить время выполнения этого программного кода (в секундах) и вывести его на экран? Как провести оптимизацию, чтобы время...

Замер времени выполнения функции на ядре - C++
Здравствуйте! Не могу понять почему не считает время выполнения алгоритма на ядре какие бы я значения z и x не вводила бы. Каждый раз время...

Замер времени(тактов процессора) выполнения процедуры - C++
Почему то замер дает отрицательный результат (при просмотре в режиме дебаг) и на выходе 0 в итоге. clock_t start, end; start =...

Замер времени работы функции через clock() - C++
Имеется некая функция, требуется замерить время её выполнения. Накидал такой код : #include &lt;iostream&gt; #include &lt;stdint.h&gt; ...

6
margarin
36 / 36 / 0
Регистрация: 02.06.2012
Сообщений: 318
13.11.2012, 10:45 #2
Слушай, я тут заяшил немного:
Кликните здесь для просмотра всего текста
Константы

CLOCKS_PER_SEC

Определяет количество тактов системных часов в секунду. Используется для пересчета величины, возвращаемой функцией clock(), в секунды.

CLK_PER_SEC

Альтернативное имя константы CLOCKS_PER_SEC, используемое в некоторых библиотеках.

CLK_TCK

Вышедший из употребления макрос для константы CLOCKS_PER_SEC.

Может тебе пригодиться...

Не по теме:

у меня результат "360000 0.36 sekund" кстати говоря)

1
LVV
94 / 91 / 21
Регистрация: 15.02.2010
Сообщений: 369
13.11.2012, 10:49  [ТС] #3
Цитата Сообщение от margarin Посмотреть сообщение
Слушай, я тут заяшил немного:
Кликните здесь для просмотра всего текста
Константы

CLOCKS_PER_SEC

Определяет количество тактов системных часов в секунду. Используется для пересчета величины, возвращаемой функцией clock(), в секунды.

CLK_PER_SEC

Альтернативное имя константы CLOCKS_PER_SEC, используемое в некоторых библиотеках.

CLK_TCK

Вышедший из употребления макрос для константы CLOCKS_PER_SEC.

Может тебе пригодиться...

Не по теме:

у меня результат "360000 0.36 sekund" кстати говоря)

Спасибо. Только вопрос был: какой способ точнее и реальнее.... для подсчета времени вычисления в программе.
0
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
13.11.2012, 11:04 #4
перед выполнением процесса присваиваете переменной time() а после выполнения процесса юзаете опять time() и от второго тайма отнимаете первое - это и будет реальное время в мс выполнения процесса
1
LVV
94 / 91 / 21
Регистрация: 15.02.2010
Сообщений: 369
13.11.2012, 14:36  [ТС] #5
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
перед выполнением процесса присваиваете переменной time() а после выполнения процесса юзаете опять time() и от второго тайма отнимаете первое - это и будет реальное время в мс выполнения процесса
А разве это не то же самое, что и во втором варианте, предложенным мною?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
13.11.2012, 14:38 #6
Цитата Сообщение от LVV Посмотреть сообщение
А разве это не то же самое, что и во втором варианте, предложенным мною?
Второе не в миллисекундах
1
LVV
94 / 91 / 21
Регистрация: 15.02.2010
Сообщений: 369
13.11.2012, 15:34  [ТС] #7
ВСЕМ СПАСИБО! ВОПРОС СНЯТ!!!
0
13.11.2012, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 15:34
Привет! Вот еще темы с ответами:

Алгоритм вычисления времени - C++
Друзья,подскажите алгоритм для программы с помощью которого можно было бы вычислить количество лет,месяцев,дней,часов,минут и секунд от...

Функция подсчета времени потраченного на вычисления - C++
Нужно найти время, потраченное программой на математические исчисления. Я сделал с помощью ф-ции clock(), но она подсчитывает время от...

Софтварный замер напряжения - C++
Здравствуйте. Прошу помочь с одной несколько странной проблемой. Поискал в интернетах - ничего толком не увидел. Есть задача - сделать...

Замер времени работы участка кода - C++
Сразу скажу что меня не интересуют стандартные замеры времени роботы участка кода, так как они показывают время роботы данного участка кода...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.