Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.023 c
2-1193211223
Ega23
2007-10-24 11:33
2007.11.18
Назначение Parent у TFrame


4-1178126275
Альберт
2007-05-02 21:17
2007.11.18
перевод 8 битного битмапа в 24 битный


1-1188460255
Kolan
2007-08-30 11:50
2007.11.18
Disabled кнопка тулбара с Enabled выпадающим списком, возможно?


2-1193065535
@!!ex
2007-10-22 19:05
2007.11.18
Float To Str &amp; Decimal Separator


2-1193043715
Sergl
2007-10-22 13:01
2007.11.18
Сокеты "сдохли"