Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/76: Рейтинг темы: голосов - 76, средняя оценка - 4.61
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434

Как измерить скорость работы кода

24.11.2009, 05:33. Показов 14229. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу оптимизировать свой код и найти самые медленные места
Можно как то измерить к примеру сколько времени занимает выполнение отдельного цикла или функции ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2009, 05:33
Ответы с готовыми решениями:

Можно ли измерить время работы участка кода в тактах процессора?
Если да, то подскажите способ. Важно что бы при измерениях не мерились службы и процессы винды и всего остального.

Как измерить скорость записи на диск ?
Здравствуйте. Подскажите пожалуйста как измерить скорость записи/чтения (на/с) диск(а) ? Пробовал через...

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

11
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
24.11.2009, 05:40
оптимизацию можно проводить исследуя ассемлерный код, очь хорошо видно слабые места.
а если требуется посчитать время работы, то можно прогнать ваш цикл без пауз много много раз и засеч время, таймер считает вроде с точностью до милисекунды, тоесть время измерения(зацикливания вашего цикла) хотя бы раз в 10 должно превосходить это время. собственно, потом делишь время измерения на количество циклов и получаешь примерное время работы цикла.
но собственно, если владеешь познаниями в области ассемблера, можно опять же по ассемлерному коду посчитать количество операций и умножить на время выполнения одной операции.
время выполнения напрямую зависит от тактовой частоты вашего процессора.
0
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
24.11.2009, 05:51  [ТС]
а засечь время это как что за таймер как его поставить в C++?

про ассемблер тоже если можно пример можно ли его вообще в visual studio увидеть этот ассемблер

Хотя конечно хотелось бы самый простой способ с С++
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
24.11.2009, 09:50
Цитата Сообщение от nill Посмотреть сообщение
Хочу оптимизировать свой код и найти самые медленные места
А нафига ??? Заказчика не удовлетворяет производительность приложения? Какова "просадка" производительности? 10% ? 20% 300% ? Какова цель оптимизации?
Короче, задумайся о конечной цели. Не нужно оптимизировать то, что оптимизировать не нужно.

Цитата Сообщение от nill Посмотреть сообщение
Можно как то измерить к примеру сколько времени занимает выполнение отдельного цикла или функции ?
Погугли по лексемам "профилировщик", "profiler", "Intel VTune"
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
24.11.2009, 10:50
Цитата Сообщение от CheshireCat Посмотреть сообщение
А нафига ??? Заказчика не удовлетворяет производительность приложения? Какова "просадка" производительности? 10% ? 20% 300% ? Какова цель оптимизации?
Короче, задумайся о конечной цели. Не нужно оптимизировать то, что оптимизировать не нужно.
CheshireCat хочу сказать в защиту nill он же не интересовался: "когда требуется выполнять оптимизацию?" он сказал: "Хочу оптимизировать свой код"

конечно, оптимизировать некритические куски кода не к чему, но с другой стороны порой без оптимизации не обойтись. может, товарищ, nill микроконтроллеры программирует и хочет разбор кадров производить в обработчике прерываний, да так чтобы кадры не терять.
есть много областей применения языка С/С++ где счёт идёт на микросекунды и процы с тактовой до сотни мегагерц, вот там неоптимально написанный код может сделать большой "Упс!!".
0
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
24.11.2009, 13:45  [ТС]
CheshireCat
конечно я подумал о том нужна ли она вообще в первую очередь зачем тратить время на что то ненужное
код работает правильно но очень медленно из за кучи вложенных циклов и это на 3гигагерц
я конечно исправляю и удаляю где что могу но хотелось бы понять где самое слабое место по времени его выполнения
вобщем хотелось бы увидеть пример а то пока ничего конкретного
если конечно это вообще возможно измерять время выполнения отдельных участков кода
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
24.11.2009, 14:12
Цитата Сообщение от nill Посмотреть сообщение
Хочу оптимизировать свой код и найти самые медленные места
Можно как то измерить к примеру сколько времени занимает выполнение отдельного цикла или функции ?
Да, можно. Разумеется с поправкой на само измерение. Во первых можно погуглить запрос QueryPerformanceFrequency, во вторых использовать Rdtsc.

замечание:
1. QueryPerformanceFrequency имеет очень долгий "оверхед" - порядка 1мкс..
2. Вариант на вики для для MS Visual C++, для g++ будет что-то подобное:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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;
    a=tick();
    cout<<endl<<a<<endl;
    a=tick();
    cout<<a<<endl;
    return 0;
}
1
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
24.11.2009, 14:35
вот и мне сказали как ассемлерный код посмотреть
для вижуал 2008 так
сначала F10, входишь в режим отладки, затем Debug->Windows->Disassembly
потом смотришь каждый свой цикл и по объему кода чётко понимаешь где время теряешь, самый лучший измеритель, ИМХО

Добавлено через 1 минуту
Цитата Сообщение от Vladimir. Посмотреть сообщение
static inline unsigned long long int tick()
{
unsigned long long int d;
__asm__ __volatile__ ("rdtsc" : "=A" (d) );
return d;
}

[/CPP]
пример из вики нормально прошёл, а вашим кодом давиться вижуал
__asm исправил, потом вскобках компилятор начал путаться где-то сдесь ("rdtsc" : "=A" (d) )
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
24.11.2009, 14:37
TanT,
пример из вики нормально прошёл, а вашим кодом давиться вижуал

потому что этот код не для Visual C++
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
24.11.2009, 15:19
Цитата Сообщение от nill Посмотреть сообщение
конечно я подумал о том нужна ли она вообще в первую очередь зачем тратить время на что то ненужное
код работает правильно но очень медленно из за кучи вложенных циклов и это на 3гигагерц
я конечно исправляю и удаляю где что могу но хотелось бы понять где самое слабое место по времени его выполнения
Ага! Вот он - момент истины!
Если код работает правильно, то:
1. обязательно напиши автоматический тест для алгоритма (например, я пользую UnitTest++) - который будет при каждой сборке автоматически проверять, что ты ничего не "сломал" при оптимизации.
2. Начинай не с оптимизации кода, а с оптимизации АЛГОРИТМА! Алгоритмическая оптимизация дает 90% эффекта - или больше, если получится. Нет смысла вылизывать машинные такты в ассемблерном коде, если алгоритм плох.
3. Ну и используй инструменты типа Intel Vtune, он с ходу покажет тебе наиболее "горячие" точки твоего кода... У него триальный период, ежели мой склероз мне не изменяет, 30 дней - вроде бы, хватит....
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
24.11.2009, 16:31
Цитата Сообщение от Rififi Посмотреть сообщение
TanT,
пример из вики нормально прошёл, а вашим кодом давиться вижуал

потому что этот код не для Visual C++
догадался, как его для вижуала переделать. собственно это я хотел узнать
0
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
25.11.2009, 02:02  [ТС]
CheshireCat
скачал AutomatedQA AQTime
вроде то что нужно замерил мне время выполнения для каждой функции, функции с включенными в нее функциями и отдельных срр файлов
измерить выполнение отдельного цикла не нашел как, а хотелось бы

по UnitTest++ я вообще не понял как его использовать
а по Intel Vtune плохие отзывы и советуют вместо него AutomatedQA AQTime
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2009, 02:02
Помогаю со студенческими работами здесь

Как измерить время выполнения отдельного участка кода?
Собственно возник вопрос, каким образом измерить время выполнения того или инного учатска кода?(На винде)

Как измерить время работы программы по сортировке массива?
Общая схема программы Х выглядит следующим образом. а. Выбрать очередной размер массива исходных данных. б. Заполнить массив...

Измерить скорость воздушного потока
1. Нужно сделать программу, в начале которой запускался бы таймер и программа работала бы бесконечно. 2. Нужно измерить скорость...

Как измерить скорость работы многопоточной программы?
Здравствуйте. Как можно узнать в какой момент времени завершат работу все потоки при коде ниже? for (int i = 0; i &lt; 1000;...

Как измерить скорость интернета!
Как измерить скорость интернета!Точнее спеедометр для проверки скорости интернета!


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru