Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: when a & is faster than a && ?

Author: Antonio Dieguez

Date: 21:01:42 09/20/01

Go up one level in this thread



hi Dann

if (turno==0)
{
     if (eval0id1[indice]==p->idHashseg && eval0id2[indice]==p->idHashseg2)
     { return cualeval0[indice]; }
}
else
{
     if (eval1id1[indice]==p->idHashseg && eval1id2[indice]==p->idHashseg2)
     { return cualeval1[indice]; }
}

you said to me the other day that putting &s there was faster in the profiling
you did.
That operations seemed expensive, I supose because are big arrays. And usually
if one is false(wich I guess happen at least 80% of the time) then both are
false. So I was puzzled why the & is faster there.

be well.


>>can you tell me?
>
>Depends on a zillion things.  Sometimes, you cannot make that translation.
>
>For instance, if you want to substitute & for &&, then you must have both
>operands be boolean (IOW: _ONLY_ take on the values 0 and/or 1).
>
>This is not a valid translation:
>int a = 1;
>int b = 2;
>
>if ((a && b) == (a & b) puts("My compiler is broken);
>
>
>If the cost of evaluating the operands is very high, then it may be better to
>use &&.
>
>Example:
>
>if (foo() && bar()) then foobar();
>
>Suppose that foo() is fast, and bar() is really slow.  Further, foo() is 0 most
>of the time.  Then you would rather have the short circuit evaluation and
>branch.
>
>Missed branch predictions are expensive on newer chips, but it is not always an
>easy thing to see when one method is faster than the other.



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.