Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Как уменьшить такую конструкцию?   Найти похожие ветки 

 
xayam ©   (2010-02-01 00:18) [40]


> Anatoly Podgoretsky ©   (31.01.10 23:45) [34]

xor - 6984
cmp - 2468


 
Кто б сомневался ©   (2010-02-01 00:20) [41]


> Простейшия проверка показала резкий выигрыш "CMP" при сравнение
> на 2 миллиардах иттераций. XOR в три раза медленнее.


О. Я понял почему.

Оптимизатор то молодец..  :)

Вот это ваш cmp код:

//for I := 0 to 5 - 1 do
 mov eax,$00000005
 dec eax
 jnz $0046cd2c

А вот это ваш xor код :

// for I := 0 to 5 - 1 do
 mov eax,$00000005
//  c := (a>1) xor b;
 cmp esi,$01
 setnle dl
 xor dl,bl
 mov [ebp-$05],dl
 //  for I := 0 to 5 - 1 do
 dec eax
 jnz $0046ccc9


 
Игорь Шевченко ©   (2010-02-01 00:21) [42]


> Обычно в книгах по асму в конце пишут за сколько тактов
> выполняется  команда на x86 - у кого есть посмотрите.


У меня есть. За 1 такт. Но это на старых процессорах, у меня книжка по 486-у.

На более современных о времени выполнения в тактах говорить бессмысленно.


 
Кто б сомневался ©   (2010-02-01 00:21) [43]

Вот поэтому он быстрее, т.к. на константах делать не надо.


 
Anatoly Podgoretsky ©   (2010-02-01 00:22) [44]

> Кто б сомневался  (01.02.2010 00:13:38)  [38]

И заметь вся эта карусель не отключалась и при проверке на CMP, точно также как и для XOR
Не знаю, кто такой SR, но влияние McAfee как и любого антивируса 0, оно может и тормозит при запуске, но никак не мешает уже при прогоне.
Касательно книжек, ты их выбрось, они не имеют смысла после 386/486. Аналогично и для ADD и INC по книжкам INC круче, а на практике наоборот.
Короче ты слил, доказательства не стал приводить, отделался головословными утверждениями.


 
xayam ©   (2010-02-01 00:23) [45]

Удалено модератором


 
Anatoly Podgoretsky ©   (2010-02-01 00:26) [46]

> xayam  (01.02.2010 00:18:40)  [40]

Другой процессор, но все равно XOR проигрывает. Я думаю если найти 486 процессор, может хотя бы там он покажет свою СИЛУ.

Нравятся мне эти знатоки ассеблера, которые оперируют данными начала 80 годов. В итоге у них код на ассеблере получается медленнее эквивалента на Паскале.


 
Anatoly Podgoretsky ©   (2010-02-01 00:28) [47]

> Кто б сомневался  (01.02.2010 00:20:41)  [41]

Так ты еще и асм код читать не умеешь, да CMP выдаешь обработку цикла FOR


 
Anatoly Podgoretsky ©   (2010-02-01 00:29) [48]

> Игорь Шевченко  (01.02.2010 00:21:42)  [42]

Не помню какой именно вариант Пентиума выполнял 5!!! команд за так, когда без пенальти. Core 2 хуже


 
xayam ©   (2010-02-01 00:29) [49]


> Anatoly Podgoretsky ©   (01.02.10 00:26) [46]
> > xayam  (01.02.2010 00:18:40)  [40]
> Другой процессор, но все равно XOR проигрывает.

я тут вспомнил, что у меня распределенные вычисления считают, отключил

xor - 3766
cmp - 1375

все равно проигрывает


 
Anatoly Podgoretsky ©   (2010-02-01 00:30) [50]

> xayam  (01.02.2010 00:23:45)  [45]

Конечно, даже подлоги использует, видимо специально.


 
Кто б сомневался ©   (2010-02-01 00:33) [51]


> Anatoly Podgoretsky ©   (01.02.10 00:28) [47]
>
> > Кто б сомневался  (01.02.2010 00:20:41)  [41]
>
> Так ты еще и асм код читать не умеешь, да CMP выдаешь обработку
> цикла FOR


Да неужели?

А может cmp это A>1?
У вас компилятор оптимизировал константы. весь ваш код
for I := 0 to 2000000000 - 1 do
c := (a>1) <> b;

Он превратил в
//for I := 0 to 5 - 1 do
mov eax,$00000005
dec eax
jnz $0046cd2c


 
KilkennyCat ©   (2010-02-01 00:33) [52]

Я, наверное, тупой программист, но я так и не понял, чем в изначальной задаче применение xor вызвало негативную реакцию (приведенные впоследствии примеры считаю несущественными, ибо есть орешник - там тоже всякого хватает).
Остается только спросить, если бы слово "круче" не прозвучало, реакция была бы такая же?


 
Игорь Шевченко ©   (2010-02-01 00:41) [53]

KilkennyCat ©   (01.02.10 00:33) [52]


> но я так и не понял, чем в изначальной задаче применение
> xor вызвало негативную реакцию


Въезжать дольше.


 
Кто б сомневался ©   (2010-02-01 00:42) [54]

Короче вот правильный код, АП ошибся.

procedure TForm1.Button1Click(Sender: TObject);
var
a: boolean;
i:Integer;
b: boolean;
t:Integer;
c: boolean;
begin
{$O-}

a:= false;
b:=true;
t:=gettickcount;
for I := 0 to 2000000000 - 1 do
  c := a xor b;

ShowMessage(Inttostr(GetTickCount-t));
if c then Caption := "true" else Caption := "false";
t:=gettickcount;
for I := 0 to 2000000000 - 1 do
  c := a <> b;

ShowMessage(Inttostr(GetTickCount-t));

end;


 
Кто б сомневался ©   (2010-02-01 00:43) [55]


> АП ошибся.


см. 51. сработал оптимизатор на константах.


 
KilkennyCat ©   (2010-02-01 00:44) [56]


> Игорь Шевченко ©   (01.02.10 00:41) [53]

Нечитабельно?
Но кому-то другому, а не написавшему. 99% моих исходников никто не увидит, потому что нафиг никому не нужно, и что, мне мучаться и писать удобно да еще с комментариями?


 
Кто б сомневался ©   (2010-02-01 00:44) [57]

который удалил код сравнения ( c := a <> b) . Т.е. не на константах, а на С, которая нигде не использовалась дальше.


 
xayam ©   (2010-02-01 00:46) [58]


> Кто б сомневался ©   (01.02.10 00:42) [54]

xor - 5547
cmp - 7375


 
Кто б сомневался ©   (2010-02-01 00:47) [59]


> Игорь Шевченко ©   (01.02.10 00:41) [53]
>
> KilkennyCat ©   (01.02.10 00:33) [52]
>
>
> > но я так и не понял, чем в изначальной задаче применение
>
> > xor вызвало негативную реакцию
>
>
> Въезжать дольше.


Зачем вы всех равняете по себе. Ведь в A or B не долго въезжать?
Почему тогда A xor B дольше?
Я к примеру сразу "въезжаю", собственно посмотрев на конструкцию if a <> b - сразу предложил вариант.


 
Игорь Шевченко ©   (2010-02-01 00:51) [60]

KilkennyCat ©   (01.02.10 00:44) [56]

Читабельно. Въезжать дольше.

Есть один тонкий момент - со своим кодом каждый программист волен делать, что угодно и никто ему (тем более на delphimaster) не указ. Но когда начинается работа в команде с кодом, обладающем длительным жизненным циклом, тратить время на разбор высеров гениальности не хочется. Поэтому от подобных любителей крутизны стараются избавиться. Чаще всего, увольнением.

Кстати, код, который я привел в [39] - это из VCL. Первый кусок из AdoDB.pas и DB.pas, второй из Classes.pas


 
KilkennyCat ©   (2010-02-01 00:58) [61]


> Игорь Шевченко ©   (01.02.10 00:51) [60]


Ну не знаю. Неоднократно замечал, что вылизанный и оптимизированный код более труден к въезжанию.
Возьмем уж индусский стиль обходиться без циклов или нормальный, их вариант более въезжателен, и циклов знать не надо, и риск в бесконечный уйти нету.


 
Кто б сомневался ©   (2010-02-01 01:03) [62]


> Поэтому от подобных любителей крутизны стараются избавиться.
>  Чаще всего, увольнением.


Все, ты уволен! Над этой твоей конструкцией "a xor b" наши программисты чуть не сломали свои бедные головушки.. :)


 
KilkennyCat ©   (2010-02-01 01:13) [63]


> Кто б сомневался ©   (01.02.10 01:03) [62]

Зря смеешься, кто-то когда-то рассказывал, как тупому программисту в штатах обеспечили супер-пупер условия работы на курорте, лишь бы домучал свою тупейшую часть работы, в то время, когда нормальные трудились в обычном офисе. Я думаю, в конечном итоге он стал начальником.


 
Кто б сомневался ©   (2010-02-01 01:20) [64]


>  else if IsLiteral then Literal := Literal xor True;


Здесь это конечно не в тему.
Т.к. быстрее и круче будет написать

else if IsLiteral then
 Literal := not Literal;

Но таких случаев исключительных можно с любым оператором придумать.
А в сабже топика я выбрал бы именно xor - т.к. до меня эта конструкция доходит по скорости понимания так же как и <>.
Здесь все зависит от того как часто вы работаете с битовой логикой, ваш случай ИШ говорит что вы просто подзабыли немного ее да и все - поэтому вам нужно вспоминать и прокручивать это в голове при чтении кода.
И конечно же по такому поводу никто увольнять не будет, да и выговаривать тоже.


 
xayam ©   (2010-02-01 01:24) [65]

Удалено модератором


 
Аноним ©   (2010-02-01 01:24) [66]

что ж сделают со мной.. я все больше на лиспе пишу
жуть


 
xayam ©   (2010-02-01 01:27) [67]


> Аноним ©   (01.02.10 01:24) [66]
> что ж сделают со мной.. я все больше на лиспе пишу
> жуть

а меня тут пролог заинтересовал, интересный язык


 
KilkennyCat ©   (2010-02-01 01:29) [68]

Вас не уволят, вас просто не возьмут на работу. А если и возьмут, то уволят через суд, будете еще должны предприятию за моральный ущерб аморальным программированием причиненный.


 
Аноним ©   (2010-02-01 01:32) [69]


> за моральный ущерб аморальным программированием причиненный.

дык, это моя цель :-)


 
Германн ©   (2010-02-01 01:39) [70]


> KilkennyCat ©   (01.02.10 01:29) [68]
>
> Вас не уволят, вас просто не возьмут на работу.

Возьмут. Не ври. Если приемом на работу заведует грамотный специалист. За исключением приема на "работу в команду".
Хотя, конечно, инструкция XOR выглядит "чужеродной" в данной конструкции.


 
KilkennyCat ©   (2010-02-01 01:45) [71]

да каким же местом она все-таки чужеродна?!
Почему or, not, and не чужеродны?
И Германн, тебе, с электроникой возящемуся, она ваще должна быть своя в доску.


 
Кто б сомневался ©   (2010-02-01 02:00) [72]


> KilkennyCat ©   (01.02.10 01:45) [71]


+1 я тоже не пойму. or, and, not, не чужеродны, - все чет пишут, а xor чужеродный, хотя из одной бочки. Что за дискриминация XOR?


 
Германн ©   (2010-02-01 02:04) [73]


> KilkennyCat ©   (01.02.10 01:45) [71]
>
> да каким же местом она все-таки чужеродна?!
> Почему or, not, and не чужеродны?
> И Германн, тебе, с электроникой возящемуся, она ваще должна
> быть своя в доску.
>

Мне, как раз, она "своя в доску"!
А вот другим!
XOR работает с битами. С конкретными битами!
В Windows "прозрачно" реализована работа с битовыми масками. И там "or, not, and" вполне понятны. Но ведь там по сути есть работа с байтами!


 
Игорь Шевченко ©   (2010-02-01 02:14) [74]

KilkennyCat ©   (01.02.10 01:45) [71]


> да каким же местом она все-таки чужеродна?!


Побитовая - не чужеродна. В условном выражении чужеродна.

Мастурбация^^^^^^^^^^^Гимнастика для ума начинается, когда xor используется более одного раза в выражении. С and и or все понятно быстрее, до первого нуля или единицы.


 
Германн ©   (2010-02-01 02:21) [75]


> В условном выражении чужеродна.

Тоже криво сказано.


 
vuk ©   (2010-02-01 02:36) [76]

to Германн ©   (01.02.10 02:04) [73]:

> XOR работает с битами. С конкретными битами!


XOR - это такая же булева функция, как AND или OR. И в Delphi работает она в зависимости от применения. Если операнды целые, то побитово, если boolean, то как логическая.

Другое дело, что применение XOR в условных выражениях не всегда прозрачно и требует при чтении кода вспоминать, как выглядит таблица истинности для этой функции.


 
Германн ©   (2010-02-01 02:47) [77]


> vuk ©   (01.02.10 02:36) [76]
>
> to Германн ©   (01.02.10 02:04) [73]:
>
> > XOR работает с битами. С конкретными битами!
>
>
> XOR - это такая же булева функция, как AND или OR. И в Delphi
> работает она в зависимости от применения. Если операнды
> целые, то побитово, если boolean, то как логическая.
>

А то я это первый раз слышу.


 
vuk ©   (2010-02-01 02:51) [78]

to Германн ©   (01.02.10 02:47) [77]


> А то я это первый раз слышу.

Ну и зачем тогда писать, что XOR работает с конкретными битами?


 
Германн ©   (2010-02-01 02:57) [79]


> vuk ©   (01.02.10 02:51) [78]
>
> to Германн ©   (01.02.10 02:47) [77]
>
>
> > А то я это первый раз слышу.
>
> Ну и зачем тогда писать, что XOR работает с конкретными
> битами?
>

Хм.
А ты можешь представить реально нужный пример кода в Windows, когда нужно применять XOR?


 
Германн ©   (2010-02-01 03:15) [80]


> А ты можешь представить реально нужный пример кода в Windows,
>  когда нужно применять XOR?
>

Вот and, or или not - это понятно.



Страницы: 1 2 3 4 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.061 c
15-1270447332
Ламо777
2010-04-05 10:02
2010.08.27
Вопрос знатокам Postgres


2-1271164598
Равиль
2010-04-13 17:16
2010.08.27
Не работает SavePictureDialog1.Execute


15-1269950611
AlexDan
2010-03-30 16:03
2010.08.27
Зона ru и паспорт


15-1268515802
Юрий
2010-03-14 00:30
2010.08.27
С днем рождения ! 14 марта 2010 воскресенье


2-1272475993
DROWSY
2010-04-28 21:33
2010.08.27
редактирование в гриде.