Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: question about branchless code

Author: Heiner Marxen

Date: 11:58:52 02/26/03

Go up one level in this thread


On February 26, 2003 at 14:04:16, Uri Blass wrote:

>I had the following code in my program
>
>do
>{
>...
>if (info[target]==EMPTA)
>  target+=8;
>else
>  target=64;
>}
>while (target<64)
>
>I found that changing it to else break did not do my program faster.

Assuming that the variable "target" is not read after this loop (the value
is "dead"), I would assume that any decent optimizer will produce code
as if there had been a "break" instead of "target=64".

Obviously, your compiler does so.
You may even inspect the generated assembler for both versions.
When they are just equal you need not even understand the assembly.

>I think that with break I have branches and without break the compiler can
>translate it to
>
>target=((info[target]==EMPTA)?target+8:64);
>
>My questions are
>1)How can I write the code as branchless code without target=64 that is a waste
>of time?

I expect it to be optimized away.
Hence it is not really a waste of time.

I'd suggest you choose the version that best fits your style, i.e. which
is most readable for you.  I would prefer to terminate a loop with a break
instead of manipulating the loop variable to do so in the next iteration.
YMMV.


>2)I understood from previous discussion that for some reason ? is considered
>branchless code.
>What is the reason for it.

I do not consider ?: to be branchless.
In most cases it _does_ generate branches.

>It seems to me that using ? is the same as using if.

Yes, I agree.

>If it is not the case then what is the difference?

The ?: is an expression.
"if" is a statement.

Using ?: within a larger expression can avoid repeating the surrounding
part in the then- and else-part of the equivalent if/else code.
Sometimes ?: is just more readable, since it is more compact.

  x = (a<b) ? a : b;

vs

  if (a<b) x=a; else x=b;

or even

  if (a<b) {
    x=a;
  }else {
    x=b;
  }

I clearly prefer the first version.  (Using a min macro may be even better).

Cheers,
Heiner



This page took 0 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.