powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Время выполнения подпрограммы
11 сообщений из 11, страница 1 из 1
Время выполнения подпрограммы
    #38225667
pol_ar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите, пожалуйста, как можно оценить время выполнения некоторого кода.

Допустим, есть конструкция1 вида:
if (x > 5) y = 1;
if (x > 10) y = 0;

И есть конструкция2 вида:
if (x > 5) y = 1;
else y = 0;

Или даже так:
y = (x > 10) ? 0 : 1;

Какая из них выполняется быстрее? И, главное, как это можно посчитать (в тактах процессора). Есть ли какой-то плагин для Visual Studio, где это можно сделать?
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38225699
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol_ar,

Начнем ст того что не все из этих конструкций делают то же самое :)

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

Ну и для этих двух вариантов скорее всего будет сгенерирован один и тот же маш. код (если абстрагироваться от конкретных констант):
Код: plaintext
1.
2.
3.
4.
if (x > 5) y = 1;
else y = 0;

y = (x > 10) ? 0 : 1;


А эта комбинация скорее всего будет медленнее других из-за двух условий
Код: plaintext
1.
2.
if (x > 5) y = 1;
if (x > 10) y = 0;


т.к. каждое условие повышает вероятность сброса конвейера, за счет загрузки которого и организуется параллельное исполнение команд.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38225771
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и с точки зрения оценок производительности все варианты кода -- это O(1), т.е. оценка времени выполнения одинакова.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38225789
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol_arКакая из них выполняется быстрее? И, главное, как это можно посчитать (в тактах процессора). Есть ли какой-то плагин для Visual Studio, где это можно сделать?
Твой вопрос на мильён багсов. В целом - никак. Время работы куска кода зависит от разных
условий. От компиллятора. От того что делает в данный момент твоя ОС e.t.c. И даже от
того первый раз запущен фрагмент или многократно.

В твоем случае лучше всего запускать его в цикле (10000000 раз) и фиксировать среднее
время.

В старое время можно было взять этот-же код в виде ассемблера и посчитать каждую
команду в виде количества тактов. Но сейчас эта методика ущербна ввиду сложности
работы современных процессоров.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38225818
pol_ar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovskypol_ar,
Начнем ст того что не все из этих конструкций делают то же самое :)
...
А эта комбинация скорее всего будет медленнее других из-за двух условий


Благодарю за быстрые ответы. Была когда-то у меня табличка для процессора Z80, там время выполнения каждой инструкции было указано в тактах. Можно было посчитать с точностью до 1 такта. Вот это имелось ввиду. И я вижу уже ниже еще одно сообщение от нашего коллеги по форуму. Спасибо вам за ответы.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38225996
pol_ar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю ссыль на инструмент в составе Visual Studio. Это еще не подсчет тактов, но помогает увидеть дизассемблер (а значит и посчитать такты при наличии таблиц).
http://www.c-sharpcorner.com/uploadfile/ae35ca/disassemble-code-in-visual-studio-instead-of-ildsam-disassembler/ Думаю, что с этой ссылкой тема топика становится исчерпанной.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38226011
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если задача практическая -- выполняем нужный участок кода в цикле много раз, на данных близких к реальным, так чтоб оно несколько сек выполнялось, и считаем сколько раз оно выполнилось.
потом ставим в цикл другую конструкцию и тоже считаем.
и так несколько раз.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38226162
pol_ar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще одну ссыль, с вашего позволения. Больно хороша ссыль. Надеюсь, я не нарушаю правил форума. В случае чего, прошу великодушно простить.))
В продолжение этой темы обсуждение вопроса о подсчете числа тактов для выполняемых инструкций процессора. Читать здесь:
http://www.wasm.ru/forum/viewtopic.php?id=8840
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38226224
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В режиме профилирования (теоретически) можно видеть время работы процедуры.
Не знаю подойдет-ли это автору.

Вообще данную задачу я-бы не хотел рассматрвиать в вакууме. Обычно ее обрамляет
логика. И это логика влияет в том.числе на оптимизацию и этих строк тоже.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38228521
pol_ar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Режим профилирования все же предназначен для больших блоков кода.
Вот скриншот фрагмента кода на C++ (CLI), выдаваемый при отладке Visual Studio. Здесь наглядно видно, сколько памяти жрет код и можно прикинуть время выполнения того или иного участка. Это большой плюс. Ниже (или выше?)) уже только программирование на ассемблере.
...
Рейтинг: 0 / 0
Время выполнения подпрограммы
    #38228833
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol_arЗдесь наглядно видно, сколько памяти жрет код и можно прикинуть время выполнения того или иного участка. Это большой плюс. Ниже (или выше?)) уже только программирование на ассемблере.
Эта метрика не годится. Никто не оценивает производительность
по объёму кода. Объём выполнимого кода вообще мало
связан со скоростью получения результата.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Время выполнения подпрограммы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]