1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 105
1

Среднее время выполнения команды

27.03.2014, 21:25. Показов 4006. Ответов 7
Метки нет (Все метки)

Подскажите, пожалуйста, как можно посчитать среднее время выполнения команды?

Добавлено через 16 секунд
*программы
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2014, 21:25
Ответы с готовыми решениями:

Шанс выполнения команды
Такой вопросик , есть ли команда, или как реализовать что б было примерно так , я пишу ...

Найти наибольшее, наименьшее и среднее время ожидания и время обслуживания
Помогите решить задачу Банк провел мониторинг с целью улучшения обслуживания клиентов. Собранная...

Алгоритм выполнения команды описаный в XML
Программа выполняет команды введенные пользователем. Необходимо сделать так что бы пользователь мог...

Вывести направление робота после выполнения полученной команды
Здравствуйте! Условие задачи: Робот может перемещаться в четырех направлениях («С» — север, «З» —...

7
60 / 48 / 13
Регистрация: 12.11.2012
Сообщений: 373
Записей в блоге: 2
27.03.2014, 21:42 2
функция clock()

Вызываешь дважды. Один раз перед кодом и один после. Разница и будет твоим временем. Функция хороша тем, что возвращает время для твоего потока. Так, если просто проверять системное время, то есть риск захватить и время выполнения других процессов, а тогда измерения будут бессмысленны. но clock() меряет очень грубо, в смысле с точностью до миллисекунд (кажется) поэтому, если участок кода очень коротки и измерения показывают ноль, то нужно запустить код в цикле. Просто оборачиваешь измеряемый код в цикл, что бы одно и то же повторилось много раз (порядка 1000-1000000) но тогда нужно измерить два времени:
1) Время работы кода в цикле, например 1000 повторений.
2) Время работы такого же точно цикла, но холостого, т.е. просто пустой цикл.

Так как на операции перехода тоже затрачивается время, то оборачивание в цикл вносит дополнительную погрешность измерения, которую можно весьма точно исключить, отняв время работы кода в цикле от времени работы цикла. Потом просто делишь получившееся время на число в повторений и получаешь среднее время работы кода.

Только учти, что чтение файла, операторы printf, scanf и прочее, так же занимают время, поэтому нужно стараться измерять только тот участок кода, который тебя интересует, без лишних операторов, вроде чтения файла. Если только ты не собираешься именно чтение файла мерить.

Добавлено через 3 минуты
Когда меряешь в цикле, то вызовы clock() ставишь непосредственно сразу перед циклом и сразу после него.

Добавлено через 52 секунды
А вообще, если задача не сводится только к C++, то есть профессиональный софт для измерения времени работы программ.
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,497
Записей в блоге: 1
28.03.2014, 08:40 3
Цитата Сообщение от НеСказочник Посмотреть сообщение
но clock() меряет очень грубо, в смысле с точностью до миллисекунд (кажется) поэтому, если участок кода очень коротки и измерения показывают ноль, то нужно запустить код в цикле.
http://www.cplusplus.com/reference/ctime/clock/
Returns the processor time consumed by the program.
0
60 / 48 / 13
Регистрация: 12.11.2012
Сообщений: 373
Записей в блоге: 2
28.03.2014, 10:30 4
Цитата Сообщение от Croessmah Посмотреть сообщение
http://www.cplusplus.com/reference/ctime/clock/
Returns the processor time consumed by the program.
Ну да. Я так и написал
Цитата Сообщение от НеСказочник Посмотреть сообщение
Функция хороша тем, что возвращает время для твоего потока
Цитата Сообщение от НеСказочник Посмотреть сообщение
Один раз перед кодом и один после. Разница и будет твоим временем.
Простите, на что вы хотели обратить моё внимание?
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 184
26.11.2014, 23:43 5
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
// Профилирование кода на C++
// за основу использовалась документация MSDN >>
// http://msdn.microsoft.com/en-us/library/windows/desktop/ee417693.aspx
// http://msdn.microsoft.com/en-us/library/windows/desktop/dn553408.aspx
// Применимо только для измерения скорости кода
// в игровой логике использовать НЕ надо
// "Nevertheless, developers should attempt to have their games call QueryPerformanceCounter
// as little as possible to avoid any performance penalty."
 
#include "iostream"
#include "iomanip"
#include "windows.h"
#include "math.h"
using namespace std;
 
void main()
{
    // максимальная точность вывода для double
    cout << setprecision(15);
 
    // декларируем используемые переменные
    LARGE_INTEGER freq, start, end, elaps;
    double micSec;
    double sec;
    
    // частота процессора Hz в секунду
    // замеры тоже будут метками в Hz
    QueryPerformanceFrequency(&freq);
    cout << "CPU freq in Hz: " << freq.QuadPart << endl;
 
    // ставим метку
    QueryPerformanceCounter(&start);
    // проверяемый код
    int n = 1;
    int k = 2;
    ////////
    // ставим метку
    QueryPerformanceCounter(&end);
 
    // узнаем сколько Hz прошло
    elaps.QuadPart = end.QuadPart - start.QuadPart;
 
    // конвертируем в микросекунды
    // рекомендуется чтобы не терять данные
    // 1 сек = 1000 000 микросек
    micSec = 1000000 * ((double)elaps.QuadPart / (double)freq.QuadPart);
    cout << "Execution time in micSec: " << micSec << endl;
 
    
    QueryPerformanceCounter(&start);
    // проверяем следующий код
    // естественно можете написать функцию / метод для автоматизации профилирования )))
    n++;
    k++;
    QueryPerformanceCounter(&end);
    elaps.QuadPart = end.QuadPart - start.QuadPart;
    micSec = 1000000 * ((double)elaps.QuadPart / (double)freq.QuadPart);
    cout << "Execution time in micSec: " << micSec << endl;
}
0
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,668
27.11.2014, 02:19 6
Цитата Сообщение от Redee Посмотреть сообщение
QueryPerformanceFrequency(&fre q);
На многоядерных может начать плясать.


В наши дни есть стандартное средство, которое таких проблем не имеет:

std::chrono::high_resolution_c lock

http://www.cplusplus.com/refer... clock/now/
0
Почетный модератор
Эксперт С++
5848 / 2859 / 392
Регистрация: 01.11.2011
Сообщений: 6,905
27.11.2014, 08:14 7
Как замерить время работы функции?
Время работы программы
Измеряем время выполнения
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 184
30.11.2014, 18:55 8
Сейчас порыл инет и действительно встречаются ошибки при использовании QPC на многоядерных компьютерах.
И согласен если стоит win7 и visual studio 2012 и выше то применяем <chrono>.
Если среда разработки VS2010 и давнее, то выбор будет на timeGetTime().

Добавлено через 8 минут
Проблемы с QPC могут встречаться только на операционках до winXP и на некоторых многоядерных компьютерах.
http://msdn.microsoft.com/en-u... 53408.aspx

Windows XP and Windows 2000
QPC is available on Windows XP and Windows 2000 and works well on most systems. However, some hardware systems' BIOS didn't indicate the hardware CPU characteristics correctly (a non-invariant TSC), and some multi-core or multi-processor systems used processors with TSCs that couldn't be synchronized across cores. Systems with flawed firmware that run these versions of Windows might not provide the same QPC reading on different cores if they used the TSC as the basis for QPC.
Добавлено через 1 час 52 минуты
timeGetTime() имеет меньшую точность измерения - 5милисек
В то время имея "процессор" даже с частотой 1mHz(1000000Hz) через QPC мы получаем - 1микросек точности
Соотношение 1миксек и 5000миксек говорит само за себя

Если есть возможность использовать chrono конечно же его и применять.

Здесь описывается о багах QPC на старых операционках.
http://www.virtualdub.org/blog... php?id=106
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2014, 18:55
Помогаю со студенческими работами здесь

Вывести направление робота после выполнения полученной команды.
Case. Робот может перемещаться в четырех направлениях («С» — север, «З» — запад, «Ю» — юг, «В» —...

Иероглифы при записи в файл результата выполнения команды system
Собственно проблема возникает при наличии русских букв в результате выполнения команды system(&quot;echo...

Почему после выполнения команды cprintf значения строк затираются?
Здраствуйте. Помогите пожалуйста, что это может быть, что вот уже больше дня играюсь с билдером и...

Оценить время исполнения программы, собственные команды
Нашел старую задачу, долго над ней думал, кое-что наработал, но не решил Реализовал почти все...


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

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

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