Форум: "Прочее";
Текущий архив: 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.075 c