Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: question about branchless code

Author: Vincent Diepeveen

Date: 04:27:40 02/27/03

Go up one level in this thread


On February 27, 2003 at 07:22:37, Vincent Diepeveen wrote:

>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.
>>
>>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?
>
>there is many ways to speed this up. just guessing from head (so without looking
>to the assembly output it produces):
>
>do {
>  int tempty=info[target]-EMPTA;
>  target += 8;
>} while( !tempty );

oh i realize you want to scan.

try this with a good compiler (for example visual c++ sp4 processor pack
or gcc 3.2.x whatever is latest):

do {
  int tempty=info[target]-EMPTA;
  if( !tempty ) // good compilers do this branchless
    target += 8;
} while( target < 64 );


>// of course target is not 64 now as precondition
>
>>2)I understood from previous discussion that for some reason ? is considered
>>branchless code.
>
>that is not true in itself.
>
>>What is the reason for it.
>>
>>It seems to me that using ? is the same as using if.
>>If it is not the case then what is the difference?
>
>it is a shorter way to write 'if then else'.
>
>Compilers can optimize it better when there is no arrays in them.
>
>>Uri



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.