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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.88
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
#1

Как измерить потраченное время на выполнение кода - C++

22.12.2011, 16:20. Просмотров 3657. Ответов 14
Метки нет (Все метки)

Нужно измерить время затраченное на выполнене функции. Кто что посоветует? Решил так:

C++
1
2
3
4
5
6
LARGE_INTEGER time_n,time_s,freq;
      QueryPerformanceFrequency(&freq);
        QueryPerformanceCounter(&time_s);
    //KOD...
       QueryPerformanceCounter(&time_n);
    long int  delta=(time_n.QuadPar-time_s.QuadPar)/freq.QuadPar;
Но, мне нужно в милисекундах.
И вопрос по QueryPerformanceFrequency() она возвращает частоту процессора верно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 16:20     Как измерить потраченное время на выполнение кода
Посмотрите здесь:
Записать числа в файл и измерить время, потраченное на запись C++
Как измерить время выполнения отдельного участка кода? C++
Измерить время выполнения кода C++
Можно ли измерить время работы участка кода в тактах процессора? C++
C++ Как измерить время
C++ Как измерить время сортировки массива?
C++ Как измерить скорость работы кода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 16:43     Как измерить потраченное время на выполнение кода #2
C
1
2
3
4
5
#include <time.h>
 
clock_t start = clock(); // В начале
 
printf(" Time = %lf\n", (long double) (clock() - start) / CLOCKS_PER_SEC); // В конце
Просто переводите из секунд в милисекунды
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
22.12.2011, 16:59  [ТС]     Как измерить потраченное время на выполнение кода #3
Добавлено через 13 секунд
go,

Хорошо спасибо все работает, а как вы смотрите на мое предложение.
На сколько точное все ето дело, если у меня в консоле, я новых потоков не создаю получаеться в етой программе всего один поток?
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 17:04     Как измерить потраченное время на выполнение кода #4
QueryPerformanceFrequency - функция для получения кол-ва тиков за секунду
QueryPerformanceCounter - возвращает текущее время в тиках
Вместо типа LARGE_INTEGER можно использовать __int64, и это будет выглядеть примерно так....
C++
1
2
3
4
5
6
__int64 start, end, tps;
QueryPerformanceFrequency((LARGE_INTEGER *)&tps);
QueryPerformanceCounter((LARGE_INTEGER *)&start);
// Исполняемый код
QueryPerformanceCounter((LARGE_INTEGER *)&end);
cout << "Время:" << ((double)(end - start) / tps) * 1000. << " милисекунд";
Этот метод используется для более точного вычисления времени, иначе можно использовать метод из ответа выше.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 17:10     Как измерить потраченное время на выполнение кода #5
Цитата Сообщение от vasyapupkin89 Посмотреть сообщение
На сколько точное все ето дело,
Вы измеряете время выполнения определенного участка (алгоритма) кода, а не полное время работы программы.
clock
C
1
clock_t clock(void)
Возвращает время, измеряемое процессором в тактах от начала выполнения программы, или −1, если оно не известно.
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
22.12.2011, 17:11  [ТС]     Как измерить потраченное время на выполнение кода #6
darkknight2008,
еще вопрос что это за тики, кто их генерирует, должны их частота совпадать с частотой процессора.
(Для себя хочу до конца разобраться)
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 17:31     Как измерить потраченное время на выполнение кода #7
Нет, с частотой процессора совпадать не должно. В компьютере есть чтото на подобии хронометра, который и имеет частоту, которую возвращает функция.
П.С. - все выводы сделаны на основе данных с MSDN
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
22.12.2011, 18:32  [ТС]     Как измерить потраченное время на выполнение кода #8
Вот еще все раз перепроверил, и заметил что даже если я умножаю секунды на 1000, у меня в итоге получаеться 1000,2000,3000 мс и т.д. тоесть ета функция считает только в секундах, или я чтото не могу понять.
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 18:35     Как измерить потраченное время на выполнение кода #9
Покажи свой код.
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
22.12.2011, 18:43  [ТС]     Как измерить потраченное время на выполнение кода #10
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//---------------------------------------------------------------------------
 
 
#include <clx.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <string.h>
#include<windows.h>
#include <time.h>
//---------------------------------------------------------------------------
 
#pragma argsused
 class vector_class{
struct vector{
        double *mas;
        double enum_el;
        } ;
        vector tt;
 public:
    vector_class(){
                srand(time(0));
                tt.enum_el=random(20);
                tt.mas=new double[tt.enum_el];
                for (int i=0;i<tt.enum_el;i++){
                  tt.mas[i]=random(100);
                  }
                }
   void   print_mas(){
                cout<<"\nОтриманий масив із випадкових чисел: ";
                for (int i=0;i<tt.enum_el;i++){
                  cout<<tt.mas[i]<<" ";
                  }
                  }
     float sred1(){  float temp;
                        for (int i=0;i<tt.enum_el;i++)
                  temp+=tt.mas[i];
 
                  return temp/tt.enum_el;
           }
 
     float inline sred2(){  float temp;
                        for (int i=0;i<tt.enum_el;i++){
                  temp+=tt.mas[i];
                  }
                  return temp/tt.enum_el;
           }
       ~vector_class(){delete [] tt.mas;}
   };
int main(int argc, char* argv[])
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
 __int64  rizn_t1, rizn_t2,start,end,tps;
     float temp,temp2;
   vector_class ty;
   ty.print_mas();
 
        cout.precision(3);
    QueryPerformanceFrequency((LARGE_INTEGER *)&tps);
QueryPerformanceCounter((LARGE_INTEGER *)&start);
            temp=ty.sred1();
QueryPerformanceCounter((LARGE_INTEGER *)&end);
rizn_t1=((end-start)/tps)*1000;
QueryPerformanceCounter((LARGE_INTEGER *)&start);
          temp2=ty.sred2();
QueryPerformanceCounter((LARGE_INTEGER *)&end);
 
     rizn_t2=((end-start)/tps)*1000;
 
    cout<<"\nСереднє арифметичне массива (використана функція без специфікатора  inline): "<<temp;
 
    cout<<"\nТа час її виконання: "<<rizn_t1<<" мс.";
 
   cout<<"\n\n\nСереднє арифметичне массива (використана функція з специфікатором  inline): "<<temp2;
 
      cout<<"\nТа час її виконання: "<<rizn_t2<<" мс.";
         cout<<endl;
 
   system("pause");
   ty.~vector_class();
        return 0;
}
//---------------------------------------------------------------------------
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 18:48     Как измерить потраченное время на выполнение кода #11
А в чем пишете. Попробуйте в MSVS 2010.

Добавлено через 27 секунд
C++ Builder немного иначе надо.
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
22.12.2011, 18:58  [ТС]     Как измерить потраченное время на выполнение кода #12
Пишу на билдере, мне его всеравно придеться на билдере здавать, что нужно иначе ??
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2011, 19:23     Как измерить потраченное время на выполнение кода #13
vasyapupkin89, воспользуйтесь
C++
1
DWORD timeGetTime(void);
Добавлено через 2 минуты
C++
1
2
3
4
5
#include <windows.h>
 
unsigned long f = timeGetTime ();
 
printf ("%ld", timeGetTime() - f );
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 20:03     Как измерить потраченное время на выполнение кода #14
Цитата Сообщение от vasyapupkin89 Посмотреть сообщение
rizn_t2=((end-start)/tps)*1000;
Тут ошибка. __int64 - целочисленный тип, поэтому (end-start)/tps - мы получаем целое число.
Надо так, как я писал:
C++
1
rizn_t2=((double)(end-start)/tps)*1000.
Теперь (double)(end-start)/tps - вещественное число делим на целое, получаем вещественное.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2011, 21:41     Как измерить потраченное время на выполнение кода
Еще ссылки по теме:
Как измерить время работы программы по сортировке массива? C++
C++ Измерить время выполнения (сложение двух чисел)
C++ Измерить время создания и последующего уничтожения (TerminateTread) не приостановленного потока,
C++ Как остановить выполнение кода в запущенном таймере?
C++ Подскажите, как сократить время работы кода? Проверка на простое число

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

Или воспользуйтесь поиском по форуму:
vasyapupkin89
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 15
22.12.2011, 21:41  [ТС]     Как измерить потраченное время на выполнение кода #15
darkknight2008,
Огромнейше вам спасибо, все работает
Yandex
Объявления
22.12.2011, 21:41     Как измерить потраченное время на выполнение кода
Ответ Создать тему
Опции темы

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