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

Измеряем время выполнения - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.66
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.08.2011, 23:45     Измеряем время выполнения #1
Иногда нужно узнать сколько времени выполняется функция или сравнить алгоритмы по скорости работы.
Вот примеры того, как это можно сделать.

->Использовать следующий класс(CTimer.rar)
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include "CTimer.h"
 
int main()
{
    CTimer Time;
    Time.Start();
    
    /*
    код или вызов функции, время исполнения
    которой нужно измерить
    */
    
    Time.End();
    std::cout << Time.GetTimeInSeconds() 
          << " seconds" << std::endl;
    return 0;   
}
файл CTime.h из вложения нужно поместить в папку с кодом вашей программы или просто добавить в нее этот
код
#include <windows.h>

class CTimer
{
public:
CTimer()
{
QueryPerformanceFrequency(&mqFreq);
}
~CTimer() {}

void Start()
{
QueryPerformanceCounter(&mqStart);
}
void End()
{
QueryPerformanceCounter(&mqEnd);
}
double GetTimeInSeconds()
{
return (mqEnd.QuadPart - mqStart.QuadPart)/static_cast<double>(mqFreq.QuadPart);
}
private:
LARGE_INTEGER mqStart;
LARGE_INTEGER mqEnd;
LARGE_INTEGER mqFreq;
};


->Еще вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ctime>
 
int main()
{
    const clock_t start = clock();
    
    /*
    êîä èëè âûçîâ ГґГіГ*êöèè, âðåìÿ èñïîëГ*ГҐГ*ГЁГї
    êîòîðîé Г*ГіГ¦Г*Г® èçìåðèòü
    */
    
    const double time = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
    std::cout << time << " seconds" << std::endl;
    return 0;   
}
->Используя Boost
C++
1
2
3
4
boost::posix_time::ptime start = boost::posix_time::second_clock::local_time();
//действие...
boost::posix_time::ptime end = boost::posix_time::second_clock::local_time();
std::cout << (end - start).total_seconds() << std::endl;
---
ссылка на MSDN
->предлагайте еще варианты, кроме:
1.Взять секундомер
2.Запустить программу и нажать "старт"
3.????
4.PROFIT
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2011, 23:45     Измеряем время выполнения
Посмотрите здесь:

C++ Время выполнения процедуры в С++ 3.1
C++ Время выполнения функции
C++ Время выполнения
C++ Время выполнения(сложность)
C++ Время выполнения алгоритма
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
15.08.2011, 23:50     Измеряем время выполнения #2
Цитата Сообщение от Mayonez Посмотреть сообщение
предлагайте еще варианты
Вот и вот
Еще:
C++
1
2
3
4
5
6
#include<windows.h>
 
double start = GetTickCount();
///// действия
double finish = GetTickCount();
finish - start; // резалт
Для g++ еще видел такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
static inline unsigned long long int tick()
{
unsigned long long int d;
__asm__ __volatile__ ("rdtsc" : "=A" (d) );
return d;
}
 
int main()
{
    unsigned long long int a = 0;
    unsigned long long int b = 0;
    a=tick();
   //действия
    b=tick();
    cout<<b-a<<endl;
    return 0;
}
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
02.05.2015, 00:11     Измеряем время выполнения #3
Цитата Сообщение от asics Посмотреть сообщение
Для g++ еще видел такое
В каких единицах результат?
DrOffset
6457 / 3831 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
02.05.2015, 02:29     Измеряем время выполнения #4
Цитата Сообщение от pety Посмотреть сообщение
В каких единицах результат?
В тактах процессора.
Yandex
Объявления
02.05.2015, 02:29     Измеряем время выполнения
Ответ Создать тему

Метки
время, выполнение, скорость
Опции темы

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