Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Вниз

Тонкости в сравнении.   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
2-1193178890
хочу знать...
2007-10-24 02:34
2007.11.18
Преобразование типов!


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


2-1193214133
Alex8
2007-10-24 12:22
2007.11.18
TDBLookupComboBox


4-1178967178
Дмиитрий Белькевич
2007-05-12 14:52
2007.11.18
Сеанс терминальной сессии


15-1192166354
oxffff
2007-10-12 09:19
2007.11.18
Чудеса компилятора Delphi. Баг?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский