Текущий архив: 2007.11.18;
Скачать: CL | DM;
Вниз
Тонкости в сравнении. Найти похожие ветки
← →
AlexanderMS © (2007-10-24 17:17) [0]Скажите, пожалуйста, зависит ли скорость сравнения от операторов сравнения? Вот, например, участки:
if I = 0
then Action1
else Action2
иif I <> 0
then Action2
else Action1
эквивалентны по результату. А по скорости времени выполнения? Понимаю, что время если и отличается, то на доли секунды, но всё-таки хочется разобраться...
Кстати, сюда же:if not (I = 0)
then Action2
else Action1
Ну тут вроде бы менее рационально. А в первых двух случаях?
На ассемблере идёт так (если положить, что в EAX содержиться значение переменной I) :CMP EAX, 0
// одинаковы для обоих случаевJE @Label
илиJNE @Label
// вот тут вопрос. Равнозначны ли по времени операторы перехода? (Кстати, есть ли разница JE с JZ)?
Вы можете сказать, что мне больше делать нечего, как этим "грузиться", но, всё-таки, надеюсь, что мне кто-нибудь это всё объяснит (или даст ссылку на хорошее объяснение) :).
← →
Сергей М. © (2007-10-24 17:25) [1]
> Равнозначны ли по времени операторы перехода?
Да.
Задержки на отработку механизма предсказания ветвлений при современных размерах CPU-кэшей можно смело игнорировать.
> Вы можете сказать, что мне больше делать нечего, как этим
> "грузиться"
Так ведь и скажем)
← →
Anatoly Podgoretsky © (2007-10-24 19:55) [2]> AlexanderMS (24.10.2007 17:17:00) [0]
Операторы равнозначны, а вот результаты нет, время зависит от того выполнилось условие или нет. Время перехода на then/else различно. Называется предсказание и соответственно пенальти.
← →
ProhodyshiyMimo (2007-10-24 21:39) [3]При скоростных процессарах сегодня, это вряд ли будет представлять интерес.
Но если есть в этом смысл, то думаю имеет смысл разложить команды данные команды в asm. Потом посмотреть, что получилось непосредственно в машинных кодах, а дальше рассмотреть вопрос о времени (или количеств тактов) процессора, на выполнение определенных команд. Тем самым можно, думаю, узнать реальную разницу.
Хотя это может буть не совсем верным, так как реализация внутренних алгоритмов выполнения команд в процессоре разными корпорациями (AMD, Intel, Motorola(Точно не помню, по моему Apple) закладываются по разному.
Не зря же были в свое время споры на тему какой корпорации процессор быстрее вычесляет операции с плавающей запятой или целочисленные операции.
← →
Anatoly Podgoretsky © (2007-10-24 21:47) [4]> ProhodyshiyMimo (24.10.2007 21:39:03) [3]
Количество тактов в современных процессорах не фиксировано.
← →
DevilDevil (2007-10-25 00:32) [5]> Скажите, пожалуйста, зависит ли скорость сравнения от операторов
сравнения?
не зависит
> Равнозначны ли по времени операторы перехода?
да
> (Кстати, есть ли разница JE с JZ)?
нет
P.S.
> CMP EAX, 0 // одинаковы для обоих случаев
>JE @Label
почти отдам голову на отсечение, что первая команда будетTEST EAX, EAX
← →
guav © (2007-10-25 01:47) [6]Оптимизация по времени выполнения обычно трудоёмка и бессмыслена.
Возможны следущие варианты оптимизации, улучшающие удобство чтения:
1. Если идёт несколько проврок подряд, то во избежание лишних отступов удобно пользоватся else if, тогда условия пишутся так, чтобы следующая проверка была в else.
2. Избегать лишних отрицаний. т.е. вместо if not IsInvalidRecord лучше использовать IsInvalidRecord
3. Если в одном из случаев кода больше (именно строк кода), удобнее этот случай поместить в else, чтобы else не было далеко от if.
4. Есть ещё совет делать так чтобы в if была "нормальная" ситуация а в else "ненормальная".
← →
Германн © (2007-10-25 02:08) [7]
> guav © (25.10.07 01:47) [6]
И ты, Брут, не обновил свою анкету. :)
Хочешь чтоб твой ник зарегистрировал из вредности кто-то другой?
P.S. Я бы промолчал бы, если бы ник guav был бы мне безразличен.
← →
guav © (2007-10-26 18:26) [8]<off>
> Германн © (25.10.07 02:08) [7]
Не обновлял, т.к. решил что раз работаю на С++ и переход на Delphi не предвидится, то нечего мне тут делать. Хотя по привычке всё равно сюда захожу... ок, обновил (это типа тест).
</off>
← →
TUser © (2007-10-26 19:35) [9]> Оптимизация по времени выполнения обычно трудоёмка и бессмыслена.
Такая оптимизация - да. А вот подумать о выборе алгоритма часто стОит.
← →
guav © (2007-10-26 20:24) [10]Согласен, я именно про конкретный случай а не вообще.
Страницы: 1 вся ветка
Текущий архив: 2007.11.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.038 c