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.