Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите, пожалуйста, как можно оценить время выполнения некоторого кода. Допустим, есть конструкция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, где это можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:35 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
pol_ar, Начнем ст того что не все из этих конструкций делают то же самое :) Насчет плагина не в курсе. Но хочу обратить ваше внимание, что на современных процессорах большинство команд выполняются не фиксированное, а переменное число тактов, в зависимости от того закешированы ли данные, и многих других факторов. Более того во многих случаях для подсчета суммарного числа тактов последовательно идущих команд некорректно просто их просуммировать, т.к. часто последовательные команды выполняются параллельно или частично параллельно. Ну и для этих двух вариантов скорее всего будет сгенерирован один и тот же маш. код (если абстрагироваться от конкретных констант): Код: plaintext 1. 2. 3. 4. А эта комбинация скорее всего будет медленнее других из-за двух условий Код: plaintext 1. 2. т.к. каждое условие повышает вероятность сброса конвейера, за счет загрузки которого и организуется параллельное исполнение команд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:47 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
Ну и с точки зрения оценок производительности все варианты кода -- это O(1), т.е. оценка времени выполнения одинакова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 13:14 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
pol_arКакая из них выполняется быстрее? И, главное, как это можно посчитать (в тактах процессора). Есть ли какой-то плагин для Visual Studio, где это можно сделать? Твой вопрос на мильён багсов. В целом - никак. Время работы куска кода зависит от разных условий. От компиллятора. От того что делает в данный момент твоя ОС e.t.c. И даже от того первый раз запущен фрагмент или многократно. В твоем случае лучше всего запускать его в цикле (10000000 раз) и фиксировать среднее время. В старое время можно было взять этот-же код в виде ассемблера и посчитать каждую команду в виде количества тактов. Но сейчас эта методика ущербна ввиду сложности работы современных процессоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 13:21 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskypol_ar, Начнем ст того что не все из этих конструкций делают то же самое :) ... А эта комбинация скорее всего будет медленнее других из-за двух условий Благодарю за быстрые ответы. Была когда-то у меня табличка для процессора Z80, там время выполнения каждой инструкции было указано в тактах. Можно было посчитать с точностью до 1 такта. Вот это имелось ввиду. И я вижу уже ниже еще одно сообщение от нашего коллеги по форуму. Спасибо вам за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 13:31 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
Добавлю ссыль на инструмент в составе Visual Studio. Это еще не подсчет тактов, но помогает увидеть дизассемблер (а значит и посчитать такты при наличии таблиц). http://www.c-sharpcorner.com/uploadfile/ae35ca/disassemble-code-in-visual-studio-instead-of-ildsam-disassembler/ Думаю, что с этой ссылкой тема топика становится исчерпанной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 15:05 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
если задача практическая -- выполняем нужный участок кода в цикле много раз, на данных близких к реальным, так чтоб оно несколько сек выполнялось, и считаем сколько раз оно выполнилось. потом ставим в цикл другую конструкцию и тоже считаем. и так несколько раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 15:13 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
Еще одну ссыль, с вашего позволения. Больно хороша ссыль. Надеюсь, я не нарушаю правил форума. В случае чего, прошу великодушно простить.)) В продолжение этой темы обсуждение вопроса о подсчете числа тактов для выполняемых инструкций процессора. Читать здесь: http://www.wasm.ru/forum/viewtopic.php?id=8840 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 16:16 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
В режиме профилирования (теоретически) можно видеть время работы процедуры. Не знаю подойдет-ли это автору. Вообще данную задачу я-бы не хотел рассматрвиать в вакууме. Обычно ее обрамляет логика. И это логика влияет в том.числе на оптимизацию и этих строк тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 16:30 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
mayton, Режим профилирования все же предназначен для больших блоков кода. Вот скриншот фрагмента кода на C++ (CLI), выдаваемый при отладке Visual Studio. Здесь наглядно видно, сколько памяти жрет код и можно прикинуть время выполнения того или иного участка. Это большой плюс. Ниже (или выше?)) уже только программирование на ассемблере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 09:32 |
|
||
|
Время выполнения подпрограммы
|
|||
|---|---|---|---|
|
#18+
pol_arЗдесь наглядно видно, сколько памяти жрет код и можно прикинуть время выполнения того или иного участка. Это большой плюс. Ниже (или выше?)) уже только программирование на ассемблере. Эта метрика не годится. Никто не оценивает производительность по объёму кода. Объём выполнимого кода вообще мало связан со скоростью получения результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 11:53 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38226011&tid=2020281]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 287ms |
| total: | 555ms |

| 0 / 0 |
