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