Author: Uri Blass
Date: 08:39:16 02/19/03
Go up one level in this thread
On February 19, 2003 at 10:45:27, Dezhi Zhao wrote:
>On February 19, 2003 at 09:57:13, Uri Blass wrote:
>
>>On February 19, 2003 at 09:41:35, Dezhi Zhao wrote:
>>
>>>On February 19, 2003 at 06:39:49, Uri Blass wrote:
>>>
>>>>I try to do movei faster and there are things that are supposed to do it
>>>>slightly faster but for some reasons do it slower so I deleted them(Maybe it is
>>>>better if I ignore it because it is a compiler optimization noise but I do not
>>>>like to see the program slower even if it is only 0.1% slower).
>>>>
>>>>Note that I do not use now compiler optimization except optimize for speed with
>>>>visual C++6.
>>>>
>>>>
>>>>Here is an example:
>>>>My function of adding pawn moves to the stack of moves get 2 numbers(from,to).
>>>>
>>>>I found that special functions to generate white moves one square forward,white
>>>>moves 2 pawns forward,black pawns one square forward,...helped me to do movei
>>>>faster.
>>>>
>>>>Common sense say that now I do not need 2 numbers in my functions because
>>>>I always have to=from-8 in
>>>>
>>>>Here is my function.
>>>>to is always from-8 and the question is if I can take advantage of that fact.
>>>>
>>>>static void gen_quietblackslowpawns(int from,int to)
>>>>{
>>>> gen_t *g;
>>>> if (to<=7)
>>>> {
>>>> gen_promote(from,to);
>>>> return;
>>>> }
>>>> g=&gen_dat[first_move[ply+1]++];
>>>> g->m.b.from=(char)from;
>>>> g->m.b.to=(char) to;
>>>> g->m.b.promote=0;
>>>> g->m.b.bits=16;
>>>> #if MODE!=MODE_PERFT
>>>> g->score = history[from][to];
>>>> g->index=-10000;
>>>> #endif
>>>>}
>>>
>>>I think you can get a little from that fact. It will save a few push and pop
>>>operations.
>>>
>>>By the way, if you really want to optimize this function, you should consider
>>>re-designing the b structure so that the move can be saved in a single write
>>>operation, instead of 4.
>>
>>Thanks for the advise but how do I do it
>>
>>I have the same data structure as tscp here(Note that 90% of my code is
>>different than tscp but I copied part of it's data structures).
>>
>>Here is my b structure
>>
>>typedef struct
>>{
>> char from;
>> char to;
>> char promote;
>> char bits;
>>}
>>move_bytes;
>>
>>typedef union
>>{
>> move_bytes b;
>> int u;
>>}
>>move;
>>
>>
>>I can think about deleting the b and have something like
>>g->m.u=from+(to<<8)+(promote<<16)+bits<<24) but the question in that case is if
>
>yes. you can go this way. for this function, the last 2 items are simple
>constants anyways.
>
>>it is not going to do accesing the varaibles slower because there are places in
>>the code when I use bits and now I will need to use things like u>>24.
>>
>>I have no idea about the price of these things so I cannot evaluate speed here.
>>
>>Uri
>
>Not that complicated if you think it twice. I do know the semantics of bits
>thare. However I assume it is a flag. If it is the case, you do not need to do a
>shift to make it flat. Consider testing the other way without shift operations:
>u & (16 << 24)
>So you can avoid shift operations in many cases. So you still gain something
>here.
>
>dzhao
You are right
I see that I already got a small speed improvement of about 0.1% from
changing the 4 write operation to one command in some functions
g->m.u=(from|(to<<8)|(16<<24));
I still did not delete the b structure.
I hope that deleting the b structure and working with u can do my code faster.
Uri
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.