Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 105

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

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

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

Добавлено через 16 секунд
*программы
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2014, 21:25
Ответы с готовыми решениями:

Шанс выполнения команды
Такой вопросик , есть ли команда, или как реализовать что б было примерно так , я пишу for(i=0;i<=max;) /* вводим переменую шанса...

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

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

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

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

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

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

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

Добавлено через 52 секунды
А вообще, если задача не сводится только к C++, то есть профессиональный софт для измерения времени работы программ.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.03.2014, 08:40
Цитата Сообщение от НеСказочник Посмотреть сообщение
но 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
Цитата Сообщение от Croessmah Посмотреть сообщение
http://www.cplusplus.com/reference/ctime/clock/
Returns the processor time consumed by the program.
Ну да. Я так и написал
Цитата Сообщение от НеСказочник Посмотреть сообщение
Функция хороша тем, что возвращает время для твоего потока
Цитата Сообщение от НеСказочник Посмотреть сообщение
Один раз перед кодом и один после. Разница и будет твоим временем.
Простите, на что вы хотели обратить моё внимание?
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
26.11.2014, 23:43
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
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.11.2014, 02:19
Цитата Сообщение от Redee Посмотреть сообщение
QueryPerformanceFrequency(&freq);
На многоядерных может начать плясать.


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

std::chrono::high_resolution_clock

http://www.cplusplus.com/refer... clock/now/
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.11.2014, 08:14
Как замерить время работы функции?
Время работы программы
Измеряем время выполнения
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
30.11.2014, 18:55
Сейчас порыл инет и действительно встречаются ошибки при использовании 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2014, 18:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru