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

Вниз

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

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

Наверх




Память: 0.62 MB
Время: 0.074 c
2-1266443303
Funtik
2010-02-18 00:48
2010.08.27
LIstBox


15-1271968202
Юрий
2010-04-23 00:30
2010.08.27
С днем рождения ! 23 апреля 2010 пятница


11-1218719894
Дмитрий
2008-08-14 17:18
2010.08.27
Как узнать объем оперативной памяти


15-1269507983
iZEN
2010-03-25 12:06
2010.08.27
Локальный линуксокапец


15-1275924128
bss
2010-06-07 19:22
2010.08.27
Регулярные выражения: как проверить вхождение числа в диапазон





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский