Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
13.11.2012, 09:59     Замер времени вычисления #1
Предположим, я хочу определить время "прокрутки" цикла (или другого процесса).
Я знаю два способа.

первый - основан на измерении времени с момента запуска операционной системы:
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; 
}
Второе (процессорное) время сильно отличается от первого (системного) времени...

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

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

Почему так?
И как можно замерить время вычислений в программе с наибольшей точностью и реальностью?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
margarin
 Аватар для margarin
35 / 35 / 0
Регистрация: 02.06.2012
Сообщений: 332
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" кстати говоря)

LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
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" кстати говоря)

Спасибо. Только вопрос был: какой способ точнее и реальнее.... для подсчета времени вычисления в программе.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
13.11.2012, 11:04     Замер времени вычисления #4
перед выполнением процесса присваиваете переменной time() а после выполнения процесса юзаете опять time() и от второго тайма отнимаете первое - это и будет реальное время в мс выполнения процесса
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
13.11.2012, 14:36  [ТС]     Замер времени вычисления #5
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
перед выполнением процесса присваиваете переменной time() а после выполнения процесса юзаете опять time() и от второго тайма отнимаете первое - это и будет реальное время в мс выполнения процесса
А разве это не то же самое, что и во втором варианте, предложенным мною?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
13.11.2012, 14:38     Замер времени вычисления #6
Цитата Сообщение от LVV Посмотреть сообщение
А разве это не то же самое, что и во втором варианте, предложенным мною?
Второе не в миллисекундах
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 15:34     Замер времени вычисления
Еще ссылки по теме:

C++ Замер количества тактов исполнения через rdtsc()
C++ Алгоритм вычисления времени
Замер выполнения отрезка кода в микросекундах C++

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

Или воспользуйтесь поиском по форуму:
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
13.11.2012, 15:34  [ТС]     Замер времени вычисления #7
ВСЕМ СПАСИБО! ВОПРОС СНЯТ!!!
Yandex
Объявления
13.11.2012, 15:34     Замер времени вычисления
Ответ Создать тему
Опции темы

Текущее время: 21:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru