просто есть параметр — который в 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_>Понимаю что по разница небольшая — так что вопрос наверное академический.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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
Оценка:
Быстрее в каком плане?
В плане производительности, скорости разработки, отдавливания багов?
Думаю намек понятен.
Здравствуйте, Alexander_fx, Вы писали:
A_>Что быстрее и правильнее
A_>if a<>0 then b=b+5
A_>или
A_>b=b+5
A_>просто есть параметр — который в 80% не используется A_>вот я и думаю — что проще и быстрее — просто прибавлять его ВСЕГДА или проверять наличие и прибавлять только когда он есть
A_>Понимаю что по разница небольшая — так что вопрос наверное академический.
Обычно сравнение достаточно дорогая операция, я бы не постоветовал так "оптимизировать".
Здравствуйте, 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
Здравствуйте, Алексей П, Вы писали:
АП>Здравствуйте, _d_m_, Вы писали:
___>> а я еще со времен ассемблера 8086 считал, что сравнение целых чисел одна из дешевых операций
АП>Вообще-то не дешевая. То есть сравнить-то их просто, за такт в идеале, а вот jnz потом может тормозить хорошо в условиях длинного конвеера.
Ну тогда пользуйте процессоры фирмы AMD — в этом случае они как раз выигрывают
Что быстрее IF или +
От:
Аноним
Дата:
04.12.06 02:32
Оценка:
Сложение с 0 происходит быстро, лучше делай сложение без условий, в других ситуациях где *, ^, \, тогда условие конечно будет экономить.
Здравствуйте, 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
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, 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 встречаются чаще, чем другие значения параметра.
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
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, 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 сложнопредсказуемо, зависит от текущего состояния процессора и может при определенных условия приводить к резкому скачкообразному замедлению производительности в тысячи раз
Здравствуйте, Nimnul, Вы писали:
N>Сложение с 0 происходит быстро, лучше делай сложение без условий, в других ситуациях где *, ^, \, тогда условие конечно будет экономить.
условие никогда не будет быстрее чем операция сложения! насколько я знаю на всех архитектруах процессоров (и на RISC в том числе) условный переход (а именно в эту инструкцию компилируется IF) занимает в 2-3 раза больше времени чем выполнение операции сложения. В процессорах x86 операция условного перехода будет еще более медленной, в том числе за счет задействования блока предсказания переходов, поэтому в некоторых особо неудачных случаях IF будет выполнятся в тысячи раз медленнее чем +, в других случаях будет как минимум в 5-10 раз медленее чем +
Здравствуйте, Morpheus_, Вы писали:
M_>Здравствуйте, Nimnul, Вы писали:
N>>Сложение с 0 происходит быстро, лучше делай сложение без условий, в других ситуациях где *, ^, \, тогда условие конечно будет экономить.
M_>условие никогда не будет быстрее чем операция сложения! насколько я знаю на всех архитектруах процессоров (и на RISC в том числе) условный переход (а именно в эту инструкцию компилируется IF) занимает в 2-3 раза больше времени чем выполнение операции сложения. В процессорах x86 операция условного перехода будет еще более медленной, в том числе за счет задействования блока предсказания переходов, поэтому в некоторых особо неудачных случаях IF будет выполнятся в тысячи раз медленнее чем +, в других случаях будет как минимум в 5-10 раз медленее чем +