Что быстрее IF или +
От: Alexander_fx  
Дата: 02.12.06 21:39
Оценка:
Что быстрее и правильнее

if a<>0 then b=b+5

или

b=b+5


просто есть параметр — который в 80% не используется
вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть

Понимаю что по разница небольшая — так что вопрос наверное академический.
Re: Что быстрее IF или +
От: Аноним  
Дата: 02.12.06 21:44
Оценка:
Здравствуйте, Alexander_fx, Вы писали:

A_>Что быстрее и правильнее

A_>if a<>0 then b=b+5
A_>или
A_>b=b+5

А сэр вообще о каком языке говорит? Что-то Паскаль навевает с этим then

A_>просто есть параметр — который в 80% не используется


не используется а, и прибавляется в... логика где?

A_>вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть


A_>Понимаю что по разница небольшая — так что вопрос наверное академический.


А не быстрей сделать b+=5? и ВСЕГДА?
Re[2]: Что быстрее IF или +
От: Alexander_fx  
Дата: 02.12.06 21:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Alexander_fx, Вы писали:


A_>>Что быстрее и правильнее

A_>>if a<>0 then b=b+5
A_>>или
A_>>b=b+5

А>А сэр вообще о каком языке говорит? Что-то Паскаль навевает с этим then


A_>>просто есть параметр — который в 80% не используется


А>не используется а, и прибавляется в... логика где?


A_>>вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть


A_>>Понимаю что по разница небольшая — так что вопрос наверное академический.


А>А не быстрей сделать b+=5? и ВСЕГДА?



сорри -читать так
If a<>0 then
b=b+a
c=c+a


или

b=b+a
c=c+a


т.е. стоит ли 1 сравнение двум сложениям

Язык — VB NET
Re[3]: Что быстрее IF или +
От: Аноним  
Дата: 03.12.06 02:40
Оценка:
Здравствуйте, Alexander_fx, Вы писали:

A_>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Alexander_fx, Вы писали:


A_>сорри -читать так

A_>If a<>0 then
A_>b=b+a
A_>c=c+a


A_>или


A_>b=b+a

A_>c=c+a


A_>т.е. стоит ли 1 сравнение двум сложениям


A_>Язык — VB NET



Одно сложение по любому быстрее.
Re[3]: Что быстрее IF или +
От: Аноним  
Дата: 03.12.06 10:02
Оценка:
Быстрее в каком плане?
В плане производительности, скорости разработки, отдавливания багов?
Думаю намек понятен.
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Что быстрее IF или +
От: WinterMute Россия http://yarrr.ru
Дата: 03.12.06 10:32
Оценка:
Здравствуйте, Alexander_fx, Вы писали:

A_>Что быстрее и правильнее


A_>if a<>0 then b=b+5


A_>или


A_>b=b+5



A_>просто есть параметр — который в 80% не используется

A_>вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть

A_>Понимаю что по разница небольшая — так что вопрос наверное академический.


Обычно сравнение достаточно дорогая операция, я бы не постоветовал так "оптимизировать".
Re[2]: Что быстрее IF или +
От: _d_m_  
Дата: 03.12.06 12:48
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Обычно сравнение достаточно дорогая операция, я бы не постоветовал так "оптимизировать".


а я еще со времен ассемблера 8086 считал, что сравнение целых чисел одна из дешевых операций
Re: Что быстрее IF или +
От: _d_m_  
Дата: 03.12.06 12:57
Оценка:
Здравствуйте, Alexander_fx, Вы писали:

A_>Что быстрее и правильнее


A_>if a<>0 then b=b+5


A_>или


A_>b=b+5



A_>просто есть параметр — который в 80% не используется

A_>вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть

A_>Понимаю что по разница небольшая — так что вопрос наверное академический.


Сравнение и сложение суть операции равновесные — так было всегда начиная от Asm/C/C++. Не думаю что кардинально что-то изменилось в .Net. Так что смысла нет в if — просто складывай и все.

PS: На уровне процессора сравнение целых чисел осуществляется вычитанием одного операнда из другого. Сравнение на равенство/неравенство нулю осуществляется операцией "исключающее или" — XOR
Re[3]: Что быстрее IF или +
От: Алексей П Россия  
Дата: 03.12.06 13:23
Оценка:
Здравствуйте, _d_m_, Вы писали:

___> а я еще со времен ассемблера 8086 считал, что сравнение целых чисел одна из дешевых операций


Вообще-то не дешевая. То есть сравнить-то их просто, за такт в идеале, а вот jnz потом может тормозить хорошо в условиях длинного конвеера.
... << RSDN@Home 1.2.0 alpha rev. 668>>
Re[4]: Что быстрее IF или +
От: _d_m_  
Дата: 04.12.06 02:03
Оценка:
Здравствуйте, Алексей П, Вы писали:

АП>Здравствуйте, _d_m_, Вы писали:


___>> а я еще со времен ассемблера 8086 считал, что сравнение целых чисел одна из дешевых операций


АП>Вообще-то не дешевая. То есть сравнить-то их просто, за такт в идеале, а вот jnz потом может тормозить хорошо в условиях длинного конвеера.


Ну тогда пользуйте процессоры фирмы AMD — в этом случае они как раз выигрывают
Что быстрее IF или +
От: Аноним  
Дата: 04.12.06 02:32
Оценка:
Сложение с 0 происходит быстро, лучше делай сложение без условий, в других ситуациях где *, ^, \, тогда условие конечно будет экономить.
--------------
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Что быстрее IF или +
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.12.06 10:49
Оценка: +2
Здравствуйте, Alexander_fx, Вы писали:

A_>Что быстрее и правильнее

1. Нормальный язык высокого уровня должен позволять не заботиться о таких вещах. Это настолько зависит от конкретного контекста исполнения, что заморачивать программиста — бред.
2. Если компилятор вашего языка совсем не умеет оптимизировать, то нужно экспериментировать. Только профайлер даст точную информацию.
3. Обычно сравнение целых чисел выполняется через вычитание и проверку соответствующего флага. Поэтому для одного или двух сложений городить if смысла не имеет.
4. Но если предполагается выполнить много арифметических вычислений с участием параметра, то имеет смысл все же проверить самые частые случаи.
5. Например, если речь идет о матрицах, то скорее всего стоит таки задуматься о построении кода типа такого:
public static Matrix ScalarMultiply(Matrix m, float a)
{
    if (a == 0)
        return ZeroMatrix;
    if (a == 0)
        return m;
    return m*a; // честное умножение
}

6. Особенно если 0 и 1 встречаются чаще, чем другие значения параметра.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Что быстрее IF или +
От: _d_m_  
Дата: 04.12.06 11:01
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>public static Matrix ScalarMultiply(Matrix m, float a)

S>{
S> if (a == 0)
S> return ZeroMatrix;
S> if (a == 1)
S> return m;
S> return m*a; // честное умножение
S>}
S>[/c#]
S>6. Особенно если 0 и 1 встречаются чаще, чем другие значения параметра.
Re[3]: Что быстрее IF или +
От: TK Лес кывт.рф
Дата: 04.12.06 11:20
Оценка: 1 (1) +1
Hello, "_d_m_"
>
> S>public static Matrix ScalarMultiply(Matrix m, float a)
> S>{
> S> if (a == 0)
> S> return ZeroMatrix;
> S> if (a == 1)
> S> return m;
> S> return m*a; // честное умножение
> S>}
> S>[/c#]
> S>6. Особенно если 0 и 1 встречаются чаще, чем другие значения параметра.

Наглядная демонстрация того, что ранняя оптимизация — зло
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Что быстрее IF или +
От: Аноним  
Дата: 05.12.06 02:33
Оценка:
чем тебе не понравилась данная оптимизация?
--------------
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: Что быстрее IF или +
От: _d_m_  
Дата: 05.12.06 04:03
Оценка:
Здравствуйте, Nimnul, Вы писали:

N>чем тебе не понравилась данная оптимизация?


Вероятно тем, что в примере была ошибка — 0 вместо 1
Re[5]: Что быстрее IF или +
От: TK Лес кывт.рф
Дата: 05.12.06 05:11
Оценка:
Hello, "_d_m_"
>
> N>чем тебе не понравилась данная оптимизация?
> Вероятно тем, что в примере была ошибка — 0 вместо 1

На понравилось следующее:
1. Ошибка 0 вместо 1
2. Сравнение на равенство вещественных чисел

ИХМО, внесение потенциальных проблемем с каждой второй сторчкой кода это серьезный повод задуматься о полезности такой оптимизации.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Что быстрее IF или +
От: Morpheus_  
Дата: 05.12.06 13:08
Оценка:
Здравствуйте, Alexander_fx, Вы писали:

A_>Что быстрее и правильнее

A_>if a<>0 then b=b+5
A_>или
A_>b=b+5
A_>просто есть параметр — который в 80% не используется
A_>вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть
A_>Понимаю что по разница небольшая — так что вопрос наверное академический.

IF будет выполняться значительно дольше чем + (относительно времени выполнения +), кроме того IF будет снижать производительность остального кода за счет того что блок предсказания перехода в процессоре сохранит какуюто инфу об этом условном переходе заняв место для информации о другом более важном условном переходе и процессор будет вынужден выполнять лишние операции которых можно было избежать используя +...
Впрочем замедление для одного if'а очень мало, т.к. разница эта будет порядка сотен наносекунд-единиц микросекунд, но злоупотреблять числом if'ов не стоит, при большом количестве if'ов внутри длительного цикла производительность снизится чрезмерно значительно

Операция + имеет максимальную скорость, IF (для процессора это условный jmp) это самая тяжелая и тормозящая операция, т.к. процессору сложно предсказать по какому пути пойдет исполнение до того как не выполнятся все операции до этого условного jmp и корректно подгрузить следующую порцию кода. Более того, время выполнения IF сложнопредсказуемо, зависит от текущего состояния процессора и может при определенных условия приводить к резкому скачкообразному замедлению производительности в тысячи раз
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Что быстрее IF или +
От: Morpheus_  
Дата: 05.12.06 13:14
Оценка:
Здравствуйте, Nimnul, Вы писали:

N>Сложение с 0 происходит быстро, лучше делай сложение без условий, в других ситуациях где *, ^, \, тогда условие конечно будет экономить.


условие никогда не будет быстрее чем операция сложения! насколько я знаю на всех архитектруах процессоров (и на RISC в том числе) условный переход (а именно в эту инструкцию компилируется IF) занимает в 2-3 раза больше времени чем выполнение операции сложения. В процессорах x86 операция условного перехода будет еще более медленной, в том числе за счет задействования блока предсказания переходов, поэтому в некоторых особо неудачных случаях IF будет выполнятся в тысячи раз медленнее чем +, в других случаях будет как минимум в 5-10 раз медленее чем +
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Спасибо
От: Alexander_fx  
Дата: 05.12.06 15:58
Оценка:
Здравствуйте, Morpheus_, Вы писали:

M_>Здравствуйте, Nimnul, Вы писали:


N>>Сложение с 0 происходит быстро, лучше делай сложение без условий, в других ситуациях где *, ^, \, тогда условие конечно будет экономить.


M_>условие никогда не будет быстрее чем операция сложения! насколько я знаю на всех архитектруах процессоров (и на RISC в том числе) условный переход (а именно в эту инструкцию компилируется IF) занимает в 2-3 раза больше времени чем выполнение операции сложения. В процессорах x86 операция условного перехода будет еще более медленной, в том числе за счет задействования блока предсказания переходов, поэтому в некоторых особо неудачных случаях IF будет выполнятся в тысячи раз медленнее чем +, в других случаях будет как минимум в 5-10 раз медленее чем +
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.